@caltra/assistant-ui 0.1.0 → 0.3.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.
package/README.md CHANGED
@@ -27,3 +27,13 @@ The caller starts and stops the Caltra runtime. Multiple adapters or chats may o
27
27
  Use upstream `useAui`, `useAuiState` and primitives directly inside `AssistantRuntimeProvider`. The adapter maps messages, tools, loading, send and cancellation. It does not enable unsupported server features: attachments, editing/regeneration, tool answers and branch persistence require corresponding Caltra backend support.
28
28
 
29
29
  The adapter forwards the session runtime's authoritative turn state. `isRunning` remains true between messages and tools until the persisted turn completes, fails, or is cancelled. Servers without `is_running` retain legacy message-activity behavior. Turn completion does not prove a larger application workflow finished. For custom threads, use `scrollToBottomOnRunStart={false}` to preserve reading position when a new turn begins; CaltraChat applies this default automatically.
30
+
31
+ ## Optional thinking text
32
+
33
+ The adapter carries availability/status in `message.metadata.custom.caltraReasoning`.
34
+ Use `useCaltraReasoning(sessionRuntime, messageId, open)` inside your disclosure to load its
35
+ separate text resource only while open. Completed thinking fetches without a stream; a cached
36
+ final snapshot is reused without a request. Live thinking connects before fetching its snapshot.
37
+ The hook returns `parts`, `loading`, `streaming`,
38
+ `error`, and `retry()`. Render each part's `text` and use `position` as its stable key.
39
+ Closing or unmounting stops this subscription and leaves the main session connected.
package/dist/index.d.ts CHANGED
@@ -2,4 +2,5 @@ import { type AssistantRuntime } from "@assistant-ui/react";
2
2
  import type { CaltraSessionRuntime } from "@caltra/client";
3
3
  /** Maps an already-started Caltra session runtime into assistant-ui. Never starts or stops it. */
4
4
  export declare function useAssistantUiRuntime(store: CaltraSessionRuntime): AssistantRuntime;
5
+ export { useCaltraReasoning } from "./use_reasoning.js";
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,gBAAgB,EAItB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE3D,kGAAkG;AAClG,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,oBAAoB,GAAG,gBAAgB,CAkDnF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,gBAAgB,EAItB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE3D,kGAAkG;AAClG,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,oBAAoB,GAAG,gBAAgB,CAmDnF;AAED,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -17,12 +17,13 @@ export function useAssistantUiRuntime(store) {
17
17
  content: [
18
18
  ...(message.text ? [{ type: "text", text: message.text }] : []),
19
19
  ...(message.tool_calls ?? []).map(tool => ({ type: "tool-call", toolCallId: tool.id, toolName: tool.name,
20
- args: tool.arguments, argsText: JSON.stringify(tool.arguments),
20
+ args: (tool.arguments ?? {}), argsText: tool.arguments === undefined ? "" : JSON.stringify(tool.arguments),
21
21
  ...(tool.status === "running" ? {} : { result: tool.result ?? null }),
22
22
  isError: tool.status === "failed" || tool.status === "cancelled",
23
23
  // Keep per-tool lifecycle distinct from the enclosing assistant message.
24
- artifact: { caltraToolStatus: tool.status }, })),
24
+ artifact: { caltraToolStatus: tool.status, caltraToolDetailsLoaded: tool.arguments !== undefined, caltraMessageId: message.id }, })),
25
25
  ],
26
+ metadata: { custom: { caltraReasoning: message.reasoning } },
26
27
  createdAt: new Date(message.created_at),
27
28
  id: message.id,
28
29
  role: message.role,
@@ -49,4 +50,5 @@ export function useAssistantUiRuntime(store) {
49
50
  });
50
51
  return runtime;
51
52
  }
53
+ export { useCaltraReasoning } from "./use_reasoning.js";
52
54
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { CaltraSessionRuntime } from "@caltra/client";
2
+ /** Connects reasoning only while a consumer's disclosure is open; normal chat is unaffected. */
3
+ export declare function useCaltraReasoning(session: CaltraSessionRuntime, messageId: string, open: boolean): {
4
+ retry: () => Promise<void>;
5
+ parts: import("@caltra/client").CaltraReasoningSnapshot["parts"];
6
+ loading: boolean;
7
+ streaming: boolean;
8
+ error: Error | null;
9
+ };
10
+ //# sourceMappingURL=use_reasoning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use_reasoning.d.ts","sourceRoot":"","sources":["../src/use_reasoning.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAG3D,gGAAgG;AAChG,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO;;;;;;EASjG"}
@@ -0,0 +1,15 @@
1
+ "use client";
2
+ import { useEffect, useMemo, useSyncExternalStore } from "react";
3
+ /** Connects reasoning only while a consumer's disclosure is open; normal chat is unaffected. */
4
+ export function useCaltraReasoning(session, messageId, open) {
5
+ const resource = useMemo(() => session.reasoning(messageId), [session, messageId]);
6
+ const state = useSyncExternalStore(resource.subscribe, resource.getSnapshot, resource.getSnapshot);
7
+ useEffect(() => {
8
+ if (!open)
9
+ return;
10
+ void resource.start().catch(() => undefined);
11
+ return () => { void resource.stop(); };
12
+ }, [resource, open]);
13
+ return { ...state, retry: async () => { await resource.stop(); await resource.start().catch(() => undefined); } };
14
+ }
15
+ //# sourceMappingURL=use_reasoning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use_reasoning.js","sourceRoot":"","sources":["../src/use_reasoning.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAEjE,gGAAgG;AAChG,MAAM,UAAU,kBAAkB,CAAC,OAA6B,EAAE,SAAiB,EAAE,IAAa;IAChG,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IACnF,MAAM,KAAK,GAAG,oBAAoB,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IACnG,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC7C,OAAO,GAAG,EAAE,GAAG,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IACrB,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACpH,CAAC"}
package/package.json CHANGED
@@ -9,7 +9,7 @@
9
9
  "registry": "https://registry.npmjs.org"
10
10
  },
11
11
  "name": "@caltra/assistant-ui",
12
- "version": "0.1.0",
12
+ "version": "0.3.0",
13
13
  "description": "assistant-ui adapter for framework-neutral Caltra session runtimes",
14
14
  "sideEffects": false,
15
15
  "files": [
@@ -30,7 +30,7 @@
30
30
  "pretypecheck": "npm run build --workspace=@caltra/client"
31
31
  },
32
32
  "dependencies": {
33
- "@caltra/client": "0.10.0"
33
+ "@caltra/client": "0.12.0"
34
34
  },
35
35
  "peerDependencies": {
36
36
  "@assistant-ui/react": "^0.15.16",