session.ts 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. export * as Session from "./session.js"
  2. import { Schema } from "effect"
  3. import { Agent } from "./agent.js"
  4. import { Location } from "./location.js"
  5. import { Model } from "./model.js"
  6. import { Project } from "./project.js"
  7. import { DateTimeUtcFromMillis, optional, RelativePath } from "./schema.js"
  8. import { SessionEvent } from "./session-event.js"
  9. import { SessionID } from "./session-id.js"
  10. import { Money } from "./money.js"
  11. import { TokenUsage } from "./token-usage.js"
  12. import { Revert } from "./session-revert.js"
  13. import { SessionFork } from "./session-fork.js"
  14. export const ID = SessionID
  15. export type ID = SessionID
  16. export const Event = SessionEvent
  17. export { Revert }
  18. export const ForkBoundary = SessionFork.Boundary
  19. export type ForkBoundary = SessionFork.Boundary
  20. export const ForkRequestBoundary = SessionFork.RequestBoundary
  21. export type ForkRequestBoundary = SessionFork.RequestBoundary
  22. export interface Info extends Schema.Schema.Type<typeof Info> {}
  23. export const Info = Schema.Struct({
  24. id: ID,
  25. parentID: ID.pipe(optional),
  26. fork: Schema.Struct({
  27. sessionID: ID,
  28. boundary: ForkBoundary,
  29. }).pipe(optional),
  30. projectID: Project.ID,
  31. agent: Agent.ID.pipe(optional),
  32. model: Model.Ref.pipe(optional),
  33. cost: Money.USD,
  34. tokens: TokenUsage.Info,
  35. time: Schema.Struct({
  36. created: DateTimeUtcFromMillis,
  37. updated: DateTimeUtcFromMillis,
  38. archived: DateTimeUtcFromMillis.pipe(optional),
  39. }),
  40. title: Schema.String.pipe(optional),
  41. location: Location.Ref,
  42. subpath: RelativePath.pipe(optional),
  43. revert: Revert.pipe(optional),
  44. }).annotate({ identifier: "Session.Info" })
  45. export const ListAnchor = Schema.Struct({
  46. id: ID,
  47. time: Schema.Finite,
  48. direction: Schema.Literals(["previous", "next"]),
  49. }).annotate({ identifier: "Session.ListAnchor" })
  50. export interface ListAnchor extends Schema.Schema.Type<typeof ListAnchor> {}