data.tsx 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import type { Message, Session, Part, SnapshotFileDiff, SessionStatus, ProviderListResponse } from "@opencode-ai/sdk/v2"
  2. import { createSimpleContext } from "./helper"
  3. import { PreloadMultiFileDiffResult } from "@pierre/diffs/ssr"
  4. type Data = {
  5. agent?: {
  6. name: string
  7. color?: string
  8. }[]
  9. provider?: ProviderListResponse
  10. session: Session[]
  11. session_status: {
  12. [sessionID: string]: SessionStatus
  13. }
  14. session_diff: {
  15. [sessionID: string]: SnapshotFileDiff[]
  16. }
  17. session_diff_preload?: {
  18. [sessionID: string]: PreloadMultiFileDiffResult<any>[]
  19. }
  20. message: {
  21. [sessionID: string]: Message[]
  22. }
  23. part: {
  24. [messageID: string]: Part[]
  25. }
  26. part_text_accum_delta?: {
  27. [partID: string]: string
  28. }
  29. }
  30. export type NavigateToSessionFn = (sessionID: string) => void
  31. export type SessionHrefFn = (sessionID: string) => string
  32. export const { use: useData, provider: DataProvider } = createSimpleContext({
  33. name: "Data",
  34. init: (props: {
  35. data: Data
  36. directory: string
  37. onNavigateToSession?: NavigateToSessionFn
  38. onSessionHref?: SessionHrefFn
  39. }) => {
  40. return {
  41. get store() {
  42. return props.data
  43. },
  44. get directory() {
  45. return props.directory
  46. },
  47. navigateToSession: props.onNavigateToSession,
  48. sessionHref: props.onSessionHref,
  49. }
  50. },
  51. })