@noodleseed/assistant 1.7.0 → 1.9.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 +101 -22
- package/dist/{appearance-DowzFJjh.d.cts → appearance-Cc-eqSbp.d.cts} +1 -1
- package/dist/{appearance-DowzFJjh.d.ts → appearance-Cc-eqSbp.d.ts} +1 -1
- package/dist/{chunk-UXPKSCID.js → chunk-3YYTUJPJ.js} +2 -2
- package/dist/{chunk-35A7REQX.js → chunk-4B3XXGRP.js} +256 -91
- package/dist/chunk-4B3XXGRP.js.map +1 -0
- package/dist/{chunk-NSBPE2FW.js → chunk-5FUTL2UF.js} +6 -1
- package/dist/chunk-BLMJHF7U.js +544 -0
- package/dist/chunk-BLMJHF7U.js.map +1 -0
- package/dist/chunk-RYQBXTLR.js +9089 -0
- package/dist/chunk-RYQBXTLR.js.map +1 -0
- package/dist/{client-D2Y9UFh3.d.cts → client-B803xZVn.d.ts} +44 -2
- package/dist/{client-DBuETUVD.d.ts → client-CsmtpD1z.d.cts} +44 -2
- package/dist/client.cjs +22976 -92
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +3 -2
- package/dist/client.d.ts +3 -2
- package/dist/client.js +3 -2
- package/dist/index.cjs +10750 -2212
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -3
- package/dist/index.d.ts +4 -3
- package/dist/index.js +4 -4
- package/dist/react/client.cjs +23688 -0
- package/dist/react/client.cjs.map +1 -0
- package/dist/react/client.d.cts +24 -0
- package/dist/react/client.d.ts +24 -0
- package/dist/react/client.js +76 -0
- package/dist/react/client.js.map +1 -0
- package/dist/react.cjs +10803 -2215
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +23 -4
- package/dist/react.d.ts +23 -4
- package/dist/react.js +64 -14
- package/dist/react.js.map +1 -1
- package/dist/server.d.cts +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.js +1 -1
- package/dist/token-Y6KCR3JT.js +70 -0
- package/dist/token-Y6KCR3JT.js.map +1 -0
- package/dist/token-util-XFYMRPAB.js +6 -0
- package/dist/{v4-2UXPDMWJ.js → v4-KBRL3YLO.js} +3 -3
- package/dist/v4-KBRL3YLO.js.map +1 -0
- package/package.json +14 -3
- package/dist/chunk-35A7REQX.js.map +0 -1
- package/dist/chunk-7E5HINN4.js +0 -713
- package/dist/chunk-7E5HINN4.js.map +0 -1
- /package/dist/{chunk-UXPKSCID.js.map → chunk-3YYTUJPJ.js.map} +0 -0
- /package/dist/{chunk-NSBPE2FW.js.map → chunk-5FUTL2UF.js.map} +0 -0
- /package/dist/{v4-2UXPDMWJ.js.map → token-util-XFYMRPAB.js.map} +0 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { A as AssistantPageContext, a as AssistantContext, C as CreateAssistantClientOptions, b as AssistantChatState, c as AssistantClient } from '../client-CsmtpD1z.cjs';
|
|
2
|
+
import '../appearance-Cc-eqSbp.cjs';
|
|
3
|
+
import 'ai';
|
|
4
|
+
|
|
5
|
+
interface UseNoodleAssistantOptions<TPageContext extends AssistantPageContext = AssistantContext> extends CreateAssistantClientOptions<TPageContext> {
|
|
6
|
+
/**
|
|
7
|
+
* Browser-local identity for the authenticated principal/tenant.
|
|
8
|
+
* Changing it discards the previous in-memory session and transcript; it is never sent to Noodle.
|
|
9
|
+
*/
|
|
10
|
+
readonly principalKey: string;
|
|
11
|
+
}
|
|
12
|
+
type UseNoodleAssistantResult<TPageContext extends AssistantPageContext = AssistantContext> = AssistantChatState & {
|
|
13
|
+
/** Canonical controller for turns, interactions, context, Apps requests, and aborts. */
|
|
14
|
+
readonly client: AssistantClient<TPageContext>;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Subscribe a customer-owned React renderer to the DOM-free assistant client.
|
|
18
|
+
*
|
|
19
|
+
* The hook owns only client lifetime and React state projection. Session exchange, transport,
|
|
20
|
+
* retries, interaction continuations, and transcript construction remain client responsibilities.
|
|
21
|
+
*/
|
|
22
|
+
declare function useNoodleAssistant<TPageContext extends AssistantPageContext = AssistantContext>(options: UseNoodleAssistantOptions<TPageContext>): UseNoodleAssistantResult<TPageContext>;
|
|
23
|
+
|
|
24
|
+
export { type UseNoodleAssistantOptions, type UseNoodleAssistantResult, useNoodleAssistant };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { A as AssistantPageContext, a as AssistantContext, C as CreateAssistantClientOptions, b as AssistantChatState, c as AssistantClient } from '../client-B803xZVn.js';
|
|
2
|
+
import '../appearance-Cc-eqSbp.js';
|
|
3
|
+
import 'ai';
|
|
4
|
+
|
|
5
|
+
interface UseNoodleAssistantOptions<TPageContext extends AssistantPageContext = AssistantContext> extends CreateAssistantClientOptions<TPageContext> {
|
|
6
|
+
/**
|
|
7
|
+
* Browser-local identity for the authenticated principal/tenant.
|
|
8
|
+
* Changing it discards the previous in-memory session and transcript; it is never sent to Noodle.
|
|
9
|
+
*/
|
|
10
|
+
readonly principalKey: string;
|
|
11
|
+
}
|
|
12
|
+
type UseNoodleAssistantResult<TPageContext extends AssistantPageContext = AssistantContext> = AssistantChatState & {
|
|
13
|
+
/** Canonical controller for turns, interactions, context, Apps requests, and aborts. */
|
|
14
|
+
readonly client: AssistantClient<TPageContext>;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Subscribe a customer-owned React renderer to the DOM-free assistant client.
|
|
18
|
+
*
|
|
19
|
+
* The hook owns only client lifetime and React state projection. Session exchange, transport,
|
|
20
|
+
* retries, interaction continuations, and transcript construction remain client responsibilities.
|
|
21
|
+
*/
|
|
22
|
+
declare function useNoodleAssistant<TPageContext extends AssistantPageContext = AssistantContext>(options: UseNoodleAssistantOptions<TPageContext>): UseNoodleAssistantResult<TPageContext>;
|
|
23
|
+
|
|
24
|
+
export { type UseNoodleAssistantOptions, type UseNoodleAssistantResult, useNoodleAssistant };
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
createAssistantClient
|
|
4
|
+
} from "../chunk-RYQBXTLR.js";
|
|
5
|
+
import "../chunk-3YYTUJPJ.js";
|
|
6
|
+
import "../chunk-5FUTL2UF.js";
|
|
7
|
+
|
|
8
|
+
// src/react-client.ts
|
|
9
|
+
import { useEffect, useLayoutEffect, useMemo, useRef, useSyncExternalStore } from "react";
|
|
10
|
+
var useCommittedLayoutEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
|
|
11
|
+
function useNoodleAssistant(options) {
|
|
12
|
+
const optionsRef = useRef(options);
|
|
13
|
+
const { fetch: injectedFetch, principalKey, sessionEndpoint } = options;
|
|
14
|
+
const client = useMemo(() => {
|
|
15
|
+
if (!principalKey.trim()) throw new Error("principalKey is required");
|
|
16
|
+
return createAssistantClient({
|
|
17
|
+
sessionEndpoint,
|
|
18
|
+
...injectedFetch ? { fetch: injectedFetch } : {},
|
|
19
|
+
clientContext: () => readProvider(optionsRef.current.clientContext),
|
|
20
|
+
pageContext: () => readProvider(optionsRef.current.pageContext)
|
|
21
|
+
});
|
|
22
|
+
}, [injectedFetch, principalKey, sessionEndpoint]);
|
|
23
|
+
const store = useMemo(() => createAssistantReactStore(client), [client]);
|
|
24
|
+
const state = useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot);
|
|
25
|
+
const synchronized = useRef(void 0);
|
|
26
|
+
useCommittedLayoutEffect(() => {
|
|
27
|
+
optionsRef.current = options;
|
|
28
|
+
const previous = synchronized.current;
|
|
29
|
+
if (previous?.client === client) {
|
|
30
|
+
if (previous.context !== options.context) {
|
|
31
|
+
client.updateContext(options.context ?? {});
|
|
32
|
+
}
|
|
33
|
+
if (previous.modelContext !== options.modelContext) {
|
|
34
|
+
client.updateModelContext(options.modelContext ?? {});
|
|
35
|
+
}
|
|
36
|
+
} else {
|
|
37
|
+
if (options.context !== void 0) client.updateContext(options.context);
|
|
38
|
+
if (options.modelContext !== void 0) client.updateModelContext(options.modelContext);
|
|
39
|
+
}
|
|
40
|
+
synchronized.current = {
|
|
41
|
+
client,
|
|
42
|
+
context: options.context,
|
|
43
|
+
modelContext: options.modelContext
|
|
44
|
+
};
|
|
45
|
+
}, [client, options]);
|
|
46
|
+
useCommittedLayoutEffect(
|
|
47
|
+
() => () => {
|
|
48
|
+
client.abort();
|
|
49
|
+
client.resetSession();
|
|
50
|
+
},
|
|
51
|
+
[client]
|
|
52
|
+
);
|
|
53
|
+
return useMemo(() => ({ client, ...state }), [client, state]);
|
|
54
|
+
}
|
|
55
|
+
function createAssistantReactStore(client) {
|
|
56
|
+
let snapshot = client.getChatState();
|
|
57
|
+
return {
|
|
58
|
+
getSnapshot: () => snapshot,
|
|
59
|
+
subscribe(listener) {
|
|
60
|
+
let subscribing = true;
|
|
61
|
+
const unsubscribe = client.subscribeChat((next) => {
|
|
62
|
+
snapshot = next;
|
|
63
|
+
if (!subscribing) listener();
|
|
64
|
+
});
|
|
65
|
+
subscribing = false;
|
|
66
|
+
return unsubscribe;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function readProvider(value) {
|
|
71
|
+
return typeof value === "function" ? value() : value;
|
|
72
|
+
}
|
|
73
|
+
export {
|
|
74
|
+
useNoodleAssistant
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/react-client.ts"],"sourcesContent":["'use client';\n\nimport { useEffect, useLayoutEffect, useMemo, useRef, useSyncExternalStore } from 'react';\nimport {\n type AssistantChatState,\n type AssistantClient,\n type AssistantContext,\n type AssistantModelContextUpdate,\n type AssistantPageContext,\n type CreateAssistantClientOptions,\n createAssistantClient,\n} from './client.js';\n\nexport interface UseNoodleAssistantOptions<\n TPageContext extends AssistantPageContext = AssistantContext,\n> extends CreateAssistantClientOptions<TPageContext> {\n /**\n * Browser-local identity for the authenticated principal/tenant.\n * Changing it discards the previous in-memory session and transcript; it is never sent to Noodle.\n */\n readonly principalKey: string;\n}\n\nexport type UseNoodleAssistantResult<TPageContext extends AssistantPageContext = AssistantContext> =\n AssistantChatState & {\n /** Canonical controller for turns, interactions, context, Apps requests, and aborts. */\n readonly client: AssistantClient<TPageContext>;\n };\n\ninterface AssistantReactStore {\n readonly getSnapshot: () => AssistantChatState;\n readonly subscribe: (listener: () => void) => () => void;\n}\n\nconst useCommittedLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect;\n\n/**\n * Subscribe a customer-owned React renderer to the DOM-free assistant client.\n *\n * The hook owns only client lifetime and React state projection. Session exchange, transport,\n * retries, interaction continuations, and transcript construction remain client responsibilities.\n */\nexport function useNoodleAssistant<TPageContext extends AssistantPageContext = AssistantContext>(\n options: UseNoodleAssistantOptions<TPageContext>,\n): UseNoodleAssistantResult<TPageContext> {\n const optionsRef = useRef(options);\n const { fetch: injectedFetch, principalKey, sessionEndpoint } = options;\n\n const client = useMemo(() => {\n if (!principalKey.trim()) throw new Error('principalKey is required');\n return createAssistantClient<TPageContext>({\n sessionEndpoint,\n ...(injectedFetch ? { fetch: injectedFetch } : {}),\n clientContext: () => readProvider(optionsRef.current.clientContext),\n pageContext: () => readProvider(optionsRef.current.pageContext),\n });\n }, [injectedFetch, principalKey, sessionEndpoint]);\n const store = useMemo(() => createAssistantReactStore(client), [client]);\n const state = useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot);\n const synchronized = useRef<\n | {\n readonly client: AssistantClient<TPageContext>;\n readonly context: AssistantContext | undefined;\n readonly modelContext: AssistantModelContextUpdate | undefined;\n }\n | undefined\n >(undefined);\n\n useCommittedLayoutEffect(() => {\n optionsRef.current = options;\n const previous = synchronized.current;\n if (previous?.client === client) {\n if (previous.context !== options.context) {\n client.updateContext(options.context ?? {});\n }\n if (previous.modelContext !== options.modelContext) {\n client.updateModelContext(options.modelContext ?? {});\n }\n } else {\n if (options.context !== undefined) client.updateContext(options.context);\n if (options.modelContext !== undefined) client.updateModelContext(options.modelContext);\n }\n synchronized.current = {\n client,\n context: options.context,\n modelContext: options.modelContext,\n };\n }, [client, options]);\n\n useCommittedLayoutEffect(\n () => () => {\n client.abort();\n client.resetSession();\n },\n [client],\n );\n\n return useMemo(() => ({ client, ...state }), [client, state]);\n}\n\nfunction createAssistantReactStore<TPageContext extends AssistantPageContext>(\n client: AssistantClient<TPageContext>,\n): AssistantReactStore {\n let snapshot = client.getChatState();\n return {\n getSnapshot: () => snapshot,\n subscribe(listener) {\n let subscribing = true;\n const unsubscribe = client.subscribeChat((next) => {\n snapshot = next;\n if (!subscribing) listener();\n });\n subscribing = false;\n return unsubscribe;\n },\n };\n}\n\nfunction readProvider<T>(value: T | (() => T | undefined) | undefined): T | undefined {\n return typeof value === 'function' ? (value as () => T | undefined)() : value;\n}\n"],"mappings":";;;;;;;;AAEA,SAAS,WAAW,iBAAiB,SAAS,QAAQ,4BAA4B;AAgClF,IAAM,2BAA2B,OAAO,WAAW,cAAc,YAAY;AAQtE,SAAS,mBACd,SACwC;AACxC,QAAM,aAAa,OAAO,OAAO;AACjC,QAAM,EAAE,OAAO,eAAe,cAAc,gBAAgB,IAAI;AAEhE,QAAM,SAAS,QAAQ,MAAM;AAC3B,QAAI,CAAC,aAAa,KAAK,EAAG,OAAM,IAAI,MAAM,0BAA0B;AACpE,WAAO,sBAAoC;AAAA,MACzC;AAAA,MACA,GAAI,gBAAgB,EAAE,OAAO,cAAc,IAAI,CAAC;AAAA,MAChD,eAAe,MAAM,aAAa,WAAW,QAAQ,aAAa;AAAA,MAClE,aAAa,MAAM,aAAa,WAAW,QAAQ,WAAW;AAAA,IAChE,CAAC;AAAA,EACH,GAAG,CAAC,eAAe,cAAc,eAAe,CAAC;AACjD,QAAM,QAAQ,QAAQ,MAAM,0BAA0B,MAAM,GAAG,CAAC,MAAM,CAAC;AACvE,QAAM,QAAQ,qBAAqB,MAAM,WAAW,MAAM,aAAa,MAAM,WAAW;AACxF,QAAM,eAAe,OAOnB,MAAS;AAEX,2BAAyB,MAAM;AAC7B,eAAW,UAAU;AACrB,UAAM,WAAW,aAAa;AAC9B,QAAI,UAAU,WAAW,QAAQ;AAC/B,UAAI,SAAS,YAAY,QAAQ,SAAS;AACxC,eAAO,cAAc,QAAQ,WAAW,CAAC,CAAC;AAAA,MAC5C;AACA,UAAI,SAAS,iBAAiB,QAAQ,cAAc;AAClD,eAAO,mBAAmB,QAAQ,gBAAgB,CAAC,CAAC;AAAA,MACtD;AAAA,IACF,OAAO;AACL,UAAI,QAAQ,YAAY,OAAW,QAAO,cAAc,QAAQ,OAAO;AACvE,UAAI,QAAQ,iBAAiB,OAAW,QAAO,mBAAmB,QAAQ,YAAY;AAAA,IACxF;AACA,iBAAa,UAAU;AAAA,MACrB;AAAA,MACA,SAAS,QAAQ;AAAA,MACjB,cAAc,QAAQ;AAAA,IACxB;AAAA,EACF,GAAG,CAAC,QAAQ,OAAO,CAAC;AAEpB;AAAA,IACE,MAAM,MAAM;AACV,aAAO,MAAM;AACb,aAAO,aAAa;AAAA,IACtB;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AAEA,SAAO,QAAQ,OAAO,EAAE,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,KAAK,CAAC;AAC9D;AAEA,SAAS,0BACP,QACqB;AACrB,MAAI,WAAW,OAAO,aAAa;AACnC,SAAO;AAAA,IACL,aAAa,MAAM;AAAA,IACnB,UAAU,UAAU;AAClB,UAAI,cAAc;AAClB,YAAM,cAAc,OAAO,cAAc,CAAC,SAAS;AACjD,mBAAW;AACX,YAAI,CAAC,YAAa,UAAS;AAAA,MAC7B,CAAC;AACD,oBAAc;AACd,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAAS,aAAgB,OAA6D;AACpF,SAAO,OAAO,UAAU,aAAc,MAA8B,IAAI;AAC1E;","names":[]}
|