@tanstack/ai-devtools-core 0.0.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.
Files changed (103) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +131 -0
  3. package/dist/esm/components/ConversationDetails.d.ts +2 -0
  4. package/dist/esm/components/ConversationDetails.js +134 -0
  5. package/dist/esm/components/ConversationDetails.js.map +1 -0
  6. package/dist/esm/components/ConversationsList.d.ts +2 -0
  7. package/dist/esm/components/ConversationsList.js +30 -0
  8. package/dist/esm/components/ConversationsList.js.map +1 -0
  9. package/dist/esm/components/Shell.d.ts +1 -0
  10. package/dist/esm/components/Shell.js +94 -0
  11. package/dist/esm/components/Shell.js.map +1 -0
  12. package/dist/esm/components/conversation/ChunkBadges.d.ts +7 -0
  13. package/dist/esm/components/conversation/ChunkBadges.js +54 -0
  14. package/dist/esm/components/conversation/ChunkBadges.js.map +1 -0
  15. package/dist/esm/components/conversation/ChunkItem.d.ts +9 -0
  16. package/dist/esm/components/conversation/ChunkItem.js +247 -0
  17. package/dist/esm/components/conversation/ChunkItem.js.map +1 -0
  18. package/dist/esm/components/conversation/ChunksCollapsible.d.ts +7 -0
  19. package/dist/esm/components/conversation/ChunksCollapsible.js +77 -0
  20. package/dist/esm/components/conversation/ChunksCollapsible.js.map +1 -0
  21. package/dist/esm/components/conversation/ChunksTab.d.ts +8 -0
  22. package/dist/esm/components/conversation/ChunksTab.js +87 -0
  23. package/dist/esm/components/conversation/ChunksTab.js.map +1 -0
  24. package/dist/esm/components/conversation/ConversationHeader.d.ts +7 -0
  25. package/dist/esm/components/conversation/ConversationHeader.js +187 -0
  26. package/dist/esm/components/conversation/ConversationHeader.js.map +1 -0
  27. package/dist/esm/components/conversation/ConversationTabs.d.ts +10 -0
  28. package/dist/esm/components/conversation/ConversationTabs.js +88 -0
  29. package/dist/esm/components/conversation/ConversationTabs.js.map +1 -0
  30. package/dist/esm/components/conversation/EmbeddingsTab.d.ts +7 -0
  31. package/dist/esm/components/conversation/EmbeddingsTab.js +90 -0
  32. package/dist/esm/components/conversation/EmbeddingsTab.js.map +1 -0
  33. package/dist/esm/components/conversation/MessageCard.d.ts +7 -0
  34. package/dist/esm/components/conversation/MessageCard.js +152 -0
  35. package/dist/esm/components/conversation/MessageCard.js.map +1 -0
  36. package/dist/esm/components/conversation/MessageGroup.d.ts +15 -0
  37. package/dist/esm/components/conversation/MessageGroup.js +119 -0
  38. package/dist/esm/components/conversation/MessageGroup.js.map +1 -0
  39. package/dist/esm/components/conversation/MessagesTab.d.ts +7 -0
  40. package/dist/esm/components/conversation/MessagesTab.js +37 -0
  41. package/dist/esm/components/conversation/MessagesTab.js.map +1 -0
  42. package/dist/esm/components/conversation/SummariesTab.d.ts +7 -0
  43. package/dist/esm/components/conversation/SummariesTab.js +110 -0
  44. package/dist/esm/components/conversation/SummariesTab.js.map +1 -0
  45. package/dist/esm/components/conversation/ToolCallDisplay.d.ts +7 -0
  46. package/dist/esm/components/conversation/ToolCallDisplay.js +123 -0
  47. package/dist/esm/components/conversation/ToolCallDisplay.js.map +1 -0
  48. package/dist/esm/components/conversation/index.d.ts +7 -0
  49. package/dist/esm/components/list/ConversationRow.d.ts +7 -0
  50. package/dist/esm/components/list/ConversationRow.js +122 -0
  51. package/dist/esm/components/list/ConversationRow.js.map +1 -0
  52. package/dist/esm/components/list/index.d.ts +1 -0
  53. package/dist/esm/components/utils/format.d.ts +6 -0
  54. package/dist/esm/components/utils/format.js +68 -0
  55. package/dist/esm/components/utils/format.js.map +1 -0
  56. package/dist/esm/components/utils/index.d.ts +1 -0
  57. package/dist/esm/core.d.ts +18 -0
  58. package/dist/esm/core.js +9 -0
  59. package/dist/esm/core.js.map +1 -0
  60. package/dist/esm/index.d.ts +9 -0
  61. package/dist/esm/index.js +6 -0
  62. package/dist/esm/index.js.map +1 -0
  63. package/dist/esm/production.d.ts +2 -0
  64. package/dist/esm/production.js +5 -0
  65. package/dist/esm/production.js.map +1 -0
  66. package/dist/esm/store/ai-context.d.ts +126 -0
  67. package/dist/esm/store/ai-context.js +1081 -0
  68. package/dist/esm/store/ai-context.js.map +1 -0
  69. package/dist/esm/store/ai-store.d.ts +1 -0
  70. package/dist/esm/styles/tokens.d.ts +298 -0
  71. package/dist/esm/styles/tokens.js +107 -0
  72. package/dist/esm/styles/tokens.js.map +1 -0
  73. package/dist/esm/styles/use-styles.d.ts +226 -0
  74. package/dist/esm/styles/use-styles.js +1538 -0
  75. package/dist/esm/styles/use-styles.js.map +1 -0
  76. package/package.json +61 -0
  77. package/src/components/ConversationDetails.tsx +89 -0
  78. package/src/components/ConversationsList.tsx +21 -0
  79. package/src/components/Shell.tsx +93 -0
  80. package/src/components/conversation/ChunkBadges.tsx +51 -0
  81. package/src/components/conversation/ChunkItem.tsx +273 -0
  82. package/src/components/conversation/ChunksCollapsible.tsx +58 -0
  83. package/src/components/conversation/ChunksTab.tsx +85 -0
  84. package/src/components/conversation/ConversationHeader.tsx +130 -0
  85. package/src/components/conversation/ConversationTabs.tsx +104 -0
  86. package/src/components/conversation/EmbeddingsTab.tsx +80 -0
  87. package/src/components/conversation/MessageCard.tsx +137 -0
  88. package/src/components/conversation/MessageGroup.tsx +101 -0
  89. package/src/components/conversation/MessagesTab.tsx +30 -0
  90. package/src/components/conversation/SummariesTab.tsx +91 -0
  91. package/src/components/conversation/ToolCallDisplay.tsx +99 -0
  92. package/src/components/conversation/index.ts +8 -0
  93. package/src/components/list/ConversationRow.tsx +85 -0
  94. package/src/components/list/index.ts +1 -0
  95. package/src/components/utils/format.ts +61 -0
  96. package/src/components/utils/index.ts +1 -0
  97. package/src/core.tsx +10 -0
  98. package/src/index.ts +8 -0
  99. package/src/production.ts +3 -0
  100. package/src/store/ai-context.tsx +1784 -0
  101. package/src/store/ai-store.ts +2 -0
  102. package/src/styles/tokens.ts +305 -0
  103. package/src/styles/use-styles.ts +1537 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-styles.js","sources":["../../../src/styles/use-styles.ts"],"sourcesContent":["import * as goober from 'goober'\nimport { createEffect, createSignal } from 'solid-js'\nimport { useTheme } from '@tanstack/devtools-ui'\nimport { tokens } from './tokens'\n\nconst stylesFactory = (theme: 'light' | 'dark') => {\n const { colors, font, size, alpha, border } = tokens\n const { fontFamily, size: fontSize } = font\n const css = goober.css\n const t = (light: string, dark: string) => (theme === 'light' ? light : dark)\n\n return {\n mainContainer: css`\n display: flex;\n flex: 1;\n min-height: 80%;\n overflow: hidden;\n padding: ${size[2]};\n `,\n dragHandle: css`\n width: 8px;\n background: ${t(colors.gray[300], colors.darkGray[600])};\n cursor: col-resize;\n position: relative;\n transition: all 0.2s ease;\n user-select: none;\n pointer-events: all;\n margin: 0 ${size[1]};\n border-radius: 2px;\n\n &:hover {\n background: ${t(colors.blue[600], colors.blue[500])};\n margin: 0 ${size[1]};\n }\n\n &.dragging {\n background: ${t(colors.blue[700], colors.blue[600])};\n margin: 0 ${size[1]};\n }\n\n &::after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 2px;\n height: 20px;\n background: ${t(colors.gray[400], colors.darkGray[400])};\n border-radius: 1px;\n pointer-events: none;\n }\n\n &:hover::after,\n &.dragging::after {\n background: ${t(colors.blue[500], colors.blue[300])};\n }\n `,\n leftPanel: css`\n background: ${t(colors.gray[100], colors.darkGray[800])};\n border-radius: ${border.radius.lg};\n border: 1px solid ${t(colors.gray[200], colors.darkGray[700])};\n display: flex;\n flex-direction: column;\n overflow: hidden;\n min-height: 0;\n flex-shrink: 0;\n `,\n rightPanel: css`\n background: ${t(colors.gray[100], colors.darkGray[800])};\n border-radius: ${border.radius.lg};\n border: 1px solid ${t(colors.gray[200], colors.darkGray[700])};\n display: flex;\n flex-direction: column;\n overflow: hidden;\n min-height: 0;\n flex: 1;\n `,\n panelHeader: css`\n font-size: ${fontSize.md};\n font-weight: ${font.weight.bold};\n color: ${t(colors.blue[700], colors.blue[400])};\n padding: ${size[2]};\n border-bottom: 1px solid ${t(colors.gray[200], colors.darkGray[700])};\n background: ${t(colors.gray[100], colors.darkGray[800])};\n flex-shrink: 0;\n `,\n utilList: css`\n flex: 1;\n overflow-y: auto;\n padding: ${size[1]};\n min-height: 0;\n `,\n utilGroup: css`\n margin-bottom: ${size[2]};\n `,\n utilGroupHeader: css`\n font-size: ${fontSize.xs};\n font-weight: ${font.weight.semibold};\n color: ${t(colors.gray[600], colors.gray[400])};\n text-transform: uppercase;\n letter-spacing: 0.05em;\n margin-bottom: ${size[1]};\n padding: ${size[1]} ${size[2]};\n background: ${t(colors.gray[200], colors.darkGray[700])};\n border-radius: ${border.radius.md};\n `,\n utilRow: css`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: ${size[2]};\n margin-bottom: ${size[1]};\n background: ${t(colors.gray[200], colors.darkGray[700])};\n border-radius: ${border.radius.md};\n cursor: pointer;\n transition: all 0.2s ease;\n border: 1px solid transparent;\n\n &:hover {\n background: ${t(colors.gray[300], colors.darkGray[600])};\n border-color: ${t(colors.gray[400], colors.darkGray[500])};\n }\n `,\n utilRowSelected: css`\n background: ${t(colors.blue[100], colors.blue[900] + alpha[20])};\n border-color: ${t(colors.blue[600], colors.blue[500])};\n box-shadow: 0 0 0 1px\n ${t(colors.blue[600] + alpha[30], colors.blue[500] + alpha[30])};\n `,\n utilKey: css`\n font-family: ${fontFamily.mono};\n font-size: ${fontSize.xs};\n color: ${t(colors.gray[900], colors.gray[100])};\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `,\n utilStatus: css`\n font-size: ${fontSize.xs};\n color: ${t(colors.gray[600], colors.gray[400])};\n text-transform: uppercase;\n letter-spacing: 0.05em;\n padding: ${size[1]} ${size[1]};\n background: ${t(colors.gray[300], colors.darkGray[600])};\n border-radius: ${border.radius.sm};\n margin-left: ${size[1]};\n `,\n stateDetails: css`\n flex: 1;\n overflow-y: auto;\n padding: ${size[2]};\n min-height: 0;\n `,\n stateHeader: css`\n margin-bottom: ${size[2]};\n padding-bottom: ${size[2]};\n border-bottom: 1px solid ${t(colors.gray[200], colors.darkGray[700])};\n `,\n stateTitle: css`\n font-size: ${fontSize.md};\n font-weight: ${font.weight.bold};\n color: ${t(colors.blue[700], colors.blue[400])};\n margin-bottom: ${size[1]};\n `,\n stateKey: css`\n font-family: ${fontFamily.mono};\n font-size: ${fontSize.xs};\n color: ${t(colors.gray[600], colors.gray[400])};\n word-break: break-all;\n `,\n stateContent: css`\n background: ${t(colors.gray[100], colors.darkGray[700])};\n border-radius: ${border.radius.md};\n padding: ${size[2]};\n border: 1px solid ${t(colors.gray[300], colors.darkGray[600])};\n `,\n detailsGrid: css`\n display: grid;\n grid-template-columns: 1fr;\n gap: ${size[2]};\n align-items: start;\n `,\n detailSection: css`\n background: ${t(colors.white, colors.darkGray[700])};\n border: 1px solid ${t(colors.gray[300], colors.darkGray[600])};\n border-radius: ${border.radius.md};\n padding: ${size[2]};\n `,\n detailSectionHeader: css`\n font-size: ${fontSize.sm};\n font-weight: ${font.weight.bold};\n color: ${t(colors.gray[800], colors.gray[200])};\n margin-bottom: ${size[1]};\n text-transform: uppercase;\n letter-spacing: 0.04em;\n `,\n actionsRow: css`\n display: flex;\n flex-wrap: wrap;\n gap: ${size[2]};\n `,\n actionButton: css`\n display: inline-flex;\n align-items: center;\n gap: ${size[1]};\n padding: ${size[1]} ${size[2]};\n border-radius: ${border.radius.md};\n border: 1px solid ${t(colors.gray[300], colors.darkGray[500])};\n background: ${t(colors.gray[200], colors.darkGray[600])};\n color: ${t(colors.gray[900], colors.gray[100])};\n font-size: ${fontSize.xs};\n cursor: pointer;\n user-select: none;\n transition:\n background 0.15s,\n border-color 0.15s;\n &:hover {\n background: ${t(colors.gray[300], colors.darkGray[500])};\n border-color: ${t(colors.gray[400], colors.darkGray[400])};\n }\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n &:hover {\n background: ${t(colors.gray[200], colors.darkGray[600])};\n border-color: ${t(colors.gray[300], colors.darkGray[500])};\n }\n }\n `,\n actionDotBlue: css`\n width: 6px;\n height: 6px;\n border-radius: 9999px;\n background: ${colors.blue[400]};\n `,\n actionDotGreen: css`\n width: 6px;\n height: 6px;\n border-radius: 9999px;\n background: ${colors.green[400]};\n `,\n actionDotRed: css`\n width: 6px;\n height: 6px;\n border-radius: 9999px;\n background: ${colors.red[400]};\n `,\n actionDotYellow: css`\n width: 6px;\n height: 6px;\n border-radius: 9999px;\n background: ${colors.yellow[400]};\n `,\n actionDotOrange: css`\n width: 6px;\n height: 6px;\n border-radius: 9999px;\n background: ${colors.pink[400]};\n `,\n actionDotPurple: css`\n width: 6px;\n height: 6px;\n border-radius: 9999px;\n background: ${colors.purple[400]};\n `,\n infoGrid: css`\n display: grid;\n grid-template-columns: auto 1fr;\n gap: ${size[1]};\n row-gap: ${size[1]};\n align-items: center;\n `,\n infoLabel: css`\n color: ${t(colors.gray[600], colors.gray[400])};\n font-size: ${fontSize.xs};\n text-transform: uppercase;\n letter-spacing: 0.05em;\n `,\n infoValueMono: css`\n font-family: ${fontFamily.mono};\n font-size: ${fontSize.xs};\n color: ${t(colors.gray[900], colors.gray[100])};\n word-break: break-all;\n `,\n noSelection: css`\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n color: ${t(colors.gray[500], colors.gray[500])};\n font-style: italic;\n text-align: center;\n padding: ${size[4]};\n `,\n // Keep existing styles for backward compatibility\n sectionContainer: css`\n display: flex;\n flex-wrap: wrap;\n gap: ${size[4]};\n `,\n section: css`\n background: ${t(colors.gray[100], colors.darkGray[800])};\n border-radius: ${border.radius.lg};\n box-shadow: ${tokens.shadow.md(\n t(colors.gray[400] + alpha[80], colors.black + alpha[80]),\n )};\n padding: ${size[4]};\n margin-bottom: ${size[4]};\n border: 1px solid ${t(colors.gray[200], colors.darkGray[700])};\n min-width: 0;\n max-width: 33%;\n max-height: fit-content;\n `,\n sectionHeader: css`\n font-size: ${fontSize.lg};\n font-weight: ${font.weight.bold};\n margin-bottom: ${size[2]};\n color: ${t(colors.blue[600], colors.blue[400])};\n letter-spacing: 0.01em;\n display: flex;\n align-items: center;\n gap: ${size[2]};\n `,\n sectionEmpty: css`\n color: ${t(colors.gray[500], colors.gray[500])};\n font-size: ${fontSize.sm};\n font-style: italic;\n margin: ${size[2]} 0;\n `,\n instanceList: css`\n display: flex;\n flex-direction: column;\n gap: ${size[2]};\n background: ${t(colors.gray[200], colors.darkGray[700])};\n border: 1px solid ${t(colors.gray[300], colors.darkGray[600])};\n `,\n instanceCard: css`\n background: ${t(colors.gray[200], colors.darkGray[700])};\n border-radius: ${border.radius.md};\n padding: ${size[3]};\n border: 1px solid ${t(colors.gray[300], colors.darkGray[600])};\n font-size: ${fontSize.sm};\n color: ${t(colors.gray[900], colors.gray[100])};\n font-family: ${fontFamily.mono};\n overflow-x: auto;\n transition:\n box-shadow 0.3s,\n background 0.3s;\n `,\n // Shell component styles\n shell: {\n sectionHeader: css`\n padding: ${size[3]} ${size[4]};\n font-size: ${fontSize.sm};\n font-weight: ${font.weight.semibold};\n color: ${t(colors.gray[100], colors.gray[200])};\n text-transform: uppercase;\n letter-spacing: 0.5px;\n text-align: center;\n background: ${t(colors.gray[700], colors.darkGray[600])};\n border-bottom: 1px solid ${t(colors.gray[600], colors.darkGray[500])};\n `,\n filterContainer: css`\n display: flex;\n flex-direction: column;\n gap: ${size[2]};\n padding: ${size[3]};\n border-bottom: 1px solid ${t(colors.gray[200], colors.darkGray[700])};\n `,\n filterButtonsRow: css`\n display: flex;\n gap: ${size[1.5]};\n flex-wrap: wrap;\n `,\n filterButton: css`\n display: inline-flex;\n align-items: center;\n gap: ${size[1]};\n padding: ${size[1]} ${size[2]};\n border-radius: ${border.radius.md};\n border: 1px solid ${t(colors.gray[300], colors.darkGray[500])};\n background: ${t(colors.gray[200], colors.darkGray[600])};\n color: ${t(colors.gray[900], colors.gray[100])};\n font-size: ${fontSize.xs};\n cursor: pointer;\n user-select: none;\n transition:\n background 0.15s,\n border-color 0.15s;\n &:hover {\n background: ${t(colors.gray[300], colors.darkGray[500])};\n border-color: ${t(colors.gray[400], colors.darkGray[400])};\n }\n `,\n filterButtonActive: css`\n background: ${colors.pink[400]};\n color: ${colors.white};\n border-color: ${colors.pink[400]};\n &:hover {\n background: ${colors.pink[500]};\n border-color: ${colors.pink[500]};\n }\n `,\n actionsRow: css`\n display: flex;\n gap: ${size[1.5]};\n `,\n clearAllButton: css`\n flex: 1;\n font-size: ${fontSize.xs};\n `,\n },\n // ConversationsList component styles\n conversationsList: {\n rowMain: css`\n display: flex;\n flex-direction: column;\n gap: 4px;\n flex: 1;\n min-width: 0;\n `,\n rowTop: css`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: ${size[2]};\n `,\n rowRight: css`\n display: flex;\n align-items: center;\n gap: ${size[1]};\n flex-shrink: 0;\n `,\n rowContent: css`\n display: flex;\n align-items: center;\n gap: ${size[2]};\n flex: 1;\n `,\n rowInfo: css`\n display: flex;\n align-items: center;\n gap: ${size[1]};\n min-width: 0;\n flex: 1;\n `,\n typeDot: css`\n width: 8px;\n height: 8px;\n border-radius: 50%;\n `,\n label: css`\n font-weight: ${font.weight.semibold};\n `,\n toolCallsBadge: css`\n display: flex;\n align-items: center;\n gap: 3px;\n padding: 2px 6px;\n border-radius: ${border.radius.sm};\n background: oklch(0.35 0.1 280);\n color: oklch(0.8 0.12 280);\n font-size: ${fontSize.xs};\n font-weight: ${font.weight.semibold};\n `,\n statusDot: css`\n width: 6px;\n height: 6px;\n border-radius: 50%;\n margin-left: auto;\n `,\n stats: css`\n display: flex;\n align-items: center;\n gap: ${size[2]};\n font-size: 10px;\n opacity: 0.7;\n flex-wrap: wrap;\n `,\n statItem: css`\n display: flex;\n align-items: center;\n gap: 2px;\n white-space: nowrap;\n `,\n tokensBadge: css`\n display: flex;\n align-items: center;\n gap: 2px;\n padding: 1px 5px;\n border-radius: ${border.radius.sm};\n background: oklch(0.35 0.08 220);\n color: oklch(0.75 0.12 220);\n font-size: 10px;\n font-weight: ${font.weight.semibold};\n white-space: nowrap;\n `,\n loadingIndicator: css`\n font-size: 12px;\n color: oklch(0.7 0.17 142);\n animation: spin 1s linear infinite;\n @keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n }\n `,\n },\n // ConversationDetails component styles\n conversationDetails: {\n emptyState: css`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: ${t(colors.gray[500], colors.gray[500])};\n font-size: ${fontSize.sm};\n `,\n container: css`\n display: flex;\n flex-direction: column;\n height: 100%;\n `,\n headerContent: css`\n display: flex;\n flex-direction: column;\n gap: ${size[1]};\n `,\n headerRow: css`\n display: flex;\n align-items: center;\n gap: ${size[3]};\n `,\n headerLabel: css`\n font-weight: ${font.weight.semibold};\n font-size: ${fontSize.sm};\n `,\n statusBadge: css`\n font-size: ${fontSize.xs};\n padding: 2px ${size[2]};\n border-radius: ${border.radius.sm};\n `,\n statusActive: css`\n background: ${colors.blue[500]}20;\n color: ${colors.blue[500]};\n `,\n statusCompleted: css`\n background: ${colors.green[500]}20;\n color: ${colors.green[500]};\n `,\n statusError: css`\n background: ${colors.red[500]}20;\n color: ${colors.red[500]};\n `,\n metaInfo: css`\n font-size: ${fontSize.xs};\n color: ${t(colors.gray[600], colors.gray[400])};\n `,\n usageInfo: css`\n font-size: ${fontSize.xs};\n color: ${t(colors.gray[600], colors.gray[400])};\n display: flex;\n align-items: center;\n gap: ${size[2]};\n `,\n usageLabel: css`\n font-weight: ${font.weight.semibold};\n color: ${colors.blue[500]};\n `,\n usageBold: css`\n font-weight: ${font.weight.semibold};\n `,\n toolsRow: css`\n display: flex;\n align-items: flex-start;\n gap: ${size[2]};\n margin-top: ${size[2]};\n `,\n toolsLabel: css`\n font-size: ${fontSize.sm};\n flex-shrink: 0;\n `,\n optionsRow: css`\n display: flex;\n align-items: flex-start;\n gap: ${size[2]};\n margin-top: ${size[1]};\n `,\n optionsLabel: css`\n font-size: ${fontSize.xs};\n color: ${t(colors.gray[600], colors.gray[400])};\n flex-shrink: 0;\n white-space: nowrap;\n `,\n optionsCompact: css`\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n `,\n optionBadge: css`\n display: inline-flex;\n align-items: center;\n padding: 1px 6px;\n background: ${t(colors.gray[200], colors.darkGray[700])};\n color: ${t(colors.gray[700], colors.gray[300])};\n border-radius: ${border.radius.sm};\n font-size: 10px;\n font-family: ${fontFamily.mono};\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `,\n toggleButton: css`\n background: transparent;\n border: 1px solid ${t(colors.gray[300], colors.darkGray[600])};\n color: ${t(colors.gray[600], colors.gray[400])};\n padding: ${size[1]} ${size[2]};\n border-radius: ${border.radius.sm};\n font-size: ${fontSize.xs};\n cursor: pointer;\n transition: all 0.15s ease;\n margin-top: ${size[2]};\n &:hover {\n background: ${t(colors.gray[100], colors.darkGray[700])};\n color: ${t(colors.gray[700], colors.gray[300])};\n }\n `,\n extendedInfo: css`\n margin-top: ${size[3]};\n padding: ${size[3]};\n background: ${t(colors.gray[50], colors.darkGray[800])};\n border-radius: ${border.radius.md};\n border: 1px solid ${t(colors.gray[200], colors.darkGray[700])};\n `,\n infoSection: css`\n margin-bottom: ${size[3]};\n &:last-child {\n margin-bottom: 0;\n }\n `,\n infoLabel: css`\n font-weight: ${font.weight.semibold};\n font-size: ${fontSize.xs};\n color: ${t(colors.gray[700], colors.gray[300])};\n display: block;\n margin-bottom: ${size[1]};\n `,\n toolsList: css`\n display: flex;\n flex-wrap: wrap;\n gap: ${size[1]};\n `,\n toolBadge: css`\n display: inline-flex;\n align-items: center;\n padding: 2px ${size[2]};\n background: ${colors.purple[500]}20;\n color: ${colors.purple[400]};\n border-radius: ${border.radius.sm};\n font-size: ${fontSize.xs};\n font-family: ${fontFamily.mono};\n `,\n jsonPreview: css`\n margin: 0;\n padding: ${size[2]};\n background: ${t(colors.gray[100], colors.darkGray[900])};\n border-radius: ${border.radius.sm};\n font-size: ${fontSize.xs};\n font-family: ${fontFamily.mono};\n overflow-x: auto;\n max-height: 200px;\n overflow-y: auto;\n color: ${t(colors.gray[700], colors.gray[300])};\n white-space: pre-wrap;\n word-break: break-word;\n `,\n tabsContainer: css`\n display: flex;\n gap: ${size[2]};\n padding: ${size[3]};\n border-bottom: 1px solid ${t(colors.gray[200], colors.darkGray[700])};\n `,\n tabButtonActive: css`\n background: ${colors.pink[400]};\n color: ${colors.white};\n border-color: ${colors.pink[400]};\n `,\n contentArea: css`\n flex: 1;\n overflow: auto;\n padding: ${size[3]};\n `,\n emptyMessages: css`\n padding: ${size[6]};\n color: ${t(colors.gray[500], colors.gray[500])};\n font-size: ${fontSize.sm};\n text-align: center;\n `,\n messagesList: css`\n display: flex;\n flex-direction: column;\n gap: ${size[3]};\n `,\n messageCard: css`\n border-radius: ${border.radius.lg};\n overflow: hidden;\n `,\n messageCardUser: css`\n padding: ${size[4]};\n border: 1.5px solid oklch(0.45 0.12 260);\n `,\n messageCardAssistant: css`\n padding: ${size[4]};\n border: 1.5px solid oklch(0.45 0.12 142);\n `,\n messageCardClient: css`\n border: 2px solid oklch(0.45 0.15 142);\n `,\n messageCardServer: css`\n border: 2px solid oklch(0.45 0.12 45);\n `,\n messageHeader: css`\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: ${size[3]};\n `,\n avatarUser: css`\n width: 28px;\n height: 28px;\n border-radius: 50%;\n background: oklch(0.5 0.2 260);\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: ${font.weight.bold};\n font-size: ${fontSize.sm};\n color: ${colors.white};\n flex-shrink: 0;\n `,\n avatarAssistant: css`\n width: 28px;\n height: 28px;\n border-radius: 50%;\n background: oklch(0.5 0.2 142);\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: ${font.weight.bold};\n font-size: ${fontSize.sm};\n color: ${colors.white};\n flex-shrink: 0;\n `,\n avatarClient: css`\n width: 28px;\n height: 28px;\n border-radius: 50%;\n background: oklch(0.5 0.22 142);\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: ${font.weight.bold};\n font-size: ${fontSize.sm};\n color: ${colors.white};\n flex-shrink: 0;\n `,\n avatarServer: css`\n width: 28px;\n height: 28px;\n border-radius: 50%;\n background: oklch(0.55 0.18 45);\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: ${font.weight.bold};\n font-size: ${fontSize.sm};\n color: ${colors.white};\n flex-shrink: 0;\n `,\n roleLabel: css`\n flex: 1;\n `,\n roleLabelUser: css`\n font-weight: ${font.weight.semibold};\n font-size: ${fontSize.sm};\n color: oklch(0.7 0.15 260);\n text-transform: capitalize;\n `,\n roleLabelAssistant: css`\n font-weight: ${font.weight.semibold};\n font-size: ${fontSize.sm};\n color: oklch(0.7 0.15 142);\n text-transform: capitalize;\n `,\n roleLabelClient: css`\n font-weight: ${font.weight.semibold};\n font-size: ${fontSize.sm};\n color: oklch(0.75 0.18 142);\n text-transform: capitalize;\n `,\n roleLabelServer: css`\n font-weight: ${font.weight.semibold};\n font-size: ${fontSize.sm};\n color: oklch(0.75 0.15 45);\n text-transform: capitalize;\n `,\n sourceBanner: css`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n font-size: 10px;\n font-weight: ${font.weight.medium};\n text-transform: uppercase;\n letter-spacing: 0.5px;\n `,\n sourceBannerClient: css`\n background: oklch(0.25 0.04 142);\n color: oklch(0.7 0.08 142);\n `,\n sourceBannerServer: css`\n background: oklch(0.25 0.04 45);\n color: oklch(0.7 0.06 45);\n `,\n sourceBannerIcon: css`\n font-size: 14px;\n `,\n sourceBannerText: css`\n flex: 1;\n `,\n messageCardContent: css`\n padding: ${size[4]};\n padding-top: ${size[3]};\n `,\n sourceBadge: css`\n font-size: 10px;\n padding: 2px 6px;\n border-radius: 4px;\n font-family: ${fontFamily.mono};\n font-weight: ${font.weight.medium};\n `,\n sourceBadgeClient: css`\n background: oklch(0.25 0.08 260);\n color: oklch(0.75 0.12 260);\n `,\n sourceBadgeServer: css`\n background: oklch(0.25 0.08 45);\n color: oklch(0.75 0.12 45);\n `,\n timestamp: css`\n font-size: 10px;\n color: oklch(0.6 0.05 260);\n font-family: ${fontFamily.mono};\n `,\n messageUsage: css`\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 10px;\n font-family: ${fontFamily.mono};\n color: oklch(0.65 0.12 142);\n margin-left: auto;\n padding: 2px 6px;\n background: oklch(0.2 0.03 142);\n border-radius: 4px;\n `,\n messageUsageIcon: css`\n font-size: 10px;\n `,\n thinkingDetails: css`\n margin-bottom: ${size[2]};\n border: 1px solid oklch(0.35 0.1 280);\n border-radius: 6px;\n background: oklch(0.18 0.02 280);\n overflow: hidden;\n `,\n thinkingSummary: css`\n padding: ${size[2]};\n cursor: pointer;\n font-size: ${fontSize.sm};\n color: oklch(0.75 0.1 280);\n font-weight: ${font.weight.semibold};\n &:hover {\n background: oklch(0.22 0.03 280);\n }\n `,\n thinkingContent: css`\n padding: ${size[2]};\n font-size: ${fontSize.xs};\n line-height: 1.5;\n white-space: pre-wrap;\n word-break: break-word;\n color: oklch(0.7 0.05 280);\n font-family: ${fontFamily.mono};\n border-top: 1px solid oklch(0.3 0.05 280);\n max-height: 300px;\n overflow-y: auto;\n `,\n messageContent: css`\n font-size: ${fontSize.sm};\n line-height: 1.6;\n white-space: pre-wrap;\n word-break: break-word;\n color: oklch(0.85 0.02 260);\n font-family:\n system-ui,\n -apple-system,\n sans-serif;\n `,\n toolCallsContainer: css`\n margin-top: ${size[3]};\n display: flex;\n flex-direction: column;\n gap: 8px;\n `,\n toolCall: css`\n border-radius: 8px;\n font-size: ${fontSize.xs};\n overflow: hidden;\n `,\n toolCallNormal: css`\n background: oklch(0.22 0.02 260);\n border: 1px solid oklch(0.3 0.05 280);\n `,\n toolCallApproval: css`\n background: oklch(0.22 0.08 60);\n border: 1px solid oklch(0.4 0.12 60);\n `,\n toolCallHeader: css`\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 10px 12px;\n cursor: pointer;\n list-style: none;\n &::-webkit-details-marker {\n display: none;\n }\n &::before {\n content: '▶';\n font-size: 10px;\n color: oklch(0.6 0.1 280);\n transition: transform 0.2s ease;\n }\n details[open] > &::before {\n transform: rotate(90deg);\n }\n &:hover {\n background: oklch(0.25 0.04 280);\n }\n `,\n toolCallContent: css`\n padding: ${size[2]} ${size[3]} ${size[3]};\n border-top: 1px solid oklch(0.3 0.05 280);\n `,\n toolCallName: css`\n font-weight: ${font.weight.semibold};\n `,\n toolCallNameNormal: css`\n color: oklch(0.75 0.15 280);\n `,\n toolCallNameApproval: css`\n color: oklch(0.75 0.15 60);\n `,\n toolStateBadge: css`\n font-size: 10px;\n padding: 2px 6px;\n border-radius: 3px;\n `,\n toolStateBadgeNormal: css`\n background: oklch(0.35 0.1 280);\n color: oklch(0.8 0.1 280);\n `,\n toolStateBadgeApproval: css`\n background: oklch(0.35 0.12 60);\n color: oklch(0.85 0.1 60);\n `,\n approvalRequiredBadge: css`\n font-size: 10px;\n padding: 2px 6px;\n border-radius: 3px;\n background: oklch(0.45 0.15 30);\n color: oklch(0.95 0.05 60);\n font-weight: ${font.weight.semibold};\n `,\n toolArguments: css`\n font-family: ${fontFamily.mono};\n font-size: ${fontSize.xs};\n color: oklch(0.7 0.05 260);\n white-space: pre-wrap;\n word-break: break-all;\n `,\n toolSection: css`\n margin-top: ${size[2]};\n border-top: 1px solid oklch(0.28 0.03 260);\n padding-top: ${size[2]};\n `,\n toolSectionLabel: css`\n font-size: 10px;\n font-weight: ${font.weight.semibold};\n color: oklch(0.6 0.08 260);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n margin-bottom: ${size[1]};\n `,\n toolJsonContainer: css`\n font-family: ${fontFamily.mono};\n font-size: ${fontSize.xs};\n color: oklch(0.8 0.05 260);\n background: oklch(0.18 0.02 260);\n border-radius: 4px;\n padding: ${size[4]};\n padding-left: ${size[8]};\n `,\n chunksDetails: css`\n margin-top: ${size[3]};\n `,\n chunksSummary: css`\n cursor: pointer;\n font-size: ${fontSize.xs};\n font-weight: ${font.weight.semibold};\n color: oklch(0.65 0.08 260);\n padding: ${size[2]};\n background: oklch(0.2 0.02 260);\n border-radius: 6px;\n border: 1px solid oklch(0.28 0.03 260);\n user-select: none;\n list-style: none;\n &::-webkit-details-marker {\n display: none;\n }\n &::marker {\n display: none;\n }\n details[open] > & .chunks-arrow {\n transform: rotate(90deg);\n }\n `,\n chunksSummaryRow: css`\n display: flex;\n align-items: center;\n gap: ${size[1]};\n `,\n chunksSummaryArrow: css`\n font-size: 8px;\n transition: transform 0.15s ease;\n color: oklch(0.5 0.05 260);\n details[open] > summary > div > & {\n transform: rotate(90deg);\n }\n `,\n chunksSummaryTitle: css`\n margin-right: ${size[1]};\n `,\n chunksSummaryContent: css`\n display: flex;\n flex-direction: column;\n gap: 6px;\n `,\n chunksSummaryHeader: css`\n display: flex;\n align-items: center;\n gap: ${size[2]};\n `,\n chunkBadge: css`\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 9px;\n `,\n chunkBadgeTool: css`\n background: oklch(0.3 0.1 280);\n color: oklch(0.75 0.12 280);\n `,\n chunkBadgeError: css`\n background: oklch(0.3 0.15 25);\n color: oklch(0.75 0.2 25);\n `,\n chunkBadgeSuccess: css`\n background: oklch(0.3 0.1 142);\n color: oklch(0.75 0.15 142);\n `,\n chunkBadgeApproval: css`\n background: oklch(0.3 0.15 50);\n color: oklch(0.75 0.2 50);\n `,\n chunkBadgeCount: css`\n background: oklch(0.3 0.08 260);\n color: oklch(0.75 0.1 260);\n font-weight: ${font.weight.semibold};\n `,\n contentPreview: css`\n font-family: ${fontFamily.mono};\n font-size: 10px;\n color: oklch(0.75 0.05 260);\n white-space: pre-wrap;\n word-break: break-word;\n max-width: 100%;\n font-weight: ${font.weight.normal};\n margin-top: 2px;\n `,\n chunksContainer: css`\n margin-top: ${size[2]};\n padding: ${size[2]};\n background: oklch(0.18 0.02 260);\n border-radius: 6px;\n border: 1px solid oklch(0.25 0.03 260);\n `,\n chunksList: css`\n display: flex;\n flex-direction: column;\n gap: ${size[1]};\n `,\n chunkItem: css`\n padding: 6px ${size[2]};\n border-radius: ${border.radius.sm};\n background: oklch(0.22 0.02 260);\n border: 1px solid oklch(0.28 0.03 260);\n font-size: 10px;\n `,\n chunkItemLarge: css`\n padding: ${size[2]} 10px;\n border-radius: 6px;\n background: oklch(0.22 0.02 260);\n border: 1px solid oklch(0.28 0.03 260);\n font-size: ${fontSize.xs};\n `,\n chunkHeader: css`\n display: flex;\n align-items: center;\n gap: 6px;\n margin-bottom: ${size[1]};\n `,\n chunkHeaderLarge: css`\n display: flex;\n align-items: center;\n gap: ${size[2]};\n margin-bottom: 6px;\n `,\n chunkNumber: css`\n font-size: 9px;\n font-weight: ${font.weight.semibold};\n color: oklch(0.6 0.05 260);\n min-width: 24px;\n `,\n chunkNumberLarge: css`\n font-size: 10px;\n font-weight: ${font.weight.semibold};\n color: oklch(0.6 0.05 260);\n min-width: 32px;\n `,\n chunkTypeBadge: css`\n display: flex;\n align-items: center;\n gap: 3px;\n `,\n chunkTypeBadgeLarge: css`\n display: flex;\n align-items: center;\n gap: ${size[1]};\n `,\n chunkTypeDot: css`\n width: 5px;\n height: 5px;\n border-radius: 50%;\n `,\n chunkTypeDotLarge: css`\n width: 6px;\n height: 6px;\n border-radius: 50%;\n `,\n chunkTypeLabel: css`\n font-weight: ${font.weight.semibold};\n color: oklch(0.7 0.08 260);\n `,\n chunkTypeLabelLarge: css`\n font-weight: ${font.weight.semibold};\n color: oklch(0.75 0.08 260);\n `,\n chunkToolBadge: css`\n padding: 1px ${size[1]};\n border-radius: 3px;\n background: oklch(0.3 0.1 280);\n color: oklch(0.75 0.12 280);\n font-size: 9px;\n font-weight: ${font.weight.semibold};\n `,\n chunkToolBadgeLarge: css`\n padding: 2px 6px;\n border-radius: 3px;\n background: oklch(0.3 0.1 280);\n color: oklch(0.75 0.12 280);\n font-size: 10px;\n font-weight: ${font.weight.semibold};\n `,\n chunkTimestamp: css`\n margin-left: auto;\n color: ${t(colors.gray[500], colors.gray[500])};\n font-size: 9px;\n `,\n chunkTimestampLarge: css`\n margin-left: auto;\n color: ${t(colors.gray[500], colors.gray[500])};\n font-size: 10px;\n `,\n rawJsonButton: css`\n padding: 1px ${size[1]};\n border-radius: 2px;\n border: 1px solid oklch(0.32 0.05 260);\n color: oklch(0.7 0.08 260);\n font-size: 8px;\n cursor: pointer;\n font-family: ${fontFamily.mono};\n font-weight: ${font.weight.semibold};\n `,\n rawJsonButtonInactive: css`\n background: oklch(0.28 0.03 260);\n `,\n rawJsonButtonActive: css`\n background: oklch(0.35 0.1 260);\n `,\n rawJsonButtonLarge: css`\n padding: 2px 6px;\n border-radius: 3px;\n border: 1px solid oklch(0.32 0.05 260);\n color: oklch(0.7 0.08 260);\n font-size: 10px;\n cursor: pointer;\n font-family: ${fontFamily.mono};\n font-weight: ${font.weight.semibold};\n `,\n chunkContent: css`\n font-family: ${fontFamily.mono};\n white-space: pre-wrap;\n word-break: break-word;\n padding: ${size[1]} 6px;\n background: oklch(0.2 0.01 260);\n border-radius: 3px;\n color: oklch(0.8 0.05 260);\n font-size: 10px;\n `,\n chunkContentLarge: css`\n font-family: ${fontFamily.mono};\n white-space: pre-wrap;\n word-break: break-word;\n padding: 6px ${size[2]};\n background: oklch(0.2 0.01 260);\n border-radius: ${border.radius.sm};\n color: oklch(0.8 0.05 260);\n font-size: ${fontSize.xs};\n `,\n chunkError: css`\n color: oklch(0.65 0.2 25);\n font-family: ${fontFamily.mono};\n padding: ${size[1]} 6px;\n background: oklch(0.2 0.05 25);\n border-radius: 3px;\n `,\n chunkErrorLarge: css`\n color: oklch(0.65 0.2 25);\n font-family: ${fontFamily.mono};\n padding: 6px ${size[2]};\n background: oklch(0.2 0.05 25);\n border-radius: ${border.radius.sm};\n `,\n chunkFinish: css`\n color: oklch(0.7 0.12 142);\n padding: ${size[1]} 6px;\n background: oklch(0.2 0.03 142);\n border-radius: 3px;\n font-weight: ${font.weight.semibold};\n `,\n chunkFinishLarge: css`\n color: oklch(0.7 0.12 142);\n padding: 6px ${size[2]};\n background: oklch(0.2 0.03 142);\n border-radius: ${border.radius.sm};\n font-weight: ${font.weight.semibold};\n `,\n chunkApproval: css`\n padding: 6px ${size[2]};\n background: oklch(0.25 0.12 50);\n border-radius: ${border.radius.sm};\n border: 1px solid oklch(0.35 0.15 50);\n `,\n chunkApprovalLarge: css`\n padding: ${size[2]};\n background: oklch(0.25 0.12 50);\n border-radius: 6px;\n border: 1px solid oklch(0.35 0.15 50);\n `,\n chunkApprovalTitle: css`\n color: oklch(0.75 0.15 50);\n font-weight: ${font.weight.semibold};\n margin-bottom: ${size[1]};\n font-size: 10px;\n `,\n chunkApprovalTitleLarge: css`\n color: oklch(0.75 0.15 50);\n font-weight: ${font.weight.semibold};\n margin-bottom: 6px;\n font-size: ${fontSize.xs};\n `,\n chunkApprovalInput: css`\n font-family: ${fontFamily.mono};\n font-size: 9px;\n color: oklch(0.7 0.08 50);\n white-space: pre-wrap;\n word-break: break-word;\n `,\n chunkApprovalInputLarge: css`\n font-family: ${fontFamily.mono};\n font-size: 10px;\n color: oklch(0.7 0.08 50);\n white-space: pre-wrap;\n word-break: break-word;\n `,\n chunkToolCall: css`\n padding: ${size[2]} ${size[3]};\n background: oklch(0.22 0.08 280);\n border-radius: ${border.radius.sm};\n border: 1px solid oklch(0.32 0.1 280);\n margin-top: ${size[1]};\n `,\n chunkToolCallHeader: css`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: ${size[2]};\n `,\n chunkToolCallTitle: css`\n color: oklch(0.75 0.12 280);\n font-weight: ${font.weight.semibold};\n font-size: 10px;\n `,\n chunkToolResult: css`\n padding: ${size[2]} ${size[3]};\n background: oklch(0.22 0.08 160);\n border-radius: ${border.radius.sm};\n border: 1px solid oklch(0.32 0.1 160);\n margin-top: ${size[1]};\n `,\n chunkToolResultHeader: css`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: ${size[2]};\n `,\n chunkToolResultTitle: css`\n color: oklch(0.75 0.12 160);\n font-weight: ${font.weight.semibold};\n font-size: 10px;\n `,\n rawJson: css`\n font-family: ${fontFamily.mono};\n white-space: pre-wrap;\n word-break: break-word;\n padding: 6px;\n background: oklch(0.16 0.01 260);\n border-radius: 3px;\n color: oklch(0.75 0.08 260);\n font-size: 9px;\n max-height: 200px;\n overflow-y: auto;\n `,\n rawJsonLarge: css`\n font-family: ${fontFamily.mono};\n white-space: pre-wrap;\n word-break: break-word;\n padding: ${size[2]};\n background: oklch(0.16 0.01 260);\n border-radius: ${border.radius.sm};\n color: oklch(0.75 0.08 260);\n font-size: 10px;\n max-height: 300px;\n overflow-y: auto;\n `,\n noChunks: css`\n padding: ${size[3]};\n color: ${t(colors.gray[500], colors.gray[500])};\n font-size: ${fontSize.xs};\n `,\n streamContainer: css`\n padding: ${size[3]};\n background: oklch(0.18 0.02 260);\n border-radius: ${border.radius.lg};\n border: 1px solid oklch(0.25 0.03 260);\n `,\n streamHeader: css`\n margin-bottom: ${size[3]};\n padding-bottom: ${size[2]};\n border-bottom: 1px solid oklch(0.25 0.03 260);\n `,\n streamHeaderRow: css`\n display: flex;\n align-items: center;\n gap: ${size[2]};\n margin-bottom: ${size[1]};\n `,\n streamTitle: css`\n font-weight: ${font.weight.semibold};\n font-size: ${fontSize.sm};\n color: oklch(0.8 0.05 260);\n `,\n streamSubtitle: css`\n font-size: ${fontSize.xs};\n color: ${t(colors.gray[500], colors.gray[500])};\n `,\n messageGroups: css`\n display: flex;\n flex-direction: column;\n gap: ${size[2]};\n `,\n messageGroupDetails: css`\n margin-bottom: ${size[1]};\n `,\n messageGroupSummary: css`\n cursor: pointer;\n font-size: ${fontSize.xs};\n font-weight: ${font.weight.semibold};\n color: oklch(0.65 0.08 260);\n padding: 10px;\n background: oklch(0.2 0.02 260);\n border-radius: 6px;\n border: 1px solid oklch(0.28 0.03 260);\n user-select: none;\n `,\n messageGroupContent: css`\n display: flex;\n flex-direction: column;\n gap: 6px;\n `,\n messageGroupHeader: css`\n display: flex;\n align-items: center;\n gap: ${size[2]};\n `,\n messageId: css`\n font-family: ${fontFamily.mono};\n font-size: 9px;\n color: oklch(0.6 0.05 260);\n font-weight: ${font.weight.normal};\n `,\n // Embedding and Summarize operation styles\n operationCard: css`\n padding: ${size[4]};\n border-radius: ${border.radius.lg};\n background: linear-gradient(\n 135deg,\n oklch(0.25 0.04 200) 0%,\n oklch(0.22 0.03 200) 100%\n );\n border: 1.5px solid oklch(0.5 0.15 200);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12);\n `,\n operationHeader: css`\n display: flex;\n align-items: center;\n gap: ${size[2]};\n margin-bottom: ${size[3]};\n `,\n operationIcon: css`\n font-size: ${fontSize.lg};\n `,\n operationTitle: css`\n font-weight: ${font.weight.semibold};\n font-size: ${fontSize.sm};\n color: oklch(0.85 0.1 200);\n flex: 1;\n `,\n operationStatus: css`\n font-size: ${fontSize.xs};\n padding: 2px ${size[2]};\n border-radius: ${border.radius.sm};\n `,\n operationStatusCompleted: css`\n background: ${colors.green[500]}20;\n color: ${colors.green[400]};\n `,\n operationStatusPending: css`\n background: ${colors.yellow[500]}20;\n color: ${colors.yellow[400]};\n `,\n durationBadge: css`\n font-size: ${fontSize.xs};\n padding: 2px ${size[2]};\n border-radius: ${border.radius.sm};\n background: oklch(0.3 0.1 280);\n color: oklch(0.8 0.1 280);\n font-family: ${fontFamily.mono};\n `,\n operationDetails: css`\n display: flex;\n flex-direction: column;\n gap: ${size[2]};\n `,\n operationDetail: css`\n display: flex;\n align-items: center;\n gap: ${size[2]};\n font-size: ${fontSize.xs};\n `,\n operationLabel: css`\n color: oklch(0.65 0.08 200);\n font-weight: ${font.weight.semibold};\n min-width: 70px;\n `,\n operationValue: css`\n color: oklch(0.8 0.05 200);\n font-family: ${fontFamily.mono};\n `,\n // Iteration badge\n iterationBadge: css`\n font-size: ${fontSize.xs};\n padding: 2px ${size[2]};\n border-radius: ${border.radius.sm};\n background: ${colors.purple[500]}20;\n color: ${colors.purple[400]};\n font-weight: ${font.weight.semibold};\n `,\n },\n }\n}\n\nexport function useStyles() {\n const { theme } = useTheme()\n const [styles, setStyles] = createSignal(stylesFactory(theme()))\n createEffect(() => {\n setStyles(stylesFactory(theme()))\n })\n return styles\n}\n"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "@tanstack/ai-devtools-core",
3
+ "version": "0.0.1",
4
+ "description": "Core TanStack AI Devtools",
5
+ "author": "",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/TanStack/ai.git",
10
+ "directory": "packages/typescript/ai"
11
+ },
12
+ "type": "module",
13
+ "types": "./dist/esm/index.d.ts",
14
+ "module": "./dist/esm/index.js",
15
+ "exports": {
16
+ ".": {
17
+ "types": "./dist/esm/index.d.ts",
18
+ "import": "./dist/esm/index.js"
19
+ },
20
+ "./production": {
21
+ "types": "./dist/esm/production.d.ts",
22
+ "import": "./dist/esm/production.js"
23
+ },
24
+ "./package.json": "./package.json"
25
+ },
26
+ "files": [
27
+ "dist",
28
+ "src"
29
+ ],
30
+ "keywords": [
31
+ "ai",
32
+ "tanstack",
33
+ "sdk",
34
+ "llm",
35
+ "chat",
36
+ "embeddings"
37
+ ],
38
+ "dependencies": {
39
+ "@tanstack/devtools-ui": "^0.4.4",
40
+ "@tanstack/devtools-utils": "^0.0.8",
41
+ "goober": "^2.1.18",
42
+ "solid-js": "^1.9.10",
43
+ "@tanstack/ai": "0.0.1"
44
+ },
45
+ "devDependencies": {
46
+ "@vitest/coverage-v8": "4.0.14",
47
+ "jsdom": "^27.2.0",
48
+ "vite": "^7.2.4",
49
+ "vite-plugin-solid": "^2.11.10"
50
+ },
51
+ "scripts": {
52
+ "build": "vite build",
53
+ "clean": "premove ./build ./dist",
54
+ "lint:fix": "eslint ./src --fix",
55
+ "test:build": "publint --strict",
56
+ "test:eslint": "eslint ./src",
57
+ "test:lib": "vitest --passWithNoTests",
58
+ "test:lib:dev": "pnpm test:lib --watch",
59
+ "test:types": "tsc"
60
+ }
61
+ }
@@ -0,0 +1,89 @@
1
+ import { Show, createEffect, createSignal } from 'solid-js'
2
+ import { useStyles } from '../styles/use-styles'
3
+ import { useAIStore } from '../store/ai-context'
4
+ import {
5
+ ChunksTab,
6
+ ConversationHeader,
7
+ ConversationTabs,
8
+ EmbeddingsTab,
9
+ MessagesTab,
10
+ SummariesTab,
11
+ } from './conversation'
12
+ import type { TabType } from './conversation'
13
+ import type { Conversation } from '../store/ai-context'
14
+ import type { Component } from 'solid-js'
15
+
16
+ export const ConversationDetails: Component = () => {
17
+ const { state } = useAIStore()
18
+ const styles = useStyles()
19
+ const [activeTab, setActiveTab] = createSignal<TabType>('messages')
20
+
21
+ const activeConversation = (): Conversation | undefined => {
22
+ if (!state.activeConversationId) return undefined
23
+ return state.conversations[state.activeConversationId]
24
+ }
25
+
26
+ // Update active tab when conversation changes
27
+ createEffect(() => {
28
+ const conv = activeConversation()
29
+ if (conv) {
30
+ // For server conversations, always use chunks (messages tab is hidden)
31
+ if (conv.type === 'server') {
32
+ if (conv.chunks.length > 0) {
33
+ setActiveTab('chunks')
34
+ } else if (
35
+ conv.hasEmbedding ||
36
+ (conv.embeddings && conv.embeddings.length > 0)
37
+ ) {
38
+ setActiveTab('embeddings')
39
+ } else if (
40
+ conv.hasSummarize ||
41
+ (conv.summaries && conv.summaries.length > 0)
42
+ ) {
43
+ setActiveTab('summaries')
44
+ } else {
45
+ setActiveTab('chunks')
46
+ }
47
+ } else {
48
+ // For client conversations, default to messages tab
49
+ setActiveTab('messages')
50
+ }
51
+ }
52
+ })
53
+
54
+ return (
55
+ <Show
56
+ when={activeConversation()}
57
+ fallback={
58
+ <div class={styles().conversationDetails.emptyState}>
59
+ Select a conversation to view details
60
+ </div>
61
+ }
62
+ >
63
+ {(conv) => (
64
+ <div class={styles().conversationDetails.container}>
65
+ <ConversationHeader conversation={conv()} />
66
+ <ConversationTabs
67
+ conversation={conv()}
68
+ activeTab={activeTab()}
69
+ onTabChange={setActiveTab}
70
+ />
71
+ <div class={styles().conversationDetails.contentArea}>
72
+ <Show when={activeTab() === 'messages'}>
73
+ <MessagesTab messages={conv().messages} />
74
+ </Show>
75
+ <Show when={activeTab() === 'chunks'}>
76
+ <ChunksTab chunks={conv().chunks} messages={conv().messages} />
77
+ </Show>
78
+ <Show when={activeTab() === 'embeddings'}>
79
+ <EmbeddingsTab embeddings={conv().embeddings ?? []} />
80
+ </Show>
81
+ <Show when={activeTab() === 'summaries'}>
82
+ <SummariesTab summaries={conv().summaries ?? []} />
83
+ </Show>
84
+ </div>
85
+ </div>
86
+ )}
87
+ </Show>
88
+ )
89
+ }
@@ -0,0 +1,21 @@
1
+ import { For } from 'solid-js'
2
+ import { useStyles } from '../styles/use-styles'
3
+ import { useAIStore } from '../store/ai-context'
4
+ import { ConversationRow } from './list'
5
+ import type { Conversation } from '../store/ai-context'
6
+ import type { Component } from 'solid-js'
7
+
8
+ export const ConversationsList: Component = () => {
9
+ const { state } = useAIStore()
10
+ const styles = useStyles()
11
+
12
+ const conversations = () => Object.values(state.conversations)
13
+
14
+ return (
15
+ <div class={styles().utilList}>
16
+ <For each={conversations()}>
17
+ {(conv: Conversation) => <ConversationRow conversation={conv} />}
18
+ </For>
19
+ </div>
20
+ )
21
+ }
@@ -0,0 +1,93 @@
1
+ import { createSignal, onCleanup, onMount } from 'solid-js'
2
+ import { Header, HeaderLogo, MainPanel } from '@tanstack/devtools-ui'
3
+ import { useStyles } from '../styles/use-styles'
4
+ import { AIProvider } from '../store/ai-context'
5
+ import { ConversationsList } from './ConversationsList'
6
+ import { ConversationDetails } from './ConversationDetails'
7
+
8
+ export default function Devtools() {
9
+ return (
10
+ <AIProvider>
11
+ <DevtoolsContent />
12
+ </AIProvider>
13
+ )
14
+ }
15
+
16
+ function DevtoolsContent() {
17
+ const styles = useStyles()
18
+ const [leftPanelWidth, setLeftPanelWidth] = createSignal(300)
19
+ const [isDragging, setIsDragging] = createSignal(false)
20
+
21
+ let dragStartX = 0
22
+ let dragStartWidth = 0
23
+
24
+ const handleMouseDown = (e: MouseEvent) => {
25
+ e.preventDefault()
26
+ e.stopPropagation()
27
+ setIsDragging(true)
28
+ document.body.style.cursor = 'col-resize'
29
+ document.body.style.userSelect = 'none'
30
+ dragStartX = e.clientX
31
+ dragStartWidth = leftPanelWidth()
32
+ }
33
+
34
+ const handleMouseMove = (e: MouseEvent) => {
35
+ if (!isDragging()) return
36
+
37
+ e.preventDefault()
38
+ const deltaX = e.clientX - dragStartX
39
+ const newWidth = Math.max(150, Math.min(800, dragStartWidth + deltaX))
40
+ setLeftPanelWidth(newWidth)
41
+ }
42
+
43
+ const handleMouseUp = () => {
44
+ setIsDragging(false)
45
+ document.body.style.cursor = ''
46
+ document.body.style.userSelect = ''
47
+ }
48
+
49
+ onMount(() => {
50
+ document.addEventListener('mousemove', handleMouseMove)
51
+ document.addEventListener('mouseup', handleMouseUp)
52
+ })
53
+
54
+ onCleanup(() => {
55
+ document.removeEventListener('mousemove', handleMouseMove)
56
+ document.removeEventListener('mouseup', handleMouseUp)
57
+ })
58
+
59
+ return (
60
+ <MainPanel>
61
+ <Header>
62
+ <HeaderLogo flavor={{ light: '#ec4899', dark: '#ec4899' }}>
63
+ TanStack AI
64
+ </HeaderLogo>
65
+ </Header>
66
+
67
+ <div class={styles().mainContainer}>
68
+ <div
69
+ class={styles().leftPanel}
70
+ style={{
71
+ width: `${leftPanelWidth()}px`,
72
+ 'min-width': '150px',
73
+ 'max-width': '800px',
74
+ }}
75
+ >
76
+ {/* Section header */}
77
+ <div class={styles().shell.sectionHeader}>Active Conversations</div>
78
+
79
+ <ConversationsList />
80
+ </div>
81
+
82
+ <div
83
+ class={`${styles().dragHandle} ${isDragging() ? 'dragging' : ''}`}
84
+ onMouseDown={handleMouseDown}
85
+ />
86
+
87
+ <div class={styles().rightPanel} style={{ flex: 1 }}>
88
+ <ConversationDetails />
89
+ </div>
90
+ </div>
91
+ </MainPanel>
92
+ )
93
+ }
@@ -0,0 +1,51 @@
1
+ import { Show } from 'solid-js'
2
+ import { useStyles } from '../../styles/use-styles'
3
+ import type { Component } from 'solid-js'
4
+ import type { Chunk } from '../../store/ai-store'
5
+
6
+ interface ChunkBadgesProps {
7
+ chunks: Array<Chunk>
8
+ }
9
+
10
+ export const ChunkBadges: Component<ChunkBadgesProps> = (props) => {
11
+ const styles = useStyles()
12
+
13
+ const hasToolCalls = () => props.chunks.some((c) => c.type === 'tool_call')
14
+ const hasErrors = () => props.chunks.some((c) => c.type === 'error')
15
+ const hasApproval = () => props.chunks.some((c) => c.type === 'approval')
16
+ const finishReason = () =>
17
+ props.chunks.find((c) => c.type === 'done')?.finishReason
18
+
19
+ return (
20
+ <>
21
+ <Show when={hasToolCalls()}>
22
+ <span
23
+ class={`${styles().conversationDetails.chunkBadge} ${styles().conversationDetails.chunkBadgeTool}`}
24
+ >
25
+ 🔧 Tool Calls
26
+ </span>
27
+ </Show>
28
+ <Show when={hasErrors()}>
29
+ <span
30
+ class={`${styles().conversationDetails.chunkBadge} ${styles().conversationDetails.chunkBadgeError}`}
31
+ >
32
+ ❌ Error
33
+ </span>
34
+ </Show>
35
+ <Show when={hasApproval()}>
36
+ <span
37
+ class={`${styles().conversationDetails.chunkBadge} ${styles().conversationDetails.chunkBadgeApproval}`}
38
+ >
39
+ ⚠️ Approval
40
+ </span>
41
+ </Show>
42
+ <Show when={finishReason()}>
43
+ <span
44
+ class={`${styles().conversationDetails.chunkBadge} ${styles().conversationDetails.chunkBadgeSuccess}`}
45
+ >
46
+ ✓ {finishReason()}
47
+ </span>
48
+ </Show>
49
+ </>
50
+ )
51
+ }