feat(FN-3243): add durable insight lifecycle with bounded executor and quic

This merge adds a durable insight lifecycle with bounded run executor to the core store layer, along with supporting database schema changes and comprehensive test coverage. It also restores type compatibility for list view detail callbacks and fixes QuickChatFAB CSS scope issues. Documentation acro

Fusion-Task-Id: FN-3243
This commit is contained in:
Fusion
2026-05-03 03:03:44 -07:00
committed by gsxdsm
parent 8806d7208a
commit a47f3192e8
3 changed files with 77 additions and 76 deletions

View File

@@ -555,7 +555,7 @@
min-width: 0;
}
.chat-skill-menu {
.quick-chat-panel .chat-skill-menu {
position: absolute;
left: var(--space-lg);
bottom: calc(100% + var(--space-xs));
@@ -570,7 +570,7 @@
z-index: 50;
}
.chat-skill-menu-item {
.quick-chat-panel .chat-skill-menu-item {
width: 100%;
border: none;
background: transparent;
@@ -584,24 +584,24 @@
transition: background var(--transition-fast);
}
.chat-skill-menu-item:hover,
.chat-skill-menu-item--highlighted {
.quick-chat-panel .chat-skill-menu-item:hover,
.quick-chat-panel .chat-skill-menu-item--highlighted {
background: var(--card-hover);
}
.chat-skill-menu-item:focus-visible {
.quick-chat-panel .chat-skill-menu-item:focus-visible {
outline: none;
box-shadow: var(--focus-ring-strong);
background: var(--card-hover);
}
.chat-skill-menu-item-name {
.quick-chat-panel .chat-skill-menu-item-name {
font-size: 0.8125rem;
color: var(--text);
font-family: var(--font-mono);
}
.chat-skill-menu-item-description {
.quick-chat-panel .chat-skill-menu-item-description {
font-size: 0.75rem;
color: var(--text-muted);
white-space: nowrap;
@@ -610,7 +610,7 @@
max-width: calc((var(--space-xl) * 10) + var(--space-lg) + var(--space-xs));
}
.chat-skill-menu-empty {
.quick-chat-panel .chat-skill-menu-empty {
padding: var(--space-sm) var(--space-md);
color: var(--text-muted);
font-size: 0.8125rem;
@@ -877,43 +877,38 @@
}
.chat-message-thinking-content {
font-size: 11px;
color: var(--text-tertiary);
margin-top: 4px;
.quick-chat-panel .chat-message-thinking {
margin-top: var(--space-xs);
}
.chat-message-thinking {
margin-top: 6px;
}
.chat-message-thinking summary {
font-size: 12px;
.quick-chat-panel .chat-message-thinking summary {
font-size: var(--space-md);
color: var(--text-secondary);
cursor: pointer;
}
.chat-message-thinking-content {
font-size: 13px;
.quick-chat-panel .chat-message-thinking-content {
font-size: var(--space-md);
color: var(--text-secondary);
padding: 8px;
padding: var(--space-sm);
background: var(--bg);
border-radius: 6px;
margin-top: 4px;
border-radius: var(--radius-sm);
margin-top: var(--space-xs);
white-space: pre-wrap;
font-family: var(--font-mono, monospace);
overflow-x: auto;
}
/* === Chat Tool Calls === */
.chat-tool-calls {
.quick-chat-panel .chat-tool-calls {
margin-top: var(--space-sm);
display: flex;
flex-direction: column;
gap: var(--space-xs);
}
.chat-tool-calls-header {
.quick-chat-panel .chat-tool-calls-header {
display: inline-flex;
align-items: center;
gap: var(--space-xs);
@@ -921,13 +916,13 @@
font-size: var(--space-md);
}
.chat-tool-calls-group {
.quick-chat-panel .chat-tool-calls-group {
border: var(--btn-border-width, 1px) solid color-mix(in srgb, var(--border) 85%, transparent);
border-radius: var(--radius-sm);
background: color-mix(in srgb, var(--surface) 35%, transparent);
}
.chat-tool-calls-group-summary {
.quick-chat-panel .chat-tool-calls-group-summary {
display: flex;
align-items: center;
gap: var(--space-sm);
@@ -941,25 +936,25 @@
white-space: nowrap;
}
.chat-tool-calls-group-summary::marker {
.quick-chat-panel .chat-tool-calls-group-summary::marker {
content: "";
}
.chat-tool-calls-group-summary::-webkit-details-marker {
.quick-chat-panel .chat-tool-calls-group-summary::-webkit-details-marker {
display: none;
}
.chat-tool-calls-group-summary:focus-visible {
.quick-chat-panel .chat-tool-calls-group-summary:focus-visible {
outline: none;
box-shadow: var(--focus-ring-strong);
}
.chat-tool-calls-count {
.quick-chat-panel .chat-tool-calls-count {
white-space: nowrap;
flex-shrink: 0;
}
.chat-tool-calls-names {
.quick-chat-panel .chat-tool-calls-names {
color: var(--text-dim);
font-family: var(--font-mono, monospace);
overflow: hidden;
@@ -970,7 +965,7 @@
font-size: 0.6875rem;
}
.chat-tool-calls-group-status {
.quick-chat-panel .chat-tool-calls-group-status {
margin-left: auto;
font-size: 0.6875rem;
color: var(--text-dim);
@@ -978,21 +973,21 @@
white-space: nowrap;
}
.chat-tool-calls-group > .chat-tool-call {
.quick-chat-panel .chat-tool-calls-group > .chat-tool-call {
margin: 0 var(--space-sm) var(--space-xs) var(--space-sm);
}
.chat-tool-calls-group > .chat-tool-call:last-child {
.quick-chat-panel .chat-tool-calls-group > .chat-tool-call:last-child {
margin-bottom: var(--space-sm);
}
.chat-tool-call {
.quick-chat-panel .chat-tool-call {
border: var(--btn-border-width, 1px) solid color-mix(in srgb, var(--border) 85%, transparent);
border-radius: var(--radius-sm);
background: color-mix(in srgb, var(--surface) 35%, transparent);
}
.chat-tool-call summary {
.quick-chat-panel .chat-tool-call summary {
display: flex;
align-items: center;
gap: var(--space-xs);
@@ -1006,20 +1001,20 @@
white-space: nowrap;
}
.chat-tool-call summary::marker {
.quick-chat-panel .chat-tool-call summary::marker {
content: "";
}
.chat-tool-call summary::-webkit-details-marker {
.quick-chat-panel .chat-tool-call summary::-webkit-details-marker {
display: none;
}
.chat-tool-call summary:focus-visible {
.quick-chat-panel .chat-tool-call summary:focus-visible {
outline: none;
box-shadow: var(--focus-ring-strong);
}
.chat-tool-call-status-dot {
.quick-chat-panel .chat-tool-call-status-dot {
width: calc((var(--space-xs) + var(--space-sm)) / 2);
height: calc((var(--space-xs) + var(--space-sm)) / 2);
border-radius: 50%;
@@ -1027,7 +1022,7 @@
flex-shrink: 0;
}
.chat-tool-call-name {
.quick-chat-panel .chat-tool-call-name {
font-family: var(--font-mono, monospace);
flex: 0 1 auto;
min-width: 0;
@@ -1036,7 +1031,7 @@
white-space: nowrap;
}
.chat-tool-call-preview {
.quick-chat-panel .chat-tool-call-preview {
color: var(--text-muted);
overflow: hidden;
text-overflow: ellipsis;
@@ -1046,7 +1041,7 @@
font-size: 0.6875rem;
}
.chat-tool-call-status-text {
.quick-chat-panel .chat-tool-call-status-text {
margin-left: auto;
font-size: 0.6875rem;
text-transform: lowercase;
@@ -1054,7 +1049,7 @@
flex-shrink: 0;
}
.chat-tool-call-content {
.quick-chat-panel .chat-tool-call-content {
margin: var(--space-xs) var(--space-sm) var(--space-sm);
padding: var(--space-sm);
border-radius: var(--radius-sm);
@@ -1065,55 +1060,55 @@
gap: var(--space-xs);
}
.chat-tool-call-row {
.quick-chat-panel .chat-tool-call-row {
display: grid;
grid-template-columns: auto 1fr;
gap: var(--space-xs);
align-items: start;
}
.chat-tool-call-label {
.quick-chat-panel .chat-tool-call-label {
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: 0.04em;
font-size: 0.6875rem;
}
.chat-tool-call-value {
.quick-chat-panel .chat-tool-call-value {
color: var(--text);
word-break: break-word;
white-space: pre-wrap;
}
.chat-tool-call--running .chat-tool-call-status-dot {
.quick-chat-panel .chat-tool-call--running .chat-tool-call-status-dot {
background: var(--color-info);
animation: tool-call-pulse var(--transition-slow) infinite;
}
.chat-tool-call--error summary {
.quick-chat-panel .chat-tool-call--error summary {
color: var(--color-error);
}
.chat-tool-call--error .chat-tool-call-status-dot {
.quick-chat-panel .chat-tool-call--error .chat-tool-call-status-dot {
background: var(--color-error);
}
.chat-tool-call-row--error {
.quick-chat-panel .chat-tool-call-row--error {
background: color-mix(in srgb, var(--color-error) 10%, transparent);
border-radius: var(--radius-sm);
padding: var(--space-xs);
}
.chat-tool-calls--compact .chat-tool-calls-header,
.chat-tool-calls--compact .chat-tool-calls-group-summary,
.chat-tool-calls--compact .chat-tool-calls-names,
.chat-tool-calls--compact .chat-tool-calls-group-status,
.chat-tool-calls--compact .chat-tool-call summary,
.chat-tool-calls--compact .chat-tool-call-content,
.chat-tool-calls--compact .chat-tool-call-preview,
.chat-tool-calls--compact .chat-tool-call-value,
.chat-tool-calls-group--compact .chat-tool-calls-group-summary,
.chat-tool-calls-group--compact .chat-tool-calls-names {
.quick-chat-panel .chat-tool-calls--compact .chat-tool-calls-header,
.quick-chat-panel .chat-tool-calls--compact .chat-tool-calls-group-summary,
.quick-chat-panel .chat-tool-calls--compact .chat-tool-calls-names,
.quick-chat-panel .chat-tool-calls--compact .chat-tool-calls-group-status,
.quick-chat-panel .chat-tool-calls--compact .chat-tool-call summary,
.quick-chat-panel .chat-tool-calls--compact .chat-tool-call-content,
.quick-chat-panel .chat-tool-calls--compact .chat-tool-call-preview,
.quick-chat-panel .chat-tool-calls--compact .chat-tool-call-value,
.quick-chat-panel .chat-tool-calls-group--compact .chat-tool-calls-group-summary,
.quick-chat-panel .chat-tool-calls-group--compact .chat-tool-calls-names {
font-size: 0.6875rem;
}
@@ -1128,15 +1123,15 @@
}
/* Streaming indicator */
.chat-message--streaming {
.quick-chat-panel .chat-message--streaming {
align-self: flex-start;
background: var(--bg-elevated, var(--bg-secondary));
color: var(--text);
border-bottom-left-radius: 4px;
border-bottom-left-radius: var(--radius-sm);
opacity: 0.9;
}
.chat-pending-message {
.quick-chat-panel .chat-pending-message {
display: flex;
align-items: center;
gap: var(--space-sm);
@@ -1145,19 +1140,19 @@
border-radius: var(--radius-sm);
background: color-mix(in srgb, var(--todo) 10%, transparent);
color: var(--text-muted);
font-size: 12px;
font-size: var(--space-md);
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.chat-pending-message span {
.quick-chat-panel .chat-pending-message span {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.chat-pending-message-dismiss {
.quick-chat-panel .chat-pending-message-dismiss {
background: none;
border: none;
color: var(--text-dim);
@@ -1165,26 +1160,26 @@
padding: var(--space-xs);
line-height: 1;
flex-shrink: 0;
font-size: 14px;
font-size: var(--space-lg);
}
.chat-pending-message-dismiss:hover {
.quick-chat-panel .chat-pending-message-dismiss:hover {
color: var(--text-muted);
}
/* === Rescued: classes referenced in QuickChatFAB/ChatView TSX but never defined ====== */
.chat-mention-chip {
.quick-chat-panel .chat-mention-chip {
display: inline-flex;
align-items: center;
gap: 2px;
padding: 1px 6px;
margin: 0 1px;
gap: var(--space-xs);
padding: var(--space-xs) var(--space-sm);
margin: 0 var(--space-xs);
background: color-mix(in srgb, var(--todo) 14%, transparent);
color: var(--todo);
border: 1px solid color-mix(in srgb, var(--todo) 30%, transparent);
border: var(--btn-border-width, 1px) solid color-mix(in srgb, var(--todo) 30%, transparent);
border-radius: var(--radius-pill);
font-size: 11px;
font-size: 0.6875rem;
font-weight: 500;
white-space: nowrap;
}