@ai-matrx/chat 0.7.24 → 0.7.26
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/CHANGELOG.md +15 -2
- package/dist/agents/components/chat/NewChatGreeting.d.ts +8 -3
- package/dist/agents/components/chat/NewChatGreeting.js +12 -2
- package/dist/agents/components/inputs/smart-input/InputActionButtons.d.ts +2 -2
- package/dist/agents/components/inputs/smart-input/InputActionButtons.js +1 -3
- package/dist/agents/components/inputs/smart-input/SmartAgentInputStacked.js +3 -8
- package/dist/agents/components/messages-display/assistant/AssistantMessageFooter.js +2 -4
- package/dist/agents/components/shared/transcript-layout.d.ts +6 -7
- package/dist/agents/components/shared/transcript-layout.js +2 -2
- package/package.json +7 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @ai-matrx/chat
|
|
2
2
|
|
|
3
|
+
## 0.7.26
|
|
4
|
+
|
|
5
|
+
Automatic changed-only republish (docs/metadata drift since the last tag — see
|
|
6
|
+
`git diff npm/chat/v0.7.25..npm/chat/v0.7.26 -- apps/shared/chat`).
|
|
7
|
+
No source changes intended and no consumer action required.
|
|
8
|
+
|
|
9
|
+
## 0.7.25
|
|
10
|
+
|
|
11
|
+
Automatic changed-only republish (docs/metadata drift since the last tag — see
|
|
12
|
+
`git diff npm/chat/v0.7.24..npm/chat/v0.7.25 -- apps/shared/chat`).
|
|
13
|
+
No source changes intended and no consumer action required.
|
|
14
|
+
|
|
3
15
|
## 0.7.24
|
|
4
16
|
|
|
5
17
|
Automatic changed-only republish (docs/metadata drift since the last tag — see
|
|
@@ -51,8 +63,9 @@ No source changes intended and no consumer action required.
|
|
|
51
63
|
`useInView` (never from a closed mobile sheet or collapsed rail), then calls the catalog's
|
|
52
64
|
`ensureFavoriteRows()` — `ues_list` + `agx_get_list_full?id=in.(…)` — instead of loading the
|
|
53
65
|
whole agent catalogue after page idle. It shows a loading skeleton and a retry on failure.
|
|
54
|
-
- **The splash paints its final footprint.** The server-painted composer shell
|
|
55
|
-
composer's placeholder (no pulse
|
|
66
|
+
- **The splash paints its final footprint.** The server-painted composer shell is a read-only
|
|
67
|
+
textarea carrying the composer's classes and placeholder (no pulse; a div measured narrower than
|
|
68
|
+
the live box on a phone's 17px zoom floor), the landing no longer fades in from opacity 0, and the
|
|
56
69
|
quick-action row keeps its skeleton until the organization is set instead of vanishing. On a
|
|
57
70
|
phone the textarea placeholder was the page's Largest Contentful Paint at 5.7–15 s.
|
|
58
71
|
|
|
@@ -22,13 +22,18 @@ interface NewChatGreetingProps {
|
|
|
22
22
|
export declare function NewChatGreeting({ sourceConversationId, surfaceKey, composer, }: NewChatGreetingProps): import("react").JSX.Element;
|
|
23
23
|
/**
|
|
24
24
|
* The splash composer as the server paints it, before the page is live: the
|
|
25
|
-
* real card's box and
|
|
25
|
+
* real card's box and a read-only textarea carrying the real one's classes and
|
|
26
|
+
* placeholder.
|
|
26
27
|
*
|
|
27
28
|
* THE PLACEHOLDER PAINTS WITH THE PAGE (2026-10-09). It is the largest text on
|
|
28
29
|
* a phone's /chat/new (larger than the greeting), so a shell without it made
|
|
29
30
|
* the live textarea's placeholder the page's Largest Contentful Paint seconds
|
|
30
|
-
* later.
|
|
31
|
-
*
|
|
31
|
+
* later. It is a TEXTAREA, not a div: every rule that sizes the live box (the
|
|
32
|
+
* coarse-pointer zoom floor raises it to 17px; a div measured 191px against
|
|
33
|
+
* the live 217px) sizes this one identically, so the live box replaces it
|
|
34
|
+
* without a new paint winning. No pulse — an opacity animation would hide the
|
|
35
|
+
* text from that count. Read-only and out of the tab order: nothing typed here
|
|
36
|
+
* could survive hydration.
|
|
32
37
|
*/
|
|
33
38
|
export declare function ChatSplashComposerShell(): import("react").JSX.Element;
|
|
34
39
|
export {};
|
|
@@ -61,8 +61,18 @@ function ChatSplashComposerShell() {
|
|
|
61
61
|
"div",
|
|
62
62
|
{
|
|
63
63
|
"aria-hidden": true,
|
|
64
|
-
className: "h-[132px] w-full max-w-[760px] rounded-[22px] border border-border bg-card p-2 shadow-[0_2px_10px_rgba(0,0,0,0.05)]",
|
|
65
|
-
children: /* @__PURE__ */ jsx(
|
|
64
|
+
className: "h-[132px] w-full max-w-[760px] rounded-[22px] border border-border bg-card p-2 shadow-[0_2px_10px_rgba(0,0,0,0.05)] [&_textarea]:block",
|
|
65
|
+
children: /* @__PURE__ */ jsx(
|
|
66
|
+
"textarea",
|
|
67
|
+
{
|
|
68
|
+
readOnly: true,
|
|
69
|
+
tabIndex: -1,
|
|
70
|
+
rows: 1,
|
|
71
|
+
placeholder: SPLASH_PLACEHOLDER,
|
|
72
|
+
className: "w-full bg-transparent border-none outline-none text-[15px] leading-6 px-1.5 py-1 text-foreground placeholder:text-muted-foreground/60 resize-none overflow-hidden",
|
|
73
|
+
style: { minHeight: 64 }
|
|
74
|
+
}
|
|
75
|
+
)
|
|
66
76
|
}
|
|
67
77
|
);
|
|
68
78
|
}
|
|
@@ -58,9 +58,9 @@ interface InputActionButtonsProps {
|
|
|
58
58
|
* audio) live in the + menu; Output and Effort in the agent pill's menu.
|
|
59
59
|
*/
|
|
60
60
|
folded?: boolean;
|
|
61
|
-
/**
|
|
61
|
+
/** Compact's row under the card: after + · mic (· live audio). */
|
|
62
62
|
leading?: React.ReactNode;
|
|
63
|
-
/**
|
|
63
|
+
/** Compact's row under the card: the right end (agent · output · effort). */
|
|
64
64
|
trailing?: React.ReactNode;
|
|
65
65
|
/**
|
|
66
66
|
* Which part this instance draws. Compact mounts two: `"send"` (↵, inside
|
|
@@ -202,11 +202,9 @@ function InputActionButtons({
|
|
|
202
202
|
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-1.5", children: [
|
|
203
203
|
plusMenu,
|
|
204
204
|
database ? /* @__PURE__ */ jsx(DesktopPresenceIndicator, { conversationId }) : null,
|
|
205
|
-
variablesToggle
|
|
206
|
-
composer.leading
|
|
205
|
+
variablesToggle
|
|
207
206
|
] }),
|
|
208
207
|
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-1.5", children: [
|
|
209
|
-
composer.trailing,
|
|
210
208
|
extraRightControls,
|
|
211
209
|
micGroup,
|
|
212
210
|
liveAudioButton,
|
|
@@ -20,7 +20,7 @@ import { Button } from "@ai-matrx/design-system";
|
|
|
20
20
|
import { cn } from "@ai-matrx/design-system";
|
|
21
21
|
import { composerShows } from "./composer/composer-mode-visibility.js";
|
|
22
22
|
import { ComposerChipsRow } from "./composer/ComposerChipsRow.js";
|
|
23
|
-
import { ComposerPills, ComposerScopeCluster, ComposerValueGroupChip } from "./composer/ComposerMetaRow.js";
|
|
23
|
+
import { ComposerMetaRow, ComposerPills, ComposerScopeCluster, ComposerValueGroupChip } from "./composer/ComposerMetaRow.js";
|
|
24
24
|
import { useComposerFold } from "./composer/useComposerFold.js";
|
|
25
25
|
import { useTouchOnlyDevice } from "../../../../ui/composer/useTouchOnlyDevice.js";
|
|
26
26
|
function SmartAgentInputStacked({
|
|
@@ -323,12 +323,7 @@ function SmartAgentInputStacked({
|
|
|
323
323
|
onVoiceBusyChange: setVoiceBusy,
|
|
324
324
|
extraRightControls,
|
|
325
325
|
onRequestInputExpand: () => setExpandRequestKey((key) => key + 1),
|
|
326
|
-
composer:
|
|
327
|
-
...composerParts,
|
|
328
|
-
// The pills live in the card's own bar: no strip under the card (rule: existing bars).
|
|
329
|
-
leading: composer.meta === "none" ? void 0 : /* @__PURE__ */ jsx(ComposerScopeCluster, { conversationId, composer, folded }),
|
|
330
|
-
trailing: composer.meta === "none" ? void 0 : /* @__PURE__ */ jsx(ComposerPills, { conversationId, composer, menuSide, folded })
|
|
331
|
-
}
|
|
326
|
+
composer: composerParts
|
|
332
327
|
}
|
|
333
328
|
)
|
|
334
329
|
] })
|
|
@@ -349,7 +344,7 @@ function SmartAgentInputStacked({
|
|
|
349
344
|
trailing: composer.meta === "none" ? void 0 : /* @__PURE__ */ jsx(ComposerPills, { conversationId, composer, menuSide, folded })
|
|
350
345
|
}
|
|
351
346
|
}
|
|
352
|
-
) : null
|
|
347
|
+
) : composer.meta === "none" ? null : /* @__PURE__ */ jsx(ComposerMetaRow, { conversationId, composer, menuSide, folded })
|
|
353
348
|
]
|
|
354
349
|
}
|
|
355
350
|
);
|
|
@@ -165,7 +165,7 @@ function AssistantMessageFooter(props) {
|
|
|
165
165
|
isLatestAssistant
|
|
166
166
|
} = useAssistantMessageActions(props);
|
|
167
167
|
const answerActions = useTranscriptLayout().answerActions;
|
|
168
|
-
const isHoverOnly = answerActions === "hover" ||
|
|
168
|
+
const isHoverOnly = answerActions === "hover" || density === "compact" && !isLatestAssistant;
|
|
169
169
|
const rowRef = useRef(null);
|
|
170
170
|
useEffect(() => {
|
|
171
171
|
const row = rowRef.current;
|
|
@@ -183,9 +183,7 @@ function AssistantMessageFooter(props) {
|
|
|
183
183
|
{
|
|
184
184
|
className: cn(
|
|
185
185
|
"transition-opacity",
|
|
186
|
-
isHoverOnly &&
|
|
187
|
-
// nothing. A touch screen has no hover, so it is always visible there.
|
|
188
|
-
"opacity-0 group-hover/assistant-msg:opacity-100 focus-within:opacity-100 [@media(hover:none)]:opacity-100"
|
|
186
|
+
isHoverOnly && "opacity-0 group-hover/assistant-msg:opacity-100 focus-within:opacity-100"
|
|
189
187
|
),
|
|
190
188
|
children: [
|
|
191
189
|
/* @__PURE__ */ jsxs(
|
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* How a host lays the ONE conversation column out (HOST-OWNED-SOURCE-PLAN P28e look bar).
|
|
3
3
|
*
|
|
4
|
-
* Knobs, never forks:
|
|
5
|
-
*
|
|
4
|
+
* Knobs, never forks: every value has today's web default, and a host that says nothing gets
|
|
5
|
+
* exactly the web chat. Matrx 2 (desktop) fills its pane, starts at the left edge and draws the
|
|
6
6
|
* person's turn as a compact block — the look its coding screen had before the column.
|
|
7
7
|
*
|
|
8
8
|
* - `width`: "reading" (the canonical `max-w-3xl` reading column) | "fill" (the host's pane).
|
|
9
9
|
* - `align`: "center" | "start" — where a reading-width column sits in a wider pane.
|
|
10
|
-
* - `userMessage`: "
|
|
11
|
-
*
|
|
10
|
+
* - `userMessage`: "card" (DEFAULT: the bordered card that collapses a long message behind a chevron) |
|
|
11
|
+
* "compact" (a flat tight block; only a genuinely long message collapses) |
|
|
12
12
|
* "bubble" (Messages / Xcode's coding assistant: the person's turn on the trailing side in a
|
|
13
13
|
* rounded bubble as wide as its words, answers full width; collapses like "compact").
|
|
14
|
-
* - `answerActions`: "
|
|
14
|
+
* - `answerActions`: "shown" (DEFAULT: the latest answer's action row always visible) | "hover" (the action row is revealed on hover / keyboard focus, and
|
|
15
15
|
* always on touch — its height is reserved, so revealing it moves nothing; a finished answer ends
|
|
16
|
-
* on its last word) | "latest" (the latest answer's row is always visible, older ones on hover)
|
|
17
|
-
* "shown" (every answer's row always visible).
|
|
16
|
+
* on its last word) | "latest" (the latest answer's row is always visible, older ones on hover).
|
|
18
17
|
*/
|
|
19
18
|
import { type ReactNode } from "react";
|
|
20
19
|
export interface TranscriptLayout {
|
|
@@ -6,8 +6,8 @@ import {
|
|
|
6
6
|
const DEFAULT_TRANSCRIPT_LAYOUT = {
|
|
7
7
|
width: "reading",
|
|
8
8
|
align: "center",
|
|
9
|
-
userMessage: "
|
|
10
|
-
answerActions: "
|
|
9
|
+
userMessage: "card",
|
|
10
|
+
answerActions: "shown",
|
|
11
11
|
timestamps: "hover"
|
|
12
12
|
};
|
|
13
13
|
const TranscriptLayoutContext = createContext(DEFAULT_TRANSCRIPT_LAYOUT);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-matrx/chat",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.26",
|
|
4
4
|
"description": "THE one AI Matrx person-to-agent chat system: the full chat (running agents, conversations, tool calls, streaming, context, surfaces, voice) as explicit per-module subpaths @ai-matrx/chat/<domain>/<module> (no wildcards: scripts/public-modules.json) over a host contract (/host, /host/react) whose only required value is a db. One chat, one renderer: the old kernel entries (., /external-store, /matrx, /react, /tools, styles.css, tokens.css) are retired.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -4687,19 +4687,19 @@
|
|
|
4687
4687
|
"@ai-matrx/browser-audio": "latest",
|
|
4688
4688
|
"@ai-matrx/canvas": "latest",
|
|
4689
4689
|
"@ai-matrx/content-ir": "latest",
|
|
4690
|
-
"@ai-matrx/content-ir-react": "latest",
|
|
4691
4690
|
"@ai-matrx/data": "latest",
|
|
4692
4691
|
"@ai-matrx/design-system": "latest",
|
|
4693
4692
|
"@ai-matrx/icons": "latest",
|
|
4694
|
-
"@ai-matrx/diff": "latest",
|
|
4695
4693
|
"@ai-matrx/kit": "latest",
|
|
4696
|
-
"@ai-matrx/
|
|
4694
|
+
"@ai-matrx/diff": "latest",
|
|
4697
4695
|
"@ai-matrx/print": "latest",
|
|
4696
|
+
"@ai-matrx/media": "latest",
|
|
4698
4697
|
"@ai-matrx/realtime": "latest",
|
|
4699
4698
|
"@ai-matrx/records": "latest",
|
|
4700
4699
|
"@ai-matrx/records-ui": "latest",
|
|
4701
|
-
"@ai-matrx/rich-
|
|
4702
|
-
"@ai-matrx/
|
|
4700
|
+
"@ai-matrx/rich-editor": "latest",
|
|
4701
|
+
"@ai-matrx/content-ir-react": "latest",
|
|
4702
|
+
"@ai-matrx/rich-content": "latest"
|
|
4703
4703
|
},
|
|
4704
4704
|
"devDependencies": {
|
|
4705
4705
|
"@arethetypeswrong/cli": "^0.18.5",
|
|
@@ -4818,5 +4818,5 @@
|
|
|
4818
4818
|
"check:side-effects": "node ../scripts/check-side-effects-listed.mjs . && node ../scripts/check-side-effects-listed.mjs --self-test",
|
|
4819
4819
|
"check:public-surface": "node ./scripts/sync-public-surface.mjs --check && node ./scripts/sync-public-surface.mjs --self-test"
|
|
4820
4820
|
},
|
|
4821
|
-
"gitHead": "
|
|
4821
|
+
"gitHead": "85239a779e29a035d5fb6c1f61d0f023d94927ca"
|
|
4822
4822
|
}
|