@blade-hq/agent-kit 0.4.1 → 0.4.5

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 (796) hide show
  1. package/README.md +70 -0
  2. package/dist/{internal/core/schemas/message.d.ts → AskUserQuestionBlock-CjvG_pUY.d.ts} +48 -16
  3. package/dist/SkillStatusBar-DItrW2vv.d.ts +203 -0
  4. package/dist/blade-client-nOsdVlb1.d.ts +1498 -0
  5. package/dist/client/index.d.ts +8525 -0
  6. package/dist/client/index.js +1076 -0
  7. package/dist/client/index.js.map +1 -0
  8. package/dist/licenses-Cxl1xGVy.d.ts +16 -0
  9. package/dist/{internal/core/schemas/projection.d.ts → projection-DIfyh6RK.d.ts} +10 -13
  10. package/dist/react/api/licenses.d.ts +7 -0
  11. package/dist/react/api/licenses.js +1477 -0
  12. package/dist/react/api/licenses.js.map +1 -0
  13. package/dist/react/api/vibe-coding.d.ts +55 -0
  14. package/dist/react/api/vibe-coding.js +1503 -0
  15. package/dist/react/api/vibe-coding.js.map +1 -0
  16. package/dist/react/cards/register.d.ts +2 -0
  17. package/dist/react/cards/register.js +4367 -0
  18. package/dist/react/cards/register.js.map +1 -0
  19. package/dist/react/components/chat/index.d.ts +128 -0
  20. package/dist/react/components/chat/index.js +11389 -0
  21. package/dist/react/components/chat/index.js.map +1 -0
  22. package/dist/react/components/plan/index.d.ts +111 -0
  23. package/dist/react/components/plan/index.js +3490 -0
  24. package/dist/react/components/plan/index.js.map +1 -0
  25. package/dist/react/components/session/index.d.ts +53 -0
  26. package/dist/react/components/session/index.js +2175 -0
  27. package/dist/react/components/session/index.js.map +1 -0
  28. package/dist/react/components/workspace/index.d.ts +35 -0
  29. package/dist/react/components/workspace/index.js +2886 -0
  30. package/dist/react/components/workspace/index.js.map +1 -0
  31. package/dist/react/devtools/bridge-devtools/index.d.ts +36 -0
  32. package/dist/react/devtools/bridge-devtools/index.js +692 -0
  33. package/dist/react/devtools/bridge-devtools/index.js.map +1 -0
  34. package/dist/react/index.d.ts +1355 -0
  35. package/dist/react/index.js +14407 -0
  36. package/dist/react/index.js.map +1 -0
  37. package/dist/{internal/core/schemas/session.d.ts → session-CDeiO81j.d.ts} +44 -17
  38. package/dist/style.css +2 -0
  39. package/package.json +24 -15
  40. package/dist/client.d.ts +0 -16
  41. package/dist/client.d.ts.map +0 -1
  42. package/dist/client.js +0 -75
  43. package/dist/client.js.map +0 -1
  44. package/dist/index.d.ts +0 -1
  45. package/dist/index.d.ts.map +0 -1
  46. package/dist/index.js +0 -2
  47. package/dist/index.js.map +0 -1
  48. package/dist/internal/core/api/auth-resolve.d.ts +0 -10
  49. package/dist/internal/core/api/auth-resolve.d.ts.map +0 -1
  50. package/dist/internal/core/api/auth-resolve.js +0 -25
  51. package/dist/internal/core/api/auth-resolve.js.map +0 -1
  52. package/dist/internal/core/api/auth.d.ts +0 -22
  53. package/dist/internal/core/api/auth.d.ts.map +0 -1
  54. package/dist/internal/core/api/auth.js +0 -13
  55. package/dist/internal/core/api/auth.js.map +0 -1
  56. package/dist/internal/core/api/client.d.ts +0 -20
  57. package/dist/internal/core/api/client.d.ts.map +0 -1
  58. package/dist/internal/core/api/client.js +0 -135
  59. package/dist/internal/core/api/client.js.map +0 -1
  60. package/dist/internal/core/api/gis-api.d.ts +0 -4
  61. package/dist/internal/core/api/gis-api.d.ts.map +0 -1
  62. package/dist/internal/core/api/gis-api.js +0 -8
  63. package/dist/internal/core/api/gis-api.js.map +0 -1
  64. package/dist/internal/core/api/licenses.d.ts +0 -26
  65. package/dist/internal/core/api/licenses.d.ts.map +0 -1
  66. package/dist/internal/core/api/licenses.js +0 -40
  67. package/dist/internal/core/api/licenses.js.map +0 -1
  68. package/dist/internal/core/api/memories.d.ts +0 -46
  69. package/dist/internal/core/api/memories.d.ts.map +0 -1
  70. package/dist/internal/core/api/memories.js +0 -49
  71. package/dist/internal/core/api/memories.js.map +0 -1
  72. package/dist/internal/core/api/models.d.ts +0 -15
  73. package/dist/internal/core/api/models.d.ts.map +0 -1
  74. package/dist/internal/core/api/models.js +0 -15
  75. package/dist/internal/core/api/models.js.map +0 -1
  76. package/dist/internal/core/api/partner-skill.d.ts +0 -3
  77. package/dist/internal/core/api/partner-skill.d.ts.map +0 -1
  78. package/dist/internal/core/api/partner-skill.js +0 -9
  79. package/dist/internal/core/api/partner-skill.js.map +0 -1
  80. package/dist/internal/core/api/registry.d.ts +0 -272
  81. package/dist/internal/core/api/registry.d.ts.map +0 -1
  82. package/dist/internal/core/api/registry.js +0 -67
  83. package/dist/internal/core/api/registry.js.map +0 -1
  84. package/dist/internal/core/api/scenarios.d.ts +0 -51
  85. package/dist/internal/core/api/scenarios.d.ts.map +0 -1
  86. package/dist/internal/core/api/scenarios.js +0 -30
  87. package/dist/internal/core/api/scenarios.js.map +0 -1
  88. package/dist/internal/core/api/sessions.d.ts +0 -223
  89. package/dist/internal/core/api/sessions.d.ts.map +0 -1
  90. package/dist/internal/core/api/sessions.js +0 -340
  91. package/dist/internal/core/api/sessions.js.map +0 -1
  92. package/dist/internal/core/api/skills.d.ts +0 -19
  93. package/dist/internal/core/api/skills.d.ts.map +0 -1
  94. package/dist/internal/core/api/skills.js +0 -28
  95. package/dist/internal/core/api/skills.js.map +0 -1
  96. package/dist/internal/core/api/socket.d.ts +0 -56
  97. package/dist/internal/core/api/socket.d.ts.map +0 -1
  98. package/dist/internal/core/api/socket.js +0 -824
  99. package/dist/internal/core/api/socket.js.map +0 -1
  100. package/dist/internal/core/api/software-factory.d.ts +0 -126
  101. package/dist/internal/core/api/software-factory.d.ts.map +0 -1
  102. package/dist/internal/core/api/software-factory.js +0 -130
  103. package/dist/internal/core/api/software-factory.js.map +0 -1
  104. package/dist/internal/core/api/solutions.d.ts +0 -5
  105. package/dist/internal/core/api/solutions.d.ts.map +0 -1
  106. package/dist/internal/core/api/solutions.js +0 -21
  107. package/dist/internal/core/api/solutions.js.map +0 -1
  108. package/dist/internal/core/api/user-preferences.d.ts +0 -3
  109. package/dist/internal/core/api/user-preferences.d.ts.map +0 -1
  110. package/dist/internal/core/api/user-preferences.js +0 -12
  111. package/dist/internal/core/api/user-preferences.js.map +0 -1
  112. package/dist/internal/core/api/vibe-coding.d.ts +0 -90
  113. package/dist/internal/core/api/vibe-coding.d.ts.map +0 -1
  114. package/dist/internal/core/api/vibe-coding.js +0 -121
  115. package/dist/internal/core/api/vibe-coding.js.map +0 -1
  116. package/dist/internal/core/asr/VoiceWaveform.d.ts +0 -11
  117. package/dist/internal/core/asr/VoiceWaveform.d.ts.map +0 -1
  118. package/dist/internal/core/asr/VoiceWaveform.js +0 -28
  119. package/dist/internal/core/asr/VoiceWaveform.js.map +0 -1
  120. package/dist/internal/core/asr/use-tiptap-voice-input.d.ts +0 -30
  121. package/dist/internal/core/asr/use-tiptap-voice-input.d.ts.map +0 -1
  122. package/dist/internal/core/asr/use-tiptap-voice-input.js +0 -100
  123. package/dist/internal/core/asr/use-tiptap-voice-input.js.map +0 -1
  124. package/dist/internal/core/asr/use-voice-input.d.ts +0 -18
  125. package/dist/internal/core/asr/use-voice-input.d.ts.map +0 -1
  126. package/dist/internal/core/asr/use-voice-input.js +0 -312
  127. package/dist/internal/core/asr/use-voice-input.js.map +0 -1
  128. package/dist/internal/core/asr/voice-input-support.d.ts +0 -6
  129. package/dist/internal/core/asr/voice-input-support.d.ts.map +0 -1
  130. package/dist/internal/core/asr/voice-input-support.js +0 -35
  131. package/dist/internal/core/asr/voice-input-support.js.map +0 -1
  132. package/dist/internal/core/components/ai-elements/file-tree.d.ts +0 -27
  133. package/dist/internal/core/components/ai-elements/file-tree.d.ts.map +0 -1
  134. package/dist/internal/core/components/ai-elements/file-tree.js +0 -73
  135. package/dist/internal/core/components/ai-elements/file-tree.js.map +0 -1
  136. package/dist/internal/core/components/ai-elements/reasoning.d.ts +0 -33
  137. package/dist/internal/core/components/ai-elements/reasoning.d.ts.map +0 -1
  138. package/dist/internal/core/components/ai-elements/reasoning.js +0 -124
  139. package/dist/internal/core/components/ai-elements/reasoning.js.map +0 -1
  140. package/dist/internal/core/components/ai-elements/shimmer.d.ts +0 -10
  141. package/dist/internal/core/components/ai-elements/shimmer.d.ts.map +0 -1
  142. package/dist/internal/core/components/ai-elements/shimmer.js +0 -29
  143. package/dist/internal/core/components/ai-elements/shimmer.js.map +0 -1
  144. package/dist/internal/core/components/card/CardCodeBlock.d.ts +0 -6
  145. package/dist/internal/core/components/card/CardCodeBlock.d.ts.map +0 -1
  146. package/dist/internal/core/components/card/CardCodeBlock.js +0 -24
  147. package/dist/internal/core/components/card/CardCodeBlock.js.map +0 -1
  148. package/dist/internal/core/components/card/CardContext.d.ts +0 -8
  149. package/dist/internal/core/components/card/CardContext.d.ts.map +0 -1
  150. package/dist/internal/core/components/card/CardContext.js +0 -4
  151. package/dist/internal/core/components/card/CardContext.js.map +0 -1
  152. package/dist/internal/core/components/card/CardRenderer.d.ts +0 -8
  153. package/dist/internal/core/components/card/CardRenderer.d.ts.map +0 -1
  154. package/dist/internal/core/components/card/CardRenderer.js +0 -82
  155. package/dist/internal/core/components/card/CardRenderer.js.map +0 -1
  156. package/dist/internal/core/components/card/CardStates.d.ts +0 -9
  157. package/dist/internal/core/components/card/CardStates.d.ts.map +0 -1
  158. package/dist/internal/core/components/card/CardStates.js +0 -11
  159. package/dist/internal/core/components/card/CardStates.js.map +0 -1
  160. package/dist/internal/core/components/card/cards/attraction-card.d.ts +0 -3
  161. package/dist/internal/core/components/card/cards/attraction-card.d.ts.map +0 -1
  162. package/dist/internal/core/components/card/cards/attraction-card.js +0 -10
  163. package/dist/internal/core/components/card/cards/attraction-card.js.map +0 -1
  164. package/dist/internal/core/components/card/cards/cite-card.d.ts +0 -11
  165. package/dist/internal/core/components/card/cards/cite-card.d.ts.map +0 -1
  166. package/dist/internal/core/components/card/cards/cite-card.js +0 -12
  167. package/dist/internal/core/components/card/cards/cite-card.js.map +0 -1
  168. package/dist/internal/core/components/card/cards/comprehensive-analysis-card.d.ts +0 -3
  169. package/dist/internal/core/components/card/cards/comprehensive-analysis-card.d.ts.map +0 -1
  170. package/dist/internal/core/components/card/cards/comprehensive-analysis-card.js +0 -160
  171. package/dist/internal/core/components/card/cards/comprehensive-analysis-card.js.map +0 -1
  172. package/dist/internal/core/components/card/cards/conflict-detection-card.d.ts +0 -5
  173. package/dist/internal/core/components/card/cards/conflict-detection-card.d.ts.map +0 -1
  174. package/dist/internal/core/components/card/cards/conflict-detection-card.js +0 -46
  175. package/dist/internal/core/components/card/cards/conflict-detection-card.js.map +0 -1
  176. package/dist/internal/core/components/card/cards/counter.d.ts +0 -3
  177. package/dist/internal/core/components/card/cards/counter.d.ts.map +0 -1
  178. package/dist/internal/core/components/card/cards/counter.js +0 -10
  179. package/dist/internal/core/components/card/cards/counter.js.map +0 -1
  180. package/dist/internal/core/components/card/cards/damage-effect-card.d.ts +0 -5
  181. package/dist/internal/core/components/card/cards/damage-effect-card.d.ts.map +0 -1
  182. package/dist/internal/core/components/card/cards/damage-effect-card.js +0 -138
  183. package/dist/internal/core/components/card/cards/damage-effect-card.js.map +0 -1
  184. package/dist/internal/core/components/card/cards/destination-card.d.ts +0 -3
  185. package/dist/internal/core/components/card/cards/destination-card.d.ts.map +0 -1
  186. package/dist/internal/core/components/card/cards/destination-card.js +0 -10
  187. package/dist/internal/core/components/card/cards/destination-card.js.map +0 -1
  188. package/dist/internal/core/components/card/cards/diff-card.d.ts +0 -3
  189. package/dist/internal/core/components/card/cards/diff-card.d.ts.map +0 -1
  190. package/dist/internal/core/components/card/cards/diff-card.js +0 -81
  191. package/dist/internal/core/components/card/cards/diff-card.js.map +0 -1
  192. package/dist/internal/core/components/card/cards/execution-order-card.d.ts +0 -3
  193. package/dist/internal/core/components/card/cards/execution-order-card.d.ts.map +0 -1
  194. package/dist/internal/core/components/card/cards/execution-order-card.js +0 -97
  195. package/dist/internal/core/components/card/cards/execution-order-card.js.map +0 -1
  196. package/dist/internal/core/components/card/cards/experience-card-with-options.d.ts +0 -5
  197. package/dist/internal/core/components/card/cards/experience-card-with-options.d.ts.map +0 -1
  198. package/dist/internal/core/components/card/cards/experience-card-with-options.js +0 -113
  199. package/dist/internal/core/components/card/cards/experience-card-with-options.js.map +0 -1
  200. package/dist/internal/core/components/card/cards/flight-card.d.ts +0 -3
  201. package/dist/internal/core/components/card/cards/flight-card.d.ts.map +0 -1
  202. package/dist/internal/core/components/card/cards/flight-card.js +0 -10
  203. package/dist/internal/core/components/card/cards/flight-card.js.map +0 -1
  204. package/dist/internal/core/components/card/cards/hotel-card.d.ts +0 -3
  205. package/dist/internal/core/components/card/cards/hotel-card.d.ts.map +0 -1
  206. package/dist/internal/core/components/card/cards/hotel-card.js +0 -10
  207. package/dist/internal/core/components/card/cards/hotel-card.js.map +0 -1
  208. package/dist/internal/core/components/card/cards/kill-chain-card.d.ts +0 -3
  209. package/dist/internal/core/components/card/cards/kill-chain-card.d.ts.map +0 -1
  210. package/dist/internal/core/components/card/cards/kill-chain-card.js +0 -230
  211. package/dist/internal/core/components/card/cards/kill-chain-card.js.map +0 -1
  212. package/dist/internal/core/components/card/cards/kill-chain-types.d.ts +0 -158
  213. package/dist/internal/core/components/card/cards/kill-chain-types.d.ts.map +0 -1
  214. package/dist/internal/core/components/card/cards/kill-chain-types.js +0 -9
  215. package/dist/internal/core/components/card/cards/kill-chain-types.js.map +0 -1
  216. package/dist/internal/core/components/card/cards/map-card.d.ts +0 -3
  217. package/dist/internal/core/components/card/cards/map-card.d.ts.map +0 -1
  218. package/dist/internal/core/components/card/cards/map-card.js +0 -60
  219. package/dist/internal/core/components/card/cards/map-card.js.map +0 -1
  220. package/dist/internal/core/components/card/cards/order-status-card.d.ts +0 -3
  221. package/dist/internal/core/components/card/cards/order-status-card.d.ts.map +0 -1
  222. package/dist/internal/core/components/card/cards/order-status-card.js +0 -57
  223. package/dist/internal/core/components/card/cards/order-status-card.js.map +0 -1
  224. package/dist/internal/core/components/card/cards/patch-card.d.ts +0 -16
  225. package/dist/internal/core/components/card/cards/patch-card.d.ts.map +0 -1
  226. package/dist/internal/core/components/card/cards/patch-card.js +0 -47
  227. package/dist/internal/core/components/card/cards/patch-card.js.map +0 -1
  228. package/dist/internal/core/components/card/cards/product-recommendation-card.d.ts +0 -3
  229. package/dist/internal/core/components/card/cards/product-recommendation-card.d.ts.map +0 -1
  230. package/dist/internal/core/components/card/cards/product-recommendation-card.js +0 -18
  231. package/dist/internal/core/components/card/cards/product-recommendation-card.js.map +0 -1
  232. package/dist/internal/core/components/card/cards/reflection-optimization-card.d.ts +0 -3
  233. package/dist/internal/core/components/card/cards/reflection-optimization-card.d.ts.map +0 -1
  234. package/dist/internal/core/components/card/cards/reflection-optimization-card.js +0 -51
  235. package/dist/internal/core/components/card/cards/reflection-optimization-card.js.map +0 -1
  236. package/dist/internal/core/components/card/cards/resolution-modifications-card.d.ts +0 -3
  237. package/dist/internal/core/components/card/cards/resolution-modifications-card.d.ts.map +0 -1
  238. package/dist/internal/core/components/card/cards/resolution-modifications-card.js +0 -85
  239. package/dist/internal/core/components/card/cards/resolution-modifications-card.js.map +0 -1
  240. package/dist/internal/core/components/card/cards/resolution-summary-card.d.ts +0 -3
  241. package/dist/internal/core/components/card/cards/resolution-summary-card.d.ts.map +0 -1
  242. package/dist/internal/core/components/card/cards/resolution-summary-card.js +0 -55
  243. package/dist/internal/core/components/card/cards/resolution-summary-card.js.map +0 -1
  244. package/dist/internal/core/components/card/cards/restaurant-card.d.ts +0 -3
  245. package/dist/internal/core/components/card/cards/restaurant-card.d.ts.map +0 -1
  246. package/dist/internal/core/components/card/cards/restaurant-card.js +0 -10
  247. package/dist/internal/core/components/card/cards/restaurant-card.js.map +0 -1
  248. package/dist/internal/core/components/card/cards/shopping-list-card.d.ts +0 -3
  249. package/dist/internal/core/components/card/cards/shopping-list-card.d.ts.map +0 -1
  250. package/dist/internal/core/components/card/cards/shopping-list-card.js +0 -17
  251. package/dist/internal/core/components/card/cards/shopping-list-card.js.map +0 -1
  252. package/dist/internal/core/components/card/cards/simulation-event-card.d.ts +0 -5
  253. package/dist/internal/core/components/card/cards/simulation-event-card.d.ts.map +0 -1
  254. package/dist/internal/core/components/card/cards/simulation-event-card.js +0 -116
  255. package/dist/internal/core/components/card/cards/simulation-event-card.js.map +0 -1
  256. package/dist/internal/core/components/card/cards/survival-effect-card.d.ts +0 -5
  257. package/dist/internal/core/components/card/cards/survival-effect-card.d.ts.map +0 -1
  258. package/dist/internal/core/components/card/cards/survival-effect-card.js +0 -76
  259. package/dist/internal/core/components/card/cards/survival-effect-card.js.map +0 -1
  260. package/dist/internal/core/components/card/cards/travel-itinerary-card.d.ts +0 -3
  261. package/dist/internal/core/components/card/cards/travel-itinerary-card.d.ts.map +0 -1
  262. package/dist/internal/core/components/card/cards/travel-itinerary-card.js +0 -16
  263. package/dist/internal/core/components/card/cards/travel-itinerary-card.js.map +0 -1
  264. package/dist/internal/core/components/card/register.d.ts +0 -2
  265. package/dist/internal/core/components/card/register.d.ts.map +0 -1
  266. package/dist/internal/core/components/card/register.js +0 -64
  267. package/dist/internal/core/components/card/register.js.map +0 -1
  268. package/dist/internal/core/components/chat/AgentLoopBlock.d.ts +0 -9
  269. package/dist/internal/core/components/chat/AgentLoopBlock.d.ts.map +0 -1
  270. package/dist/internal/core/components/chat/AgentLoopBlock.js +0 -174
  271. package/dist/internal/core/components/chat/AgentLoopBlock.js.map +0 -1
  272. package/dist/internal/core/components/chat/AskUserQuestionBlock.d.ts +0 -33
  273. package/dist/internal/core/components/chat/AskUserQuestionBlock.d.ts.map +0 -1
  274. package/dist/internal/core/components/chat/AskUserQuestionBlock.js +0 -178
  275. package/dist/internal/core/components/chat/AskUserQuestionBlock.js.map +0 -1
  276. package/dist/internal/core/components/chat/AssistantTurnBlock.d.ts +0 -17
  277. package/dist/internal/core/components/chat/AssistantTurnBlock.d.ts.map +0 -1
  278. package/dist/internal/core/components/chat/AssistantTurnBlock.js +0 -181
  279. package/dist/internal/core/components/chat/AssistantTurnBlock.js.map +0 -1
  280. package/dist/internal/core/components/chat/AttachmentPreviewDialog.d.ts +0 -27
  281. package/dist/internal/core/components/chat/AttachmentPreviewDialog.d.ts.map +0 -1
  282. package/dist/internal/core/components/chat/AttachmentPreviewDialog.js +0 -64
  283. package/dist/internal/core/components/chat/AttachmentPreviewDialog.js.map +0 -1
  284. package/dist/internal/core/components/chat/ChatInput.d.ts +0 -65
  285. package/dist/internal/core/components/chat/ChatInput.d.ts.map +0 -1
  286. package/dist/internal/core/components/chat/ChatInput.js +0 -1127
  287. package/dist/internal/core/components/chat/ChatInput.js.map +0 -1
  288. package/dist/internal/core/components/chat/ChatView.d.ts +0 -14
  289. package/dist/internal/core/components/chat/ChatView.d.ts.map +0 -1
  290. package/dist/internal/core/components/chat/ChatView.js +0 -28
  291. package/dist/internal/core/components/chat/ChatView.js.map +0 -1
  292. package/dist/internal/core/components/chat/CompactionCard.d.ts +0 -7
  293. package/dist/internal/core/components/chat/CompactionCard.d.ts.map +0 -1
  294. package/dist/internal/core/components/chat/CompactionCard.js +0 -82
  295. package/dist/internal/core/components/chat/CompactionCard.js.map +0 -1
  296. package/dist/internal/core/components/chat/ConnectionBanner.d.ts +0 -2
  297. package/dist/internal/core/components/chat/ConnectionBanner.d.ts.map +0 -1
  298. package/dist/internal/core/components/chat/ConnectionBanner.js +0 -37
  299. package/dist/internal/core/components/chat/ConnectionBanner.js.map +0 -1
  300. package/dist/internal/core/components/chat/FileCompletionMenu.d.ts +0 -14
  301. package/dist/internal/core/components/chat/FileCompletionMenu.d.ts.map +0 -1
  302. package/dist/internal/core/components/chat/FileCompletionMenu.js +0 -163
  303. package/dist/internal/core/components/chat/FileCompletionMenu.js.map +0 -1
  304. package/dist/internal/core/components/chat/FileSizeLimitDialog.d.ts +0 -10
  305. package/dist/internal/core/components/chat/FileSizeLimitDialog.d.ts.map +0 -1
  306. package/dist/internal/core/components/chat/FileSizeLimitDialog.js +0 -30
  307. package/dist/internal/core/components/chat/FileSizeLimitDialog.js.map +0 -1
  308. package/dist/internal/core/components/chat/ImageLightbox.d.ts +0 -12
  309. package/dist/internal/core/components/chat/ImageLightbox.d.ts.map +0 -1
  310. package/dist/internal/core/components/chat/ImageLightbox.js +0 -140
  311. package/dist/internal/core/components/chat/ImageLightbox.js.map +0 -1
  312. package/dist/internal/core/components/chat/MessageActions.d.ts +0 -7
  313. package/dist/internal/core/components/chat/MessageActions.d.ts.map +0 -1
  314. package/dist/internal/core/components/chat/MessageActions.js +0 -18
  315. package/dist/internal/core/components/chat/MessageActions.js.map +0 -1
  316. package/dist/internal/core/components/chat/MessageContextPills.d.ts +0 -7
  317. package/dist/internal/core/components/chat/MessageContextPills.d.ts.map +0 -1
  318. package/dist/internal/core/components/chat/MessageContextPills.js +0 -8
  319. package/dist/internal/core/components/chat/MessageContextPills.js.map +0 -1
  320. package/dist/internal/core/components/chat/MessageFileAttachmentList.d.ts +0 -14
  321. package/dist/internal/core/components/chat/MessageFileAttachmentList.d.ts.map +0 -1
  322. package/dist/internal/core/components/chat/MessageFileAttachmentList.js +0 -38
  323. package/dist/internal/core/components/chat/MessageFileAttachmentList.js.map +0 -1
  324. package/dist/internal/core/components/chat/MessageList.d.ts +0 -12
  325. package/dist/internal/core/components/chat/MessageList.d.ts.map +0 -1
  326. package/dist/internal/core/components/chat/MessageList.js +0 -315
  327. package/dist/internal/core/components/chat/MessageList.js.map +0 -1
  328. package/dist/internal/core/components/chat/ProgressCircle.d.ts +0 -13
  329. package/dist/internal/core/components/chat/ProgressCircle.d.ts.map +0 -1
  330. package/dist/internal/core/components/chat/ProgressCircle.js +0 -28
  331. package/dist/internal/core/components/chat/ProgressCircle.js.map +0 -1
  332. package/dist/internal/core/components/chat/RenderErrorBoundary.d.ts +0 -20
  333. package/dist/internal/core/components/chat/RenderErrorBoundary.d.ts.map +0 -1
  334. package/dist/internal/core/components/chat/RenderErrorBoundary.js +0 -39
  335. package/dist/internal/core/components/chat/RenderErrorBoundary.js.map +0 -1
  336. package/dist/internal/core/components/chat/ResourceIframe.d.ts +0 -6
  337. package/dist/internal/core/components/chat/ResourceIframe.d.ts.map +0 -1
  338. package/dist/internal/core/components/chat/ResourceIframe.js +0 -124
  339. package/dist/internal/core/components/chat/ResourceIframe.js.map +0 -1
  340. package/dist/internal/core/components/chat/Shimmer.d.ts +0 -7
  341. package/dist/internal/core/components/chat/Shimmer.d.ts.map +0 -1
  342. package/dist/internal/core/components/chat/Shimmer.js +0 -6
  343. package/dist/internal/core/components/chat/Shimmer.js.map +0 -1
  344. package/dist/internal/core/components/chat/SkillCompletionMenu.d.ts +0 -10
  345. package/dist/internal/core/components/chat/SkillCompletionMenu.d.ts.map +0 -1
  346. package/dist/internal/core/components/chat/SkillCompletionMenu.js +0 -65
  347. package/dist/internal/core/components/chat/SkillCompletionMenu.js.map +0 -1
  348. package/dist/internal/core/components/chat/SkillStatusBar.d.ts +0 -7
  349. package/dist/internal/core/components/chat/SkillStatusBar.d.ts.map +0 -1
  350. package/dist/internal/core/components/chat/SkillStatusBar.js +0 -113
  351. package/dist/internal/core/components/chat/SkillStatusBar.js.map +0 -1
  352. package/dist/internal/core/components/chat/StickyStatusBar.d.ts +0 -11
  353. package/dist/internal/core/components/chat/StickyStatusBar.d.ts.map +0 -1
  354. package/dist/internal/core/components/chat/StickyStatusBar.js +0 -115
  355. package/dist/internal/core/components/chat/StickyStatusBar.js.map +0 -1
  356. package/dist/internal/core/components/chat/TextAttachmentPills.d.ts +0 -11
  357. package/dist/internal/core/components/chat/TextAttachmentPills.d.ts.map +0 -1
  358. package/dist/internal/core/components/chat/TextAttachmentPills.js +0 -35
  359. package/dist/internal/core/components/chat/TextAttachmentPills.js.map +0 -1
  360. package/dist/internal/core/components/chat/ToolCallBlock.d.ts +0 -17
  361. package/dist/internal/core/components/chat/ToolCallBlock.d.ts.map +0 -1
  362. package/dist/internal/core/components/chat/ToolCallBlock.js +0 -172
  363. package/dist/internal/core/components/chat/ToolCallBlock.js.map +0 -1
  364. package/dist/internal/core/components/chat/TurnNavRail.d.ts +0 -12
  365. package/dist/internal/core/components/chat/TurnNavRail.d.ts.map +0 -1
  366. package/dist/internal/core/components/chat/TurnNavRail.js +0 -14
  367. package/dist/internal/core/components/chat/TurnNavRail.js.map +0 -1
  368. package/dist/internal/core/components/chat/UserMessageBubble.d.ts +0 -18
  369. package/dist/internal/core/components/chat/UserMessageBubble.d.ts.map +0 -1
  370. package/dist/internal/core/components/chat/UserMessageBubble.js +0 -130
  371. package/dist/internal/core/components/chat/UserMessageBubble.js.map +0 -1
  372. package/dist/internal/core/components/chat/WhatIfUserBubble.d.ts +0 -14
  373. package/dist/internal/core/components/chat/WhatIfUserBubble.d.ts.map +0 -1
  374. package/dist/internal/core/components/chat/WhatIfUserBubble.js +0 -20
  375. package/dist/internal/core/components/chat/WhatIfUserBubble.js.map +0 -1
  376. package/dist/internal/core/components/chat/display-utils.d.ts +0 -36
  377. package/dist/internal/core/components/chat/display-utils.d.ts.map +0 -1
  378. package/dist/internal/core/components/chat/display-utils.js +0 -533
  379. package/dist/internal/core/components/chat/display-utils.js.map +0 -1
  380. package/dist/internal/core/components/chat/extensions/file-mention.d.ts +0 -13
  381. package/dist/internal/core/components/chat/extensions/file-mention.d.ts.map +0 -1
  382. package/dist/internal/core/components/chat/extensions/file-mention.js +0 -52
  383. package/dist/internal/core/components/chat/extensions/file-mention.js.map +0 -1
  384. package/dist/internal/core/components/chat/extensions/skill-mention.d.ts +0 -26
  385. package/dist/internal/core/components/chat/extensions/skill-mention.d.ts.map +0 -1
  386. package/dist/internal/core/components/chat/extensions/skill-mention.js +0 -72
  387. package/dist/internal/core/components/chat/extensions/skill-mention.js.map +0 -1
  388. package/dist/internal/core/components/chat/index.d.ts +0 -15
  389. package/dist/internal/core/components/chat/index.d.ts.map +0 -1
  390. package/dist/internal/core/components/chat/index.js +0 -15
  391. package/dist/internal/core/components/chat/index.js.map +0 -1
  392. package/dist/internal/core/components/chat/tool-renderers/BashRenderer.d.ts +0 -3
  393. package/dist/internal/core/components/chat/tool-renderers/BashRenderer.d.ts.map +0 -1
  394. package/dist/internal/core/components/chat/tool-renderers/BashRenderer.js +0 -52
  395. package/dist/internal/core/components/chat/tool-renderers/BashRenderer.js.map +0 -1
  396. package/dist/internal/core/components/chat/tool-renderers/FileEditRenderer.d.ts +0 -3
  397. package/dist/internal/core/components/chat/tool-renderers/FileEditRenderer.d.ts.map +0 -1
  398. package/dist/internal/core/components/chat/tool-renderers/FileEditRenderer.js +0 -108
  399. package/dist/internal/core/components/chat/tool-renderers/FileEditRenderer.js.map +0 -1
  400. package/dist/internal/core/components/chat/tool-renderers/FileReadRenderer.d.ts +0 -3
  401. package/dist/internal/core/components/chat/tool-renderers/FileReadRenderer.d.ts.map +0 -1
  402. package/dist/internal/core/components/chat/tool-renderers/FileReadRenderer.js +0 -75
  403. package/dist/internal/core/components/chat/tool-renderers/FileReadRenderer.js.map +0 -1
  404. package/dist/internal/core/components/chat/tool-renderers/SearchRenderer.d.ts +0 -3
  405. package/dist/internal/core/components/chat/tool-renderers/SearchRenderer.d.ts.map +0 -1
  406. package/dist/internal/core/components/chat/tool-renderers/SearchRenderer.js +0 -96
  407. package/dist/internal/core/components/chat/tool-renderers/SearchRenderer.js.map +0 -1
  408. package/dist/internal/core/components/chat/tool-renderers/registry.d.ts +0 -10
  409. package/dist/internal/core/components/chat/tool-renderers/registry.d.ts.map +0 -1
  410. package/dist/internal/core/components/chat/tool-renderers/registry.js +0 -21
  411. package/dist/internal/core/components/chat/tool-renderers/registry.js.map +0 -1
  412. package/dist/internal/core/components/chat/tool-renderers/shared.d.ts +0 -27
  413. package/dist/internal/core/components/chat/tool-renderers/shared.d.ts.map +0 -1
  414. package/dist/internal/core/components/chat/tool-renderers/shared.js +0 -116
  415. package/dist/internal/core/components/chat/tool-renderers/shared.js.map +0 -1
  416. package/dist/internal/core/components/chat/whatif-quote-context.d.ts +0 -16
  417. package/dist/internal/core/components/chat/whatif-quote-context.d.ts.map +0 -1
  418. package/dist/internal/core/components/chat/whatif-quote-context.js +0 -16
  419. package/dist/internal/core/components/chat/whatif-quote-context.js.map +0 -1
  420. package/dist/internal/core/components/markdown/MarkdownContent.d.ts +0 -10
  421. package/dist/internal/core/components/markdown/MarkdownContent.d.ts.map +0 -1
  422. package/dist/internal/core/components/markdown/MarkdownContent.js +0 -95
  423. package/dist/internal/core/components/markdown/MarkdownContent.js.map +0 -1
  424. package/dist/internal/core/components/model/ModelSelector.d.ts +0 -10
  425. package/dist/internal/core/components/model/ModelSelector.d.ts.map +0 -1
  426. package/dist/internal/core/components/model/ModelSelector.js +0 -48
  427. package/dist/internal/core/components/model/ModelSelector.js.map +0 -1
  428. package/dist/internal/core/components/plan/PlanSummaryCard.d.ts +0 -9
  429. package/dist/internal/core/components/plan/PlanSummaryCard.d.ts.map +0 -1
  430. package/dist/internal/core/components/plan/PlanSummaryCard.js +0 -75
  431. package/dist/internal/core/components/plan/PlanSummaryCard.js.map +0 -1
  432. package/dist/internal/core/components/plan/PlanVisualization.d.ts +0 -14
  433. package/dist/internal/core/components/plan/PlanVisualization.d.ts.map +0 -1
  434. package/dist/internal/core/components/plan/PlanVisualization.js +0 -82
  435. package/dist/internal/core/components/plan/PlanVisualization.js.map +0 -1
  436. package/dist/internal/core/components/plan/debug-log.d.ts +0 -22
  437. package/dist/internal/core/components/plan/debug-log.d.ts.map +0 -1
  438. package/dist/internal/core/components/plan/debug-log.js +0 -47
  439. package/dist/internal/core/components/plan/debug-log.js.map +0 -1
  440. package/dist/internal/core/components/plan/extract-plan-messages.d.ts +0 -3
  441. package/dist/internal/core/components/plan/extract-plan-messages.d.ts.map +0 -1
  442. package/dist/internal/core/components/plan/extract-plan-messages.js +0 -59
  443. package/dist/internal/core/components/plan/extract-plan-messages.js.map +0 -1
  444. package/dist/internal/core/components/plan/index.d.ts +0 -7
  445. package/dist/internal/core/components/plan/index.d.ts.map +0 -1
  446. package/dist/internal/core/components/plan/index.js +0 -6
  447. package/dist/internal/core/components/plan/index.js.map +0 -1
  448. package/dist/internal/core/components/plan/parse-plan-messages.d.ts +0 -12
  449. package/dist/internal/core/components/plan/parse-plan-messages.d.ts.map +0 -1
  450. package/dist/internal/core/components/plan/parse-plan-messages.js +0 -272
  451. package/dist/internal/core/components/plan/parse-plan-messages.js.map +0 -1
  452. package/dist/internal/core/components/plan/parse-plan-tree.d.ts +0 -17
  453. package/dist/internal/core/components/plan/parse-plan-tree.d.ts.map +0 -1
  454. package/dist/internal/core/components/plan/parse-plan-tree.js +0 -117
  455. package/dist/internal/core/components/plan/parse-plan-tree.js.map +0 -1
  456. package/dist/internal/core/components/plan/phases/PlanMindMap.d.ts +0 -9
  457. package/dist/internal/core/components/plan/phases/PlanMindMap.d.ts.map +0 -1
  458. package/dist/internal/core/components/plan/phases/PlanMindMap.js +0 -42
  459. package/dist/internal/core/components/plan/phases/PlanMindMap.js.map +0 -1
  460. package/dist/internal/core/components/plan/phases/PlanStatusIcon.d.ts +0 -6
  461. package/dist/internal/core/components/plan/phases/PlanStatusIcon.d.ts.map +0 -1
  462. package/dist/internal/core/components/plan/phases/PlanStatusIcon.js +0 -15
  463. package/dist/internal/core/components/plan/phases/PlanStatusIcon.js.map +0 -1
  464. package/dist/internal/core/components/plan/phases/PlanTree.d.ts +0 -9
  465. package/dist/internal/core/components/plan/phases/PlanTree.d.ts.map +0 -1
  466. package/dist/internal/core/components/plan/phases/PlanTree.js +0 -55
  467. package/dist/internal/core/components/plan/phases/PlanTree.js.map +0 -1
  468. package/dist/internal/core/components/plan/phases/SkillAnalysis.d.ts +0 -8
  469. package/dist/internal/core/components/plan/phases/SkillAnalysis.d.ts.map +0 -1
  470. package/dist/internal/core/components/plan/phases/SkillAnalysis.js +0 -22
  471. package/dist/internal/core/components/plan/phases/SkillAnalysis.js.map +0 -1
  472. package/dist/internal/core/components/plan/phases/SkillDiscovery.d.ts +0 -11
  473. package/dist/internal/core/components/plan/phases/SkillDiscovery.d.ts.map +0 -1
  474. package/dist/internal/core/components/plan/phases/SkillDiscovery.js +0 -52
  475. package/dist/internal/core/components/plan/phases/SkillDiscovery.js.map +0 -1
  476. package/dist/internal/core/components/plan/types.d.ts +0 -57
  477. package/dist/internal/core/components/plan/types.d.ts.map +0 -1
  478. package/dist/internal/core/components/plan/types.js +0 -2
  479. package/dist/internal/core/components/plan/types.js.map +0 -1
  480. package/dist/internal/core/components/session/SessionDetail.d.ts +0 -9
  481. package/dist/internal/core/components/session/SessionDetail.d.ts.map +0 -1
  482. package/dist/internal/core/components/session/SessionDetail.js +0 -248
  483. package/dist/internal/core/components/session/SessionDetail.js.map +0 -1
  484. package/dist/internal/core/components/session/SessionList.d.ts +0 -10
  485. package/dist/internal/core/components/session/SessionList.d.ts.map +0 -1
  486. package/dist/internal/core/components/session/SessionList.js +0 -28
  487. package/dist/internal/core/components/session/SessionList.js.map +0 -1
  488. package/dist/internal/core/components/session/SessionListItem.d.ts +0 -9
  489. package/dist/internal/core/components/session/SessionListItem.d.ts.map +0 -1
  490. package/dist/internal/core/components/session/SessionListItem.js +0 -10
  491. package/dist/internal/core/components/session/SessionListItem.js.map +0 -1
  492. package/dist/internal/core/components/session/StatusBadge.d.ts +0 -4
  493. package/dist/internal/core/components/session/StatusBadge.d.ts.map +0 -1
  494. package/dist/internal/core/components/session/StatusBadge.js +0 -47
  495. package/dist/internal/core/components/session/StatusBadge.js.map +0 -1
  496. package/dist/internal/core/components/session/index.d.ts +0 -6
  497. package/dist/internal/core/components/session/index.d.ts.map +0 -1
  498. package/dist/internal/core/components/session/index.js +0 -6
  499. package/dist/internal/core/components/session/index.js.map +0 -1
  500. package/dist/internal/core/components/session/session-utils.d.ts +0 -20
  501. package/dist/internal/core/components/session/session-utils.d.ts.map +0 -1
  502. package/dist/internal/core/components/session/session-utils.js +0 -130
  503. package/dist/internal/core/components/session/session-utils.js.map +0 -1
  504. package/dist/internal/core/components/ui/collapsible.d.ts +0 -6
  505. package/dist/internal/core/components/ui/collapsible.d.ts.map +0 -1
  506. package/dist/internal/core/components/ui/collapsible.js +0 -13
  507. package/dist/internal/core/components/ui/collapsible.js.map +0 -1
  508. package/dist/internal/core/components/workspace/FileTree.d.ts +0 -14
  509. package/dist/internal/core/components/workspace/FileTree.d.ts.map +0 -1
  510. package/dist/internal/core/components/workspace/FileTree.js +0 -521
  511. package/dist/internal/core/components/workspace/FileTree.js.map +0 -1
  512. package/dist/internal/core/components/workspace/WorkspaceFilesPanel.d.ts +0 -20
  513. package/dist/internal/core/components/workspace/WorkspaceFilesPanel.d.ts.map +0 -1
  514. package/dist/internal/core/components/workspace/WorkspaceFilesPanel.js +0 -142
  515. package/dist/internal/core/components/workspace/WorkspaceFilesPanel.js.map +0 -1
  516. package/dist/internal/core/components/workspace/index.d.ts +0 -3
  517. package/dist/internal/core/components/workspace/index.d.ts.map +0 -1
  518. package/dist/internal/core/components/workspace/index.js +0 -3
  519. package/dist/internal/core/components/workspace/index.js.map +0 -1
  520. package/dist/internal/core/devtools/bridge-devtools/BridgeDevtoolsFab.d.ts +0 -2
  521. package/dist/internal/core/devtools/bridge-devtools/BridgeDevtoolsFab.d.ts.map +0 -1
  522. package/dist/internal/core/devtools/bridge-devtools/BridgeDevtoolsFab.js +0 -306
  523. package/dist/internal/core/devtools/bridge-devtools/BridgeDevtoolsFab.js.map +0 -1
  524. package/dist/internal/core/devtools/bridge-devtools/index.d.ts +0 -4
  525. package/dist/internal/core/devtools/bridge-devtools/index.d.ts.map +0 -1
  526. package/dist/internal/core/devtools/bridge-devtools/index.js +0 -3
  527. package/dist/internal/core/devtools/bridge-devtools/index.js.map +0 -1
  528. package/dist/internal/core/devtools/bridge-devtools/mount.d.ts +0 -2
  529. package/dist/internal/core/devtools/bridge-devtools/mount.d.ts.map +0 -1
  530. package/dist/internal/core/devtools/bridge-devtools/mount.js +0 -24
  531. package/dist/internal/core/devtools/bridge-devtools/mount.js.map +0 -1
  532. package/dist/internal/core/devtools/bridge-devtools/store.d.ts +0 -16
  533. package/dist/internal/core/devtools/bridge-devtools/store.d.ts.map +0 -1
  534. package/dist/internal/core/devtools/bridge-devtools/store.js +0 -37
  535. package/dist/internal/core/devtools/bridge-devtools/store.js.map +0 -1
  536. package/dist/internal/core/devtools/bridge-devtools/tap.d.ts +0 -6
  537. package/dist/internal/core/devtools/bridge-devtools/tap.d.ts.map +0 -1
  538. package/dist/internal/core/devtools/bridge-devtools/tap.js +0 -58
  539. package/dist/internal/core/devtools/bridge-devtools/tap.js.map +0 -1
  540. package/dist/internal/core/devtools/bridge-devtools/types.d.ts +0 -30
  541. package/dist/internal/core/devtools/bridge-devtools/types.d.ts.map +0 -1
  542. package/dist/internal/core/devtools/bridge-devtools/types.js +0 -2
  543. package/dist/internal/core/devtools/bridge-devtools/types.js.map +0 -1
  544. package/dist/internal/core/hooks/use-background-tasks.d.ts +0 -8
  545. package/dist/internal/core/hooks/use-background-tasks.d.ts.map +0 -1
  546. package/dist/internal/core/hooks/use-background-tasks.js +0 -23
  547. package/dist/internal/core/hooks/use-background-tasks.js.map +0 -1
  548. package/dist/internal/core/hooks/use-card-state.d.ts +0 -2
  549. package/dist/internal/core/hooks/use-card-state.d.ts.map +0 -1
  550. package/dist/internal/core/hooks/use-card-state.js +0 -22
  551. package/dist/internal/core/hooks/use-card-state.js.map +0 -1
  552. package/dist/internal/core/hooks/use-chat.d.ts +0 -11
  553. package/dist/internal/core/hooks/use-chat.d.ts.map +0 -1
  554. package/dist/internal/core/hooks/use-chat.js +0 -68
  555. package/dist/internal/core/hooks/use-chat.js.map +0 -1
  556. package/dist/internal/core/hooks/use-check-skill-file.d.ts +0 -5
  557. package/dist/internal/core/hooks/use-check-skill-file.d.ts.map +0 -1
  558. package/dist/internal/core/hooks/use-check-skill-file.js +0 -26
  559. package/dist/internal/core/hooks/use-check-skill-file.js.map +0 -1
  560. package/dist/internal/core/hooks/use-context-stats.d.ts +0 -8
  561. package/dist/internal/core/hooks/use-context-stats.d.ts.map +0 -1
  562. package/dist/internal/core/hooks/use-context-stats.js +0 -22
  563. package/dist/internal/core/hooks/use-context-stats.js.map +0 -1
  564. package/dist/internal/core/hooks/use-gis.d.ts +0 -18
  565. package/dist/internal/core/hooks/use-gis.d.ts.map +0 -1
  566. package/dist/internal/core/hooks/use-gis.js +0 -52
  567. package/dist/internal/core/hooks/use-gis.js.map +0 -1
  568. package/dist/internal/core/hooks/use-global-skill-stats.d.ts +0 -7
  569. package/dist/internal/core/hooks/use-global-skill-stats.d.ts.map +0 -1
  570. package/dist/internal/core/hooks/use-global-skill-stats.js +0 -20
  571. package/dist/internal/core/hooks/use-global-skill-stats.js.map +0 -1
  572. package/dist/internal/core/hooks/use-input-history.d.ts +0 -8
  573. package/dist/internal/core/hooks/use-input-history.d.ts.map +0 -1
  574. package/dist/internal/core/hooks/use-input-history.js +0 -90
  575. package/dist/internal/core/hooks/use-input-history.js.map +0 -1
  576. package/dist/internal/core/hooks/use-registry.d.ts +0 -54
  577. package/dist/internal/core/hooks/use-registry.d.ts.map +0 -1
  578. package/dist/internal/core/hooks/use-registry.js +0 -35
  579. package/dist/internal/core/hooks/use-registry.js.map +0 -1
  580. package/dist/internal/core/hooks/use-session.d.ts +0 -11
  581. package/dist/internal/core/hooks/use-session.d.ts.map +0 -1
  582. package/dist/internal/core/hooks/use-session.js +0 -22
  583. package/dist/internal/core/hooks/use-session.js.map +0 -1
  584. package/dist/internal/core/hooks/use-skill-stats.d.ts +0 -8
  585. package/dist/internal/core/hooks/use-skill-stats.d.ts.map +0 -1
  586. package/dist/internal/core/hooks/use-skill-stats.js +0 -24
  587. package/dist/internal/core/hooks/use-skill-stats.js.map +0 -1
  588. package/dist/internal/core/hooks/use-skills.d.ts +0 -7
  589. package/dist/internal/core/hooks/use-skills.d.ts.map +0 -1
  590. package/dist/internal/core/hooks/use-skills.js +0 -11
  591. package/dist/internal/core/hooks/use-skills.js.map +0 -1
  592. package/dist/internal/core/hooks/use-token-pressure.d.ts +0 -7
  593. package/dist/internal/core/hooks/use-token-pressure.d.ts.map +0 -1
  594. package/dist/internal/core/hooks/use-token-pressure.js +0 -28
  595. package/dist/internal/core/hooks/use-token-pressure.js.map +0 -1
  596. package/dist/internal/core/index.d.ts +0 -99
  597. package/dist/internal/core/index.d.ts.map +0 -1
  598. package/dist/internal/core/index.js +0 -83
  599. package/dist/internal/core/index.js.map +0 -1
  600. package/dist/internal/core/lib/analytics.d.ts +0 -8
  601. package/dist/internal/core/lib/analytics.d.ts.map +0 -1
  602. package/dist/internal/core/lib/analytics.js +0 -8
  603. package/dist/internal/core/lib/analytics.js.map +0 -1
  604. package/dist/internal/core/lib/attachment-upload.d.ts +0 -11
  605. package/dist/internal/core/lib/attachment-upload.d.ts.map +0 -1
  606. package/dist/internal/core/lib/attachment-upload.js +0 -26
  607. package/dist/internal/core/lib/attachment-upload.js.map +0 -1
  608. package/dist/internal/core/lib/card-registry.d.ts +0 -36
  609. package/dist/internal/core/lib/card-registry.d.ts.map +0 -1
  610. package/dist/internal/core/lib/card-registry.js +0 -67
  611. package/dist/internal/core/lib/card-registry.js.map +0 -1
  612. package/dist/internal/core/lib/chat.d.ts +0 -49
  613. package/dist/internal/core/lib/chat.d.ts.map +0 -1
  614. package/dist/internal/core/lib/chat.js +0 -172
  615. package/dist/internal/core/lib/chat.js.map +0 -1
  616. package/dist/internal/core/lib/code-highlight.d.ts +0 -9
  617. package/dist/internal/core/lib/code-highlight.d.ts.map +0 -1
  618. package/dist/internal/core/lib/code-highlight.js +0 -153
  619. package/dist/internal/core/lib/code-highlight.js.map +0 -1
  620. package/dist/internal/core/lib/open-session-file.d.ts +0 -3
  621. package/dist/internal/core/lib/open-session-file.d.ts.map +0 -1
  622. package/dist/internal/core/lib/open-session-file.js +0 -14
  623. package/dist/internal/core/lib/open-session-file.js.map +0 -1
  624. package/dist/internal/core/lib/parent-bridge.d.ts +0 -20
  625. package/dist/internal/core/lib/parent-bridge.d.ts.map +0 -1
  626. package/dist/internal/core/lib/parent-bridge.js +0 -135
  627. package/dist/internal/core/lib/parent-bridge.js.map +0 -1
  628. package/dist/internal/core/lib/preview-dispatch.d.ts +0 -25
  629. package/dist/internal/core/lib/preview-dispatch.d.ts.map +0 -1
  630. package/dist/internal/core/lib/preview-dispatch.js +0 -55
  631. package/dist/internal/core/lib/preview-dispatch.js.map +0 -1
  632. package/dist/internal/core/lib/resource-bridge.d.ts +0 -12
  633. package/dist/internal/core/lib/resource-bridge.d.ts.map +0 -1
  634. package/dist/internal/core/lib/resource-bridge.js +0 -51
  635. package/dist/internal/core/lib/resource-bridge.js.map +0 -1
  636. package/dist/internal/core/lib/session-file-preview.d.ts +0 -4
  637. package/dist/internal/core/lib/session-file-preview.d.ts.map +0 -1
  638. package/dist/internal/core/lib/session-file-preview.js +0 -71
  639. package/dist/internal/core/lib/session-file-preview.js.map +0 -1
  640. package/dist/internal/core/lib/step-ranges.d.ts +0 -43
  641. package/dist/internal/core/lib/step-ranges.d.ts.map +0 -1
  642. package/dist/internal/core/lib/step-ranges.js +0 -229
  643. package/dist/internal/core/lib/step-ranges.js.map +0 -1
  644. package/dist/internal/core/lib/tool-preview.d.ts +0 -3
  645. package/dist/internal/core/lib/tool-preview.d.ts.map +0 -1
  646. package/dist/internal/core/lib/tool-preview.js +0 -7
  647. package/dist/internal/core/lib/tool-preview.js.map +0 -1
  648. package/dist/internal/core/lib/ui-meta.d.ts +0 -10
  649. package/dist/internal/core/lib/ui-meta.d.ts.map +0 -1
  650. package/dist/internal/core/lib/ui-meta.js +0 -28
  651. package/dist/internal/core/lib/ui-meta.js.map +0 -1
  652. package/dist/internal/core/lib/utils.d.ts +0 -4
  653. package/dist/internal/core/lib/utils.d.ts.map +0 -1
  654. package/dist/internal/core/lib/utils.js +0 -30
  655. package/dist/internal/core/lib/utils.js.map +0 -1
  656. package/dist/internal/core/lib/whatif-prompt.d.ts +0 -46
  657. package/dist/internal/core/lib/whatif-prompt.d.ts.map +0 -1
  658. package/dist/internal/core/lib/whatif-prompt.js +0 -138
  659. package/dist/internal/core/lib/whatif-prompt.js.map +0 -1
  660. package/dist/internal/core/react/AgentKitProvider.d.ts +0 -20
  661. package/dist/internal/core/react/AgentKitProvider.d.ts.map +0 -1
  662. package/dist/internal/core/react/AgentKitProvider.js +0 -32
  663. package/dist/internal/core/react/AgentKitProvider.js.map +0 -1
  664. package/dist/internal/core/routes.d.ts +0 -2
  665. package/dist/internal/core/routes.d.ts.map +0 -1
  666. package/dist/internal/core/routes.js +0 -2
  667. package/dist/internal/core/routes.js.map +0 -1
  668. package/dist/internal/core/schemas/background.d.ts +0 -12
  669. package/dist/internal/core/schemas/background.d.ts.map +0 -1
  670. package/dist/internal/core/schemas/background.js +0 -2
  671. package/dist/internal/core/schemas/background.js.map +0 -1
  672. package/dist/internal/core/schemas/event.d.ts +0 -46
  673. package/dist/internal/core/schemas/event.d.ts.map +0 -1
  674. package/dist/internal/core/schemas/event.js +0 -2
  675. package/dist/internal/core/schemas/event.js.map +0 -1
  676. package/dist/internal/core/schemas/gis.d.ts +0 -51
  677. package/dist/internal/core/schemas/gis.d.ts.map +0 -1
  678. package/dist/internal/core/schemas/gis.js +0 -2
  679. package/dist/internal/core/schemas/gis.js.map +0 -1
  680. package/dist/internal/core/schemas/message.d.ts.map +0 -1
  681. package/dist/internal/core/schemas/message.js +0 -23
  682. package/dist/internal/core/schemas/message.js.map +0 -1
  683. package/dist/internal/core/schemas/partner-skill.d.ts +0 -24
  684. package/dist/internal/core/schemas/partner-skill.d.ts.map +0 -1
  685. package/dist/internal/core/schemas/partner-skill.js +0 -24
  686. package/dist/internal/core/schemas/partner-skill.js.map +0 -1
  687. package/dist/internal/core/schemas/projection.d.ts.map +0 -1
  688. package/dist/internal/core/schemas/projection.js +0 -2
  689. package/dist/internal/core/schemas/projection.js.map +0 -1
  690. package/dist/internal/core/schemas/session.d.ts.map +0 -1
  691. package/dist/internal/core/schemas/session.js +0 -27
  692. package/dist/internal/core/schemas/session.js.map +0 -1
  693. package/dist/internal/core/schemas/skill.d.ts +0 -51
  694. package/dist/internal/core/schemas/skill.d.ts.map +0 -1
  695. package/dist/internal/core/schemas/skill.js +0 -8
  696. package/dist/internal/core/schemas/skill.js.map +0 -1
  697. package/dist/internal/core/schemas/studio/agent.d.ts +0 -13
  698. package/dist/internal/core/schemas/studio/agent.d.ts.map +0 -1
  699. package/dist/internal/core/schemas/studio/agent.js +0 -10
  700. package/dist/internal/core/schemas/studio/agent.js.map +0 -1
  701. package/dist/internal/core/schemas/studio/database.d.ts +0 -40
  702. package/dist/internal/core/schemas/studio/database.d.ts.map +0 -1
  703. package/dist/internal/core/schemas/studio/database.js +0 -35
  704. package/dist/internal/core/schemas/studio/database.js.map +0 -1
  705. package/dist/internal/core/schemas/studio/env.d.ts +0 -8
  706. package/dist/internal/core/schemas/studio/env.d.ts.map +0 -1
  707. package/dist/internal/core/schemas/studio/env.js +0 -8
  708. package/dist/internal/core/schemas/studio/env.js.map +0 -1
  709. package/dist/internal/core/schemas/studio/knowledge.d.ts +0 -19
  710. package/dist/internal/core/schemas/studio/knowledge.d.ts.map +0 -1
  711. package/dist/internal/core/schemas/studio/knowledge.js +0 -15
  712. package/dist/internal/core/schemas/studio/knowledge.js.map +0 -1
  713. package/dist/internal/core/schemas/studio/resource-base.d.ts +0 -8
  714. package/dist/internal/core/schemas/studio/resource-base.d.ts.map +0 -1
  715. package/dist/internal/core/schemas/studio/resource-base.js +0 -8
  716. package/dist/internal/core/schemas/studio/resource-base.js.map +0 -1
  717. package/dist/internal/core/schemas/studio/scene.d.ts +0 -13
  718. package/dist/internal/core/schemas/studio/scene.d.ts.map +0 -1
  719. package/dist/internal/core/schemas/studio/scene.js +0 -12
  720. package/dist/internal/core/schemas/studio/scene.js.map +0 -1
  721. package/dist/internal/core/schemas/studio/tool.d.ts +0 -26
  722. package/dist/internal/core/schemas/studio/tool.d.ts.map +0 -1
  723. package/dist/internal/core/schemas/studio/tool.js +0 -21
  724. package/dist/internal/core/schemas/studio/tool.js.map +0 -1
  725. package/dist/internal/core/schemas/task.d.ts +0 -13
  726. package/dist/internal/core/schemas/task.d.ts.map +0 -1
  727. package/dist/internal/core/schemas/task.js +0 -12
  728. package/dist/internal/core/schemas/task.js.map +0 -1
  729. package/dist/internal/core/stores/answer-callback-store.d.ts +0 -9
  730. package/dist/internal/core/stores/answer-callback-store.d.ts.map +0 -1
  731. package/dist/internal/core/stores/answer-callback-store.js +0 -13
  732. package/dist/internal/core/stores/answer-callback-store.js.map +0 -1
  733. package/dist/internal/core/stores/auth-store.d.ts +0 -38
  734. package/dist/internal/core/stores/auth-store.d.ts.map +0 -1
  735. package/dist/internal/core/stores/auth-store.js +0 -137
  736. package/dist/internal/core/stores/auth-store.js.map +0 -1
  737. package/dist/internal/core/stores/background-store.d.ts +0 -11
  738. package/dist/internal/core/stores/background-store.d.ts.map +0 -1
  739. package/dist/internal/core/stores/background-store.js +0 -34
  740. package/dist/internal/core/stores/background-store.js.map +0 -1
  741. package/dist/internal/core/stores/card-state-store.d.ts +0 -10
  742. package/dist/internal/core/stores/card-state-store.d.ts.map +0 -1
  743. package/dist/internal/core/stores/card-state-store.js +0 -22
  744. package/dist/internal/core/stores/card-state-store.js.map +0 -1
  745. package/dist/internal/core/stores/chat-store.d.ts +0 -34
  746. package/dist/internal/core/stores/chat-store.d.ts.map +0 -1
  747. package/dist/internal/core/stores/chat-store.js +0 -470
  748. package/dist/internal/core/stores/chat-store.js.map +0 -1
  749. package/dist/internal/core/stores/connection-store.d.ts +0 -14
  750. package/dist/internal/core/stores/connection-store.d.ts.map +0 -1
  751. package/dist/internal/core/stores/connection-store.js +0 -28
  752. package/dist/internal/core/stores/connection-store.js.map +0 -1
  753. package/dist/internal/core/stores/gis-store.d.ts +0 -19
  754. package/dist/internal/core/stores/gis-store.d.ts.map +0 -1
  755. package/dist/internal/core/stores/gis-store.js +0 -60
  756. package/dist/internal/core/stores/gis-store.js.map +0 -1
  757. package/dist/internal/core/stores/model-preferences-store.d.ts +0 -14
  758. package/dist/internal/core/stores/model-preferences-store.d.ts.map +0 -1
  759. package/dist/internal/core/stores/model-preferences-store.js +0 -62
  760. package/dist/internal/core/stores/model-preferences-store.js.map +0 -1
  761. package/dist/internal/core/stores/runtime-features-store.d.ts +0 -19
  762. package/dist/internal/core/stores/runtime-features-store.d.ts.map +0 -1
  763. package/dist/internal/core/stores/runtime-features-store.js +0 -17
  764. package/dist/internal/core/stores/runtime-features-store.js.map +0 -1
  765. package/dist/internal/core/stores/runtime-store.d.ts +0 -18
  766. package/dist/internal/core/stores/runtime-store.d.ts.map +0 -1
  767. package/dist/internal/core/stores/runtime-store.js +0 -23
  768. package/dist/internal/core/stores/runtime-store.js.map +0 -1
  769. package/dist/internal/core/stores/session-store.d.ts +0 -39
  770. package/dist/internal/core/stores/session-store.d.ts.map +0 -1
  771. package/dist/internal/core/stores/session-store.js +0 -396
  772. package/dist/internal/core/stores/session-store.js.map +0 -1
  773. package/dist/internal/core/stores/task-store.d.ts +0 -9
  774. package/dist/internal/core/stores/task-store.d.ts.map +0 -1
  775. package/dist/internal/core/stores/task-store.js +0 -14
  776. package/dist/internal/core/stores/task-store.js.map +0 -1
  777. package/dist/internal/core/stores/ui-bridge-store.d.ts +0 -31
  778. package/dist/internal/core/stores/ui-bridge-store.d.ts.map +0 -1
  779. package/dist/internal/core/stores/ui-bridge-store.js +0 -116
  780. package/dist/internal/core/stores/ui-bridge-store.js.map +0 -1
  781. package/dist/internal/core/stores/ui-store.d.ts +0 -59
  782. package/dist/internal/core/stores/ui-store.d.ts.map +0 -1
  783. package/dist/internal/core/stores/ui-store.js +0 -109
  784. package/dist/internal/core/stores/ui-store.js.map +0 -1
  785. package/dist/internal/core/types/index.d.ts +0 -8
  786. package/dist/internal/core/types/index.d.ts.map +0 -1
  787. package/dist/internal/core/types/index.js +0 -2
  788. package/dist/internal/core/types/index.js.map +0 -1
  789. package/dist/internal/core/types/solution.d.ts +0 -22
  790. package/dist/internal/core/types/solution.d.ts.map +0 -1
  791. package/dist/internal/core/types/solution.js +0 -7
  792. package/dist/internal/core/types/solution.js.map +0 -1
  793. package/dist/react.d.ts +0 -9
  794. package/dist/react.d.ts.map +0 -1
  795. package/dist/react.js +0 -9
  796. package/dist/react.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/react/lib/card-registry.ts","../../../src/react/components/card/cards/attraction-card.tsx","../../../src/react/components/card/cards/cite-card.tsx","../../../src/react/components/card/cards/comprehensive-analysis-card.tsx","../../../src/react/components/card/cards/conflict-detection-card.tsx","../../../src/react/components/card/cards/counter.tsx","../../../src/react/hooks/use-card-state.ts","../../../src/react/stores/card-state-store.ts","../../../src/react/stores/client-aware.ts","../../../src/react/components/card/cards/damage-effect-card.tsx","../../../src/react/components/card/cards/destination-card.tsx","../../../src/react/components/card/cards/diff-card.tsx","../../../src/react/lib/utils.ts","../../../src/react/components/card/cards/execution-order-card.tsx","../../../src/react/components/card/cards/experience-card-with-options.tsx","../../../src/react/components/card/cards/flight-card.tsx","../../../src/react/components/card/cards/hotel-card.tsx","../../../src/react/components/card/cards/kill-chain-card.tsx","../../../src/react/components/card/cards/map-card.tsx","../../../src/react/components/card/cards/order-status-card.tsx","../../../src/react/components/card/cards/patch-card.tsx","../../../src/react/components/card/cards/product-recommendation-card.tsx","../../../src/react/components/card/cards/reflection-optimization-card.tsx","../../../src/react/components/card/cards/resolution-modifications-card.tsx","../../../src/react/components/card/cards/resolution-summary-card.tsx","../../../src/react/components/card/cards/restaurant-card.tsx","../../../src/react/components/card/cards/shopping-list-card.tsx","../../../src/react/components/card/cards/simulation-event-card.tsx","../../../src/react/components/card/cards/survival-effect-card.tsx","../../../src/react/components/card/cards/travel-itinerary-card.tsx","../../../src/react/components/card/register.ts"],"sourcesContent":["import type { ComponentType } from \"react\"\n\nexport interface Card {\n type: string\n title?: string\n payload?: Record<string, unknown>\n data?: unknown\n id?: string\n}\n\nexport interface CardComponentProps {\n card: Card\n sendMessage?: (content: string) => Promise<void>\n sessionId?: string\n}\n\nexport type CardComponent = ComponentType<CardComponentProps>\n\nexport class CardComponentRegistry {\n private readonly components: Map<string, CardComponent>\n\n constructor(initial?: Record<string, CardComponent> | Map<string, CardComponent>) {\n if (initial instanceof Map) {\n this.components = new Map(initial)\n } else if (initial) {\n this.components = new Map(Object.entries(initial))\n } else {\n this.components = new Map()\n }\n }\n\n register(type: string, component: CardComponent): void {\n this.components.set(type, component)\n }\n\n get(type: string): CardComponent | undefined {\n return this.components.get(type)\n }\n\n has(type: string): boolean {\n return this.components.has(type)\n }\n\n keys(): string[] {\n return Array.from(this.components.keys())\n }\n\n clear(): void {\n this.components.clear()\n }\n\n get size(): number {\n return this.components.size\n }\n}\n\nexport const cardRegistry = new CardComponentRegistry()\n\nexport interface ParseResult<T> {\n ok: boolean\n value?: T\n error?: string\n}\n\nexport const CardJSON = {\n safeParseJSON<T = unknown>(text: string): ParseResult<T> {\n try {\n const value = JSON.parse(text) as T\n return { ok: true, value }\n } catch (error) {\n return {\n ok: false,\n error: error instanceof Error ? error.message : \"Unknown parsing error\",\n }\n }\n },\n\n toCardArray(value: unknown): Card[] | null {\n if (\n value &&\n typeof value === \"object\" &&\n \"type\" in (value as Record<string, unknown>) &&\n typeof (value as { type?: unknown }).type === \"string\"\n ) {\n return [value as Card]\n }\n\n if (Array.isArray(value)) {\n const cards = value.filter(\n (item): item is Card =>\n item &&\n typeof item === \"object\" &&\n \"type\" in (item as Record<string, unknown>) &&\n typeof (item as { type?: unknown }).type === \"string\",\n )\n return cards.length > 0 ? cards : null\n }\n\n return null\n },\n\n isCardsLanguage(lang?: string): boolean {\n return lang === \"card+json\"\n },\n}\n","import { Clock, Info, Star, Ticket } from \"lucide-react\"\nimport type { CardComponentProps } from \"../../../lib/card-registry\"\n\ninterface Attraction {\n name: string\n category: string\n rating: number\n reviewCount: number\n ticketPrice: number\n openTime: string\n duration: string\n highlights: string[]\n tips?: string\n}\n\ninterface AttractionPayload {\n attractions: Attraction[]\n}\n\nexport function AttractionCard({ card }: CardComponentProps) {\n const payload = card.payload as AttractionPayload | undefined\n\n if (!payload || !Array.isArray(payload.attractions)) {\n return (\n <div className=\"rounded-md border border-red-500/50 bg-red-500/10 p-4\">\n <p className=\"text-red-400 text-sm\">景点卡片数据格式错误</p>\n </div>\n )\n }\n\n return (\n <div className=\"rounded-lg border border-white/10 bg-white/5 p-4\">\n {card.title && (\n <h3 className=\"font-semibold text-lg text-zinc-100 mb-4\">{card.title}</h3>\n )}\n <div className=\"space-y-3\">\n {payload.attractions.map((attr, index) => (\n <div key={index} className=\"rounded-lg border border-white/10 p-3\">\n <div className=\"flex justify-between items-start mb-2\">\n <div>\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium text-zinc-200\">{attr.name}</span>\n <span className=\"px-1.5 py-0.5 bg-sky-500/20 text-sky-400 text-xs rounded\">\n {attr.category}\n </span>\n </div>\n <div className=\"flex items-center gap-3 text-sm text-zinc-400 mt-1\">\n <div className=\"flex items-center gap-1\">\n <Star className=\"w-3 h-3 text-amber-400 fill-amber-400\" />\n <span>{attr.rating}</span>\n <span className=\"text-xs\">({attr.reviewCount}评价)</span>\n </div>\n </div>\n </div>\n <div className=\"text-right\">\n <div className=\"flex items-center gap-1 text-lg font-bold text-orange-400\">\n <Ticket className=\"w-4 h-4\" />\n ¥{attr.ticketPrice}\n </div>\n </div>\n </div>\n <div className=\"flex items-center gap-4 text-sm text-zinc-400 mb-2\">\n <div className=\"flex items-center gap-1\">\n <Clock className=\"w-3 h-3\" />\n {attr.openTime}\n </div>\n <span>游玩约{attr.duration}</span>\n </div>\n <div className=\"flex flex-wrap gap-1 mb-2\">\n {attr.highlights.map((h, i) => (\n <span\n key={i}\n className=\"px-2 py-0.5 bg-white/5 text-zinc-400 text-xs rounded\"\n >\n {h}\n </span>\n ))}\n </div>\n {attr.tips && (\n <div className=\"flex items-start gap-1 text-xs text-zinc-400 bg-white/5 p-2 rounded\">\n <Info className=\"w-3 h-3 mt-0.5 flex-shrink-0\" />\n {attr.tips}\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n )\n}\n","import { ChevronRight } from \"lucide-react\"\nimport { useState } from \"react\"\nimport type { CardComponentProps } from \"../../../lib/card-registry\"\n\nexport interface Citation {\n id: number\n title: string\n content: string\n}\n\nexport interface CiteCardPayload {\n citations: Citation[]\n}\n\nexport function CitationCard({ card }: CardComponentProps) {\n const payload = card.payload as unknown as CiteCardPayload\n const { citations = [] } = payload || {}\n const [isOpen, setIsOpen] = useState(false)\n\n if (citations.length === 0) return null\n\n return (\n <div className=\"mt-6 mb-4\">\n <div className=\"border-t border-white/10 pt-4\">\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n className=\"flex items-center gap-2 text-sm text-zinc-400 hover:text-zinc-200 transition-colors\"\n >\n <ChevronRight\n className={`h-4 w-4 transition-transform duration-200 ${isOpen ? \"rotate-90\" : \"\"}`}\n />\n <span>{citations.length} 个引用来源</span>\n </button>\n\n {isOpen && (\n <div className=\"mt-4 space-y-0\">\n {citations.map((citation, index) => (\n <div key={citation.id} id={`cite-${citation.id}`}>\n {index > 0 && <hr className=\"my-3 border-white/5\" />}\n <div className=\"flex items-start gap-3 py-2\">\n <span className=\"flex h-5 w-5 shrink-0 items-center justify-center text-xs text-zinc-500\">\n [{citation.id}]\n </span>\n <div className=\"flex-1 space-y-1\">\n <p className=\"text-sm font-medium leading-relaxed text-zinc-200\">\n {citation.title}\n </p>\n <p className=\"text-sm text-zinc-400 leading-relaxed\">{citation.content}</p>\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n )\n}\n","import { Shield, Target, TrendingUp, Trophy } from \"lucide-react\"\nimport { useMemo } from \"react\"\nimport type { CardComponentProps } from \"../../../lib/card-registry\"\n\ninterface PlanComprehensiveData {\n planType?: string\n name?: string\n enemyCasualtyRate: number\n ourLossRate: number\n costBenefit: number\n efficiencyRatio?: number\n efficiency?: number\n riskLevel: \"low\" | \"medium\" | \"high\"\n feasibility: number | \"low\" | \"medium\" | \"high\"\n feasibilityScore?: number\n survival?: number\n}\n\ninterface DecisionPoint {\n title?: string\n point?: string\n description?: string\n tradeoffs?: string[]\n}\n\ninterface ComprehensiveAnalysisCardPayload {\n title?: string\n plans: PlanComprehensiveData[]\n recommendedPlan?: string\n alternativePlans?: Array<{ planType?: string; name?: string; reason?: string; description?: string; advantage?: string; disadvantage?: string }>\n decisionPoints?: DecisionPoint[]\n analysis?: string\n}\n\nconst COLOR_PALETTE = [\n { primary: \"#3b82f6\", bg: \"bg-blue-500\", light: \"bg-blue-900\", border: \"border-blue-500\" },\n { primary: \"#ef4444\", bg: \"bg-red-500\", light: \"bg-red-900\", border: \"border-red-500\" },\n { primary: \"#10b981\", bg: \"bg-green-500\", light: \"bg-green-900\", border: \"border-green-500\" },\n { primary: \"#f59e0b\", bg: \"bg-amber-500\", light: \"bg-amber-900\", border: \"border-amber-500\" },\n { primary: \"#8b5cf6\", bg: \"bg-purple-500\", light: \"bg-purple-900\", border: \"border-purple-500\" },\n { primary: \"#ec4899\", bg: \"bg-pink-500\", light: \"bg-pink-900\", border: \"border-pink-500\" },\n { primary: \"#06b6d4\", bg: \"bg-cyan-500\", light: \"bg-cyan-900\", border: \"border-cyan-500\" },\n]\n\nconst ALT_COLOR_PALETTE = [\n { bg: \"bg-sky-600\", light: \"bg-sky-900\" },\n { bg: \"bg-sky-800\", light: \"bg-sky-900\" },\n { bg: \"bg-sky-500\", light: \"bg-sky-950\" },\n { bg: \"bg-sky-700\", light: \"bg-sky-900\" },\n { bg: \"bg-sky-400\", light: \"bg-sky-950\" },\n]\n\nconst getPlanColor = (index: number) => COLOR_PALETTE[index % COLOR_PALETTE.length]\nconst getAltPlanColor = (index: number) => ALT_COLOR_PALETTE[index % ALT_COLOR_PALETTE.length]\n\nconst levelColors = {\n low: \"text-sky-300\",\n medium: \"text-sky-500\",\n high: \"text-sky-400\",\n}\n\nconst getRiskLabel = (level: \"low\" | \"medium\" | \"high\") => {\n switch (level) {\n case \"low\":\n return \"低\"\n case \"medium\":\n return \"中\"\n case \"high\":\n return \"高\"\n }\n}\n\nfunction normalizePlan(p: PlanComprehensiveData) {\n const effRatio = p.efficiencyRatio ?? p.efficiency ?? 0\n const feasNum = typeof p.feasibility === \"number\" ? p.feasibility : p.feasibility === \"high\" ? 90 : p.feasibility === \"medium\" ? 60 : 30\n return {\n ...p,\n planType: p.planType ?? p.name ?? \"未命名方案\",\n efficiencyRatio: effRatio,\n feasibilityScore: p.feasibilityScore ?? feasNum,\n survival: p.survival ?? Math.max(0, 100 - p.ourLossRate),\n }\n}\n\nexport function ComprehensiveAnalysisCard({ card }: CardComponentProps) {\n const payload = card.payload as ComprehensiveAnalysisCardPayload | undefined\n const title = card.title || payload?.title || \"综合分析对比\"\n\n const plans = useMemo(() => (payload?.plans || []).map(normalizePlan), [payload?.plans])\n const recommendedPlan = payload?.recommendedPlan\n const alternativePlans = payload?.alternativePlans || []\n const decisionPoints = payload?.decisionPoints || []\n const analysis = payload?.analysis\n\n const calculatedBestPlan = useMemo(() => {\n if (plans.length === 0) return null\n return plans.reduce((best, current) =>\n current.costBenefit > best.costBenefit ? current : best,\n )\n }, [plans])\n\n const displayRecommendedPlan = recommendedPlan || calculatedBestPlan?.planType\n\n const bestMetrics = useMemo(() => {\n if (plans.length === 0) return {}\n return {\n casualty: plans.reduce((best, current) =>\n current.enemyCasualtyRate > best.enemyCasualtyRate ? current : best,\n ).planType,\n loss: plans.reduce((best, current) =>\n current.ourLossRate < best.ourLossRate ? current : best,\n ).planType,\n costBenefit: plans.reduce((best, current) =>\n current.costBenefit > best.costBenefit ? current : best,\n ).planType,\n efficiency: plans.reduce((best, current) =>\n current.efficiencyRatio > best.efficiencyRatio ? current : best,\n ).planType,\n }\n }, [plans])\n\n // Radar chart configuration\n const radarSize = 400\n const radarCenter = radarSize / 2\n const radarRadius = radarSize / 2 - 60\n const maxCostBenefit = Math.max(100, ...plans.map((p) => p.costBenefit ?? 0))\n const axes = [\n { key: \"enemyCasualtyRate\", label: \"目标达成\", max: 100 },\n { key: \"efficiencyRatio\", label: \"作战效率\", max: 100 },\n { key: \"costBenefit\", label: \"效费比\", max: maxCostBenefit },\n { key: \"survival\", label: \"生存能力\", max: 100 },\n { key: \"feasibilityScore\", label: \"可行性\", max: 100 },\n ]\n const angleStep = (2 * Math.PI) / axes.length\n\n const getPoint = (axisIndex: number, value: number, max: number) => {\n const angle = axisIndex * angleStep - Math.PI / 2\n const r = (value / max) * radarRadius\n return {\n x: radarCenter + r * Math.cos(angle),\n y: radarCenter + r * Math.sin(angle),\n }\n }\n\n const generatePath = (plan: ReturnType<typeof normalizePlan>) => {\n const values = [\n plan.enemyCasualtyRate ?? 0,\n plan.efficiencyRatio ?? 0,\n plan.costBenefit ?? 0,\n plan.survival ?? 0,\n plan.feasibilityScore ?? 0,\n ]\n\n const points = values.map((value, index) => {\n const max = axes[index].max\n return getPoint(index, value, max)\n })\n\n return `${points.map((p, i) => `${i === 0 ? \"M\" : \"L\"} ${p.x} ${p.y}`).join(\" \")} Z`\n }\n\n return (\n <div className=\"rounded-lg border border-white/10 bg-white/5\">\n {/* Header */}\n <div className=\"p-4 border-b border-white/10\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"font-semibold text-lg text-foreground\">{title}</h3>\n <div className=\"flex gap-4 text-sm text-muted-foreground\">\n <span>方案数: {plans.length}</span>\n {displayRecommendedPlan && (\n <span className=\"flex items-center gap-1 text-sky-400 font-semibold\">\n <Trophy className=\"h-4 w-4\" />\n 推荐: {displayRecommendedPlan}\n </span>\n )}\n </div>\n </div>\n </div>\n\n <div className=\"p-4 space-y-6\">\n {/* Comparison Table */}\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm border-collapse\">\n <thead>\n <tr className=\"border-b border-white/10\">\n <th className=\"text-left p-2 text-secondary-foreground\">指标</th>\n {plans.map((plan) => (\n <th key={plan.planType} className=\"text-center p-2 text-secondary-foreground\">\n {plan.planType}\n </th>\n ))}\n <th className=\"text-center p-2 text-secondary-foreground\">最优</th>\n </tr>\n </thead>\n <tbody>\n <tr className=\"border-b border-white/10\">\n <td className=\"p-2 flex items-center gap-2 text-secondary-foreground\">\n <Target className=\"h-4 w-4 text-muted-foreground\" />\n <span>目标达成率</span>\n </td>\n {plans.map((plan) => {\n const isBest = plan.planType === bestMetrics.casualty\n return (\n <td\n key={plan.planType}\n className={`text-center p-2 ${isBest ? \"bg-sky-950\" : \"\"}`}\n >\n <span className={`font-bold ${isBest ? \"text-sky-400\" : \"text-foreground\"}`}>\n {plan.enemyCasualtyRate.toFixed(1)}%\n </span>\n </td>\n )\n })}\n <td className=\"text-center p-2 font-semibold text-foreground\">\n {bestMetrics.casualty}\n </td>\n </tr>\n <tr className=\"border-b border-white/10\">\n <td className=\"p-2 flex items-center gap-2 text-secondary-foreground\">\n <Shield className=\"h-4 w-4 text-muted-foreground\" />\n <span>我方损失率</span>\n </td>\n {plans.map((plan) => {\n const isBest = plan.planType === bestMetrics.loss\n return (\n <td\n key={plan.planType}\n className={`text-center p-2 ${isBest ? \"bg-sky-950\" : \"\"}`}\n >\n <span className={`font-bold ${isBest ? \"text-sky-400\" : \"text-foreground\"}`}>\n {plan.ourLossRate.toFixed(1)}%\n </span>\n </td>\n )\n })}\n <td className=\"text-center p-2 font-semibold text-foreground\">\n {bestMetrics.loss}\n </td>\n </tr>\n <tr className=\"border-b border-white/10\">\n <td className=\"p-2 flex items-center gap-2 text-secondary-foreground\">\n <TrendingUp className=\"h-4 w-4 text-muted-foreground\" />\n <span>成本效益比</span>\n </td>\n {plans.map((plan) => {\n const isBest = plan.planType === bestMetrics.costBenefit\n return (\n <td\n key={plan.planType}\n className={`text-center p-2 ${isBest ? \"bg-sky-950\" : \"\"}`}\n >\n <span className={`font-bold ${isBest ? \"text-sky-400\" : \"text-foreground\"}`}>\n {plan.costBenefit.toFixed(2)}\n </span>\n </td>\n )\n })}\n <td className=\"text-center p-2 font-semibold text-foreground\">\n {bestMetrics.costBenefit}\n </td>\n </tr>\n <tr className=\"border-b border-white/10\">\n <td className=\"p-2 text-secondary-foreground\">风险等级</td>\n {plans.map((plan) => (\n <td key={plan.planType} className=\"text-center p-2\">\n <span className={`font-semibold ${levelColors[plan.riskLevel]}`}>\n {getRiskLabel(plan.riskLevel)}\n </span>\n </td>\n ))}\n <td className=\"text-center p-2 text-muted-foreground\">-</td>\n </tr>\n <tr className=\"border-b border-white/10\">\n <td className=\"p-2 text-secondary-foreground\">可行性</td>\n {plans.map((plan) => {\n const fLabel = typeof plan.feasibility === \"number\"\n ? `${plan.feasibility}%`\n : getRiskLabel(plan.feasibility)\n const fColor = typeof plan.feasibility === \"number\"\n ? \"text-foreground\"\n : levelColors[plan.feasibility]\n return (\n <td key={plan.planType} className=\"text-center p-2\">\n <span className={`font-semibold ${fColor}`}>{fLabel}</span>\n </td>\n )\n })}\n <td className=\"text-center p-2 text-muted-foreground\">-</td>\n </tr>\n </tbody>\n </table>\n </div>\n\n {/* Recommended Plan */}\n {displayRecommendedPlan && (\n <div className=\"p-4 bg-gradient-to-r from-sky-950 to-sky-900 rounded-lg border-2 border-sky-500\">\n <div className=\"flex items-start gap-3\">\n <Trophy className=\"h-6 w-6 text-sky-400 flex-shrink-0 mt-1\" />\n <div className=\"flex-1\">\n <h3 className=\"text-lg font-bold text-sky-300 mb-2\">\n 首选方案:{displayRecommendedPlan}\n </h3>\n {analysis && <p className=\"text-sm text-muted-foreground\">{analysis}</p>}\n {(() => {\n const plan = plans.find((p) => p.planType === displayRecommendedPlan)\n if (!plan) return null\n return (\n <div className=\"mt-3 grid grid-cols-4 gap-2 text-sm\">\n <div className=\"p-2 bg-muted rounded\">\n <div className=\"text-xs text-muted-foreground\">达成率</div>\n <div className=\"font-bold text-sky-400\">\n {plan.enemyCasualtyRate.toFixed(1)}%\n </div>\n </div>\n <div className=\"p-2 bg-muted rounded\">\n <div className=\"text-xs text-muted-foreground\">损失率</div>\n <div className=\"font-bold text-sky-400\">\n {plan.ourLossRate.toFixed(1)}%\n </div>\n </div>\n <div className=\"p-2 bg-muted rounded\">\n <div className=\"text-xs text-muted-foreground\">效益比</div>\n <div className=\"font-bold text-sky-400\">\n {plan.costBenefit.toFixed(2)}\n </div>\n </div>\n <div className=\"p-2 bg-muted rounded\">\n <div className=\"text-xs text-muted-foreground\">风险</div>\n <div className=\"font-bold text-sky-400\">\n {getRiskLabel(plan.riskLevel)}\n </div>\n </div>\n </div>\n )\n })()}\n </div>\n </div>\n </div>\n )}\n\n {/* Alternative Plans */}\n {alternativePlans.length > 0 && (\n <div className=\"space-y-2\">\n <h4 className=\"text-sm font-semibold text-foreground\">备选方案</h4>\n {alternativePlans.map((alt, index) => {\n const colors = getAltPlanColor(index)\n return (\n <div key={index} className={`p-3 rounded-lg border border-white/10 ${colors.light}`}>\n <div className=\"flex items-center gap-2 mb-1\">\n <div className={`w-3 h-3 rounded ${colors.bg}`} />\n <span className=\"font-semibold text-foreground\">{alt.planType ?? alt.name}</span>\n </div>\n <p className=\"text-sm text-muted-foreground\">{alt.reason ?? alt.description}</p>\n {alt.advantage && <p className=\"text-xs text-sky-400 mt-1\">优势: {alt.advantage}</p>}\n {alt.disadvantage && <p className=\"text-xs text-muted-foreground mt-0.5\">劣势: {alt.disadvantage}</p>}\n </div>\n )\n })}\n </div>\n )}\n\n {/* Decision Points */}\n {decisionPoints.length > 0 && (\n <div className=\"space-y-4\">\n <h4 className=\"text-sm font-semibold text-foreground\">关键决策点</h4>\n {decisionPoints.map((point, index) => (\n <div\n key={index}\n className=\"p-4 bg-card rounded-lg border border-border\"\n >\n <h5 className=\"font-semibold mb-2 text-foreground\">{point.title ?? point.point}</h5>\n {point.description && <p className=\"text-sm text-muted-foreground mb-3\">{point.description}</p>}\n <div className=\"space-y-1\">\n <div className=\"text-xs font-semibold text-muted-foreground\">权衡考虑:</div>\n {(point.tradeoffs ?? []).map((tradeoff, i) => (\n <div key={i} className=\"flex gap-2 text-sm\">\n <span className=\"text-muted-foreground\">•</span>\n <span className=\"text-muted-foreground\">{tradeoff}</span>\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* Radar Chart */}\n <div className=\"p-4 bg-white/5 rounded-lg\">\n <h4 className=\"text-sm font-semibold mb-3 text-foreground\">综合能力雷达图</h4>\n <div className=\"flex flex-col items-center\">\n <svg\n width={radarSize}\n height={radarSize}\n viewBox={`0 0 ${radarSize} ${radarSize}`}\n className=\"mb-4\"\n role=\"img\"\n >\n <title>综合能力雷达图</title>\n {/* Background circles */}\n {[0.2, 0.4, 0.6, 0.8, 1.0].map((scale, i) => (\n <circle\n key={i}\n cx={radarCenter}\n cy={radarCenter}\n r={radarRadius * scale}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1\"\n className=\"text-muted-foreground/30\"\n />\n ))}\n\n {/* Axes */}\n {axes.map((axis, index) => {\n const endPoint = getPoint(index, axis.max, axis.max)\n const labelPoint = getPoint(index, axis.max * 1.2, axis.max)\n\n return (\n <g key={index}>\n <line\n x1={radarCenter}\n y1={radarCenter}\n x2={endPoint.x}\n y2={endPoint.y}\n stroke=\"currentColor\"\n strokeWidth=\"1\"\n className=\"text-muted-foreground/30\"\n />\n <text\n x={labelPoint.x}\n y={labelPoint.y}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n className=\"text-xs font-semibold fill-zinc-300\"\n >\n {axis.label}\n </text>\n </g>\n )\n })}\n\n {/* Data polygons for each plan */}\n {plans.map((plan, index) => {\n const colors = getPlanColor(index)\n const path = generatePath(plan)\n\n return (\n <g key={index}>\n <path\n d={path}\n fill={colors.primary}\n fillOpacity=\"0.25\"\n stroke={colors.primary}\n strokeWidth=\"3\"\n className=\"transition-all duration-300 hover:fill-opacity-30\"\n />\n </g>\n )\n })}\n\n {/* Data points */}\n {plans.map((plan, planIndex) => {\n const colors = getPlanColor(planIndex)\n const feasibilityScore =\n plan.feasibility === \"high\" ? 90 : plan.feasibility === \"medium\" ? 70 : 50\n const values = [\n plan.enemyCasualtyRate,\n plan.efficiencyRatio,\n plan.costBenefit,\n 100 - plan.ourLossRate,\n feasibilityScore,\n ]\n\n return values.map((value, axisIndex) => {\n const max = axes[axisIndex].max\n const point = getPoint(axisIndex, value, max)\n return (\n <circle\n key={`${planIndex}-${axisIndex}`}\n cx={point.x}\n cy={point.y}\n r=\"5\"\n fill={colors.primary}\n stroke=\"white\"\n strokeWidth=\"2\"\n className=\"transition-all duration-300\"\n />\n )\n })\n })}\n </svg>\n\n {/* Legend */}\n <div className=\"flex gap-6 justify-center flex-wrap\">\n {plans.map((plan, index) => {\n const colors = getPlanColor(index)\n return (\n <div key={index} className=\"flex items-center gap-2\">\n <div\n className=\"w-4 h-4 rounded\"\n style={{ backgroundColor: colors.primary }}\n />\n <span className=\"text-sm font-semibold text-foreground\">{plan.planType}</span>\n </div>\n )\n })}\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n}\n","import type { CardComponentProps } from \"../../../lib/card-registry\"\nimport { AlertTriangle, MapPin } from \"lucide-react\"\nimport { memo } from \"react\"\n\ninterface ConflictItem {\n id: string\n name: string\n lat: number\n lon: number\n severity?: number\n type?: string\n description?: string\n}\n\ninterface ConflictDetectionPayload {\n conflicts: ConflictItem[]\n description?: string\n}\n\nconst getSeverityColor = (severity: number): string => {\n if (severity >= 5) return \"text-red-400\"\n if (severity >= 4) return \"text-orange-400\"\n if (severity >= 3) return \"text-yellow-400\"\n if (severity >= 2) return \"text-blue-400\"\n return \"text-gray-400\"\n}\n\nconst getSeverityBgColor = (severity: number): string => {\n if (severity >= 5) return \"bg-red-900/30\"\n if (severity >= 4) return \"bg-orange-900/30\"\n if (severity >= 3) return \"bg-yellow-900/30\"\n if (severity >= 2) return \"bg-blue-900/30\"\n return \"bg-gray-900/30\"\n}\n\nconst getSeverityLabel = (severity: number): string => {\n if (severity >= 5) return \"危急\"\n if (severity >= 4) return \"严重\"\n if (severity >= 3) return \"中等\"\n if (severity >= 2) return \"轻微\"\n return \"最低\"\n}\n\nfunction ConflictDetectionCardComponent({ card }: CardComponentProps) {\n const payload = card.payload as ConflictDetectionPayload | undefined\n const conflicts = payload?.conflicts || []\n const description = payload?.description\n const title = card.title || \"冲突区域展示\"\n\n const sortedConflicts = [...conflicts].sort((a, b) => (b.severity || 0) - (a.severity || 0))\n\n return (\n <div className=\"w-full rounded-lg border border-[hsl(var(--border))] bg-[hsl(var(--card))] text-[hsl(var(--card-foreground))]\">\n <div className=\"px-6 pb-4 pt-6\">\n <div className=\"flex items-center gap-2\">\n <AlertTriangle className=\"h-5 w-5 text-amber-500\" />\n <span className=\"text-lg font-semibold\">{title}</span>\n <span className=\"ml-auto text-sm font-normal text-[hsl(var(--muted-foreground))]\">\n 检测到 {conflicts.length} 个冲突\n </span>\n </div>\n </div>\n <div className=\"space-y-4 px-6 pb-6\">\n {description && (\n <p className=\"border-l-2 border-amber-500 pl-3 text-sm text-[hsl(var(--muted-foreground))]\">\n {description}\n </p>\n )}\n\n <div className=\"space-y-3\">\n {sortedConflicts.map((conflict) => (\n <div\n key={conflict.id}\n className={`rounded-lg border border-[hsl(var(--border))] p-4 ${getSeverityBgColor(conflict.severity || 1)}`}\n >\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"flex-1 space-y-2\">\n <div className=\"flex items-center gap-2\">\n <span className=\"font-semibold\">{conflict.name}</span>\n <span\n className={`rounded-full px-2 py-0.5 text-xs font-medium ${getSeverityColor(conflict.severity || 1)} ${getSeverityBgColor(conflict.severity || 1)}`}\n >\n {getSeverityLabel(conflict.severity || 1)}\n </span>\n {conflict.type && (\n <span className=\"rounded-full bg-gray-700 px-2 py-0.5 text-xs text-gray-300\">\n {conflict.type}\n </span>\n )}\n </div>\n\n {conflict.description && (\n <p className=\"text-sm text-[hsl(var(--muted-foreground))]\">\n {conflict.description}\n </p>\n )}\n\n <div className=\"flex items-center gap-1 text-xs text-[hsl(var(--muted-foreground))]\">\n <MapPin className=\"h-3 w-3\" />\n <span>\n {conflict.lat.toFixed(4)}, {conflict.lon.toFixed(4)}\n </span>\n </div>\n </div>\n\n <div className=\"flex flex-col items-center\">\n <div\n className={`text-2xl font-bold ${getSeverityColor(conflict.severity || 1)}`}\n >\n {conflict.severity || \"-\"}\n </div>\n <div className=\"text-xs text-[hsl(var(--muted-foreground))]\">严重程度</div>\n </div>\n </div>\n </div>\n ))}\n </div>\n\n {conflicts.length === 0 && (\n <div className=\"py-8 text-center text-[hsl(var(--muted-foreground))]\">\n <AlertTriangle className=\"mx-auto mb-2 h-12 w-12 opacity-50\" />\n <p>当前分析未检测到冲突</p>\n </div>\n )}\n </div>\n </div>\n )\n}\n\nexport const ConflictDetectionCard = memo(ConflictDetectionCardComponent)\n","import { useMemo } from \"react\"\nimport { useCardState } from \"../../../hooks/use-card-state\"\nimport type { CardComponentProps } from \"../../../lib/card-registry\"\n\ninterface CounterPayload {\n initialValue: number\n}\n\nexport function Counter(props: CardComponentProps) {\n const payload = props.card.payload as CounterPayload | undefined\n\n const cardId = useMemo(() => `counter-${props.card.id}`, [props.card.id])\n\n const [count, setCount] = useCardState(cardId, payload?.initialValue || 0)\n\n return (\n <div className=\"rounded-lg border border-white/10 bg-white/5 p-4 flex flex-col\">\n <p className=\"text-sm text-zinc-200\">\n 计数: <span className=\"font-semibold text-sky-400\">{count}</span>\n </p>\n <div className=\"mt-3 flex gap-2\">\n <button\n type=\"button\"\n onClick={() => setCount(count + 1)}\n className=\"rounded-md bg-sky-600 px-3 py-1 text-xs font-medium text-white hover:bg-sky-500 transition-colors\"\n >\n 增加\n </button>\n <button\n type=\"button\"\n onClick={() => setCount(count - 1)}\n className=\"rounded-md bg-zinc-700 px-3 py-1 text-xs font-medium text-zinc-200 hover:bg-zinc-600 transition-colors\"\n >\n 减少\n </button>\n </div>\n </div>\n )\n}\n","import { useCallback, useEffect, useState } from \"react\"\nimport { useCardStateStore } from \"../stores/card-state-store\"\n\nexport function useCardState<T>(\n cardId: string,\n initialValue: T,\n): [T, (value: T | ((prev: T) => T)) => void] {\n const getCardState = useCardStateStore((state) => state.getCardState)\n const setCardState = useCardStateStore((state) => state.setCardState)\n\n const storedValue = getCardState<T>(cardId)\n const [state, setStateInternal] = useState<T>(storedValue ?? initialValue)\n\n useEffect(() => {\n if (storedValue === undefined) {\n setCardState(cardId, initialValue)\n }\n }, [cardId, initialValue, storedValue, setCardState])\n\n const setState = useCallback(\n (value: T | ((prev: T) => T)) => {\n setStateInternal((prevState) => {\n const newValue = typeof value === \"function\" ? (value as (prev: T) => T)(prevState) : value\n setCardState(cardId, newValue)\n return newValue\n })\n },\n [cardId, setCardState],\n )\n\n return [state, setState]\n}\n","import { create } from \"zustand\"\nimport { createClientActions, type ClientAwareState } from \"./client-aware\"\n\ninterface CardStateStore extends ClientAwareState {\n states: Record<string, unknown>\n getCardState: <T>(cardId: string) => T | undefined\n setCardState: <T>(cardId: string, state: T) => void\n removeCardState: (cardId: string) => void\n clearAllStates: () => void\n}\n\nexport const useCardStateStore = create<CardStateStore>((set, get) => ({\n ...createClientActions(set),\n states: {},\n\n getCardState: <T,>(cardId: string): T | undefined => {\n return get().states[cardId] as T | undefined\n },\n\n setCardState: <T,>(cardId: string, state: T) => {\n set((prev) => ({\n states: { ...prev.states, [cardId]: state },\n }))\n },\n\n removeCardState: (cardId: string) => {\n set((prev) => {\n const { [cardId]: _, ...rest } = prev.states\n return { states: rest }\n })\n },\n\n clearAllStates: () => {\n set({ states: {} })\n },\n}))\n","import type { StoreApi } from \"zustand\"\nimport type { BladeClient } from \"../../client\"\n\nexport interface ClientAwareState {\n _client: BladeClient | null\n setClient: (client: BladeClient) => void\n}\n\nexport function createClientActions<T extends ClientAwareState>(\n set: StoreApi<T>[\"setState\"],\n): ClientAwareState {\n return {\n _client: null,\n setClient: (client) => set({ _client: client } as Partial<T>),\n }\n}\n","import type { CardComponentProps } from \"../../../lib/card-registry\"\nimport { useCardState } from \"../../../hooks/use-card-state\"\nimport { Download, Settings } from \"lucide-react\"\nimport { memo, useCallback, useMemo } from \"react\"\n\ninterface PlanDamageData {\n name: string\n metrics: Record<string, number>\n}\n\ninterface DamageEffectCardPayload {\n title?: string\n plans: PlanDamageData[]\n weights: Record<string, number>\n}\n\nconst calculateComprehensiveScore = (\n plan: PlanDamageData,\n weights: Record<string, number>,\n): number => {\n let score = 0\n for (const [key, value] of Object.entries(plan.metrics)) {\n const weight = weights[key] || 0\n score += value * weight\n }\n return score\n}\n\nconst normalizeWeights = (\n weights: Record<string, number>,\n changedKey: string,\n newValue: number,\n): Record<string, number> => {\n const normalized = { ...weights }\n normalized[changedKey] = newValue\n\n const remainingWeight = 1 - newValue\n const otherWeightsSum = Object.entries(weights)\n .filter(([key]) => key !== changedKey)\n .reduce((sum, [, value]) => sum + value, 0)\n\n if (otherWeightsSum === 0) {\n const otherKeys = Object.keys(weights).filter((k) => k !== changedKey)\n const equalWeight = remainingWeight / otherKeys.length\n for (const key of otherKeys) {\n normalized[key] = equalWeight\n }\n } else {\n const scaleFactor = remainingWeight / otherWeightsSum\n for (const key of Object.keys(weights)) {\n if (key !== changedKey) {\n normalized[key] = weights[key] * scaleFactor\n }\n }\n }\n\n return normalized\n}\n\nconst getPlanColor = (index: number) => {\n const colors = [\n { primary: \"#0284c7\", bg: \"bg-sky-600\", light: \"bg-sky-900\" },\n { primary: \"#075985\", bg: \"bg-sky-800\", light: \"bg-sky-900\" },\n { primary: \"#0c4a6e\", bg: \"bg-sky-900\", light: \"bg-sky-900\" },\n ]\n return colors[index % colors.length]\n}\n\nconst DamageEffectControlPanel = memo(function DamageEffectControlPanel({\n cardId,\n card,\n}: {\n cardId: string\n card: CardComponentProps[\"card\"]\n}) {\n const [showLog, setShowLog] = useCardState(`${cardId}-showLog`, false)\n\n const toggleShowLog = useCallback(() => {\n setShowLog(!showLog)\n }, [showLog, setShowLog])\n\n const handleDownload = useCallback(() => {\n try {\n const jsonContent = JSON.stringify(card, null, 2)\n const blob = new Blob([jsonContent], { type: \"application/json\" })\n const url = URL.createObjectURL(blob)\n const link = document.createElement(\"a\")\n link.href = url\n link.download = `${card.title || \"damage-effect\"}.json`\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n URL.revokeObjectURL(url)\n } catch (err) {\n console.error(\"下载失败:\", err)\n }\n }, [card])\n\n return (\n <div className=\"border-t border-[hsl(var(--border))] p-4\">\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={toggleShowLog}\n className={`rounded-md px-3 py-1.5 text-sm ${\n showLog\n ? \"bg-[hsl(var(--accent))] text-[hsl(var(--accent-foreground))]\"\n : \"border border-[hsl(var(--border))] text-[hsl(var(--foreground))]\"\n }`}\n >\n 查看日志\n </button>\n <button\n type=\"button\"\n onClick={handleDownload}\n title=\"下载毁伤效果数据\"\n className=\"flex items-center gap-1 rounded-md border border-[hsl(var(--border))] px-3 py-1.5 text-sm text-[hsl(var(--foreground))]\"\n >\n <Download className=\"h-4 w-4\" />\n 下载数据\n </button>\n </div>\n {showLog && (\n <div className=\"mt-4 rounded-lg bg-[hsl(var(--muted))] p-4\">\n <h4 className=\"mb-2 text-sm font-semibold\">LLM生成的源码:</h4>\n <div className=\"max-h-96 overflow-y-auto\">\n <pre className=\"whitespace-pre-wrap text-xs\">\n <code>{JSON.stringify(card, null, 2)}</code>\n </pre>\n </div>\n </div>\n )}\n </div>\n )\n})\n\nconst MatrixView = memo(function MatrixView({\n plans,\n displayBestPlan,\n weights,\n metricKeys,\n}: {\n plans: PlanDamageData[]\n displayBestPlan: string | undefined\n weights: Record<string, number>\n metricKeys: string[]\n}) {\n return (\n <div className=\"space-y-6\">\n <h4 className=\"text-sm font-semibold\">方案评估对比</h4>\n <div className=\"overflow-x-auto\">\n <table className=\"w-full border-collapse text-sm\">\n <thead>\n <tr className=\"border-b-2 border-[hsl(var(--border))]\">\n <th className=\"p-2 text-left font-semibold\">方案</th>\n {metricKeys.map((key) => (\n <th key={key} className=\"p-2 text-center font-semibold\">\n {key}\n </th>\n ))}\n <th className=\"p-2 text-center font-semibold\">综合评分</th>\n </tr>\n </thead>\n <tbody>\n {plans.map((plan, planIndex) => {\n const colors = getPlanColor(planIndex)\n const isBest = plan.name === displayBestPlan\n const comprehensiveScore = calculateComprehensiveScore(plan, weights)\n\n return (\n <tr\n key={planIndex}\n className={`border-b border-[hsl(var(--border))] transition-all duration-300 ${isBest ? \"bg-sky-950\" : \"\"}`}\n >\n <td className=\"border-r border-[hsl(var(--border))] p-2\">\n <div className=\"flex items-center gap-2\">\n <div className={`h-3 w-3 rounded ${colors.bg}`} />\n <span className=\"font-semibold\">{plan.name}</span>\n {isBest && (\n <span className=\"rounded-full bg-sky-600 px-2 py-0.5 text-xs text-white\">\n 最优\n </span>\n )}\n </div>\n </td>\n {metricKeys.map((key) => {\n const value = plan.metrics[key] || 0\n return (\n <td key={key} className=\"p-2 text-center\">\n <span\n className=\"font-mono font-semibold\"\n style={{\n color:\n value >= 80 ? \"#0ea5e9\" : value >= 65 ? \"#0284c7\" : \"#075985\",\n }}\n >\n {value.toFixed(0)}%\n </span>\n </td>\n )\n })}\n <td className=\"p-2 text-center\">\n <span className=\"text-base font-bold\" style={{ color: colors.primary }}>\n {comprehensiveScore.toFixed(1)}\n </span>\n </td>\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n\n {/* Comprehensive score summary */}\n <div className=\"grid grid-cols-2 gap-4\">\n {plans.map((plan, index) => {\n const colors = getPlanColor(index)\n const isBest = plan.name === displayBestPlan\n const comprehensiveScore = calculateComprehensiveScore(plan, weights)\n\n return (\n <div\n key={index}\n className={`rounded-lg border p-4 transition-all duration-300 ${colors.light} ${\n isBest\n ? \"border-2 border-sky-600\"\n : \"border-[hsl(var(--border))]\"\n }`}\n >\n <div className=\"mb-2 flex items-center justify-between\">\n <h4 className=\"font-semibold\">{plan.name}</h4>\n </div>\n <div className=\"space-y-2 text-sm\">\n {metricKeys.map((key) => (\n <div key={key} className=\"flex justify-between\">\n <span className=\"text-[hsl(var(--muted-foreground))]\">{key}</span>\n <span className=\"font-bold\">{(plan.metrics[key] || 0).toFixed(0)}%</span>\n </div>\n ))}\n <div className=\"flex justify-between border-t border-[hsl(var(--border))] pt-2\">\n <span className=\"text-[hsl(var(--muted-foreground))]\">综合评分</span>\n <span className=\"text-lg font-bold\" style={{ color: colors.primary }}>\n {comprehensiveScore.toFixed(1)}\n </span>\n </div>\n </div>\n </div>\n )\n })}\n </div>\n </div>\n )\n})\n\nconst WeightAdjustmentPanel = memo(function WeightAdjustmentPanel({\n cardId,\n initialWeights,\n metricKeys,\n onWeightChange,\n}: {\n cardId: string\n initialWeights: Record<string, number>\n metricKeys: string[]\n onWeightChange: (weights: Record<string, number>) => void\n}) {\n const [weights, setWeights] = useCardState<Record<string, number>>(\n `${cardId}-weights`,\n initialWeights,\n )\n\n const weightSum = useMemo(() => {\n return Object.values(weights).reduce((sum, w) => sum + w, 0)\n }, [weights])\n\n const handleWeightChange = useCallback(\n (key: string, newValue: number) => {\n const normalized = normalizeWeights(weights, key, newValue)\n setWeights(normalized)\n onWeightChange(normalized)\n },\n [weights, setWeights, onWeightChange],\n )\n\n return (\n <div className=\"space-y-4 rounded-lg border border-[hsl(var(--border))] bg-[hsl(var(--muted))]/30 p-4\">\n <div className=\"flex items-center justify-between\">\n <h4 className=\"flex items-center gap-2 text-sm font-bold\">\n <Settings className=\"h-4 w-4\" />\n 权重调整\n <span className=\"ml-2 text-xs text-[hsl(var(--muted-foreground))]\">\n (总和: {weightSum.toFixed(3)})\n </span>\n </h4>\n </div>\n\n <div className=\"space-y-3\">\n {metricKeys.map((key) => {\n const weight = weights[key] || 0\n const initialWeight = initialWeights[key] || 0\n const hasChanged = Math.abs(weight - initialWeight) > 0.001\n\n return (\n <div key={key} className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium\">{key}</span>\n {hasChanged && (\n <span className=\"text-xs text-sky-400\">\n ({initialWeight.toFixed(2)} → {weight.toFixed(2)})\n </span>\n )}\n </div>\n <span className=\"font-mono text-sm font-bold\">{weight.toFixed(2)}</span>\n </div>\n <div className=\"flex items-center gap-3\">\n <span className=\"w-8 text-right text-xs text-[hsl(var(--muted-foreground))]\">\n 0\n </span>\n <input\n type=\"range\"\n value={weight * 100}\n onChange={(e) => handleWeightChange(key, Number(e.target.value) / 100)}\n min={0}\n max={100}\n step={1}\n className=\"flex-1\"\n />\n <span className=\"w-8 text-xs text-[hsl(var(--muted-foreground))]\">1</span>\n </div>\n </div>\n )\n })}\n </div>\n </div>\n )\n})\n\nfunction DamageEffectCardComponent({ card }: CardComponentProps) {\n const payload = card.payload as DamageEffectCardPayload | undefined\n const title = card.title || payload?.title || \"毁伤效果评估分析\"\n\n const cardId = useMemo(() => {\n return `damage-effect-card-${card.id || \"default\"}`\n }, [card.id])\n\n const plans = useMemo(() => payload?.plans || [], [payload?.plans])\n const initialWeights = useMemo(() => payload?.weights || {}, [payload?.weights])\n\n const metricKeys = useMemo(() => {\n if (plans.length === 0) return []\n return Object.keys(plans[0].metrics)\n }, [plans])\n\n const [currentWeights, setCurrentWeights] = useCardState<Record<string, number>>(\n `${cardId}-current-weights`,\n initialWeights,\n )\n\n const calculatedBestPlan = useMemo(() => {\n if (plans.length === 0) return null\n const plansWithScores = plans.map((plan) => ({\n plan,\n score: calculateComprehensiveScore(plan, currentWeights),\n }))\n return plansWithScores.reduce((best, current) =>\n current.score > best.score ? current : best,\n ).plan\n }, [plans, currentWeights])\n\n const displayBestPlan = calculatedBestPlan?.name\n\n const handleWeightChange = useCallback(\n (newWeights: Record<string, number>) => {\n setCurrentWeights(newWeights)\n },\n [setCurrentWeights],\n )\n\n return (\n <div className=\"w-full rounded-lg border border-[hsl(var(--border))] bg-[hsl(var(--card))] text-[hsl(var(--card-foreground))]\">\n <div className=\"px-6 pb-4 pt-6\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-lg font-semibold\">{title}</h3>\n <div className=\"flex items-center gap-4 text-sm text-[hsl(var(--muted-foreground))]\">\n <span>方案数: {plans.length}</span>\n {displayBestPlan && (\n <span className=\"font-semibold text-sky-400\">最优: {displayBestPlan}</span>\n )}\n </div>\n </div>\n </div>\n <div className=\"space-y-6 px-6 pb-6\">\n <MatrixView\n plans={plans}\n displayBestPlan={displayBestPlan}\n weights={currentWeights}\n metricKeys={metricKeys}\n />\n\n <div className=\"border-t border-[hsl(var(--border))] pt-6\">\n <WeightAdjustmentPanel\n cardId={cardId}\n initialWeights={initialWeights}\n metricKeys={metricKeys}\n onWeightChange={handleWeightChange}\n />\n </div>\n </div>\n <DamageEffectControlPanel cardId={cardId} card={card} />\n </div>\n )\n}\n\nexport const DamageEffectCard = memo(DamageEffectCardComponent)\n","import { MapPin, Star, Wallet } from \"lucide-react\"\nimport type { CardComponentProps } from \"../../../lib/card-registry\"\n\ninterface Destination {\n name: string\n country: string\n bestSeason?: string\n description?: string\n highlights?: string[]\n avgBudget?: number\n budget?: string\n rating?: number\n}\n\ninterface DestinationPayload {\n destinations: Destination[]\n}\n\nexport function DestinationCard({ card }: CardComponentProps) {\n const payload = card.payload as DestinationPayload | undefined\n\n if (!payload || !Array.isArray(payload.destinations)) {\n return (\n <div className=\"rounded-md border border-red-500/50 bg-red-500/10 p-4\">\n <p className=\"text-red-400 text-sm\">目的地卡片数据格式错误</p>\n </div>\n )\n }\n\n return (\n <div className=\"rounded-lg border border-white/10 bg-white/5 p-4\">\n {card.title && (\n <h3 className=\"font-semibold text-lg text-zinc-100 mb-4\">{card.title}</h3>\n )}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n {payload.destinations.map((dest, index) => (\n <div key={index} className=\"rounded-lg border border-white/10 p-3\">\n <div className=\"flex justify-between items-start mb-2\">\n <div className=\"flex items-center gap-2\">\n <MapPin className=\"w-4 h-4 text-sky-400\" />\n <span className=\"font-medium text-zinc-200\">{dest.name}</span>\n <span className=\"text-xs text-zinc-500\">{dest.country}</span>\n </div>\n {dest.rating != null && (\n <div className=\"flex items-center gap-1\">\n <Star className=\"w-3 h-3 text-amber-400 fill-amber-400\" />\n <span className=\"text-sm text-zinc-300\">{dest.rating}</span>\n </div>\n )}\n </div>\n {dest.description && (\n <p className=\"text-xs text-zinc-400 mb-2\">{dest.description}</p>\n )}\n <div className=\"flex flex-wrap gap-1 mb-2\">\n {(dest.highlights ?? []).map((h, i) => (\n <span\n key={i}\n className=\"px-2 py-0.5 bg-white/5 text-zinc-400 text-xs rounded\"\n >\n {h}\n </span>\n ))}\n </div>\n <div className=\"flex justify-between text-sm text-zinc-400\">\n {dest.bestSeason && <span>最佳季节: {dest.bestSeason}</span>}\n {(dest.avgBudget || dest.budget) && (\n <div className=\"flex items-center gap-1\">\n <Wallet className=\"w-3 h-3\" />\n <span>{dest.avgBudget ? `约¥${dest.avgBudget}` : dest.budget}</span>\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n","import { useState } from \"react\"\nimport type { CardComponentProps } from \"../../../lib/card-registry\"\nimport { cn } from \"../../../lib/utils\"\n\ninterface DiffCardPayload {\n oldContent: string\n newContent: string\n oldTitle?: string\n newTitle?: string\n language?: string\n}\n\n/**\n * Simple line-level diff computation.\n * Returns an array of change entries with type and line content.\n */\ninterface DiffChange {\n type: \"added\" | \"removed\" | \"unchanged\"\n value: string\n}\n\nfunction computeDiff(oldText: string, newText: string): DiffChange[] {\n const oldLines = oldText.split(\"\\n\")\n const newLines = newText.split(\"\\n\")\n\n // LCS-based diff for reasonable-length inputs\n const m = oldLines.length\n const n = newLines.length\n\n // Build LCS table\n const dp: number[][] = Array.from({ length: m + 1 }, () => Array(n + 1).fill(0))\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n if (oldLines[i - 1] === newLines[j - 1]) {\n dp[i][j] = dp[i - 1][j - 1] + 1\n } else {\n dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1])\n }\n }\n }\n\n // Backtrack to find changes\n const result: DiffChange[] = []\n let i = m\n let j = n\n while (i > 0 || j > 0) {\n if (i > 0 && j > 0 && oldLines[i - 1] === newLines[j - 1]) {\n result.push({ type: \"unchanged\", value: oldLines[i - 1] })\n i--\n j--\n } else if (j > 0 && (i === 0 || dp[i][j - 1] >= dp[i - 1][j])) {\n result.push({ type: \"added\", value: newLines[j - 1] })\n j--\n } else if (i > 0) {\n result.push({ type: \"removed\", value: oldLines[i - 1] })\n i--\n }\n }\n\n result.reverse()\n return result\n}\n\nexport function DiffCard({ card }: CardComponentProps) {\n const [splitView, setSplitView] = useState(true)\n\n const payload = card.payload as DiffCardPayload | undefined\n const {\n oldContent = \"\",\n newContent = \"\",\n oldTitle = \"原始\",\n newTitle = \"修改\",\n } = payload || {}\n\n const changes = computeDiff(oldContent, newContent)\n\n // Build side-by-side line arrays for split view\n const leftLines: Array<{ num: number | null; text: string; type: DiffChange[\"type\"] }> = []\n const rightLines: Array<{ num: number | null; text: string; type: DiffChange[\"type\"] }> = []\n\n let oldLineNum = 0\n let newLineNum = 0\n for (const change of changes) {\n if (change.type === \"unchanged\") {\n oldLineNum++\n newLineNum++\n leftLines.push({ num: oldLineNum, text: change.value, type: \"unchanged\" })\n rightLines.push({ num: newLineNum, text: change.value, type: \"unchanged\" })\n } else if (change.type === \"removed\") {\n oldLineNum++\n leftLines.push({ num: oldLineNum, text: change.value, type: \"removed\" })\n rightLines.push({ num: null, text: \"\", type: \"unchanged\" })\n } else {\n newLineNum++\n leftLines.push({ num: null, text: \"\", type: \"unchanged\" })\n rightLines.push({ num: newLineNum, text: change.value, type: \"added\" })\n }\n }\n\n return (\n <div className=\"rounded-lg border border-white/10 bg-white/5\">\n {/* Header */}\n <div className=\"p-3 border-b border-white/10 flex items-center justify-between\">\n <h3 className=\"font-semibold text-foreground\">{card.title || \"Diff Viewer\"}</h3>\n <button\n type=\"button\"\n onClick={() => setSplitView(!splitView)}\n className=\"px-3 py-1 text-sm rounded border border-white/10 text-secondary-foreground hover:bg-white/10 transition-colors\"\n >\n {splitView ? \"单栏对比\" : \"双栏对比\"}\n </button>\n </div>\n\n <div className=\"overflow-auto\">\n {splitView ? (\n /* Split (side-by-side) view */\n <div className=\"grid grid-cols-2 divide-x divide-white/10\">\n {/* Left header */}\n <div className=\"px-3 py-1.5 text-xs font-semibold text-muted-foreground border-b border-white/10 bg-muted\">\n {oldTitle}\n </div>\n <div className=\"px-3 py-1.5 text-xs font-semibold text-muted-foreground border-b border-white/10 bg-muted\">\n {newTitle}\n </div>\n\n {/* Left column */}\n <pre className=\"p-0 font-mono text-xs leading-5 overflow-x-auto\">\n {leftLines.map((line, i) => (\n <div\n key={i}\n className={cn(\n \"flex px-2\",\n line.type === \"removed\" && \"bg-red-500/15\",\n )}\n >\n <span className=\"w-8 shrink-0 text-right pr-2 select-none text-muted-foreground/60\">\n {line.num ?? \"\"}\n </span>\n <span\n className={cn(\n \"flex-1 whitespace-pre\",\n line.type === \"removed\" && \"text-red-400\",\n line.type === \"unchanged\" && \"text-secondary-foreground\",\n )}\n >\n {line.type === \"removed\" ? `- ${line.text}` : ` ${line.text}`}\n </span>\n </div>\n ))}\n </pre>\n\n {/* Right column */}\n <pre className=\"p-0 font-mono text-xs leading-5 overflow-x-auto\">\n {rightLines.map((line, i) => (\n <div\n key={i}\n className={cn(\n \"flex px-2\",\n line.type === \"added\" && \"bg-emerald-500/15\",\n )}\n >\n <span className=\"w-8 shrink-0 text-right pr-2 select-none text-muted-foreground/60\">\n {line.num ?? \"\"}\n </span>\n <span\n className={cn(\n \"flex-1 whitespace-pre\",\n line.type === \"added\" && \"text-emerald-400\",\n line.type === \"unchanged\" && \"text-secondary-foreground\",\n )}\n >\n {line.type === \"added\" ? `+ ${line.text}` : ` ${line.text}`}\n </span>\n </div>\n ))}\n </pre>\n </div>\n ) : (\n /* Unified view */\n <pre className=\"p-0 font-mono text-xs leading-5 overflow-x-auto\">\n {changes.map((change, i) => {\n const prefix = change.type === \"added\" ? \"+ \" : change.type === \"removed\" ? \"- \" : \" \"\n return (\n <div\n key={i}\n className={cn(\n \"px-2\",\n change.type === \"added\" && \"bg-emerald-500/15\",\n change.type === \"removed\" && \"bg-red-500/15\",\n )}\n >\n <span\n className={cn(\n \"whitespace-pre\",\n change.type === \"added\" && \"text-emerald-400\",\n change.type === \"removed\" && \"text-red-400\",\n change.type === \"unchanged\" && \"text-secondary-foreground\",\n )}\n >\n {prefix}\n {change.value}\n </span>\n </div>\n )\n })}\n </pre>\n )}\n </div>\n </div>\n )\n}\n","import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\nexport async function copyToClipboard(text: string): Promise<boolean> {\n if (navigator.clipboard) {\n try {\n await navigator.clipboard.writeText(text)\n return true\n } catch {\n // fall through to textarea fallback\n }\n }\n // Fallback for insecure contexts (HTTP non-localhost)\n const textarea = document.createElement(\"textarea\")\n textarea.value = text\n textarea.style.position = \"fixed\"\n textarea.style.opacity = \"0\"\n document.body.appendChild(textarea)\n textarea.select()\n try {\n return document.execCommand(\"copy\")\n } finally {\n document.body.removeChild(textarea)\n }\n}\n","import type { CardComponentProps } from \"../../../lib/card-registry\"\nimport { Activity, Calendar, Clock, Users } from \"lucide-react\"\nimport { useMemo, useState } from \"react\"\n\ninterface ExecutionTask {\n sequence: number\n task_id: string\n start_time: number\n end_time: number\n platform: string\n}\n\nconst getPlatformColor = (index: number) => {\n const colors = [\n \"bg-blue-500\",\n \"bg-green-500\",\n \"bg-purple-500\",\n \"bg-orange-500\",\n \"bg-pink-500\",\n \"bg-indigo-500\",\n \"bg-yellow-500\",\n \"bg-red-500\",\n ]\n return colors[index % colors.length]\n}\n\nexport function ExecutionOrderCard({ card }: CardComponentProps) {\n const data = (card.payload || card.data) as ExecutionTask[] | undefined\n const [activeTab, setActiveTab] = useState<\"gantt\" | \"timeline\" | \"platforms\">(\"gantt\")\n\n if (!data || !Array.isArray(data)) {\n return (\n <div className=\"w-full rounded-lg border border-[hsl(var(--border))] bg-[hsl(var(--card))] p-4\">\n <p className=\"text-[hsl(var(--muted-foreground))]\">执行数据格式无效</p>\n </div>\n )\n }\n\n const stats = useMemo(() => {\n const platforms = new Map<string, { count: number; totalTime: number; tasks: string[] }>()\n let earliestStart = Number.POSITIVE_INFINITY\n let latestEnd = Number.NEGATIVE_INFINITY\n\n for (const task of data) {\n earliestStart = Math.min(earliestStart, task.start_time)\n latestEnd = Math.max(latestEnd, task.end_time)\n\n if (!platforms.has(task.platform)) {\n platforms.set(task.platform, { count: 0, totalTime: 0, tasks: [] })\n }\n const platformData = platforms.get(task.platform)!\n platformData.count++\n platformData.totalTime += task.end_time - task.start_time\n platformData.tasks.push(task.task_id)\n }\n\n const parallelGroups: string[][] = []\n for (let i = 0; i < data.length; i++) {\n const task1 = data[i]\n const group = [task1.task_id]\n for (let j = 0; j < data.length; j++) {\n if (i !== j) {\n const task2 = data[j]\n if (task1.start_time < task2.end_time && task2.start_time < task1.end_time) {\n group.push(task2.task_id)\n }\n }\n }\n if (group.length > 1) {\n const sortedGroup = [...new Set(group)].sort()\n const exists = parallelGroups.some(\n (g) =>\n g.length === sortedGroup.length && g.every((v, idx) => v === sortedGroup[idx]),\n )\n if (!exists) {\n parallelGroups.push(sortedGroup)\n }\n }\n }\n\n return {\n total: data.length,\n platforms: Array.from(platforms.entries()).map(([name, info]) => ({ name, ...info })),\n timeRange: {\n start: earliestStart,\n end: latestEnd,\n duration: latestEnd - earliestStart,\n },\n parallelGroups,\n }\n }, [data])\n\n const ganttData = useMemo(() => {\n const minTime = stats.timeRange.start\n const totalDuration = stats.timeRange.duration\n\n return data.map((task) => ({\n ...task,\n duration: task.end_time - task.start_time,\n startPercent: ((task.start_time - minTime) / totalDuration) * 100,\n widthPercent: ((task.end_time - task.start_time) / totalDuration) * 100,\n }))\n }, [data, stats])\n\n const tasksByPlatform = useMemo(() => {\n const grouped = new Map<string, typeof ganttData>()\n for (const task of ganttData) {\n if (!grouped.has(task.platform)) {\n grouped.set(task.platform, [])\n }\n grouped.get(task.platform)!.push(task)\n }\n return Array.from(grouped.entries())\n }, [ganttData])\n\n return (\n <div className=\"w-full rounded-lg border border-[hsl(var(--border))] bg-[hsl(var(--card))] text-[hsl(var(--card-foreground))]\">\n <div className=\"px-6 pt-6\">\n <div className=\"flex items-center justify-between\">\n <span className=\"flex items-center gap-2 text-lg font-semibold\">\n <Activity className=\"h-5 w-5\" />\n 任务执行顺序\n </span>\n <div className=\"flex gap-2\">\n <span className=\"flex items-center gap-1 rounded-full border border-[hsl(var(--border))] px-2 py-0.5 text-xs\">\n <Clock className=\"h-3 w-3\" />\n 总任务: {stats.total}\n </span>\n <span className=\"flex items-center gap-1 rounded-full border border-[hsl(var(--border))] px-2 py-0.5 text-xs\">\n <Calendar className=\"h-3 w-3\" />\n 时间跨度: {stats.timeRange.duration}\n </span>\n </div>\n </div>\n </div>\n <div className=\"px-6 pb-6 pt-4\">\n {/* Tabs */}\n <div className=\"mb-4 grid w-full grid-cols-3 rounded-lg bg-[hsl(var(--muted))] p-1\">\n {([\"gantt\", \"timeline\", \"platforms\"] as const).map((tab) => (\n <button\n key={tab}\n type=\"button\"\n onClick={() => setActiveTab(tab)}\n className={`rounded-md px-3 py-1.5 text-sm font-medium transition-colors ${\n activeTab === tab\n ? \"bg-[hsl(var(--background))] text-[hsl(var(--foreground))] shadow-sm\"\n : \"text-[hsl(var(--muted-foreground))]\"\n }`}\n >\n {tab === \"gantt\" ? \"甘特图\" : tab === \"timeline\" ? \"时间线\" : \"平台分配\"}\n </button>\n ))}\n </div>\n\n {activeTab === \"gantt\" && (\n <div className=\"space-y-4\">\n <div className=\"mb-2 text-sm text-[hsl(var(--muted-foreground))]\">\n 时间范围: {stats.timeRange.start} - {stats.timeRange.end}\n </div>\n\n <div className=\"max-h-[400px] space-y-2 overflow-y-auto\">\n {tasksByPlatform.map(([platform, tasks], platformIndex) => (\n <div key={platform} className=\"space-y-1\">\n <div className=\"text-sm font-medium text-[hsl(var(--muted-foreground))]\">\n {platform}\n </div>\n <div className=\"relative h-8 rounded bg-[hsl(var(--secondary))]\">\n {tasks.map((task) => (\n <div\n key={task.task_id}\n className={`absolute top-1 flex h-6 items-center justify-center overflow-hidden rounded text-xs text-white ${getPlatformColor(platformIndex)}`}\n style={{\n left: `${task.startPercent}%`,\n width: `${task.widthPercent}%`,\n minWidth: \"40px\",\n }}\n title={`${task.task_id}: ${task.start_time}-${task.end_time}`}\n >\n <span className=\"truncate px-1\">{task.task_id}</span>\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n\n {stats.parallelGroups.length > 0 && (\n <div className=\"mt-4 rounded bg-[hsl(var(--secondary))] p-3\">\n <h4 className=\"mb-2 text-sm font-medium\">并行执行组</h4>\n <div className=\"space-y-1\">\n {stats.parallelGroups.slice(0, 5).map((group, idx) => (\n <div key={idx} className=\"text-xs text-[hsl(var(--muted-foreground))]\">\n {idx + 1}. {group.join(\", \")}\n </div>\n ))}\n {stats.parallelGroups.length > 5 && (\n <div className=\"text-xs text-[hsl(var(--muted-foreground))]\">\n 还有 {stats.parallelGroups.length - 5} 个并行组...\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n )}\n\n {activeTab === \"timeline\" && (\n <div className=\"max-h-[450px] space-y-2 overflow-y-auto\">\n {data.map((task) => (\n <div\n key={task.task_id}\n className=\"flex items-center justify-between rounded-lg border border-[hsl(var(--border))] p-3\"\n >\n <div className=\"flex items-center gap-3\">\n <span className=\"flex min-w-[40px] items-center justify-center rounded-full border border-[hsl(var(--border))] px-2 py-0.5 text-xs\">\n #{task.sequence}\n </span>\n <div>\n <div className=\"text-sm font-medium\">{task.task_id}</div>\n <div className=\"text-xs text-[hsl(var(--muted-foreground))]\">\n 平台: {task.platform}\n </div>\n </div>\n </div>\n <div className=\"text-right\">\n <div className=\"text-sm\">\n {task.start_time} - {task.end_time}\n </div>\n <div className=\"text-xs text-[hsl(var(--muted-foreground))]\">\n 时长: {task.end_time - task.start_time}\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n\n {activeTab === \"platforms\" && (\n <div className=\"max-h-[450px] space-y-3 overflow-y-auto\">\n {stats.platforms.map((platform, index) => (\n <div\n key={platform.name}\n className=\"rounded-lg border border-[hsl(var(--border))] p-4\"\n >\n <div className=\"mb-2 flex items-start justify-between\">\n <div className=\"flex items-center gap-2\">\n <Users className=\"h-4 w-4\" />\n <span className=\"font-medium\">{platform.name}</span>\n </div>\n <span\n className={`rounded-full px-2 py-0.5 text-xs text-white ${getPlatformColor(index)}`}\n >\n {platform.count} 个任务\n </span>\n </div>\n <div className=\"space-y-1 text-sm\">\n <div className=\"text-[hsl(var(--muted-foreground))]\">\n 总执行时间: {platform.totalTime}\n </div>\n <div className=\"text-[hsl(var(--muted-foreground))]\">\n 分配任务: {platform.tasks.slice(0, 3).join(\", \")}\n {platform.tasks.length > 3 && ` ... +${platform.tasks.length - 3}`}\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n )\n}\n","import { memo, useCallback, useEffect, useMemo, useRef } from \"react\"\nimport type { CardComponentProps } from \"../../../lib/card-registry\"\nimport { useCardState } from \"../../../hooks/use-card-state\"\nimport { Check } from \"lucide-react\"\n\ninterface ExperienceCardSection {\n title: string\n items: string[]\n}\n\ninterface OptionItem {\n label: string\n value: string\n description?: string\n}\n\ninterface LearningOptions {\n question: string\n options: OptionItem[]\n}\n\ninterface ExperienceCardWithOptionsPayload {\n header: {\n strategy_name: string\n }\n sections: ExperienceCardSection[]\n learning_options?: LearningOptions\n}\n\nconst sectionColors = [\n {\n bg: \"border-l-blue-500/50 bg-blue-950/20\",\n title: \"text-blue-400\",\n bullet: \"text-blue-500\",\n },\n {\n bg: \"border-l-amber-500/50 bg-amber-950/20\",\n title: \"text-amber-400\",\n bullet: \"text-amber-500\",\n },\n {\n bg: \"border-l-emerald-500/50 bg-emerald-950/20\",\n title: \"text-emerald-400\",\n bullet: \"text-emerald-500\",\n },\n {\n bg: \"border-l-purple-500/50 bg-purple-950/20\",\n title: \"text-purple-400\",\n bullet: \"text-purple-500\",\n },\n]\n\nfunction ExperienceCardWithOptionsInner({ card, sendMessage }: CardComponentProps) {\n const payload = card.payload as ExperienceCardWithOptionsPayload | undefined\n\n const cardId = useMemo(() => `experience-card-${card.id}`, [card.id])\n\n const [selectedOption, setSelectedOption] = useCardState<string | null>(\n `${cardId}-selectedOption`,\n null,\n )\n const [isSending, setIsSending] = useCardState<boolean>(`${cardId}-isSending`, false)\n const [showProcessing, setShowProcessing] = useCardState<boolean>(\n `${cardId}-showProcessing`,\n false,\n )\n\n const sendMessageRef = useRef(sendMessage)\n sendMessageRef.current = sendMessage\n\n const processingTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const handleOptionClick = useCallback(\n async (option: OptionItem) => {\n if (selectedOption || isSending) return\n\n setSelectedOption(option.value)\n setIsSending(true)\n setShowProcessing(true)\n\n if (processingTimerRef.current) {\n clearTimeout(processingTimerRef.current)\n }\n\n processingTimerRef.current = setTimeout(() => {\n setShowProcessing(false)\n }, 5000)\n\n const currentSendMessage = sendMessageRef.current\n if (currentSendMessage) {\n try {\n await currentSendMessage(option.label)\n setIsSending(false)\n } catch (error) {\n console.error(\"发送选项失败:\", error)\n setSelectedOption(null)\n setIsSending(false)\n setShowProcessing(false)\n if (processingTimerRef.current) {\n clearTimeout(processingTimerRef.current)\n }\n }\n } else {\n console.warn(\"sendMessage 函数未提供,无法发送用户选择\")\n setIsSending(false)\n setShowProcessing(false)\n if (processingTimerRef.current) {\n clearTimeout(processingTimerRef.current)\n }\n }\n },\n [selectedOption, isSending, setSelectedOption, setIsSending, setShowProcessing],\n )\n\n useEffect(() => {\n return () => {\n if (processingTimerRef.current) {\n clearTimeout(processingTimerRef.current)\n }\n }\n }, [])\n\n if (!payload?.header?.strategy_name || !payload?.sections) {\n return (\n <div className=\"w-full rounded-lg border border-red-500/50 bg-red-500/10 p-4\">\n <p className=\"text-red-400\">经验卡片数据格式错误</p>\n </div>\n )\n }\n\n return (\n <div className=\"w-full overflow-hidden rounded-lg border-2 border-[hsl(var(--primary)/0.3)] shadow-lg transition-shadow duration-300 hover:shadow-xl\">\n {/* 标题栏 */}\n <div className=\"border-b-2 border-[hsl(var(--primary)/0.2)] bg-gradient-to-br from-[hsl(var(--primary)/0.15)] via-[hsl(var(--primary)/0.1)] to-[hsl(var(--primary)/0.05)] px-6 pb-4 pt-5\">\n <h3 className=\"bg-gradient-to-r from-[hsl(var(--primary))] via-[hsl(var(--primary)/0.8)] to-[hsl(var(--primary)/0.6)] bg-clip-text text-center text-lg font-bold text-transparent\">\n 敌方策略:{payload.header.strategy_name}\n </h3>\n </div>\n\n {/* 经验内容部分 */}\n {payload.sections.map((section, sectionIndex) => {\n const colors = sectionColors[sectionIndex % sectionColors.length]\n const isLast =\n sectionIndex === payload.sections.length - 1 && !payload.learning_options\n\n return (\n <div\n key={sectionIndex}\n className={`border-l-4 p-4 transition-colors duration-200 ${colors.bg} ${\n !isLast ? \"border-b border-[hsl(var(--border)/0.5)]\" : \"\"\n }`}\n >\n <h3\n className={`mb-3 flex items-center gap-2 text-base font-bold ${colors.title}`}\n >\n <span className=\"inline-block h-1.5 w-1.5 rounded-full bg-current\" />\n {section.title}\n </h3>\n <ul className=\"space-y-2\">\n {section.items.map((item, itemIndex) => (\n <li key={itemIndex} className=\"group flex items-start gap-2.5 text-sm\">\n <span\n className={`mt-0.5 font-bold transition-transform duration-200 group-hover:scale-125 ${colors.bullet}`}\n >\n ▸\n </span>\n <span className=\"flex-1 leading-relaxed text-[hsl(var(--foreground)/0.9)]\">\n {item}\n </span>\n </li>\n ))}\n </ul>\n </div>\n )\n })}\n\n {/* 学习确认选项部分 */}\n {payload.learning_options && (\n <div className=\"border-t-2 border-[hsl(var(--primary)/0.1)] bg-gradient-to-br from-[hsl(var(--muted)/0.4)] via-[hsl(var(--muted)/0.3)] to-[hsl(var(--muted)/0.2)] p-5\">\n {/* 问题文本 */}\n <div className=\"mb-4 flex items-start gap-2 rounded-lg border-l-4 border-[hsl(var(--primary)/0.4)] bg-[hsl(var(--primary)/0.05)] p-3 text-sm font-semibold text-[hsl(var(--foreground))]\">\n <span className=\"mt-1.5 inline-block h-1.5 w-1.5 rounded-full bg-[hsl(var(--primary))]\" />\n <span className=\"flex-1\">{payload.learning_options.question}</span>\n </div>\n\n {/* 选项列表 */}\n <div className=\"flex flex-col gap-3\">\n {payload.learning_options.options.map((option, index) => {\n const isSelected = selectedOption === option.value\n const isDisabled = selectedOption !== null && !isSelected\n\n return (\n <button\n key={index}\n type=\"button\"\n className={`\n block w-full transform rounded-xl border-2 px-4 py-3\n text-left transition-all duration-300\n hover:scale-[1.02] active:scale-[0.98]\n ${\n isSelected\n ? \"border-[hsl(var(--primary))] bg-gradient-to-br from-[hsl(var(--primary))] to-[hsl(var(--primary)/0.8)] text-[hsl(var(--primary-foreground))] shadow-lg\"\n : \"border-[hsl(var(--border)/0.6)] bg-[hsl(var(--card)/0.8)] backdrop-blur-sm hover:border-[hsl(var(--primary)/0.3)] hover:bg-[hsl(var(--accent)/0.5)] hover:shadow-md\"\n }\n ${isDisabled ? \"cursor-not-allowed opacity-50 hover:scale-100\" : \"cursor-pointer\"}\n `}\n onClick={() => handleOptionClick(option)}\n disabled={isDisabled || isSending}\n >\n <div className=\"flex w-full items-start gap-3\">\n <div className=\"mt-0.5 flex-shrink-0\">\n {isSelected ? (\n <div className=\"flex h-5 w-5 items-center justify-center rounded-full bg-[hsl(var(--primary-foreground)/0.2)]\">\n <Check className=\"h-3.5 w-3.5\" />\n </div>\n ) : (\n <div className=\"h-5 w-5 rounded-full border-2 border-current opacity-60 transition-opacity hover:opacity-100\" />\n )}\n </div>\n\n <div className=\"min-w-0 flex-1 overflow-hidden\">\n <div\n className={`break-words text-sm font-semibold whitespace-normal ${\n isSelected ? \"\" : \"text-[hsl(var(--foreground))]\"\n }`}\n >\n {option.label}\n </div>\n {option.description && (\n <div\n className={`mt-1.5 break-words text-xs leading-relaxed whitespace-normal ${\n isSelected\n ? \"opacity-90\"\n : \"text-[hsl(var(--muted-foreground))]\"\n }`}\n >\n {option.description}\n </div>\n )}\n </div>\n </div>\n </button>\n )\n })}\n </div>\n\n {/* 提示文本 */}\n {!selectedOption && (\n <div className=\"mt-3 rounded-lg border border-[hsl(var(--border)/0.3)] bg-[hsl(var(--muted)/0.3)] px-3 py-2 text-center text-xs text-[hsl(var(--muted-foreground))]\">\n 请选择您的决策\n </div>\n )}\n {showProcessing && (\n <div className=\"mt-3 animate-pulse rounded-lg border border-[hsl(var(--primary)/0.3)] bg-[hsl(var(--primary)/0.1)] px-3 py-2 text-center text-xs font-medium text-[hsl(var(--primary))]\">\n 已选择,正在处理...\n </div>\n )}\n </div>\n )}\n </div>\n )\n}\n\nfunction cardPropsAreEqual(prevProps: CardComponentProps, nextProps: CardComponentProps) {\n const prevCard = prevProps.card\n const nextCard = nextProps.card\n\n return (\n prevCard.id === nextCard.id &&\n prevCard.type === nextCard.type &&\n prevCard.title === nextCard.title &&\n JSON.stringify(prevCard.payload) === JSON.stringify(nextCard.payload)\n )\n}\n\nexport const ExperienceCardWithOptions = memo(ExperienceCardWithOptionsInner, cardPropsAreEqual)\nExperienceCardWithOptions.displayName = \"ExperienceCardWithOptions\"\n","import { Clock, Plane } from \"lucide-react\"\nimport type { CardComponentProps } from \"../../../lib/card-registry\"\n\ninterface Flight {\n flightNo: string\n airline: string\n departure: {\n city: string\n airport: string\n time: string\n }\n arrival: {\n city: string\n airport: string\n time: string\n }\n duration: string\n price: number\n discount?: string\n}\n\ninterface FlightPayload {\n flights: Flight[]\n}\n\nexport function FlightCard({ card }: CardComponentProps) {\n const payload = card.payload as FlightPayload | undefined\n\n if (!payload || !Array.isArray(payload.flights)) {\n return (\n <div className=\"rounded-md border border-red-500/50 bg-red-500/10 p-4\">\n <p className=\"text-red-400 text-sm\">航班卡片数据格式错误</p>\n </div>\n )\n }\n\n return (\n <div className=\"rounded-lg border border-white/10 bg-white/5 p-4\">\n {card.title && (\n <h3 className=\"font-semibold text-lg text-zinc-100 mb-4\">{card.title}</h3>\n )}\n <div className=\"space-y-3\">\n {payload.flights.map((flight, index) => (\n <div key={index} className=\"rounded-lg border border-white/10 p-3\">\n <div className=\"flex justify-between items-center mb-2\">\n <div className=\"flex items-center gap-2\">\n <Plane className=\"w-4 h-4 text-sky-400\" />\n <span className=\"font-medium text-zinc-200\">{flight.flightNo}</span>\n <span className=\"text-sm text-zinc-400\">{flight.airline}</span>\n </div>\n <div className=\"text-right\">\n <span className=\"text-lg font-bold text-orange-400\">\n ¥{flight.price}\n </span>\n {flight.discount && (\n <span className=\"ml-2 text-xs text-orange-400\">{flight.discount}</span>\n )}\n </div>\n </div>\n <div className=\"flex items-center justify-between\">\n <div className=\"text-center\">\n <div className=\"text-lg font-medium text-zinc-100\">\n {flight.departure.time}\n </div>\n <div className=\"text-sm text-zinc-400\">{flight.departure.city}</div>\n <div className=\"text-xs text-zinc-500\">{flight.departure.airport}</div>\n </div>\n <div className=\"flex-1 flex flex-col items-center px-4\">\n <div className=\"flex items-center gap-1 text-xs text-zinc-400\">\n <Clock className=\"w-3 h-3\" />\n {flight.duration}\n </div>\n <div className=\"w-full h-px bg-white/10 my-1 relative\">\n <div className=\"absolute right-0 top-1/2 -translate-y-1/2 w-0 h-0 border-t-4 border-t-transparent border-b-4 border-b-transparent border-l-4 border-l-zinc-500\" />\n </div>\n </div>\n <div className=\"text-center\">\n <div className=\"text-lg font-medium text-zinc-100\">\n {flight.arrival.time}\n </div>\n <div className=\"text-sm text-zinc-400\">{flight.arrival.city}</div>\n <div className=\"text-xs text-zinc-500\">{flight.arrival.airport}</div>\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n","import { MapPin, Star } from \"lucide-react\"\nimport type { CardComponentProps } from \"../../../lib/card-registry\"\n\ninterface Hotel {\n name: string\n star: number\n location: string\n rating: number\n reviewCount: number\n pricePerNight: number\n facilities: string[]\n breakfast?: string\n}\n\ninterface HotelPayload {\n hotels: Hotel[]\n}\n\nexport function HotelCard({ card }: CardComponentProps) {\n const payload = card.payload as HotelPayload | undefined\n\n if (!payload || !Array.isArray(payload.hotels)) {\n return (\n <div className=\"rounded-md border border-red-500/50 bg-red-500/10 p-4\">\n <p className=\"text-red-400 text-sm\">酒店卡片数据格式错误</p>\n </div>\n )\n }\n\n return (\n <div className=\"rounded-lg border border-white/10 bg-white/5 p-4\">\n {card.title && (\n <h3 className=\"font-semibold text-lg text-zinc-100 mb-4\">{card.title}</h3>\n )}\n <div className=\"space-y-3\">\n {payload.hotels.map((hotel, index) => (\n <div key={index} className=\"rounded-lg border border-white/10 p-3\">\n <div className=\"flex justify-between items-start mb-2\">\n <div>\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium text-zinc-200\">{hotel.name}</span>\n <span className=\"px-1.5 py-0.5 bg-amber-500/20 text-amber-400 text-xs rounded\">\n {hotel.star}星\n </span>\n </div>\n <div className=\"flex items-center gap-1 text-sm text-zinc-400 mt-1\">\n <MapPin className=\"w-3 h-3\" />\n {hotel.location}\n </div>\n </div>\n <div className=\"text-right\">\n <div className=\"text-lg font-bold text-orange-400\">\n ¥{hotel.pricePerNight}\n <span className=\"text-xs font-normal text-zinc-500\">/晚</span>\n </div>\n {hotel.breakfast && (\n <span className=\"text-xs text-emerald-400\">{hotel.breakfast}</span>\n )}\n </div>\n </div>\n <div className=\"flex items-center gap-2 mb-2\">\n <div className=\"flex items-center gap-1\">\n <Star className=\"w-3 h-3 text-amber-400 fill-amber-400\" />\n <span className=\"text-sm font-medium text-zinc-200\">{hotel.rating}</span>\n </div>\n <span className=\"text-xs text-zinc-500\">({hotel.reviewCount}条评价)</span>\n </div>\n <div className=\"flex flex-wrap gap-1\">\n {hotel.facilities.map((f, i) => (\n <span\n key={i}\n className=\"px-2 py-0.5 bg-white/5 text-zinc-400 text-xs rounded\"\n >\n {f}\n </span>\n ))}\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n","import {\n AlertTriangle,\n ChevronDown,\n ChevronRight,\n Clock,\n Crosshair,\n FileCheck,\n MapPin,\n Radio,\n Search,\n Target,\n Zap,\n} from \"lucide-react\"\nimport { Fragment, useState } from \"react\"\nimport type { CardComponentProps } from \"../../../lib/card-registry\"\nimport { cn } from \"../../../lib/utils\"\nimport type { F2T2EACard } from \"./kill-chain-types\"\n\nconst getPriorityColor = (priority?: number): string => {\n switch (priority) {\n case 1:\n return \"bg-red-600 text-white animate-pulse\"\n case 2:\n return \"bg-orange-500 text-white\"\n case 3:\n return \"bg-yellow-500 text-yellow-50\"\n case 4:\n return \"bg-sky-600 text-white\"\n case 5:\n return \"bg-zinc-600 text-zinc-200\"\n default:\n return \"bg-zinc-700 text-zinc-300\"\n }\n}\n\nconst getPhaseIcon = (phase: string) => {\n switch (phase.toLowerCase()) {\n case \"find\":\n return Search\n case \"fix\":\n return MapPin\n case \"track\":\n return Radio\n case \"target\":\n return Crosshair\n case \"engage\":\n return Zap\n case \"assess\":\n return FileCheck\n default:\n return Target\n }\n}\n\ntype KillChainPhase = F2T2EACard[\"kill_chain\"][keyof F2T2EACard[\"kill_chain\"]]\n\nconst getChineseName = (phase: string): string => {\n const names: Record<string, string> = {\n find: \"发现\",\n fix: \"定位\",\n track: \"跟踪\",\n target: \"瞄准\",\n engage: \"打击\",\n assess: \"评估\",\n }\n return names[phase.toLowerCase()] || phase\n}\n\nconst getEngagementModeName = (mode: string): string => {\n const modes: Record<string, string> = {\n salvo: \"齐射打击\",\n sequential: \"顺序打击\",\n saturation: \"饱和打击\",\n }\n return modes[mode] || mode\n}\n\nconst formatTime = (time: string): string => {\n if (!time) return \"--\"\n if (time === \"ASAP\" || time === \"立即\") return time\n\n try {\n const date = new Date(time)\n if (Number.isNaN(date.getTime())) return time\n return date.toLocaleTimeString(\"zh-CN\", { hour: \"2-digit\", minute: \"2-digit\" })\n } catch {\n return time\n }\n}\n\nconst renderPhaseDetails = (phaseName: string, phase: KillChainPhase) => {\n const details: React.ReactNode[] = []\n\n switch (phaseName.toLowerCase()) {\n case \"find\":\n if (\"primary_method\" in phase && phase.primary_method) {\n details.push(\n <div key=\"primary\" className=\"space-y-1\">\n <div className=\"flex items-start gap-2\">\n <span className=\"text-zinc-500\">平台:</span>\n <span>{phase.primary_method.platform}</span>\n </div>\n <div className=\"flex items-start gap-2\">\n <span className=\"text-zinc-500\">能力:</span>\n <span>{phase.primary_method.capability}</span>\n </div>\n <div className=\"flex items-start gap-2\">\n <span className=\"text-zinc-500\">覆盖:</span>\n <span>{phase.primary_method.coverage}</span>\n </div>\n </div>,\n )\n }\n if (\"estimated_time\" in phase && phase.estimated_time) {\n details.push(\n <div key=\"time\" className=\"flex items-center gap-2\">\n <span className=\"text-zinc-500\">预计耗时:</span>\n <span>{phase.estimated_time}分钟</span>\n {\"confidence_level\" in phase && phase.confidence_level !== undefined && (\n <>\n <span className=\"text-zinc-400\">| 置信度:</span>\n <span>{phase.confidence_level}%</span>\n </>\n )}\n </div>,\n )\n }\n if (\"backup_method\" in phase && phase.backup_method) {\n details.push(\n <div key=\"backup\" className=\"flex items-start gap-2\">\n <span className=\"text-zinc-500\">备用方案:</span>\n <span>\n {phase.backup_method.platform} ({phase.backup_method.capability})\n {phase.backup_method.trigger_condition && ` - ${phase.backup_method.trigger_condition}`}\n </span>\n </div>,\n )\n }\n break\n\n case \"fix\":\n if (\"accuracy_requirement\" in phase && phase.accuracy_requirement) {\n details.push(\n <div key=\"accuracy\" className=\"flex items-center gap-2\">\n <span className=\"text-zinc-500\">精度要求:</span>\n <span>{phase.accuracy_requirement}</span>\n </div>,\n )\n }\n if (\"positioning_method\" in phase && phase.positioning_method) {\n details.push(\n <div key=\"method\" className=\"flex items-start gap-2\">\n <span className=\"text-zinc-500\">定位方法:</span>\n <span>\n {phase.positioning_method.primary}\n {phase.positioning_method.secondary && ` / ${phase.positioning_method.secondary}`}\n </span>\n </div>,\n )\n }\n if (\"update_frequency\" in phase && phase.update_frequency) {\n details.push(\n <div key=\"freq\" className=\"flex items-center gap-2\">\n <span className=\"text-zinc-500\">更新频率:</span>\n <span>{phase.update_frequency}秒</span>\n </div>,\n )\n }\n if (\"coordinate_system\" in phase && phase.coordinate_system) {\n details.push(\n <div key=\"coord\" className=\"flex items-center gap-2\">\n <span className=\"text-zinc-500\">坐标系统:</span>\n <span>{phase.coordinate_system}</span>\n </div>,\n )\n }\n break\n\n case \"track\":\n if (\"tracking_platform\" in phase && phase.tracking_platform) {\n details.push(\n <div key=\"platform\" className=\"flex items-center gap-2\">\n <span className=\"text-zinc-500\">跟踪平台:</span>\n <span>{phase.tracking_platform}</span>\n </div>,\n )\n }\n if (\"tracking_mode\" in phase && phase.tracking_mode) {\n details.push(\n <div key=\"mode\" className=\"flex items-center gap-2\">\n <span className=\"text-zinc-500\">跟踪模式:</span>\n <span>{phase.tracking_mode === \"continuous\" ? \"连续跟踪\" : \"间歇跟踪\"}</span>\n </div>,\n )\n }\n if (\"handover_procedure\" in phase && phase.handover_procedure) {\n details.push(\n <div key=\"handover\" className=\"flex items-start gap-2\">\n <span className=\"text-zinc-500\">交接程序:</span>\n <span>\n {phase.handover_procedure.from_unit} → {phase.handover_procedure.to_unit}\n {phase.handover_procedure.handover_criteria &&\n ` (${phase.handover_procedure.handover_criteria})`}\n </span>\n </div>,\n )\n }\n if (\"track_quality_metrics\" in phase && phase.track_quality_metrics) {\n details.push(\n <div key=\"quality\" className=\"flex items-start gap-2\">\n <span className=\"text-zinc-500\">质量指标:</span>\n <span>\n 更新率{phase.track_quality_metrics.update_rate}Hz | 精度\n {phase.track_quality_metrics.accuracy} | 延迟{phase.track_quality_metrics.latency}秒\n </span>\n </div>,\n )\n }\n break\n\n case \"target\":\n if (\"engagement_criteria\" in phase && phase.engagement_criteria?.length) {\n details.push(\n <div key=\"criteria\" className=\"space-y-1\">\n <span className=\"text-zinc-500\">开火条件:</span>\n <div className=\"pl-4\">\n {phase.engagement_criteria.map((c: string, i: number) => (\n <div key={i} className=\"flex items-center gap-1\">\n <span className=\"text-emerald-400\">✓</span>\n <span>{c}</span>\n </div>\n ))}\n </div>\n </div>,\n )\n }\n if (\"authorization_level\" in phase && phase.authorization_level) {\n details.push(\n <div key=\"auth\" className=\"flex items-center gap-2\">\n <span className=\"text-zinc-500\">授权层级:</span>\n <span>{phase.authorization_level}</span>\n </div>,\n )\n }\n if (\"roe_compliance\" in phase && phase.roe_compliance) {\n details.push(\n <div key=\"roe\" className=\"space-y-1\">\n <span className=\"text-zinc-500\">ROE合规:</span>\n {phase.roe_compliance.checks?.length > 0 && (\n <div className=\"pl-4\">\n {phase.roe_compliance.checks.map((check: string, i: number) => (\n <div key={i} className=\"flex items-center gap-1\">\n <span className={phase.roe_compliance.verified ? \"text-emerald-400\" : \"text-amber-400\"}>\n {phase.roe_compliance.verified ? \"✓\" : \"○\"}\n </span>\n <span>{check}</span>\n </div>\n ))}\n </div>\n )}\n </div>,\n )\n }\n if (\"targeting_solution\" in phase && phase.targeting_solution) {\n details.push(\n <div key=\"solution\" className=\"flex items-start gap-2\">\n <span className=\"text-zinc-500\">瞄准方案:</span>\n <span>\n {phase.targeting_solution.method} ({phase.targeting_solution.accuracy})\n {phase.targeting_solution.computed_at &&\n ` - ${new Date(phase.targeting_solution.computed_at).toLocaleTimeString(\"zh-CN\")}`}\n </span>\n </div>,\n )\n }\n break\n\n case \"engage\":\n if (\"strike_platform\" in phase && phase.strike_platform) {\n details.push(\n <div key=\"platform\" className=\"flex items-start gap-2\">\n <span className=\"text-zinc-500\">执行单位:</span>\n <span>\n {phase.strike_platform.unit} / {phase.strike_platform.callsign}\n {phase.strike_platform.location && ` @ ${phase.strike_platform.location}`}\n </span>\n </div>,\n )\n }\n if (\"weapon_selection\" in phase && phase.weapon_selection) {\n details.push(\n <div key=\"weapon\" className=\"flex items-start gap-2\">\n <span className=\"text-zinc-500\">武器选择:</span>\n <span>\n {phase.weapon_selection.type} × {phase.weapon_selection.quantity}\n {phase.weapon_selection.fuze_setting && ` (${phase.weapon_selection.fuze_setting})`}\n </span>\n </div>,\n )\n }\n if (\"engagement_mode\" in phase && phase.engagement_mode) {\n details.push(\n <div key=\"mode\" className=\"flex items-center gap-2\">\n <span className=\"text-zinc-500\">打击方式:</span>\n <span>{getEngagementModeName(phase.engagement_mode)}</span>\n </div>,\n )\n }\n if (\"tot\" in phase && phase.tot) {\n details.push(\n <div key=\"tot\" className=\"flex items-center gap-2\">\n <span className=\"text-zinc-500\">目标时间:</span>\n <span>{formatTime(phase.tot)}</span>\n </div>,\n )\n }\n if (\"execution_window\" in phase && phase.execution_window) {\n details.push(\n <div key=\"window\" className=\"flex items-start gap-2\">\n <span className=\"text-zinc-500\">执行窗口:</span>\n <span>\n {formatTime(phase.execution_window.start)} - {formatTime(phase.execution_window.end)}\n </span>\n </div>,\n )\n }\n break\n\n case \"assess\":\n if (\"bda_methods\" in phase && phase.bda_methods) {\n details.push(\n <div key=\"methods\" className=\"flex items-start gap-2\">\n <span className=\"text-zinc-500\">BDA方法:</span>\n <span>\n {phase.bda_methods.primary}\n {phase.bda_methods.secondary?.length > 0 &&\n ` + ${phase.bda_methods.secondary.join(\" + \")}`}\n </span>\n </div>,\n )\n }\n if (\"assessment_timeline\" in phase && phase.assessment_timeline) {\n details.push(\n <div key=\"timeline\" className=\"flex items-center gap-2\">\n <span className=\"text-zinc-500\">评估时限:</span>\n <span>\n 初步{phase.assessment_timeline.initial}分钟 | 详细{phase.assessment_timeline.detailed}\n 小时\n </span>\n </div>,\n )\n }\n if (\"success_indicators\" in phase && phase.success_indicators?.length) {\n details.push(\n <div key=\"indicators\" className=\"flex items-start gap-2\">\n <span className=\"text-zinc-500\">成功指标:</span>\n <span>{phase.success_indicators.join(\" | \")}</span>\n </div>,\n )\n }\n if (\"damage_categories\" in phase && phase.damage_categories) {\n details.push(\n <div key=\"damage\" className=\"flex items-start gap-2\">\n <span className=\"text-zinc-500\">毁伤分类:</span>\n <span>物理毁伤 | 功能毁伤 | 系统毁伤</span>\n </div>,\n )\n }\n break\n }\n\n return details.length > 0 ? details : <div className=\"text-zinc-500\">暂无规划信息</div>\n}\n\ntype Risk = {\n category: \"operational\" | \"technical\" | \"political\" | \"environmental\"\n description: string\n probability: \"high\" | \"medium\" | \"low\"\n impact: \"high\" | \"medium\" | \"low\"\n mitigation: string\n}\n\nfunction RiskMatrix({ risks = [] }: { risks?: Risk[] }) {\n const matrix = [\n [\"低\", \"中\", \"高\"],\n [\"低\", \"低\", \"中\"],\n [\"低\", \"低\", \"低\"],\n ]\n\n const getRiskPosition = (risk: Risk) => {\n const probMap: Record<\"high\" | \"medium\" | \"low\", number> = { high: 2, medium: 1, low: 0 }\n const impactMap: Record<\"high\" | \"medium\" | \"low\", number> = { high: 0, medium: 1, low: 2 }\n return { x: probMap[risk.probability] || 0, y: impactMap[risk.impact] || 2 }\n }\n\n const riskPositions = risks.map((r, i) => ({ ...getRiskPosition(r), id: i + 1 }))\n\n const getCellColor = (cell: string) => {\n switch (cell) {\n case \"高\":\n return \"bg-orange-600 text-white\"\n case \"中\":\n return \"bg-yellow-600 text-white\"\n case \"低\":\n return \"bg-emerald-600 text-white\"\n default:\n return \"bg-zinc-700\"\n }\n }\n\n return (\n <div className=\"flex gap-4\">\n <div className=\"flex flex-col\">\n <div className=\"text-xs text-zinc-500 mb-1\">影响</div>\n <div className=\"grid grid-cols-3 gap-1\">\n {matrix.map((row, y) => (\n <Fragment key={y}>\n {row.map((cell, x) => (\n <div\n key={`${x}-${y}`}\n className={cn(\n \"relative w-8 h-8 flex items-center justify-center text-xs font-semibold rounded\",\n getCellColor(cell),\n )}\n >\n {cell}\n {riskPositions\n .filter((p) => p.x === x && p.y === y)\n .map((p) => (\n <div key={p.id} className=\"absolute inset-0 flex items-center justify-center\">\n <span className=\"text-xs font-bold text-zinc-100 bg-zinc-900/80 rounded-full w-4 h-4 flex items-center justify-center\">\n {p.id}\n </span>\n </div>\n ))}\n </div>\n ))}\n </Fragment>\n ))}\n </div>\n <div className=\"text-xs text-zinc-500 mt-1 text-center\">概率 →</div>\n </div>\n\n <div className=\"flex-1 space-y-1\">\n {risks.map((risk, i) => (\n <div key={i} className=\"text-xs\">\n <span className=\"font-medium\">{i + 1}.</span> {risk.description}\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nfunction KillChainPhaseCard({\n name,\n phase,\n expanded,\n onToggle,\n}: {\n name: string\n phase: KillChainPhase\n expanded: boolean\n onToggle: () => void\n}) {\n const Icon = getPhaseIcon(name)\n\n return (\n <div className=\"border border-white/10 rounded-lg p-3 mb-2 bg-white/5\">\n <button type=\"button\" className=\"flex w-full items-center justify-between cursor-pointer\" onClick={onToggle}>\n <div className=\"flex items-center gap-3\">\n {expanded ? (\n <ChevronDown className=\"w-4 h-4\" />\n ) : (\n <ChevronRight className=\"w-4 h-4\" />\n )}\n <Icon className=\"w-5 h-5 text-zinc-400\" />\n <span className=\"font-medium capitalize\">\n {name.toUpperCase()} ({getChineseName(name)})\n </span>\n </div>\n </button>\n\n {expanded && (\n <div className=\"mt-3 pl-10 text-sm space-y-2\">{renderPhaseDetails(name, phase)}</div>\n )}\n </div>\n )\n}\n\nexport function KillChainCard({ card }: CardComponentProps) {\n const payload = card.payload as F2T2EACard | undefined\n const [expandedPhases, setExpandedPhases] = useState<Set<string>>(new Set())\n const [showRestrike, setShowRestrike] = useState(false)\n const [showRisk, setShowRisk] = useState(false)\n\n if (!payload?.kill_chain) {\n return (\n <div className=\"border border-red-500/50 rounded-md p-4 bg-red-500/10\">\n <p className=\"text-red-400 text-sm\">杀伤链卡片数据格式错误:缺少必要的 kill_chain 数据</p>\n </div>\n )\n }\n\n const togglePhase = (phase: string) => {\n setExpandedPhases((prev) => {\n const next = new Set(prev)\n if (next.has(phase)) {\n next.delete(phase)\n } else {\n next.add(phase)\n }\n return next\n })\n }\n\n return (\n <div className=\"border border-white/10 rounded-lg shadow-lg bg-white/5\">\n {/* 头部区域 */}\n <div\n className={cn(\n \"p-4 border-b border-white/10 flex items-center justify-between\",\n payload.metadata?.priority === 1 && \"bg-red-500/5\",\n )}\n >\n <div className=\"flex items-center gap-3\">\n <Target className=\"w-6 h-6 text-zinc-200\" />\n <div>\n <h3 className=\"font-bold text-lg flex items-center gap-2 text-zinc-100\">\n {payload.metadata?.target_id || \"TGT-UNKNOWN\"}\n <span className=\"text-zinc-600\">|</span>\n {payload.metadata?.target_name || card.title || \"未知目标\"}\n </h3>\n <div className=\"flex items-center gap-2 mt-1\">\n {payload.metadata?.target_type && (\n <span\n className={cn(\n \"px-2 py-0.5 rounded text-xs\",\n payload.metadata.target_type === \"fixed\"\n ? \"bg-zinc-700 text-zinc-300\"\n : payload.metadata.target_type === \"mobile\"\n ? \"bg-sky-500/20 text-sky-400\"\n : \"bg-amber-500/20 text-amber-400\",\n )}\n >\n {payload.metadata.target_type === \"fixed\"\n ? \"固定目标\"\n : payload.metadata.target_type === \"mobile\"\n ? \"移动目标\"\n : \"时敏目标\"}\n </span>\n )}\n {payload.metadata?.priority && (\n <span\n className={cn(\n \"px-2 py-0.5 rounded text-xs font-bold\",\n getPriorityColor(payload.metadata.priority),\n )}\n >\n P{payload.metadata.priority}\n </span>\n )}\n {payload.metadata?.classification && (\n <span className=\"px-2 py-0.5 bg-zinc-200 text-zinc-900 rounded text-xs\">\n {payload.metadata.classification}\n </span>\n )}\n </div>\n </div>\n </div>\n\n <div className=\"text-right\">\n {payload.metadata?.created_at && (\n <div className=\"text-xs text-zinc-500\">\n <Clock className=\"w-3 h-3 inline mr-1\" />\n 创建: {new Date(payload.metadata.created_at).toLocaleString(\"zh-CN\")}\n </div>\n )}\n {payload.metadata?.updated_at && (\n <div className=\"text-xs text-zinc-500\">\n 更新: {new Date(payload.metadata.updated_at).toLocaleString(\"zh-CN\")}\n </div>\n )}\n </div>\n </div>\n\n {/* F2T2EA 杀伤链规划区域 */}\n <div className=\"p-4\">\n <div className=\"flex items-center justify-between mb-4\">\n <h4 className=\"font-semibold text-base text-zinc-200\">F2T2EA 杀伤链规划</h4>\n </div>\n\n <div className=\"space-y-2\">\n {Object.entries(payload.kill_chain).map(([name, phase]) => (\n <KillChainPhaseCard\n key={name}\n name={name}\n phase={phase}\n expanded={expandedPhases.has(name)}\n onToggle={() => togglePhase(name)}\n />\n ))}\n </div>\n </div>\n\n {/* 再攻击计划 */}\n {payload.restrike_plan && (\n <div className=\"border-t border-white/10 p-4\">\n <button\n type=\"button\"\n className=\"flex w-full items-center justify-between cursor-pointer\"\n onClick={() => setShowRestrike(!showRestrike)}\n >\n <h4 className=\"font-semibold text-base flex items-center gap-2 text-zinc-200\">\n <Zap className=\"w-4 h-4\" />\n 再攻击计划\n </h4>\n {showRestrike ? (\n <ChevronDown className=\"w-4 h-4\" />\n ) : (\n <ChevronRight className=\"w-4 h-4\" />\n )}\n </button>\n\n {showRestrike && (\n <div className=\"mt-3 space-y-3 text-sm\">\n {payload.restrike_plan.trigger_conditions && (\n <div>\n <span className=\"font-medium text-zinc-500\">触发条件:</span>\n <ul className=\"mt-1 ml-4 list-disc\">\n {payload.restrike_plan.trigger_conditions.map((c, i) => (\n <li key={i}>{c}</li>\n ))}\n </ul>\n </div>\n )}\n\n {payload.restrike_plan.reserved_resources && (\n <div>\n <span className=\"font-medium text-zinc-500\">预留资源:</span>\n <div className=\"mt-1 ml-4\">\n <div>平台: {payload.restrike_plan.reserved_resources.platform}</div>\n {payload.restrike_plan.reserved_resources.weapons.map((w, i) => (\n <div key={i}>\n 武器: {w.type} × {w.quantity}\n </div>\n ))}\n </div>\n </div>\n )}\n\n {payload.restrike_plan.execution_method && (\n <div>\n <span className=\"font-medium text-zinc-500\">执行方式:</span>\n <span className=\"ml-2\">{payload.restrike_plan.execution_method}</span>\n </div>\n )}\n\n {payload.restrike_plan.decision_authority && (\n <div>\n <span className=\"font-medium text-zinc-500\">决策权限:</span>\n <span className=\"ml-2\">{payload.restrike_plan.decision_authority}</span>\n </div>\n )}\n </div>\n )}\n </div>\n )}\n\n {/* 风险管理 */}\n {payload.risk_management && (\n <div className=\"border-t border-white/10 p-4\">\n <button\n type=\"button\"\n className=\"flex w-full items-center justify-between cursor-pointer\"\n onClick={() => setShowRisk(!showRisk)}\n >\n <h4 className=\"font-semibold text-base flex items-center gap-2 text-zinc-200\">\n <AlertTriangle className=\"w-4 h-4 text-amber-400\" />\n 风险与限制\n </h4>\n {showRisk ? (\n <ChevronDown className=\"w-4 h-4\" />\n ) : (\n <ChevronRight className=\"w-4 h-4\" />\n )}\n </button>\n\n {showRisk && (\n <div className=\"mt-3 space-y-3 text-sm\">\n {payload.risk_management.identified_risks &&\n payload.risk_management.identified_risks.length > 0 && (\n <div>\n <span className=\"font-medium text-zinc-500\">风险评估矩阵:</span>\n <div className=\"mt-2\">\n <RiskMatrix risks={payload.risk_management.identified_risks} />\n </div>\n </div>\n )}\n\n {payload.risk_management.constraints && (\n <div>\n <span className=\"font-medium text-zinc-500\">限制条件:</span>\n <ul className=\"mt-1 ml-4 list-disc\">\n {payload.risk_management.constraints.weather_limits && (\n <li>天气: {payload.risk_management.constraints.weather_limits}</li>\n )}\n {payload.risk_management.constraints.roe_restrictions?.map((r, i) => (\n <li key={i}>ROE: {r}</li>\n ))}\n {payload.risk_management.constraints.time_constraints && (\n <li>时间: {payload.risk_management.constraints.time_constraints}</li>\n )}\n {payload.risk_management.constraints.resource_limitations?.map((r, i) => (\n <li key={i}>资源: {r}</li>\n ))}\n </ul>\n </div>\n )}\n\n {payload.risk_management.contingency_plans &&\n payload.risk_management.contingency_plans.length > 0 && (\n <div>\n <span className=\"font-medium text-zinc-500\">应急预案:</span>\n <div className=\"mt-1 ml-4\">\n {payload.risk_management.contingency_plans.map((plan, i) => (\n <div key={i} className=\"mb-1\">\n <strong>{plan.scenario}:</strong> {plan.response}\n {plan.trigger && ` (触发: ${plan.trigger})`}\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n )}\n\n {/* 底部操作区 */}\n <div className=\"border-t border-white/10 p-3 flex items-center justify-center gap-3 text-sm\">\n <button type=\"button\" className=\"text-sky-400 hover:text-sky-300\">\n [规划详情]\n </button>\n <button type=\"button\" className=\"text-sky-400 hover:text-sky-300\">\n [导出计划]\n </button>\n <button type=\"button\" className=\"text-sky-400 hover:text-sky-300\">\n [修改方案]\n </button>\n <button type=\"button\" className=\"text-sky-400 hover:text-sky-300\">\n [提交审批]\n </button>\n </div>\n </div>\n )\n}\n","import { MapPin, Navigation } from \"lucide-react\"\nimport { useMemo } from \"react\"\nimport type { CardComponentProps } from \"../../../lib/card-registry\"\nimport { cn } from \"../../../lib/utils\"\n\n// TODO: Leaflet map integration can be added later for interactive map rendering.\n// This initial version renders map data (units, regions, strikes) as formatted tables.\n\ninterface Unit {\n name: string\n type: \"plane\" | \"ship\" | \"ground\" | \"missile\" | \"radar\" | \"base\"\n lat: number\n lon: number\n side: \"red\" | \"blue\" | \"neutral\"\n}\n\ninterface Region {\n points: Array<{\n lat: number\n lon: number\n }>\n label?: string\n}\n\ninterface Strike {\n from: {\n lat: number\n lon: number\n }\n to: {\n lat: number\n lon: number\n }\n color?: \"red\" | \"blue\"\n label?: string\n}\n\ninterface MapCardPayload {\n focusPoint?: {\n lat: number\n lon: number\n }\n zoomLevel?: number\n units?: Unit[]\n regions?: Region[]\n strikes?: Strike[]\n}\n\nconst sideLabel: Record<string, string> = {\n red: \"红方\",\n blue: \"蓝方\",\n neutral: \"中立\",\n}\n\nconst sideColor: Record<string, string> = {\n red: \"text-red-400\",\n blue: \"text-sky-400\",\n neutral: \"text-zinc-400\",\n}\n\nconst sideDot: Record<string, string> = {\n red: \"bg-red-500\",\n blue: \"bg-sky-500\",\n neutral: \"bg-zinc-500\",\n}\n\nconst typeLabel: Record<string, string> = {\n plane: \"飞机\",\n ship: \"舰船\",\n ground: \"地面\",\n missile: \"导弹\",\n radar: \"雷达\",\n base: \"基地\",\n}\n\nexport function MapCard({ card }: CardComponentProps) {\n const payload = card.payload as MapCardPayload | undefined\n const title = card.title || \"战术地图\"\n\n const focusPoint = payload?.focusPoint || { lat: 0, lon: 0 }\n const zoomLevel = payload?.zoomLevel || 8\n const units = payload?.units || []\n const regions = payload?.regions || []\n const strikes = payload?.strikes || []\n\n const unitsByGroup = useMemo(() => {\n const groups: Record<string, Unit[]> = { red: [], blue: [], neutral: [] }\n for (const unit of units) {\n const side = unit.side || \"neutral\"\n if (!groups[side]) groups[side] = []\n groups[side].push(unit)\n }\n return groups\n }, [units])\n\n return (\n <div className=\"rounded-lg border border-white/10 bg-white/5\">\n {/* Header */}\n <div className=\"p-4 border-b border-white/10\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <MapPin className=\"w-5 h-5 text-sky-400\" />\n <h3 className=\"font-semibold text-lg text-zinc-100\">{title}</h3>\n </div>\n <div className=\"flex gap-4 text-sm text-zinc-400\">\n <span>单位数: {units.length}</span>\n <span>\n 中心点: {focusPoint.lat.toFixed(2)}, {focusPoint.lon.toFixed(2)}\n </span>\n <span>缩放: {zoomLevel}</span>\n </div>\n </div>\n </div>\n\n <div className=\"p-4 space-y-4\">\n {/* Units by side */}\n {units.length > 0 && (\n <div>\n <h4 className=\"text-sm font-semibold text-zinc-200 mb-2\">作战单位</h4>\n\n {/* Side summary */}\n <div className=\"flex gap-4 mb-3 text-sm\">\n {([\"blue\", \"red\", \"neutral\"] as const).map((side) => {\n const count = unitsByGroup[side]?.length || 0\n if (count === 0) return null\n return (\n <div key={side} className=\"flex items-center gap-2\">\n <div className={cn(\"w-3 h-3 rounded\", sideDot[side])} />\n <span className=\"text-zinc-300\">\n {sideLabel[side]}: {count}\n </span>\n </div>\n )\n })}\n </div>\n\n {/* Unit table */}\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm border-collapse\">\n <thead>\n <tr className=\"border-b border-white/10\">\n <th className=\"text-left p-2 text-zinc-400\">名称</th>\n <th className=\"text-left p-2 text-zinc-400\">类型</th>\n <th className=\"text-left p-2 text-zinc-400\">阵营</th>\n <th className=\"text-right p-2 text-zinc-400\">纬度</th>\n <th className=\"text-right p-2 text-zinc-400\">经度</th>\n </tr>\n </thead>\n <tbody>\n {units.map((unit, i) => (\n <tr key={i} className=\"border-b border-white/5\">\n <td className=\"p-2 text-zinc-200\">{unit.name}</td>\n <td className=\"p-2 text-zinc-300\">{typeLabel[unit.type] || unit.type}</td>\n <td className={cn(\"p-2 font-medium\", sideColor[unit.side])}>\n {sideLabel[unit.side] || unit.side}\n </td>\n <td className=\"p-2 text-right text-zinc-300 font-mono text-xs\">\n {unit.lat.toFixed(3)}\n </td>\n <td className=\"p-2 text-right text-zinc-300 font-mono text-xs\">\n {unit.lon.toFixed(3)}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n )}\n\n {/* Regions */}\n {regions.length > 0 && (\n <div>\n <h4 className=\"text-sm font-semibold text-zinc-200 mb-2\">区域</h4>\n <div className=\"space-y-2\">\n {regions.map((region, i) => (\n <div\n key={i}\n className=\"rounded border border-white/10 p-3 bg-white/5\"\n >\n <div className=\"flex items-center gap-2 mb-1\">\n <div className=\"w-3 h-3 rounded bg-sky-500/50 border border-sky-500\" />\n <span className=\"font-medium text-zinc-200\">\n {region.label || `区域 ${i + 1}`}\n </span>\n <span className=\"text-xs text-zinc-500\">({region.points.length} 个顶点)</span>\n </div>\n <div className=\"text-xs text-zinc-400 font-mono\">\n {region.points\n .map((p) => `(${p.lat.toFixed(2)}, ${p.lon.toFixed(2)})`)\n .join(\" → \")}\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Strikes */}\n {strikes.length > 0 && (\n <div>\n <h4 className=\"text-sm font-semibold text-zinc-200 mb-2\">打击线路</h4>\n <div className=\"space-y-2\">\n {strikes.map((strike, i) => {\n const color = strike.color || \"red\"\n return (\n <div\n key={i}\n className=\"rounded border border-white/10 p-3 bg-white/5 flex items-center gap-3\"\n >\n <Navigation\n className={cn(\n \"w-4 h-4 flex-shrink-0\",\n color === \"red\" ? \"text-red-400\" : \"text-sky-400\",\n )}\n />\n <div className=\"flex-1 text-sm\">\n <span className=\"font-medium text-zinc-200\">\n {strike.label || `打击 ${i + 1}`}\n </span>\n <span className=\"text-zinc-500 mx-2\">|</span>\n <span className=\"text-zinc-400 font-mono text-xs\">\n ({strike.from.lat.toFixed(3)}, {strike.from.lon.toFixed(3)})\n </span>\n <span className=\"text-zinc-500 mx-1\">→</span>\n <span className=\"text-zinc-400 font-mono text-xs\">\n ({strike.to.lat.toFixed(3)}, {strike.to.lon.toFixed(3)})\n </span>\n </div>\n <span\n className={cn(\n \"text-xs px-2 py-0.5 rounded\",\n color === \"red\"\n ? \"bg-red-500/20 text-red-400\"\n : \"bg-sky-500/20 text-sky-400\",\n )}\n >\n {color === \"red\" ? \"红方\" : \"蓝方\"}\n </span>\n </div>\n )\n })}\n </div>\n </div>\n )}\n\n {units.length === 0 && regions.length === 0 && strikes.length === 0 && (\n <div className=\"text-center text-zinc-500 py-8\">暂无地图数据</div>\n )}\n </div>\n </div>\n )\n}\n","import type { CardComponentProps } from \"../../../lib/card-registry\"\nimport { cn } from \"../../../lib/utils\"\nimport { AlertCircle, CheckCircle, Clock, Package, Truck } from \"lucide-react\"\n\ntype OrderStatus = \"pending\" | \"confirmed\" | \"shipped\" | \"delivering\" | \"delivered\" | \"cancelled\"\n\ninterface LogisticsInfo {\n trackingNumber: string\n carrier: string\n currentLocation?: string\n estimatedDelivery?: string\n lastUpdate?: string\n status: \"picked_up\" | \"in_transit\" | \"out_for_delivery\" | \"delivered\"\n}\n\ninterface OrderStatusPayload {\n orderId: string\n status: OrderStatus\n orderDate: string\n totalAmount: number\n itemCount: number\n logistics?: LogisticsInfo\n nextAction?: string\n platform: string\n}\n\nconst statusConfig = {\n pending: {\n text: \"待确认\",\n color: \"bg-yellow-500/10 text-yellow-400\",\n icon: Clock,\n description: \"订单已提交,等待确认\",\n },\n confirmed: {\n text: \"已确认\",\n color: \"bg-blue-500/10 text-blue-400\",\n icon: CheckCircle,\n description: \"订单已确认,准备发货\",\n },\n shipped: {\n text: \"已发货\",\n color: \"bg-purple-500/10 text-purple-400\",\n icon: Package,\n description: \"商品已发出\",\n },\n delivering: {\n text: \"配送中\",\n color: \"bg-indigo-500/10 text-indigo-400\",\n icon: Truck,\n description: \"商品正在配送途中\",\n },\n delivered: {\n text: \"已送达\",\n color: \"bg-green-500/10 text-green-400\",\n icon: CheckCircle,\n description: \"订单已完成\",\n },\n cancelled: {\n text: \"已取消\",\n color: \"bg-red-500/10 text-red-400\",\n icon: AlertCircle,\n description: \"订单已取消\",\n },\n} as const\n\nconst logisticsStatusConfig = {\n picked_up: \"已揽收\",\n in_transit: \"运输中\",\n out_for_delivery: \"派送中\",\n delivered: \"已送达\",\n} as const\n\nexport function OrderStatusCard({ card }: CardComponentProps) {\n const payload = card.payload as OrderStatusPayload | undefined\n\n if (!payload || !payload.orderId) {\n return (\n <div className=\"rounded-md border border-red-500/50 bg-red-500/10 p-4\">\n <p className=\"text-sm text-red-400\">订单状态卡片数据格式错误:需要 orderId</p>\n </div>\n )\n }\n\n const currentStatus = statusConfig[payload.status] ?? statusConfig.pending\n const StatusIcon = currentStatus.icon\n\n return (\n <div className=\"rounded-lg border border-[hsl(var(--border))] bg-[hsl(var(--card))] p-4 shadow-sm\">\n {/* 卡片标题 */}\n <div className=\"mb-4 flex items-start justify-between\">\n <div>\n {card.title && (\n <h3 className=\"mb-1 text-lg font-semibold text-[hsl(var(--foreground))]\">\n {card.title}\n </h3>\n )}\n <p className=\"text-sm text-[hsl(var(--muted-foreground))]\">订单号: {payload.orderId}</p>\n </div>\n <div\n className={cn(\n \"flex items-center gap-1 rounded-full px-3 py-1 text-sm font-medium\",\n currentStatus.color,\n )}\n >\n <StatusIcon className=\"h-4 w-4\" />\n {currentStatus.text}\n </div>\n </div>\n\n {/* 订单基本信息 */}\n <div className=\"mb-4 grid grid-cols-2 gap-4 rounded-md bg-[hsl(var(--muted)/0.3)] p-3\">\n <div>\n <p className=\"text-xs text-[hsl(var(--muted-foreground))]\">下单时间</p>\n <p className=\"text-sm font-medium\">{payload.orderDate}</p>\n </div>\n <div>\n <p className=\"text-xs text-[hsl(var(--muted-foreground))]\">订单金额</p>\n <p className=\"text-sm font-medium\">¥{payload.totalAmount}</p>\n </div>\n <div>\n <p className=\"text-xs text-[hsl(var(--muted-foreground))]\">商品数量</p>\n <p className=\"text-sm font-medium\">{payload.itemCount} 件</p>\n </div>\n <div>\n <p className=\"text-xs text-[hsl(var(--muted-foreground))]\">购买平台</p>\n <p className=\"text-sm font-medium\">{payload.platform}</p>\n </div>\n </div>\n\n {/* 订单状态描述 */}\n <div className=\"mb-4\">\n <p className=\"text-sm text-[hsl(var(--foreground))]\">{currentStatus.description}</p>\n {payload.nextAction && (\n <p className=\"mt-1 text-sm text-[hsl(var(--primary))]\">下一步: {payload.nextAction}</p>\n )}\n </div>\n\n {/* 物流信息 */}\n {payload.logistics && (\n <div className=\"mb-4 border-t border-[hsl(var(--border))] pt-4\">\n <h4 className=\"mb-3 flex items-center gap-2 text-sm font-medium\">\n <Truck className=\"h-4 w-4\" />\n 物流信息\n </h4>\n <div className=\"space-y-2 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-[hsl(var(--muted-foreground))]\">运单号:</span>\n <span className=\"font-mono\">{payload.logistics.trackingNumber}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-[hsl(var(--muted-foreground))]\">承运商:</span>\n <span>{payload.logistics.carrier}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-[hsl(var(--muted-foreground))]\">状态:</span>\n <span className=\"text-[hsl(var(--primary))]\">\n {logisticsStatusConfig[payload.logistics.status]}\n </span>\n </div>\n {payload.logistics.currentLocation && (\n <div className=\"flex justify-between\">\n <span className=\"text-[hsl(var(--muted-foreground))]\">当前位置:</span>\n <span>{payload.logistics.currentLocation}</span>\n </div>\n )}\n {payload.logistics.estimatedDelivery && (\n <div className=\"flex justify-between\">\n <span className=\"text-[hsl(var(--muted-foreground))]\">预计送达:</span>\n <span className=\"text-green-400\">{payload.logistics.estimatedDelivery}</span>\n </div>\n )}\n {payload.logistics.lastUpdate && (\n <div className=\"mt-2 text-xs text-[hsl(var(--muted-foreground))]\">\n 最后更新: {payload.logistics.lastUpdate}\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n )\n}\n","import type { CardComponentProps } from \"../../../lib/card-registry\"\nimport { ChevronDown, ChevronRight, FileEdit } from \"lucide-react\"\nimport { useState } from \"react\"\n\ninterface PatchStats {\n additions: number\n deletions: number\n}\n\ninterface PatchData {\n filePath: string\n unifiedDiff: string\n stats: PatchStats\n}\n\ninterface PatchCardPayload {\n filePath: string\n unifiedDiff: string\n stats: PatchStats\n patches?: PatchData[]\n}\n\nfunction getDiffLineClassName(line: string): string {\n if (line.startsWith(\"+\") && !line.startsWith(\"+++\")) {\n return \"bg-green-900/30 text-green-200\"\n }\n if (line.startsWith(\"-\") && !line.startsWith(\"---\")) {\n return \"bg-red-900/30 text-red-200\"\n }\n if (line.startsWith(\"@@\")) {\n return \"text-blue-400 bg-blue-900/20\"\n }\n if (line.startsWith(\"---\") || line.startsWith(\"+++\")) {\n return \"font-semibold text-[hsl(var(--muted-foreground))]\"\n }\n return \"text-[hsl(var(--muted-foreground))]\"\n}\n\nfunction getDisplayFileName(filePath: string): string {\n const parts = filePath.split(\"/\")\n return parts[parts.length - 1] || filePath\n}\n\nfunction SinglePatch({\n patch,\n defaultExpanded = false,\n}: {\n patch: PatchData\n defaultExpanded?: boolean\n}) {\n const [isExpanded, setIsExpanded] = useState(defaultExpanded)\n\n return (\n <div className=\"my-2 overflow-hidden rounded-lg border border-[hsl(var(--border))] bg-[hsl(var(--card))]\">\n <button\n type=\"button\"\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"flex w-full items-center justify-between px-3 py-2 hover:bg-[hsl(var(--muted))]/50\"\n >\n <div className=\"flex items-center gap-2\">\n <FileEdit className=\"h-4 w-4 text-[hsl(var(--muted-foreground))]\" />\n <span className=\"text-sm font-medium\">{getDisplayFileName(patch.filePath)}</span>\n <span className=\"text-xs text-[hsl(var(--muted-foreground))]\">\n ({patch.filePath})\n </span>\n </div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs\">\n <span className=\"font-medium text-green-400\">+{patch.stats.additions}</span>\n {\" / \"}\n <span className=\"font-medium text-red-400\">-{patch.stats.deletions}</span>\n </span>\n {isExpanded ? (\n <ChevronDown className=\"h-4 w-4\" />\n ) : (\n <ChevronRight className=\"h-4 w-4\" />\n )}\n </div>\n </button>\n {isExpanded && (\n <div className=\"max-h-80 overflow-auto\">\n <pre className=\"overflow-x-auto whitespace-pre bg-[hsl(var(--muted))]/30 p-3 font-mono text-xs\">\n {patch.unifiedDiff.split(\"\\n\").map((line, lineIndex) => (\n <div key={lineIndex} className={getDiffLineClassName(line)}>\n {line}\n </div>\n ))}\n </pre>\n </div>\n )}\n </div>\n )\n}\n\nexport function PatchCard({ card }: CardComponentProps) {\n const payload = card.payload as PatchCardPayload | undefined\n\n if (!payload) {\n return (\n <div className=\"rounded-lg border border-[hsl(var(--border))] bg-[hsl(var(--card))] p-4\">\n <p className=\"text-[hsl(var(--muted-foreground))]\">无补丁数据</p>\n </div>\n )\n }\n\n // Support both single patch and multiple patches\n const patches: PatchData[] = payload.patches || [\n {\n filePath: payload.filePath,\n unifiedDiff: payload.unifiedDiff,\n stats: payload.stats,\n },\n ]\n\n return (\n <div className=\"space-y-2\">\n {patches.map((patch, index) => (\n <SinglePatch key={`${patch.filePath}-${index}`} patch={patch} />\n ))}\n </div>\n )\n}\n\nexport function PatchAttachments({ patches }: { patches: PatchData[] }) {\n if (!patches || patches.length === 0) return null\n\n return (\n <div className=\"space-y-2\">\n {patches.map((patch, index) => (\n <SinglePatch key={`${patch.filePath}-${index}`} patch={patch} />\n ))}\n </div>\n )\n}\n","import type { CardComponentProps } from \"../../../lib/card-registry\"\nimport { cn } from \"../../../lib/utils\"\nimport { Star } from \"lucide-react\"\n\ninterface Product {\n id: string\n name: string\n price: number\n originalPrice?: number\n rating?: number\n reviewCount?: number\n imageUrl?: string\n platform: string\n url?: string\n features?: string[]\n discount?: string\n}\n\ninterface ProductRecommendationPayload {\n products: Product[]\n category?: string\n sortBy?: \"price\" | \"rating\" | \"sales\"\n totalCount?: number\n}\n\nfunction RatingStars({ rating }: { rating?: number }) {\n if (!rating) return null\n\n return (\n <div className=\"flex items-center gap-1\">\n {[...Array(5)].map((_, i) => (\n <Star\n key={i}\n className={cn(\n \"h-3 w-3\",\n i < Math.floor(rating)\n ? \"fill-yellow-400 text-yellow-400\"\n : \"text-[hsl(var(--muted-foreground)/0.3)]\",\n )}\n />\n ))}\n <span className=\"ml-1 text-xs text-[hsl(var(--muted-foreground))]\">{rating}</span>\n </div>\n )\n}\n\nexport function ProductRecommendationCard({ card }: CardComponentProps) {\n const payload = card.payload as ProductRecommendationPayload | undefined\n\n if (!payload || !Array.isArray(payload.products)) {\n return (\n <div className=\"rounded-md border border-red-500/50 bg-red-500/10 p-4\">\n <p className=\"text-sm text-red-400\">商品推荐卡片数据格式错误:需要 products 数组</p>\n </div>\n )\n }\n\n return (\n <div className=\"rounded-lg border border-[hsl(var(--border))] bg-[hsl(var(--card))] p-4 shadow-sm\">\n {/* 卡片标题 */}\n <div className=\"mb-4 flex items-center justify-between\">\n {card.title && (\n <h3 className=\"text-lg font-semibold text-[hsl(var(--foreground))]\">{card.title}</h3>\n )}\n {payload.category && (\n <span className=\"rounded-full bg-[hsl(var(--secondary))] px-2 py-1 text-xs text-[hsl(var(--secondary-foreground))]\">\n {payload.category}\n </span>\n )}\n </div>\n\n {/* 搜索结果统计 */}\n {payload.totalCount && (\n <p className=\"mb-3 text-sm text-[hsl(var(--muted-foreground))]\">\n 共找到 {payload.totalCount} 个相关商品,显示前 {payload.products.length} 个\n </p>\n )}\n\n {/* 商品网格 */}\n <div className=\"mb-4 grid grid-cols-1 gap-4 md:grid-cols-2\">\n {payload.products.map((product, index) => (\n <div\n key={product.id ?? `product-${index}`}\n className=\"rounded-lg border border-[hsl(var(--border))] p-3 transition-shadow hover:shadow-md\"\n >\n <div className=\"flex gap-3\">\n {product.imageUrl && (\n <div className=\"flex-shrink-0\">\n <img\n src={product.imageUrl}\n alt={product.name}\n className=\"h-16 w-16 rounded border border-[hsl(var(--border))] object-cover\"\n />\n </div>\n )}\n\n <div className=\"min-w-0 flex-1\">\n <h4 className=\"mb-1 line-clamp-2 text-sm font-medium text-[hsl(var(--foreground))]\">\n {product.name}\n </h4>\n\n {product.rating && (\n <div className=\"mb-2 flex items-center gap-2\">\n <RatingStars rating={product.rating} />\n {product.reviewCount && (\n <span className=\"text-xs text-[hsl(var(--muted-foreground))]\">\n ({product.reviewCount}评价)\n </span>\n )}\n </div>\n )}\n\n {product.features && (\n <div className=\"mb-2 flex flex-wrap gap-1\">\n {product.features.slice(0, 2).map((feature, index) => (\n <span\n key={index}\n className=\"rounded bg-[hsl(var(--primary)/0.1)] px-1 py-0.5 text-xs text-[hsl(var(--primary))]\"\n >\n {feature}\n </span>\n ))}\n </div>\n )}\n\n <div className=\"flex items-end justify-between\">\n <div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-lg font-bold text-red-400\">¥{product.price}</span>\n {product.originalPrice && product.originalPrice > product.price && (\n <span className=\"text-sm text-[hsl(var(--muted-foreground))] line-through\">\n ¥{product.originalPrice}\n </span>\n )}\n </div>\n {product.discount && (\n <span className=\"text-xs font-medium text-red-400\">{product.discount}</span>\n )}\n </div>\n <div className=\"text-right\">\n <p className=\"text-xs text-[hsl(var(--muted-foreground))]\">\n {product.platform}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n","import type { CardComponentProps } from \"../../../lib/card-registry\"\nimport { AlertCircle, ArrowRight, ChevronDown, ChevronUp, Lightbulb, TrendingUp } from \"lucide-react\"\nimport { useState } from \"react\"\n\ninterface Problem {\n category: string\n description: string\n rootCause: string\n}\n\ninterface Improvement {\n category: string\n description: string\n expectedEffect: string\n}\n\ninterface OptimizationMetrics {\n achievementRate: number\n lossRate: number\n costBenefit: number\n riskLevel: \"low\" | \"medium\" | \"high\"\n}\n\ninterface PlanOptimization {\n planType: string\n problems: Problem[]\n improvements: Improvement[]\n beforeOptimization: OptimizationMetrics\n afterOptimization: OptimizationMetrics\n}\n\ninterface ReflectionSummary {\n keyFindings: string[]\n optimizationStrategy: string\n nextSteps: string[]\n}\n\ninterface ReflectionOptimizationCardPayload {\n plans: PlanOptimization[]\n reflectionSummary: ReflectionSummary\n}\n\nconst getRiskLevelColor = (level: \"low\" | \"medium\" | \"high\") => {\n switch (level) {\n case \"low\":\n return \"bg-green-900 text-green-200\"\n case \"medium\":\n return \"bg-yellow-900 text-yellow-200\"\n case \"high\":\n return \"bg-red-900 text-red-200\"\n }\n}\n\nconst getRiskLevelText = (level: \"low\" | \"medium\" | \"high\") => {\n switch (level) {\n case \"low\":\n return \"低\"\n case \"medium\":\n return \"中\"\n case \"high\":\n return \"高\"\n }\n}\n\nfunction MetricsComparison({\n before,\n after,\n}: {\n before: OptimizationMetrics\n after: OptimizationMetrics\n}) {\n const getDelta = (beforeVal: number, afterVal: number, isLower = false) => {\n const delta = afterVal - beforeVal\n const isImprovement = isLower ? delta < 0 : delta > 0\n return {\n value: Math.abs(delta).toFixed(1),\n isImprovement,\n color: isImprovement ? \"text-green-400\" : \"text-red-400\",\n }\n }\n\n const achievementDelta = getDelta(before.achievementRate, after.achievementRate)\n const lossDelta = getDelta(before.lossRate, after.lossRate, true)\n const costBenefitDelta = getDelta(before.costBenefit, after.costBenefit)\n\n return (\n <div className=\"mt-4 grid grid-cols-2 gap-4\">\n <div className=\"space-y-3\">\n <div className=\"text-sm font-medium text-[hsl(var(--muted-foreground))]\">优化前</div>\n <div className=\"space-y-2 text-sm\">\n <div className=\"flex justify-between\">\n <span>目标达成率:</span>\n <span className=\"font-medium\">{before.achievementRate}%</span>\n </div>\n <div className=\"flex justify-between\">\n <span>我方损失率:</span>\n <span className=\"font-medium\">{before.lossRate}%</span>\n </div>\n <div className=\"flex justify-between\">\n <span>成本效益比:</span>\n <span className=\"font-medium\">{before.costBenefit.toFixed(1)}</span>\n </div>\n <div className=\"flex justify-between\">\n <span>风险等级:</span>\n <span\n className={`rounded-full px-2 py-0.5 text-xs ${getRiskLevelColor(before.riskLevel)}`}\n >\n {getRiskLevelText(before.riskLevel)}\n </span>\n </div>\n </div>\n </div>\n\n <div className=\"space-y-3\">\n <div className=\"text-sm font-medium text-[hsl(var(--muted-foreground))]\">\n 优化后(预期)\n </div>\n <div className=\"space-y-2 text-sm\">\n <div className=\"flex items-center justify-between\">\n <span>目标达成率:</span>\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium\">{after.achievementRate}%</span>\n {achievementDelta.value !== \"0.0\" && (\n <span className={`text-xs ${achievementDelta.color}`}>\n {achievementDelta.isImprovement ? \"+\" : \"-\"}\n {achievementDelta.value}%\n </span>\n )}\n </div>\n </div>\n <div className=\"flex items-center justify-between\">\n <span>我方损失率:</span>\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium\">{after.lossRate}%</span>\n {lossDelta.value !== \"0.0\" && (\n <span className={`text-xs ${lossDelta.color}`}>\n {lossDelta.isImprovement ? \"-\" : \"+\"}\n {lossDelta.value}%\n </span>\n )}\n </div>\n </div>\n <div className=\"flex items-center justify-between\">\n <span>成本效益比:</span>\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium\">{after.costBenefit.toFixed(1)}</span>\n {costBenefitDelta.value !== \"0.0\" && (\n <span className={`text-xs ${costBenefitDelta.color}`}>\n {costBenefitDelta.isImprovement ? \"+\" : \"-\"}\n {costBenefitDelta.value}\n </span>\n )}\n </div>\n </div>\n <div className=\"flex justify-between\">\n <span>风险等级:</span>\n <span\n className={`rounded-full px-2 py-0.5 text-xs ${getRiskLevelColor(after.riskLevel)}`}\n >\n {getRiskLevelText(after.riskLevel)}\n </span>\n </div>\n </div>\n </div>\n </div>\n )\n}\n\nfunction PlanOptimizationSection({ plan }: { plan: PlanOptimization }) {\n const [isOpen, setIsOpen] = useState(false)\n\n return (\n <div className=\"rounded-lg border border-[hsl(var(--border))] p-4 transition-colors hover:bg-[hsl(var(--accent))]/50\">\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n className=\"flex w-full items-center justify-between\"\n >\n <div className=\"flex items-center gap-3\">\n <div className=\"text-lg font-semibold\">{plan.planType}</div>\n <span className=\"rounded-full border border-[hsl(var(--border))] px-2 py-0.5 text-xs\">\n {plan.problems.length} 个问题\n </span>\n <span className=\"rounded-full border border-[hsl(var(--border))] bg-sky-950 px-2 py-0.5 text-xs\">\n {plan.improvements.length} 项改进\n </span>\n </div>\n {isOpen ? (\n <ChevronUp className=\"h-5 w-5 text-[hsl(var(--muted-foreground))]\" />\n ) : (\n <ChevronDown className=\"h-5 w-5 text-[hsl(var(--muted-foreground))]\" />\n )}\n </button>\n\n {isOpen && (\n <div className=\"mt-4 space-y-4\">\n {/* Problems */}\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2 text-sm font-medium\">\n <AlertCircle className=\"h-4 w-4 text-orange-500\" />\n <span>问题识别与根因分析</span>\n </div>\n <div className=\"space-y-2 pl-6\">\n {plan.problems.map((problem, idx) => (\n <div\n key={idx}\n className=\"space-y-1 border-l-2 border-orange-400 py-2 pl-3\"\n >\n <div className=\"text-sm font-medium text-orange-400\">\n {problem.category}\n </div>\n <div className=\"break-words text-sm text-[hsl(var(--muted-foreground))]\">\n {problem.description}\n </div>\n <div className=\"break-words text-xs italic text-[hsl(var(--muted-foreground))]\">\n 根本原因:{problem.rootCause}\n </div>\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"border-t border-[hsl(var(--border))]\" />\n\n {/* Improvements */}\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2 text-sm font-medium\">\n <Lightbulb className=\"h-4 w-4 text-sky-500\" />\n <span>针对性改进建议</span>\n </div>\n <div className=\"space-y-2 pl-6\">\n {plan.improvements.map((improvement, idx) => (\n <div\n key={idx}\n className=\"space-y-1 border-l-2 border-sky-400 py-2 pl-3\"\n >\n <div className=\"text-sm font-medium text-sky-400\">\n {improvement.category}\n </div>\n <div className=\"break-words text-sm text-[hsl(var(--muted-foreground))]\">\n {improvement.description}\n </div>\n <div className=\"flex items-center gap-1 text-xs text-green-400\">\n <TrendingUp className=\"h-3 w-3 shrink-0\" />\n <span className=\"break-words\">\n 预期效果:{improvement.expectedEffect}\n </span>\n </div>\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"border-t border-[hsl(var(--border))]\" />\n\n {/* Before/After Comparison */}\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2 text-sm font-medium\">\n <ArrowRight className=\"h-4 w-4 text-purple-500\" />\n <span>优化前后对比</span>\n </div>\n <MetricsComparison\n before={plan.beforeOptimization}\n after={plan.afterOptimization}\n />\n </div>\n </div>\n )}\n </div>\n )\n}\n\nexport function ReflectionOptimizationCard({ card }: CardComponentProps) {\n const payload = card.payload as ReflectionOptimizationCardPayload | undefined\n\n if (!payload) {\n return (\n <div className=\"rounded-lg border border-[hsl(var(--border))] bg-[hsl(var(--card))] text-[hsl(var(--card-foreground))]\">\n <div className=\"px-6 pt-6\">\n <h3 className=\"text-lg font-semibold\">{card.title || \"智能反思与方案优化\"}</h3>\n </div>\n <div className=\"px-6 pb-6 pt-4\">\n <div className=\"text-[hsl(var(--muted-foreground))]\">无有效数据</div>\n </div>\n </div>\n )\n }\n\n const { plans, reflectionSummary } = payload\n\n return (\n <div className=\"rounded-lg border border-[hsl(var(--border))] bg-[hsl(var(--card))] text-[hsl(var(--card-foreground))]\">\n <div className=\"px-6 pt-6\">\n <h3 className=\"flex items-center gap-2 text-lg font-semibold\">\n <Lightbulb className=\"h-5 w-5 text-yellow-500\" />\n {card.title || \"智能反思与方案优化\"}\n </h3>\n </div>\n <div className=\"space-y-6 px-6 pb-6 pt-4\">\n {/* Plan optimization details */}\n <div className=\"space-y-3\">\n {plans.map((plan, idx) => (\n <PlanOptimizationSection key={idx} plan={plan} />\n ))}\n </div>\n\n <div className=\"my-6 border-t border-[hsl(var(--border))]\" />\n\n {/* Reflection Summary */}\n <div className=\"space-y-4\">\n <div className=\"text-base font-semibold\">反思总结</div>\n\n {/* Key Findings */}\n <div className=\"space-y-2\">\n <div className=\"text-sm font-medium text-[hsl(var(--muted-foreground))]\">\n 关键发现\n </div>\n <ul className=\"space-y-1 pl-5\">\n {reflectionSummary.keyFindings.map((finding, idx) => (\n <li\n key={idx}\n className=\"list-disc break-words text-sm text-[hsl(var(--muted-foreground))] marker:text-orange-500\"\n >\n {finding}\n </li>\n ))}\n </ul>\n </div>\n\n {/* Optimization Strategy */}\n <div className=\"space-y-2\">\n <div className=\"text-sm font-medium text-[hsl(var(--muted-foreground))]\">\n 优化策略\n </div>\n <div className=\"whitespace-pre-wrap break-words rounded-md border border-sky-800 bg-sky-950 p-3 text-sm\">\n {reflectionSummary.optimizationStrategy}\n </div>\n </div>\n\n {/* Next Steps */}\n <div className=\"space-y-2\">\n <div className=\"text-sm font-medium text-[hsl(var(--muted-foreground))]\">\n 后续步骤\n </div>\n <ol className=\"space-y-1 pl-5\">\n {reflectionSummary.nextSteps.map((step, idx) => (\n <li\n key={idx}\n className=\"list-decimal break-words text-sm text-[hsl(var(--muted-foreground))] marker:font-medium marker:text-sky-500\"\n >\n {step}\n </li>\n ))}\n </ol>\n </div>\n </div>\n </div>\n </div>\n )\n}\n","import type { CardComponentProps } from \"../../../lib/card-registry\"\nimport { AlertCircle, CheckCircle, Clock, MapPin, Navigation, Users } from \"lucide-react\"\nimport { useState } from \"react\"\n\ninterface Modification {\n type: string\n original_time?: number\n new_time?: number\n original_altitude?: number\n new_altitude?: number\n original_platform?: string\n new_platform?: string\n added_waypoints?: number\n reason: string\n}\n\ninterface ResolvedTask {\n id: string\n status: string\n lines?: Array<{\n name: string\n type: string\n width: number\n line: Array<{\n lat: number\n lon: number\n alt: number\n time: number\n description: string\n }>\n }>\n regions?: Array<unknown>\n info?: {\n target_name?: string\n target_type?: string\n strike_unit?: string\n strike_type?: string\n }\n modifications?: Modification[]\n}\n\nconst getModificationIcon = (type: string) => {\n switch (type) {\n case \"time_adjustment\":\n return <Clock className=\"h-4 w-4\" />\n case \"altitude_adjustment\":\n return <Navigation className=\"h-4 w-4\" />\n case \"platform_replacement\":\n return <Users className=\"h-4 w-4\" />\n case \"route_adjustment\":\n return <MapPin className=\"h-4 w-4\" />\n default:\n return <AlertCircle className=\"h-4 w-4\" />\n }\n}\n\nconst getModificationColor = (type: string) => {\n switch (type) {\n case \"time_adjustment\":\n return \"bg-blue-900 text-blue-200\"\n case \"altitude_adjustment\":\n return \"bg-green-900 text-green-200\"\n case \"platform_replacement\":\n return \"bg-purple-900 text-purple-200\"\n case \"route_adjustment\":\n return \"bg-orange-900 text-orange-200\"\n default:\n return \"bg-gray-900 text-gray-200\"\n }\n}\n\nconst getStatusBadge = (status: string) => {\n switch (status) {\n case \"modified\":\n return (\n <span className=\"rounded-full bg-orange-500 px-2 py-0.5 text-xs text-white\">\n 已修改\n </span>\n )\n case \"unchanged\":\n return (\n <span className=\"rounded-full bg-green-500 px-2 py-0.5 text-xs text-white\">\n 未变更\n </span>\n )\n case \"removed\":\n return (\n <span className=\"rounded-full bg-red-500 px-2 py-0.5 text-xs text-white\">已移除</span>\n )\n default:\n return (\n <span className=\"rounded-full bg-gray-500 px-2 py-0.5 text-xs text-white\">\n {status}\n </span>\n )\n }\n}\n\nconst formatModificationDetail = (mod: Modification) => {\n const details = []\n\n if (\n mod.type === \"time_adjustment\" &&\n mod.original_time !== undefined &&\n mod.new_time !== undefined\n ) {\n const delay = mod.new_time - mod.original_time\n details.push(\n `时间调整: ${mod.original_time} → ${mod.new_time} (${delay > 0 ? \"+\" : \"\"}${delay}s)`,\n )\n }\n\n if (\n mod.type === \"altitude_adjustment\" &&\n mod.original_altitude !== undefined &&\n mod.new_altitude !== undefined\n ) {\n details.push(`高度调整: ${mod.original_altitude}m → ${mod.new_altitude}m`)\n }\n\n if (mod.type === \"platform_replacement\" && mod.original_platform && mod.new_platform) {\n details.push(`平台替换: ${mod.original_platform} → ${mod.new_platform}`)\n }\n\n if (mod.type === \"route_adjustment\" && mod.added_waypoints !== undefined) {\n details.push(`航路调整: +${mod.added_waypoints}`)\n }\n\n return details.join(\", \") || mod.type\n}\n\nexport function ResolutionModificationsCard({ card }: CardComponentProps) {\n const data = (card.payload || card.data) as ResolvedTask[] | undefined\n const [activeTab, setActiveTab] = useState<\"modified\" | \"unchanged\">(\"modified\")\n\n if (!data || !Array.isArray(data)) {\n return (\n <div className=\"w-full rounded-lg border border-[hsl(var(--border))] bg-[hsl(var(--card))] p-4\">\n <p className=\"text-[hsl(var(--muted-foreground))]\">数据格式无效</p>\n </div>\n )\n }\n\n const stats = {\n total: data.length,\n modified: data.filter((t) => t.status === \"modified\").length,\n unchanged: data.filter((t) => t.status === \"unchanged\").length,\n removed: data.filter((t) => t.status === \"removed\").length,\n }\n\n const modifiedTasks = data.filter(\n (task) => task.status === \"modified\" && task.modifications && task.modifications.length > 0,\n )\n const unchangedTasks = data.filter((task) => task.status === \"unchanged\")\n\n return (\n <div className=\"w-full rounded-lg border border-[hsl(var(--border))] bg-[hsl(var(--card))] text-[hsl(var(--card-foreground))]\">\n <div className=\"px-6 pt-6\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-lg font-semibold\">冲突消解详情</h3>\n <div className=\"flex gap-2\">\n <span className=\"rounded-full border border-[hsl(var(--border))] px-2 py-0.5 text-xs\">\n 总计: {stats.total}\n </span>\n <span className=\"rounded-full bg-orange-500 px-2 py-0.5 text-xs text-white\">\n 已修改: {stats.modified}\n </span>\n <span className=\"rounded-full bg-green-500 px-2 py-0.5 text-xs text-white\">\n 未变更: {stats.unchanged}\n </span>\n {stats.removed > 0 && (\n <span className=\"rounded-full bg-red-500 px-2 py-0.5 text-xs text-white\">\n 已移除: {stats.removed}\n </span>\n )}\n </div>\n </div>\n </div>\n <div className=\"px-6 pb-6 pt-4\">\n {/* Tabs */}\n <div className=\"mb-4 grid w-full grid-cols-2 rounded-lg bg-[hsl(var(--muted))] p-1\">\n <button\n type=\"button\"\n onClick={() => setActiveTab(\"modified\")}\n className={`rounded-md px-3 py-1.5 text-sm font-medium transition-colors ${\n activeTab === \"modified\"\n ? \"bg-[hsl(var(--background))] text-[hsl(var(--foreground))] shadow-sm\"\n : \"text-[hsl(var(--muted-foreground))]\"\n }`}\n >\n 已修改任务 ({modifiedTasks.length})\n </button>\n <button\n type=\"button\"\n onClick={() => setActiveTab(\"unchanged\")}\n className={`rounded-md px-3 py-1.5 text-sm font-medium transition-colors ${\n activeTab === \"unchanged\"\n ? \"bg-[hsl(var(--background))] text-[hsl(var(--foreground))] shadow-sm\"\n : \"text-[hsl(var(--muted-foreground))]\"\n }`}\n >\n 未变更 ({unchangedTasks.length})\n </button>\n </div>\n\n {activeTab === \"modified\" && (\n <div className=\"max-h-[500px] space-y-4 overflow-y-auto\">\n {modifiedTasks.length === 0 ? (\n <div className=\"py-8 text-center text-[hsl(var(--muted-foreground))]\">\n 无修改任务\n </div>\n ) : (\n modifiedTasks.map((task) => (\n <div\n key={task.id}\n className=\"rounded-lg border border-[hsl(var(--border))] bg-[hsl(var(--card))]\"\n >\n <div className=\"px-4 pb-3 pt-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"space-y-1\">\n <h4 className=\"text-sm font-semibold\">{task.id}</h4>\n {task.info && (\n <div className=\"flex items-center gap-2 text-xs text-[hsl(var(--muted-foreground))]\">\n <span>{task.info.target_name}</span>\n <span>·</span>\n <span>{task.info.strike_unit}</span>\n </div>\n )}\n </div>\n {getStatusBadge(task.status)}\n </div>\n </div>\n <div className=\"px-4 pb-4\">\n <div className=\"space-y-2\">\n {task.modifications?.map((mod, idx) => (\n <div\n key={idx}\n className={`flex items-start gap-2 rounded-lg p-2 ${getModificationColor(mod.type)}`}\n >\n <div className=\"mt-0.5\">{getModificationIcon(mod.type)}</div>\n <div className=\"flex-1 text-sm\">\n <div className=\"font-medium\">\n {formatModificationDetail(mod)}\n </div>\n <div className=\"mt-1 text-xs opacity-80\">原因: {mod.reason}</div>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n ))\n )}\n </div>\n )}\n\n {activeTab === \"unchanged\" && (\n <div className=\"max-h-[500px] overflow-y-auto\">\n {unchangedTasks.length === 0 ? (\n <div className=\"py-8 text-center text-[hsl(var(--muted-foreground))]\">\n 无未变更任务\n </div>\n ) : (\n <div className=\"grid grid-cols-2 gap-2\">\n {unchangedTasks.map((task) => (\n <div\n key={task.id}\n className=\"rounded-lg border border-[hsl(var(--border))] p-3\"\n >\n <div className=\"flex items-center justify-between\">\n <div>\n <div className=\"text-sm font-medium\">{task.id}</div>\n {task.info && (\n <div className=\"mt-1 text-xs text-[hsl(var(--muted-foreground))]\">\n {task.info.target_name} · {task.info.strike_unit}\n </div>\n )}\n </div>\n <CheckCircle className=\"h-4 w-4 text-green-500\" />\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n )\n}\n","import type { CardComponentProps } from \"../../../lib/card-registry\"\nimport {\n Activity,\n AlertTriangle,\n BarChart3,\n CheckCircle,\n Target,\n Users,\n XCircle,\n} from \"lucide-react\"\n\ninterface ResolutionAction {\n conflict_id: string\n resolution_type: string\n affected_tasks: string[]\n success: boolean\n}\n\ninterface ResourceUtilization {\n utilization_rate: number\n tasks: string[]\n}\n\ninterface ResolutionSummary {\n total_plans: number\n unchanged_plans: number\n modified_plans: number\n removed_plans: number\n conflicts_resolved: number\n resolution_actions?: ResolutionAction[]\n validation?: {\n all_conflicts_resolved: boolean\n new_conflicts_detected: boolean\n resource_utilization?: Record<string, ResourceUtilization>\n }\n}\n\nconst getResolutionTypeLabel = (type: string) => {\n const labels: Record<string, string> = {\n time_adjustment: \"时间调整\",\n altitude_adjustment: \"高度调整\",\n platform_replacement: \"平台替换\",\n route_adjustment: \"航路调整\",\n reschedule: \"重新排程\",\n }\n return labels[type] || type\n}\n\nexport function ResolutionSummaryCard({ card }: CardComponentProps) {\n const data = (card.payload || card.data) as ResolutionSummary | undefined\n\n if (!data) {\n return (\n <div className=\"w-full rounded-lg border border-[hsl(var(--border))] bg-[hsl(var(--card))] p-4\">\n <p className=\"text-[hsl(var(--muted-foreground))]\">摘要数据格式无效</p>\n </div>\n )\n }\n\n const modificationRate =\n data.total_plans > 0\n ? ((data.modified_plans / data.total_plans) * 100).toFixed(1)\n : \"0\"\n const unchangedRate =\n data.total_plans > 0\n ? ((data.unchanged_plans / data.total_plans) * 100).toFixed(1)\n : \"0\"\n\n const actionTypes = data.resolution_actions?.reduce(\n (acc, action) => {\n const type = action.resolution_type\n if (!acc[type]) {\n acc[type] = { count: 0, tasks: new Set<string>() }\n }\n acc[type].count++\n for (const task of action.affected_tasks) {\n acc[type].tasks.add(task)\n }\n return acc\n },\n {} as Record<string, { count: number; tasks: Set<string> }>,\n )\n\n const resourceStats = Object.entries(data.validation?.resource_utilization || {})\n .map(([resource, info]) => ({\n resource,\n utilization_rate: (info.utilization_rate * 100).toFixed(1),\n task_count: info.tasks.length,\n tasks: info.tasks,\n status:\n info.utilization_rate > 0.8\n ? \"高负载\"\n : info.utilization_rate > 0.3\n ? \"正常\"\n : \"低负载\",\n color:\n info.utilization_rate > 0.8\n ? \"text-red-500\"\n : info.utilization_rate > 0.3\n ? \"text-green-500\"\n : \"text-blue-500\",\n }))\n .sort((a, b) => Number.parseFloat(b.utilization_rate) - Number.parseFloat(a.utilization_rate))\n\n return (\n <div className=\"w-full rounded-lg border border-[hsl(var(--border))] bg-[hsl(var(--card))] text-[hsl(var(--card-foreground))]\">\n <div className=\"px-6 pt-6\">\n <h3 className=\"flex items-center gap-2 text-lg font-semibold\">\n <BarChart3 className=\"h-5 w-5\" />\n 冲突消解总结\n </h3>\n </div>\n <div className=\"space-y-6 px-6 pb-6 pt-4\">\n {/* Basic Stats */}\n <div>\n <h4 className=\"mb-3 flex items-center gap-2 text-sm font-medium\">\n <Activity className=\"h-4 w-4\" />\n 基础统计\n </h4>\n <div className=\"grid grid-cols-2 gap-3 md:grid-cols-4\">\n <div className=\"rounded-lg border border-[hsl(var(--border))] p-3\">\n <div className=\"text-2xl font-bold\">{data.total_plans}</div>\n <div className=\"text-xs text-[hsl(var(--muted-foreground))]\">总计方案</div>\n </div>\n <div className=\"rounded-lg border border-[hsl(var(--border))] p-3\">\n <div className=\"text-2xl font-bold text-green-500\">{data.unchanged_plans}</div>\n <div className=\"text-xs text-[hsl(var(--muted-foreground))]\">\n 未变更 ({unchangedRate}%)\n </div>\n </div>\n <div className=\"rounded-lg border border-[hsl(var(--border))] p-3\">\n <div className=\"text-2xl font-bold text-orange-500\">{data.modified_plans}</div>\n <div className=\"text-xs text-[hsl(var(--muted-foreground))]\">\n 已修改 ({modificationRate}%)\n </div>\n </div>\n <div className=\"rounded-lg border border-[hsl(var(--border))] p-3\">\n <div className=\"text-2xl font-bold text-blue-500\">{data.conflicts_resolved}</div>\n <div className=\"text-xs text-[hsl(var(--muted-foreground))]\">冲突已消解</div>\n </div>\n </div>\n </div>\n\n {/* Validation Results */}\n <div>\n <h4 className=\"mb-3 flex items-center gap-2 text-sm font-medium\">\n <Target className=\"h-4 w-4\" />\n 验证结果\n </h4>\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between rounded-lg bg-[hsl(var(--secondary))] p-3\">\n <span className=\"text-sm\">所有冲突已消解</span>\n {data.validation?.all_conflicts_resolved ? (\n <div className=\"flex items-center gap-1 text-green-500\">\n <CheckCircle className=\"h-4 w-4\" />\n <span className=\"text-sm\">是</span>\n </div>\n ) : (\n <div className=\"flex items-center gap-1 text-red-500\">\n <XCircle className=\"h-4 w-4\" />\n <span className=\"text-sm\">否</span>\n </div>\n )}\n </div>\n <div className=\"flex items-center justify-between rounded-lg bg-[hsl(var(--secondary))] p-3\">\n <span className=\"text-sm\">检测到新冲突</span>\n {data.validation?.new_conflicts_detected ? (\n <div className=\"flex items-center gap-1 text-orange-500\">\n <AlertTriangle className=\"h-4 w-4\" />\n <span className=\"text-sm\">是</span>\n </div>\n ) : (\n <div className=\"flex items-center gap-1 text-green-500\">\n <CheckCircle className=\"h-4 w-4\" />\n <span className=\"text-sm\">否</span>\n </div>\n )}\n </div>\n </div>\n </div>\n\n {/* Action Distribution */}\n {actionTypes && Object.keys(actionTypes).length > 0 && (\n <div>\n <h4 className=\"mb-3 text-sm font-medium\">消解动作分布</h4>\n <div className=\"space-y-2\">\n {Object.entries(actionTypes).map(([type, info]) => (\n <div\n key={type}\n className=\"flex items-center justify-between rounded bg-[hsl(var(--secondary))] p-2\"\n >\n <span className=\"text-sm\">{getResolutionTypeLabel(type)}</span>\n <div className=\"flex items-center gap-2\">\n <span className=\"rounded-full border border-[hsl(var(--border))] px-2 py-0.5 text-xs\">\n {info.count} 次\n </span>\n <span className=\"rounded-full bg-[hsl(var(--secondary))] px-2 py-0.5 text-xs\">\n {info.tasks.size} 个任务\n </span>\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Resource Utilization */}\n {resourceStats.length > 0 && (\n <div>\n <h4 className=\"mb-3 flex items-center gap-2 text-sm font-medium\">\n <Users className=\"h-4 w-4\" />\n 资源利用率\n </h4>\n <div className=\"max-h-[200px] space-y-2 overflow-y-auto\">\n {resourceStats.slice(0, 10).map((resource) => (\n <div key={resource.resource} className=\"space-y-1\">\n <div className=\"flex items-center justify-between text-sm\">\n <span className=\"font-medium\">{resource.resource}</span>\n <div className=\"flex items-center gap-2\">\n <span className={resource.color}>{resource.utilization_rate}%</span>\n <span className=\"rounded-full border border-[hsl(var(--border))] px-2 py-0.5 text-xs\">\n {resource.task_count} 个任务\n </span>\n </div>\n </div>\n <div className=\"h-2 overflow-hidden rounded-full bg-[hsl(var(--muted))]\">\n <div\n className=\"h-full rounded-full bg-sky-500 transition-all\"\n style={{ width: `${resource.utilization_rate}%` }}\n />\n </div>\n </div>\n ))}\n {resourceStats.length > 10 && (\n <div className=\"pt-2 text-center text-xs text-[hsl(var(--muted-foreground))]\">\n 还有 {resourceStats.length - 10} 个资源...\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* Summary Status */}\n <div className=\"rounded-lg bg-[hsl(var(--secondary))] p-4\">\n <h4 className=\"mb-2 text-sm font-medium\">消解总结</h4>\n <div className=\"space-y-1\">\n {data.validation?.all_conflicts_resolved ? (\n <div className=\"flex items-start gap-2 text-sm text-green-400\">\n <CheckCircle className=\"mt-0.5 h-4 w-4\" />\n <span>所有冲突已成功消解,方案可执行</span>\n </div>\n ) : (\n <div className=\"flex items-start gap-2 text-sm text-orange-400\">\n <AlertTriangle className=\"mt-0.5 h-4 w-4\" />\n <span>部分冲突尚未完全消解,建议进一步调整</span>\n </div>\n )}\n\n {data.validation?.new_conflicts_detected && (\n <div className=\"flex items-start gap-2 text-sm text-orange-400\">\n <AlertTriangle className=\"mt-0.5 h-4 w-4\" />\n <span>消解过程中产生了新的冲突,需要注意</span>\n </div>\n )}\n\n {data.removed_plans > 0 && (\n <div className=\"flex items-start gap-2 text-sm text-red-400\">\n <AlertTriangle className=\"mt-0.5 h-4 w-4\" />\n <span>有 {data.removed_plans} 个方案被移除</span>\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n )\n}\n","import { Info, MapPin, Star, Utensils } from \"lucide-react\"\nimport type { CardComponentProps } from \"../../../lib/card-registry\"\n\ninterface Restaurant {\n name: string\n category: string\n rating: number\n avgPrice?: number\n priceRange?: string\n location?: string\n specialty?: string[]\n specialties?: string[]\n tips?: string\n}\n\ninterface RestaurantPayload {\n restaurants: Restaurant[]\n}\n\nexport function RestaurantCard({ card }: CardComponentProps) {\n const payload = card.payload as RestaurantPayload | undefined\n\n if (!payload || !Array.isArray(payload.restaurants)) {\n return (\n <div className=\"rounded-md border border-red-500/50 bg-red-500/10 p-4\">\n <p className=\"text-red-400 text-sm\">美食卡片数据格式错误</p>\n </div>\n )\n }\n\n return (\n <div className=\"rounded-lg border border-white/10 bg-white/5 p-4\">\n {card.title && (\n <h3 className=\"font-semibold text-lg text-zinc-100 mb-4\">{card.title}</h3>\n )}\n <div className=\"space-y-3\">\n {payload.restaurants.map((rest, index) => (\n <div key={index} className=\"rounded-lg border border-white/10 p-3\">\n <div className=\"flex justify-between items-start mb-2\">\n <div>\n <div className=\"flex items-center gap-2\">\n <Utensils className=\"w-4 h-4 text-sky-400\" />\n <span className=\"font-medium text-zinc-200\">{rest.name}</span>\n <span className=\"px-1.5 py-0.5 bg-orange-500/20 text-orange-400 text-xs rounded\">\n {rest.category}\n </span>\n </div>\n <div className=\"flex items-center gap-1 text-sm text-zinc-400 mt-1\">\n <MapPin className=\"w-3 h-3\" />\n {rest.location}\n </div>\n </div>\n <div className=\"text-right\">\n <div className=\"flex items-center gap-1\">\n <Star className=\"w-3 h-3 text-amber-400 fill-amber-400\" />\n <span className=\"font-medium text-zinc-200\">{rest.rating}</span>\n </div>\n {(rest.avgPrice || rest.priceRange) && (\n <div className=\"text-sm text-zinc-400\">\n {rest.avgPrice ? `人均¥${rest.avgPrice}` : rest.priceRange}\n </div>\n )}\n </div>\n </div>\n <div className=\"mb-2\">\n <span className=\"text-xs text-zinc-500\">推荐菜品:</span>\n <div className=\"flex flex-wrap gap-1 mt-1\">\n {(rest.specialty ?? rest.specialties ?? []).map((s, i) => (\n <span\n key={i}\n className=\"px-2 py-0.5 bg-white/5 text-zinc-400 text-xs rounded\"\n >\n {s}\n </span>\n ))}\n </div>\n </div>\n {rest.tips && (\n <div className=\"flex items-start gap-1 text-xs text-zinc-400 bg-white/5 p-2 rounded\">\n <Info className=\"w-3 h-3 mt-0.5 flex-shrink-0\" />\n {rest.tips}\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n )\n}\n","import type { CardComponentProps } from \"../../../lib/card-registry\"\nimport { cn } from \"../../../lib/utils\"\n\ninterface ShoppingItem {\n name: string\n price: number\n quantity: number\n originalPrice?: number\n imageUrl?: string\n url?: string\n platform?: string\n}\n\ninterface ShoppingListPayload {\n items: ShoppingItem[]\n total: number\n currency?: string\n status?: \"comparing\" | \"ready\" | \"ordered\"\n}\n\nexport function ShoppingListCard({ card }: CardComponentProps) {\n const payload = card.payload as ShoppingListPayload | undefined\n\n if (!payload || !Array.isArray(payload.items)) {\n return (\n <div className=\"rounded-md border border-red-500/50 bg-red-500/10 p-4\">\n <p className=\"text-sm text-red-400\">购物清单卡片数据格式错误:需要 items 数组</p>\n </div>\n )\n }\n\n const currency = payload.currency || \"¥\"\n const statusMap = {\n comparing: { text: \"比价中\", color: \"bg-yellow-500/10 text-yellow-400\" },\n ready: { text: \"待购买\", color: \"bg-green-500/10 text-green-400\" },\n ordered: { text: \"已下单\", color: \"bg-blue-500/10 text-blue-400\" },\n }\n const status = statusMap[payload.status || \"ready\"]\n\n return (\n <div className=\"rounded-lg border border-[hsl(var(--border))] bg-[hsl(var(--card))] p-4 shadow-sm\">\n {/* 卡片标题 */}\n <div className=\"mb-4 flex items-center justify-between\">\n {card.title && (\n <h3 className=\"text-lg font-semibold text-[hsl(var(--foreground))]\">{card.title}</h3>\n )}\n <span className={cn(\"rounded-full px-2 py-1 text-xs font-medium\", status.color)}>\n {status.text}\n </span>\n </div>\n\n {/* 商品列表 */}\n <div className=\"mb-4 space-y-3\">\n {payload.items.map((item, index) => (\n <div\n key={index}\n className=\"flex items-center gap-3 rounded-md bg-[hsl(var(--muted)/0.3)] p-3\"\n >\n {item.imageUrl && (\n <img\n src={item.imageUrl}\n alt={item.name}\n className=\"h-12 w-12 rounded border border-[hsl(var(--border))] object-cover\"\n />\n )}\n\n <div className=\"flex-1\">\n <div className=\"flex items-start justify-between\">\n <div>\n <h4 className=\"text-sm font-medium text-[hsl(var(--foreground))]\">{item.name}</h4>\n {item.platform && (\n <p className=\"text-xs text-[hsl(var(--muted-foreground))]\">\n 来源: {item.platform}\n </p>\n )}\n </div>\n <div className=\"text-right\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-semibold text-[hsl(var(--foreground))]\">\n {currency}\n {item.price}\n </span>\n {item.originalPrice && item.originalPrice > item.price && (\n <span className=\"text-xs text-[hsl(var(--muted-foreground))] line-through\">\n {currency}\n {item.originalPrice}\n </span>\n )}\n </div>\n <p className=\"text-xs text-[hsl(var(--muted-foreground))]\">\n 数量: {item.quantity}\n </p>\n </div>\n </div>\n </div>\n </div>\n ))}\n </div>\n\n {/* 总价信息 */}\n <div className=\"border-t border-[hsl(var(--border))] pt-3\">\n <div className=\"flex items-center justify-between\">\n <span className=\"font-medium text-[hsl(var(--foreground))]\">总计</span>\n <span className=\"text-lg font-bold text-[hsl(var(--foreground))]\">\n {currency}\n {payload.total}\n </span>\n </div>\n <div className=\"mt-1 text-xs text-[hsl(var(--muted-foreground))]\">\n 共 {payload.items.reduce((sum, item) => sum + item.quantity, 0)} 件商品\n </div>\n </div>\n </div>\n )\n}\n","import type { CardComponentProps } from \"../../../lib/card-registry\"\nimport {\n Bomb,\n Download,\n Flag,\n Info,\n MapPin,\n Pause,\n Play,\n Rocket,\n Shield,\n Target,\n Zap,\n} from \"lucide-react\"\nimport { memo, useCallback, useEffect, useMemo, useState } from \"react\"\n\ninterface SimulationEvent {\n time: number\n type: \"start\" | \"deploy\" | \"strike\" | \"hit\" | \"damage\" | \"defense\" | \"end\" | \"info\"\n title: string\n description: string\n severity?: \"critical\" | \"high\" | \"medium\" | \"low\" | \"info\"\n}\n\ninterface SimulationEventCardPayload {\n planName: string\n simulationId: string\n simulationTime: string\n duration: number\n events: SimulationEvent[]\n}\n\nconst eventStyles = {\n start: { Icon: Rocket, color: \"#0284c7\", bg: \"bg-sky-950\" },\n deploy: { Icon: MapPin, color: \"#0369a1\", bg: \"bg-sky-950\" },\n strike: { Icon: Zap, color: \"#075985\", bg: \"bg-sky-900\" },\n hit: { Icon: Target, color: \"#0ea5e9\", bg: \"bg-sky-950\" },\n damage: { Icon: Bomb, color: \"#0c4a6e\", bg: \"bg-sky-900\" },\n defense: { Icon: Shield, color: \"#0284c7\", bg: \"bg-sky-950\" },\n end: { Icon: Flag, color: \"#475569\", bg: \"bg-slate-950\" },\n info: { Icon: Info, color: \"#64748b\", bg: \"bg-slate-950\" },\n}\n\nconst severityStyles = {\n critical: { badge: \"bg-sky-900 text-white\", label: \"严重\" },\n high: { badge: \"bg-sky-700 text-white\", label: \"重要\" },\n medium: { badge: \"bg-sky-600 text-white\", label: \"中等\" },\n low: { badge: \"bg-sky-500 text-white\", label: \"一般\" },\n info: { badge: \"bg-slate-500 text-white\", label: \"信息\" },\n}\n\nconst formatTime = (seconds: number): string => {\n const mins = Math.floor(seconds / 60)\n const secs = seconds % 60\n return `${mins.toString().padStart(2, \"0\")}:${secs.toString().padStart(2, \"0\")}`\n}\n\nconst showLogState = new Map<string, boolean>()\n\nconst SimulationEventControlPanel = memo(function SimulationEventControlPanel({\n cardId,\n card,\n}: {\n cardId: string\n card: CardComponentProps[\"card\"]\n}) {\n const [showLog, setShowLogInternal] = useState(() => showLogState.get(cardId) || false)\n\n const setShowLog = useCallback(\n (value: boolean) => {\n showLogState.set(cardId, value)\n setShowLogInternal(value)\n },\n [cardId],\n )\n\n const toggleShowLog = useCallback(() => {\n setShowLog(!showLog)\n }, [showLog, setShowLog])\n\n const handleDownload = useCallback(() => {\n try {\n const jsonContent = JSON.stringify(card, null, 2)\n const blob = new Blob([jsonContent], { type: \"application/json\" })\n const url = URL.createObjectURL(blob)\n const link = document.createElement(\"a\")\n link.href = url\n link.download = `${card.title || \"simulation-events\"}.json`\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n URL.revokeObjectURL(url)\n } catch (err) {\n console.error(\"下载失败:\", err)\n }\n }, [card])\n\n return (\n <div className=\"border-t border-[hsl(var(--border))] p-4\">\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={toggleShowLog}\n className={`rounded-md px-3 py-1.5 text-sm ${\n showLog\n ? \"bg-[hsl(var(--accent))] text-[hsl(var(--accent-foreground))]\"\n : \"border border-[hsl(var(--border))] text-[hsl(var(--foreground))]\"\n }`}\n >\n 查看日志\n </button>\n <button\n type=\"button\"\n onClick={handleDownload}\n title=\"下载事件数据\"\n className=\"flex items-center gap-1 rounded-md border border-[hsl(var(--border))] px-3 py-1.5 text-sm text-[hsl(var(--foreground))]\"\n >\n <Download className=\"h-4 w-4\" />\n 下载数据\n </button>\n </div>\n {showLog && (\n <div className=\"mt-4 rounded-lg bg-[hsl(var(--muted))] p-4\">\n <h4 className=\"mb-2 text-sm font-semibold\">LLM生成的源码:</h4>\n <div className=\"max-h-96 overflow-y-auto\">\n <pre className=\"whitespace-pre-wrap text-xs\">\n <code>{JSON.stringify(card, null, 2)}</code>\n </pre>\n </div>\n </div>\n )}\n </div>\n )\n})\n\nfunction SimulationEventCardComponent({ card }: CardComponentProps) {\n const payload = card.payload as SimulationEventCardPayload | undefined\n const title = card.title || \"仿真事件时间线\"\n\n const [currentTime, setCurrentTime] = useState(0)\n const [isPlaying, setIsPlaying] = useState(false)\n\n const cardId = useMemo(() => {\n return `simulation-event-card-${card.id || payload?.simulationId || \"default\"}`\n }, [card.id, payload?.simulationId])\n\n const planName = payload?.planName || \"未知方案\"\n const simulationId = payload?.simulationId || \"未知ID\"\n const simulationTime = payload?.simulationTime || \"未知时间\"\n const duration = payload?.duration || 0\n const events = useMemo(() => payload?.events || [], [payload?.events])\n\n const togglePlayback = useCallback(() => {\n setIsPlaying((prev) => !prev)\n }, [])\n\n useEffect(() => {\n if (!isPlaying) return\n\n const interval = setInterval(() => {\n setCurrentTime((prev) => {\n if (prev >= duration) {\n setIsPlaying(false)\n return duration\n }\n return prev + 1\n })\n }, 100)\n\n return () => clearInterval(interval)\n }, [isPlaying, duration])\n\n const visibleEvents = useMemo(() => {\n return events.filter((event) => event.time <= currentTime)\n }, [events, currentTime])\n\n const eventStats = useMemo(() => {\n const stats = {\n strike: 0,\n hit: 0,\n damage: 0,\n defense: 0,\n total: events.length,\n }\n\n for (const event of events) {\n if (event.type in stats) {\n stats[event.type as keyof typeof stats]++\n }\n }\n\n return stats\n }, [events])\n\n return (\n <div className=\"w-full rounded-lg border border-[hsl(var(--border))] bg-[hsl(var(--card))] text-[hsl(var(--card-foreground))]\">\n <div className=\"px-6 pb-4 pt-6\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-lg font-semibold\">{title}</h3>\n <div className=\"flex gap-4 text-sm text-[hsl(var(--muted-foreground))]\">\n <span>方案: {planName}</span>\n <span>事件数: {events.length}</span>\n <span>时长: {formatTime(duration)}</span>\n </div>\n </div>\n </div>\n <div className=\"space-y-4 px-6 pb-6\">\n {/* Simulation Info */}\n <div className=\"grid grid-cols-2 gap-4 rounded-lg bg-[hsl(var(--muted))]/50 p-4\">\n <div>\n <div className=\"text-sm text-[hsl(var(--muted-foreground))]\">仿真ID</div>\n <div className=\"font-mono text-sm\">{simulationId}</div>\n </div>\n <div>\n <div className=\"text-sm text-[hsl(var(--muted-foreground))]\">仿真时间</div>\n <div className=\"text-sm\">{simulationTime}</div>\n </div>\n </div>\n\n {/* Event Statistics */}\n <div className=\"grid grid-cols-5 gap-2 text-center\">\n <div className=\"rounded bg-sky-950 p-2\">\n <Zap className=\"mx-auto h-6 w-6 text-sky-700\" />\n <div className=\"text-xs text-[hsl(var(--muted-foreground))]\">打击</div>\n <div className=\"text-lg font-bold\">{eventStats.strike}</div>\n </div>\n <div className=\"rounded bg-sky-950 p-2\">\n <Target className=\"mx-auto h-6 w-6 text-sky-600\" />\n <div className=\"text-xs text-[hsl(var(--muted-foreground))]\">命中</div>\n <div className=\"text-lg font-bold\">{eventStats.hit}</div>\n </div>\n <div className=\"rounded bg-sky-900 p-2\">\n <Bomb className=\"mx-auto h-6 w-6 text-sky-300\" />\n <div className=\"text-xs text-[hsl(var(--muted-foreground))]\">损伤</div>\n <div className=\"text-lg font-bold\">{eventStats.damage}</div>\n </div>\n <div className=\"rounded bg-sky-950 p-2\">\n <Shield className=\"mx-auto h-6 w-6 text-sky-500\" />\n <div className=\"text-xs text-[hsl(var(--muted-foreground))]\">防御</div>\n <div className=\"text-lg font-bold\">{eventStats.defense}</div>\n </div>\n <div className=\"rounded bg-slate-950 p-2\">\n <Info className=\"mx-auto h-6 w-6 text-slate-600\" />\n <div className=\"text-xs text-[hsl(var(--muted-foreground))]\">总计</div>\n <div className=\"text-lg font-bold\">{eventStats.total}</div>\n </div>\n </div>\n\n {/* Timeline Control */}\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={togglePlayback}\n className=\"rounded-md border border-[hsl(var(--border))] p-1.5\"\n >\n {isPlaying ? <Pause className=\"h-4 w-4\" /> : <Play className=\"h-4 w-4\" />}\n </button>\n <input\n type=\"range\"\n min=\"0\"\n max={duration}\n value={currentTime}\n onChange={(e) => {\n setCurrentTime(Number(e.target.value))\n setIsPlaying(false)\n }}\n className=\"flex-1\"\n />\n <span className=\"min-w-[60px] text-right font-mono text-sm\">\n {formatTime(currentTime)}\n </span>\n </div>\n <div className=\"text-center text-xs text-[hsl(var(--muted-foreground))]\">\n 拖动滑块或点击播放按钮查看事件时间线\n </div>\n </div>\n\n {/* Event Timeline */}\n <div className=\"max-h-[500px] space-y-2 overflow-y-auto p-1\">\n {visibleEvents.map((event, index) => {\n const style = eventStyles[event.type] || eventStyles.info\n const EventIcon = style.Icon\n const severityStyle = event.severity ? severityStyles[event.severity] : null\n\n return (\n <div\n key={index}\n className={`flex gap-3 overflow-auto rounded-lg border border-[hsl(var(--border))] p-3 transition-all ${style.bg} ${\n event.time === currentTime ? \"ring-2 ring-sky-500\" : \"\"\n }`}\n >\n <div className=\"w-16 shrink-0 text-right\">\n <div className=\"font-mono text-xs text-[hsl(var(--muted-foreground))]\">\n {formatTime(event.time)}\n </div>\n </div>\n <div className=\"shrink-0\">\n <EventIcon className=\"h-6 w-6\" style={{ color: style.color }} />\n </div>\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-2\">\n <div className=\"text-sm font-semibold\">{event.title}</div>\n {severityStyle && (\n <span\n className={`rounded-full px-2 py-0.5 text-xs ${severityStyle.badge}`}\n >\n {severityStyle.label}\n </span>\n )}\n </div>\n <div className=\"mt-1 text-sm text-[hsl(var(--muted-foreground))]\">\n {event.description}\n </div>\n </div>\n </div>\n )\n })}\n\n {visibleEvents.length === 0 && (\n <div className=\"py-8 text-center text-[hsl(var(--muted-foreground))]\">暂无事件</div>\n )}\n </div>\n </div>\n <SimulationEventControlPanel cardId={cardId} card={card} />\n </div>\n )\n}\n\nexport const SimulationEventCard = memo(SimulationEventCardComponent)\n","import type { CardComponentProps } from \"../../../lib/card-registry\"\nimport { useCardState } from \"../../../hooks/use-card-state\"\nimport { memo, useCallback, useMemo } from \"react\"\n\ninterface PlanSurvivalData {\n planType: string\n ourDestroyed: number\n ourDamaged: number\n ourTotal: number\n lossRate: number\n missilesFired: number\n hitRate: number\n riskLevel: \"low\" | \"medium\" | \"high\"\n}\n\ninterface SurvivalEffectCardPayload {\n title?: string\n plans: PlanSurvivalData[]\n bestPlan?: string\n analysis?: string\n}\n\nconst planColors: Record<string, { primary: string; bg: string; light: string }> = {\n 稳健型: { primary: \"#0284c7\", bg: \"bg-sky-600\", light: \"bg-sky-900\" },\n 激进型: { primary: \"#075985\", bg: \"bg-sky-800\", light: \"bg-sky-900\" },\n 均衡型: { primary: \"#0ea5e9\", bg: \"bg-sky-500\", light: \"bg-sky-950\" },\n}\n\nconst riskLevelConfig = {\n low: { label: \"低\", color: \"text-sky-500\", bg: \"bg-sky-950\" },\n medium: { label: \"中\", color: \"text-sky-600\", bg: \"bg-sky-900\" },\n high: { label: \"高\", color: \"text-sky-300\", bg: \"bg-sky-800\" },\n}\n\nconst defaultPlanColor = { primary: \"#6b7280\", bg: \"bg-gray-500\", light: \"bg-gray-900\" }\n\nconst SurvivalEffectControlPanel = memo(function SurvivalEffectControlPanel({\n cardId,\n card,\n}: {\n cardId: string\n card: CardComponentProps[\"card\"]\n}) {\n const [showLog, setShowLog] = useCardState(`${cardId}-showLog`, false)\n\n const toggleShowLog = useCallback(() => {\n setShowLog(!showLog)\n }, [showLog, setShowLog])\n\n const handleDownload = useCallback(() => {\n try {\n const jsonContent = JSON.stringify(card, null, 2)\n const blob = new Blob([jsonContent], { type: \"application/json\" })\n const url = URL.createObjectURL(blob)\n const link = document.createElement(\"a\")\n link.href = url\n link.download = `${card.title || \"survival-effect\"}.json`\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n URL.revokeObjectURL(url)\n } catch (err) {\n console.error(\"下载失败:\", err)\n }\n }, [card])\n\n return (\n <div className=\"border-t border-[hsl(var(--border))] p-4\">\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={toggleShowLog}\n className={`rounded-md px-3 py-1.5 text-sm ${\n showLog\n ? \"bg-[hsl(var(--accent))] text-[hsl(var(--accent-foreground))]\"\n : \"border border-[hsl(var(--border))] text-[hsl(var(--foreground))]\"\n }`}\n >\n 查看日志\n </button>\n <button\n type=\"button\"\n onClick={handleDownload}\n title=\"下载生存效果数据\"\n className=\"rounded-md border border-[hsl(var(--border))] px-3 py-1.5 text-sm text-[hsl(var(--foreground))]\"\n >\n 下载数据\n </button>\n </div>\n {showLog && (\n <div className=\"mt-4 rounded-lg bg-[hsl(var(--muted))] p-4\">\n <h4 className=\"mb-2 text-sm font-semibold\">LLM生成的源码:</h4>\n <div className=\"max-h-96 overflow-y-auto\">\n <pre className=\"whitespace-pre-wrap text-xs\">\n <code>{JSON.stringify(card, null, 2)}</code>\n </pre>\n </div>\n </div>\n )}\n </div>\n )\n})\n\nfunction SurvivalEffectCardComponent({ card }: CardComponentProps) {\n const payload = card.payload as SurvivalEffectCardPayload | undefined\n const title = card.title || payload?.title || \"生存效果对比分析\"\n\n const cardId = useMemo(() => {\n return `survival-effect-card-${card.id || \"default\"}`\n }, [card.id])\n\n const plans = useMemo(() => payload?.plans || [], [payload?.plans])\n const bestPlan = payload?.bestPlan\n const analysis = payload?.analysis\n\n const calculatedBestPlan = useMemo(() => {\n if (plans.length === 0) return null\n return plans.reduce((best, current) =>\n current.lossRate < best.lossRate ? current : best,\n )\n }, [plans])\n\n const displayBestPlan = bestPlan || calculatedBestPlan?.planType\n\n return (\n <div className=\"w-full rounded-lg border border-[hsl(var(--border))] bg-[hsl(var(--card))] text-[hsl(var(--card-foreground))]\">\n <div className=\"px-6 pb-4 pt-6\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-lg font-semibold\">{title}</h3>\n <div className=\"flex gap-4 text-sm text-[hsl(var(--muted-foreground))]\">\n <span>方案数: {plans.length}</span>\n {displayBestPlan && (\n <span className=\"font-semibold text-sky-400\">最优: {displayBestPlan}</span>\n )}\n </div>\n </div>\n </div>\n <div className=\"space-y-6 px-6 pb-6\">\n {/* Comparison Table */}\n <div className=\"overflow-x-auto\">\n <table className=\"w-full border-collapse text-sm\">\n <thead>\n <tr className=\"border-b border-[hsl(var(--border))]\">\n <th className=\"p-2 text-left\">方案</th>\n <th className=\"p-2 text-center\">摧毁</th>\n <th className=\"p-2 text-center\">受损</th>\n <th className=\"p-2 text-center\">损失率</th>\n <th className=\"p-2 text-center\">导弹</th>\n <th className=\"p-2 text-center\">命中率</th>\n <th className=\"p-2 text-center\">风险</th>\n </tr>\n </thead>\n <tbody>\n {plans.map((plan, index) => {\n const colors = planColors[plan.planType] || defaultPlanColor\n const isBest = plan.planType === displayBestPlan\n const riskConfig = riskLevelConfig[plan.riskLevel]\n\n return (\n <tr\n key={index}\n className={`border-b border-[hsl(var(--border))] ${isBest ? \"bg-sky-950\" : \"\"}`}\n >\n <td className=\"p-2\">\n <div className=\"flex items-center gap-2\">\n <div className={`h-3 w-3 rounded ${colors.bg}`} />\n <span className=\"font-semibold\">{plan.planType}</span>\n {isBest && (\n <span className=\"rounded-full bg-sky-600 px-2 py-0.5 text-xs text-white\">\n 最优\n </span>\n )}\n </div>\n </td>\n <td className=\"p-2 text-center\">\n <span className=\"font-mono text-sky-400\">{plan.ourDestroyed}</span>\n </td>\n <td className=\"p-2 text-center\">\n <span className=\"font-mono text-sky-500\">{plan.ourDamaged}</span>\n </td>\n <td className=\"p-2 text-center\">\n <span className=\"font-bold\" style={{ color: colors.primary }}>\n {plan.lossRate.toFixed(1)}%\n </span>\n </td>\n <td className=\"p-2 text-center\">\n <span className=\"font-mono\">{plan.missilesFired}枚</span>\n </td>\n <td className=\"p-2 text-center\">\n <span className=\"font-bold text-sky-400\">{plan.hitRate}%</span>\n </td>\n <td className=\"p-2 text-center\">\n <div className=\"flex items-center justify-center gap-1\">\n <span className={riskConfig.color}>{riskConfig.label}</span>\n </div>\n </td>\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n\n {/* Loss Rate Comparison Chart */}\n <div className=\"space-y-3\">\n <h4 className=\"text-sm font-semibold\">损失率对比(越低越好)</h4>\n {plans.map((plan, index) => {\n const colors = planColors[plan.planType] || defaultPlanColor\n\n return (\n <div key={index} className=\"space-y-1\">\n <div className=\"flex justify-between text-sm\">\n <span className=\"font-semibold\">{plan.planType}</span>\n <span className=\"font-mono\">{plan.lossRate.toFixed(1)}%</span>\n </div>\n <div className=\"h-6 overflow-hidden rounded-full bg-[hsl(var(--muted))]\">\n <div\n className={`flex h-full items-center justify-end pr-2 transition-all duration-500 ${colors.bg}`}\n style={{ width: `${Math.min(plan.lossRate, 100)}%` }}\n >\n <span className=\"text-xs font-semibold text-white\">\n {plan.ourDestroyed + plan.ourDamaged}/{plan.ourTotal}\n </span>\n </div>\n </div>\n </div>\n )\n })}\n </div>\n\n {/* Detailed Stats Grid */}\n <div className=\"grid grid-cols-3 gap-4\">\n {plans.map((plan, index) => {\n const colors = planColors[plan.planType] || defaultPlanColor\n const isBest = plan.planType === displayBestPlan\n const riskConfig = riskLevelConfig[plan.riskLevel]\n const efficiency = plan.hitRate / (plan.lossRate + 1)\n\n return (\n <div\n key={index}\n className={`rounded-lg border p-4 ${colors.light} ${\n isBest ? \"border-sky-600\" : \"border-[hsl(var(--border))]\"\n }`}\n >\n <div className=\"mb-2 flex items-center justify-between\">\n <h4 className=\"font-semibold\">{plan.planType}</h4>\n {isBest && <span className=\"text-xs text-sky-400\">★</span>}\n </div>\n <div className=\"space-y-1 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-[hsl(var(--muted-foreground))]\">摧毁</span>\n <span className=\"font-bold text-sky-400\">{plan.ourDestroyed}个</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-[hsl(var(--muted-foreground))]\">受损</span>\n <span className=\"font-bold text-sky-500\">{plan.ourDamaged}个</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-[hsl(var(--muted-foreground))]\">总计</span>\n <span className=\"font-bold\">{plan.ourTotal}个</span>\n </div>\n <div className=\"flex justify-between border-t border-[hsl(var(--border))] pt-2\">\n <span className=\"text-[hsl(var(--muted-foreground))]\">损失率</span>\n <span className=\"text-lg font-bold\" style={{ color: colors.primary }}>\n {plan.lossRate.toFixed(1)}%\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-[hsl(var(--muted-foreground))]\">导弹</span>\n <span className=\"font-bold\">{plan.missilesFired}枚</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-[hsl(var(--muted-foreground))]\">命中率</span>\n <span className=\"font-bold text-sky-400\">{plan.hitRate}%</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-[hsl(var(--muted-foreground))]\">效费比</span>\n <span className=\"font-bold\">{efficiency.toFixed(2)}</span>\n </div>\n <div\n className={`mt-2 flex items-center justify-center gap-1 rounded p-2 ${riskConfig.bg}`}\n >\n <span className={`font-semibold ${riskConfig.color}`}>\n 风险{riskConfig.label}\n </span>\n </div>\n </div>\n </div>\n )\n })}\n </div>\n\n {/* Risk Level Summary */}\n <div className=\"grid grid-cols-3 gap-4\">\n {Object.entries(riskLevelConfig).map(([level, config]) => {\n const count = plans.filter((p) => p.riskLevel === level).length\n\n return (\n <div key={level} className={`rounded-lg p-3 ${config.bg}`}>\n <div className=\"flex items-center gap-2\">\n <div>\n <div className={`text-xs ${config.color}`}>风险{config.label}</div>\n <div className=\"text-xl font-bold\">{count}个方案</div>\n </div>\n </div>\n </div>\n )\n })}\n </div>\n\n {/* Analysis Text */}\n {analysis && (\n <div className=\"rounded-lg border border-sky-800 bg-sky-950 p-4\">\n <div className=\"flex gap-2\">\n <div className=\"flex-1\">\n <h4 className=\"mb-1 text-sm font-semibold\">分析结论</h4>\n <p className=\"text-sm text-[hsl(var(--muted-foreground))]\">{analysis}</p>\n </div>\n </div>\n </div>\n )}\n </div>\n <SurvivalEffectControlPanel cardId={cardId} card={card} />\n </div>\n )\n}\n\nexport const SurvivalEffectCard = memo(SurvivalEffectCardComponent)\n","import type { CardComponentProps } from \"../../../lib/card-registry\"\nimport { Calendar, MapPin, Wallet } from \"lucide-react\"\n\ninterface DailyPlan {\n day: number\n date: string\n activities: string[]\n}\n\ninterface TravelItineraryPayload {\n destination: string\n duration: string\n startDate: string\n endDate: string\n dailyPlan: DailyPlan[]\n totalBudget: number\n currency: string\n}\n\nexport function TravelItineraryCard({ card }: CardComponentProps) {\n const payload = card.payload as TravelItineraryPayload | undefined\n\n if (!payload || !Array.isArray(payload.dailyPlan)) {\n return (\n <div className=\"rounded-md border border-red-500/50 bg-red-500/10 p-4\">\n <p className=\"text-sm text-red-400\">旅行行程卡片数据格式错误:需要 dailyPlan 数组</p>\n </div>\n )\n }\n\n const formatCurrency = (amount: number, currency: string) => {\n if (currency === \"CNY\") {\n return `¥${amount.toLocaleString()}`\n }\n return `${currency} ${amount.toLocaleString()}`\n }\n\n return (\n <div className=\"rounded-lg border border-[hsl(var(--border))] bg-[hsl(var(--card))] p-4 shadow-sm\">\n {card.title && (\n <h3 className=\"mb-4 text-lg font-semibold text-[hsl(var(--foreground))]\">{card.title}</h3>\n )}\n\n {/* 行程概览 */}\n <div className=\"mb-4 flex flex-wrap gap-4 rounded-lg bg-[hsl(var(--secondary)/0.3)] p-3\">\n <div className=\"flex items-center gap-2\">\n <MapPin className=\"h-4 w-4 text-[hsl(var(--primary))]\" />\n <span className=\"text-sm font-medium\">{payload.destination}</span>\n </div>\n <div className=\"flex items-center gap-2\">\n <Calendar className=\"h-4 w-4 text-[hsl(var(--primary))]\" />\n <span className=\"text-sm\">\n {payload.duration} ({payload.startDate} - {payload.endDate})\n </span>\n </div>\n <div className=\"flex items-center gap-2\">\n <Wallet className=\"h-4 w-4 text-[hsl(var(--primary))]\" />\n <span className=\"text-sm\">\n 预算: {formatCurrency(payload.totalBudget, payload.currency)}\n </span>\n </div>\n </div>\n\n {/* 每日行程 */}\n <div className=\"space-y-3\">\n {payload.dailyPlan.map((day) => (\n <div\n key={day.day}\n className=\"rounded-lg border border-[hsl(var(--border))] p-3 transition-shadow hover:shadow-sm\"\n >\n <div className=\"mb-2 flex items-center gap-2\">\n <span className=\"rounded bg-[hsl(var(--primary))] px-2 py-1 text-xs font-medium text-[hsl(var(--primary-foreground))]\">\n Day {day.day}\n </span>\n <span className=\"text-sm text-[hsl(var(--muted-foreground))]\">{day.date}</span>\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {day.activities.map((activity, index) => (\n <span\n key={index}\n className=\"rounded bg-[hsl(var(--secondary))] px-2 py-1 text-sm text-[hsl(var(--secondary-foreground))]\"\n >\n {activity}\n </span>\n ))}\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n","import { cardRegistry } from \"../../lib/card-registry\"\nimport { AttractionCard } from \"./cards/attraction-card\"\nimport { CitationCard } from \"./cards/cite-card\"\nimport { ComprehensiveAnalysisCard } from \"./cards/comprehensive-analysis-card\"\nimport { ConflictDetectionCard } from \"./cards/conflict-detection-card\"\nimport { Counter } from \"./cards/counter\"\nimport { DamageEffectCard } from \"./cards/damage-effect-card\"\nimport { DestinationCard } from \"./cards/destination-card\"\nimport { DiffCard } from \"./cards/diff-card\"\nimport { ExecutionOrderCard } from \"./cards/execution-order-card\"\nimport { ExperienceCardWithOptions } from \"./cards/experience-card-with-options\"\nimport { FlightCard } from \"./cards/flight-card\"\nimport { HotelCard } from \"./cards/hotel-card\"\nimport { KillChainCard } from \"./cards/kill-chain-card\"\nimport { MapCard } from \"./cards/map-card\"\nimport { OrderStatusCard } from \"./cards/order-status-card\"\nimport { PatchCard } from \"./cards/patch-card\"\nimport { ProductRecommendationCard } from \"./cards/product-recommendation-card\"\nimport { ReflectionOptimizationCard } from \"./cards/reflection-optimization-card\"\nimport { ResolutionModificationsCard } from \"./cards/resolution-modifications-card\"\nimport { ResolutionSummaryCard } from \"./cards/resolution-summary-card\"\nimport { RestaurantCard } from \"./cards/restaurant-card\"\nimport { ShoppingListCard } from \"./cards/shopping-list-card\"\nimport { SimulationEventCard } from \"./cards/simulation-event-card\"\nimport { SurvivalEffectCard } from \"./cards/survival-effect-card\"\nimport { TravelItineraryCard } from \"./cards/travel-itinerary-card\"\n\n// Kill chain\ncardRegistry.register(\"kill-chain-card\", KillChainCard)\n\n// Shopping\ncardRegistry.register(\"shopping-list-card\", ShoppingListCard)\ncardRegistry.register(\"product-recommendation-card\", ProductRecommendationCard)\ncardRegistry.register(\"order-status-card\", OrderStatusCard)\n\n// Map\ncardRegistry.register(\"map-card\", MapCard)\n\n// Citation\ncardRegistry.register(\"cite-card\", CitationCard)\n\n// Diff & Patch\ncardRegistry.register(\"diff-card\", DiffCard)\ncardRegistry.register(\"patch-card\", PatchCard)\n\n// Experience\ncardRegistry.register(\"experience-card-with-options\", ExperienceCardWithOptions)\n\n// Simulation\ncardRegistry.register(\"simulation-event-card\", SimulationEventCard)\ncardRegistry.register(\"damage-effect-card\", DamageEffectCard)\ncardRegistry.register(\"survival-effect-card\", SurvivalEffectCard)\ncardRegistry.register(\"comprehensive-analysis-card\", ComprehensiveAnalysisCard)\ncardRegistry.register(\"reflection-optimization-card\", ReflectionOptimizationCard)\n\n// Counter\ncardRegistry.register(\"counter\", Counter)\n\n// Resolution\ncardRegistry.register(\"resolution-modifications-card\", ResolutionModificationsCard)\ncardRegistry.register(\"execution-order-card\", ExecutionOrderCard)\ncardRegistry.register(\"resolution-summary-card\", ResolutionSummaryCard)\n\n// GIS conflict detection\ncardRegistry.register(\"gis-conflict-detection\", ConflictDetectionCard)\n\n// Travel\ncardRegistry.register(\"travel-itinerary-card\", TravelItineraryCard)\ncardRegistry.register(\"travel-plan\", TravelItineraryCard)\ncardRegistry.register(\"destination-card\", DestinationCard)\ncardRegistry.register(\"flight-card\", FlightCard)\ncardRegistry.register(\"hotel-card\", HotelCard)\ncardRegistry.register(\"attraction-card\", AttractionCard)\ncardRegistry.register(\"restaurant-card\", RestaurantCard)\n"],"mappings":"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","names":["jsx","jsxs","jsx","jsxs","jsx","jsxs","useMemo","useState","state","useState","jsx","jsxs","useMemo","memo","useCallback","useMemo","jsx","jsxs","getPlanColor","DamageEffectControlPanel","MatrixView","WeightAdjustmentPanel","MapPin","Star","jsx","jsxs","useState","jsx","jsxs","i","j","useState","Clock","useMemo","useState","jsx","jsxs","memo","useCallback","useEffect","useMemo","jsx","jsxs","useMemo","useCallback","useEffect","memo","Clock","jsx","jsxs","MapPin","Star","jsx","jsxs","AlertTriangle","ChevronRight","Clock","MapPin","Target","useState","Fragment","jsx","jsxs","MapPin","Target","ChevronRight","useState","Clock","AlertTriangle","MapPin","useMemo","jsx","jsxs","useMemo","MapPin","Clock","jsx","jsxs","ChevronDown","ChevronRight","useState","jsx","jsxs","Star","jsx","jsxs","index","AlertCircle","ChevronDown","TrendingUp","useState","jsx","jsxs","AlertCircle","CheckCircle","Clock","MapPin","Navigation","Users","useState","jsx","jsxs","Activity","AlertTriangle","CheckCircle","Target","Users","jsx","jsxs","Info","MapPin","Star","jsx","jsxs","jsx","jsxs","Download","Info","MapPin","Shield","Target","Zap","memo","useCallback","useEffect","useMemo","useState","jsx","jsxs","formatTime","SimulationEventControlPanel","memo","useCallback","useMemo","jsx","jsxs","SurvivalEffectControlPanel","Calendar","MapPin","Wallet","jsx","jsxs"]}