@nonoun/native-ai 1.0.21 → 1.0.23

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 (144) hide show
  1. package/dist/a2ui/a2ui-diagnostics.d.ts +31 -0
  2. package/dist/a2ui/a2ui-diagnostics.d.ts.map +1 -0
  3. package/dist/a2ui/a2ui-element.d.ts +30 -0
  4. package/dist/a2ui/a2ui-element.d.ts.map +1 -0
  5. package/dist/a2ui/a2ui-presets.d.ts +22 -0
  6. package/dist/a2ui/a2ui-presets.d.ts.map +1 -0
  7. package/dist/a2ui/adapters/a2a-adapter.d.ts +38 -0
  8. package/dist/a2ui/adapters/a2a-adapter.d.ts.map +1 -0
  9. package/dist/a2ui/adapters/adapter-types.d.ts +19 -0
  10. package/dist/a2ui/adapters/adapter-types.d.ts.map +1 -0
  11. package/dist/a2ui/adapters/ag-ui-adapter.d.ts +42 -0
  12. package/dist/a2ui/adapters/ag-ui-adapter.d.ts.map +1 -0
  13. package/dist/a2ui/adapters/direct-adapter.d.ts +30 -0
  14. package/dist/a2ui/adapters/direct-adapter.d.ts.map +1 -0
  15. package/dist/a2ui/adapters/index.d.ts +8 -0
  16. package/dist/a2ui/adapters/index.d.ts.map +1 -0
  17. package/dist/a2ui/index.d.ts +15 -0
  18. package/dist/a2ui/index.d.ts.map +1 -0
  19. package/dist/a2ui/install.d.ts +23 -0
  20. package/dist/a2ui/install.d.ts.map +1 -0
  21. package/dist/a2ui/protocol/a2ui-adapter.d.ts +52 -0
  22. package/dist/a2ui/protocol/a2ui-adapter.d.ts.map +1 -0
  23. package/dist/a2ui/protocol/a2ui-component-map.d.ts +98 -0
  24. package/dist/a2ui/protocol/a2ui-component-map.d.ts.map +1 -0
  25. package/dist/a2ui/protocol/a2ui-composition-map.d.ts +101 -0
  26. package/dist/a2ui/protocol/a2ui-composition-map.d.ts.map +1 -0
  27. package/dist/a2ui/protocol/a2ui-converter.d.ts +37 -0
  28. package/dist/a2ui/protocol/a2ui-converter.d.ts.map +1 -0
  29. package/dist/a2ui/protocol/a2ui-surface.d.ts +34 -0
  30. package/dist/a2ui/protocol/a2ui-surface.d.ts.map +1 -0
  31. package/dist/a2ui/protocol/a2ui-transport.d.ts +80 -0
  32. package/dist/a2ui/protocol/a2ui-transport.d.ts.map +1 -0
  33. package/dist/a2ui/protocol/a2ui-types.d.ts +104 -0
  34. package/dist/a2ui/protocol/a2ui-types.d.ts.map +1 -0
  35. package/dist/a2ui/protocol/index.d.ts +15 -0
  36. package/dist/a2ui/protocol/index.d.ts.map +1 -0
  37. package/dist/a2ui/protocol/kernel-bridge.d.ts +114 -0
  38. package/dist/a2ui/protocol/kernel-bridge.d.ts.map +1 -0
  39. package/dist/a2ui/register.d.ts +12 -0
  40. package/dist/a2ui/register.d.ts.map +1 -0
  41. package/dist/a2ui/session/agent-session.d.ts +44 -0
  42. package/dist/a2ui/session/agent-session.d.ts.map +1 -0
  43. package/dist/a2ui/session/catalog.d.ts +41 -0
  44. package/dist/a2ui/session/catalog.d.ts.map +1 -0
  45. package/dist/a2ui/session/event-emitter.d.ts +17 -0
  46. package/dist/a2ui/session/event-emitter.d.ts.map +1 -0
  47. package/dist/a2ui/session/index.d.ts +9 -0
  48. package/dist/a2ui/session/index.d.ts.map +1 -0
  49. package/dist/a2ui/session/session-manager.d.ts +33 -0
  50. package/dist/a2ui/session/session-manager.d.ts.map +1 -0
  51. package/dist/a2ui/session/surface-registry.d.ts +32 -0
  52. package/dist/a2ui/session/surface-registry.d.ts.map +1 -0
  53. package/dist/a2ui/session/types.d.ts +27 -0
  54. package/dist/a2ui/session/types.d.ts.map +1 -0
  55. package/dist/chat/avatar/chat-avatar-element.d.ts +18 -0
  56. package/dist/chat/avatar/chat-avatar-element.d.ts.map +1 -0
  57. package/dist/chat/avatar/index.d.ts +2 -0
  58. package/dist/chat/avatar/index.d.ts.map +1 -0
  59. package/dist/chat/avatar/n-chat-avatar.d.ts +2 -0
  60. package/dist/chat/avatar/n-chat-avatar.d.ts.map +1 -0
  61. package/dist/chat/chat-input-element.d.ts +35 -0
  62. package/dist/chat/chat-input-element.d.ts.map +1 -0
  63. package/dist/chat/chat-panel-element.d.ts +100 -0
  64. package/dist/chat/chat-panel-element.d.ts.map +1 -0
  65. package/dist/chat/feed/chat-feed-element.d.ts +48 -0
  66. package/dist/chat/feed/chat-feed-element.d.ts.map +1 -0
  67. package/dist/chat/feed/index.d.ts +2 -0
  68. package/dist/chat/feed/index.d.ts.map +1 -0
  69. package/dist/chat/feed/n-chat-feed.d.ts +2 -0
  70. package/dist/chat/feed/n-chat-feed.d.ts.map +1 -0
  71. package/dist/chat/gateway/adapter-chatgpt.d.ts +67 -0
  72. package/dist/chat/gateway/adapter-chatgpt.d.ts.map +1 -0
  73. package/dist/chat/gateway/adapter-claude.d.ts +68 -0
  74. package/dist/chat/gateway/adapter-claude.d.ts.map +1 -0
  75. package/dist/chat/gateway/adapter-mock.d.ts +3 -0
  76. package/dist/chat/gateway/adapter-mock.d.ts.map +1 -0
  77. package/dist/chat/gateway/adapter.d.ts +71 -0
  78. package/dist/chat/gateway/adapter.d.ts.map +1 -0
  79. package/dist/chat/gateway/controller.d.ts +46 -0
  80. package/dist/chat/gateway/controller.d.ts.map +1 -0
  81. package/dist/chat/gateway/index.d.ts +9 -0
  82. package/dist/chat/gateway/index.d.ts.map +1 -0
  83. package/dist/chat/gateway/runtime.d.ts +53 -0
  84. package/dist/chat/gateway/runtime.d.ts.map +1 -0
  85. package/dist/chat/gateway/types.d.ts +73 -0
  86. package/dist/chat/gateway/types.d.ts.map +1 -0
  87. package/dist/chat/gateway.d.ts +2 -0
  88. package/dist/chat/gateway.d.ts.map +1 -0
  89. package/dist/chat/index.d.ts +17 -0
  90. package/dist/chat/index.d.ts.map +1 -0
  91. package/dist/chat/message/chat-input-structured-element.d.ts +43 -0
  92. package/dist/chat/message/chat-input-structured-element.d.ts.map +1 -0
  93. package/dist/chat/message/chat-message-activity-element.d.ts +32 -0
  94. package/dist/chat/message/chat-message-activity-element.d.ts.map +1 -0
  95. package/dist/chat/message/chat-message-element.d.ts +44 -0
  96. package/dist/chat/message/chat-message-element.d.ts.map +1 -0
  97. package/dist/chat/message/chat-message-genui-element.d.ts +45 -0
  98. package/dist/chat/message/chat-message-genui-element.d.ts.map +1 -0
  99. package/dist/chat/message/chat-message-seed-element.d.ts +33 -0
  100. package/dist/chat/message/chat-message-seed-element.d.ts.map +1 -0
  101. package/dist/chat/message/chat-message-text-element.d.ts +37 -0
  102. package/dist/chat/message/chat-message-text-element.d.ts.map +1 -0
  103. package/dist/chat/message/chat-messages-element.d.ts +39 -0
  104. package/dist/chat/message/chat-messages-element.d.ts.map +1 -0
  105. package/dist/chat/message/index.d.ts +8 -0
  106. package/dist/chat/message/index.d.ts.map +1 -0
  107. package/dist/chat/message/n-chat-message.d.ts +2 -0
  108. package/dist/chat/message/n-chat-message.d.ts.map +1 -0
  109. package/dist/chat/register.d.ts +13 -0
  110. package/dist/chat/register.d.ts.map +1 -0
  111. package/dist/chat/stream/classify.d.ts +19 -0
  112. package/dist/chat/stream/classify.d.ts.map +1 -0
  113. package/dist/chat/stream/create-transport.d.ts +19 -0
  114. package/dist/chat/stream/create-transport.d.ts.map +1 -0
  115. package/dist/chat/stream/index.d.ts +9 -0
  116. package/dist/chat/stream/index.d.ts.map +1 -0
  117. package/dist/chat/stream/parse-json.d.ts +9 -0
  118. package/dist/chat/stream/parse-json.d.ts.map +1 -0
  119. package/dist/chat/stream/parse-ndjson.d.ts +9 -0
  120. package/dist/chat/stream/parse-ndjson.d.ts.map +1 -0
  121. package/dist/chat/stream/parse-sse.d.ts +9 -0
  122. package/dist/chat/stream/parse-sse.d.ts.map +1 -0
  123. package/dist/chat/stream/types.d.ts +42 -0
  124. package/dist/chat/stream/types.d.ts.map +1 -0
  125. package/dist/chat/telemetry/emitter.d.ts +20 -0
  126. package/dist/chat/telemetry/emitter.d.ts.map +1 -0
  127. package/dist/chat/telemetry/events.d.ts +11 -0
  128. package/dist/chat/telemetry/events.d.ts.map +1 -0
  129. package/dist/chat/telemetry/index.d.ts +5 -0
  130. package/dist/chat/telemetry/index.d.ts.map +1 -0
  131. package/dist/chat/telemetry/redactor.d.ts +17 -0
  132. package/dist/chat/telemetry/redactor.d.ts.map +1 -0
  133. package/dist/chat/telemetry/types.d.ts +27 -0
  134. package/dist/chat/telemetry/types.d.ts.map +1 -0
  135. package/dist/gateway.d.ts +2 -0
  136. package/dist/gateway.d.ts.map +1 -0
  137. package/dist/index.d.ts +5 -0
  138. package/dist/index.d.ts.map +1 -0
  139. package/dist/native-ai.css +1567 -0
  140. package/dist/native-ai.js +252 -202
  141. package/dist/register.d.ts +12 -0
  142. package/dist/register.d.ts.map +1 -0
  143. package/dist/register.js +246 -196
  144. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/a2ui/session/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAI/D,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,YAAY,CAAC;AAIlF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,cAAc,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACzE,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACvD;AAID,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAID,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAC;IAC9C,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B"}
@@ -0,0 +1,18 @@
1
+ import { NativeElement } from '@nonoun/native-ui';
2
+ /**
3
+ * Chat avatar — renders an image, icon, or initials for a chat participant.
4
+ *
5
+ * Priority: `src` (image) → `icon` (phosphor icon) → `name` (initials) → default icon.
6
+ *
7
+ * @attr {string} src - Image URL
8
+ * @attr {string} name - Display name (used for initials fallback)
9
+ * @attr {string} icon - Phosphor icon name
10
+ */
11
+ export declare class NChatAvatar extends NativeElement {
12
+ #private;
13
+ static observedAttributes: string[];
14
+ attributeChangedCallback(name: string, old: string | null, val: string | null): void;
15
+ setup(): void;
16
+ teardown(): void;
17
+ }
18
+ //# sourceMappingURL=chat-avatar-element.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-avatar-element.d.ts","sourceRoot":"","sources":["../../../src/chat/avatar/chat-avatar-element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAU,MAAM,mBAAmB,CAAC;AAE1D;;;;;;;;GAQG;AACH,qBAAa,WAAY,SAAQ,aAAa;;IAC5C,MAAM,CAAC,kBAAkB,WAA2B;IAMpD,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAUpF,KAAK,IAAI,IAAI;IA2Cb,QAAQ,IAAI,IAAI;CAIjB"}
@@ -0,0 +1,2 @@
1
+ export { NChatAvatar } from './chat-avatar-element.ts';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/chat/avatar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=n-chat-avatar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"n-chat-avatar.d.ts","sourceRoot":"","sources":["../../../src/chat/avatar/n-chat-avatar.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ import { NativeElement } from '@nonoun/native-ui';
2
+ /**
3
+ * Chat message input with textarea, submit button, and Enter-to-send behavior.
4
+ * @attr {boolean} disabled - Disables interaction
5
+ * @attr {string} value - Initial textarea value
6
+ * @attr {boolean} busy - Disables submit but keeps textarea enabled
7
+ * @attr {boolean} no-enter-submit - Disables Enter key submission
8
+ * @attr {boolean} no-auto-clear - Prevents clearing the textarea after send
9
+ * @fires native:send - Fired on submit with `{ value }` detail
10
+ * @fires native:composer-submit-blocked - Fired when submit is attempted while busy
11
+ * @fires native:composer-focus - Fired when the composer textarea gains focus
12
+ * @fires native:composer-blur - Fired when the composer textarea loses focus
13
+ */
14
+ export declare class NChatInput extends NativeElement {
15
+ #private;
16
+ static observedAttributes: string[];
17
+ constructor();
18
+ get value(): string;
19
+ set value(val: string);
20
+ get disabled(): boolean;
21
+ set disabled(val: boolean);
22
+ get busy(): boolean;
23
+ set busy(val: boolean);
24
+ /** Focus the composer textarea. */
25
+ focusComposer(): void;
26
+ /** Blur the composer textarea. */
27
+ blurComposer(): void;
28
+ attributeChangedCallback(name: string, old: string | null, val: string | null): void;
29
+ setup(): void;
30
+ teardown(): void;
31
+ }
32
+ /** Advanced multi-zone variant — same behavior, distinct tag for CSS targeting. */
33
+ export declare class NChatInputAdvanced extends NChatInput {
34
+ }
35
+ //# sourceMappingURL=chat-input-element.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-input-element.d.ts","sourceRoot":"","sources":["../../src/chat/chat-input-element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAgC,MAAM,mBAAmB,CAAC;AAGhF;;;;;;;;;;;GAWG;AACH,qBAAa,UAAW,SAAQ,aAAa;;IAC3C,MAAM,CAAC,kBAAkB,WAAiC;;IAe1D,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,KAAK,CAAC,GAAG,EAAE,MAAM,EAEpB;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,QAAQ,CAAC,GAAG,EAAE,OAAO,EAGxB;IAED,IAAI,IAAI,IAAI,OAAO,CAElB;IAED,IAAI,IAAI,CAAC,GAAG,EAAE,OAAO,EAGpB;IAED,mCAAmC;IACnC,aAAa,IAAI,IAAI;IAKrB,kCAAkC;IAClC,YAAY,IAAI,IAAI;IAOpB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAkBpF,KAAK,IAAI,IAAI;IA+Cb,QAAQ,IAAI,IAAI;CAsHjB;AAED,mFAAmF;AACnF,qBAAa,kBAAmB,SAAQ,UAAU;CAAG"}
@@ -0,0 +1,100 @@
1
+ import { NativeElement } from '@nonoun/native-ui';
2
+ import type { GatewayConfig } from './gateway/adapter';
3
+ export type AutoFocusPolicy = 'open-request' | 'ready' | 'never';
4
+ export interface ChatPanelOpenOptions {
5
+ focusComposer?: boolean;
6
+ reason?: string;
7
+ }
8
+ export interface FocusComposerOptions {
9
+ cursor?: 'start' | 'end' | 'preserve';
10
+ }
11
+ export interface ModelOption {
12
+ value: string;
13
+ label?: string;
14
+ }
15
+ /**
16
+ * Stamped panel for the chat interface.
17
+ *
18
+ * Creates `<header>` (icon, title), `<section>` containing
19
+ * `<n-chat-content>`, and `<footer>` with `<n-chat-input>` directly
20
+ * as children. The host element itself is the panel surface.
21
+ *
22
+ * ## Extension Points
23
+ *
24
+ * **Header trailing slot** — move consumer-provided controls into the header:
25
+ * ```html
26
+ * <native-chat-panel>
27
+ * <div slot="header-trailing"><n-button variant="ghost">Custom</n-button></div>
28
+ * </native-chat-panel>
29
+ * ```
30
+ *
31
+ * **Footer leading slot** — insert content before the chat input:
32
+ * ```html
33
+ * <native-chat-panel>
34
+ * <div slot="footer-leading">Powered by AI</div>
35
+ * </native-chat-panel>
36
+ * ```
37
+ *
38
+ * **Stop / Restart buttons** — toggle via attributes:
39
+ * ```html
40
+ * <native-chat-panel show-stop></native-chat-panel>
41
+ * ```
42
+ * @attr {boolean} show-stop - Show a stop button in the header; fires `native:chat-stop`
43
+ * @attr {boolean} show-restart - Show a restart button in the header; fires `native:chat-restart`
44
+ * @attr {string} auto-focus-policy - When to auto-focus the composer: 'open-request' (default), 'ready', 'never'
45
+ * @attr {string} model - Currently selected model value
46
+ * @fires native:chat-stop - Fired when the stop button is pressed
47
+ * @fires native:chat-restart - Fired when the restart button is pressed
48
+ * @fires native:send - Fired on submit with `{ value }` detail
49
+ * @fires native:chat-opened - Fired when the panel opens
50
+ * @fires native:chat-closed - Fired when the panel closes
51
+ * @fires native:composer-focused - Fired when the composer receives focus via API/policy
52
+ * @fires native:composer-focus-failed - Fired when focusComposer() fails after retries
53
+ * @fires native:model-change - Fired when user selects a different model. Detail: `{ value, previousValue }`
54
+ * @attr {string} models - Comma-separated model IDs (e.g. 'claude-haiku-4-5-20251001,gpt-4.1-mini'). Parsed into ModelOption[] with value=label=id.
55
+ * @attr {string} gateway - Gateway adapter: 'openai' or 'claude'. When set, panel handles send/stream automatically
56
+ * @attr {string} gateway-url - Base URL for the gateway API (e.g. '/api/chat' or 'https://api.openai.com/v1')
57
+ * @attr {string} gateway-config - JSON config for the adapter (model, apiKey, system, etc.)
58
+ * @attr {string} gateway-urls - JSON map of provider prefixes to URLs (e.g. '{"claude":"/api/anthropic","openai":"/api/openai"}'). When set, auto-switches gateway based on model prefix.
59
+ */
60
+ export declare class NChatPanel extends NativeElement {
61
+ #private;
62
+ static readonly MAX_CONTEXT_MESSAGES = 50;
63
+ static observedAttributes: string[];
64
+ attributeChangedCallback(name: string, old: string | null, val: string | null): void;
65
+ get showStop(): boolean;
66
+ set showStop(val: boolean);
67
+ get showRestart(): boolean;
68
+ set showRestart(val: boolean);
69
+ get autoFocusPolicy(): AutoFocusPolicy;
70
+ set autoFocusPolicy(val: AutoFocusPolicy);
71
+ /** List of available models for the model picker. */
72
+ get models(): ModelOption[];
73
+ set models(val: ModelOption[]);
74
+ /** Currently selected model value. */
75
+ get model(): string | null;
76
+ set model(val: string | null);
77
+ /** Gateway adapter type: 'openai' or 'claude'. When set, panel handles send/stream automatically. */
78
+ get gateway(): string | null;
79
+ set gateway(val: string | null);
80
+ /** Base URL for the gateway API. */
81
+ get gatewayUrl(): string | null;
82
+ set gatewayUrl(val: string | null);
83
+ /** Configuration for the gateway adapter (model, apiKey, system, etc.). */
84
+ get gatewayConfig(): GatewayConfig | null;
85
+ set gatewayConfig(val: GatewayConfig | null);
86
+ /** Map of provider prefixes to gateway URLs. Enables auto-switching gateway based on model prefix. */
87
+ get gatewayUrls(): Record<string, string> | null;
88
+ set gatewayUrls(val: Record<string, string> | null);
89
+ /** Whether the panel is currently streaming a response. Read-only. */
90
+ get streaming(): boolean;
91
+ /** Open the panel. Optionally focus the composer. */
92
+ open(options?: ChatPanelOpenOptions): void;
93
+ /** Close the panel. */
94
+ close(reason?: string): void;
95
+ /** Focus the composer input. */
96
+ focusComposer(options?: FocusComposerOptions, by?: 'api' | 'user' | 'policy'): void;
97
+ setup(): void;
98
+ teardown(): void;
99
+ }
100
+ //# sourceMappingURL=chat-panel-element.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-panel-element.d.ts","sourceRoot":"","sources":["../../src/chat/chat-panel-element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAU,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAkB,aAAa,EAAgC,MAAM,mBAAmB,CAAC;AAWrG,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG,OAAO,GAAG,OAAO,CAAC;AAEjE,MAAM,WAAW,oBAAoB;IACnC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,UAAU,CAAC;CACvC;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,qBAAa,UAAW,SAAQ,aAAa;;IAC3C,MAAM,CAAC,QAAQ,CAAC,oBAAoB,MAAM;IAC1C,MAAM,CAAC,kBAAkB,WAA6I;IAiCtK,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IA0DpF,IAAI,QAAQ,IAAI,OAAO,CAAiC;IACxD,IAAI,QAAQ,CAAC,GAAG,EAAE,OAAO,EAGxB;IAED,IAAI,WAAW,IAAI,OAAO,CAAoC;IAC9D,IAAI,WAAW,CAAC,GAAG,EAAE,OAAO,EAG3B;IAED,IAAI,eAAe,IAAI,eAAe,CAAwC;IAC9E,IAAI,eAAe,CAAC,GAAG,EAAE,eAAe,EAGvC;IAED,qDAAqD;IACrD,IAAI,MAAM,IAAI,WAAW,EAAE,CAA+B;IAC1D,IAAI,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,EAa5B;IAED,sCAAsC;IACtC,IAAI,KAAK,IAAI,MAAM,GAAG,IAAI,CAA8B;IACxD,IAAI,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAO3B;IAED,qGAAqG;IACrG,IAAI,OAAO,IAAI,MAAM,GAAG,IAAI,CAAgC;IAC5D,IAAI,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAI7B;IAED,oCAAoC;IACpC,IAAI,UAAU,IAAI,MAAM,GAAG,IAAI,CAAmC;IAClE,IAAI,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAIhC;IAED,2EAA2E;IAC3E,IAAI,aAAa,IAAI,aAAa,GAAG,IAAI,CAAsC;IAC/E,IAAI,aAAa,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,EAI1C;IAED,sGAAsG;IACtG,IAAI,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAoC;IACpF,IAAI,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,EAIjD;IAED,sEAAsE;IACtE,IAAI,SAAS,IAAI,OAAO,CAAkC;IAE1D,qDAAqD;IACrD,IAAI,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,IAAI;IAkB1C,uBAAuB;IACvB,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAU5B,gCAAgC;IAChC,aAAa,CAAC,OAAO,CAAC,EAAE,oBAAoB,EAAE,EAAE,GAAE,KAAK,GAAG,MAAM,GAAG,QAAgB,GAAG,IAAI;IAM1F,KAAK,IAAI,IAAI;IAgSb,QAAQ,IAAI,IAAI;CA4ZjB"}
@@ -0,0 +1,48 @@
1
+ import { NativeElement } from '@nonoun/native-ui';
2
+ /**
3
+ * Chat feed coordinator — scrollable thread of message groups.
4
+ *
5
+ * Wraps `n-chat-messages` groups and manages auto-scroll behavior.
6
+ * When pinned to bottom, new content automatically scrolls into view.
7
+ *
8
+ * ```html
9
+ * <n-chat-feed auto-scroll>
10
+ * <n-chat-messages role="assistant">...</n-chat-messages>
11
+ * <n-chat-messages role="user">...</n-chat-messages>
12
+ * </n-chat-feed>
13
+ * ```
14
+ *
15
+ * ### Virtualization (opt-in)
16
+ *
17
+ * ```html
18
+ * <n-chat-feed virtual virtual-item-height="80" virtual-overscan="8">
19
+ * </n-chat-feed>
20
+ * ```
21
+ *
22
+ * Set `items` and `itemRenderer` properties for programmatic data-driven rendering.
23
+ *
24
+ * @attr {boolean} auto-scroll - Enable auto-scroll to bottom on new content (default: true)
25
+ * @attr {boolean} virtual - Enable virtual scroll windowing
26
+ * @attr {string} virtual-item-height - Estimated item height in px (default: 80)
27
+ * @attr {string} virtual-overscan - Number of extra items to render outside viewport (default: 5)
28
+ * @fires native:feed-scroll - Fired when scroll pinned state changes
29
+ * @fires native:range-change - Fired when virtual scroll range changes
30
+ */
31
+ export declare class NChatFeed extends NativeElement {
32
+ #private;
33
+ static observedAttributes: string[];
34
+ constructor();
35
+ get isPinned(): boolean;
36
+ /** Scroll to the bottom of the feed. */
37
+ scrollToBottom(smooth?: boolean): void;
38
+ /** Data items for virtual rendering. */
39
+ get items(): unknown[];
40
+ set items(val: unknown[]);
41
+ /** Callback that creates an HTMLElement from a data item. */
42
+ get itemRenderer(): ((item: unknown, index: number) => HTMLElement) | null;
43
+ set itemRenderer(fn: ((item: unknown, index: number) => HTMLElement) | null);
44
+ attributeChangedCallback(name: string, old: string | null, val: string | null): void;
45
+ setup(): void;
46
+ teardown(): void;
47
+ }
48
+ //# sourceMappingURL=chat-feed-element.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-feed-element.d.ts","sourceRoot":"","sources":["../../../src/chat/feed/chat-feed-element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAmC,MAAM,mBAAmB,CAAC;AAInF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,SAAU,SAAQ,aAAa;;IAC1C,MAAM,CAAC,kBAAkB,WAAuF;;IAoBhH,IAAI,QAAQ,IAAI,OAAO,CAAiC;IAExD,wCAAwC;IACxC,cAAc,CAAC,MAAM,UAAO,GAAG,IAAI;IAQnC,wCAAwC;IACxC,IAAI,KAAK,IAAI,OAAO,EAAE,CAA8B;IACpD,IAAI,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,EAKvB;IAED,6DAA6D;IAC7D,IAAI,YAAY,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,WAAW,CAAC,GAAG,IAAI,CAA+B;IACzG,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,WAAW,CAAC,GAAG,IAAI,EAE1E;IAID,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IA0BpF,KAAK,IAAI,IAAI;IA8Bb,QAAQ,IAAI,IAAI;CAsHjB"}
@@ -0,0 +1,2 @@
1
+ export { NChatFeed } from './chat-feed-element.ts';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/chat/feed/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=n-chat-feed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"n-chat-feed.d.ts","sourceRoot":"","sources":["../../../src/chat/feed/n-chat-feed.ts"],"names":[],"mappings":""}
@@ -0,0 +1,67 @@
1
+ import type { GatewayAdapter, GatewayAdapterFactory, GatewayConfig } from './adapter';
2
+ import type { BootstrapResponse, ChatMessage, ClientMetadataResponse, GatewayModel, GatewayHealth, GatewayStreamEvent, SendMessageResponse, SendMessageStreamChunk, SendTransportMode } from './types';
3
+ import { fetchWithRetry } from './runtime';
4
+ interface OpenAiGatewayAdapterConfig {
5
+ clientId: string;
6
+ baseUrl: string;
7
+ model: string;
8
+ maxTokens: number;
9
+ system?: string;
10
+ temperature?: number;
11
+ apiKey?: string | null;
12
+ organization?: string | null;
13
+ defaultSessionId?: string | null;
14
+ onEvent?: Parameters<typeof fetchWithRetry>[0]['onEvent'];
15
+ }
16
+ export declare class OpenAiGatewayAdapter implements GatewayAdapter {
17
+ private readonly clientId;
18
+ private readonly baseUrl;
19
+ private readonly model;
20
+ private readonly maxTokens;
21
+ private readonly system?;
22
+ private readonly temperature?;
23
+ private readonly apiKey?;
24
+ private readonly organization?;
25
+ private readonly defaultSessionId?;
26
+ private readonly onEvent?;
27
+ constructor(config: OpenAiGatewayAdapterConfig);
28
+ bootstrapSession(): Promise<BootstrapResponse>;
29
+ sendMessage(params: {
30
+ id: string;
31
+ messages: ChatMessage[];
32
+ query: string;
33
+ model?: string;
34
+ localTime?: string;
35
+ signal?: AbortSignal;
36
+ requestId?: string;
37
+ }): Promise<SendMessageResponse>;
38
+ sendMessageStream(params: {
39
+ id: string;
40
+ messages: ChatMessage[];
41
+ query: string;
42
+ model?: string;
43
+ localTime?: string;
44
+ signal?: AbortSignal;
45
+ requestId?: string;
46
+ onChunk?: (chunk: SendMessageStreamChunk) => void;
47
+ onMode?: (mode: SendTransportMode, contentType: string) => void;
48
+ onStreamEvent?: (event: GatewayStreamEvent) => void;
49
+ }): Promise<SendMessageResponse>;
50
+ checkHealth(params?: {
51
+ signal?: AbortSignal;
52
+ requestId?: string;
53
+ }): Promise<GatewayHealth>;
54
+ getClientMetadata(): Promise<ClientMetadataResponse>;
55
+ listModels(params?: {
56
+ signal?: AbortSignal;
57
+ requestId?: string;
58
+ }): Promise<GatewayModel[]>;
59
+ private buildRequestPayload;
60
+ private mapMessages;
61
+ private parseEventStream;
62
+ private request;
63
+ }
64
+ export declare const createOpenAiGatewayAdapter: GatewayAdapterFactory;
65
+ export declare function validateOpenAiGatewayConfig(config: GatewayConfig): GatewayConfig;
66
+ export {};
67
+ //# sourceMappingURL=adapter-chatgpt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-chatgpt.d.ts","sourceRoot":"","sources":["../../../src/chat/gateway/adapter-chatgpt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import type { GatewayAdapter, GatewayAdapterFactory, GatewayConfig } from './adapter';
2
+ import type { BootstrapResponse, ChatMessage, ClientMetadataResponse, GatewayModel, GatewayHealth, GatewayStreamEvent, SendMessageResponse, SendMessageStreamChunk, SendTransportMode } from './types';
3
+ import { fetchWithRetry } from './runtime';
4
+ interface ClaudeGatewayAdapterConfig {
5
+ clientId: string;
6
+ baseUrl: string;
7
+ model: string;
8
+ maxTokens: number;
9
+ system?: string;
10
+ temperature?: number;
11
+ apiKey?: string | null;
12
+ anthropicVersion: string;
13
+ defaultSessionId?: string | null;
14
+ onEvent?: Parameters<typeof fetchWithRetry>[0]['onEvent'];
15
+ }
16
+ export declare class ClaudeGatewayAdapter implements GatewayAdapter {
17
+ private readonly clientId;
18
+ private readonly baseUrl;
19
+ private readonly model;
20
+ private readonly maxTokens;
21
+ private readonly system?;
22
+ private readonly temperature?;
23
+ private readonly apiKey?;
24
+ private readonly anthropicVersion;
25
+ private readonly defaultSessionId?;
26
+ private readonly onEvent?;
27
+ constructor(config: ClaudeGatewayAdapterConfig);
28
+ bootstrapSession(): Promise<BootstrapResponse>;
29
+ sendMessage(params: {
30
+ id: string;
31
+ messages: ChatMessage[];
32
+ query: string;
33
+ model?: string;
34
+ localTime?: string;
35
+ signal?: AbortSignal;
36
+ requestId?: string;
37
+ }): Promise<SendMessageResponse>;
38
+ sendMessageStream(params: {
39
+ id: string;
40
+ messages: ChatMessage[];
41
+ query: string;
42
+ model?: string;
43
+ localTime?: string;
44
+ signal?: AbortSignal;
45
+ requestId?: string;
46
+ onChunk?: (chunk: SendMessageStreamChunk) => void;
47
+ onMode?: (mode: SendTransportMode, contentType: string) => void;
48
+ onStreamEvent?: (event: GatewayStreamEvent) => void;
49
+ }): Promise<SendMessageResponse>;
50
+ checkHealth(params?: {
51
+ signal?: AbortSignal;
52
+ requestId?: string;
53
+ }): Promise<GatewayHealth>;
54
+ getClientMetadata(): Promise<ClientMetadataResponse>;
55
+ listModels(params?: {
56
+ signal?: AbortSignal;
57
+ requestId?: string;
58
+ }): Promise<GatewayModel[]>;
59
+ private buildRequestPayload;
60
+ private mapMessages;
61
+ private extractTextFromMessage;
62
+ private parseEventStream;
63
+ private request;
64
+ }
65
+ export declare const createClaudeGatewayAdapter: GatewayAdapterFactory;
66
+ export declare function validateClaudeGatewayConfig(config: GatewayConfig): GatewayConfig;
67
+ export {};
68
+ //# sourceMappingURL=adapter-claude.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-claude.d.ts","sourceRoot":"","sources":["../../../src/chat/gateway/adapter-claude.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { GatewayAdapter, GatewayAdapterFactoryContext } from './adapter';
2
+ export declare function createMockGatewayAdapter(_context: GatewayAdapterFactoryContext): GatewayAdapter;
3
+ //# sourceMappingURL=adapter-mock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-mock.d.ts","sourceRoot":"","sources":["../../../src/chat/gateway/adapter-mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,4BAA4B,EAAE,MAAM,WAAW,CAAC;AA6H9E,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,4BAA4B,GAAG,cAAc,CAE/F"}
@@ -0,0 +1,71 @@
1
+ import type { BootstrapResponse, ChatMessage, ClientMetadataResponse, GatewayModel, GatewayEvent, GatewayHealth, SendMessageResponse, SendMessageStreamChunk, GatewayStreamEvent, SendTransportMode } from './types';
2
+ export interface GatewayAdapter {
3
+ bootstrapSession(params?: {
4
+ signal?: AbortSignal;
5
+ requestId?: string;
6
+ }): Promise<BootstrapResponse>;
7
+ sendMessage(params: {
8
+ id: string;
9
+ messages: ChatMessage[];
10
+ query: string;
11
+ model?: string;
12
+ localTime?: string;
13
+ signal?: AbortSignal;
14
+ requestId?: string;
15
+ }): Promise<SendMessageResponse>;
16
+ sendMessageStream(params: {
17
+ id: string;
18
+ messages: ChatMessage[];
19
+ query: string;
20
+ model?: string;
21
+ localTime?: string;
22
+ signal?: AbortSignal;
23
+ requestId?: string;
24
+ onChunk?: (chunk: SendMessageStreamChunk) => void;
25
+ onMode?: (mode: SendTransportMode, contentType: string) => void;
26
+ onStreamEvent?: (event: GatewayStreamEvent) => void;
27
+ }): Promise<SendMessageResponse>;
28
+ checkHealth(params?: {
29
+ signal?: AbortSignal;
30
+ requestId?: string;
31
+ }): Promise<GatewayHealth>;
32
+ getClientMetadata(params?: {
33
+ signal?: AbortSignal;
34
+ requestId?: string;
35
+ }): Promise<ClientMetadataResponse>;
36
+ listModels?(params?: {
37
+ signal?: AbortSignal;
38
+ requestId?: string;
39
+ }): Promise<GatewayModel[]>;
40
+ }
41
+ export interface GatewayCapabilities {
42
+ sessionStrategy: 'provider' | 'local' | 'hybrid';
43
+ supportsHistory: boolean;
44
+ supportsStreaming: boolean;
45
+ supportsStructuredActions: boolean;
46
+ supportsSystemPrompt: boolean;
47
+ supportsTools: boolean;
48
+ supportsModelPicker: boolean;
49
+ }
50
+ export type GatewayConfig = Record<string, unknown>;
51
+ export interface GatewayAuthConfig {
52
+ token?: string | null;
53
+ headerName?: string;
54
+ scheme?: 'bearer' | 'raw';
55
+ additionalHeaders?: Record<string, string>;
56
+ }
57
+ export interface GatewayAdapterFactoryContext {
58
+ clientId: string;
59
+ baseUrl: string;
60
+ gatewayConfig?: GatewayConfig;
61
+ auth?: GatewayAuthConfig;
62
+ onEvent?: (event: GatewayEvent) => void;
63
+ }
64
+ export type GatewayAdapterFactory = (context: GatewayAdapterFactoryContext) => GatewayAdapter;
65
+ export type GatewayConfigValidator = (config: GatewayConfig) => GatewayConfig;
66
+ export interface GatewayRegistration {
67
+ factory: GatewayAdapterFactory;
68
+ capabilities: GatewayCapabilities;
69
+ validateConfig?: GatewayConfigValidator;
70
+ }
71
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/chat/gateway/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { GatewayAdapter, GatewayCapabilities } from './adapter';
2
+ import type { BootstrapResponse, ChatMessage, ClientMetadataResponse, GatewayModel, GatewayHealth, SendMessageResponse, SendMessageStreamChunk, GatewayStreamEvent, SendTransportMode } from './types';
3
+ export declare class LLMGatewayController {
4
+ private readonly adapter;
5
+ private readonly capabilities;
6
+ constructor(adapter: GatewayAdapter, capabilities: GatewayCapabilities);
7
+ bootstrapSession(params?: {
8
+ signal?: AbortSignal;
9
+ requestId?: string;
10
+ }): Promise<BootstrapResponse>;
11
+ sendMessage(params: {
12
+ id: string;
13
+ messages: ChatMessage[];
14
+ query: string;
15
+ model?: string;
16
+ localTime?: string;
17
+ signal?: AbortSignal;
18
+ requestId?: string;
19
+ }): Promise<SendMessageResponse>;
20
+ sendMessageStream(params: {
21
+ id: string;
22
+ messages: ChatMessage[];
23
+ query: string;
24
+ model?: string;
25
+ localTime?: string;
26
+ signal?: AbortSignal;
27
+ requestId?: string;
28
+ onChunk?: (chunk: SendMessageStreamChunk) => void;
29
+ onMode?: (mode: SendTransportMode, contentType: string) => void;
30
+ onStreamEvent?: (event: GatewayStreamEvent) => void;
31
+ }): Promise<SendMessageResponse>;
32
+ checkHealth(params?: {
33
+ signal?: AbortSignal;
34
+ requestId?: string;
35
+ }): Promise<GatewayHealth>;
36
+ getClientMetadata(params?: {
37
+ signal?: AbortSignal;
38
+ requestId?: string;
39
+ }): Promise<ClientMetadataResponse>;
40
+ listModels(params?: {
41
+ signal?: AbortSignal;
42
+ requestId?: string;
43
+ }): Promise<GatewayModel[]>;
44
+ getCapabilities(): GatewayCapabilities;
45
+ }
46
+ //# sourceMappingURL=controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../src/chat/gateway/controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,sBAAsB,EACtB,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;gBAEvC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,mBAAmB;IAKtE,gBAAgB,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAInG,WAAW,CAAC,MAAM,EAAE;QAClB,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,WAAW,EAAE,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAIhC,iBAAiB,CAAC,MAAM,EAAE;QACxB,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,WAAW,EAAE,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,CAAC;QAClD,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;QAChE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;KACrD,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAIhC,WAAW,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAI1F,iBAAiB,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAIzG,UAAU,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAK1F,eAAe,IAAI,mBAAmB;CAGvC"}
@@ -0,0 +1,9 @@
1
+ export type { ChatRole, ChatMessage, BootstrapResponse, SendMessageResponse, SendMessageStreamChunk, GatewayModel, ClientMetadataResponse, GatewayStreamEvent, SendTransportMode, GatewayErrorKind, GatewayEvent, GatewayHealth, GatewayErrorLike, } from './types';
2
+ export { isGatewayErrorLike } from './types';
3
+ export type { GatewayAdapter, GatewayCapabilities, GatewayConfig, GatewayAuthConfig, GatewayAdapterFactoryContext, GatewayAdapterFactory, GatewayConfigValidator, GatewayRegistration, } from './adapter';
4
+ export { LLMGatewayController, } from './controller';
5
+ export { DEFAULT_REQUEST_TIMEOUT_MS, DEFAULT_RETRY_DELAYS_MS, GatewayRequestError, classifyByStatus, createRequestId, fetchWithRetry, parseSseEvent, parseJsonResponse, } from './runtime';
6
+ export { ClaudeGatewayAdapter, createClaudeGatewayAdapter, validateClaudeGatewayConfig, } from './adapter-claude';
7
+ export { OpenAiGatewayAdapter, createOpenAiGatewayAdapter, validateOpenAiGatewayConfig, } from './adapter-chatgpt';
8
+ export { createMockGatewayAdapter, } from './adapter-mock';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/chat/gateway/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,YAAY,EACZ,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,gBAAgB,GACjB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE7C,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,4BAA4B,EAC5B,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,aAAa,EACb,iBAAiB,GAClB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,wBAAwB,GACzB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,53 @@
1
+ import type { GatewayAuthConfig } from './adapter';
2
+ import type { GatewayErrorKind, GatewayEvent } from './types';
3
+ export interface GatewayRequestErrorLike extends Error {
4
+ kind: GatewayErrorKind;
5
+ status: number;
6
+ body: string;
7
+ requestId: string;
8
+ contentType?: string;
9
+ }
10
+ export declare class GatewayRequestError extends Error implements GatewayRequestErrorLike {
11
+ readonly kind: GatewayErrorKind;
12
+ readonly status: number;
13
+ readonly body: string;
14
+ readonly requestId: string;
15
+ readonly contentType?: string;
16
+ constructor(params: {
17
+ message: string;
18
+ kind: GatewayErrorKind;
19
+ requestId: string;
20
+ status?: number;
21
+ body?: string;
22
+ contentType?: string;
23
+ });
24
+ }
25
+ export interface GatewayRetryPolicy {
26
+ delaysMs: number[];
27
+ jitterRatio?: number;
28
+ }
29
+ export declare const DEFAULT_REQUEST_TIMEOUT_MS = 30000;
30
+ export interface FetchWithRetryOptions {
31
+ url: string;
32
+ init: RequestInit & {
33
+ requestId: string;
34
+ };
35
+ retryPolicy?: GatewayRetryPolicy;
36
+ auth?: GatewayAuthConfig;
37
+ defaultHeaders?: Record<string, string>;
38
+ onEvent?: (event: GatewayEvent) => void;
39
+ /** Request timeout in milliseconds. Defaults to 30000 (30s). */
40
+ timeoutMs?: number;
41
+ /** When true, skip all retry logic (useful for streaming requests). */
42
+ noRetry?: boolean;
43
+ }
44
+ export declare function fetchWithRetry(options: FetchWithRetryOptions): Promise<Response>;
45
+ export declare function classifyByStatus(status: number): GatewayErrorKind;
46
+ export declare function parseJsonResponse<T>(response: Response, requestId: string): Promise<T>;
47
+ export declare function createRequestId(): string;
48
+ export declare function parseSseEvent(raw: string): {
49
+ event: string;
50
+ data: string;
51
+ } | null;
52
+ export declare const DEFAULT_RETRY_DELAYS_MS: number[];
53
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/chat/gateway/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE9D,MAAM,WAAW,uBAAwB,SAAQ,KAAK;IACpD,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,mBAAoB,SAAQ,KAAM,YAAW,uBAAuB;IAC/E,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;gBAElB,MAAM,EAAE;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,gBAAgB,CAAC;QACvB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB;CASF;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,0BAA0B,QAAS,CAAC;AAEjD,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,WAAW,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACxC,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAGtF;AA4JD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAMjE;AAED,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,CAAC,CAAC,CAwBZ;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAYD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAWjF;AAED,eAAO,MAAM,uBAAuB,UAAqB,CAAC"}