feat(core): add session metadata support (#23068)

Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
This commit is contained in:
Shantur Rathore
2026-05-30 22:58:11 +01:00
committed by GitHub
parent ac8e686f33
commit ddc30cd151
14 changed files with 1707 additions and 1 deletions

View File

@@ -64,6 +64,7 @@ describe("Session.Info", () => {
share: { url: "https://share.example.com/s/1" },
title: "Full session",
version: "1.0.0",
metadata: { source: "test" },
time: { created: 100, updated: 200, compacting: 150, archived: 300 },
permission: [{ action: "allow" as const, pattern: "*", permission: "read" }],
revert: {
@@ -157,6 +158,7 @@ describe("Session input schemas", () => {
const populated = {
parentID: sessionID,
title: "child",
metadata: { source: "test" },
permission: [{ action: "ask" as const, pattern: "*", permission: "bash" }],
workspaceID,
}

View File

@@ -184,4 +184,35 @@ describe("Session", () => {
expect(Exit.isFailure(getExit)).toBe(true)
}),
)
it.instance("persists metadata and copies it on fork by default", () =>
Effect.gen(function* () {
const session = yield* SessionNs.Service
const meta = { source: "sdk", trace: { id: "abc" } }
const created = yield* Effect.acquireRelease(session.create({ title: "with-meta", metadata: meta }), (info) =>
session.remove(info.id).pipe(Effect.ignore),
)
const saved = yield* session.get(created.id)
const fork = yield* Effect.acquireRelease(session.fork({ sessionID: created.id }), (info) =>
session.remove(info.id).pipe(Effect.ignore),
)
expect(saved.metadata).toEqual(meta)
expect(fork.metadata).toEqual(meta)
expect(fork.metadata).not.toBe(meta)
}),
)
it.instance("omits metadata when not provided", () =>
Effect.gen(function* () {
const session = yield* SessionNs.Service
const created = yield* Effect.acquireRelease(session.create({ title: "empty-meta" }), (info) =>
session.remove(info.id).pipe(Effect.ignore),
)
const saved = yield* session.get(created.id)
expect(created.metadata).toBeUndefined()
expect(saved.metadata).toBeUndefined()
}),
)
})