@jini-ai/chat 0.3.7 → 0.3.8
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/react/features/chat-pane/agent-tools.d.ts +1 -1
- package/dist/react/features/chat-pane/agent-tools.js +3 -3
- package/dist/react/features/chat-pane/agent-tools.js.map +1 -1
- package/dist/react/features/chat-pane/components/AgentRuntimePicker.js +1 -1
- package/dist/react/features/chat-pane/components/AgentRuntimePicker.js.map +1 -1
- package/dist/react/features/chat-pane/components/ChatPane.d.ts +1 -1
- package/dist/react/features/chat-pane/components/ChatPane.d.ts.map +1 -1
- package/dist/react/features/chat-pane/components/ChatPane.js +2 -1
- package/dist/react/features/chat-pane/components/ChatPane.js.map +1 -1
- package/dist/react/features/chat-pane/hooks/useChatPane.hooks.d.ts +4 -2
- package/dist/react/features/chat-pane/hooks/useChatPane.hooks.d.ts.map +1 -1
- package/dist/react/features/chat-pane/hooks/useChatPane.hooks.js +1 -0
- package/dist/react/features/chat-pane/hooks/useChatPane.hooks.js.map +1 -1
- package/dist/react/features/chat-pane/types.d.ts +14 -2
- package/dist/react/features/chat-pane/types.d.ts.map +1 -1
- package/dist/react/hooks/composer-draft-cache.d.ts +104 -41
- package/dist/react/hooks/composer-draft-cache.d.ts.map +1 -1
- package/dist/react/hooks/composer-draft-cache.js +369 -51
- package/dist/react/hooks/composer-draft-cache.js.map +1 -1
- package/dist/react/hooks/useComposer.d.ts +17 -0
- package/dist/react/hooks/useComposer.d.ts.map +1 -1
- package/dist/react/hooks/useComposer.js +93 -12
- package/dist/react/hooks/useComposer.js.map +1 -1
- package/dist/react/hooks/useConversation.d.ts.map +1 -1
- package/dist/react/hooks/useConversation.js +55 -0
- package/dist/react/hooks/useConversation.js.map +1 -1
- package/package.json +2 -2
|
@@ -17,22 +17,22 @@
|
|
|
17
17
|
* draft/attachment/mention/agent-selection *state shape* is kept.
|
|
18
18
|
*
|
|
19
19
|
* `conversationId` (when supplied) keys the draft — and, on a change, the staged attachments and
|
|
20
|
-
* mention popover — against `composer-draft-cache.ts
|
|
21
|
-
* conversations
|
|
22
|
-
* conversation. That cache is a separate, always-on mechanism from `persistence` above
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
20
|
+
* mention popover — against `composer-draft-cache.ts`, so whatever was typed comes back on a switch
|
|
21
|
+
* between conversations, on a `ChatPane` remount, and on a full page reload, without leaking into
|
|
22
|
+
* the wrong conversation. That cache is a separate, always-on mechanism from `persistence` above,
|
|
23
|
+
* which stays an opt-in host-owned slot this hook never touches directly and which still wins at
|
|
24
|
+
* mount when a host wires one; the cache needs no host wiring and is what actually fixes the
|
|
25
|
+
* reported data loss (see its module doc). Staged attachments and the mention popover are
|
|
26
|
+
* deliberately NOT cached across a switch (unlike the draft text): they reference an in-flight
|
|
27
|
+
* upload batch, and carrying them into a different conversation risks attaching the wrong files to
|
|
28
|
+
* the wrong thread, so they are cleared instead.
|
|
29
29
|
*/
|
|
30
30
|
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
31
|
-
import { readCachedDraft, writeCachedDraft } from './composer-draft-cache.js';
|
|
31
|
+
import { readCachedAttachments, readCachedDraft, writeCachedAttachments, writeCachedDraft, } from './composer-draft-cache.js';
|
|
32
32
|
import { cacheAttachmentPreviewSource } from './attachment-preview-cache.js';
|
|
33
33
|
const EMPTY_MENTION = { open: false, query: '', results: [] };
|
|
34
34
|
export function useComposer(options = {}) {
|
|
35
|
-
const { project, composerSlots, persistence, conversationId } = options;
|
|
35
|
+
const { project, composerSlots, persistence, conversationId, validateAttachments } = options;
|
|
36
36
|
const [draft, setDraftState] = useState(() => options.initialDraft ?? persistence?.read() ?? readCachedDraft(conversationId) ?? '');
|
|
37
37
|
const [attachments, setAttachments] = useState([]);
|
|
38
38
|
const [agent, setAgent] = useState(options.initialAgent);
|
|
@@ -42,6 +42,10 @@ export function useComposer(options = {}) {
|
|
|
42
42
|
persistence?.write(next);
|
|
43
43
|
writeCachedDraft(conversationId, next);
|
|
44
44
|
}, [persistence, conversationId]);
|
|
45
|
+
// Lets the conversation-change effect below read the live draft without taking `draft` as a
|
|
46
|
+
// dependency, which would re-run it on every keystroke.
|
|
47
|
+
const draftRef = useRef(draft);
|
|
48
|
+
draftRef.current = draft;
|
|
45
49
|
// Re-keys the draft (and drops attachments/the mention popover — see this module's doc) when
|
|
46
50
|
// `conversationId` changes WITHOUT a remount — a host that keeps the composer mounted across
|
|
47
51
|
// conversations, unlike a host that remounts `ChatPane` via a conversation-keyed `key` (the
|
|
@@ -49,13 +53,90 @@ export function useComposer(options = {}) {
|
|
|
49
53
|
// render via the ref comparison so it never fights that initializer.
|
|
50
54
|
const previousConversationIdRef = useRef(conversationId);
|
|
51
55
|
useEffect(() => {
|
|
56
|
+
const previousConversationId = previousConversationIdRef.current;
|
|
52
57
|
if (conversationId === previousConversationIdRef.current)
|
|
53
58
|
return;
|
|
54
59
|
previousConversationIdRef.current = conversationId;
|
|
55
|
-
|
|
60
|
+
const restored = readCachedDraft(conversationId);
|
|
61
|
+
// An id arriving where there was none is NOT a switch between two conversations — it is the one
|
|
62
|
+
// the operator is already looking at finally getting a key (a new chat created server-side
|
|
63
|
+
// mid-compose, or a host that resolves the active id asynchronously after mount). Adopt what
|
|
64
|
+
// they have typed instead of wiping it: writes no-op while the id is absent, so that text
|
|
65
|
+
// exists in this hook's state and nowhere else, and an empty restore must never clobber text
|
|
66
|
+
// the person can currently see. Guarded to `previousConversationId == null` so a real
|
|
67
|
+
// conversation-to-conversation switch still clears, and cannot leak one thread's half-written
|
|
68
|
+
// message into another. Attachments and the mention popover are left alone here for the same
|
|
69
|
+
// reason — nothing was switched away from.
|
|
70
|
+
if (previousConversationId == null && conversationId != null && restored === null && draftRef.current.trim() !== '') {
|
|
71
|
+
writeCachedDraft(conversationId, draftRef.current);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
setDraftState(restored ?? '');
|
|
56
75
|
setAttachments([]);
|
|
57
76
|
setMention(EMPTY_MENTION);
|
|
58
77
|
}, [conversationId]);
|
|
78
|
+
// Held in a ref so an inline arrow from the host does not re-run the restore below on every
|
|
79
|
+
// render. Reassigned each render so a host that swaps implementations still gets the new one.
|
|
80
|
+
const validateAttachmentsRef = useRef(validateAttachments);
|
|
81
|
+
validateAttachmentsRef.current = validateAttachments;
|
|
82
|
+
// Which conversation the attachment restore has already settled for. Compared against the live
|
|
83
|
+
// `conversationId` before any persist, so the switch effect's own `setAttachments([])` can never
|
|
84
|
+
// race ahead and delete the conversation being switched TO. `undefined` means "not settled yet",
|
|
85
|
+
// which is why this is not a boolean.
|
|
86
|
+
const attachmentsHydratedForRef = useRef(undefined);
|
|
87
|
+
// Restores previously staged attachments, but only ones the host confirms still exist. Without a
|
|
88
|
+
// validator this does nothing at all: attachment persistence stays off and only the draft text
|
|
89
|
+
// survives, which is the documented default (see `validateAttachments`).
|
|
90
|
+
useEffect(() => {
|
|
91
|
+
const validate = validateAttachmentsRef.current;
|
|
92
|
+
if (!validate || !conversationId) {
|
|
93
|
+
attachmentsHydratedForRef.current = conversationId;
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
const cached = readCachedAttachments(conversationId);
|
|
97
|
+
if (cached === null || cached.length === 0) {
|
|
98
|
+
attachmentsHydratedForRef.current = conversationId;
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
let cancelled = false;
|
|
102
|
+
void (async () => {
|
|
103
|
+
let valid = [];
|
|
104
|
+
try {
|
|
105
|
+
valid = await validate(cached);
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
// A validator that throws tells us nothing about the files, so assume none survived rather
|
|
109
|
+
// than restoring references we cannot vouch for.
|
|
110
|
+
valid = [];
|
|
111
|
+
}
|
|
112
|
+
if (cancelled)
|
|
113
|
+
return;
|
|
114
|
+
if (valid.length > 0) {
|
|
115
|
+
// Only seeds an untouched composer: anything the operator staged while validation was in
|
|
116
|
+
// flight is theirs and outranks a restore.
|
|
117
|
+
setAttachments((prev) => (prev.length === 0 ? [...valid] : prev));
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
// Every reference was dead. Purge them so the next load does not pay for this again.
|
|
121
|
+
writeCachedAttachments(conversationId, []);
|
|
122
|
+
}
|
|
123
|
+
attachmentsHydratedForRef.current = conversationId;
|
|
124
|
+
})();
|
|
125
|
+
return () => {
|
|
126
|
+
cancelled = true;
|
|
127
|
+
};
|
|
128
|
+
}, [conversationId]);
|
|
129
|
+
// Persists staged attachments once the restore for THIS conversation has settled. Gated on the
|
|
130
|
+
// settle marker so a mount's initial empty `attachments` cannot delete what is still being
|
|
131
|
+
// restored. An empty list deletes the entry, so a send (which clears attachments) also clears the
|
|
132
|
+
// cached references, matching the draft text's own rule.
|
|
133
|
+
useEffect(() => {
|
|
134
|
+
if (!validateAttachmentsRef.current || !conversationId)
|
|
135
|
+
return;
|
|
136
|
+
if (attachmentsHydratedForRef.current !== conversationId)
|
|
137
|
+
return;
|
|
138
|
+
writeCachedAttachments(conversationId, attachments);
|
|
139
|
+
}, [attachments, conversationId]);
|
|
59
140
|
const addAttachment = useCallback((attachment) => {
|
|
60
141
|
setAttachments((prev) => [...prev, attachment]);
|
|
61
142
|
}, []);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useComposer.js","sourceRoot":"","sources":["../../../src/react/hooks/useComposer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE1E,OAAO,
|
|
1
|
+
{"version":3,"file":"useComposer.js","sourceRoot":"","sources":["../../../src/react/hooks/useComposer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useConversation.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useConversation.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAc,cAAc,EAAE,WAAW,EAAiB,MAAM,qBAAqB,CAAC;AAElG,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGrE,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,aAAa,CAAC;IACzB,eAAe,CAAC,EAAE,WAAW,EAAE,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6FAA6F;IAC7F,eAAe,CAAC,EAAE,MAAM,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,yKAAyK;IACzK,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,6FAA6F;IAC7F,KAAK,EAAE,CAAC,kBAAkB,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,WAAW,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,CAAC,KAAK,IAAI,CAAC;IACzF,4EAA4E;IAC5E,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,kHAAkH;IAClH,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAiBD,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,qBAAqB,
|
|
1
|
+
{"version":3,"file":"useConversation.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useConversation.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAc,cAAc,EAAE,WAAW,EAAiB,MAAM,qBAAqB,CAAC;AAElG,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGrE,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,aAAa,CAAC;IACzB,eAAe,CAAC,EAAE,WAAW,EAAE,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6FAA6F;IAC7F,eAAe,CAAC,EAAE,MAAM,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,yKAAyK;IACzK,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,6FAA6F;IAC7F,KAAK,EAAE,CAAC,kBAAkB,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,WAAW,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,CAAC,KAAK,IAAI,CAAC;IACzF,4EAA4E;IAC5E,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,kHAAkH;IAClH,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAiBD,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,qBAAqB,CAmMtF"}
|
|
@@ -40,6 +40,61 @@ export function useConversation(options) {
|
|
|
40
40
|
const setMessages = useCallback((updater) => {
|
|
41
41
|
setMessagesState((prev) => (typeof updater === 'function' ? updater(prev) : updater));
|
|
42
42
|
}, []);
|
|
43
|
+
/**
|
|
44
|
+
* The mount-time snapshot of `initialMessages`, captured once — the same "read once, never react
|
|
45
|
+
* to a later identity change" contract `messages`'s own `useState` initializer above already has
|
|
46
|
+
* for this same prop. A host's `initialMessages` array is expected to be a fresh identity on every
|
|
47
|
+
* render (`ChatPane` remounts the whole pane with a fresh `key` on a real conversation switch
|
|
48
|
+
* rather than pushing a new array into a live one), so depending on it directly in the effect below
|
|
49
|
+
* would re-fire on every render of a host that does not itself memoize the prop.
|
|
50
|
+
*/
|
|
51
|
+
const initialMessagesRef = useRef(options.initialMessages);
|
|
52
|
+
/**
|
|
53
|
+
* Resumes an interrupted run on mount instead of leaving it frozen forever.
|
|
54
|
+
*
|
|
55
|
+
* `run.reattach` (`useRunStream.ts`) has existed since 2026-07-29 and is fully implemented —
|
|
56
|
+
* generation-guarded against double-subscription, abortable, race-safe — but until this effect,
|
|
57
|
+
* nothing in this package or any host ever called it. The gap it left: once a browser's live
|
|
58
|
+
* subscription to a run is torn down for ANY reason (this hook unmounting, a host remount, an HMR
|
|
59
|
+
* reload, a daemon restart), the run keeps going server-side and nothing ever tells the browser
|
|
60
|
+
* about it again — no more events, no more persistence, no error, just a frozen pane. See
|
|
61
|
+
* `ADS-memory/reports/2026-09-11-ask-choice-render-trace.md` and
|
|
62
|
+
* `ADS-memory/reports/2026-09-11-wire-reattach.md` (Tovu) for the full incident trace and the
|
|
63
|
+
* investigation that led here. Reattaching needs a durably-recorded, non-terminal `runId` to find
|
|
64
|
+
* in `initialMessages` in the first place — the host is responsible for that half (Tovu's half:
|
|
65
|
+
* `apps/admin/src/hooks/use-assistant-chats.hooks.ts`'s `persistRunStub`).
|
|
66
|
+
*
|
|
67
|
+
* Mount-only (`[]` deps), by design: `useConversation` owns exactly one `useRunStream` instance for
|
|
68
|
+
* its whole lifetime, and a host that wants a different transcript remounts the pane with a fresh
|
|
69
|
+
* `key` rather than pushing a new `initialMessages` into a live one (see `initialMessagesRef`'s own
|
|
70
|
+
* doc) — so "the moment this hook mounts" IS "the moment a stale subscription needs recovering",
|
|
71
|
+
* and there is no later point in this hook's life that also needs this check.
|
|
72
|
+
*
|
|
73
|
+
* `activeAssistantIdRef.current` is set BEFORE calling `reattach`, not after: the reconciliation
|
|
74
|
+
* effect below (`applyRunToAssistantMessage`) no-ops whenever that ref is `null` — a reattach whose
|
|
75
|
+
* first event arrived before this assignment landed would be silently dropped on the floor instead
|
|
76
|
+
* of reaching the message it belongs to.
|
|
77
|
+
*
|
|
78
|
+
* A message with a `runId` but no `runStatus` at all is treated as nothing to reattach to, not as
|
|
79
|
+
* "assume non-terminal" — `useConversation`'s own reconciliation always writes both together, so
|
|
80
|
+
* the combination only arises from data this hook did not itself produce (a host's legacy rows, a
|
|
81
|
+
* different producer entirely), and there is no positive evidence there of an in-flight run worth
|
|
82
|
+
* the network round trip.
|
|
83
|
+
*/
|
|
84
|
+
useEffect(() => {
|
|
85
|
+
const last = initialMessagesRef.current?.at(-1);
|
|
86
|
+
if (!last || last.role !== 'assistant')
|
|
87
|
+
return;
|
|
88
|
+
if (last.runId === undefined || last.runStatus === undefined)
|
|
89
|
+
return;
|
|
90
|
+
if (isTerminalRunStatus(last.runStatus))
|
|
91
|
+
return;
|
|
92
|
+
activeAssistantIdRef.current = last.id;
|
|
93
|
+
void run.reattach(last.runId, last.events);
|
|
94
|
+
// Mount-only: see this effect's own doc for why `run` is deliberately not listed — it is a
|
|
95
|
+
// `useCallback` (`useRunStream.ts`), stable for this hook instance's whole lifetime, so omitting
|
|
96
|
+
// it changes nothing about correctness.
|
|
97
|
+
}, []);
|
|
43
98
|
const applyRunToAssistantMessage = useCallback(() => {
|
|
44
99
|
const assistantId = activeAssistantIdRef.current;
|
|
45
100
|
if (!assistantId)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useConversation.js","sourceRoot":"","sources":["../../../src/react/hooks/useConversation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useConversation.js","sourceRoot":"","sources":["../../../src/react/hooks/useConversation.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jini-ai/chat",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.8",
|
|
4
4
|
"description": "Jini's chat/artifact frontend, consolidated into one package with two subpaths: framework-free chat vocabulary and pure parsers in `/core`, headless hooks + presentational components + slots in `/react`. Import only the layer you need.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -63,8 +63,8 @@
|
|
|
63
63
|
"@mcp-ui/client": "7.1.1",
|
|
64
64
|
"@mcp-ui/server": "6.1.0",
|
|
65
65
|
"@jini-ai/agentic": "0.3.6",
|
|
66
|
-
"@jini-ai/ui": "0.3.7",
|
|
67
66
|
"@jini-ai/protocol": "0.3.0",
|
|
67
|
+
"@jini-ai/ui": "0.3.9",
|
|
68
68
|
"@jini-ai/platform": "0.3.0"
|
|
69
69
|
},
|
|
70
70
|
"peerDependencies": {
|