@talk2view/sdk 0.1.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 (87) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +594 -0
  3. package/dist/auth.d.ts +39 -0
  4. package/dist/auth.d.ts.map +1 -0
  5. package/dist/auth.js +102 -0
  6. package/dist/auth.js.map +1 -0
  7. package/dist/client.d.ts +27 -0
  8. package/dist/client.d.ts.map +1 -0
  9. package/dist/client.js +195 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/errors.d.ts +21 -0
  12. package/dist/errors.d.ts.map +1 -0
  13. package/dist/errors.js +38 -0
  14. package/dist/errors.js.map +1 -0
  15. package/dist/index.d.ts +80 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +115 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/react/ChatInput.d.ts +13 -0
  20. package/dist/react/ChatInput.d.ts.map +1 -0
  21. package/dist/react/ChatInput.js +163 -0
  22. package/dist/react/ChatInput.js.map +1 -0
  23. package/dist/react/ChatMessage.d.ts +10 -0
  24. package/dist/react/ChatMessage.d.ts.map +1 -0
  25. package/dist/react/ChatMessage.js +53 -0
  26. package/dist/react/ChatMessage.js.map +1 -0
  27. package/dist/react/ChatPanel.d.ts +17 -0
  28. package/dist/react/ChatPanel.d.ts.map +1 -0
  29. package/dist/react/ChatPanel.js +385 -0
  30. package/dist/react/ChatPanel.js.map +1 -0
  31. package/dist/react/LoginModal.d.ts +10 -0
  32. package/dist/react/LoginModal.d.ts.map +1 -0
  33. package/dist/react/LoginModal.js +135 -0
  34. package/dist/react/LoginModal.js.map +1 -0
  35. package/dist/react/SettingsView.d.ts +9 -0
  36. package/dist/react/SettingsView.d.ts.map +1 -0
  37. package/dist/react/SettingsView.js +190 -0
  38. package/dist/react/SettingsView.js.map +1 -0
  39. package/dist/react/T2VProvider.d.ts +25 -0
  40. package/dist/react/T2VProvider.d.ts.map +1 -0
  41. package/dist/react/T2VProvider.js +38 -0
  42. package/dist/react/T2VProvider.js.map +1 -0
  43. package/dist/react/index.d.ts +38 -0
  44. package/dist/react/index.d.ts.map +1 -0
  45. package/dist/react/index.js +28 -0
  46. package/dist/react/index.js.map +1 -0
  47. package/dist/react/theme.d.ts +32 -0
  48. package/dist/react/theme.d.ts.map +1 -0
  49. package/dist/react/theme.js +131 -0
  50. package/dist/react/theme.js.map +1 -0
  51. package/dist/react/useT2VAuth.d.ts +16 -0
  52. package/dist/react/useT2VAuth.d.ts.map +1 -0
  53. package/dist/react/useT2VAuth.js +52 -0
  54. package/dist/react/useT2VAuth.js.map +1 -0
  55. package/dist/react/useT2VChat.d.ts +28 -0
  56. package/dist/react/useT2VChat.d.ts.map +1 -0
  57. package/dist/react/useT2VChat.js +103 -0
  58. package/dist/react/useT2VChat.js.map +1 -0
  59. package/dist/react/useT2VTools.d.ts +11 -0
  60. package/dist/react/useT2VTools.d.ts.map +1 -0
  61. package/dist/react/useT2VTools.js +29 -0
  62. package/dist/react/useT2VTools.js.map +1 -0
  63. package/dist/react/useUserPreferences.d.ts +13 -0
  64. package/dist/react/useUserPreferences.d.ts.map +1 -0
  65. package/dist/react/useUserPreferences.js +40 -0
  66. package/dist/react/useUserPreferences.js.map +1 -0
  67. package/dist/sessions.d.ts +34 -0
  68. package/dist/sessions.d.ts.map +1 -0
  69. package/dist/sessions.js +95 -0
  70. package/dist/sessions.js.map +1 -0
  71. package/dist/storage.d.ts +16 -0
  72. package/dist/storage.d.ts.map +1 -0
  73. package/dist/storage.js +84 -0
  74. package/dist/storage.js.map +1 -0
  75. package/dist/streaming.d.ts +9 -0
  76. package/dist/streaming.d.ts.map +1 -0
  77. package/dist/streaming.js +45 -0
  78. package/dist/streaming.js.map +1 -0
  79. package/dist/tools.d.ts +40 -0
  80. package/dist/tools.d.ts.map +1 -0
  81. package/dist/tools.js +83 -0
  82. package/dist/tools.js.map +1 -0
  83. package/dist/types.d.ts +153 -0
  84. package/dist/types.d.ts.map +1 -0
  85. package/dist/types.js +3 -0
  86. package/dist/types.js.map +1 -0
  87. package/package.json +74 -0
@@ -0,0 +1,103 @@
1
+ /**
2
+ * useT2VChat — React hook for chat interactions with streaming and auto tool handling.
3
+ */
4
+ import { useCallback, useRef, useState } from 'react';
5
+ import { useT2V } from './T2VProvider';
6
+ let messageIdCounter = 0;
7
+ function nextId() {
8
+ return `msg_${++messageIdCounter}_${Date.now()}`;
9
+ }
10
+ export function useT2VChat(options) {
11
+ const { t2v } = useT2V();
12
+ const [messages, setMessages] = useState([]);
13
+ const [isLoading, setIsLoading] = useState(false);
14
+ const [error, setError] = useState(null);
15
+ const [threadId, setThreadId] = useState(null);
16
+ const [agentStatus, setAgentStatus] = useState(null);
17
+ const [todos, setTodos] = useState('');
18
+ const abortRef = useRef(null);
19
+ const sendMessage = useCallback(async (content) => {
20
+ setError(null);
21
+ setIsLoading(true);
22
+ // Add user message
23
+ const userMsg = {
24
+ id: nextId(),
25
+ role: 'user',
26
+ content,
27
+ timestamp: new Date(),
28
+ };
29
+ const assistantId = nextId();
30
+ const assistantMsg = {
31
+ id: assistantId,
32
+ role: 'assistant',
33
+ content: '',
34
+ timestamp: new Date(),
35
+ isStreaming: true,
36
+ };
37
+ setMessages((prev) => [...prev, userMsg, assistantMsg]);
38
+ // Build conversation history for context
39
+ const history = messages.map((m) => ({
40
+ role: m.role,
41
+ content: m.content,
42
+ }));
43
+ let fullContent = '';
44
+ try {
45
+ for await (const event of t2v.chat(content, {
46
+ systemPrompt: options?.systemPrompt,
47
+ history,
48
+ })) {
49
+ switch (event.type) {
50
+ case 'text':
51
+ fullContent += event.content;
52
+ setAgentStatus(null); // Agent is now responding
53
+ setMessages((prev) => prev.map((m) => m.id === assistantId ? { ...m, content: fullContent } : m));
54
+ break;
55
+ case 'status':
56
+ setAgentStatus({ status: event.status, message: event.message });
57
+ break;
58
+ case 'todos':
59
+ setTodos(event.todos);
60
+ break;
61
+ case 'done':
62
+ setThreadId(event.threadId);
63
+ break;
64
+ case 'error':
65
+ setError(event.message);
66
+ break;
67
+ }
68
+ }
69
+ }
70
+ catch (err) {
71
+ const message = err instanceof Error ? err.message : 'An error occurred';
72
+ setError(message);
73
+ }
74
+ finally {
75
+ // Mark streaming as done
76
+ setMessages((prev) => prev.map((m) => m.id === assistantId ? { ...m, isStreaming: false } : m));
77
+ setAgentStatus(null);
78
+ setIsLoading(false);
79
+ }
80
+ }, [t2v, messages, options?.systemPrompt]);
81
+ const clearMessages = useCallback(() => {
82
+ setMessages([]);
83
+ setThreadId(null);
84
+ setError(null);
85
+ setTodos('');
86
+ setAgentStatus(null);
87
+ // Tell the SDK to drop the current session so the next message creates a fresh one
88
+ t2v.clearSession();
89
+ }, [t2v]);
90
+ const clearError = useCallback(() => setError(null), []);
91
+ return {
92
+ messages,
93
+ isLoading,
94
+ error,
95
+ threadId,
96
+ agentStatus,
97
+ todos,
98
+ sendMessage,
99
+ clearMessages,
100
+ clearError,
101
+ };
102
+ }
103
+ //# sourceMappingURL=useT2VChat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useT2VChat.js","sourceRoot":"","sources":["../../src/react/useT2VChat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * useT2VTools — React hook for tool registration.
3
+ */
4
+ import type { ClientTool, ClientToolSchema, RegisterToolsResponse } from '../types';
5
+ export interface UseT2VToolsResult {
6
+ registerTools: (tools: (ClientToolSchema | ClientTool)[]) => Promise<RegisterToolsResponse>;
7
+ registeredTools: string[];
8
+ isRegistered: boolean;
9
+ }
10
+ export declare function useT2VTools(): UseT2VToolsResult;
11
+ //# sourceMappingURL=useT2VTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useT2VTools.d.ts","sourceRoot":"","sources":["../../src/react/useT2VTools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAGpF,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,CAAC,KAAK,EAAE,CAAC,gBAAgB,GAAG,UAAU,CAAC,EAAE,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC5F,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,WAAW,IAAI,iBAAiB,CA4B/C"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * useT2VTools — React hook for tool registration.
3
+ */
4
+ import { useCallback, useEffect, useRef, useState } from 'react';
5
+ import { useT2V } from './T2VProvider';
6
+ export function useT2VTools() {
7
+ const { t2v, isAuthenticated } = useT2V();
8
+ const [registeredTools, setRegisteredTools] = useState([]);
9
+ const registeredRef = useRef(false);
10
+ const registerTools = useCallback(async (tools) => {
11
+ const response = await t2v.tools.register(tools);
12
+ setRegisteredTools(response.registered);
13
+ registeredRef.current = true;
14
+ return response;
15
+ }, [t2v]);
16
+ // Reset when auth changes
17
+ useEffect(() => {
18
+ if (!isAuthenticated) {
19
+ setRegisteredTools([]);
20
+ registeredRef.current = false;
21
+ }
22
+ }, [isAuthenticated]);
23
+ return {
24
+ registerTools,
25
+ registeredTools,
26
+ isRegistered: registeredRef.current,
27
+ };
28
+ }
29
+ //# sourceMappingURL=useT2VTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useT2VTools.js","sourceRoot":"","sources":["../../src/react/useT2VTools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjE,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAQvC,MAAM,UAAU,WAAW;IACzB,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1C,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAC;IACrE,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEpC,MAAM,aAAa,GAAG,WAAW,CAC/B,KAAK,EAAE,KAAwC,EAAE,EAAE;QACjD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACjD,kBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACxC,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC;QAC7B,OAAO,QAAQ,CAAC;IAClB,CAAC,EACD,CAAC,GAAG,CAAC,CACN,CAAC;IAEF,0BAA0B;IAC1B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,kBAAkB,CAAC,EAAE,CAAC,CAAC;YACvB,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC;QAChC,CAAC;IACH,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,OAAO;QACL,aAAa;QACb,eAAe;QACf,YAAY,EAAE,aAAa,CAAC,OAAO;KACpC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * useUserPreferences — hook for reading/writing user preferences with localStorage persistence.
3
+ *
4
+ * Uses a custom DOM event to keep multiple hook instances in sync:
5
+ * when any instance writes, all instances re-read from storage.
6
+ */
7
+ import type { UserPreferences } from '../types';
8
+ export interface UseUserPreferencesResult {
9
+ preferences: UserPreferences;
10
+ updatePreferences: (partial: Partial<UserPreferences>) => void;
11
+ }
12
+ export declare function useUserPreferences(): UseUserPreferencesResult;
13
+ //# sourceMappingURL=useUserPreferences.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUserPreferences.d.ts","sourceRoot":"","sources":["../../src/react/useUserPreferences.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAchD,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,eAAe,CAAC;IAC7B,iBAAiB,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC;CAChE;AAED,wBAAgB,kBAAkB,IAAI,wBAAwB,CAqB7D"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * useUserPreferences — hook for reading/writing user preferences with localStorage persistence.
3
+ *
4
+ * Uses a custom DOM event to keep multiple hook instances in sync:
5
+ * when any instance writes, all instances re-read from storage.
6
+ */
7
+ import { useCallback, useEffect, useState } from 'react';
8
+ import { getUserPreferences, setUserPreferences } from '../storage';
9
+ const SYNC_EVENT = 'talk2view_preferences_changed';
10
+ function loadPreferences() {
11
+ try {
12
+ const raw = getUserPreferences();
13
+ if (raw)
14
+ return JSON.parse(raw);
15
+ }
16
+ catch {
17
+ // Corrupted data — start fresh
18
+ }
19
+ return {};
20
+ }
21
+ export function useUserPreferences() {
22
+ const [preferences, setPreferences] = useState(loadPreferences);
23
+ // Listen for writes from other hook instances and re-read from storage
24
+ useEffect(() => {
25
+ const handler = () => setPreferences(loadPreferences());
26
+ window.addEventListener(SYNC_EVENT, handler);
27
+ return () => window.removeEventListener(SYNC_EVENT, handler);
28
+ }, []);
29
+ const updatePreferences = useCallback((partial) => {
30
+ setPreferences((prev) => {
31
+ const next = { ...prev, ...partial };
32
+ setUserPreferences(JSON.stringify(next));
33
+ // Notify other hook instances
34
+ window.dispatchEvent(new Event(SYNC_EVENT));
35
+ return next;
36
+ });
37
+ }, []);
38
+ return { preferences, updatePreferences };
39
+ }
40
+ //# sourceMappingURL=useUserPreferences.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUserPreferences.js","sourceRoot":"","sources":["../../src/react/useUserPreferences.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGpE,MAAM,UAAU,GAAG,+BAA+B,CAAC;AAEnD,SAAS,eAAe;IACtB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,kBAAkB,EAAE,CAAC;QACjC,IAAI,GAAG;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;IACjC,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAOD,MAAM,UAAU,kBAAkB;IAChC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAkB,eAAe,CAAC,CAAC;IAEjF,uEAAuE;IACvE,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC;QACxD,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC7C,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,OAAiC,EAAE,EAAE;QAC1E,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE;YACtB,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC;YACrC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YACzC,8BAA8B;YAC9B,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;YAC5C,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Sessions module — create sessions, send messages with streaming, resume after tool calls.
3
+ */
4
+ import type { T2VClient } from './client';
5
+ import type { T2VTools } from './tools';
6
+ import type { ChatEvent, ChatMessage, CreateSessionResponse, T2VConfig } from './types';
7
+ export declare class T2VSession {
8
+ private readonly client;
9
+ private readonly tools;
10
+ private readonly config?;
11
+ readonly id: string;
12
+ readonly threadId: string;
13
+ readonly model: string;
14
+ constructor(data: CreateSessionResponse, client: T2VClient, tools: T2VTools, config?: T2VConfig | undefined);
15
+ /**
16
+ * Send a message and stream the response.
17
+ *
18
+ * Tool calls are handled automatically if handlers are registered.
19
+ * Yields ChatEvent objects for the caller to render.
20
+ */
21
+ sendMessage(content: string, options?: {
22
+ systemPrompt?: string;
23
+ history?: ChatMessage[];
24
+ }): AsyncGenerator<ChatEvent>;
25
+ /**
26
+ * Resume after a tool call (for manual tool handling).
27
+ */
28
+ resumeToolCall(toolCallId: string, result: string, isError?: boolean): AsyncGenerator<ChatEvent>;
29
+ /**
30
+ * Internal: process an SSE stream with automatic tool call handling.
31
+ */
32
+ private processStream;
33
+ }
34
+ //# sourceMappingURL=sessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,qBAAqB,EACrB,SAAS,EACV,MAAM,SAAS,CAAC;AAEjB,qBAAa,UAAU;IAOnB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAR1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBAGrB,IAAI,EAAE,qBAAqB,EACV,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,QAAQ,EACf,MAAM,CAAC,EAAE,SAAS,YAAA;IAOrC;;;;;OAKG;IACI,WAAW,CAChB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,WAAW,EAAE,CAAA;KAAE,GAC3D,cAAc,CAAC,SAAS,CAAC;IAiB5B;;OAEG;IACI,cAAc,CACnB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,UAAQ,GACd,cAAc,CAAC,SAAS,CAAC;IAO5B;;OAEG;YACY,aAAa;CA+D7B"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Sessions module — create sessions, send messages with streaming, resume after tool calls.
3
+ */
4
+ export class T2VSession {
5
+ client;
6
+ tools;
7
+ config;
8
+ id;
9
+ threadId;
10
+ model;
11
+ constructor(data, client, tools, config) {
12
+ this.client = client;
13
+ this.tools = tools;
14
+ this.config = config;
15
+ this.id = data.session_id;
16
+ this.threadId = data.thread_id;
17
+ this.model = data.model;
18
+ }
19
+ /**
20
+ * Send a message and stream the response.
21
+ *
22
+ * Tool calls are handled automatically if handlers are registered.
23
+ * Yields ChatEvent objects for the caller to render.
24
+ */
25
+ async *sendMessage(content, options) {
26
+ const messages = [];
27
+ if (options?.systemPrompt) {
28
+ messages.push({ role: 'system', content: options.systemPrompt });
29
+ }
30
+ if (options?.history) {
31
+ messages.push(...options.history);
32
+ }
33
+ messages.push({ role: 'user', content });
34
+ yield* this.processStream(`/v1/sessions/${this.id}/messages`, { messages, stream: true, model: this.config?.model });
35
+ }
36
+ /**
37
+ * Resume after a tool call (for manual tool handling).
38
+ */
39
+ async *resumeToolCall(toolCallId, result, isError = false) {
40
+ yield* this.processStream(`/v1/sessions/${this.id}/resume`, { tool_call_id: toolCallId, result, is_error: isError });
41
+ }
42
+ /**
43
+ * Internal: process an SSE stream with automatic tool call handling.
44
+ */
45
+ async *processStream(endpoint, body) {
46
+ for await (const chunk of this.client.streamRequest(endpoint, body)) {
47
+ // Agent status update (non-terminal — stream continues)
48
+ if (chunk.status) {
49
+ yield { type: 'status', status: chunk.status.type, message: chunk.status.message };
50
+ }
51
+ // Todos update (non-terminal — stream continues)
52
+ if (chunk.todos) {
53
+ yield { type: 'todos', todos: chunk.todos };
54
+ }
55
+ // Check for tool call interrupt
56
+ if (chunk.interrupt) {
57
+ const { tool_name, tool_call_id, arguments: args } = chunk.interrupt;
58
+ // If we have a handler, execute automatically and resume
59
+ if (this.tools.hasHandler(tool_name)) {
60
+ // Emit tool_call event so the UI knows what's happening
61
+ yield {
62
+ type: 'tool_call',
63
+ toolName: tool_name,
64
+ toolCallId: tool_call_id,
65
+ arguments: args,
66
+ };
67
+ // Execute the tool
68
+ const { result, isError } = await this.tools.executeToolCall(tool_name, args);
69
+ // Resume and continue streaming
70
+ yield* this.processStream(`/v1/sessions/${this.id}/resume`, { tool_call_id, result, is_error: isError });
71
+ return;
72
+ }
73
+ // No handler — emit the event for manual handling
74
+ yield {
75
+ type: 'tool_call',
76
+ toolName: tool_name,
77
+ toolCallId: tool_call_id,
78
+ arguments: args,
79
+ };
80
+ return;
81
+ }
82
+ // Text content
83
+ const delta = chunk.choices[0]?.delta?.content;
84
+ if (delta) {
85
+ yield { type: 'text', content: delta };
86
+ }
87
+ // Done
88
+ if (chunk.choices[0]?.finish_reason === 'stop') {
89
+ yield { type: 'done', threadId: chunk.thread_id ?? this.threadId };
90
+ return;
91
+ }
92
+ }
93
+ }
94
+ }
95
+ //# sourceMappingURL=sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Token storage with localStorage + in-memory fallback for private browsing.
3
+ */
4
+ export declare function getAccessToken(): string | null;
5
+ export declare function setAccessToken(token: string): void;
6
+ export declare function getRefreshToken(): string | null;
7
+ export declare function setRefreshToken(token: string): void;
8
+ export declare function getUser(): string | null;
9
+ export declare function setUser(user: object): void;
10
+ export declare function getUserApiKey(): string | null;
11
+ export declare function setUserApiKey(key: string): void;
12
+ export declare function clearAuth(): void;
13
+ export declare function getUserPreferences(): string | null;
14
+ export declare function setUserPreferences(json: string): void;
15
+ export declare function hasValidTokens(): boolean;
16
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA;;GAEG;AA4CH,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAE/C;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEnD;AAED,wBAAgB,OAAO,IAAI,MAAM,GAAG,IAAI,CAEvC;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAE7C;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED,wBAAgB,SAAS,IAAI,IAAI,CAUhC;AAED,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAElD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAErD;AAED,wBAAgB,cAAc,IAAI,OAAO,CAExC"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Token storage with localStorage + in-memory fallback for private browsing.
3
+ */
4
+ const PREFIX = 'talk2view_';
5
+ const memoryStorage = {};
6
+ function isLocalStorageAvailable() {
7
+ try {
8
+ const key = '__t2v_test__';
9
+ localStorage.setItem(key, '1');
10
+ localStorage.removeItem(key);
11
+ return true;
12
+ }
13
+ catch {
14
+ return false;
15
+ }
16
+ }
17
+ const useLocalStorage = typeof window !== 'undefined' && isLocalStorageAvailable();
18
+ function get(key) {
19
+ if (useLocalStorage) {
20
+ return localStorage.getItem(PREFIX + key);
21
+ }
22
+ return memoryStorage[PREFIX + key] ?? null;
23
+ }
24
+ function set(key, value) {
25
+ if (useLocalStorage) {
26
+ localStorage.setItem(PREFIX + key, value);
27
+ }
28
+ else {
29
+ memoryStorage[PREFIX + key] = value;
30
+ }
31
+ }
32
+ function remove(key) {
33
+ if (useLocalStorage) {
34
+ localStorage.removeItem(PREFIX + key);
35
+ }
36
+ else {
37
+ delete memoryStorage[PREFIX + key];
38
+ }
39
+ }
40
+ // ── Public API ──
41
+ export function getAccessToken() {
42
+ return get('access_token');
43
+ }
44
+ export function setAccessToken(token) {
45
+ set('access_token', token);
46
+ }
47
+ export function getRefreshToken() {
48
+ return get('refresh_token');
49
+ }
50
+ export function setRefreshToken(token) {
51
+ set('refresh_token', token);
52
+ }
53
+ export function getUser() {
54
+ return get('user');
55
+ }
56
+ export function setUser(user) {
57
+ set('user', JSON.stringify(user));
58
+ }
59
+ export function getUserApiKey() {
60
+ return get('user_api_key');
61
+ }
62
+ export function setUserApiKey(key) {
63
+ set('user_api_key', key);
64
+ }
65
+ export function clearAuth() {
66
+ remove('access_token');
67
+ remove('refresh_token');
68
+ remove('user');
69
+ remove('user_api_key');
70
+ // Dispatch event for cross-component sync
71
+ if (typeof window !== 'undefined') {
72
+ window.dispatchEvent(new Event('talk2view_auth_cleared'));
73
+ }
74
+ }
75
+ export function getUserPreferences() {
76
+ return get('preferences');
77
+ }
78
+ export function setUserPreferences(json) {
79
+ set('preferences', json);
80
+ }
81
+ export function hasValidTokens() {
82
+ return getAccessToken() !== null;
83
+ }
84
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,GAAG,YAAY,CAAC;AAE5B,MAAM,aAAa,GAA2B,EAAE,CAAC;AAEjD,SAAS,uBAAuB;IAC9B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,cAAc,CAAC;QAC3B,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC/B,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,eAAe,GAAG,OAAO,MAAM,KAAK,WAAW,IAAI,uBAAuB,EAAE,CAAC;AAEnF,SAAS,GAAG,CAAC,GAAW;IACtB,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,YAAY,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,aAAa,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC;AAC7C,CAAC;AAED,SAAS,GAAG,CAAC,GAAW,EAAE,KAAa;IACrC,IAAI,eAAe,EAAE,CAAC;QACpB,YAAY,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,aAAa,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;IACtC,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,GAAW;IACzB,IAAI,eAAe,EAAE,CAAC;QACpB,YAAY,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,OAAO,aAAa,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;IACrC,CAAC;AACH,CAAC;AAED,mBAAmB;AAEnB,MAAM,UAAU,cAAc;IAC5B,OAAO,GAAG,CAAC,cAAc,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,GAAG,CAAC,eAAe,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,GAAG,CAAC,cAAc,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,MAAM,CAAC,cAAc,CAAC,CAAC;IACvB,MAAM,CAAC,eAAe,CAAC,CAAC;IACxB,MAAM,CAAC,MAAM,CAAC,CAAC;IACf,MAAM,CAAC,cAAc,CAAC,CAAC;IAEvB,0CAA0C;IAC1C,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,cAAc,EAAE,KAAK,IAAI,CAAC;AACnC,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * SSE stream decoder — parses Server-Sent Events into typed chunks.
3
+ */
4
+ import type { ChatCompletionChunk } from './types';
5
+ /**
6
+ * Decode an SSE response body into an async generator of ChatCompletionChunk.
7
+ */
8
+ export declare function decodeSSEStream(response: Response): AsyncGenerator<ChatCompletionChunk>;
9
+ //# sourceMappingURL=streaming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming.d.ts","sourceRoot":"","sources":["../src/streaming.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD;;GAEG;AACH,wBAAuB,eAAe,CACpC,QAAQ,EAAE,QAAQ,GACjB,cAAc,CAAC,mBAAmB,CAAC,CAuCrC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * SSE stream decoder — parses Server-Sent Events into typed chunks.
3
+ */
4
+ /**
5
+ * Decode an SSE response body into an async generator of ChatCompletionChunk.
6
+ */
7
+ export async function* decodeSSEStream(response) {
8
+ const body = response.body;
9
+ if (!body) {
10
+ return;
11
+ }
12
+ const reader = body.getReader();
13
+ const decoder = new TextDecoder();
14
+ let buffer = '';
15
+ try {
16
+ while (true) {
17
+ const { done, value } = await reader.read();
18
+ if (done)
19
+ break;
20
+ buffer += decoder.decode(value, { stream: true });
21
+ const lines = buffer.split('\n');
22
+ buffer = lines.pop() ?? '';
23
+ for (const line of lines) {
24
+ const trimmed = line.trim();
25
+ if (!trimmed || !trimmed.startsWith('data: '))
26
+ continue;
27
+ const data = trimmed.slice(6); // Remove "data: " prefix
28
+ if (data === '[DONE]') {
29
+ return;
30
+ }
31
+ try {
32
+ const chunk = JSON.parse(data);
33
+ yield chunk;
34
+ }
35
+ catch {
36
+ // Skip malformed JSON
37
+ }
38
+ }
39
+ }
40
+ }
41
+ finally {
42
+ reader.releaseLock();
43
+ }
44
+ }
45
+ //# sourceMappingURL=streaming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming.js","sourceRoot":"","sources":["../src/streaming.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,eAAe,CACpC,QAAkB;IAElB,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC3B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAChC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,IAAI;gBAAE,MAAM;YAEhB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC5B,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;oBAAE,SAAS;gBAExD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB;gBACxD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACtB,OAAO;gBACT,CAAC;gBAED,IAAI,CAAC;oBACH,MAAM,KAAK,GAAwB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACpD,MAAM,KAAK,CAAC;gBACd,CAAC;gBAAC,MAAM,CAAC;oBACP,sBAAsB;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Tools module — register client tools and handle tool call execution.
3
+ */
4
+ import type { T2VClient } from './client';
5
+ import type { ClientTool, ClientToolSchema, RegisterToolsResponse, ToolHandler } from './types';
6
+ export declare class T2VTools {
7
+ private readonly client;
8
+ private handlers;
9
+ private schemas;
10
+ constructor(client: T2VClient);
11
+ /**
12
+ * Register a handler for a specific tool name.
13
+ * When the agent calls this tool, the handler executes locally.
14
+ */
15
+ handle(toolName: string, handler: ToolHandler): void;
16
+ /**
17
+ * Register tool schemas with the backend and store handlers.
18
+ *
19
+ * Accepts either ClientToolSchema[] (with separate .handle() calls)
20
+ * or ClientTool[] (with inline execute functions).
21
+ */
22
+ register(tools: (ClientToolSchema | ClientTool)[]): Promise<RegisterToolsResponse>;
23
+ /**
24
+ * Execute a tool call locally using the registered handler.
25
+ * Returns the result string, or an error JSON string if the tool is unknown.
26
+ */
27
+ executeToolCall(toolName: string, args: Record<string, unknown>): Promise<{
28
+ result: string;
29
+ isError: boolean;
30
+ }>;
31
+ /**
32
+ * Check if a handler is registered for a tool.
33
+ */
34
+ hasHandler(toolName: string): boolean;
35
+ /**
36
+ * Get all registered tool schemas.
37
+ */
38
+ getRegistered(): ClientToolSchema[];
39
+ }
40
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEhG,qBAAa,QAAQ;IAIP,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,OAAO,CAA0B;gBAEZ,MAAM,EAAE,SAAS;IAE9C;;;OAGG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAIpD;;;;;OAKG;IACG,QAAQ,CAAC,KAAK,EAAE,CAAC,gBAAgB,GAAG,UAAU,CAAC,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC;IA2BxF;;;OAGG;IACG,eAAe,CACnB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAsBhD;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIrC;;OAEG;IACH,aAAa,IAAI,gBAAgB,EAAE;CAGpC"}