@darqlabs/curator-sdk-react 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.
- package/LICENSE +21 -0
- package/README.md +205 -0
- package/dist/cjs/CuratorAdapter.d.ts +28 -0
- package/dist/cjs/CuratorAdapter.d.ts.map +1 -0
- package/dist/cjs/CuratorAdapter.js +100 -0
- package/dist/cjs/CuratorAdapter.js.map +1 -0
- package/dist/cjs/CuratorChat.d.ts +70 -0
- package/dist/cjs/CuratorChat.d.ts.map +1 -0
- package/dist/cjs/CuratorChat.js +454 -0
- package/dist/cjs/CuratorChat.js.map +1 -0
- package/dist/cjs/CuratorChatLauncher.d.ts +57 -0
- package/dist/cjs/CuratorChatLauncher.d.ts.map +1 -0
- package/dist/cjs/CuratorChatLauncher.js +134 -0
- package/dist/cjs/CuratorChatLauncher.js.map +1 -0
- package/dist/cjs/CuratorProvider.d.ts +37 -0
- package/dist/cjs/CuratorProvider.d.ts.map +1 -0
- package/dist/cjs/CuratorProvider.js +49 -0
- package/dist/cjs/CuratorProvider.js.map +1 -0
- package/dist/cjs/Markdown.d.ts +16 -0
- package/dist/cjs/Markdown.d.ts.map +1 -0
- package/dist/cjs/Markdown.js +18 -0
- package/dist/cjs/Markdown.js.map +1 -0
- package/dist/cjs/brand.d.ts +26 -0
- package/dist/cjs/brand.d.ts.map +1 -0
- package/dist/cjs/brand.js +47 -0
- package/dist/cjs/brand.js.map +1 -0
- package/dist/cjs/index.d.ts +10 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +17 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/normalizeMarkdown.d.ts +24 -0
- package/dist/cjs/normalizeMarkdown.d.ts.map +1 -0
- package/dist/cjs/normalizeMarkdown.js +111 -0
- package/dist/cjs/normalizeMarkdown.js.map +1 -0
- package/dist/cjs/useCuratorChat.d.ts +79 -0
- package/dist/cjs/useCuratorChat.d.ts.map +1 -0
- package/dist/cjs/useCuratorChat.js +135 -0
- package/dist/cjs/useCuratorChat.js.map +1 -0
- package/dist/esm/CuratorAdapter.d.ts +28 -0
- package/dist/esm/CuratorAdapter.d.ts.map +1 -0
- package/dist/esm/CuratorAdapter.js +97 -0
- package/dist/esm/CuratorAdapter.js.map +1 -0
- package/dist/esm/CuratorChat.d.ts +70 -0
- package/dist/esm/CuratorChat.d.ts.map +1 -0
- package/dist/esm/CuratorChat.js +451 -0
- package/dist/esm/CuratorChat.js.map +1 -0
- package/dist/esm/CuratorChatLauncher.d.ts +57 -0
- package/dist/esm/CuratorChatLauncher.d.ts.map +1 -0
- package/dist/esm/CuratorChatLauncher.js +131 -0
- package/dist/esm/CuratorChatLauncher.js.map +1 -0
- package/dist/esm/CuratorProvider.d.ts +37 -0
- package/dist/esm/CuratorProvider.d.ts.map +1 -0
- package/dist/esm/CuratorProvider.js +44 -0
- package/dist/esm/CuratorProvider.js.map +1 -0
- package/dist/esm/Markdown.d.ts +16 -0
- package/dist/esm/Markdown.d.ts.map +1 -0
- package/dist/esm/Markdown.js +12 -0
- package/dist/esm/Markdown.js.map +1 -0
- package/dist/esm/brand.d.ts +26 -0
- package/dist/esm/brand.d.ts.map +1 -0
- package/dist/esm/brand.js +43 -0
- package/dist/esm/brand.js.map +1 -0
- package/dist/esm/index.d.ts +10 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/normalizeMarkdown.d.ts +24 -0
- package/dist/esm/normalizeMarkdown.d.ts.map +1 -0
- package/dist/esm/normalizeMarkdown.js +108 -0
- package/dist/esm/normalizeMarkdown.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/useCuratorChat.d.ts +79 -0
- package/dist/esm/useCuratorChat.d.ts.map +1 -0
- package/dist/esm/useCuratorChat.js +132 -0
- package/dist/esm/useCuratorChat.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Headless chat hook for the Curator SDK.
|
|
3
|
+
*
|
|
4
|
+
* Manages a single conversation against a deployed agent. Owns the
|
|
5
|
+
* `Chat` instance from the SDK, exposes the rolling message list, a
|
|
6
|
+
* `send()` action, and the various pending/error states the UI needs.
|
|
7
|
+
*
|
|
8
|
+
* Bring your own UI on top of this hook, or use `<CuratorChat />` for
|
|
9
|
+
* the drop-in styled widget that consumes this hook internally.
|
|
10
|
+
*/
|
|
11
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
12
|
+
import { CuratorAgentError, CuratorApprovalRequiredError, CuratorAuthError, CuratorDeploymentRetiredError, CuratorForbiddenError, CuratorNotFoundError, CuratorRateLimitError, CuratorTimeoutError, } from "@darqlabs/curator-sdk";
|
|
13
|
+
import { useCuratorOrNull } from "./CuratorProvider.js";
|
|
14
|
+
let counter = 0;
|
|
15
|
+
function localId() {
|
|
16
|
+
counter += 1;
|
|
17
|
+
return `local_${Date.now().toString(36)}_${counter}`;
|
|
18
|
+
}
|
|
19
|
+
export function useCuratorChat(opts) {
|
|
20
|
+
const { agent, project, environment, system, conversationId, onMessage, onError } = opts;
|
|
21
|
+
// Resolve the client: explicit prop wins, then context, then fail loud.
|
|
22
|
+
const contextClient = useCuratorOrNull();
|
|
23
|
+
const curator = opts.curator ?? contextClient;
|
|
24
|
+
if (!curator) {
|
|
25
|
+
throw new Error("useCuratorChat() requires a Curator client. Either pass `curator` explicitly " +
|
|
26
|
+
"or wrap your app in <CuratorProvider client={curator}>.");
|
|
27
|
+
}
|
|
28
|
+
// Construct the Chat on first render and whenever any addressing input
|
|
29
|
+
// changes. Re-creating on slug/project/env changes prevents accidentally
|
|
30
|
+
// sending to a stale agent if the consumer swaps props.
|
|
31
|
+
const chat = useMemo(() => {
|
|
32
|
+
const agentHandle = curator.agent(agent, { project, environment, system });
|
|
33
|
+
return conversationId ? agentHandle.conversation(conversationId) : agentHandle.chat();
|
|
34
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
35
|
+
}, [curator, agent, project, environment, system, conversationId]);
|
|
36
|
+
const [messages, setMessages] = useState([]);
|
|
37
|
+
const [sending, setSending] = useState(false);
|
|
38
|
+
const [error, setError] = useState(null);
|
|
39
|
+
const [conversationIdState, setConversationIdState] = useState(conversationId ?? null);
|
|
40
|
+
// Whenever the chat handle changes (consumer swapped props or called
|
|
41
|
+
// reset), wipe local message state to avoid mixing transcripts.
|
|
42
|
+
const lastChatRef = useRef(null);
|
|
43
|
+
useEffect(() => {
|
|
44
|
+
if (lastChatRef.current !== chat) {
|
|
45
|
+
lastChatRef.current = chat;
|
|
46
|
+
setMessages([]);
|
|
47
|
+
setError(null);
|
|
48
|
+
setConversationIdState(chat.id);
|
|
49
|
+
}
|
|
50
|
+
}, [chat]);
|
|
51
|
+
const send = useCallback(async (content, args = {}) => {
|
|
52
|
+
const trimmed = content.trim();
|
|
53
|
+
if (!trimmed && !args.files?.length)
|
|
54
|
+
return;
|
|
55
|
+
const userBubble = { kind: "user", content: trimmed, localId: localId() };
|
|
56
|
+
setMessages((prev) => [...prev, userBubble]);
|
|
57
|
+
setSending(true);
|
|
58
|
+
setError(null);
|
|
59
|
+
try {
|
|
60
|
+
const reply = await chat.send(trimmed, args);
|
|
61
|
+
setConversationIdState(reply.conversationId);
|
|
62
|
+
setMessages((prev) => [
|
|
63
|
+
...prev,
|
|
64
|
+
{
|
|
65
|
+
kind: "assistant",
|
|
66
|
+
content: reply.content,
|
|
67
|
+
sequence: reply.sequence,
|
|
68
|
+
stepId: reply.stepId,
|
|
69
|
+
createdAt: reply.createdAt,
|
|
70
|
+
runId: reply.runId,
|
|
71
|
+
},
|
|
72
|
+
]);
|
|
73
|
+
onMessage?.(reply);
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
const message = renderError(err);
|
|
77
|
+
setError(err);
|
|
78
|
+
setMessages((prev) => [...prev, { kind: "error", message, localId: localId() }]);
|
|
79
|
+
onError?.(err);
|
|
80
|
+
}
|
|
81
|
+
finally {
|
|
82
|
+
setSending(false);
|
|
83
|
+
}
|
|
84
|
+
}, [chat, onMessage, onError]);
|
|
85
|
+
const reset = useCallback(() => {
|
|
86
|
+
// Force the memo to refresh by zeroing the ref; the consumer-controlled
|
|
87
|
+
// inputs determine the next Chat. For the no-prop-change case, we
|
|
88
|
+
// instead just clear local state — the existing Chat is still valid.
|
|
89
|
+
setMessages([]);
|
|
90
|
+
setError(null);
|
|
91
|
+
setConversationIdState(chat.id);
|
|
92
|
+
}, [chat]);
|
|
93
|
+
return {
|
|
94
|
+
messages,
|
|
95
|
+
send,
|
|
96
|
+
sending,
|
|
97
|
+
error,
|
|
98
|
+
chat,
|
|
99
|
+
conversationId: conversationIdState,
|
|
100
|
+
reset,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
function renderError(err) {
|
|
104
|
+
if (err instanceof CuratorApprovalRequiredError) {
|
|
105
|
+
return `That action needs administrator approval. Please contact your administrator to review the request for "${err.approval.tool_name}".`;
|
|
106
|
+
}
|
|
107
|
+
if (err instanceof CuratorAgentError) {
|
|
108
|
+
return err.message || `Agent error (${err.failureClass}).`;
|
|
109
|
+
}
|
|
110
|
+
if (err instanceof CuratorTimeoutError) {
|
|
111
|
+
return "The agent is taking longer than expected. It may still complete in the background.";
|
|
112
|
+
}
|
|
113
|
+
if (err instanceof CuratorAuthError) {
|
|
114
|
+
return "Authentication failed. Check your API key.";
|
|
115
|
+
}
|
|
116
|
+
if (err instanceof CuratorForbiddenError) {
|
|
117
|
+
return err.message || "Permission denied.";
|
|
118
|
+
}
|
|
119
|
+
if (err instanceof CuratorNotFoundError) {
|
|
120
|
+
return err.message || "Deployment or conversation not found.";
|
|
121
|
+
}
|
|
122
|
+
if (err instanceof CuratorDeploymentRetiredError) {
|
|
123
|
+
return "This deployment has been retired by the operator.";
|
|
124
|
+
}
|
|
125
|
+
if (err instanceof CuratorRateLimitError) {
|
|
126
|
+
return "Rate limit reached. Please wait a moment and try again.";
|
|
127
|
+
}
|
|
128
|
+
if (err instanceof Error)
|
|
129
|
+
return err.message;
|
|
130
|
+
return "Something went wrong.";
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=useCuratorChat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCuratorChat.js","sourceRoot":"","sources":["../../src/useCuratorChat.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@darqlabs/curator-sdk-react",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Official React components for Curator — drop-in chat widget and headless hook backed by @darqlabs/curator-sdk.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"main": "./dist/cjs/index.js",
|
|
7
|
+
"module": "./dist/esm/index.js",
|
|
8
|
+
"types": "./dist/cjs/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/cjs/index.d.ts",
|
|
12
|
+
"import": "./dist/esm/index.js",
|
|
13
|
+
"require": "./dist/cjs/index.js",
|
|
14
|
+
"default": "./dist/cjs/index.js"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist",
|
|
19
|
+
"README.md",
|
|
20
|
+
"LICENSE"
|
|
21
|
+
],
|
|
22
|
+
"sideEffects": false,
|
|
23
|
+
"publishConfig": {
|
|
24
|
+
"access": "public"
|
|
25
|
+
},
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=18"
|
|
28
|
+
},
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"@assistant-ui/react": "^0.14.26",
|
|
31
|
+
"react-markdown": "^10.0.0"
|
|
32
|
+
},
|
|
33
|
+
"peerDependencies": {
|
|
34
|
+
"react": "^18.0.0 || ^19.0.0",
|
|
35
|
+
"react-dom": "^18.0.0 || ^19.0.0",
|
|
36
|
+
"@darqlabs/curator-sdk": "^0.1.0"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@testing-library/react": "^16.1.0",
|
|
40
|
+
"@types/jest": "^30.0.0",
|
|
41
|
+
"@types/react": "^18.3.0",
|
|
42
|
+
"@types/react-dom": "^18.3.0",
|
|
43
|
+
"jest": "^30.3.0",
|
|
44
|
+
"jest-environment-jsdom": "^30.0.0",
|
|
45
|
+
"react": "^18.3.0",
|
|
46
|
+
"react-dom": "^18.3.0",
|
|
47
|
+
"ts-jest": "^29.4.9",
|
|
48
|
+
"typescript": "^5.9.3",
|
|
49
|
+
"@darqlabs/curator-sdk": "^0.1.0"
|
|
50
|
+
},
|
|
51
|
+
"keywords": [
|
|
52
|
+
"curator",
|
|
53
|
+
"ai",
|
|
54
|
+
"agents",
|
|
55
|
+
"react",
|
|
56
|
+
"chat",
|
|
57
|
+
"sdk"
|
|
58
|
+
],
|
|
59
|
+
"scripts": {
|
|
60
|
+
"clean": "rm -rf dist .tsbuild",
|
|
61
|
+
"build": "tsc -p tsconfig.cjs.json && tsc -p tsconfig.esm.json && node ./scripts/write-esm-marker.cjs",
|
|
62
|
+
"typecheck": "tsc --noEmit",
|
|
63
|
+
"test": "jest",
|
|
64
|
+
"test:coverage": "jest --coverage"
|
|
65
|
+
}
|
|
66
|
+
}
|