@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.
@@ -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'` (default) or `'always'`.\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",
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 `'hover'`.\n */\n",
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",
@@ -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'` (default) or `'always'`.
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 `'hover'`.
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'` (default) or `'always'`.\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."
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": "'hover'",
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,CAkBpC,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"}
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"}
@@ -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'` (default) or `'always'`.
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
@@ -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 (`'hover'`), so an absent stored preference must not read as "off".
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":"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"}
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 `'hover'`.
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;;;;;;;;;;;;;;;;;;;;;;;;;;cA6C0le,CAAC;;;;;;cAAggD,CAAC;aAAob,CAAC;;;;;;;;;;;;;;;wCAvChkiB;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
+ {"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,gBAA0B,CAAC;AA2BnE;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,EACpB,MAAM,EAAE,kBAAkB,GAAG,IAAI,GAAG,SAAS,GAC5C,0BAA0B,CAwC5B"}
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
- x.timestampDisplay = c.event.target.value;
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 `
@@ -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'` (default) or `'always'`.
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' — the default. Space is RESERVED at all times (opacity, not display) so
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: 'hover',
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 = 'hover';
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 in TIMESTAMP_DISPLAY_MODES
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.27.1",
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.27.1",
78
- "@genesislcap/genx": "15.27.1",
79
- "@genesislcap/rollup-builder": "15.27.1",
80
- "@genesislcap/ts-builder": "15.27.1",
81
- "@genesislcap/uvu-playwright-builder": "15.27.1",
82
- "@genesislcap/vite-builder": "15.27.1",
83
- "@genesislcap/webpack-builder": "15.27.1",
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.27.1",
90
- "@genesislcap/foundation-logger": "15.27.1",
91
- "@genesislcap/foundation-notifications": "15.27.1",
92
- "@genesislcap/foundation-redux": "15.27.1",
93
- "@genesislcap/foundation-ui": "15.27.1",
94
- "@genesislcap/foundation-utils": "15.27.1",
95
- "@genesislcap/rapid-design-system": "15.27.1",
96
- "@genesislcap/web-core": "15.27.1",
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
- - **On hover** (the default) — hidden until the pointer is over that message row. The space is
147
- still reserved, so a reveal never reflows the bubble under the cursor.
148
- - **Always** — permanently visible.
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
@@ -178,7 +178,7 @@ const DEFAULT_STATE: SandboxState = {
178
178
  showToolCalls: true,
179
179
  showThinkingSteps: true,
180
180
  showNarration: true,
181
- showTimestamps: 'hover',
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