@genesislcap/ai-assistant 15.27.1 → 15.28.1
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/ai-assistant.api.json +2 -2
- package/dist/ai-assistant.d.ts +2 -2
- package/dist/custom-elements.json +63 -63
- package/dist/dts/components/settings-modal/settings-modal.template.d.ts.map +1 -1
- package/dist/dts/main/main.d.ts +1 -1
- package/dist/dts/react.d.ts +9 -9
- package/dist/dts/state/ai-assistant-slice.d.ts +5 -1
- package/dist/dts/state/ai-assistant-slice.d.ts.map +1 -1
- package/dist/dts/state/persistence/session-persistence-provider.d.ts +1 -1
- package/dist/dts/state/session-store.d.ts.map +1 -1
- package/dist/dts/utils/resolve-preference-baseline.d.ts.map +1 -1
- package/dist/esm/components/settings-modal/settings-modal.template.js +21 -1
- package/dist/esm/main/main.js +1 -1
- package/dist/esm/main/main.styles.js +1 -1
- package/dist/esm/state/ai-assistant-slice.js +2 -1
- package/dist/esm/utils/resolve-preference-baseline.js +6 -2
- package/dist/react.cjs +6 -6
- package/dist/react.mjs +5 -5
- package/package.json +16 -16
- package/sandbox/README.md +3 -3
- package/sandbox/sandbox.ts +1 -1
|
@@ -15147,7 +15147,7 @@
|
|
|
15147
15147
|
{
|
|
15148
15148
|
"kind": "Property",
|
|
15149
15149
|
"canonicalReference": "@genesislcap/ai-assistant!FoundationAiAssistant#timestampDisplay:member",
|
|
15150
|
-
"docComment": "/**\n * When each message shows its timestamp — `'off'`, `'hover'`
|
|
15150
|
+
"docComment": "/**\n * When each message shows its timestamp — `'off'`, `'hover'` or `'always'` (default).\n *\n * Falls back to `DEFAULT_TIMESTAMP_DISPLAY` rather than `'off'` when there is no store yet: this preference defaults ON, so the pre-store render must match the state the baseline is about to resolve to, or timestamps would visibly pop in on connect.\n */\n",
|
|
15151
15151
|
"excerptTokens": [
|
|
15152
15152
|
{
|
|
15153
15153
|
"kind": "Content",
|
|
@@ -19824,7 +19824,7 @@
|
|
|
19824
19824
|
{
|
|
19825
19825
|
"kind": "PropertySignature",
|
|
19826
19826
|
"canonicalReference": "@genesislcap/ai-assistant!SessionPreferences#timestampDisplay:member",
|
|
19827
|
-
"docComment": "/**\n * When message timestamps are shown (`TimestampDisplay` values, as plain strings). Absent keeps the `chatConfig.ui.showTimestamps` default, which is `'
|
|
19827
|
+
"docComment": "/**\n * When message timestamps are shown (`TimestampDisplay` values, as plain strings). Absent keeps the `chatConfig.ui.showTimestamps` default, which is `'always'`.\n */\n",
|
|
19828
19828
|
"excerptTokens": [
|
|
19829
19829
|
{
|
|
19830
19830
|
"kind": "Content",
|
package/dist/ai-assistant.d.ts
CHANGED
|
@@ -3145,7 +3145,7 @@ export declare class FoundationAiAssistant extends GenesisElement {
|
|
|
3145
3145
|
get showAgentSwitchIndicator(): boolean;
|
|
3146
3146
|
set showAgentSwitchIndicator(value: boolean);
|
|
3147
3147
|
/**
|
|
3148
|
-
* When each message shows its timestamp — `'off'`, `'hover'`
|
|
3148
|
+
* When each message shows its timestamp — `'off'`, `'hover'` or `'always'` (default).
|
|
3149
3149
|
*
|
|
3150
3150
|
* Falls back to `DEFAULT_TIMESTAMP_DISPLAY` rather than `'off'` when there is no
|
|
3151
3151
|
* store yet: this preference defaults ON, so the pre-store render must match the state
|
|
@@ -5359,7 +5359,7 @@ export declare interface SessionPreferences {
|
|
|
5359
5359
|
showAgentSwitchIndicator?: boolean;
|
|
5360
5360
|
/**
|
|
5361
5361
|
* When message timestamps are shown (`TimestampDisplay` values, as plain strings).
|
|
5362
|
-
* Absent keeps the `chatConfig.ui.showTimestamps` default, which is `'
|
|
5362
|
+
* Absent keeps the `chatConfig.ui.showTimestamps` default, which is `'always'`.
|
|
5363
5363
|
*/
|
|
5364
5364
|
timestampDisplay?: string;
|
|
5365
5365
|
/** Enabled loading-animation ids (`AiAssistantAnimation` values, as plain strings). */
|
|
@@ -2252,7 +2252,7 @@
|
|
|
2252
2252
|
"type": {
|
|
2253
2253
|
"text": "TimestampDisplay"
|
|
2254
2254
|
},
|
|
2255
|
-
"description": "When each message shows its timestamp — `'off'`, `'hover'`
|
|
2255
|
+
"description": "When each message shows its timestamp — `'off'`, `'hover'` or `'always'` (default).\n\nFalls back to `DEFAULT_TIMESTAMP_DISPLAY` rather than `'off'` when there is no\nstore yet: this preference defaults ON, so the pre-store render must match the state\nthe baseline is about to resolve to, or timestamps would visibly pop in on connect."
|
|
2256
2256
|
},
|
|
2257
2257
|
{
|
|
2258
2258
|
"kind": "field",
|
|
@@ -7577,7 +7577,7 @@
|
|
|
7577
7577
|
"type": {
|
|
7578
7578
|
"text": "TimestampDisplay"
|
|
7579
7579
|
},
|
|
7580
|
-
"default": "'
|
|
7580
|
+
"default": "'always'",
|
|
7581
7581
|
"description": "The mode used when neither the host config nor stored prefs name a valid one."
|
|
7582
7582
|
}
|
|
7583
7583
|
],
|
|
@@ -11712,6 +11712,67 @@
|
|
|
11712
11712
|
}
|
|
11713
11713
|
]
|
|
11714
11714
|
},
|
|
11715
|
+
{
|
|
11716
|
+
"kind": "javascript-module",
|
|
11717
|
+
"path": "src/components/chat-markdown/chat-markdown.ts",
|
|
11718
|
+
"declarations": [
|
|
11719
|
+
{
|
|
11720
|
+
"kind": "class",
|
|
11721
|
+
"description": "",
|
|
11722
|
+
"name": "AiChatMarkdown",
|
|
11723
|
+
"members": [
|
|
11724
|
+
{
|
|
11725
|
+
"kind": "field",
|
|
11726
|
+
"name": "content",
|
|
11727
|
+
"type": {
|
|
11728
|
+
"text": "string"
|
|
11729
|
+
},
|
|
11730
|
+
"default": "''",
|
|
11731
|
+
"description": "The markdown string to render."
|
|
11732
|
+
}
|
|
11733
|
+
],
|
|
11734
|
+
"superclass": {
|
|
11735
|
+
"name": "GenesisElement",
|
|
11736
|
+
"package": "@genesislcap/web-core"
|
|
11737
|
+
},
|
|
11738
|
+
"tagName": "ai-chat-markdown",
|
|
11739
|
+
"customElement": true
|
|
11740
|
+
}
|
|
11741
|
+
],
|
|
11742
|
+
"exports": [
|
|
11743
|
+
{
|
|
11744
|
+
"kind": "js",
|
|
11745
|
+
"name": "AiChatMarkdown",
|
|
11746
|
+
"declaration": {
|
|
11747
|
+
"name": "AiChatMarkdown",
|
|
11748
|
+
"module": "src/components/chat-markdown/chat-markdown.ts"
|
|
11749
|
+
}
|
|
11750
|
+
},
|
|
11751
|
+
{
|
|
11752
|
+
"kind": "custom-element-definition",
|
|
11753
|
+
"name": "ai-chat-markdown",
|
|
11754
|
+
"declaration": {
|
|
11755
|
+
"name": "AiChatMarkdown",
|
|
11756
|
+
"module": "src/components/chat-markdown/chat-markdown.ts"
|
|
11757
|
+
}
|
|
11758
|
+
}
|
|
11759
|
+
]
|
|
11760
|
+
},
|
|
11761
|
+
{
|
|
11762
|
+
"kind": "javascript-module",
|
|
11763
|
+
"path": "src/components/chat-markdown/index.ts",
|
|
11764
|
+
"declarations": [],
|
|
11765
|
+
"exports": [
|
|
11766
|
+
{
|
|
11767
|
+
"kind": "js",
|
|
11768
|
+
"name": "*",
|
|
11769
|
+
"declaration": {
|
|
11770
|
+
"name": "*",
|
|
11771
|
+
"package": "./chat-markdown"
|
|
11772
|
+
}
|
|
11773
|
+
}
|
|
11774
|
+
]
|
|
11775
|
+
},
|
|
11715
11776
|
{
|
|
11716
11777
|
"kind": "javascript-module",
|
|
11717
11778
|
"path": "src/components/chat-interaction-wrapper/chat-interaction-wrapper.styles.ts",
|
|
@@ -11907,67 +11968,6 @@
|
|
|
11907
11968
|
}
|
|
11908
11969
|
]
|
|
11909
11970
|
},
|
|
11910
|
-
{
|
|
11911
|
-
"kind": "javascript-module",
|
|
11912
|
-
"path": "src/components/chat-markdown/chat-markdown.ts",
|
|
11913
|
-
"declarations": [
|
|
11914
|
-
{
|
|
11915
|
-
"kind": "class",
|
|
11916
|
-
"description": "",
|
|
11917
|
-
"name": "AiChatMarkdown",
|
|
11918
|
-
"members": [
|
|
11919
|
-
{
|
|
11920
|
-
"kind": "field",
|
|
11921
|
-
"name": "content",
|
|
11922
|
-
"type": {
|
|
11923
|
-
"text": "string"
|
|
11924
|
-
},
|
|
11925
|
-
"default": "''",
|
|
11926
|
-
"description": "The markdown string to render."
|
|
11927
|
-
}
|
|
11928
|
-
],
|
|
11929
|
-
"superclass": {
|
|
11930
|
-
"name": "GenesisElement",
|
|
11931
|
-
"package": "@genesislcap/web-core"
|
|
11932
|
-
},
|
|
11933
|
-
"tagName": "ai-chat-markdown",
|
|
11934
|
-
"customElement": true
|
|
11935
|
-
}
|
|
11936
|
-
],
|
|
11937
|
-
"exports": [
|
|
11938
|
-
{
|
|
11939
|
-
"kind": "js",
|
|
11940
|
-
"name": "AiChatMarkdown",
|
|
11941
|
-
"declaration": {
|
|
11942
|
-
"name": "AiChatMarkdown",
|
|
11943
|
-
"module": "src/components/chat-markdown/chat-markdown.ts"
|
|
11944
|
-
}
|
|
11945
|
-
},
|
|
11946
|
-
{
|
|
11947
|
-
"kind": "custom-element-definition",
|
|
11948
|
-
"name": "ai-chat-markdown",
|
|
11949
|
-
"declaration": {
|
|
11950
|
-
"name": "AiChatMarkdown",
|
|
11951
|
-
"module": "src/components/chat-markdown/chat-markdown.ts"
|
|
11952
|
-
}
|
|
11953
|
-
}
|
|
11954
|
-
]
|
|
11955
|
-
},
|
|
11956
|
-
{
|
|
11957
|
-
"kind": "javascript-module",
|
|
11958
|
-
"path": "src/components/chat-markdown/index.ts",
|
|
11959
|
-
"declarations": [],
|
|
11960
|
-
"exports": [
|
|
11961
|
-
{
|
|
11962
|
-
"kind": "js",
|
|
11963
|
-
"name": "*",
|
|
11964
|
-
"declaration": {
|
|
11965
|
-
"name": "*",
|
|
11966
|
-
"package": "./chat-markdown"
|
|
11967
|
-
}
|
|
11968
|
-
}
|
|
11969
|
-
]
|
|
11970
|
-
},
|
|
11971
11971
|
{
|
|
11972
11972
|
"kind": "javascript-module",
|
|
11973
11973
|
"path": "src/components/orchestrating-driver/index.ts",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-modal.template.d.ts","sourceRoot":"","sources":["../../../../src/components/settings-modal/settings-modal.template.ts"],"names":[],"mappings":"AACA,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC5F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAoF7D;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,2BAA2B,GACtC,qBAAqB,MAAM,EAC3B,kBAAkB,MAAM,KACvB,YAAY,CAAC,qBAAqB,
|
|
1
|
+
{"version":3,"file":"settings-modal.template.d.ts","sourceRoot":"","sources":["../../../../src/components/settings-modal/settings-modal.template.ts"],"names":[],"mappings":"AACA,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC5F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAoF7D;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,2BAA2B,GACtC,qBAAqB,MAAM,EAC3B,kBAAkB,MAAM,KACvB,YAAY,CAAC,qBAAqB,CAuCpC,CAAC;AAoDF;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,MAAM,CAAC;AAsJnD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,2BAA2B,GACtC,aAAa,MAAM,EACnB,WAAW,MAAM,EACjB,SAAS,MAAM,KACd,YAAY,CAAC,qBAAqB,CAUpC,CAAC;AAobF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAChC,oBAAoB,MAAM,KACzB,YAAY,CAAC,qBAAqB,CAiNpC,CAAC"}
|
package/dist/dts/main/main.d.ts
CHANGED
|
@@ -298,7 +298,7 @@ export declare class FoundationAiAssistant extends GenesisElement {
|
|
|
298
298
|
get showAgentSwitchIndicator(): boolean;
|
|
299
299
|
set showAgentSwitchIndicator(value: boolean);
|
|
300
300
|
/**
|
|
301
|
-
* When each message shows its timestamp — `'off'`, `'hover'`
|
|
301
|
+
* When each message shows its timestamp — `'off'`, `'hover'` or `'always'` (default).
|
|
302
302
|
*
|
|
303
303
|
* Falls back to `DEFAULT_TIMESTAMP_DISPLAY` rather than `'off'` when there is no
|
|
304
304
|
* store yet: this preference defaults ON, so the pre-store render must match the state
|
package/dist/dts/react.d.ts
CHANGED
|
@@ -132,6 +132,15 @@ export declare const AiChatBubble: React.ForwardRefExoticComponent<
|
|
|
132
132
|
>;
|
|
133
133
|
export type AiChatBubbleRef = AiChatBubbleWC;
|
|
134
134
|
|
|
135
|
+
export declare const AiChatMarkdown: React.ForwardRefExoticComponent<
|
|
136
|
+
React.PropsWithChildren<
|
|
137
|
+
Omit<PublicOf<AiChatMarkdownWC>, 'children' | 'style'> &
|
|
138
|
+
HTMLWCProps & {
|
|
139
|
+
}
|
|
140
|
+
> & React.RefAttributes<AiChatMarkdownWC>
|
|
141
|
+
>;
|
|
142
|
+
export type AiChatMarkdownRef = AiChatMarkdownWC;
|
|
143
|
+
|
|
135
144
|
export declare const AiChatInteractionWrapper: React.ForwardRefExoticComponent<
|
|
136
145
|
React.PropsWithChildren<
|
|
137
146
|
Omit<PublicOf<AiChatInteractionWrapperWC>, 'children' | 'style'> &
|
|
@@ -144,15 +153,6 @@ export declare const AiChatInteractionWrapper: React.ForwardRefExoticComponent<
|
|
|
144
153
|
>;
|
|
145
154
|
export type AiChatInteractionWrapperRef = AiChatInteractionWrapperWC;
|
|
146
155
|
|
|
147
|
-
export declare const AiChatMarkdown: React.ForwardRefExoticComponent<
|
|
148
|
-
React.PropsWithChildren<
|
|
149
|
-
Omit<PublicOf<AiChatMarkdownWC>, 'children' | 'style'> &
|
|
150
|
-
HTMLWCProps & {
|
|
151
|
-
}
|
|
152
|
-
> & React.RefAttributes<AiChatMarkdownWC>
|
|
153
|
-
>;
|
|
154
|
-
export type AiChatMarkdownRef = AiChatMarkdownWC;
|
|
155
|
-
|
|
156
156
|
export declare const FoundationAiPopoutManager: React.ForwardRefExoticComponent<
|
|
157
157
|
React.PropsWithChildren<
|
|
158
158
|
Omit<PublicOf<FoundationAiPopoutManagerWC>, 'children' | 'style'> &
|
|
@@ -47,7 +47,11 @@ export interface AiAssistantSessionState {
|
|
|
47
47
|
showAgentSwitchIndicator: boolean;
|
|
48
48
|
/**
|
|
49
49
|
* When each message shows its timestamp. Unlike the `show*` booleans beside it this
|
|
50
|
-
* defaults ON
|
|
50
|
+
* defaults ON, so an absent stored preference must not read as "off".
|
|
51
|
+
*
|
|
52
|
+
* Shares `DEFAULT_TIMESTAMP_DISPLAY` with the preference resolver rather than
|
|
53
|
+
* repeating the literal: this is what stands before the baseline applies, so if the two
|
|
54
|
+
* drifted the transcript would render one mode and then flick to the other on load.
|
|
51
55
|
*/
|
|
52
56
|
timestampDisplay: TimestampDisplay;
|
|
53
57
|
enabledAnimations: AiAssistantAnimation[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-assistant-slice.d.ts","sourceRoot":"","sources":["../../../src/state/ai-assistant-slice.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,6BAA6B,EAC7B,cAAc,EACd,4BAA4B,EAC5B,WAAW,EACX,gBAAgB,EACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-assistant-slice.d.ts","sourceRoot":"","sources":["../../../src/state/ai-assistant-slice.ts"],"names":[],"mappings":"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"}
|
|
@@ -104,7 +104,7 @@ export interface SessionPreferences {
|
|
|
104
104
|
showAgentSwitchIndicator?: boolean;
|
|
105
105
|
/**
|
|
106
106
|
* When message timestamps are shown (`TimestampDisplay` values, as plain strings).
|
|
107
|
-
* Absent keeps the `chatConfig.ui.showTimestamps` default, which is `'
|
|
107
|
+
* Absent keeps the `chatConfig.ui.showTimestamps` default, which is `'always'`.
|
|
108
108
|
*/
|
|
109
109
|
timestampDisplay?: string;
|
|
110
110
|
/** Enabled loading-animation ids (`AiAssistantAnimation` values, as plain strings). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../../src/state/session-store.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,sBAAsB,CAAC;AAE9B,KAAK,kBAAkB,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAIvD,iBAAS,SAAS,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../../src/state/session-store.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,sBAAsB,CAAC;AAE9B,KAAK,kBAAkB,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAIvD,iBAAS,SAAS,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;cA6C07e,CAAC;;;;;;cAAggD,CAAC;aAAob,CAAC;;;;;;;;;;;;;;;wCAvCh6iB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,kBAAkB,CAMnF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED,YAAY,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-preference-baseline.d.ts","sourceRoot":"","sources":["../../../src/utils/resolve-preference-baseline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAsB,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mDAAmD,CAAC;AAG5F;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAK7E;AAED;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,wBAAwB,EAAE,OAAO,CAAC;IAClC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,iBAAiB,EAAE,oBAAoB,EAAE,CAAC;IAC1C;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,oFAAoF;AACpF,eAAO,MAAM,yBAAyB,EAAE,
|
|
1
|
+
{"version":3,"file":"resolve-preference-baseline.d.ts","sourceRoot":"","sources":["../../../src/utils/resolve-preference-baseline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAsB,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mDAAmD,CAAC;AAG5F;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAK7E;AAED;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,wBAAwB,EAAE,OAAO,CAAC;IAClC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,iBAAiB,EAAE,oBAAoB,EAAE,CAAC;IAC1C;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,oFAAoF;AACpF,eAAO,MAAM,yBAAyB,EAAE,gBAA2B,CAAC;AA+BpE;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,EACpB,MAAM,EAAE,kBAAkB,GAAG,IAAI,GAAG,SAAS,GAC5C,0BAA0B,CAwC5B"}
|
|
@@ -69,7 +69,27 @@ export const timestampModePickerTemplate = (segmentedControlTag, segmentedItemTa
|
|
|
69
69
|
aria-label="Show timestamps"
|
|
70
70
|
:value=${(x) => x.timestampDisplay}
|
|
71
71
|
@change=${(x, c) => {
|
|
72
|
-
|
|
72
|
+
// Only the GROUP's own `change` is authoritative. Each item emits its own `change` from
|
|
73
|
+
// `checkedChanged` as the group checks the incoming one and unchecks the outgoing, and
|
|
74
|
+
// those bubble to this listener carrying whichever mode that item represents — a valid
|
|
75
|
+
// string, and during startup a STALE one, so neither validating the value nor testing
|
|
76
|
+
// `checked` can tell them from a real pick. The group, by contrast, emits from
|
|
77
|
+
// `valueChanged`, which runs only after `changeHandler` has set `value` to the selection.
|
|
78
|
+
//
|
|
79
|
+
// Acting on a stale echo is not cosmetic: it writes a mode nobody chose AND marks
|
|
80
|
+
// preferences user-changed, latching the reconciler for the session — so the host's
|
|
81
|
+
// `chatConfig.ui.showTimestamps` never applies and the slice default wins instead.
|
|
82
|
+
// It fires on FIRST RENDER, before any interaction, which is what made a configured
|
|
83
|
+
// `'always'` unreachable in Create (GENC-1257).
|
|
84
|
+
if (c.event.target !== c.event.currentTarget)
|
|
85
|
+
return;
|
|
86
|
+
const next = c.event.target.value;
|
|
87
|
+
// `hasOwnProperty`, not `in`: `in` walks the prototype chain, so it would accept
|
|
88
|
+
// `'toString'`, `'constructor'` and friends as modes.
|
|
89
|
+
if (typeof next === 'string' &&
|
|
90
|
+
Object.prototype.hasOwnProperty.call(TIMESTAMP_MODE_LABELS, next)) {
|
|
91
|
+
x.timestampDisplay = next;
|
|
92
|
+
}
|
|
73
93
|
}}
|
|
74
94
|
>
|
|
75
95
|
${repeat(() => TIMESTAMP_MODE_OPTIONS, html `
|
package/dist/esm/main/main.js
CHANGED
|
@@ -682,7 +682,7 @@ let FoundationAiAssistant = FoundationAiAssistant_1 = class FoundationAiAssistan
|
|
|
682
682
|
this.persistPreferences();
|
|
683
683
|
}
|
|
684
684
|
/**
|
|
685
|
-
* When each message shows its timestamp — `'off'`, `'hover'`
|
|
685
|
+
* When each message shows its timestamp — `'off'`, `'hover'` or `'always'` (default).
|
|
686
686
|
*
|
|
687
687
|
* Falls back to `DEFAULT_TIMESTAMP_DISPLAY` rather than `'off'` when there is no
|
|
688
688
|
* store yet: this preference defaults ON, so the pre-store render must match the state
|
|
@@ -399,7 +399,7 @@ const baseStyles = css `
|
|
|
399
399
|
border: 0;
|
|
400
400
|
}
|
|
401
401
|
|
|
402
|
-
/* 'hover'
|
|
402
|
+
/* 'hover'. Space is RESERVED at all times (opacity, not display) so
|
|
403
403
|
revealing the timestamp cannot reflow the bubble under the pointer; only the paint
|
|
404
404
|
changes. The sender line is rarely the widest line in a bubble, so this costs no
|
|
405
405
|
width except on very short messages. */
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createSlice } from '@genesislcap/foundation-redux';
|
|
2
|
+
import { DEFAULT_TIMESTAMP_DISPLAY } from '../utils/resolve-preference-baseline';
|
|
2
3
|
import { emptyUsage, sumUsage } from '../utils/sum-usage';
|
|
3
4
|
/**
|
|
4
5
|
* Build a fresh default session state. A factory (not just a shared const) so
|
|
@@ -13,7 +14,7 @@ export function createDefaultSessionState() {
|
|
|
13
14
|
showThinkingSteps: false,
|
|
14
15
|
showNarration: false,
|
|
15
16
|
showAgentSwitchIndicator: false,
|
|
16
|
-
timestampDisplay:
|
|
17
|
+
timestampDisplay: DEFAULT_TIMESTAMP_DISPLAY,
|
|
17
18
|
enabledAnimations: [],
|
|
18
19
|
suggestionsState: { status: 'idle' },
|
|
19
20
|
contextTokens: undefined,
|
|
@@ -20,7 +20,7 @@ export function preferenceUnchanged(current, value) {
|
|
|
20
20
|
return current === value;
|
|
21
21
|
}
|
|
22
22
|
/** The mode used when neither the host config nor stored prefs name a valid one. */
|
|
23
|
-
export const DEFAULT_TIMESTAMP_DISPLAY = '
|
|
23
|
+
export const DEFAULT_TIMESTAMP_DISPLAY = 'always';
|
|
24
24
|
/**
|
|
25
25
|
* Every valid {@link TimestampDisplay}, for narrowing untrusted input.
|
|
26
26
|
*
|
|
@@ -39,8 +39,12 @@ const TIMESTAMP_DISPLAY_MODES = {
|
|
|
39
39
|
*
|
|
40
40
|
* Both inputs need this: the config field is typed but comes from plain JS hosts, and the
|
|
41
41
|
* stored field is a bare `string` read back out of a persistence blob.
|
|
42
|
+
*
|
|
43
|
+
* Membership is tested with `hasOwnProperty` rather than `in`, which walks the prototype
|
|
44
|
+
* chain — `in` would admit `'constructor'`, `'toString'` and every other `Object.prototype`
|
|
45
|
+
* key as a valid mode, which is exactly the junk this is here to reject.
|
|
42
46
|
*/
|
|
43
|
-
const asTimestampDisplay = (value) => typeof value === 'string' && value
|
|
47
|
+
const asTimestampDisplay = (value) => typeof value === 'string' && Object.prototype.hasOwnProperty.call(TIMESTAMP_DISPLAY_MODES, value)
|
|
44
48
|
? value
|
|
45
49
|
: undefined;
|
|
46
50
|
/**
|
package/dist/react.cjs
CHANGED
|
@@ -107,6 +107,11 @@ const AiChatBubble = React.forwardRef(function AiChatBubble(props, ref) {
|
|
|
107
107
|
return React.createElement(customElements.getName(AiChatBubbleWC) ?? 'foundation-ai-chat-bubble', { ...rest, ref }, children);
|
|
108
108
|
});
|
|
109
109
|
|
|
110
|
+
const AiChatMarkdown = React.forwardRef(function AiChatMarkdown(props, ref) {
|
|
111
|
+
const { children, ...rest } = props;
|
|
112
|
+
return React.createElement(customElements.getName(AiChatMarkdownWC) ?? 'ai-chat-markdown', { ...rest, ref }, children);
|
|
113
|
+
});
|
|
114
|
+
|
|
110
115
|
const AiChatInteractionWrapper = React.forwardRef(function AiChatInteractionWrapper(props, ref) {
|
|
111
116
|
const { onRequestScrollToBottom, onInteractionCompleted, onInteractionCost, children, ...rest } = props;
|
|
112
117
|
const _innerRef = React.useRef(null);
|
|
@@ -134,11 +139,6 @@ const AiChatInteractionWrapper = React.forwardRef(function AiChatInteractionWrap
|
|
|
134
139
|
return React.createElement(customElements.getName(AiChatInteractionWrapperWC) ?? 'ai-chat-interaction-wrapper', { ...rest, ref: _mergeRefs(_innerRef, ref) }, children);
|
|
135
140
|
});
|
|
136
141
|
|
|
137
|
-
const AiChatMarkdown = React.forwardRef(function AiChatMarkdown(props, ref) {
|
|
138
|
-
const { children, ...rest } = props;
|
|
139
|
-
return React.createElement(customElements.getName(AiChatMarkdownWC) ?? 'ai-chat-markdown', { ...rest, ref }, children);
|
|
140
|
-
});
|
|
141
|
-
|
|
142
142
|
const FoundationAiPopoutManager = React.forwardRef(function FoundationAiPopoutManager(props, ref) {
|
|
143
143
|
const { children, ...rest } = props;
|
|
144
144
|
return React.createElement(customElements.getName(FoundationAiPopoutManagerWC) ?? 'foundation-ai-popout-manager', { ...rest, ref }, children);
|
|
@@ -154,7 +154,7 @@ module.exports = {
|
|
|
154
154
|
AiActivityHalo,
|
|
155
155
|
AgentPicker,
|
|
156
156
|
AiChatBubble,
|
|
157
|
-
AiChatInteractionWrapper,
|
|
158
157
|
AiChatMarkdown,
|
|
158
|
+
AiChatInteractionWrapper,
|
|
159
159
|
FoundationAiPopoutManager,
|
|
160
160
|
};
|
package/dist/react.mjs
CHANGED
|
@@ -105,6 +105,11 @@ export const AiChatBubble = React.forwardRef(function AiChatBubble(props, ref) {
|
|
|
105
105
|
return React.createElement(customElements.getName(AiChatBubbleWC) ?? 'foundation-ai-chat-bubble', { ...rest, ref }, children);
|
|
106
106
|
});
|
|
107
107
|
|
|
108
|
+
export const AiChatMarkdown = React.forwardRef(function AiChatMarkdown(props, ref) {
|
|
109
|
+
const { children, ...rest } = props;
|
|
110
|
+
return React.createElement(customElements.getName(AiChatMarkdownWC) ?? 'ai-chat-markdown', { ...rest, ref }, children);
|
|
111
|
+
});
|
|
112
|
+
|
|
108
113
|
export const AiChatInteractionWrapper = React.forwardRef(function AiChatInteractionWrapper(props, ref) {
|
|
109
114
|
const { onRequestScrollToBottom, onInteractionCompleted, onInteractionCost, children, ...rest } = props;
|
|
110
115
|
const _innerRef = React.useRef(null);
|
|
@@ -132,11 +137,6 @@ export const AiChatInteractionWrapper = React.forwardRef(function AiChatInteract
|
|
|
132
137
|
return React.createElement(customElements.getName(AiChatInteractionWrapperWC) ?? 'ai-chat-interaction-wrapper', { ...rest, ref: _mergeRefs(_innerRef, ref) }, children);
|
|
133
138
|
});
|
|
134
139
|
|
|
135
|
-
export const AiChatMarkdown = React.forwardRef(function AiChatMarkdown(props, ref) {
|
|
136
|
-
const { children, ...rest } = props;
|
|
137
|
-
return React.createElement(customElements.getName(AiChatMarkdownWC) ?? 'ai-chat-markdown', { ...rest, ref }, children);
|
|
138
|
-
});
|
|
139
|
-
|
|
140
140
|
export const FoundationAiPopoutManager = React.forwardRef(function FoundationAiPopoutManager(props, ref) {
|
|
141
141
|
const { children, ...rest } = props;
|
|
142
142
|
return React.createElement(customElements.getName(FoundationAiPopoutManagerWC) ?? 'foundation-ai-popout-manager', { ...rest, ref }, children);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@genesislcap/ai-assistant",
|
|
3
3
|
"description": "Genesis AI Assistant micro-frontend",
|
|
4
|
-
"version": "15.
|
|
4
|
+
"version": "15.28.1",
|
|
5
5
|
"license": "SEE LICENSE IN license.txt",
|
|
6
6
|
"main": "dist/esm/index.js",
|
|
7
7
|
"types": "dist/ai-assistant.d.ts",
|
|
@@ -74,26 +74,26 @@
|
|
|
74
74
|
}
|
|
75
75
|
},
|
|
76
76
|
"devDependencies": {
|
|
77
|
-
"@genesislcap/foundation-testing": "15.
|
|
78
|
-
"@genesislcap/genx": "15.
|
|
79
|
-
"@genesislcap/rollup-builder": "15.
|
|
80
|
-
"@genesislcap/ts-builder": "15.
|
|
81
|
-
"@genesislcap/uvu-playwright-builder": "15.
|
|
82
|
-
"@genesislcap/vite-builder": "15.
|
|
83
|
-
"@genesislcap/webpack-builder": "15.
|
|
77
|
+
"@genesislcap/foundation-testing": "15.28.1",
|
|
78
|
+
"@genesislcap/genx": "15.28.1",
|
|
79
|
+
"@genesislcap/rollup-builder": "15.28.1",
|
|
80
|
+
"@genesislcap/ts-builder": "15.28.1",
|
|
81
|
+
"@genesislcap/uvu-playwright-builder": "15.28.1",
|
|
82
|
+
"@genesislcap/vite-builder": "15.28.1",
|
|
83
|
+
"@genesislcap/webpack-builder": "15.28.1",
|
|
84
84
|
"@types/dompurify": "^3.0.5",
|
|
85
85
|
"@types/marked": "^5.0.2",
|
|
86
86
|
"esbuild": "0.25.12"
|
|
87
87
|
},
|
|
88
88
|
"dependencies": {
|
|
89
|
-
"@genesislcap/foundation-ai": "15.
|
|
90
|
-
"@genesislcap/foundation-logger": "15.
|
|
91
|
-
"@genesislcap/foundation-notifications": "15.
|
|
92
|
-
"@genesislcap/foundation-redux": "15.
|
|
93
|
-
"@genesislcap/foundation-ui": "15.
|
|
94
|
-
"@genesislcap/foundation-utils": "15.
|
|
95
|
-
"@genesislcap/rapid-design-system": "15.
|
|
96
|
-
"@genesislcap/web-core": "15.
|
|
89
|
+
"@genesislcap/foundation-ai": "15.28.1",
|
|
90
|
+
"@genesislcap/foundation-logger": "15.28.1",
|
|
91
|
+
"@genesislcap/foundation-notifications": "15.28.1",
|
|
92
|
+
"@genesislcap/foundation-redux": "15.28.1",
|
|
93
|
+
"@genesislcap/foundation-ui": "15.28.1",
|
|
94
|
+
"@genesislcap/foundation-utils": "15.28.1",
|
|
95
|
+
"@genesislcap/rapid-design-system": "15.28.1",
|
|
96
|
+
"@genesislcap/web-core": "15.28.1",
|
|
97
97
|
"dompurify": "^3.3.1",
|
|
98
98
|
"marked": "^17.0.3"
|
|
99
99
|
},
|
package/sandbox/README.md
CHANGED
|
@@ -143,9 +143,9 @@ anyone opens the cog. **Animations is deliberately not in that table**: it is a
|
|
|
143
143
|
rather than a display preference (unsetting it removes the cog control altogether), and it has
|
|
144
144
|
no single element property to mirror onto.
|
|
145
145
|
|
|
146
|
-
- **
|
|
147
|
-
|
|
148
|
-
|
|
146
|
+
- **Always** (the default) — permanently visible.
|
|
147
|
+
- **On hover** — hidden until the pointer is over that message row. The space is still
|
|
148
|
+
reserved, so a reveal never reflows the bubble under the cursor.
|
|
149
149
|
- **Off** — not rendered, and therefore absent from the accessibility tree too.
|
|
150
150
|
|
|
151
151
|
`opacity: 0` hides from paint but not from the accessibility tree, and assistive tech has no
|
package/sandbox/sandbox.ts
CHANGED
|
@@ -178,7 +178,7 @@ const DEFAULT_STATE: SandboxState = {
|
|
|
178
178
|
showToolCalls: true,
|
|
179
179
|
showThinkingSteps: true,
|
|
180
180
|
showNarration: true,
|
|
181
|
-
showTimestamps: '
|
|
181
|
+
showTimestamps: 'always',
|
|
182
182
|
animations: true,
|
|
183
183
|
// Chosen so the `huge` (~20k) and `loop` (~22k) seeds actually clear the tail
|
|
184
184
|
// budget these produce (~12.8k) and so have something to compact. Verified, not
|