@datapilot-ai/ui 0.1.0

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 (80) hide show
  1. package/README.md +148 -0
  2. package/dist/chat/ChatDialogShell.d.ts +10 -0
  3. package/dist/chat/ErrorBoundary.d.ts +15 -0
  4. package/dist/chat/callbackReference.d.ts +26 -0
  5. package/dist/chat/chunks/ChartView-CnTqpdHT.cjs +1 -0
  6. package/dist/chat/chunks/ChartView-DkOQd3A1.js +1 -0
  7. package/dist/chat/chunks/ChatDialogShell-D8oyzoJN.cjs +1 -0
  8. package/dist/chat/chunks/ChatDialogShell-Dd95ewuX.js +1 -0
  9. package/dist/chat/chunks/CodeBlock-C5SDaT8A.js +1 -0
  10. package/dist/chat/chunks/CodeBlock-CJeUOHmJ.cjs +1 -0
  11. package/dist/chat/chunks/FileDialog-BVlgB_FO.cjs +1 -0
  12. package/dist/chat/chunks/FileDialog-sOqHwnsY.js +1 -0
  13. package/dist/chat/chunks/MathBlock-CcG1Ta7o.js +1 -0
  14. package/dist/chat/chunks/MathBlock-eQ_9KHYT.cjs +1 -0
  15. package/dist/chat/chunks/MermaidBlock-B6I1YoIJ.js +1 -0
  16. package/dist/chat/chunks/MermaidBlock-BKffbCpL.cjs +1 -0
  17. package/dist/chat/chunks/streaming-markdown-BwEtffTU.js +1 -0
  18. package/dist/chat/chunks/streaming-markdown-Dp2J4nUP.cjs +1 -0
  19. package/dist/chat/content/ChartBlockView.d.ts +5 -0
  20. package/dist/chat/content/FileArtifacts.d.ts +11 -0
  21. package/dist/chat/content/FileDialog.d.ts +10 -0
  22. package/dist/chat/content/MarkdownTable.d.ts +9 -0
  23. package/dist/chat/content/MarkdownView.d.ts +12 -0
  24. package/dist/chat/content/SqlDataView.d.ts +6 -0
  25. package/dist/chat/content/TableActions.d.ts +9 -0
  26. package/dist/chat/content/TablePagination.d.ts +9 -0
  27. package/dist/chat/content/renderers/ChartView.d.ts +5 -0
  28. package/dist/chat/content/renderers/CodeBlock.d.ts +6 -0
  29. package/dist/chat/content/renderers/MathBlock.d.ts +4 -0
  30. package/dist/chat/content/renderers/MermaidBlock.d.ts +5 -0
  31. package/dist/chat/icons.d.ts +22 -0
  32. package/dist/chat/index.cjs +1 -0
  33. package/dist/chat/index.d.ts +9 -0
  34. package/dist/chat/index.js +1 -0
  35. package/dist/chat/labels.d.ts +2 -0
  36. package/dist/chat/message/BlockView.d.ts +8 -0
  37. package/dist/chat/message/ChatMessage.d.ts +2 -0
  38. package/dist/chat/message/ChoiceView.d.ts +7 -0
  39. package/dist/chat/message/RawValue.d.ts +9 -0
  40. package/dist/chat/message/ThinkingView.d.ts +7 -0
  41. package/dist/chat/propReference.d.ts +11 -0
  42. package/dist/chat/reference.cjs +1 -0
  43. package/dist/chat/reference.d.ts +4 -0
  44. package/dist/chat/reference.js +1 -0
  45. package/dist/chat/streaming/ReactRenderer.d.ts +19 -0
  46. package/dist/chat/streaming/types.d.ts +14 -0
  47. package/dist/chat/streaming/useStream.d.ts +2 -0
  48. package/dist/chat/sub-agent/SpawnAgentCard.d.ts +15 -0
  49. package/dist/chat/sub-agent/SubAgentDialog.d.ts +10 -0
  50. package/dist/chat/sub-agent/normalizeHistory.d.ts +2 -0
  51. package/dist/chat/tool/ToolDetail.d.ts +4 -0
  52. package/dist/chat/tool/ToolView.d.ts +10 -0
  53. package/dist/chat/types.d.ts +197 -0
  54. package/dist/chat/useAbortableTask.d.ts +1 -0
  55. package/dist/chat/useCopyFeedback.d.ts +4 -0
  56. package/dist/chat/utils.d.ts +14 -0
  57. package/dist/chat.css +2 -0
  58. package/dist/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  59. package/dist/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  60. package/dist/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  61. package/dist/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  62. package/dist/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  63. package/dist/fonts/KaTeX_Main-Bold.woff2 +0 -0
  64. package/dist/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  65. package/dist/fonts/KaTeX_Main-Italic.woff2 +0 -0
  66. package/dist/fonts/KaTeX_Main-Regular.woff2 +0 -0
  67. package/dist/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  68. package/dist/fonts/KaTeX_Math-Italic.woff2 +0 -0
  69. package/dist/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  70. package/dist/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  71. package/dist/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  72. package/dist/fonts/KaTeX_Script-Regular.woff2 +0 -0
  73. package/dist/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  74. package/dist/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  75. package/dist/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  76. package/dist/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  77. package/dist/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  78. package/dist/katex.css +1 -0
  79. package/dist/styles.css +2 -0
  80. package/package.json +74 -0
@@ -0,0 +1,8 @@
1
+ import type { ChatLabels, ContentBlock, QueryHandler, SubmitChoice } from '../types';
2
+ export declare const BlockView: import("react").NamedExoticComponent<{
3
+ block: ContentBlock;
4
+ messageId: string;
5
+ labels: ChatLabels;
6
+ onQuery?: QueryHandler;
7
+ onSubmitChoice?: SubmitChoice;
8
+ }>;
@@ -0,0 +1,2 @@
1
+ import type { ChatMessageProps } from '../types';
2
+ export declare const ChatMessage: import("react").NamedExoticComponent<ChatMessageProps>;
@@ -0,0 +1,7 @@
1
+ import type { ChatLabels, ChoiceBlock, SubmitChoice } from '../types';
2
+ export declare const ChoiceView: import("react").NamedExoticComponent<{
3
+ block: ChoiceBlock;
4
+ messageId: string;
5
+ onSubmitChoice?: SubmitChoice;
6
+ labels: ChatLabels;
7
+ }>;
@@ -0,0 +1,9 @@
1
+ export declare const RawValue: import("react").NamedExoticComponent<{
2
+ value: unknown;
3
+ testId?: string;
4
+ label?: string;
5
+ copyLabels?: {
6
+ copy: string;
7
+ copied: string;
8
+ };
9
+ }>;
@@ -0,0 +1,7 @@
1
+ import type { Action, ChatLabels } from '../types';
2
+ export declare const ThinkingView: import("react").NamedExoticComponent<{
3
+ action: Action;
4
+ messageId: string;
5
+ sessionId?: string;
6
+ labels: ChatLabels;
7
+ }>;
@@ -0,0 +1,11 @@
1
+ export type ChatPropKey = 'getDialogContainer' | 'className';
2
+ export interface ChatPropReference {
3
+ key: ChatPropKey;
4
+ title: string;
5
+ summary: string;
6
+ type: string;
7
+ defaultBehavior: string;
8
+ example: string;
9
+ interaction: readonly string[];
10
+ }
11
+ export declare const chatPropReference: readonly ChatPropReference[];
@@ -0,0 +1 @@
1
+ function dp16_0x29cf(){var _0x15f725=['C291CMnL','y29UDgv4Dc5JAg9Py2vjza','uhjVBwLZztXsyxDdAgf0sgLZDg9YEvbHEwXVywq+44cc','ue9tva','5A6/5lI75zcr6igk5AsPie9Wzw5bueKG5y+r6lw35PAW5lIa6l2UifntrsdOR7FMSyi','mZqXndm4mfHXD1bNwa','tw9KDwXL','mtC5nta4mhPLD1fVqG','mZG1nZy4ufrrBfDN','57Ue5lU25OYj6l+u5zUEie1jtuuG57g75z6l5A6j5ywO5RIY5P+t5yAf5A65','C3rYAw5N','5A6/5lI75Qc35BYp6ycA6l+h6k+L5l2C55sO5z+F6lcd5Pw05Asw5Bgc5BId5Bga','B25rDwvYEq','u2vZC2LVBKzPBgvbCNrPzMfJDa','5lIl6l296l2S5O2I5A6m5OIq55Qeierpq1GG5PAh5lU244cc','m0jlrvP6Aq','kcKGpt4GsfrntevSzw1LBNqGFcbUDwXS','5B2t5yMn5RAi5OgV5Qch6k+g44cc','5A6/5lI75RAi6ls55A6m5Pw05zon5BQu5Rwb5zco6l+u5zUEihrYDwxVViZNU4tKU7BPLihLRPRPGiNMI6K','5PAh5lU25Ps26jEp','qwjVCNrtAwDUywW','n1PmyujAtW','55sO5OI36ycA6l+h5PAh5lU26Ake6kEi6l+B5ywLie1HCMTKB3DUioE8LUI+KEAaGq','5OMN6kgm5RAi5OgV5yY65z2x5Pc65BIM55Qeifnrto+8Jow5TUAkIUACJEwkOEERR+s6JoE7ToE7K+AENoI9RoAnOUs4UUIHQoAGVoAiLUwBVUIHQoAvSoAnRUoaGG','5OQk5B2t5yMn5lYA6k+D5lIT55Qeie1HCMTKB3DUioAwH+s7TUI9RoAnOUs4UIbet0ny44cc','y2XHC3noyw1L','mta0mZGWmJbAt3D6suK','uhjVBwLZztXuywjSzurHDgeGFcbdAgfYDerHDge+44cc','54I25RAi5OgV5Pc65BIM55Qe5lU75yQH5Qch6Aky44cc','yw5ZD2vY','y29UDgv4Dc5TzxnZywDLswq','lY8Gt3bLBKfqstOGue9tvcaVyxbPl2zPBgvZl3TZzxnZAw9Uswr9l2nVBNzLCNqTDg8Tzg9JEo+8M0DfvcaVyxbPl2zPBgvZl3TZzxnZAw9Uswr9l3TKB2n4rMLSzw5HBwv9cI8ViowfTUs7LUIMGEAXGJOGC2vZC2LVBKLK44cbywnJzxnZvg9Rzw7VVjVOVPpLHAxLV4xPOBVMMk/LVzpLIy3KVjROR53KUk3NMOqGtwfYA2rVD24G5PAh5lU277Ym5A6m5OIq5lIl6l295zco6yEk5Ps+5A+56lgHifvstaOVlYdKVP3OTzBLM57OSim6ig9UuMvHzezPBgukB25dB252zxj0rMLSzt17yxn5BMmGkgzPBguSihnPz25HBcKGpt4GEWOGignVBNn0ignVBNzLCNrszxnWB25Zzsa9igf3ywL0igzLDgnOkaOGicaGycr7yxbPqMfZzx0VyxbPl2zPBgvZlYr7zw5JB2rLvvjjq29TCg9Uzw50khnLC3nPB25jzcL9l2nVBNzLCNqTDg8Tzg9JEgaScIaGicb7cIaGicaGig1LDgHVzdOGj1bpu1qNlaOGicaGicbZAwDUywWScIaGicaGigHLywrLCNm6ihSGqxv0Ag9YAxPHDgLVBJOGyejLyxjLCIaKE2fJy2vZC1rVA2vUFwaSicDdB250zw50lvr5CguNoIaNyxbWBgLJyxrPB24VANnVBICGFsWkicaGicaGyM9KEtOGsLnptI5ZDhjPBMDPzNKOEYbMAwXLBMfTztOGzMLSzs5MAwXLBMfTzsb9ksWkicaGih0ScIaGkqOGigLMicGHy29UDMvYDfjLC3bVBNnLlM9Rksb0AhjVDYbUzxCGrxjYB3iOj0rpq1GG6l2S5O2I5AsX6lsLjYKkicbJB25ZDcbWyxLSB2fKid0GyxDHAxqGy29UDMvYDfjLC3bVBNnLlMPZB24OkqOGignVBNn0igrVy3HgAwXLBMfTzsa9ihr5CgvVzIbWyxLSB2fKlMrHDgeGpt09icDZDhjPBMCNcIaGica/ihbHEwXVywqUzgf0yqOGicaGoIbWyxLSB2fKlMrHDge/lMzPBgvUyw1Lid8/ihbHEwXVywqUzMLSzw5HBwukicbPzIaOiwrVy3HgAwXLBMfTzsKGDgHYB3CGBMv3ievYCM9YkcFOVAZMJAlLK43LUPtNVlRLSjeGre9dwcdMLOFKU7BLKi0NkqOGignVBNn0igrVD25SB2fKuMvZCg9UC2uGpsbHD2fPDcbMzxrJAcGkicaGigaKE2fWAujHC2v9l2fWAs9MAwXLCY8KE2vUy29KzvvssunVBxbVBMvUDcHZzxnZAw9UswqPFs8KE2vUy29KzvvssunVBxbVBMvUDcHKB2n4rMLSzw5HBwuPFwaScIaGicb7ihnPz25HBcWGAgvHzgvYCZOGEYbbDxrOB3jPEMf0Aw9UoIbGqMvHCMvYicr7ywnJzxnZvg9Rzw59ycb9ih0ScIaGkqOGigLMicGHzg93BMXVywrszxnWB25Zzs5VAYKGDgHYB3CGBMv3ievYCM9YkcDet0nyios4I+I9VEwKSEI0PsCPcIaGy29UC3qGB2jQzwn0vxjSid0GvvjmlMnYzwf0zu9IAMvJDfvstcHHD2fPDcbKB3DUBg9HzfjLC3bVBNnLlMjSB2iOksKkicbJB25ZDcbHBMnOB3iGpsbpyMPLy3qUyxnZAwDUkgrVy3vTzw50lMnYzwf0zuvSzw1LBNqOj2eNksWGEYbOCMvMoIbVyMPLy3rvCMWSigrVD25SB2fKoIbKB2n4rMLSzw5HBwuGFsKkicbHBMnOB3iUy2XPy2SOkqOGifvstc5YzxzVA2vpyMPLy3rvuKWOB2jQzwn0vxjSkqP9Fq','otK3swPRsMDM','5OQk5B2t5yMn5lYA6k+D5PAh5lU25l+D5A2y5yIW5BEY55M75B2v55sO5OI355Qe4OcC5OIr55Qe5PAh5lU24OcD44cc','B25tyxzLrMLSzq','B25szwfKrMLSzq','C2LNBMfS','lY8Gt3bLBKfqstOGue9tvcaVyxbPl25HBwvZCgfJzxmVE25HBwvZCgfJzuLKFs9XDwvYEqOVlYdLHBBKU5BOPOhMSyi6ihnVDxjJzs5KyxrHyMfZzsdMJiFLRPRMLBdMJA7MUPdVVjVLM77OOAGGC291CMnLlMnOyxj0ioMCGoApKos+MYbSywjLBenVBhvTBIdLKOWGDMfSDwvdB2X1Bw5ZcI8Vios+NEI1LUwBNUIWGZOG5PEGcM9UuxvLCNK9E2fZEw5JicH7ihf1zxj5lcbZB3vYy2uSihnPz25HBcb9ksa9pIb7cIaGy29UC3qGBwv0ywrHDgeGpsbZB3vYy2uGyxmGEWOGicaGzgf0ywjHC2u/oIbZDhjPBMCkicaGignOyxj0pZOGEYbSywjLBenVBhvTBJOGC3rYAw5NoYb2ywX1zunVBhvTBNm6ihn0CMLUz1TDih0kicb9ihWGDw5KzwzPBMvKcIaGAwyGkcfTzxrHzgf0yt8Uzgf0ywjHC2uPihrOCM93ig5LDYbfCNjVCIGN5P+L6k+I5yY65z2x57Y65BcrihnVDxjJzs5KyxrHyMfZzsCPcIaGy29UC3qGCMvZCg9UC2uGpsbHD2fPDcbMzxrJAcHGjhTHCgLcyxnLFs9HCgKVBMfTzxnWywnLCY8KE25HBwvZCgfJzuLKFs9XDwvYEwaSihSkicaGig1LDgHVzdOGj1bpu1qNlaOGicaGC2LNBMfSlaOGicaGAgvHzgvYCZOGEYbbDxrOB3jPEMf0Aw9UoIbGqMvHCMvYicr7ywnJzxnZvg9Rzw59ycWGj0nVBNrLBNqTvhLWzsC6icDHChbSAwnHDgLVBI9QC29UjYb9laOGicaGyM9KEtOGsLnptI5ZDhjPBMDPzNKOEYbZCwW6ihf1zxj5lcbKyxrHyMfZztOGBwv0ywrHDgeUzgf0ywjHC2uSigfNzw50swqGFsKScIaGFsKkicbPzIaOixjLC3bVBNnLlM9Rksb0AhjVDYbUzxCGrxjYB3iOj+AFPEIVOUAjP+IHJowKSEI0PsCPcIaGy29UC3qGCgf5Bg9Hzca9igf3ywL0ihjLC3bVBNnLlMPZB24OkqOGignVBNn0ihjLC3vSDca9ihbHEwXVywqUzgf0ysa/pYbWyxLSB2fKcIaGy29UC3qGCMvJB3jKCYa9ihjLC3vSDc5YB3DZlM1HCcGOCM93oIb1BMTUB3DUw10Pid0+cIaGicbpyMPLy3qUzNjVBuvUDhjPzxmOCMvZDwX0lMnVBhvTBNmUBwfWkcHJB2X1Bw46ihn0CMLUzYWGAw5KzxG6ig51BwjLCIKGpt4Gw2nVBhvTBIWGCM93w2LUzgv4xv0PksWkicaPcIaGAwyGkg1LDgfKyxrHlMnOyxj0ksb7cIaGicbYzxr1CM4GEWOGicaGicbSywjLBhm6ihjLy29YzhmUBwfWkcHYB3C6ifjLy29YzdXZDhjPBMCSihvUA25VD24+ksa9pIbtDhjPBMCOCM93w21LDgfKyxrHlMnOyxj0is5SywjLBenVBhvTBL0GpZ8GjYCPksWkicaGicaGC2vYAwvZoIbTzxrHzgf0ys5JAgfYDc52ywX1zunVBhvTBNmUBwfWkcHJB2X1Bw4Pid0+icH7cIaGicaGicaGBMfTztOGy29SDw1UlaOGicaGicaGihzHBhvLCZOGCMvJB3jKCY5TyxaOkhjVDZOGuMvJB3jKphn0CMLUzYWGDw5RBM93BJ4Pid0+ie51BwjLCIHYB3DBy29SDw1Uxsa/pYaWksKScIaGicaGih0PksWkicaGih0kicb9cIaGCMv0DxjUihSkicaGignVBhvTBNm6ihjLC3vSDc5JB2X1Bw5ZlM1HCcGOy29SDw1UoIbZDhjPBMCPid0+icH7igTLEtOGy29SDw1UlcbSywjLBdOGy29SDw1Uih0PksWkicaGihjVD3m6ihjLy29YzhmScIaGFqP9Fq','5l6D6lwwig9UuMvHzezPBgxVVjRNU4tKU7BLV4xPOBVLHyJOR7VLJ5BLUBBMIzpLViaGtwfYA2rVD24G5PAh5lU26Ake6kEi77Ym5OMn6io95lUo5PAh5lU25BEL5l2C5y+W5y+r6lw3ierpq1GG6l2S5O2I5BM26yM05P2d5lIl6l2957Ut5P6C44cc','u1fmic8Gq2HHCNqG5P+L6k+I','B25eB3DUBg9HzezPBgu','r0vu','uhjVBwLZztX2B2LKpUoaGG','5A6/5lI76zYa6kAb5O+q5l6B5B2t5yMn5lYA6k+D5zkm6yM05P2d5lIk5lIl5PAh77YB5lIn6kAb55U05O6L5l+H5lU75RAi5OgV5lIT55Qe5Asw6yoO5PAh5lU25zYW5z2a44cc','5A6/5lI76yM05P2d6k+75y+w5B2t5yMn5lYA6k+D5PAh5lU2','57Ue5lU25OMt5BYa5PAh5lU25OIw5A2qiefNzw50iow8UEEQL+AxTUIWG+EuQcbNzxr0zxi','mtC4nhbLwwXrtq','Dw5RBM93BG','mJK3mJCWoeH0ALnRqW','6zYa6kAb5lIl6l2955Qe5lYA6k+D5PAh5lU244cc','55sO5OI35ywi5OMt5BYaie1HCMTKB3DUioAwH+s7TUMIHoINIo+8JowgJEEcUEwhU+I9Rcbet0ny','55sO5OI35OMt5BYaifnWyxDUiefNzw50iownOEEjHW','z2v0rgLHBg9Nq29UDgfPBMvY','6k+75y+w5B2t5yMn5lYA6k+D5lIT55Qe5y+x5l+D5OQK5PAh5lU244cc','mti3otq5ndbbAvbXteO','B25cB29RBwfYA0zPBgu'];dp16_0x29cf=function(){return _0x15f725;};return dp16_0x29cf();}var dp16_0x1d699e=dp16_0x46b9;function dp16_0x46b9(_0xad9b8,_0x2b0d43){_0xad9b8=_0xad9b8-0x6c;var _0x29cfa3=dp16_0x29cf();var _0x46b923=_0x29cfa3[_0xad9b8];if(dp16_0x46b9['cSnCLU']===undefined){var _0x8452b5=function(_0x3c63f9){var _0x13847c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x1a9aee='',_0x56f2b7='';for(var _0x18a84a=0x0,_0x42ef4d,_0x38fc6c,_0x5cbdc3=0x0;_0x38fc6c=_0x3c63f9['charAt'](_0x5cbdc3++);~_0x38fc6c&&(_0x42ef4d=_0x18a84a%0x4?_0x42ef4d*0x40+_0x38fc6c:_0x38fc6c,_0x18a84a++%0x4)?_0x1a9aee+=String['fromCharCode'](0xff&_0x42ef4d>>(-0x2*_0x18a84a&0x6)):0x0){_0x38fc6c=_0x13847c['indexOf'](_0x38fc6c);}for(var _0x30eff0=0x0,_0xadf0e4=_0x1a9aee['length'];_0x30eff0<_0xadf0e4;_0x30eff0++){_0x56f2b7+='%'+('00'+_0x1a9aee['charCodeAt'](_0x30eff0)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x56f2b7);};dp16_0x46b9['lqoOmo']=_0x8452b5,dp16_0x46b9['aAcufD']={},dp16_0x46b9['cSnCLU']=!![];}var _0x5ec224=_0x29cfa3[0x0];dp16_0x46b9['vmNckJ']!==_0x5ec224&&(dp16_0x46b9['aAcufD']={},dp16_0x46b9['vmNckJ']=_0x5ec224);var _0x73232b=dp16_0x46b9['aAcufD'][_0xad9b8];return _0x73232b===undefined?(_0x46b923=dp16_0x46b9['lqoOmo'](_0x46b923),dp16_0x46b9['aAcufD'][_0xad9b8]=_0x46b923):_0x46b923=_0x73232b,_0x46b923;}(function(_0x5221ae,_0x35d0d0){var _0x5db74b=dp16_0x46b9,_0x19a89b=_0x5221ae();while(!![]){try{var _0x48240f=-parseInt(_0x5db74b(0x7e))/0x1*(parseInt(_0x5db74b(0x8c))/0x2)+-parseInt(_0x5db74b(0x6d))/0x3*(-parseInt(_0x5db74b(0x8e))/0x4)+parseInt(_0x5db74b(0x9d))/0x5+parseInt(_0x5db74b(0x78))/0x6+-parseInt(_0x5db74b(0x73))/0x7*(-parseInt(_0x5db74b(0x9e))/0x8)+-parseInt(_0x5db74b(0x94))/0x9+parseInt(_0x5db74b(0x9b))/0xa;if(_0x48240f===_0x35d0d0)break;else _0x19a89b['push'](_0x19a89b['shift']());}catch(_0x210fd1){_0x19a89b['push'](_0x19a89b['shift']());}}}(dp16_0x29cf,0xe0bda),Object['defineProperty'](exports,Symbol['toStringTag'],{'value':dp16_0x1d699e(0x9c)}),(exports['chatCallbackReference']=[{'key':'onSubmitChoice','title':'Choice\x20提交','summary':'把用户选择作为新一轮输入交给宿主;SSE\x20消费完成后再确认锁定选择。','example':'//\x20OpenAPI:\x20POST\x20/api/namespaces/{namespaceId}/agents/{agentId}/chat(响应为\x20text/event-stream)\x0a//\x20其他要求:\x20apiBase、namespaceId、agentId、sessionId、accessToken;consumeChatStream\x20需把每个\x20SSE\x20事件合并为最新消息快照并写回宿主会话状态\x0a//\x20依赖回调:\x20无\x0aonSubmitChoice={async\x20(answer,\x20context)\x20=>\x20{\x0a\x20\x20const\x20response\x20=\x20await\x20fetch(\x0a\x20\x20\x20\x20`${apiBase}/api/namespaces/${namespaceId}/agents/${agentId}/chat`,\x0a\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20method:\x20\x27POST\x27,\x0a\x20\x20\x20\x20\x20\x20headers:\x20{\x20Authorization:\x20`Bearer\x20${accessToken}`,\x20\x27Content-Type\x27:\x20\x27application/json\x27\x20},\x0a\x20\x20\x20\x20\x20\x20body:\x20JSON.stringify({\x20input:\x20answer,\x20sessionId\x20}),\x0a\x20\x20\x20\x20},\x0a\x20\x20)\x0a\x20\x20if\x20(!response.ok\x20||\x20!response.body)\x20throw\x20new\x20Error(\x27Choice\x20提交失败\x27)\x0a\x20\x20await\x20consumeChatStream(response.body,\x20{\x20...context,\x20answer\x20})\x0a\x20\x20return\x20true\x0a}}','parameters':[{'name':dp16_0x1d699e(0x7b),'type':dp16_0x1d699e(0xa0),'required':!0x0,'description':'选项值或用户输入的自定义答案。'},{'name':dp16_0x1d699e(0x7c),'type':'string','required':!0x0,'description':dp16_0x1d699e(0x6f)},{'name':dp16_0x1d699e(0x97),'type':'string','required':!0x1,'description':'Choice\x20区块标识。'}],'returns':'Promise<boolean>;true\x20表示流式提交成功并锁定当前选择。','interaction':['选择一个选项或填写自定义答案',dp16_0x1d699e(0x9a),dp16_0x1d699e(0x70)],'openApi':[{'method':'POST','path':'/api/namespaces/{namespaceId}/agents/{agentId}/chat','description':'提交选择并返回新一轮\x20text/event-stream。'}],'requirements':['宿主需要持有命名空间、Agent、会话和鉴权上下文,并把\x20SSE\x20数据流中的事件转换成最新\x20Message\x20后写回自己的会话状态。'],'dependsOn':[]},{'key':dp16_0x1d699e(0xa2),'title':dp16_0x1d699e(0x85),'summary':dp16_0x1d699e(0x75),'example':dp16_0x1d699e(0x83),'parameters':[{'name':'query','type':dp16_0x1d699e(0xa0),'required':!0x0,'description':'消息区块携带的查询语句。'},{'name':dp16_0x1d699e(0x96),'type':dp16_0x1d699e(0x8d),'required':!0x1,'description':'数据库以及可选的图表字段映射信息。'},{'name':'signal','type':dp16_0x1d699e(0x72),'required':!0x0,'description':'区块卸载或请求被替代时中止任务。'}],'returns':dp16_0x1d699e(0x79),'interaction':['用户点击加载完整数据','宿主调用查询\x20OpenAPI\x20并响应取消信号','宿主将二维结果转换为表格或图表数据后交回组件'],'openApi':[{'method':dp16_0x1d699e(0x99),'path':'/api/namespaces/{namespaceId}/query','description':'执行\x20SQL\x20并返回\x20columns、rows\x20与\x20total_rows。'}],'requirements':['source\x20至少要提供\x20database;渲染查询驱动图表时还需提供标签列与数值列映射。'],'dependsOn':[]},{'key':'onLoadSubAgent','title':'子\x20Agent\x20会话','summary':'用户打开子\x20Agent\x20详情时,组件调用宿主一次;宿主自行轮询历史接口并返回当前原始历史,组件不创建定时器,只负责转换为\x20Message\x20并展示。','example':'//\x20OpenAPI:\x20GET\x20/api/namespaces/{namespaceId}/agents/{agentId}/chat/history?sessionId={subSessionId}\x0a//\x20其他要求:\x20namespaceId、agentId、accessToken;轮询周期、退避和终止条件均由宿主决定\x0a//\x20依赖回调:\x20无\x0aonLoadSubAgent={async\x20({\x20subSessionId,\x20signal\x20})\x20=>\x20{\x0a\x20\x20while\x20(!signal.aborted)\x20{\x0a\x20\x20\x20\x20const\x20url\x20=\x20new\x20URL(\x0a\x20\x20\x20\x20\x20\x20`${apiBase}/api/namespaces/${namespaceId}/agents/${agentId}/chat/history`,\x0a\x20\x20\x20\x20\x20\x20window.location.origin,\x0a\x20\x20\x20\x20)\x0a\x20\x20\x20\x20url.searchParams.set(\x27sessionId\x27,\x20subSessionId)\x0a\x20\x20\x20\x20const\x20response\x20=\x20await\x20fetch(url,\x20{\x0a\x20\x20\x20\x20\x20\x20signal,\x0a\x20\x20\x20\x20\x20\x20headers:\x20{\x20Authorization:\x20`Bearer\x20${accessToken}`\x20},\x0a\x20\x20\x20\x20})\x0a\x20\x20\x20\x20if\x20(!response.ok)\x20throw\x20new\x20Error(\x27子\x20Agent\x20历史加载失败\x27)\x0a\x20\x20\x20\x20const\x20payload\x20=\x20await\x20response.json()\x0a\x20\x20\x20\x20const\x20history\x20=\x20payload.data\x20??\x20payload\x0a\x20\x20\x20\x20const\x20messages\x20=\x20Array.isArray(history)\x20?\x20history\x20:\x20history.messages\x0a\x20\x20\x20\x20if\x20(Array.isArray(messages)\x20&&\x20messages.length\x20>\x200)\x20return\x20history\x0a\x20\x20\x20\x20await\x20new\x20Promise((resolve,\x20reject)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(signal.aborted)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20reject(signal.reason)\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20const\x20timer\x20=\x20window.setTimeout(()\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20signal.removeEventListener(\x27abort\x27,\x20abort)\x0a\x20\x20\x20\x20\x20\x20\x20\x20resolve()\x0a\x20\x20\x20\x20\x20\x20},\x202500)\x0a\x20\x20\x20\x20\x20\x20const\x20abort\x20=\x20()\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20window.clearTimeout(timer)\x0a\x20\x20\x20\x20\x20\x20\x20\x20reject(signal.reason)\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20signal.addEventListener(\x27abort\x27,\x20abort,\x20{\x20once:\x20true\x20})\x0a\x20\x20\x20\x20})\x0a\x20\x20}\x0a\x20\x20throw\x20signal.reason\x0a}}','parameters':[{'name':'subSessionId','type':'string','required':!0x0,'description':'子\x20Agent\x20会话标识。'},{'name':'taskName','type':'string','required':!0x1,'description':dp16_0x1d699e(0x7a)},{'name':dp16_0x1d699e(0x82),'type':'AbortSignal','required':!0x0,'description':'详情关闭或组件卸载时取消当前加载请求。'}],'returns':dp16_0x1d699e(0x98),'interaction':[dp16_0x1d699e(0x91),'组件调用宿主一次并传入子会话标识与\x20AbortSignal','宿主自行轮询历史接口并返回可用结果;弹窗关闭后\x20AbortSignal\x20终止轮询'],'openApi':[{'method':'GET','path':'/api/namespaces/{namespaceId}/agents/{agentId}/chat/history?sessionId={subSessionId}','description':'读取指定子会话的原始历史。'}],'requirements':['宿主需要提供命名空间、Agent\x20与鉴权上下文;轮询周期、缓存、退避、结果就绪条件和异常重试均由宿主决定,并必须响应\x20AbortSignal。'],'dependsOn':[]},{'key':'onReadFile','title':'文件预览','summary':'通过宿主鉴权读取会话文件,驱动文本、Markdown\x20或\x20HTML\x20预览。','example':'//\x20OpenAPI:\x20GET\x20/api/files/{sessionId}/{filename}\x0a//\x20其他要求:\x20sessionId、accessToken;只应读取当前会话返回的受保护文件,不接受外部\x20URL\x0a//\x20依赖回调:\x20无\x0aonReadFile={async\x20(file,\x20signal)\x20=>\x20{\x0a\x20\x20const\x20url\x20=\x20`${apiBase}/api/files/${encodeURIComponent(sessionId)}/${encodeURIComponent(file.filename)}`\x0a\x20\x20const\x20response\x20=\x20await\x20fetch(url,\x20{\x0a\x20\x20\x20\x20signal,\x0a\x20\x20\x20\x20headers:\x20{\x20Authorization:\x20`Bearer\x20${accessToken}`\x20},\x0a\x20\x20})\x0a\x20\x20if\x20(!response.ok)\x20throw\x20new\x20Error(\x27文件读取失败\x27)\x0a\x20\x20return\x20{\x0a\x20\x20\x20\x20content:\x20await\x20response.text(),\x0a\x20\x20\x20\x20mimeType:\x20response.headers.get(\x27content-type\x27)\x20??\x20file.mimeType,\x0a\x20\x20}\x0a}}','parameters':[{'name':'file','type':'SessionFileArtifact','required':!0x0,'description':'文件名、类型、大小和可选地址。'},{'name':'signal','type':'AbortSignal','required':!0x0,'description':'预览关闭时取消读取。'}],'returns':'Promise<{\x20content:\x20string;\x20mimeType?:\x20string\x20}>。','interaction':['用户点击预览',dp16_0x1d699e(0x8a),dp16_0x1d699e(0x9f)],'openApi':[{'method':'GET','path':'/api/files/{sessionId}/{filename}','description':dp16_0x1d699e(0x93)}],'requirements':[dp16_0x1d699e(0x89)],'dependsOn':[]},{'key':dp16_0x1d699e(0x80),'title':'Markdown\x20保存','summary':'依赖\x20onReadFile:组件必须先读取并打开\x20Markdown\x20文件预览,进入编辑态后才能把修改后的内容写回当前会话文件。','example':'//\x20OpenAPI:\x20PUT\x20/api/files/{sessionId}/{filename}\x0a//\x20其他要求:\x20sessionId、accessToken;只适用于已通过预览工作台打开的可编辑\x20Markdown\x20文件\x0a//\x20依赖回调:\x20onReadFile\x0aonSaveFile={async\x20(file,\x20content,\x20signal)\x20=>\x20{\x0a\x20\x20const\x20url\x20=\x20`${apiBase}/api/files/${encodeURIComponent(sessionId)}/${encodeURIComponent(file.filename)}`\x0a\x20\x20const\x20response\x20=\x20await\x20fetch(url,\x20{\x0a\x20\x20\x20\x20method:\x20\x27PUT\x27,\x0a\x20\x20\x20\x20signal,\x0a\x20\x20\x20\x20headers:\x20{\x20Authorization:\x20`Bearer\x20${accessToken}`,\x20\x27Content-Type\x27:\x20\x27application/json\x27\x20},\x0a\x20\x20\x20\x20body:\x20JSON.stringify({\x20content\x20}),\x0a\x20\x20})\x0a\x20\x20if\x20(!response.ok)\x20throw\x20new\x20Error(\x27文件保存失败\x27)\x0a\x20\x20return\x20true\x0a}}','parameters':[{'name':'file','type':dp16_0x1d699e(0xa3),'required':!0x0,'description':'正在编辑的会话文件。'},{'name':'content','type':dp16_0x1d699e(0xa0),'required':!0x0,'description':'用户编辑后的完整内容。'},{'name':'signal','type':'AbortSignal','required':!0x0,'description':'关闭或再次保存时取消旧请求。'}],'returns':'Promise<boolean\x20|\x20void>;false\x20表示保存未被接受。','interaction':[dp16_0x1d699e(0x74),'修改内容并点击保存','宿主写回文件;成功后组件退出编辑态并保留新内容'],'openApi':[{'method':'PUT','path':'/api/files/{sessionId}/{filename}','description':'写回当前会话文件的完整文本内容。'}],'requirements':['目标文件必须是可编辑文本;宿主需要提供当前会话和鉴权上下文。'],'dependsOn':[dp16_0x1d699e(0x81)]},{'key':dp16_0x1d699e(0x86),'title':'文件下载','summary':'由宿主鉴权下载会话文件,不回退到不安全的原生链接。','example':'//\x20OpenAPI:\x20GET\x20/api/files/{sessionId}/{filename}\x0a//\x20其他要求:\x20sessionId、accessToken;使用响应\x20Blob\x20下载并在完成后释放对象\x20URL\x0a//\x20依赖回调:\x20无\x0aonDownloadFile={async\x20(file,\x20signal)\x20=>\x20{\x0a\x20\x20const\x20url\x20=\x20`${apiBase}/api/files/${encodeURIComponent(sessionId)}/${encodeURIComponent(file.filename)}`\x0a\x20\x20const\x20response\x20=\x20await\x20fetch(url,\x20{\x0a\x20\x20\x20\x20signal,\x0a\x20\x20\x20\x20headers:\x20{\x20Authorization:\x20`Bearer\x20${accessToken}`\x20},\x0a\x20\x20})\x0a\x20\x20if\x20(!response.ok)\x20throw\x20new\x20Error(\x27文件下载失败\x27)\x0a\x20\x20const\x20objectUrl\x20=\x20URL.createObjectURL(await\x20response.blob())\x0a\x20\x20const\x20anchor\x20=\x20Object.assign(document.createElement(\x27a\x27),\x20{\x20href:\x20objectUrl,\x20download:\x20file.filename\x20})\x0a\x20\x20anchor.click()\x0a\x20\x20URL.revokeObjectURL(objectUrl)\x0a}}','parameters':[{'name':'file','type':'SessionFileArtifact','required':!0x0,'description':dp16_0x1d699e(0x8f)},{'name':'signal','type':dp16_0x1d699e(0x72),'required':!0x0,'description':'取消不再需要的下载。'}],'returns':'Promise<void>。未提供时隐藏受保护文件的下载动作。','interaction':['用户点击下载','宿主鉴权请求当前会话文件','浏览器保存返回\x20Blob\x20并释放临时地址'],'openApi':[{'method':'GET','path':'/api/files/{sessionId}/{filename}','description':'下载当前会话中的受保护文件。'}],'requirements':['宿主需要提供当前会话和鉴权上下文,并在下载后释放对象\x20URL。'],'dependsOn':[]},{'key':dp16_0x1d699e(0x95),'title':dp16_0x1d699e(0x71),'summary':'调用\x20DataPilot\x20OpenAPI,把受保护会话文件持久化到当前用户的“我的文件”。','example':'//\x20OpenAPI:\x20POST\x20/api/user-files\x0a//\x20其他要求:\x20file.url\x20必须是当前\x20DataPilot\x20实例中的受保护文件地址;需要\x20accessToken\x0a//\x20依赖回调:\x20无\x0aonBookmarkFile={async\x20(file,\x20signal)\x20=>\x20{\x0a\x20\x20if\x20(!file.url?.startsWith(\x27/api/files/\x27))\x20throw\x20new\x20Error(\x27只能收藏当前实例的会话文件\x27)\x0a\x20\x20const\x20response\x20=\x20await\x20fetch(`${apiBase}/api/user-files`,\x20{\x0a\x20\x20\x20\x20method:\x20\x27POST\x27,\x0a\x20\x20\x20\x20signal,\x0a\x20\x20\x20\x20headers:\x20{\x20Authorization:\x20`Bearer\x20${accessToken}`,\x20\x27Content-Type\x27:\x20\x27application/json\x27\x20},\x0a\x20\x20\x20\x20body:\x20JSON.stringify({\x20displayName:\x20file.displayName\x20||\x20file.filename,\x20downloadUrl:\x20file.url\x20}),\x0a\x20\x20})\x0a\x20\x20if\x20(!response.ok)\x20throw\x20new\x20Error(\x27文件收藏失败\x27)\x0a}}','parameters':[{'name':'file','type':'SessionFileArtifact','required':!0x0,'description':'需要收藏的会话文件。'},{'name':'signal','type':'AbortSignal','required':!0x0,'description':'取消失效的收藏请求。'}],'returns':dp16_0x1d699e(0x88),'interaction':['用户点击收藏','宿主校验文件地址并调用\x20DataPilot\x20OpenAPI','DataPilot\x20持久化文件,宿主使用自己的通知体系反馈结果'],'openApi':[{'method':'POST','path':'/api/user-files','description':dp16_0x1d699e(0x7f)}],'requirements':['宿主需要提供鉴权上下文;downloadUrl\x20只接受当前\x20DataPilot\x20实例中的受保护会话文件地址。'],'dependsOn':[]},{'key':'onConvertFile','title':'Markdown\x20转\x20DOCX','summary':dp16_0x1d699e(0x84),'example':dp16_0x1d699e(0x7d),'parameters':[{'name':'file','type':dp16_0x1d699e(0xa3),'required':!0x0,'description':'待转换的\x20Markdown\x20会话文件。'},{'name':'signal','type':dp16_0x1d699e(0x72),'required':!0x0,'description':'取消失效的转换任务。'}],'returns':'Promise<void>。','interaction':[dp16_0x1d699e(0x90),'宿主请求转换并取得新文件名','宿主鉴权下载\x20DOCX\x20并释放临时地址'],'openApi':[{'method':'POST','path':'/api/files/{sessionId}/convert-to-docx','description':dp16_0x1d699e(0x76)},{'method':dp16_0x1d699e(0x87),'path':'/api/files/{sessionId}/{docxFilename}','description':dp16_0x1d699e(0x6c)}],'requirements':['输入必须是当前会话中的\x20Markdown\x20文件;宿主需要提供会话与鉴权上下文,并在下载后释放对象\x20URL。'],'dependsOn':['onReadFile']}],exports['chatPropReference']=[{'key':dp16_0x1d699e(0x92),'title':'弹窗挂载容器','summary':'让文件预览和子\x20Agent\x20弹窗挂载到宿主提供的\x20DOM\x20容器。','type':dp16_0x1d699e(0x6e),'defaultBehavior':'未提供或返回\x20null\x20时,使用\x20document.body。','example':'const\x20dialogRootRef\x20=\x20useRef<HTMLDivElement>(null)\x0a\x0a<div\x20ref={dialogRootRef}\x20/>\x0a<ChatMessage\x0a\x20\x20message={message}\x0a\x20\x20getDialogContainer={()\x20=>\x20dialogRootRef.current}\x0a/>','interaction':['宿主先挂载目标\x20DOM\x20容器',dp16_0x1d699e(0x8b),'返回有效容器时挂载到该容器;未提供或返回\x20null\x20时挂载到\x20document.body']},{'key':dp16_0x1d699e(0x77),'title':'根节点样式类','summary':'在消息根节点追加宿主样式类,用于布局和外层主题衔接。','type':dp16_0x1d699e(0xa0),'defaultBehavior':'未提供时只使用组件内置根节点样式;传入值不会替换内置类名。','example':'<ChatMessage\x20message={message}\x20className=\x22agent-message\x22\x20/>','interaction':['宿主传入一个或多个类名','组件追加到消息根节点',dp16_0x1d699e(0xa1)]}]));
@@ -0,0 +1,4 @@
1
+ export { chatCallbackReference } from './callbackReference';
2
+ export type { ChatCallbackKey, ChatCallbackOpenApiReference, ChatCallbackParameterReference, ChatCallbackReference, } from './callbackReference';
3
+ export { chatPropReference } from './propReference';
4
+ export type { ChatPropKey, ChatPropReference } from './propReference';
@@ -0,0 +1 @@
1
+ var dp17_0x26e7b8=dp17_0x2323;(function(_0x5111b1,_0x590305){var _0x19bcba=dp17_0x2323,_0x4dcaa9=_0x5111b1();while(!![]){try{var _0x1665eb=parseInt(_0x19bcba(0x1cb))/0x1*(-parseInt(_0x19bcba(0x1da))/0x2)+parseInt(_0x19bcba(0x1d9))/0x3+parseInt(_0x19bcba(0x1db))/0x4*(parseInt(_0x19bcba(0x1c0))/0x5)+-parseInt(_0x19bcba(0x1cd))/0x6*(-parseInt(_0x19bcba(0x1be))/0x7)+parseInt(_0x19bcba(0x1b1))/0x8*(parseInt(_0x19bcba(0x1bf))/0x9)+parseInt(_0x19bcba(0x1ae))/0xa+-parseInt(_0x19bcba(0x1c8))/0xb*(parseInt(_0x19bcba(0x1d6))/0xc);if(_0x1665eb===_0x590305)break;else _0x4dcaa9['push'](_0x4dcaa9['shift']());}catch(_0x2750ed){_0x4dcaa9['push'](_0x4dcaa9['shift']());}}}(dp17_0x2075,0xe4045));function dp17_0x2075(){var _0x239ab9=['B25szwfKrMLSzq','qwjVCNrtAwDUywW','5Rwp6kEi5zMO5l+D5A2y6l+u5zUEiejSB2iG5BM26yEk5Ps+5lI05PE25zYW5z2a','C291CMnL','5O+q5lQK6ycj5OUP5BM26l+u5zUE5PAW5lIa6l2UihrLEhqVzxzLBNqTC3rYzwfT44cc','l2fWAs9MAwXLCY97C2vZC2LVBKLKFs97zMLSzw5HBwv9','mJrstg1suKq','6k+75y+w5OYh5A6A5A2q5lYA6k+D55Qe5y6F5AEl5y6g5y+Y44cc','6k6P5PAh5lU26Ake6kEi5zkm5A2qiefNzw50iow8UEEQL+AmGUI9VEwiSowUV+s4U+ApKos+M+EAHcbet00G5A655zMO44cc','mJK4mtC2AuDvAvbn','otCWofDxC1jxAa','nta0otzcu05itva','y29UDgvUDa','rgf0yvbPBg90ioAmGEs5HEwmLUAwH+s7TU+8JowUV+s4U+s9V+EuQoIhQUw3SEEAHoMaMUEFPEs9K+EZU+wpJEMMIoE7K+AENa','5y+w5RAi5AsX5Pwi55Qe5Ps26jEp6k+35Rgc44cc','mti4nZG5mhv1zfvYsW','5PAh5lU25Ps26jEp','l2fWAs9Uyw1LC3bHy2vZl3TUyw1LC3bHy2vjzh0VCxvLCNK','ofrQBND4DW','55sO5OI354k55yE76Ake6kEi','penOyxrnzxnZywDLig1LC3nHz2u9E21LC3nHz2v9ignSyxnZtMfTzt0IywDLBNqTBwvZC2fNzsiGlZ4','5PAh5lU25zcn44cb57g75z6l44cb5AsN5Bcp5zkm5y+V6ycj5zYW5z2a44cc','lY8Gt3bLBKfqstOGr0vuic9HCgKVzMLSzxmVE3nLC3nPB25jzh0VE2zPBgvUyw1LFqOVlYdLHBBKU5BOPOhMSyi6ihnLC3nPB25jzooaGwfJy2vZC1rVA2vU77YB5l2/55sO5zon5BQuiejSB2iG5lIl6l295BM25zYO5A6m5OIq5zco6yEk5Ps+5A+56lgHifvstaOVlYdKVP3OTzBLM57OSim6ioAxOaPVBKrVD25SB2fKrMLSzt17yxn5BMmGkgzPBguSihnPz25HBcKGpt4GEWOGignVBNn0ihvYBca9igaKE2fWAujHC2v9l2fWAs9MAwXLCY8KE2vUy29KzvvssunVBxbVBMvUDcHZzxnZAw9UswqPFs8KE2vUy29KzvvssunVBxbVBMvUDcHMAwXLlMzPBgvUyw1Lkx1GcIaGy29UC3qGCMvZCg9UC2uGpsbHD2fPDcbMzxrJAcH1CMWSihSkicaGihnPz25HBcWkicaGigHLywrLCNm6ihSGqxv0Ag9YAxPHDgLVBJOGyejLyxjLCIaKE2fJy2vZC1rVA2vUFwaGFsWkicb9kqOGigLMicGHCMvZCg9UC2uUB2SPihrOCM93ig5LDYbfCNjVCIGN5PAh5lU25lIl6l295AsX6lsLjYKkicbJB25ZDcbVyMPLy3rvCMWGpsbvuKWUy3jLyxrLt2jQzwn0vvjmkgf3ywL0ihjLC3bVBNnLlMjSB2iOksKkicbJB25ZDcbHBMnOB3iGpsbpyMPLy3qUyxnZAwDUkgrVy3vTzw50lMnYzwf0zuvSzw1LBNqOj2eNksWGEYbOCMvMoIbVyMPLy3rvCMWSigrVD25SB2fKoIbMAwXLlMzPBgvUyw1Lih0PcIaGyw5JAg9YlMnSAwnRkcKkicbvuKWUCMv2B2TLt2jQzwn0vvjmkg9IAMvJDfvYBcKkFx0','C2LNBMfS','5A6/5lI76yM05P2d6k+35Rgc5B2t5yMn5lYA6k+D5PAh5lU2','5Q2J5zYO57Yw6l6r55Qe5lYA6k+D5PAh5lU244cc','uhjVBwLZztXuywjSzurHDgeGFcbdAgfYDerHDge+44cc','6ycj5OUP5lIa5lIQ6ycj6Ag55OIw5AgR5yAz6iEQ5A6A5lMj562u5Qgi','5A6/5lI76zYa6kAb5OYb5PYj5zg95zcn56M66zE044cbqwDLBNtJGihKVjROR53LKOZPIBtMNypKUiRKUiVMLOFVViZLUBBMIOOGu1nfioAvSoAnRUA1GEs4REEAHos6I+s7TUI9RoAnOUAiKoACGoAwScbnzxnZywDLiowqJUwgMEwBNUIhQUw3SEEAHos8MUIVNEEkTUAaGEoaGG','C3rYAw5N','6l6t5ywL5B+f6Ag75PIV5B2t5yMn5lYA6k+D5lIT55Qeie1HCMTKB3DUioAwH+s7TU+8M+wUV+s4U+MCGoIMGEApKos+M+s8MUIVNEs4JUMjToADG+s4IUs4I+AwH++8Jow5TUwCQos4I+I9VEwqJUMhIUAuVUwVUEIXOsbvuKZJGii','ndi5mJyXqKnNEKH2','oty4mJeZn3rUrejmsW','mJq1zNf2EuT2','u1fmic8Gq2HHCNqG5P+L6k+I','55sO5OI35OMt5BYa5A2qiefNzw50ioIVPUAdHEAxTU+8JoE7Hos7TUIWG+EuQowUV+s4U+s4GoASOE+8M+wUV+s4U+IhQUIHJoI9RUIVOUwoHUwpSUAoPEwpO+w5TUI/LowBNUw9K+wjJEwoN+wNI+woHUwpSU+8JoE7Hos7TUs4JEwiM+w7UUwUMUAxTUwzQo+8JowpQUI0N+I0O+I9RoAnOUs4UIbnzxnZywDLiow5TUwXLEEKUUoaGG','5yAz5zUE5B2t5yMn5lYA6k+D5PAh5lU255Qe5A6m5Pw05PAh5PYS5yAf5A6544cc','r0vu','5A6/5lI75zcr6igk5AsPie9Wzw5bueKG5y+r6lw35PAW5lIa6l2UifntrsdOR7FMSyi','lY8Gt3bLBKfqstOGr0vuic9HCgKVzMLSzxmVE3nLC3nPB25jzh0VE2zPBgvUyw1LFqOVlYdLHBBKU5BOPOhMSyi6ihnLC3nPB25jzooaGwfJy2vZC1rVA2vU77YB5y+Q5BQu6k+75y+w5B2t5yMn5lYA6k+D6l+u5zUE55Qe5y+x5l+D5OQK5PAh5lU277Ym5lIn5O6L5y+x5Asw6yoOifvstaOVlYdKVP3OTzBLM57OSim6ioAxOaPVBLjLywrgAwXLpxTHC3LUyYaOzMLSzsWGC2LNBMfSksa9pIb7cIaGy29UC3qGDxjSid0Gycr7yxbPqMfZzx0VyxbPl2zPBgvZlYr7zw5JB2rLvvjjq29TCg9Uzw50khnLC3nPB25jzcL9lYr7zw5JB2rLvvjjq29TCg9Uzw50kgzPBguUzMLSzw5HBwuPFwakicbJB25ZDcbYzxnWB25Zzsa9igf3ywL0igzLDgnOkhvYBcWGEWOGicaGC2LNBMfSlaOGicaGAgvHzgvYCZOGEYbbDxrOB3jPEMf0Aw9UoIbGqMvHCMvYicr7ywnJzxnZvg9Rzw59ycb9laOGih0PcIaGAwyGkcfYzxnWB25Zzs5VAYKGDgHYB3CGBMv3ievYCM9YkcFMLOFKU7BOR7VLJ5BLPlhOTkuNkqOGihjLDhvYBIb7cIaGicbJB250zw50oIbHD2fPDcbYzxnWB25Zzs50zxH0kcKScIaGicbTAw1LvhLWztOGCMvZCg9UC2uUAgvHzgvYCY5NzxqOj2nVBNrLBNqTDhLWzsCPid8/igzPBguUBwLTzvr5CguScIaGFqP9Fq','5OQk5B2t5yMn5lYA6k+D5lIT55Qeie1HCMTKB3DUioAwH+s7TUI9RoAnOUs4UIbet0ny44cc','odiZotyWnuzztfjWvW','5B2t5yMn5RAi5OgV5Qch6k+g44cc','y29UDgv4Dc5JAg9Py2vjza','mZrjreDRt0y','C291CMnLioIhS+wWKEIMGEApKos+MYbKyxrHyMfZzE+8M+A4SUAFK+AFPEIVOUMPSEwkQowBVUIHQoAxTUI/MoMCGoApKos+M+AGH+ETVUwiL+s4JUAvSowaVowiL+AyOowWHooaGG','nJz5qMHYyLO','lY8Gt3bLBKfqstOGr0vuic9HCgKVBMfTzxnWywnLCY97BMfTzxnWywnLswr9l2fNzw50CY97ywDLBNrjzh0Vy2HHDc9OAxn0B3j5p3nLC3nPB25jzd17C3vIu2vZC2LVBKLKFqOVlYdLHBBKU5BOPOhMSyi6ig5HBwvZCgfJzuLK44cbywDLBNrjzooaGwfJy2vZC1rVA2vU77YB6l2U6k+I5zgO5PYF44cb6yca6yg/5zkm57Ui5Q2I5P2H5lU25z2h55sX5A6/5lI75yAZ5A6AcI8Vios+NEI1LUwBNUIWGZOG5PEGcM9Utg9Hzfn1yKfNzw50pxTHC3LUyYaOEYbZDwjtzxnZAw9UswqSihnPz25HBcb9ksa9pIb7cIaGD2HPBguGkcfZAwDUywWUywjVCNrLzcKGEWOGicaGy29UC3qGDxjSid0GBMv3ifvstcGkicaGicaGycr7yxbPqMfZzx0VyxbPl25HBwvZCgfJzxmVjhTUyw1LC3bHy2vjzh0VywDLBNrZlYr7ywDLBNrjzh0Vy2HHDc9OAxn0B3j5ycWkicaGicaGD2LUzg93lMXVy2f0Aw9UlM9YAwDPBIWkicaGicKkicaGihvYBc5ZzwfYy2HqyxjHBxmUC2v0kcDZzxnZAw9UswqNlcbZDwjtzxnZAw9UswqPcIaGicbJB25ZDcbYzxnWB25Zzsa9igf3ywL0igzLDgnOkhvYBcWGEWOGicaGicbZAwDUywWScIaGicaGigHLywrLCNm6ihSGqxv0Ag9YAxPHDgLVBJOGyejLyxjLCIaKE2fJy2vZC1rVA2vUFwaGFsWkicaGih0PcIaGicbPzIaOixjLC3bVBNnLlM9Rksb0AhjVDYbUzxCGrxjYB3iOj+wTKcbbz2vUDcdLJOBLJ7lLIQdOVB3LPlhOTkuNkqOGicaGy29UC3qGCgf5Bg9Hzca9igf3ywL0ihjLC3bVBNnLlMPZB24OkqOGicaGy29UC3qGAgLZDg9YEsa9ihbHEwXVywqUzgf0ysa/pYbWyxLSB2fKcIaGicbJB25ZDcbTzxnZywDLCYa9iefYCMf5lMLZqxjYyxKOAgLZDg9YEsKGpYbOAxn0B3j5idOGAgLZDg9YEs5TzxnZywDLCWOGicaGAwyGkefYCMf5lMLZqxjYyxKOBwvZC2fNzxmPicyMig1LC3nHz2vZlMXLBMD0Aca+idaPihjLDhvYBIbOAxn0B3j5cIaGicbHD2fPDcbUzxCGuhjVBwLZzsGOCMvZB2X2zsWGCMvQzwn0ksa9pIb7cIaGicaGigLMicHZAwDUywWUywjVCNrLzcKGEWOGicaGicaGihjLAMvJDcHZAwDUywWUCMvHC29UkqOGicaGicaGihjLDhvYBGOGicaGicb9cIaGicaGignVBNn0ihrPBwvYid0GD2LUzg93lNnLDfrPBwvVDxqOkcKGpt4GEWOGicaGicaGihnPz25HBc5Yzw1VDMvfDMvUDeXPC3rLBMvYkcDHyM9YDcCSigfIB3j0kqOGicaGicaGihjLC29SDMuOkqOGicaGicb9lcaYntaWkqOGicaGicbJB25ZDcbHyM9YDca9icGPid0+ihSkicaGicaGicb3Aw5KB3CUy2XLyxjuAw1LB3v0khrPBwvYkqOGicaGicaGihjLAMvJDcHZAwDUywWUCMvHC29UkqOGicaGicb9cIaGicaGihnPz25HBc5HzgrfDMvUDeXPC3rLBMvYkcDHyM9YDcCSigfIB3j0lcb7ig9Uy2u6ihrYDwuGFsKkicaGih0PcIaGFqOGihrOCM93ihnPz25HBc5YzwfZB24kFx0','5OQk5B2t5yMn5lYA6k+D5PAh5lU25l+D5A2y5yIW5BEY55M75B2v55sO5OI355Qe4OcC5OIr55Qe5PAh5lU24OcD44cc'];dp17_0x2075=function(){return _0x239ab9;};return dp17_0x2075();}function dp17_0x2323(_0x534c0e,_0xa93a0e){_0x534c0e=_0x534c0e-0x1ad;var _0x207502=dp17_0x2075();var _0x2323e8=_0x207502[_0x534c0e];if(dp17_0x2323['OBGdfe']===undefined){var _0x1298d1=function(_0x53aac4){var _0x3fc0be='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x4a9d6a='',_0x585eb3='';for(var _0x2b79d4=0x0,_0x3239b9,_0x3f7a4e,_0x40e817=0x0;_0x3f7a4e=_0x53aac4['charAt'](_0x40e817++);~_0x3f7a4e&&(_0x3239b9=_0x2b79d4%0x4?_0x3239b9*0x40+_0x3f7a4e:_0x3f7a4e,_0x2b79d4++%0x4)?_0x4a9d6a+=String['fromCharCode'](0xff&_0x3239b9>>(-0x2*_0x2b79d4&0x6)):0x0){_0x3f7a4e=_0x3fc0be['indexOf'](_0x3f7a4e);}for(var _0x4b25fa=0x0,_0x32f9d1=_0x4a9d6a['length'];_0x4b25fa<_0x32f9d1;_0x4b25fa++){_0x585eb3+='%'+('00'+_0x4a9d6a['charCodeAt'](_0x4b25fa)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x585eb3);};dp17_0x2323['fSInXk']=_0x1298d1,dp17_0x2323['XErtDD']={},dp17_0x2323['OBGdfe']=!![];}var _0x1577fe=_0x207502[0x0];dp17_0x2323['yqLHeT']!==_0x1577fe&&(dp17_0x2323['XErtDD']={},dp17_0x2323['yqLHeT']=_0x1577fe);var _0x5bc26f=dp17_0x2323['XErtDD'][_0x534c0e];return _0x5bc26f===undefined?(_0x2323e8=dp17_0x2323['fSInXk'](_0x2323e8),dp17_0x2323['XErtDD'][_0x534c0e]=_0x2323e8):_0x2323e8=_0x5bc26f,_0x2323e8;}var e=[{'key':'onSubmitChoice','title':'Choice\x20提交','summary':'把用户选择作为新一轮输入交给宿主;SSE\x20消费完成后再确认锁定选择。','example':'//\x20OpenAPI:\x20POST\x20/api/namespaces/{namespaceId}/agents/{agentId}/chat(响应为\x20text/event-stream)\x0a//\x20其他要求:\x20apiBase、namespaceId、agentId、sessionId、accessToken;consumeChatStream\x20需把每个\x20SSE\x20事件合并为最新消息快照并写回宿主会话状态\x0a//\x20依赖回调:\x20无\x0aonSubmitChoice={async\x20(answer,\x20context)\x20=>\x20{\x0a\x20\x20const\x20response\x20=\x20await\x20fetch(\x0a\x20\x20\x20\x20`${apiBase}/api/namespaces/${namespaceId}/agents/${agentId}/chat`,\x0a\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20method:\x20\x27POST\x27,\x0a\x20\x20\x20\x20\x20\x20headers:\x20{\x20Authorization:\x20`Bearer\x20${accessToken}`,\x20\x27Content-Type\x27:\x20\x27application/json\x27\x20},\x0a\x20\x20\x20\x20\x20\x20body:\x20JSON.stringify({\x20input:\x20answer,\x20sessionId\x20}),\x0a\x20\x20\x20\x20},\x0a\x20\x20)\x0a\x20\x20if\x20(!response.ok\x20||\x20!response.body)\x20throw\x20new\x20Error(\x27Choice\x20提交失败\x27)\x0a\x20\x20await\x20consumeChatStream(response.body,\x20{\x20...context,\x20answer\x20})\x0a\x20\x20return\x20true\x0a}}','parameters':[{'name':'answer','type':'string','required':!0x0,'description':'选项值或用户输入的自定义答案。'},{'name':'context.messageId','type':'string','required':!0x0,'description':dp17_0x26e7b8(0x1c9)},{'name':dp17_0x26e7b8(0x1ca),'type':'string','required':!0x1,'description':'Choice\x20区块标识。'}],'returns':'Promise<boolean>;true\x20表示流式提交成功并锁定当前选择。','interaction':[dp17_0x26e7b8(0x1ba),dp17_0x26e7b8(0x1c5),'宿主消费完整响应流后返回\x20true,组件锁定选择'],'openApi':[{'method':'POST','path':'/api/namespaces/{namespaceId}/agents/{agentId}/chat','description':dp17_0x26e7b8(0x1d4)}],'requirements':[dp17_0x26e7b8(0x1bb)],'dependsOn':[]},{'key':'onQuery','title':dp17_0x26e7b8(0x1c1),'summary':'执行消息区块携带的\x20SQL,并把服务端二维结果转换为表格或图表数据。','example':'//\x20OpenAPI:\x20POST\x20/api/namespaces/{namespaceId}/query\x0a//\x20其他要求:\x20source.database\x20指定数据源;图表\x20source.chart\x20需提供\x20labelColumn\x20和\x20valueColumns\x0a//\x20依赖回调:\x20无\x0aonQuery={async\x20({\x20query,\x20source,\x20signal\x20})\x20=>\x20{\x0a\x20\x20const\x20metadata\x20=\x20source\x20as\x20{\x0a\x20\x20\x20\x20database?:\x20string\x0a\x20\x20\x20\x20chart?:\x20{\x20labelColumn:\x20string;\x20valueColumns:\x20string[]\x20}\x0a\x20\x20}\x20|\x20undefined\x0a\x20\x20if\x20(!metadata?.database)\x20throw\x20new\x20Error(\x27查询区块缺少\x20source.database\x27)\x0a\x20\x20const\x20response\x20=\x20await\x20fetch(`${apiBase}/api/namespaces/${namespaceId}/query`,\x20{\x0a\x20\x20\x20\x20method:\x20\x27POST\x27,\x0a\x20\x20\x20\x20signal,\x0a\x20\x20\x20\x20headers:\x20{\x20Authorization:\x20`Bearer\x20${accessToken}`,\x20\x27Content-Type\x27:\x20\x27application/json\x27\x20},\x0a\x20\x20\x20\x20body:\x20JSON.stringify({\x20sql:\x20query,\x20database:\x20metadata.database,\x20agentId\x20}),\x0a\x20\x20})\x0a\x20\x20if\x20(!response.ok)\x20throw\x20new\x20Error(\x27查询执行失败\x27)\x0a\x20\x20const\x20payload\x20=\x20await\x20response.json()\x0a\x20\x20const\x20result\x20=\x20payload.data\x20??\x20payload\x0a\x20\x20const\x20records\x20=\x20result.rows.map((row:\x20unknown[])\x20=>\x0a\x20\x20\x20\x20Object.fromEntries(result.columns.map((column:\x20string,\x20index:\x20number)\x20=>\x20[column,\x20row[index]])),\x0a\x20\x20)\x0a\x20\x20if\x20(metadata.chart)\x20{\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20labels:\x20records.map((row:\x20Record<string,\x20unknown>)\x20=>\x20String(row[metadata.chart!.labelColumn]\x20??\x20\x27\x27)),\x0a\x20\x20\x20\x20\x20\x20series:\x20metadata.chart.valueColumns.map((column)\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20\x20\x20name:\x20column,\x0a\x20\x20\x20\x20\x20\x20\x20\x20values:\x20records.map((row:\x20Record<string,\x20unknown>)\x20=>\x20Number(row[column]\x20??\x200)),\x0a\x20\x20\x20\x20\x20\x20})),\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x20\x20return\x20{\x0a\x20\x20\x20\x20columns:\x20result.columns.map((column:\x20string)\x20=>\x20({\x20key:\x20column,\x20label:\x20column\x20})),\x0a\x20\x20\x20\x20rows:\x20records,\x0a\x20\x20}\x0a}}','parameters':[{'name':'query','type':'string','required':!0x0,'description':'消息区块携带的查询语句。'},{'name':dp17_0x26e7b8(0x1d3),'type':'unknown','required':!0x1,'description':'数据库以及可选的图表字段映射信息。'},{'name':'signal','type':dp17_0x26e7b8(0x1d1),'required':!0x0,'description':'区块卸载或请求被替代时中止任务。'}],'returns':dp17_0x26e7b8(0x1b9),'interaction':['用户点击加载完整数据','宿主调用查询\x20OpenAPI\x20并响应取消信号','宿主将二维结果转换为表格或图表数据后交回组件'],'openApi':[{'method':'POST','path':dp17_0x26e7b8(0x1b0),'description':'执行\x20SQL\x20并返回\x20columns、rows\x20与\x20total_rows。'}],'requirements':[dp17_0x26e7b8(0x1cc)],'dependsOn':[]},{'key':'onLoadSubAgent','title':'子\x20Agent\x20会话','summary':dp17_0x26e7b8(0x1c2),'example':dp17_0x26e7b8(0x1ce),'parameters':[{'name':'subSessionId','type':'string','required':!0x0,'description':'子\x20Agent\x20会话标识。'},{'name':'taskName','type':'string','required':!0x1,'description':'父消息携带的任务标题。'},{'name':'signal','type':'AbortSignal','required':!0x0,'description':'详情关闭或组件卸载时取消当前加载请求。'}],'returns':'Promise<RawChatHistoryPayload>。','interaction':['用户打开\x20Spawn\x20Agent\x20卡片','组件调用宿主一次并传入子会话标识与\x20AbortSignal','宿主自行轮询历史接口并返回可用结果;弹窗关闭后\x20AbortSignal\x20终止轮询'],'openApi':[{'method':dp17_0x26e7b8(0x1c4),'path':'/api/namespaces/{namespaceId}/agents/{agentId}/chat/history?sessionId={subSessionId}','description':dp17_0x26e7b8(0x1d7)}],'requirements':['宿主需要提供命名空间、Agent\x20与鉴权上下文;轮询周期、缓存、退避、结果就绪条件和异常重试均由宿主决定,并必须响应\x20AbortSignal。'],'dependsOn':[]},{'key':'onReadFile','title':'文件预览','summary':'通过宿主鉴权读取会话文件,驱动文本、Markdown\x20或\x20HTML\x20预览。','example':dp17_0x26e7b8(0x1c6),'parameters':[{'name':'file','type':'SessionFileArtifact','required':!0x0,'description':dp17_0x26e7b8(0x1b4)},{'name':'signal','type':'AbortSignal','required':!0x0,'description':'预览关闭时取消读取。'}],'returns':'Promise<{\x20content:\x20string;\x20mimeType?:\x20string\x20}>。','interaction':[dp17_0x26e7b8(0x1b2),'宿主鉴权读取当前会话文件','组件按返回\x20MIME\x20类型安全渲染内容'],'openApi':[{'method':'GET','path':dp17_0x26e7b8(0x1d5),'description':'读取当前会话中的受保护文件。'}],'requirements':['宿主需要提供当前会话和鉴权上下文;不要直接信任消息中的外部文件地址。'],'dependsOn':[]},{'key':'onSaveFile','title':'Markdown\x20保存','summary':'依赖\x20onReadFile:组件必须先读取并打开\x20Markdown\x20文件预览,进入编辑态后才能把修改后的内容写回当前会话文件。','example':'//\x20OpenAPI:\x20PUT\x20/api/files/{sessionId}/{filename}\x0a//\x20其他要求:\x20sessionId、accessToken;只适用于已通过预览工作台打开的可编辑\x20Markdown\x20文件\x0a//\x20依赖回调:\x20onReadFile\x0aonSaveFile={async\x20(file,\x20content,\x20signal)\x20=>\x20{\x0a\x20\x20const\x20url\x20=\x20`${apiBase}/api/files/${encodeURIComponent(sessionId)}/${encodeURIComponent(file.filename)}`\x0a\x20\x20const\x20response\x20=\x20await\x20fetch(url,\x20{\x0a\x20\x20\x20\x20method:\x20\x27PUT\x27,\x0a\x20\x20\x20\x20signal,\x0a\x20\x20\x20\x20headers:\x20{\x20Authorization:\x20`Bearer\x20${accessToken}`,\x20\x27Content-Type\x27:\x20\x27application/json\x27\x20},\x0a\x20\x20\x20\x20body:\x20JSON.stringify({\x20content\x20}),\x0a\x20\x20})\x0a\x20\x20if\x20(!response.ok)\x20throw\x20new\x20Error(\x27文件保存失败\x27)\x0a\x20\x20return\x20true\x0a}}','parameters':[{'name':'file','type':'SessionFileArtifact','required':!0x0,'description':dp17_0x26e7b8(0x1b8)},{'name':dp17_0x26e7b8(0x1dc),'type':dp17_0x26e7b8(0x1bc),'required':!0x0,'description':'用户编辑后的完整内容。'},{'name':dp17_0x26e7b8(0x1b6),'type':'AbortSignal','required':!0x0,'description':'关闭或再次保存时取消旧请求。'}],'returns':'Promise<boolean\x20|\x20void>;false\x20表示保存未被接受。','interaction':['用户通过文件预览进入\x20Markdown\x20编辑态','修改内容并点击保存','宿主写回文件;成功后组件退出编辑态并保留新内容'],'openApi':[{'method':'PUT','path':dp17_0x26e7b8(0x1d5),'description':dp17_0x26e7b8(0x1c3)}],'requirements':['目标文件必须是可编辑文本;宿主需要提供当前会话和鉴权上下文。'],'dependsOn':[dp17_0x26e7b8(0x1d0)]},{'key':'onDownloadFile','title':'文件下载','summary':'由宿主鉴权下载会话文件,不回退到不安全的原生链接。','example':dp17_0x26e7b8(0x1b5),'parameters':[{'name':'file','type':'SessionFileArtifact','required':!0x0,'description':'需要下载的会话文件。'},{'name':'signal','type':dp17_0x26e7b8(0x1d1),'required':!0x0,'description':'取消不再需要的下载。'}],'returns':'Promise<void>。未提供时隐藏受保护文件的下载动作。','interaction':['用户点击下载',dp17_0x26e7b8(0x1b7),dp17_0x26e7b8(0x1d2)],'openApi':[{'method':dp17_0x26e7b8(0x1c4),'path':'/api/files/{sessionId}/{filename}','description':'下载当前会话中的受保护文件。'}],'requirements':['宿主需要提供当前会话和鉴权上下文,并在下载后释放对象\x20URL。'],'dependsOn':[]},{'key':'onBookmarkFile','title':dp17_0x26e7b8(0x1af),'summary':'调用\x20DataPilot\x20OpenAPI,把受保护会话文件持久化到当前用户的“我的文件”。','example':'//\x20OpenAPI:\x20POST\x20/api/user-files\x0a//\x20其他要求:\x20file.url\x20必须是当前\x20DataPilot\x20实例中的受保护文件地址;需要\x20accessToken\x0a//\x20依赖回调:\x20无\x0aonBookmarkFile={async\x20(file,\x20signal)\x20=>\x20{\x0a\x20\x20if\x20(!file.url?.startsWith(\x27/api/files/\x27))\x20throw\x20new\x20Error(\x27只能收藏当前实例的会话文件\x27)\x0a\x20\x20const\x20response\x20=\x20await\x20fetch(`${apiBase}/api/user-files`,\x20{\x0a\x20\x20\x20\x20method:\x20\x27POST\x27,\x0a\x20\x20\x20\x20signal,\x0a\x20\x20\x20\x20headers:\x20{\x20Authorization:\x20`Bearer\x20${accessToken}`,\x20\x27Content-Type\x27:\x20\x27application/json\x27\x20},\x0a\x20\x20\x20\x20body:\x20JSON.stringify({\x20displayName:\x20file.displayName\x20||\x20file.filename,\x20downloadUrl:\x20file.url\x20}),\x0a\x20\x20})\x0a\x20\x20if\x20(!response.ok)\x20throw\x20new\x20Error(\x27文件收藏失败\x27)\x0a}}','parameters':[{'name':'file','type':'SessionFileArtifact','required':!0x0,'description':'需要收藏的会话文件。'},{'name':'signal','type':dp17_0x26e7b8(0x1d1),'required':!0x0,'description':dp17_0x26e7b8(0x1ad)}],'returns':'Promise<void>。','interaction':['用户点击收藏','宿主校验文件地址并调用\x20DataPilot\x20OpenAPI',dp17_0x26e7b8(0x1dd)],'openApi':[{'method':'POST','path':'/api/user-files','description':dp17_0x26e7b8(0x1cf)}],'requirements':['宿主需要提供鉴权上下文;downloadUrl\x20只接受当前\x20DataPilot\x20实例中的受保护会话文件地址。'],'dependsOn':[]},{'key':'onConvertFile','title':'Markdown\x20转\x20DOCX','summary':'依赖\x20onReadFile:组件必须先读取并打开\x20Markdown\x20文件预览,才能从文件工作台发起\x20DOCX\x20转换并鉴权下载结果。','example':'//\x20OpenAPI:\x20POST\x20/api/files/{sessionId}/convert-to-docx;GET\x20/api/files/{sessionId}/{docxFilename}\x0a//\x20其他要求:\x20sessionId、accessToken;输入必须是当前会话中的\x20Markdown\x20文件,完成下载后释放对象\x20URL\x0a//\x20依赖回调:\x20onReadFile\x0aonConvertFile={async\x20(file,\x20signal)\x20=>\x20{\x0a\x20\x20const\x20convertResponse\x20=\x20await\x20fetch(\x0a\x20\x20\x20\x20`${apiBase}/api/files/${encodeURIComponent(sessionId)}/convert-to-docx`,\x0a\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20method:\x20\x27POST\x27,\x0a\x20\x20\x20\x20\x20\x20signal,\x0a\x20\x20\x20\x20\x20\x20headers:\x20{\x20Authorization:\x20`Bearer\x20${accessToken}`,\x20\x27Content-Type\x27:\x20\x27application/json\x27\x20},\x0a\x20\x20\x20\x20\x20\x20body:\x20JSON.stringify({\x20filename:\x20file.filename\x20}),\x0a\x20\x20\x20\x20},\x0a\x20\x20)\x0a\x20\x20if\x20(!convertResponse.ok)\x20throw\x20new\x20Error(\x27DOCX\x20转换失败\x27)\x0a\x20\x20const\x20payload\x20=\x20await\x20convertResponse.json()\x0a\x20\x20const\x20docxFilename\x20=\x20typeof\x20payload.data\x20===\x20\x27string\x27\x0a\x20\x20\x20\x20?\x20payload.data\x0a\x20\x20\x20\x20:\x20payload.data?.filename\x20??\x20payload.filename\x0a\x20\x20if\x20(!docxFilename)\x20throw\x20new\x20Error(\x27转换响应缺少\x20DOCX\x20文件名\x27)\x0a\x20\x20const\x20downloadResponse\x20=\x20await\x20fetch(\x0a\x20\x20\x20\x20`${apiBase}/api/files/${encodeURIComponent(sessionId)}/${encodeURIComponent(docxFilename)}`,\x0a\x20\x20\x20\x20{\x20signal,\x20headers:\x20{\x20Authorization:\x20`Bearer\x20${accessToken}`\x20}\x20},\x0a\x20\x20)\x0a\x20\x20if\x20(!downloadResponse.ok)\x20throw\x20new\x20Error(\x27DOCX\x20下载失败\x27)\x0a\x20\x20const\x20objectUrl\x20=\x20URL.createObjectURL(await\x20downloadResponse.blob())\x0a\x20\x20const\x20anchor\x20=\x20Object.assign(document.createElement(\x27a\x27),\x20{\x20href:\x20objectUrl,\x20download:\x20docxFilename\x20})\x0a\x20\x20anchor.click()\x0a\x20\x20URL.revokeObjectURL(objectUrl)\x0a}}','parameters':[{'name':'file','type':'SessionFileArtifact','required':!0x0,'description':'待转换的\x20Markdown\x20会话文件。'},{'name':'signal','type':'AbortSignal','required':!0x0,'description':'取消失效的转换任务。'}],'returns':'Promise<void>。','interaction':['用户先打开\x20Markdown\x20文件预览,再点击转\x20DOCX','宿主请求转换并取得新文件名','宿主鉴权下载\x20DOCX\x20并释放临时地址'],'openApi':[{'method':'POST','path':'/api/files/{sessionId}/convert-to-docx','description':dp17_0x26e7b8(0x1c7)},{'method':'GET','path':'/api/files/{sessionId}/{docxFilename}','description':'下载转换完成的\x20DOCX\x20文件。'}],'requirements':[dp17_0x26e7b8(0x1bd)],'dependsOn':[dp17_0x26e7b8(0x1d0)]}],n=[{'key':'getDialogContainer','title':'弹窗挂载容器','summary':dp17_0x26e7b8(0x1d8),'type':'()\x20=>\x20HTMLElement\x20|\x20null','defaultBehavior':'未提供或返回\x20null\x20时,使用\x20document.body。','example':'const\x20dialogRootRef\x20=\x20useRef<HTMLDivElement>(null)\x0a\x0a<div\x20ref={dialogRootRef}\x20/>\x0a<ChatMessage\x0a\x20\x20message={message}\x0a\x20\x20getDialogContainer={()\x20=>\x20dialogRootRef.current}\x0a/>','interaction':['宿主先挂载目标\x20DOM\x20容器','组件打开文件或子\x20Agent\x20弹窗时调用\x20getter','返回有效容器时挂载到该容器;未提供或返回\x20null\x20时挂载到\x20document.body']},{'key':'className','title':'根节点样式类','summary':'在消息根节点追加宿主样式类,用于布局和外层主题衔接。','type':dp17_0x26e7b8(0x1bc),'defaultBehavior':'未提供时只使用组件内置根节点样式;传入值不会替换内置类名。','example':dp17_0x26e7b8(0x1b3),'interaction':['宿主传入一个或多个类名','组件追加到消息根节点','宿主样式通过该作用域调整外层布局']}];export{e as chatCallbackReference,n as chatPropReference};
@@ -0,0 +1,19 @@
1
+ import { Attr, Token } from './smd.js';
2
+ import type { StreamingMarkdownNode as MarkdownNode, StreamingTextNode as TextNode } from './types';
3
+ interface RendererData {
4
+ rootNode: MarkdownNode;
5
+ nodeStack: MarkdownNode[];
6
+ keyCounter: number;
7
+ isIncremental: boolean;
8
+ incrementalTextNodes: Map<TextNode, MarkdownNode[]>;
9
+ }
10
+ export declare function createReactRenderer(onUpdate: () => void): {
11
+ data: RendererData;
12
+ startIncremental: () => void;
13
+ solidify: () => void;
14
+ add_token: (d: RendererData, t: Token) => void;
15
+ end_token: (d: RendererData) => void;
16
+ add_text: (d: RendererData, t: string) => void;
17
+ set_attr: (d: RendererData, t: Attr, v: string) => void;
18
+ };
19
+ export {};
@@ -0,0 +1,14 @@
1
+ export type StreamingToken = number;
2
+ export interface StreamingTextNode {
3
+ type: 'text' | 'incremental_text';
4
+ content: string;
5
+ key: string;
6
+ revision: number;
7
+ }
8
+ export interface StreamingMarkdownNode {
9
+ type: StreamingToken | 'root';
10
+ props: Record<string, unknown>;
11
+ children: Array<StreamingMarkdownNode | StreamingTextNode>;
12
+ key: string;
13
+ revision: number;
14
+ }
@@ -0,0 +1,2 @@
1
+ import type { StreamingMarkdownNode } from './types';
2
+ export declare function useStream(content: string, isComplete: boolean): StreamingMarkdownNode;
@@ -0,0 +1,15 @@
1
+ import type { Action, ChatLabels } from '../types';
2
+ export interface SpawnAgentDescriptor {
3
+ subSessionId?: string;
4
+ taskName?: string;
5
+ content?: string;
6
+ preview?: string;
7
+ failed: boolean;
8
+ running: boolean;
9
+ }
10
+ export declare function describeSpawnAgent(action: Action): SpawnAgentDescriptor;
11
+ export declare const SpawnAgentCard: import("react").NamedExoticComponent<{
12
+ action: Action;
13
+ labels: ChatLabels;
14
+ onOpen: (descriptor: SpawnAgentDescriptor) => void;
15
+ }>;
@@ -0,0 +1,10 @@
1
+ import type { ChatMessageProps, LoadSubAgentHandler } from '../types';
2
+ export interface SubAgentDialogProps extends Omit<ChatMessageProps, 'message' | 'onLoadSubAgent'> {
3
+ open: boolean;
4
+ subSessionId: string;
5
+ taskName?: string;
6
+ fallbackContent?: string;
7
+ onLoadSubAgent?: LoadSubAgentHandler;
8
+ onClose: () => void;
9
+ }
10
+ export declare const SubAgentDialog: import("react").NamedExoticComponent<SubAgentDialogProps>;
@@ -0,0 +1,2 @@
1
+ import type { Message, NormalizeChatHistoryOptions, RawChatHistoryPayload } from '../types';
2
+ export declare function normalizeChatHistory(payload: RawChatHistoryPayload, options?: NormalizeChatHistoryOptions): Message[];
@@ -0,0 +1,4 @@
1
+ import type { Action } from '../types';
2
+ export declare const ToolDetail: import("react").NamedExoticComponent<{
3
+ action: Action;
4
+ }>;
@@ -0,0 +1,10 @@
1
+ import { type SpawnAgentDescriptor } from '../sub-agent/SpawnAgentCard';
2
+ import type { Action, ChatLabels } from '../types';
3
+ export declare const ToolView: import("react").NamedExoticComponent<{
4
+ action: Action;
5
+ labels: ChatLabels;
6
+ onOpenSubAgent: (descriptor: SpawnAgentDescriptor) => void;
7
+ }>;
8
+ export declare const UnknownActionView: import("react").NamedExoticComponent<{
9
+ action: Action;
10
+ }>;
@@ -0,0 +1,197 @@
1
+ export interface NormalizeChatHistoryOptions {
2
+ sessionId?: string;
3
+ }
4
+ export interface RawChatHistoryResponse {
5
+ messages?: readonly unknown[];
6
+ data?: {
7
+ messages?: readonly unknown[];
8
+ };
9
+ }
10
+ export type RawChatHistoryPayload = RawChatHistoryResponse | readonly unknown[];
11
+ export type MessageStatus = 'processing' | 'completed' | 'failed' | string;
12
+ export type ActionStatus = 'processing' | 'success' | 'failed' | string;
13
+ export interface ProgressStep {
14
+ phase: string;
15
+ label?: string;
16
+ status: string;
17
+ message?: string;
18
+ }
19
+ export interface SubAgentState {
20
+ subSessionId: string;
21
+ taskName?: string;
22
+ lastLine?: string;
23
+ phase?: 'start' | 'running' | 'done' | 'error' | string;
24
+ }
25
+ export interface BaseAction {
26
+ action_id: string;
27
+ type: string;
28
+ name?: string;
29
+ content?: string;
30
+ status: ActionStatus;
31
+ input?: unknown;
32
+ output?: unknown;
33
+ error?: unknown;
34
+ progressSteps?: ProgressStep[];
35
+ subAgent?: SubAgentState;
36
+ raw?: unknown;
37
+ }
38
+ export interface ThinkingAction extends BaseAction {
39
+ type: 'thinking';
40
+ }
41
+ export interface ToolAction extends BaseAction {
42
+ type: 'tool_call' | 'tool_result' | 'code_execution' | 'sql';
43
+ }
44
+ export interface UnknownAction extends BaseAction {
45
+ raw: unknown;
46
+ }
47
+ export type Action = ThinkingAction | ToolAction | UnknownAction;
48
+ export interface ChoiceOption {
49
+ label: string;
50
+ value: string;
51
+ description?: string;
52
+ }
53
+ export interface ChoiceBlock {
54
+ kind: 'choice';
55
+ id: string;
56
+ question?: string;
57
+ options: ChoiceOption[];
58
+ multiple?: boolean;
59
+ allowCustom?: boolean;
60
+ raw: unknown;
61
+ }
62
+ export interface SqlDataBlock {
63
+ kind: 'sql-data';
64
+ id: string;
65
+ query: string;
66
+ source?: unknown;
67
+ raw: unknown;
68
+ }
69
+ export interface ChartSeries {
70
+ name: string;
71
+ values: number[];
72
+ }
73
+ export interface ChartData {
74
+ labels: string[];
75
+ series: ChartSeries[];
76
+ type?: 'bar' | 'line';
77
+ }
78
+ export interface ChartBlock {
79
+ kind: 'chart';
80
+ id: string;
81
+ title?: string;
82
+ data?: ChartData;
83
+ query?: string;
84
+ source?: unknown;
85
+ raw: unknown;
86
+ }
87
+ export interface UnknownBlock {
88
+ kind: string;
89
+ id?: string;
90
+ name?: string;
91
+ source?: string;
92
+ raw: unknown;
93
+ }
94
+ export type ContentBlock = ChoiceBlock | SqlDataBlock | ChartBlock | UnknownBlock;
95
+ export interface SessionFileArtifact {
96
+ version: 1;
97
+ kind: 'session_file';
98
+ filename: string;
99
+ displayName: string;
100
+ size: number;
101
+ mimeType: string;
102
+ url?: string;
103
+ }
104
+ export interface Message {
105
+ id: string;
106
+ role: 'assistant';
107
+ content?: string;
108
+ actions?: Action[];
109
+ blocks?: ContentBlock[];
110
+ status?: MessageStatus;
111
+ retryable?: boolean;
112
+ sandboxStage?: 'resuming' | 'creating' | 'waiting' | 'ready' | string;
113
+ contextCompactionStage?: 'compressing' | string;
114
+ expanded?: boolean;
115
+ sessionId?: string;
116
+ fileArtifacts?: SessionFileArtifact[];
117
+ raw?: unknown;
118
+ }
119
+ export interface TableColumn {
120
+ key: string;
121
+ label: string;
122
+ }
123
+ export interface TableData {
124
+ columns: TableColumn[];
125
+ rows: Array<Record<string, unknown>>;
126
+ }
127
+ export interface FileContent {
128
+ content: string;
129
+ mimeType?: string;
130
+ }
131
+ export type SubmitChoice = (answer: string, context: {
132
+ messageId: string;
133
+ choiceId?: string;
134
+ }) => Promise<boolean>;
135
+ export type QueryHandler = (request: {
136
+ query: string;
137
+ source?: unknown;
138
+ signal: AbortSignal;
139
+ }) => Promise<TableData | ChartData>;
140
+ export type LoadSubAgentHandler = (request: {
141
+ subSessionId: string;
142
+ taskName?: string;
143
+ signal: AbortSignal;
144
+ }) => Promise<RawChatHistoryPayload>;
145
+ export type ReadFileHandler = (file: SessionFileArtifact, signal: AbortSignal) => Promise<FileContent>;
146
+ export type SaveFileHandler = (file: SessionFileArtifact, content: string, signal: AbortSignal) => Promise<boolean | void>;
147
+ export type FileActionHandler = (file: SessionFileArtifact, signal: AbortSignal) => Promise<void>;
148
+ export type DialogContainerGetter = () => HTMLElement | null;
149
+ export interface ChatMessageCallbacks {
150
+ onSubmitChoice?: SubmitChoice;
151
+ onQuery?: QueryHandler;
152
+ onLoadSubAgent?: LoadSubAgentHandler;
153
+ onReadFile?: ReadFileHandler;
154
+ onSaveFile?: SaveFileHandler;
155
+ onDownloadFile?: FileActionHandler;
156
+ onBookmarkFile?: FileActionHandler;
157
+ onConvertFile?: FileActionHandler;
158
+ }
159
+ export interface ChatLabels {
160
+ processing: string;
161
+ completed: string;
162
+ failed: string;
163
+ thinking: string;
164
+ thinkingComplete: string;
165
+ run: string;
166
+ input: string;
167
+ output: string;
168
+ error: string;
169
+ copy: string;
170
+ copied: string;
171
+ submit: string;
172
+ submitted: string;
173
+ loading: string;
174
+ retry: string;
175
+ previous: string;
176
+ next: string;
177
+ preview: string;
178
+ edit: string;
179
+ save: string;
180
+ close: string;
181
+ download: string;
182
+ export: string;
183
+ fullData: string;
184
+ viewFullData: string;
185
+ queryFailed: string;
186
+ totalRows: string;
187
+ convert: string;
188
+ bookmark: string;
189
+ subAgent: string;
190
+ readOnly: string;
191
+ empty: string;
192
+ }
193
+ export interface ChatMessageProps extends ChatMessageCallbacks {
194
+ message: Message;
195
+ getDialogContainer?: DialogContainerGetter;
196
+ className?: string;
197
+ }
@@ -0,0 +1 @@
1
+ export declare function useAbortableTask(): (task: (signal: AbortSignal) => Promise<void>) => Promise<void>;
@@ -0,0 +1,4 @@
1
+ export declare function useCopyFeedback(): {
2
+ copied: boolean;
3
+ markCopied: () => void;
4
+ };
@@ -0,0 +1,14 @@
1
+ import type { Action, SessionFileArtifact } from './types';
2
+ export declare function isOntologyExplanation(action: Action): boolean;
3
+ export declare function stableStringify(value: unknown): string;
4
+ export declare function formatToolValue(value: unknown): string | null;
5
+ export declare function displayValue(value: unknown): string | null;
6
+ export declare function parseRecord(value: unknown): Record<string, unknown> | null;
7
+ export declare function safeDownloadUrl(url?: string): string | null;
8
+ export declare function safeImageUrl(url?: string): string | null;
9
+ export declare function isMarkdownFile(file: SessionFileArtifact): boolean;
10
+ export declare function formatFileSize(size: number): string;
11
+ export declare function textFromNode(value: unknown): string;
12
+ export declare function csvCell(value: string): string;
13
+ export declare function triggerBlobDownload(blob: Blob, filename: string): void;
14
+ export declare function copyText(text: string): Promise<boolean>;
package/dist/chat.css ADDED
@@ -0,0 +1,2 @@
1
+ .dp-ui-chat-message,.dp-ui-chat-tool-detail,.dp-ui-chat-dialog{--dp-ui-chat-font:var(--font-family-sans,Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);--dp-ui-chat-text:var(--foreground,#1f2937);--dp-ui-chat-muted:var(--muted-foreground,#667085);--dp-ui-chat-border:var(--card-border,#d9e0ea);--dp-ui-chat-surface:var(--card,#fff);--dp-ui-chat-soft:var(--muted,#f6f8fb);--dp-ui-chat-accent:var(--primary,#2f6fed);--dp-ui-chat-accent-soft:var(--accent,#edf3ff);--dp-ui-chat-danger:var(--destructive,#b42318);--dp-ui-chat-danger-soft:var(--destructive-muted,#fff1ef);--dp-ui-chat-success:var(--status-ok,#137a5b);--dp-ui-chat-radius:var(--radius-container,10px)}.dp-ui-chat-message,.dp-ui-chat-message *{box-sizing:border-box}.dp-ui-chat-message{isolation:isolate;width:100%;min-width:0;color:var(--dp-ui-chat-text);font-family:var(--dp-ui-chat-font);font-size:12px;line-height:1.5;position:relative}.dp-ui-chat-message button,.dp-ui-chat-message input,.dp-ui-chat-message textarea{color:inherit;font:inherit;font-size:max(12px,1em)}.dp-ui-chat-run{margin:8px 0 12px}.dp-ui-chat-run-trigger,.dp-ui-chat-tool-header,.dp-ui-chat-thinking>button{text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;width:100%;min-height:35px;padding:8px 12px;display:flex}.dp-ui-chat-run-trigger:not([disabled]){border-bottom:1px solid var(--dp-ui-chat-border)}.dp-ui-chat-run-trigger:disabled{cursor:default}.dp-ui-chat-run-trigger strong{font-weight:500}.dp-ui-chat-run-trigger{color:var(--dp-ui-chat-muted);border-radius:var(--radius,6px)}.dp-ui-chat-disclosure-icon{transition:transform .3s ease-out}.dp-ui-chat-disclosure-icon[data-expanded=false]{transform:rotate(-90deg)}.dp-ui-chat-run-trigger svg,.dp-ui-chat-tool-header>svg,.dp-ui-chat-thinking>button svg{flex:none;width:16px;height:16px}.dp-ui-chat-run-trigger:focus-visible,.dp-ui-chat-tool-header:focus-visible,.dp-ui-chat-thinking>button:focus-visible,.dp-ui-chat-message button:focus-visible,.dp-ui-chat-message input:focus-visible,.dp-ui-chat-message textarea:focus-visible{outline:2px solid var(--dp-ui-chat-accent);outline-offset:2px}.dp-ui-chat-run-trigger svg{margin-left:2px}.dp-ui-chat-run-content{gap:8px;padding:8px 16px;display:grid}.dp-ui-chat-thinking{color:var(--dp-ui-chat-muted)}.dp-ui-chat-thinking>button{min-height:30px;color:var(--dp-ui-chat-muted);gap:8px;padding:4px 0}.dp-ui-chat-thinking>button small{font-size:12px}.dp-ui-chat-thinking-content{gap:8px;padding-top:6px;display:flex}.dp-ui-chat-thinking-content:before{border-left:2px solid var(--dp-ui-chat-border);content:"";flex:0 0 8px;width:8px;margin-left:6px}.dp-ui-chat-thinking-content>.dp-ui-chat-markdown{flex:1;min-width:0}.dp-ui-chat-renderer-loading,.dp-ui-chat-typing{color:var(--dp-ui-chat-muted);font-size:12px}.dp-ui-chat-stage{color:#805b10;background:#fff8e7;border:1px solid #f1d28a;border-radius:7px;margin-top:8px;padding:7px 9px;font-size:12px}.dp-ui-chat-typing{gap:4px;padding:8px 2px;display:flex}.dp-ui-chat-typing i{background:var(--dp-ui-chat-muted);border-radius:50%;width:6px;height:6px;animation:1s infinite alternate dp-ui-chat-pulse}.dp-ui-chat-typing i:nth-child(2){animation-delay:.18s}.dp-ui-chat-typing i:nth-child(3){animation-delay:.36s}.dp-ui-chat-error,.dp-ui-chat-message-error{background:var(--dp-ui-chat-danger-soft);color:var(--dp-ui-chat-danger);border:1px solid #f1b7b2;border-radius:7px;margin-top:8px;padding:7px 9px;font-size:12px}@keyframes dp-ui-chat-pulse{0%{opacity:.35;transform:translateY(0)}to{opacity:1;transform:translateY(-2px)}}@media (prefers-reduced-motion:reduce){.dp-ui-chat-loading-icon,.dp-ui-chat-button-spinner,.dp-ui-chat-typing i{animation:none}.dp-ui-chat-disclosure-icon{transition:none}}.dp-ui-chat-content{overflow-wrap:anywhere}.dp-ui-chat-markdown{color:var(--dp-ui-chat-text);font-size:var(--text-base,13px);line-height:1.58}.dp-ui-chat-thinking .dp-ui-chat-markdown{font-size:var(--text-sm,12px);line-height:1.625}.dp-ui-chat-markdown>:first-child{margin-top:0}.dp-ui-chat-markdown>:last-child{margin-bottom:0}.dp-ui-chat-markdown p{margin:.5rem 0}.dp-ui-chat-markdown ul,.dp-ui-chat-markdown ol{margin:.5rem 0;padding-left:1rem}.dp-ui-chat-markdown li{padding:.25rem 0}.dp-ui-chat-markdown h1,.dp-ui-chat-markdown h2,.dp-ui-chat-markdown h3,.dp-ui-chat-markdown h4,.dp-ui-chat-markdown h5,.dp-ui-chat-markdown h6{color:var(--dp-ui-chat-text);line-height:1.3}.dp-ui-chat-markdown h1{font-size:var(--text-3xl,32px);margin:1.5rem 0 .75rem}.dp-ui-chat-markdown h2{font-size:var(--text-2xl,24px);margin:1.25rem 0 .5rem}.dp-ui-chat-markdown h3{font-size:var(--text-xl,18px);margin:1rem 0 .375rem}.dp-ui-chat-markdown h4{font-size:var(--text-lg,15px);margin:.875rem 0 .375rem}.dp-ui-chat-markdown h5{font-size:var(--text-base,13px);margin:.75rem 0 .25rem}.dp-ui-chat-markdown h6{font-size:var(--text-sm,12px);margin:.75rem 0 .25rem}.dp-ui-chat-markdown blockquote{border-left:1px solid var(--dp-ui-chat-border);color:var(--dp-ui-chat-muted);margin:1rem 0;padding-left:1rem;font-style:italic}.dp-ui-chat-markdown hr{border:0;border-top:1px solid var(--dp-ui-chat-border);margin:1.5rem 0}.dp-ui-chat-markdown :not(pre)>code{border:1px solid var(--dp-ui-chat-border);background:var(--dp-ui-chat-soft);color:var(--dp-ui-chat-text);border-radius:4px;margin:0 4px;padding:2px 6px;font:12px/1.5 SFMono-Regular,Consolas,Liberation Mono,monospace}.dp-ui-chat-markdown img{max-width:100%;height:auto}.dp-ui-chat-markdown a{color:var(--dp-ui-chat-accent);text-underline-offset:2px;align-items:baseline;gap:2px;font-weight:500;text-decoration:underline;display:inline-flex}.dp-ui-chat-markdown a svg{width:12px;height:12px;color:var(--dp-ui-chat-text);flex:none;align-self:center}.dp-ui-chat-disabled-link{color:var(--dp-ui-chat-muted)}.dp-ui-chat-code,.dp-ui-chat-code-fallback,.dp-ui-chat-raw pre,.dp-ui-chat-file-text,.dp-ui-chat-sql>pre{border:1px solid var(--dp-ui-chat-border);color:#24324a;white-space:pre-wrap;overflow-wrap:anywhere;background:#f8fafc;border-radius:8px;margin:0;font:12px/1.65 SFMono-Regular,Consolas,Liberation Mono,monospace;overflow:auto}.dp-ui-chat-code pre,.dp-ui-chat-code-fallback,.dp-ui-chat-raw pre,.dp-ui-chat-file-text,.dp-ui-chat-sql>pre{padding:12px}.dp-ui-chat-code-toolbar{border:1px solid var(--dp-ui-chat-border);background:var(--dp-ui-chat-surface);color:var(--dp-ui-chat-text);font-size:var(--text-base,13px);border-bottom:0;border-radius:8px 8px 0 0;justify-content:space-between;align-items:center;padding:5px 8px;font-weight:600;display:flex}.dp-ui-chat-code-toolbar+pre{border-radius:0 0 8px 8px}.dp-ui-chat-code-toolbar button,.dp-ui-chat-table-actions button{color:var(--dp-ui-chat-muted);cursor:pointer;background:0 0;border:0}.dp-ui-chat-code-toolbar button{border-radius:6px;place-items:center;width:32px;height:32px;padding:0;display:inline-grid}.dp-ui-chat-code-toolbar button:hover{background:var(--dp-ui-chat-accent-soft)}.dp-ui-chat-code-toolbar button svg{width:12px;height:12px}.dp-ui-chat-code-keyword{color:#7c3aed;font-weight:650}.dp-ui-chat-code pre{font-size:var(--text-base,13px);padding:12px 0}.dp-ui-chat-code-line{grid-template-columns:40px minmax(0,1fr);min-width:max-content;display:grid}.dp-ui-chat-code-line-number{color:var(--dp-ui-chat-muted);text-align:right;-webkit-user-select:none;user-select:none;padding-right:12px}.dp-ui-chat-code-line>span:last-child{padding-right:12px}.dp-ui-chat-raw{min-width:0}.dp-ui-chat-raw-label{color:var(--dp-ui-chat-muted);font-size:12px;font-weight:500}.dp-ui-chat-raw-header{justify-content:space-between;align-items:center;gap:8px;min-height:26px;margin-bottom:4px;display:flex}.dp-ui-chat-raw-header button{color:var(--dp-ui-chat-muted);cursor:pointer;background:0 0;border:0;border-radius:4px;align-items:center;gap:4px;padding:3px 6px;font-size:12px;display:inline-flex}.dp-ui-chat-raw-header button:hover{background:var(--dp-ui-chat-accent-soft);color:var(--dp-ui-chat-text)}.dp-ui-chat-raw-header svg{width:12px;height:12px}.dp-ui-chat-tool-call-id{color:var(--dp-ui-chat-muted);gap:6px;padding-top:8px;font-size:12px;display:flex}.dp-ui-chat-tool-call-id code{overflow-wrap:anywhere;font-family:SFMono-Regular,Consolas,Liberation Mono,monospace}.dp-ui-chat-table-wrap,.dp-ui-chat-sql,.dp-ui-chat-choice,.dp-ui-chat-chart,.dp-ui-chat-files{margin-top:12px}.dp-ui-chat-table-actions{justify-content:flex-end;gap:4px;padding:0 8px 4px 0;display:flex}.dp-ui-chat-table-actions>button,.dp-ui-chat-export>button{border-radius:4px;align-items:center;gap:4px;min-height:26px;padding:4px 8px;font-size:12px;display:inline-flex}.dp-ui-chat-table-actions>button:hover,.dp-ui-chat-export>button:hover{background:var(--dp-ui-chat-accent-soft);color:var(--dp-ui-chat-text)}.dp-ui-chat-table-actions svg{width:12px;height:12px}.dp-ui-chat-export{position:relative}.dp-ui-chat-export-menu{z-index:10;border:1px solid var(--dp-ui-chat-border);background:var(--dp-ui-chat-surface);border-radius:6px;min-width:112px;padding:4px;display:grid;position:absolute;top:calc(100% + 4px);right:0;box-shadow:0 6px 18px #0f172a1f}.dp-ui-chat-export-menu button{min-height:30px;color:var(--dp-ui-chat-text);text-align:left;border-radius:4px;padding:5px 8px}.dp-ui-chat-export-menu button:hover{background:var(--dp-ui-chat-accent-soft)}.dp-ui-chat-table-scroll{border:1px solid var(--dp-ui-chat-border);border-radius:8px;max-width:100%;overflow:auto}.dp-ui-chat-table-scroll table{border-collapse:collapse;background:var(--dp-ui-chat-surface);width:100%}.dp-ui-chat-sql-table .dp-ui-chat-table-scroll{max-height:420px}.dp-ui-chat-sql-table .dp-ui-chat-table-scroll th{z-index:1;position:sticky;top:0}.dp-ui-chat-table-scroll th,.dp-ui-chat-table-scroll td{border-bottom:1px solid var(--dp-ui-chat-border);text-align:left;vertical-align:middle;min-width:96px;font-size:12px}.dp-ui-chat-table-scroll th{background:var(--dp-ui-chat-surface);height:40px;color:var(--dp-ui-chat-text);padding:0 4px;font-weight:500}.dp-ui-chat-table-scroll td{height:32px;padding:6px 12px}.dp-ui-chat-null{color:var(--dp-ui-chat-muted);opacity:.5}.dp-ui-chat-table-scroll th button{text-align:left;cursor:pointer;background:0 0;border:0;border-radius:4px;justify-content:flex-start;align-items:center;gap:4px;width:100%;max-width:100%;min-height:32px;padding:4px 8px;display:inline-flex}.dp-ui-chat-table-scroll th button:hover{background:var(--dp-ui-chat-accent-soft);color:var(--dp-ui-chat-text)}.dp-ui-chat-table-scroll th button>span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.dp-ui-chat-table-scroll th button svg{width:14px;height:14px;color:var(--dp-ui-chat-muted);flex:none}.dp-ui-chat-pagination{justify-content:flex-end;align-items:center;gap:8px;margin-top:8px;font-size:12px;display:flex}.dp-ui-chat-pagination>span{color:var(--dp-ui-chat-muted);margin-right:auto}.dp-ui-chat-pagination>div{align-items:center;gap:4px;display:flex}.dp-ui-chat-pagination>div>span{color:var(--dp-ui-chat-muted);padding:0 4px}.dp-ui-chat-pagination button{border:1px solid var(--dp-ui-chat-border);background:var(--dp-ui-chat-surface);width:28px;min-width:28px;min-height:28px;color:var(--dp-ui-chat-text);cursor:pointer;border-radius:6px;place-items:center;padding:0;font-size:12px;display:inline-grid}.dp-ui-chat-pagination button[aria-current=page]{border-color:var(--dp-ui-chat-accent);background:var(--dp-ui-chat-accent);color:#fff}.dp-ui-chat-pagination svg{width:14px;height:14px}.dp-ui-chat-sql-card{border:1px solid var(--dp-ui-chat-border);background:var(--dp-ui-chat-surface);border-radius:8px;justify-content:space-between;align-items:center;gap:12px;min-height:66px;padding:16px;display:flex}.dp-ui-chat-sql-card>div{min-width:0;color:var(--dp-ui-chat-muted);align-items:center;gap:8px;font-size:14px;display:flex}.dp-ui-chat-sql-card svg{flex:none;width:16px;height:16px}.dp-ui-chat-sql-card>button{border:1px solid var(--dp-ui-chat-border);background:var(--dp-ui-chat-surface);cursor:pointer;border-radius:6px;flex:none;align-items:center;gap:6px;min-height:32px;padding:0 12px;font-size:12px;display:inline-flex}.dp-ui-chat-sql-card>button:disabled{cursor:default;opacity:.65}.dp-ui-chat-button-spinner{border:2px solid var(--dp-ui-chat-border);border-top-color:var(--dp-ui-chat-muted);border-radius:50%;width:14px;height:14px;animation:1s linear infinite dp-ui-chat-spin}.dp-ui-chat-choice-footer button,.dp-ui-chat-sql>button,.dp-ui-chat-file-actions button,.dp-ui-chat-file-actions a,.dp-ui-chat-file-toolbar button,.dp-ui-chat-file-editor-wrap>button,.dp-ui-chat-dialog header>button{border:1px solid var(--dp-ui-chat-border);background:var(--dp-ui-chat-surface);min-height:30px;color:var(--dp-ui-chat-text);cursor:pointer;border-radius:6px;padding:4px 10px;font-size:12px;text-decoration:none}.dp-ui-chat-pagination button:disabled,.dp-ui-chat-choice button:disabled{cursor:default;opacity:.55}.dp-ui-chat-choice{border:1px solid var(--dp-ui-chat-border);border-radius:var(--dp-ui-chat-radius);background:var(--dp-ui-chat-soft);padding:12px}.dp-ui-chat-choice h4{margin:0 0 8px;font-size:14px}.dp-ui-chat-choice-options{gap:7px;display:grid}.dp-ui-chat-choice-options>button{border:1px solid var(--dp-ui-chat-border);background:var(--dp-ui-chat-surface);text-align:left;border-radius:7px;flex-direction:column;align-items:flex-start;min-height:38px;padding:7px 10px;display:flex}.dp-ui-chat-choice-options>button[aria-pressed=true]{border-color:var(--dp-ui-chat-accent);background:var(--dp-ui-chat-accent-soft)}.dp-ui-chat-choice-options small{color:var(--dp-ui-chat-muted);font-size:12px}.dp-ui-chat-choice>input{border:1px solid var(--dp-ui-chat-border);background:var(--dp-ui-chat-surface);border-radius:7px;width:100%;min-height:36px;margin-top:8px;padding:6px 9px}.dp-ui-chat-choice-footer{justify-content:flex-end;align-items:center;gap:10px;margin-top:9px;display:flex}.dp-ui-chat-choice-footer button{border-color:var(--dp-ui-chat-accent);background:var(--dp-ui-chat-accent);color:#fff}.dp-ui-chat-chart{border:1px solid var(--dp-ui-chat-border);background:var(--dp-ui-chat-surface);border-radius:8px;padding:12px}.dp-ui-chat-chart figcaption{margin-bottom:8px;font-weight:650}.dp-ui-chat-chart svg{width:100%;height:auto;display:block}.dp-ui-chat-chart-axis{stroke:var(--dp-ui-chat-border)}.dp-ui-chat-chart-legend{color:var(--dp-ui-chat-muted);flex-wrap:wrap;gap:8px 14px;font-size:12px;display:flex}.dp-ui-chat-chart-legend span{align-items:center;gap:5px;display:inline-flex}.dp-ui-chat-chart-legend i{border-radius:50%;width:9px;height:9px}.dp-ui-chat-files{gap:8px;display:grid}.dp-ui-chat-file-card{border:1px solid var(--dp-ui-chat-border);background:var(--dp-ui-chat-surface);border-radius:8px;justify-content:space-between;align-items:center;gap:12px;padding:9px 11px;display:flex}.dp-ui-chat-file-card>div:first-child{flex-direction:column;min-width:0;display:flex}.dp-ui-chat-file-card small{color:var(--dp-ui-chat-muted);font-size:12px}.dp-ui-chat-file-actions,.dp-ui-chat-file-toolbar{flex-wrap:wrap;gap:6px;display:flex}.dp-ui-chat-dialog-backdrop{z-index:1000;background:#12192659;place-items:center;padding:24px;display:grid;position:fixed;inset:0;overflow:hidden}.dp-ui-chat-dialog{border:1px solid var(--dp-ui-chat-border);background:var(--dp-ui-chat-surface);border-radius:12px;flex-direction:column;width:min(900px,100%);max-height:88vh;display:flex;overflow:hidden;box-shadow:0 24px 60px #1219262e}.dp-ui-chat-dialog>header{border-bottom:1px solid var(--dp-ui-chat-border);justify-content:space-between;align-items:flex-start;gap:16px;padding:12px 14px;display:flex}.dp-ui-chat-dialog>header>div{flex-direction:column;min-width:0;display:flex}.dp-ui-chat-dialog>header small{color:var(--dp-ui-chat-muted);font-size:12px}.dp-ui-chat-dialog-body{min-height:240px;padding:14px;overflow:auto}.dp-ui-chat-file-toolbar{border-bottom:1px solid var(--dp-ui-chat-border);padding:8px 14px}.dp-ui-chat-file-action-status{color:var(--dp-ui-chat-muted);align-self:center;font-size:12px}.dp-ui-chat-file-editor-wrap{gap:8px;display:grid}.dp-ui-chat-file-editor-wrap textarea{resize:vertical;border:1px solid var(--dp-ui-chat-border);border-radius:8px;width:100%;min-height:360px;padding:12px;font-family:SFMono-Regular,Consolas,monospace}.dp-ui-chat-file-editor-wrap>button{justify-self:end}.dp-ui-chat-file-dialog iframe{border:1px solid var(--dp-ui-chat-border);width:100%;min-height:480px}.dp-ui-chat-mermaid{max-width:100%;overflow:auto}.dp-ui-chat-mermaid-wrap>button{margin-left:auto;display:block}.dp-ui-chat-mermaid svg{max-width:100%;height:auto}@media (width<=640px){.dp-ui-chat-dialog-backdrop{padding:8px}.dp-ui-chat-dialog{max-height:96vh}.dp-ui-chat-file-card{flex-direction:column;align-items:flex-start}}.dp-ui-chat-tool,.dp-ui-chat-tool-card{width:min(100%,500px)}.dp-ui-chat-tool-card{border:1px solid var(--dp-ui-chat-border);background:#f7f8fa;border-radius:6px;overflow:hidden}.dp-ui-chat-tool-card[data-status=failed]{border-color:var(--dp-ui-chat-border)}.dp-ui-chat-tool-icon{width:14px;height:14px;color:var(--dp-ui-chat-muted);place-items:center;display:inline-grid}.dp-ui-chat-tool-icon svg{width:14px;height:14px}.dp-ui-chat-tool-header{gap:8px;min-height:36px;padding:8px 12px}.dp-ui-chat-tool-header strong{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-weight:500;overflow:hidden}.dp-ui-chat-tool-header>svg{width:14px;height:14px;color:var(--dp-ui-chat-muted)}.dp-ui-chat-tool-detail{gap:12px;padding:12px;display:grid}.dp-ui-chat-tool-card>.dp-ui-chat-tool-detail{border-top:1px solid var(--dp-ui-chat-border)}.dp-ui-chat-loading-icon{animation:1s linear infinite dp-ui-chat-spin}@keyframes dp-ui-chat-spin{to{transform:rotate(360deg)}}.dp-ui-chat-tool-detail-actions{justify-content:flex-end;display:flex}.dp-ui-chat-tool-detail-actions button,.dp-ui-chat-mermaid-wrap>button{color:var(--dp-ui-chat-accent);cursor:pointer;background:0 0;border:0;padding:2px 7px;font-size:12px}.dp-ui-chat-tool-images{flex-wrap:wrap;gap:8px;display:flex}.dp-ui-chat-tool-images img{border:1px solid var(--dp-ui-chat-border);border-radius:7px;max-width:min(100%,480px);height:auto}.dp-ui-chat-progress{color:var(--dp-ui-chat-muted);gap:2px;margin:8px 0 0;padding:0;font-size:12px;list-style:none;display:grid}.dp-ui-chat-progress li{align-items:center;gap:6px;display:flex}.dp-ui-chat-progress svg{flex:none;width:12px;height:12px}.dp-ui-chat-spawn{border:1px solid var(--dp-ui-chat-border);background:#f7f8fa;border-radius:6px;width:min(100%,500px);overflow:hidden}.dp-ui-chat-spawn>button{text-align:left;background:0 0;border:0;align-items:center;gap:10px;width:100%;padding:10px 12px;display:flex}.dp-ui-chat-spawn>button:not(:disabled){cursor:pointer}.dp-ui-chat-spawn-copy{flex-direction:column;flex:1;min-width:0;display:flex}.dp-ui-chat-spawn-copy small,.dp-ui-chat-spawn-status{color:var(--dp-ui-chat-muted);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}
2
+ /*$vite$:1*/
Binary file