@octavus/docs 0.0.8 → 1.0.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 +127 -0
- package/content/01-getting-started/01-introduction.md +3 -3
- package/content/01-getting-started/02-quickstart.md +40 -17
- package/content/02-server-sdk/01-overview.md +54 -11
- package/content/02-server-sdk/02-sessions.md +166 -15
- package/content/02-server-sdk/03-tools.md +21 -21
- package/content/02-server-sdk/04-streaming.md +50 -20
- package/content/02-server-sdk/05-cli.md +247 -0
- package/content/03-client-sdk/01-overview.md +65 -35
- package/content/03-client-sdk/02-messages.md +116 -8
- package/content/03-client-sdk/03-streaming.md +36 -17
- package/content/03-client-sdk/04-execution-blocks.md +8 -12
- package/content/03-client-sdk/05-socket-transport.md +161 -45
- package/content/03-client-sdk/06-http-transport.md +48 -24
- package/content/03-client-sdk/07-structured-output.md +412 -0
- package/content/03-client-sdk/08-file-uploads.md +473 -0
- package/content/03-client-sdk/09-error-handling.md +274 -0
- package/content/04-protocol/01-overview.md +25 -14
- package/content/04-protocol/02-input-resources.md +35 -35
- package/content/04-protocol/03-triggers.md +9 -11
- package/content/04-protocol/04-tools.md +72 -29
- package/content/04-protocol/05-skills.md +304 -0
- package/content/04-protocol/06-handlers.md +304 -0
- package/content/04-protocol/07-agent-config.md +334 -0
- package/content/04-protocol/08-provider-options.md +294 -0
- package/content/04-protocol/09-skills-advanced.md +439 -0
- package/content/04-protocol/10-types.md +719 -0
- package/content/05-api-reference/01-overview.md +20 -21
- package/content/05-api-reference/02-sessions.md +192 -37
- package/content/05-api-reference/03-agents.md +25 -37
- package/content/06-examples/01-overview.md +6 -4
- package/content/06-examples/02-nextjs-chat.md +28 -18
- package/content/06-examples/03-socket-chat.md +53 -30
- package/content/06-examples/_meta.md +0 -1
- package/dist/chunk-WJ2W3DUC.js +663 -0
- package/dist/chunk-WJ2W3DUC.js.map +1 -0
- package/dist/content.js +1 -1
- package/dist/docs.json +106 -34
- package/dist/index.js +1 -1
- package/dist/search-index.json +1 -1
- package/dist/search.js +1 -1
- package/dist/search.js.map +1 -1
- package/dist/sections.json +106 -34
- package/package.json +12 -2
- package/content/04-protocol/05-handlers.md +0 -251
- package/content/04-protocol/06-agent-config.md +0 -209
- package/dist/chunk-232K4EME.js +0 -439
- package/dist/chunk-232K4EME.js.map +0 -1
- package/dist/chunk-2JDZLMS3.js +0 -439
- package/dist/chunk-2JDZLMS3.js.map +0 -1
- package/dist/chunk-2YMRODFE.js +0 -421
- package/dist/chunk-2YMRODFE.js.map +0 -1
- package/dist/chunk-2ZBPX5QB.js +0 -421
- package/dist/chunk-2ZBPX5QB.js.map +0 -1
- package/dist/chunk-3PIIST4D.js +0 -421
- package/dist/chunk-3PIIST4D.js.map +0 -1
- package/dist/chunk-42JETGDO.js +0 -421
- package/dist/chunk-42JETGDO.js.map +0 -1
- package/dist/chunk-4WWUKU4V.js +0 -421
- package/dist/chunk-4WWUKU4V.js.map +0 -1
- package/dist/chunk-5M7DS4DF.js +0 -519
- package/dist/chunk-5M7DS4DF.js.map +0 -1
- package/dist/chunk-6JQ3OMGF.js +0 -421
- package/dist/chunk-6JQ3OMGF.js.map +0 -1
- package/dist/chunk-7AOWCJHW.js +0 -421
- package/dist/chunk-7AOWCJHW.js.map +0 -1
- package/dist/chunk-7AS4ST73.js +0 -421
- package/dist/chunk-7AS4ST73.js.map +0 -1
- package/dist/chunk-7F5WOCIL.js +0 -421
- package/dist/chunk-7F5WOCIL.js.map +0 -1
- package/dist/chunk-7FPUAWSX.js +0 -421
- package/dist/chunk-7FPUAWSX.js.map +0 -1
- package/dist/chunk-APASMJBS.js +0 -421
- package/dist/chunk-APASMJBS.js.map +0 -1
- package/dist/chunk-BCEV3WV2.js +0 -421
- package/dist/chunk-BCEV3WV2.js.map +0 -1
- package/dist/chunk-CHGY4G27.js +0 -421
- package/dist/chunk-CHGY4G27.js.map +0 -1
- package/dist/chunk-CI7JDWKU.js +0 -421
- package/dist/chunk-CI7JDWKU.js.map +0 -1
- package/dist/chunk-CVFWWRL7.js +0 -421
- package/dist/chunk-CVFWWRL7.js.map +0 -1
- package/dist/chunk-EPDM2NIJ.js +0 -421
- package/dist/chunk-EPDM2NIJ.js.map +0 -1
- package/dist/chunk-ESGSYVGK.js +0 -421
- package/dist/chunk-ESGSYVGK.js.map +0 -1
- package/dist/chunk-GDCTM2SV.js +0 -421
- package/dist/chunk-GDCTM2SV.js.map +0 -1
- package/dist/chunk-GJ6FMIPD.js +0 -421
- package/dist/chunk-GJ6FMIPD.js.map +0 -1
- package/dist/chunk-H6JGSSAJ.js +0 -519
- package/dist/chunk-H6JGSSAJ.js.map +0 -1
- package/dist/chunk-IKQHGGUZ.js +0 -421
- package/dist/chunk-IKQHGGUZ.js.map +0 -1
- package/dist/chunk-IUKE3XDN.js +0 -421
- package/dist/chunk-IUKE3XDN.js.map +0 -1
- package/dist/chunk-J26MLMLN.js +0 -421
- package/dist/chunk-J26MLMLN.js.map +0 -1
- package/dist/chunk-J7BMB3ZW.js +0 -421
- package/dist/chunk-J7BMB3ZW.js.map +0 -1
- package/dist/chunk-JCBQRD5N.js +0 -421
- package/dist/chunk-JCBQRD5N.js.map +0 -1
- package/dist/chunk-JOB6YWEF.js +0 -421
- package/dist/chunk-JOB6YWEF.js.map +0 -1
- package/dist/chunk-JZRABTHU.js +0 -519
- package/dist/chunk-JZRABTHU.js.map +0 -1
- package/dist/chunk-K3GFQUMC.js +0 -421
- package/dist/chunk-K3GFQUMC.js.map +0 -1
- package/dist/chunk-LWYMRXBF.js +0 -421
- package/dist/chunk-LWYMRXBF.js.map +0 -1
- package/dist/chunk-M2R2NDPR.js +0 -421
- package/dist/chunk-M2R2NDPR.js.map +0 -1
- package/dist/chunk-MA3P7WCA.js +0 -421
- package/dist/chunk-MA3P7WCA.js.map +0 -1
- package/dist/chunk-MDMRCS4W.mjs +0 -421
- package/dist/chunk-MDMRCS4W.mjs.map +0 -1
- package/dist/chunk-MJXTA2R6.js +0 -421
- package/dist/chunk-MJXTA2R6.js.map +0 -1
- package/dist/chunk-NFVJQNDP.js +0 -421
- package/dist/chunk-NFVJQNDP.js.map +0 -1
- package/dist/chunk-O5TLYMQP.js +0 -421
- package/dist/chunk-O5TLYMQP.js.map +0 -1
- package/dist/chunk-OECAPVSX.js +0 -439
- package/dist/chunk-OECAPVSX.js.map +0 -1
- package/dist/chunk-OL5QDJ42.js +0 -483
- package/dist/chunk-OL5QDJ42.js.map +0 -1
- package/dist/chunk-PMOVVTHO.js +0 -519
- package/dist/chunk-PMOVVTHO.js.map +0 -1
- package/dist/chunk-QCHDPR2D.js +0 -421
- package/dist/chunk-QCHDPR2D.js.map +0 -1
- package/dist/chunk-R5MTVABN.js +0 -439
- package/dist/chunk-R5MTVABN.js.map +0 -1
- package/dist/chunk-RJ4H4YVA.js +0 -519
- package/dist/chunk-RJ4H4YVA.js.map +0 -1
- package/dist/chunk-S5U4IWCR.js +0 -439
- package/dist/chunk-S5U4IWCR.js.map +0 -1
- package/dist/chunk-SCKIOGKI.js +0 -421
- package/dist/chunk-SCKIOGKI.js.map +0 -1
- package/dist/chunk-TGJSIJYP.js +0 -421
- package/dist/chunk-TGJSIJYP.js.map +0 -1
- package/dist/chunk-TQZRBMU7.js +0 -421
- package/dist/chunk-TQZRBMU7.js.map +0 -1
- package/dist/chunk-TRL4RSEO.js +0 -421
- package/dist/chunk-TRL4RSEO.js.map +0 -1
- package/dist/chunk-TWUMRHQ7.js +0 -421
- package/dist/chunk-TWUMRHQ7.js.map +0 -1
- package/dist/chunk-UCJE36LL.js +0 -519
- package/dist/chunk-UCJE36LL.js.map +0 -1
- package/dist/chunk-VCASA6KL.js +0 -421
- package/dist/chunk-VCASA6KL.js.map +0 -1
- package/dist/chunk-VWPQ6ORV.js +0 -421
- package/dist/chunk-VWPQ6ORV.js.map +0 -1
- package/dist/chunk-WPXKIHLT.js +0 -421
- package/dist/chunk-WPXKIHLT.js.map +0 -1
- package/dist/chunk-WUNFFJ32.js +0 -421
- package/dist/chunk-WUNFFJ32.js.map +0 -1
- package/dist/chunk-WW7TRC7S.js +0 -519
- package/dist/chunk-WW7TRC7S.js.map +0 -1
- package/dist/chunk-XVSMRXBJ.js +0 -421
- package/dist/chunk-XVSMRXBJ.js.map +0 -1
- package/dist/chunk-YPPXXV3I.js +0 -421
- package/dist/chunk-YPPXXV3I.js.map +0 -1
- package/dist/chunk-ZKZVV4OQ.js +0 -421
- package/dist/chunk-ZKZVV4OQ.js.map +0 -1
- package/dist/chunk-ZOFEX73I.js +0 -421
- package/dist/chunk-ZOFEX73I.js.map +0 -1
- package/dist/content.mjs +0 -17
- package/dist/content.mjs.map +0 -1
- package/dist/index.mjs +0 -11
- package/dist/index.mjs.map +0 -1
- package/dist/search.mjs +0 -30
- package/dist/search.mjs.map +0 -1
- package/dist/types-BltYGlWI.d.ts +0 -36
|
@@ -10,6 +10,7 @@ This example builds a chat interface using SockJS for bidirectional communicatio
|
|
|
10
10
|
## What You're Building
|
|
11
11
|
|
|
12
12
|
A chat interface that:
|
|
13
|
+
|
|
13
14
|
- Uses SockJS for real-time streaming
|
|
14
15
|
- Manages sessions server-side (client doesn't need sessionId)
|
|
15
16
|
- Supports custom events alongside chat
|
|
@@ -35,12 +36,14 @@ flowchart LR
|
|
|
35
36
|
## Step 1: Install Dependencies
|
|
36
37
|
|
|
37
38
|
**Server:**
|
|
39
|
+
|
|
38
40
|
```bash
|
|
39
41
|
npm install @octavus/server-sdk sockjs express
|
|
40
42
|
npm install -D @types/sockjs @types/express
|
|
41
43
|
```
|
|
42
44
|
|
|
43
45
|
**Client:**
|
|
46
|
+
|
|
44
47
|
```bash
|
|
45
48
|
npm install @octavus/react sockjs-client
|
|
46
49
|
npm install -D @types/sockjs-client
|
|
@@ -182,7 +185,7 @@ server.listen(3001, () => {
|
|
|
182
185
|
|
|
183
186
|
```typescript
|
|
184
187
|
// src/hooks/useOctavusSocket.ts
|
|
185
|
-
import { useMemo } from 'react';
|
|
188
|
+
import { useEffect, useMemo } from 'react';
|
|
186
189
|
import SockJS from 'sockjs-client';
|
|
187
190
|
import { useOctavusChat, createSocketTransport, type SocketLike } from '@octavus/react';
|
|
188
191
|
|
|
@@ -197,25 +200,35 @@ function connectSocket(): Promise<SocketLike> {
|
|
|
197
200
|
|
|
198
201
|
export function useOctavusSocket() {
|
|
199
202
|
// Transport is stable - empty deps because server manages sessions
|
|
200
|
-
const transport = useMemo(
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
203
|
+
const transport = useMemo(() => createSocketTransport({ connect: connectSocket }), []);
|
|
204
|
+
|
|
205
|
+
const {
|
|
206
|
+
messages,
|
|
207
|
+
status,
|
|
208
|
+
error,
|
|
209
|
+
send,
|
|
210
|
+
stop,
|
|
211
|
+
// Socket-specific connection state
|
|
212
|
+
connectionState,
|
|
213
|
+
connectionError,
|
|
214
|
+
connect,
|
|
215
|
+
disconnect,
|
|
216
|
+
} = useOctavusChat({
|
|
206
217
|
transport,
|
|
207
218
|
onError: (err) => console.error('Chat error:', err),
|
|
208
219
|
});
|
|
209
220
|
|
|
221
|
+
// Eagerly connect for UI status indicator
|
|
222
|
+
useEffect(() => {
|
|
223
|
+
connect?.();
|
|
224
|
+
return () => disconnect?.();
|
|
225
|
+
}, [connect, disconnect]);
|
|
226
|
+
|
|
210
227
|
const sendMessage = async (message: string) => {
|
|
211
|
-
await send(
|
|
212
|
-
'user-message',
|
|
213
|
-
{ USER_MESSAGE: message },
|
|
214
|
-
{ userMessage: { content: message } },
|
|
215
|
-
);
|
|
228
|
+
await send('user-message', { USER_MESSAGE: message }, { userMessage: { content: message } });
|
|
216
229
|
};
|
|
217
230
|
|
|
218
|
-
return { messages, status, error, sendMessage, stop };
|
|
231
|
+
return { messages, status, error, connectionState, connectionError, sendMessage, stop };
|
|
219
232
|
}
|
|
220
233
|
```
|
|
221
234
|
|
|
@@ -226,9 +239,20 @@ export function useOctavusSocket() {
|
|
|
226
239
|
import { useState } from 'react';
|
|
227
240
|
import { useOctavusSocket } from '../hooks/useOctavusSocket';
|
|
228
241
|
|
|
242
|
+
function ConnectionIndicator({ state }: { state: string | undefined }) {
|
|
243
|
+
const colors: Record<string, string> = {
|
|
244
|
+
connected: 'bg-green-500',
|
|
245
|
+
connecting: 'bg-yellow-500',
|
|
246
|
+
error: 'bg-red-500',
|
|
247
|
+
disconnected: 'bg-gray-400',
|
|
248
|
+
};
|
|
249
|
+
const color = colors[state ?? 'disconnected'];
|
|
250
|
+
return <div className={`w-2 h-2 rounded-full ${color}`} title={state} />;
|
|
251
|
+
}
|
|
252
|
+
|
|
229
253
|
export function Chat() {
|
|
230
254
|
const [inputValue, setInputValue] = useState('');
|
|
231
|
-
const { messages, status, sendMessage, stop } = useOctavusSocket();
|
|
255
|
+
const { messages, status, connectionState, sendMessage, stop } = useOctavusSocket();
|
|
232
256
|
|
|
233
257
|
const handleSubmit = async (e: React.FormEvent) => {
|
|
234
258
|
e.preventDefault();
|
|
@@ -241,18 +265,19 @@ export function Chat() {
|
|
|
241
265
|
|
|
242
266
|
return (
|
|
243
267
|
<div className="flex flex-col h-screen">
|
|
268
|
+
{/* Header with connection status */}
|
|
269
|
+
<div className="p-4 border-b flex items-center justify-between">
|
|
270
|
+
<h1 className="font-semibold">AI Chat</h1>
|
|
271
|
+
<ConnectionIndicator state={connectionState} />
|
|
272
|
+
</div>
|
|
273
|
+
|
|
244
274
|
{/* Messages */}
|
|
245
275
|
<div className="flex-1 overflow-y-auto p-4 space-y-4">
|
|
246
276
|
{messages.map((msg) => (
|
|
247
|
-
<div
|
|
248
|
-
key={msg.id}
|
|
249
|
-
className={msg.role === 'user' ? 'text-right' : 'text-left'}
|
|
250
|
-
>
|
|
277
|
+
<div key={msg.id} className={msg.role === 'user' ? 'text-right' : 'text-left'}>
|
|
251
278
|
<div
|
|
252
279
|
className={`inline-block p-3 rounded-lg ${
|
|
253
|
-
msg.role === 'user'
|
|
254
|
-
? 'bg-blue-500 text-white'
|
|
255
|
-
: 'bg-gray-100'
|
|
280
|
+
msg.role === 'user' ? 'bg-blue-500 text-white' : 'bg-gray-100'
|
|
256
281
|
}`}
|
|
257
282
|
>
|
|
258
283
|
{msg.parts.map((part, i) => {
|
|
@@ -283,10 +308,7 @@ export function Chat() {
|
|
|
283
308
|
Stop
|
|
284
309
|
</button>
|
|
285
310
|
) : (
|
|
286
|
-
<button
|
|
287
|
-
type="submit"
|
|
288
|
-
className="px-4 py-2 bg-blue-500 text-white rounded-lg"
|
|
289
|
-
>
|
|
311
|
+
<button type="submit" className="px-4 py-2 bg-blue-500 text-white rounded-lg">
|
|
290
312
|
Send
|
|
291
313
|
</button>
|
|
292
314
|
)}
|
|
@@ -326,10 +348,12 @@ const transport = useMemo(
|
|
|
326
348
|
|
|
327
349
|
```typescript
|
|
328
350
|
// Server - send custom events
|
|
329
|
-
conn.write(
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
351
|
+
conn.write(
|
|
352
|
+
JSON.stringify({
|
|
353
|
+
type: 'typing-indicator',
|
|
354
|
+
isTyping: true,
|
|
355
|
+
}),
|
|
356
|
+
);
|
|
333
357
|
```
|
|
334
358
|
|
|
335
359
|
## Protocol Integration
|
|
@@ -389,4 +413,3 @@ const SockJS: typeof import('sockjs-client') = require('sockjs-client');
|
|
|
389
413
|
- [Socket Transport](/docs/client-sdk/socket-transport) — Advanced socket patterns
|
|
390
414
|
- [Protocol Overview](/docs/protocol/overview) — Define agent behavior
|
|
391
415
|
- [Tools](/docs/protocol/tools) — Building tool handlers
|
|
392
|
-
|