@reactive-agents/svelte 0.10.5 → 0.11.1

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.
package/dist/index.js CHANGED
@@ -103,3 +103,4 @@ export {
103
103
  createAgent,
104
104
  createAgentStream
105
105
  };
106
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/agent-stream.ts","../src/agent.ts"],"sourcesContent":["import { writable } from \"svelte/store\";\nimport type { AgentStreamEvent } from \"./types.js\";\n\nexport interface AgentStreamState {\n text: string;\n events: AgentStreamEvent[];\n status: \"idle\" | \"streaming\" | \"completed\" | \"error\";\n error: string | null;\n output: string | null;\n}\n\n/**\n * Create a reactive Svelte store that streams agent output token-by-token.\n * Returns a store + run() and cancel() functions.\n *\n * @example\n * ```svelte\n * <script>\n * import { createAgentStream } from \"@reactive-agents/svelte\";\n * const agent = createAgentStream(\"/api/agent\");\n * </script>\n * <button on:click={() => agent.run(\"Hello!\")}>Run</button>\n * <p>{$agent.text}</p>\n * ```\n */\nexport function createAgentStream(\n endpoint: string,\n requestInit?: Omit<RequestInit, \"method\" | \"body\" | \"signal\">,\n) {\n const store = writable<AgentStreamState>({\n text: \"\", events: [], status: \"idle\", error: null, output: null,\n });\n\n let abortController: AbortController | null = null;\n\n function cancel() {\n abortController?.abort();\n store.update((s) => ({ ...s, status: \"idle\" }));\n }\n\n async function run(prompt: string, body?: Record<string, unknown>) {\n abortController?.abort();\n abortController = new AbortController();\n store.set({ text: \"\", events: [], status: \"streaming\", error: null, output: null });\n\n try {\n const res = await fetch(endpoint, {\n ...requestInit,\n method: \"POST\",\n signal: abortController.signal,\n headers: { \"Content-Type\": \"application/json\", ...requestInit?.headers },\n body: JSON.stringify({ prompt, ...body }),\n });\n\n if (!res.ok) throw new Error(`HTTP ${res.status}: ${res.statusText}`);\n if (!res.body) throw new Error(\"No response body\");\n\n const reader = res.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n\n for (const line of lines) {\n if (!line.startsWith(\"data: \")) continue;\n const raw = line.slice(6).trim();\n if (!raw) continue;\n try {\n const event = JSON.parse(raw) as AgentStreamEvent;\n store.update((s) => {\n const next = { ...s, events: [...s.events, event] };\n if (event._tag === \"TextDelta\" && \"text\" in event) {\n next.text = s.text + (event as { text: string }).text;\n } else if (event._tag === \"StreamCompleted\" && \"output\" in event) {\n next.output = (event as { output: string }).output;\n next.status = \"completed\";\n } else if (event._tag === \"StreamError\" && \"cause\" in event) {\n next.error = (event as { cause: string }).cause;\n next.status = \"error\";\n } else if (event._tag === \"StreamCancelled\") {\n next.status = \"idle\";\n }\n return next;\n });\n } catch { /* skip */ }\n }\n }\n } catch (err: unknown) {\n if (err instanceof Error && err.name === \"AbortError\") return;\n store.update((s) => ({\n ...s,\n error: err instanceof Error ? err.message : String(err),\n status: \"error\",\n }));\n }\n }\n\n return { subscribe: store.subscribe, run, cancel };\n}\n","import { writable } from \"svelte/store\";\n\nexport interface AgentState {\n output: string | null;\n loading: boolean;\n error: string | null;\n}\n\nexport function createAgent(\n endpoint: string,\n requestInit?: Omit<RequestInit, \"method\" | \"body\">,\n) {\n const store = writable<AgentState>({ output: null, loading: false, error: null });\n\n async function run(prompt: string, body?: Record<string, unknown>): Promise<string> {\n store.update((s) => ({ ...s, loading: true, error: null, output: null }));\n try {\n const res = await fetch(endpoint, {\n ...requestInit,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", ...requestInit?.headers },\n body: JSON.stringify({ prompt, ...body }),\n });\n if (!res.ok) throw new Error(`HTTP ${res.status}: ${res.statusText}`);\n const data = (await res.json()) as { output?: string; result?: string };\n const result = data.output ?? data.result ?? \"\";\n store.update((s) => ({ ...s, output: result, loading: false }));\n return result;\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n store.update((s) => ({ ...s, error: msg, loading: false }));\n throw err;\n }\n }\n\n return { subscribe: store.subscribe, run };\n}\n"],"mappings":"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","names":["writable"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reactive-agents/svelte",
3
- "version": "0.10.5",
3
+ "version": "0.11.1",
4
4
  "description": "Svelte stores for Reactive Agents — agentStream, agentRun",
5
5
  "type": "module",
6
6
  "exports": {
@@ -22,10 +22,10 @@
22
22
  "devDependencies": {
23
23
  "svelte": "^5.0.0",
24
24
  "tsup": "^8.0.0",
25
- "typescript": "^5.7.0"
25
+ "typescript": "^6.0.0"
26
26
  },
27
27
  "scripts": {
28
- "build": "tsup src/index.ts --format esm --dts --out-dir dist",
28
+ "build": "tsup --config ../../tsup.config.base.ts",
29
29
  "typecheck": "tsc --noEmit"
30
30
  }
31
31
  }