@truefoundry/trueforge-core 0.2.0-rc.1 → 0.2.0-rc.2

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 (35) hide show
  1. package/dist/agent-session/Sessions.d.ts +7 -3
  2. package/dist/agent-session/Sessions.d.ts.map +1 -1
  3. package/dist/agent-session/Sessions.js +2 -1
  4. package/dist/agent-session/Sessions.js.map +1 -1
  5. package/dist/agent-session/Sessions.mjs +2 -1
  6. package/dist/agent-session/Sessions.mjs.map +1 -1
  7. package/dist/agent-session/index.d.ts +2 -2
  8. package/dist/agent-session/index.d.ts.map +1 -1
  9. package/dist/agent-session/index.js +6 -0
  10. package/dist/agent-session/index.js.map +1 -1
  11. package/dist/agent-session/index.mjs +11 -1
  12. package/dist/agent-session/index.mjs.map +1 -1
  13. package/dist/agent-session/models/SessionRecord.d.ts +5 -1
  14. package/dist/agent-session/models/SessionRecord.d.ts.map +1 -1
  15. package/dist/agent-session/models/SessionRecord.js.map +1 -1
  16. package/dist/agent-session/schemas/session.d.ts +26 -2
  17. package/dist/agent-session/schemas/session.d.ts.map +1 -1
  18. package/dist/agent-session/schemas/session.js +23 -5
  19. package/dist/agent-session/schemas/session.js.map +1 -1
  20. package/dist/agent-session/schemas/session.mjs +19 -4
  21. package/dist/agent-session/schemas/session.mjs.map +1 -1
  22. package/dist/agent-session/store/ISessionStore.d.ts +18 -3
  23. package/dist/agent-session/store/ISessionStore.d.ts.map +1 -1
  24. package/dist/agent-session/store/ISessionStore.js.map +1 -1
  25. package/dist/agent-session/store/InMemorySessionStore.d.ts +1 -1
  26. package/dist/agent-session/store/InMemorySessionStore.d.ts.map +1 -1
  27. package/dist/agent-session/store/InMemorySessionStore.js +23 -3
  28. package/dist/agent-session/store/InMemorySessionStore.js.map +1 -1
  29. package/dist/agent-session/store/InMemorySessionStore.mjs +23 -3
  30. package/dist/agent-session/store/InMemorySessionStore.mjs.map +1 -1
  31. package/dist/core/sandbox/Sandbox.js +5 -5
  32. package/dist/core/sandbox/Sandbox.js.map +1 -1
  33. package/dist/core/sandbox/Sandbox.mjs +1 -1
  34. package/dist/core/sandbox/Sandbox.mjs.map +1 -1
  35. package/package.json +1 -1
@@ -1,8 +1,12 @@
1
1
  import { SessionHandle } from './SessionHandle';
2
2
  import type { CreateSessionInput, GetSessionByExternalIdInput, GetSessionInput, ISessionStore } from './store/ISessionStore';
3
- export type SessionsCreateInput<TSessionCustom extends object> = Omit<CreateSessionInput<TSessionCustom>, 'custom' | 'metadata'> & {
4
- custom?: TSessionCustom | undefined;
5
- metadata?: CreateSessionInput<TSessionCustom>['metadata'] | undefined;
3
+ /**
4
+ * Domain create input: same as {@link CreateSessionInput}, but `custom`,
5
+ * `metadata`, and `source` are optional — {@link Sessions.create} defaults them
6
+ * (`null` / `{}` / `null`). The store contract requires those fields explicitly.
7
+ */
8
+ export type SessionsCreateInput<TSessionCustom extends object> = Omit<CreateSessionInput<TSessionCustom>, 'custom' | 'metadata' | 'source'> & {
9
+ [K in 'custom' | 'metadata' | 'source']?: CreateSessionInput<TSessionCustom>[K] | undefined;
6
10
  };
7
11
  export declare class Sessions<TSessionCustom extends object = Record<string, never>, TTurnCustom extends object = Record<string, never>> {
8
12
  private readonly store;
@@ -1 +1 @@
1
- {"version":3,"file":"Sessions.d.ts","sourceRoot":"","sources":["../../src/agent-session/Sessions.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EACV,kBAAkB,EAClB,2BAA2B,EAC3B,eAAe,EACf,aAAa,EACd,MAAM,uBAAuB,CAAC;AAG/B,MAAM,MAAM,mBAAmB,CAAC,cAAc,SAAS,MAAM,IAAI,IAAI,CACnE,kBAAkB,CAAC,cAAc,CAAC,EAClC,QAAQ,GAAG,UAAU,CACtB,GAAG;IACF,MAAM,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,EAAE,kBAAkB,CAAC,cAAc,CAAC,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;CACvE,CAAC;AAEF,qBAAa,QAAQ,CACnB,cAAc,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACrD,WAAW,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IAElD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6C;IAEnE,YAAY,IAAI,EAAE;QAAE,YAAY,EAAE,aAAa,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;KAAE,EAE7E;IAED;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,mBAAmB,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,CAiB5G;IAED;;;OAGG;IACG,GAAG,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,cAAc,EAAE,WAAW,CAAC,GAAG,SAAS,CAAC,CASjG;IAED;;;OAGG;IACG,eAAe,CACnB,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAAC,aAAa,CAAC,cAAc,EAAE,WAAW,CAAC,GAAG,SAAS,CAAC,CASjE;IAED;;OAEG;IACG,uBAAuB,CAC3B,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,EAAE,YAAY,GAAG,aAAa,CAAC,GAAG;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GACvG,OAAO,CAAC;QAAE,OAAO,EAAE,aAAa,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAyBpF;CACF"}
1
+ {"version":3,"file":"Sessions.d.ts","sourceRoot":"","sources":["../../src/agent-session/Sessions.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EACV,kBAAkB,EAClB,2BAA2B,EAC3B,eAAe,EACf,aAAa,EACd,MAAM,uBAAuB,CAAC;AAG/B;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,CAAC,cAAc,SAAS,MAAM,IAAI,IAAI,CACnE,kBAAkB,CAAC,cAAc,CAAC,EAClC,QAAQ,GAAG,UAAU,GAAG,QAAQ,CACjC,GAAG;KACD,CAAC,IAAI,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC,CAAC,EAAE,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;CAC5F,CAAC;AAEF,qBAAa,QAAQ,CACnB,cAAc,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACrD,WAAW,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IAElD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6C;IAEnE,YAAY,IAAI,EAAE;QAAE,YAAY,EAAE,aAAa,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;KAAE,EAE7E;IAED;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,mBAAmB,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,CAkB5G;IAED;;;OAGG;IACG,GAAG,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,cAAc,EAAE,WAAW,CAAC,GAAG,SAAS,CAAC,CASjG;IAED;;;OAGG;IACG,eAAe,CACnB,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAAC,aAAa,CAAC,cAAc,EAAE,WAAW,CAAC,GAAG,SAAS,CAAC,CASjE;IAED;;OAEG;IACG,uBAAuB,CAC3B,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,EAAE,YAAY,GAAG,aAAa,CAAC,GAAG;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GACvG,OAAO,CAAC;QAAE,OAAO,EAAE,aAAa,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAyBpF;CACF"}
@@ -38,7 +38,8 @@ var Sessions = class {
38
38
  await this.store.createSession({
39
39
  ...input,
40
40
  custom: input.custom ?? null,
41
- metadata: input.metadata ?? {}
41
+ metadata: input.metadata ?? {},
42
+ source: input.source ?? null
42
43
  });
43
44
  const record = await this.store.getSession({
44
45
  tenant_id: input.tenant_id,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/agent-session/Sessions.ts"],"sourcesContent":["/**\n * Storage-only session collection: create / get. Behavior arrives per run via\n * the resolver on {@link SessionHandle.createTurn}.\n */\nimport { ulid } from 'ulid';\nimport { SessionHandle } from './SessionHandle';\nimport type {\n CreateSessionInput,\n GetSessionByExternalIdInput,\n GetSessionInput,\n ISessionStore,\n} from './store/ISessionStore';\nimport { SessionExternalIdConflictError } from './store/SessionStoreErrors';\n\nexport type SessionsCreateInput<TSessionCustom extends object> = Omit<\n CreateSessionInput<TSessionCustom>,\n 'custom' | 'metadata'\n> & {\n custom?: TSessionCustom | undefined;\n metadata?: CreateSessionInput<TSessionCustom>['metadata'] | undefined;\n};\n\nexport class Sessions<\n TSessionCustom extends object = Record<string, never>,\n TTurnCustom extends object = Record<string, never>,\n> {\n private readonly store: ISessionStore<TSessionCustom, TTurnCustom>;\n\n constructor(deps: { sessionStore: ISessionStore<TSessionCustom, TTurnCustom> }) {\n this.store = deps.sessionStore;\n }\n\n /**\n * Creates and persists a new session with a reference or inline agent binding.\n */\n async create(input: SessionsCreateInput<TSessionCustom>): Promise<SessionHandle<TSessionCustom, TTurnCustom>> {\n await this.store.createSession({\n ...input,\n custom: input.custom ?? null,\n metadata: input.metadata ?? {},\n });\n const record = await this.store.getSession({\n tenant_id: input.tenant_id,\n session_id: input.session_id,\n });\n if (!record) {\n throw new Error(`Session create succeeded but getSession returned undefined: ${input.session_id}`);\n }\n return new SessionHandle({\n store: this.store,\n session: record,\n });\n }\n\n /**\n * Returns the session as stored (ref agents are not hydrated to a value), or\n * undefined if not found. Read-only: does not bump last_activity_timestamp_ms.\n */\n async get(input: GetSessionInput): Promise<SessionHandle<TSessionCustom, TTurnCustom> | undefined> {\n const record = await this.store.getSession(input);\n if (!record) {\n return undefined;\n }\n return new SessionHandle({\n store: this.store,\n session: record,\n });\n }\n\n /**\n * Returns the session bound to this tenant-scoped external id, or undefined.\n * Read-only: does not bump last_activity_timestamp_ms.\n */\n async getByExternalId(\n input: GetSessionByExternalIdInput,\n ): Promise<SessionHandle<TSessionCustom, TTurnCustom> | undefined> {\n const record = await this.store.getSessionByExternalId(input);\n if (!record) {\n return undefined;\n }\n return new SessionHandle({\n store: this.store,\n session: record,\n });\n }\n\n /**\n * Get-or-create the session bound to a tenant-scoped `external_id`.\n */\n async getOrCreateByExternalId(\n input: Omit<SessionsCreateInput<TSessionCustom>, 'session_id' | 'external_id'> & { external_id: string },\n ): Promise<{ session: SessionHandle<TSessionCustom, TTurnCustom>; created: boolean }> {\n const { tenant_id, external_id } = input;\n\n const existing = await this.getByExternalId({ tenant_id, external_id });\n if (existing !== undefined) {\n return { session: existing, created: false };\n }\n\n try {\n const session = await this.create({\n ...input,\n session_id: ulid().toLowerCase(),\n external_id,\n });\n return { session, created: true };\n } catch (error) {\n if (!(error instanceof SessionExternalIdConflictError)) {\n throw error;\n }\n const winner = await this.getByExternalId({ tenant_id, external_id });\n if (winner === undefined) {\n throw error;\n }\n return { session: winner, created: false };\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,kBAAqB;AACrB,2BAA8B;AAO9B,gCAA+C;AAUxC,IAAM,WAAN,MAGL;AAAA,EACiB;AAAA,EAEjB,YAAY,MAAoE;AAC9E,SAAK,QAAQ,KAAK;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,OAAiG;AAC5G,UAAM,KAAK,MAAM,cAAc;AAAA,MAC7B,GAAG;AAAA,MACH,QAAQ,MAAM,UAAU;AAAA,MACxB,UAAU,MAAM,YAAY,CAAC;AAAA,IAC/B,CAAC;AACD,UAAM,SAAS,MAAM,KAAK,MAAM,WAAW;AAAA,MACzC,WAAW,MAAM;AAAA,MACjB,YAAY,MAAM;AAAA,IACpB,CAAC;AACD,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,+DAA+D,MAAM,UAAU,EAAE;AAAA,IACnG;AACA,WAAO,IAAI,mCAAc;AAAA,MACvB,OAAO,KAAK;AAAA,MACZ,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,IAAI,OAAyF;AACjG,UAAM,SAAS,MAAM,KAAK,MAAM,WAAW,KAAK;AAChD,QAAI,CAAC,QAAQ;AACX,aAAO;AAAA,IACT;AACA,WAAO,IAAI,mCAAc;AAAA,MACvB,OAAO,KAAK;AAAA,MACZ,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,gBACJ,OACiE;AACjE,UAAM,SAAS,MAAM,KAAK,MAAM,uBAAuB,KAAK;AAC5D,QAAI,CAAC,QAAQ;AACX,aAAO;AAAA,IACT;AACA,WAAO,IAAI,mCAAc;AAAA,MACvB,OAAO,KAAK;AAAA,MACZ,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,wBACJ,OACoF;AACpF,UAAM,EAAE,WAAW,YAAY,IAAI;AAEnC,UAAM,WAAW,MAAM,KAAK,gBAAgB,EAAE,WAAW,YAAY,CAAC;AACtE,QAAI,aAAa,QAAW;AAC1B,aAAO,EAAE,SAAS,UAAU,SAAS,MAAM;AAAA,IAC7C;AAEA,QAAI;AACF,YAAM,UAAU,MAAM,KAAK,OAAO;AAAA,QAChC,GAAG;AAAA,QACH,gBAAY,kBAAK,EAAE,YAAY;AAAA,QAC/B;AAAA,MACF,CAAC;AACD,aAAO,EAAE,SAAS,SAAS,KAAK;AAAA,IAClC,SAAS,OAAO;AACd,UAAI,EAAE,iBAAiB,2DAAiC;AACtD,cAAM;AAAA,MACR;AACA,YAAM,SAAS,MAAM,KAAK,gBAAgB,EAAE,WAAW,YAAY,CAAC;AACpE,UAAI,WAAW,QAAW;AACxB,cAAM;AAAA,MACR;AACA,aAAO,EAAE,SAAS,QAAQ,SAAS,MAAM;AAAA,IAC3C;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/agent-session/Sessions.ts"],"sourcesContent":["/**\n * Storage-only session collection: create / get. Behavior arrives per run via\n * the resolver on {@link SessionHandle.createTurn}.\n */\nimport { ulid } from 'ulid';\nimport { SessionHandle } from './SessionHandle';\nimport type {\n CreateSessionInput,\n GetSessionByExternalIdInput,\n GetSessionInput,\n ISessionStore,\n} from './store/ISessionStore';\nimport { SessionExternalIdConflictError } from './store/SessionStoreErrors';\n\n/**\n * Domain create input: same as {@link CreateSessionInput}, but `custom`,\n * `metadata`, and `source` are optional — {@link Sessions.create} defaults them\n * (`null` / `{}` / `null`). The store contract requires those fields explicitly.\n */\nexport type SessionsCreateInput<TSessionCustom extends object> = Omit<\n CreateSessionInput<TSessionCustom>,\n 'custom' | 'metadata' | 'source'\n> & {\n [K in 'custom' | 'metadata' | 'source']?: CreateSessionInput<TSessionCustom>[K] | undefined;\n};\n\nexport class Sessions<\n TSessionCustom extends object = Record<string, never>,\n TTurnCustom extends object = Record<string, never>,\n> {\n private readonly store: ISessionStore<TSessionCustom, TTurnCustom>;\n\n constructor(deps: { sessionStore: ISessionStore<TSessionCustom, TTurnCustom> }) {\n this.store = deps.sessionStore;\n }\n\n /**\n * Creates and persists a new session with a reference or inline agent binding.\n */\n async create(input: SessionsCreateInput<TSessionCustom>): Promise<SessionHandle<TSessionCustom, TTurnCustom>> {\n await this.store.createSession({\n ...input,\n custom: input.custom ?? null,\n metadata: input.metadata ?? {},\n source: input.source ?? null,\n });\n const record = await this.store.getSession({\n tenant_id: input.tenant_id,\n session_id: input.session_id,\n });\n if (!record) {\n throw new Error(`Session create succeeded but getSession returned undefined: ${input.session_id}`);\n }\n return new SessionHandle({\n store: this.store,\n session: record,\n });\n }\n\n /**\n * Returns the session as stored (ref agents are not hydrated to a value), or\n * undefined if not found. Read-only: does not bump last_activity_timestamp_ms.\n */\n async get(input: GetSessionInput): Promise<SessionHandle<TSessionCustom, TTurnCustom> | undefined> {\n const record = await this.store.getSession(input);\n if (!record) {\n return undefined;\n }\n return new SessionHandle({\n store: this.store,\n session: record,\n });\n }\n\n /**\n * Returns the session bound to this tenant-scoped external id, or undefined.\n * Read-only: does not bump last_activity_timestamp_ms.\n */\n async getByExternalId(\n input: GetSessionByExternalIdInput,\n ): Promise<SessionHandle<TSessionCustom, TTurnCustom> | undefined> {\n const record = await this.store.getSessionByExternalId(input);\n if (!record) {\n return undefined;\n }\n return new SessionHandle({\n store: this.store,\n session: record,\n });\n }\n\n /**\n * Get-or-create the session bound to a tenant-scoped `external_id`.\n */\n async getOrCreateByExternalId(\n input: Omit<SessionsCreateInput<TSessionCustom>, 'session_id' | 'external_id'> & { external_id: string },\n ): Promise<{ session: SessionHandle<TSessionCustom, TTurnCustom>; created: boolean }> {\n const { tenant_id, external_id } = input;\n\n const existing = await this.getByExternalId({ tenant_id, external_id });\n if (existing !== undefined) {\n return { session: existing, created: false };\n }\n\n try {\n const session = await this.create({\n ...input,\n session_id: ulid().toLowerCase(),\n external_id,\n });\n return { session, created: true };\n } catch (error) {\n if (!(error instanceof SessionExternalIdConflictError)) {\n throw error;\n }\n const winner = await this.getByExternalId({ tenant_id, external_id });\n if (winner === undefined) {\n throw error;\n }\n return { session: winner, created: false };\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,kBAAqB;AACrB,2BAA8B;AAO9B,gCAA+C;AAcxC,IAAM,WAAN,MAGL;AAAA,EACiB;AAAA,EAEjB,YAAY,MAAoE;AAC9E,SAAK,QAAQ,KAAK;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,OAAiG;AAC5G,UAAM,KAAK,MAAM,cAAc;AAAA,MAC7B,GAAG;AAAA,MACH,QAAQ,MAAM,UAAU;AAAA,MACxB,UAAU,MAAM,YAAY,CAAC;AAAA,MAC7B,QAAQ,MAAM,UAAU;AAAA,IAC1B,CAAC;AACD,UAAM,SAAS,MAAM,KAAK,MAAM,WAAW;AAAA,MACzC,WAAW,MAAM;AAAA,MACjB,YAAY,MAAM;AAAA,IACpB,CAAC;AACD,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,+DAA+D,MAAM,UAAU,EAAE;AAAA,IACnG;AACA,WAAO,IAAI,mCAAc;AAAA,MACvB,OAAO,KAAK;AAAA,MACZ,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,IAAI,OAAyF;AACjG,UAAM,SAAS,MAAM,KAAK,MAAM,WAAW,KAAK;AAChD,QAAI,CAAC,QAAQ;AACX,aAAO;AAAA,IACT;AACA,WAAO,IAAI,mCAAc;AAAA,MACvB,OAAO,KAAK;AAAA,MACZ,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,gBACJ,OACiE;AACjE,UAAM,SAAS,MAAM,KAAK,MAAM,uBAAuB,KAAK;AAC5D,QAAI,CAAC,QAAQ;AACX,aAAO;AAAA,IACT;AACA,WAAO,IAAI,mCAAc;AAAA,MACvB,OAAO,KAAK;AAAA,MACZ,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,wBACJ,OACoF;AACpF,UAAM,EAAE,WAAW,YAAY,IAAI;AAEnC,UAAM,WAAW,MAAM,KAAK,gBAAgB,EAAE,WAAW,YAAY,CAAC;AACtE,QAAI,aAAa,QAAW;AAC1B,aAAO,EAAE,SAAS,UAAU,SAAS,MAAM;AAAA,IAC7C;AAEA,QAAI;AACF,YAAM,UAAU,MAAM,KAAK,OAAO;AAAA,QAChC,GAAG;AAAA,QACH,gBAAY,kBAAK,EAAE,YAAY;AAAA,QAC/B;AAAA,MACF,CAAC;AACD,aAAO,EAAE,SAAS,SAAS,KAAK;AAAA,IAClC,SAAS,OAAO;AACd,UAAI,EAAE,iBAAiB,2DAAiC;AACtD,cAAM;AAAA,MACR;AACA,YAAM,SAAS,MAAM,KAAK,gBAAgB,EAAE,WAAW,YAAY,CAAC;AACpE,UAAI,WAAW,QAAW;AACxB,cAAM;AAAA,MACR;AACA,aAAO,EAAE,SAAS,QAAQ,SAAS,MAAM;AAAA,IAC3C;AAAA,EACF;AACF;","names":[]}
@@ -14,7 +14,8 @@ var Sessions = class {
14
14
  await this.store.createSession({
15
15
  ...input,
16
16
  custom: input.custom ?? null,
17
- metadata: input.metadata ?? {}
17
+ metadata: input.metadata ?? {},
18
+ source: input.source ?? null
18
19
  });
19
20
  const record = await this.store.getSession({
20
21
  tenant_id: input.tenant_id,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/agent-session/Sessions.ts"],"sourcesContent":["/**\n * Storage-only session collection: create / get. Behavior arrives per run via\n * the resolver on {@link SessionHandle.createTurn}.\n */\nimport { ulid } from 'ulid';\nimport { SessionHandle } from './SessionHandle';\nimport type {\n CreateSessionInput,\n GetSessionByExternalIdInput,\n GetSessionInput,\n ISessionStore,\n} from './store/ISessionStore';\nimport { SessionExternalIdConflictError } from './store/SessionStoreErrors';\n\nexport type SessionsCreateInput<TSessionCustom extends object> = Omit<\n CreateSessionInput<TSessionCustom>,\n 'custom' | 'metadata'\n> & {\n custom?: TSessionCustom | undefined;\n metadata?: CreateSessionInput<TSessionCustom>['metadata'] | undefined;\n};\n\nexport class Sessions<\n TSessionCustom extends object = Record<string, never>,\n TTurnCustom extends object = Record<string, never>,\n> {\n private readonly store: ISessionStore<TSessionCustom, TTurnCustom>;\n\n constructor(deps: { sessionStore: ISessionStore<TSessionCustom, TTurnCustom> }) {\n this.store = deps.sessionStore;\n }\n\n /**\n * Creates and persists a new session with a reference or inline agent binding.\n */\n async create(input: SessionsCreateInput<TSessionCustom>): Promise<SessionHandle<TSessionCustom, TTurnCustom>> {\n await this.store.createSession({\n ...input,\n custom: input.custom ?? null,\n metadata: input.metadata ?? {},\n });\n const record = await this.store.getSession({\n tenant_id: input.tenant_id,\n session_id: input.session_id,\n });\n if (!record) {\n throw new Error(`Session create succeeded but getSession returned undefined: ${input.session_id}`);\n }\n return new SessionHandle({\n store: this.store,\n session: record,\n });\n }\n\n /**\n * Returns the session as stored (ref agents are not hydrated to a value), or\n * undefined if not found. Read-only: does not bump last_activity_timestamp_ms.\n */\n async get(input: GetSessionInput): Promise<SessionHandle<TSessionCustom, TTurnCustom> | undefined> {\n const record = await this.store.getSession(input);\n if (!record) {\n return undefined;\n }\n return new SessionHandle({\n store: this.store,\n session: record,\n });\n }\n\n /**\n * Returns the session bound to this tenant-scoped external id, or undefined.\n * Read-only: does not bump last_activity_timestamp_ms.\n */\n async getByExternalId(\n input: GetSessionByExternalIdInput,\n ): Promise<SessionHandle<TSessionCustom, TTurnCustom> | undefined> {\n const record = await this.store.getSessionByExternalId(input);\n if (!record) {\n return undefined;\n }\n return new SessionHandle({\n store: this.store,\n session: record,\n });\n }\n\n /**\n * Get-or-create the session bound to a tenant-scoped `external_id`.\n */\n async getOrCreateByExternalId(\n input: Omit<SessionsCreateInput<TSessionCustom>, 'session_id' | 'external_id'> & { external_id: string },\n ): Promise<{ session: SessionHandle<TSessionCustom, TTurnCustom>; created: boolean }> {\n const { tenant_id, external_id } = input;\n\n const existing = await this.getByExternalId({ tenant_id, external_id });\n if (existing !== undefined) {\n return { session: existing, created: false };\n }\n\n try {\n const session = await this.create({\n ...input,\n session_id: ulid().toLowerCase(),\n external_id,\n });\n return { session, created: true };\n } catch (error) {\n if (!(error instanceof SessionExternalIdConflictError)) {\n throw error;\n }\n const winner = await this.getByExternalId({ tenant_id, external_id });\n if (winner === undefined) {\n throw error;\n }\n return { session: winner, created: false };\n }\n }\n}\n"],"mappings":";AAIA,SAAS,YAAY;AACrB,SAAS,qBAAqB;AAO9B,SAAS,sCAAsC;AAUxC,IAAM,WAAN,MAGL;AAAA,EACiB;AAAA,EAEjB,YAAY,MAAoE;AAC9E,SAAK,QAAQ,KAAK;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,OAAiG;AAC5G,UAAM,KAAK,MAAM,cAAc;AAAA,MAC7B,GAAG;AAAA,MACH,QAAQ,MAAM,UAAU;AAAA,MACxB,UAAU,MAAM,YAAY,CAAC;AAAA,IAC/B,CAAC;AACD,UAAM,SAAS,MAAM,KAAK,MAAM,WAAW;AAAA,MACzC,WAAW,MAAM;AAAA,MACjB,YAAY,MAAM;AAAA,IACpB,CAAC;AACD,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,+DAA+D,MAAM,UAAU,EAAE;AAAA,IACnG;AACA,WAAO,IAAI,cAAc;AAAA,MACvB,OAAO,KAAK;AAAA,MACZ,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,IAAI,OAAyF;AACjG,UAAM,SAAS,MAAM,KAAK,MAAM,WAAW,KAAK;AAChD,QAAI,CAAC,QAAQ;AACX,aAAO;AAAA,IACT;AACA,WAAO,IAAI,cAAc;AAAA,MACvB,OAAO,KAAK;AAAA,MACZ,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,gBACJ,OACiE;AACjE,UAAM,SAAS,MAAM,KAAK,MAAM,uBAAuB,KAAK;AAC5D,QAAI,CAAC,QAAQ;AACX,aAAO;AAAA,IACT;AACA,WAAO,IAAI,cAAc;AAAA,MACvB,OAAO,KAAK;AAAA,MACZ,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,wBACJ,OACoF;AACpF,UAAM,EAAE,WAAW,YAAY,IAAI;AAEnC,UAAM,WAAW,MAAM,KAAK,gBAAgB,EAAE,WAAW,YAAY,CAAC;AACtE,QAAI,aAAa,QAAW;AAC1B,aAAO,EAAE,SAAS,UAAU,SAAS,MAAM;AAAA,IAC7C;AAEA,QAAI;AACF,YAAM,UAAU,MAAM,KAAK,OAAO;AAAA,QAChC,GAAG;AAAA,QACH,YAAY,KAAK,EAAE,YAAY;AAAA,QAC/B;AAAA,MACF,CAAC;AACD,aAAO,EAAE,SAAS,SAAS,KAAK;AAAA,IAClC,SAAS,OAAO;AACd,UAAI,EAAE,iBAAiB,iCAAiC;AACtD,cAAM;AAAA,MACR;AACA,YAAM,SAAS,MAAM,KAAK,gBAAgB,EAAE,WAAW,YAAY,CAAC;AACpE,UAAI,WAAW,QAAW;AACxB,cAAM;AAAA,MACR;AACA,aAAO,EAAE,SAAS,QAAQ,SAAS,MAAM;AAAA,IAC3C;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/agent-session/Sessions.ts"],"sourcesContent":["/**\n * Storage-only session collection: create / get. Behavior arrives per run via\n * the resolver on {@link SessionHandle.createTurn}.\n */\nimport { ulid } from 'ulid';\nimport { SessionHandle } from './SessionHandle';\nimport type {\n CreateSessionInput,\n GetSessionByExternalIdInput,\n GetSessionInput,\n ISessionStore,\n} from './store/ISessionStore';\nimport { SessionExternalIdConflictError } from './store/SessionStoreErrors';\n\n/**\n * Domain create input: same as {@link CreateSessionInput}, but `custom`,\n * `metadata`, and `source` are optional — {@link Sessions.create} defaults them\n * (`null` / `{}` / `null`). The store contract requires those fields explicitly.\n */\nexport type SessionsCreateInput<TSessionCustom extends object> = Omit<\n CreateSessionInput<TSessionCustom>,\n 'custom' | 'metadata' | 'source'\n> & {\n [K in 'custom' | 'metadata' | 'source']?: CreateSessionInput<TSessionCustom>[K] | undefined;\n};\n\nexport class Sessions<\n TSessionCustom extends object = Record<string, never>,\n TTurnCustom extends object = Record<string, never>,\n> {\n private readonly store: ISessionStore<TSessionCustom, TTurnCustom>;\n\n constructor(deps: { sessionStore: ISessionStore<TSessionCustom, TTurnCustom> }) {\n this.store = deps.sessionStore;\n }\n\n /**\n * Creates and persists a new session with a reference or inline agent binding.\n */\n async create(input: SessionsCreateInput<TSessionCustom>): Promise<SessionHandle<TSessionCustom, TTurnCustom>> {\n await this.store.createSession({\n ...input,\n custom: input.custom ?? null,\n metadata: input.metadata ?? {},\n source: input.source ?? null,\n });\n const record = await this.store.getSession({\n tenant_id: input.tenant_id,\n session_id: input.session_id,\n });\n if (!record) {\n throw new Error(`Session create succeeded but getSession returned undefined: ${input.session_id}`);\n }\n return new SessionHandle({\n store: this.store,\n session: record,\n });\n }\n\n /**\n * Returns the session as stored (ref agents are not hydrated to a value), or\n * undefined if not found. Read-only: does not bump last_activity_timestamp_ms.\n */\n async get(input: GetSessionInput): Promise<SessionHandle<TSessionCustom, TTurnCustom> | undefined> {\n const record = await this.store.getSession(input);\n if (!record) {\n return undefined;\n }\n return new SessionHandle({\n store: this.store,\n session: record,\n });\n }\n\n /**\n * Returns the session bound to this tenant-scoped external id, or undefined.\n * Read-only: does not bump last_activity_timestamp_ms.\n */\n async getByExternalId(\n input: GetSessionByExternalIdInput,\n ): Promise<SessionHandle<TSessionCustom, TTurnCustom> | undefined> {\n const record = await this.store.getSessionByExternalId(input);\n if (!record) {\n return undefined;\n }\n return new SessionHandle({\n store: this.store,\n session: record,\n });\n }\n\n /**\n * Get-or-create the session bound to a tenant-scoped `external_id`.\n */\n async getOrCreateByExternalId(\n input: Omit<SessionsCreateInput<TSessionCustom>, 'session_id' | 'external_id'> & { external_id: string },\n ): Promise<{ session: SessionHandle<TSessionCustom, TTurnCustom>; created: boolean }> {\n const { tenant_id, external_id } = input;\n\n const existing = await this.getByExternalId({ tenant_id, external_id });\n if (existing !== undefined) {\n return { session: existing, created: false };\n }\n\n try {\n const session = await this.create({\n ...input,\n session_id: ulid().toLowerCase(),\n external_id,\n });\n return { session, created: true };\n } catch (error) {\n if (!(error instanceof SessionExternalIdConflictError)) {\n throw error;\n }\n const winner = await this.getByExternalId({ tenant_id, external_id });\n if (winner === undefined) {\n throw error;\n }\n return { session: winner, created: false };\n }\n }\n}\n"],"mappings":";AAIA,SAAS,YAAY;AACrB,SAAS,qBAAqB;AAO9B,SAAS,sCAAsC;AAcxC,IAAM,WAAN,MAGL;AAAA,EACiB;AAAA,EAEjB,YAAY,MAAoE;AAC9E,SAAK,QAAQ,KAAK;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,OAAiG;AAC5G,UAAM,KAAK,MAAM,cAAc;AAAA,MAC7B,GAAG;AAAA,MACH,QAAQ,MAAM,UAAU;AAAA,MACxB,UAAU,MAAM,YAAY,CAAC;AAAA,MAC7B,QAAQ,MAAM,UAAU;AAAA,IAC1B,CAAC;AACD,UAAM,SAAS,MAAM,KAAK,MAAM,WAAW;AAAA,MACzC,WAAW,MAAM;AAAA,MACjB,YAAY,MAAM;AAAA,IACpB,CAAC;AACD,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,+DAA+D,MAAM,UAAU,EAAE;AAAA,IACnG;AACA,WAAO,IAAI,cAAc;AAAA,MACvB,OAAO,KAAK;AAAA,MACZ,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,IAAI,OAAyF;AACjG,UAAM,SAAS,MAAM,KAAK,MAAM,WAAW,KAAK;AAChD,QAAI,CAAC,QAAQ;AACX,aAAO;AAAA,IACT;AACA,WAAO,IAAI,cAAc;AAAA,MACvB,OAAO,KAAK;AAAA,MACZ,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,gBACJ,OACiE;AACjE,UAAM,SAAS,MAAM,KAAK,MAAM,uBAAuB,KAAK;AAC5D,QAAI,CAAC,QAAQ;AACX,aAAO;AAAA,IACT;AACA,WAAO,IAAI,cAAc;AAAA,MACvB,OAAO,KAAK;AAAA,MACZ,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,wBACJ,OACoF;AACpF,UAAM,EAAE,WAAW,YAAY,IAAI;AAEnC,UAAM,WAAW,MAAM,KAAK,gBAAgB,EAAE,WAAW,YAAY,CAAC;AACtE,QAAI,aAAa,QAAW;AAC1B,aAAO,EAAE,SAAS,UAAU,SAAS,MAAM;AAAA,IAC7C;AAEA,QAAI;AACF,YAAM,UAAU,MAAM,KAAK,OAAO;AAAA,QAChC,GAAG;AAAA,QACH,YAAY,KAAK,EAAE,YAAY;AAAA,QAC/B;AAAA,MACF,CAAC;AACD,aAAO,EAAE,SAAS,SAAS,KAAK;AAAA,IAClC,SAAS,OAAO;AACd,UAAI,EAAE,iBAAiB,iCAAiC;AACtD,cAAM;AAAA,MACR;AACA,YAAM,SAAS,MAAM,KAAK,gBAAgB,EAAE,WAAW,YAAY,CAAC;AACpE,UAAI,WAAW,QAAW;AACxB,cAAM;AAAA,MACR;AACA,aAAO,EAAE,SAAS,QAAQ,SAAS,MAAM;AAAA,IAC3C;AAAA,EACF;AACF;","names":[]}
@@ -6,8 +6,8 @@ export { AgentSpecSchema, DEFAULT_AGENT_CONFIG_ITERATION_LIMIT, RuntimeConfigSch
6
6
  export type { AgentSpec, Skill } from './schemas/agentSpec';
7
7
  export { CancellationReason, CreateTurnRequestSchema, TurnInputItemSchema, TurnMetricsSchema, TurnSchema, TurnStateCancelledReasonSchema, TurnStateCancelledSchema, TurnStateDoneSchema, TurnStateErrorSchema, TurnStateRunningSchema, TurnStateSchema, } from './schemas/turn';
8
8
  export type { TerminalTurnState, Turn, TurnInputItem, TurnMetrics, TurnState } from './schemas/turn';
9
- export { SessionMetadataSchema, SessionMetricsSchema, SessionSchema } from './schemas/session';
10
- export type { Session, SessionAgent, SessionMetadata, SessionMetrics } from './schemas/session';
9
+ export { SessionMetadataSchema, SessionMetricsSchema, SessionSchema, SessionSourceScheduleSchema, SessionSourceSchema, SessionSourceTypeSchema, } from './schemas/session';
10
+ export type { Session, SessionAgent, SessionMetadata, SessionMetrics, SessionSource, SessionSourceType, } from './schemas/session';
11
11
  export { CreatedBySubjectSchema } from './schemas/subject';
12
12
  export type { CreatedBySubject } from './schemas/subject';
13
13
  export { EventType, SessionEventItemSchema, SessionEventSchema, TurnCreatedEventSchema, TurnDoneEventSchema, } from './schemas/events';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent-session/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,oCAAoC,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACjH,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,EACV,8BAA8B,EAC9B,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,iBAAiB,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAErG,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC/F,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEhG,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,EACL,SAAS,EACT,sBAAsB,EACtB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,GACd,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,0BAA0B,EAC1B,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,2BAA2B,EAC3B,eAAe,EACf,YAAY,EACZ,aAAa,EACb,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,2BAA2B,EAC3B,oBAAoB,EACpB,qBAAqB,EACrB,+BAA+B,EAC/B,kBAAkB,EAClB,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,yBAAyB,EACzB,8BAA8B,EAC9B,oBAAoB,EACpB,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EACzB,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AAEpC,YAAY,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent-session/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,oCAAoC,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACjH,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,EACV,8BAA8B,EAC9B,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,iBAAiB,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAErG,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACb,2BAA2B,EAC3B,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,OAAO,EACP,YAAY,EACZ,eAAe,EACf,cAAc,EACd,aAAa,EACb,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,EACL,SAAS,EACT,sBAAsB,EACtB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,GACd,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,0BAA0B,EAC1B,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,2BAA2B,EAC3B,eAAe,EACf,YAAY,EACZ,aAAa,EACb,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,2BAA2B,EAC3B,oBAAoB,EACpB,qBAAqB,EACrB,+BAA+B,EAC/B,kBAAkB,EAClB,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,yBAAyB,EACzB,8BAA8B,EAC9B,oBAAoB,EACpB,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EACzB,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AAEpC,YAAY,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
@@ -40,6 +40,9 @@ __export(agent_session_exports, {
40
40
  SessionMetricsSchema: () => import_session.SessionMetricsSchema,
41
41
  SessionNotFoundError: () => import_SessionStoreErrors.SessionNotFoundError,
42
42
  SessionSchema: () => import_session.SessionSchema,
43
+ SessionSourceScheduleSchema: () => import_session.SessionSourceScheduleSchema,
44
+ SessionSourceSchema: () => import_session.SessionSourceSchema,
45
+ SessionSourceTypeSchema: () => import_session.SessionSourceTypeSchema,
43
46
  SessionStoreConflictError: () => import_SessionStoreErrors.SessionStoreConflictError,
44
47
  SessionStoreInvariantError: () => import_SessionStoreErrors.SessionStoreInvariantError,
45
48
  SessionStoreNotFoundError: () => import_SessionStoreErrors.SessionStoreNotFoundError,
@@ -100,6 +103,9 @@ var import_TurnHandle = require("./TurnHandle.js");
100
103
  SessionMetricsSchema,
101
104
  SessionNotFoundError,
102
105
  SessionSchema,
106
+ SessionSourceScheduleSchema,
107
+ SessionSourceSchema,
108
+ SessionSourceTypeSchema,
103
109
  SessionStoreConflictError,
104
110
  SessionStoreInvariantError,
105
111
  SessionStoreNotFoundError,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/agent-session/index.ts"],"sourcesContent":["/**\n * Public agent session middle library.\n * Zod product contracts and session/turn runtime.\n */\n\nexport { AgentSpecSchema, DEFAULT_AGENT_CONFIG_ITERATION_LIMIT, RuntimeConfigSchema } from './schemas/agentSpec';\nexport type { AgentSpec, Skill } from './schemas/agentSpec';\n\nexport {\n CancellationReason,\n CreateTurnRequestSchema,\n TurnInputItemSchema,\n TurnMetricsSchema,\n TurnSchema,\n TurnStateCancelledReasonSchema,\n TurnStateCancelledSchema,\n TurnStateDoneSchema,\n TurnStateErrorSchema,\n TurnStateRunningSchema,\n TurnStateSchema,\n} from './schemas/turn';\nexport type { TerminalTurnState, Turn, TurnInputItem, TurnMetrics, TurnState } from './schemas/turn';\n\nexport { SessionMetadataSchema, SessionMetricsSchema, SessionSchema } from './schemas/session';\nexport type { Session, SessionAgent, SessionMetadata, SessionMetrics } from './schemas/session';\n\nexport { CreatedBySubjectSchema } from './schemas/subject';\nexport type { CreatedBySubject } from './schemas/subject';\n\nexport {\n EventType,\n SessionEventItemSchema,\n SessionEventSchema,\n TurnCreatedEventSchema,\n TurnDoneEventSchema,\n} from './schemas/events';\nexport type {\n PersistedTurnEvent,\n SessionEvent,\n SessionEventItem,\n TurnCreatedEvent,\n TurnDoneEvent,\n} from './schemas/events';\n\nexport { TokenPaginationSchema } from './schemas/pagination';\nexport type { TokenPagination } from './schemas/pagination';\n\nexport type { SessionRecord } from './models/SessionRecord';\nexport { MAIN_THREAD_ID } from './models/TurnRecord';\nexport type { TurnRecord, TurnSnapshot } from './models/TurnRecord';\n\nexport { assertCreateTurnThreadDelta } from './store/assertCreateTurnThreadDelta';\nexport { InMemorySessionStore } from './store/InMemorySessionStore';\nexport type {\n AddThreadsInput,\n AppendToEventsInput,\n AppendToThreadContextInput,\n CreateSessionInput,\n CreateTurnInput,\n DeleteSessionInput,\n FreezeAndGetTurnInput,\n GetSessionByExternalIdInput,\n GetSessionInput,\n GetTurnInput,\n ISessionStore,\n ListSessionEventsInput,\n ListSessionsInput,\n ListTurnEventsInput,\n ListTurnsInput,\n NewThreadInit,\n OverwriteThreadContextInput,\n PatchMCPServersInput,\n PatchSandboxInfoInput,\n PatchThreadCapabilityStateInput,\n RemoveThreadsInput,\n TurnContextAppend,\n TurnRecordWithoutSnapshot,\n UpdateSessionInput,\n UpdateTurnStateInput,\n} from './store/ISessionStore';\nexport {\n InvalidPageTokenError,\n PreviousTurnRunningError,\n SessionAlreadyExistsError,\n SessionExternalIdConflictError,\n SessionNotFoundError,\n SessionStoreConflictError,\n SessionStoreInvariantError,\n SessionStoreNotFoundError,\n TurnAlreadyExistsError,\n TurnNotFoundError,\n TurnNotRunningError,\n} from './store/SessionStoreErrors';\n\nexport type { ITurnResourceResolver } from './ITurnResourceResolver';\nexport { TurnResourceResolver } from './TurnResourceResolver';\nexport type { TurnSandboxFactory } from './TurnResourceResolver';\n\nexport { SessionHandle } from './SessionHandle';\nexport { Sessions } from './Sessions';\nexport { TurnHandle } from './TurnHandle';\nexport type { TurnStreamingEvent } from './TurnHandle';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,uBAA2F;AAG3F,kBAYO;AAGP,qBAA2E;AAG3E,qBAAuC;AAGvC,oBAMO;AASP,wBAAsC;AAItC,wBAA+B;AAG/B,yCAA4C;AAC5C,kCAAqC;AA4BrC,gCAYO;AAGP,kCAAqC;AAGrC,2BAA8B;AAC9B,sBAAyB;AACzB,wBAA2B;","names":[]}
1
+ {"version":3,"sources":["../../src/agent-session/index.ts"],"sourcesContent":["/**\n * Public agent session middle library.\n * Zod product contracts and session/turn runtime.\n */\n\nexport { AgentSpecSchema, DEFAULT_AGENT_CONFIG_ITERATION_LIMIT, RuntimeConfigSchema } from './schemas/agentSpec';\nexport type { AgentSpec, Skill } from './schemas/agentSpec';\n\nexport {\n CancellationReason,\n CreateTurnRequestSchema,\n TurnInputItemSchema,\n TurnMetricsSchema,\n TurnSchema,\n TurnStateCancelledReasonSchema,\n TurnStateCancelledSchema,\n TurnStateDoneSchema,\n TurnStateErrorSchema,\n TurnStateRunningSchema,\n TurnStateSchema,\n} from './schemas/turn';\nexport type { TerminalTurnState, Turn, TurnInputItem, TurnMetrics, TurnState } from './schemas/turn';\n\nexport {\n SessionMetadataSchema,\n SessionMetricsSchema,\n SessionSchema,\n SessionSourceScheduleSchema,\n SessionSourceSchema,\n SessionSourceTypeSchema,\n} from './schemas/session';\nexport type {\n Session,\n SessionAgent,\n SessionMetadata,\n SessionMetrics,\n SessionSource,\n SessionSourceType,\n} from './schemas/session';\n\nexport { CreatedBySubjectSchema } from './schemas/subject';\nexport type { CreatedBySubject } from './schemas/subject';\n\nexport {\n EventType,\n SessionEventItemSchema,\n SessionEventSchema,\n TurnCreatedEventSchema,\n TurnDoneEventSchema,\n} from './schemas/events';\nexport type {\n PersistedTurnEvent,\n SessionEvent,\n SessionEventItem,\n TurnCreatedEvent,\n TurnDoneEvent,\n} from './schemas/events';\n\nexport { TokenPaginationSchema } from './schemas/pagination';\nexport type { TokenPagination } from './schemas/pagination';\n\nexport type { SessionRecord } from './models/SessionRecord';\nexport { MAIN_THREAD_ID } from './models/TurnRecord';\nexport type { TurnRecord, TurnSnapshot } from './models/TurnRecord';\n\nexport { assertCreateTurnThreadDelta } from './store/assertCreateTurnThreadDelta';\nexport { InMemorySessionStore } from './store/InMemorySessionStore';\nexport type {\n AddThreadsInput,\n AppendToEventsInput,\n AppendToThreadContextInput,\n CreateSessionInput,\n CreateTurnInput,\n DeleteSessionInput,\n FreezeAndGetTurnInput,\n GetSessionByExternalIdInput,\n GetSessionInput,\n GetTurnInput,\n ISessionStore,\n ListSessionEventsInput,\n ListSessionsInput,\n ListTurnEventsInput,\n ListTurnsInput,\n NewThreadInit,\n OverwriteThreadContextInput,\n PatchMCPServersInput,\n PatchSandboxInfoInput,\n PatchThreadCapabilityStateInput,\n RemoveThreadsInput,\n TurnContextAppend,\n TurnRecordWithoutSnapshot,\n UpdateSessionInput,\n UpdateTurnStateInput,\n} from './store/ISessionStore';\nexport {\n InvalidPageTokenError,\n PreviousTurnRunningError,\n SessionAlreadyExistsError,\n SessionExternalIdConflictError,\n SessionNotFoundError,\n SessionStoreConflictError,\n SessionStoreInvariantError,\n SessionStoreNotFoundError,\n TurnAlreadyExistsError,\n TurnNotFoundError,\n TurnNotRunningError,\n} from './store/SessionStoreErrors';\n\nexport type { ITurnResourceResolver } from './ITurnResourceResolver';\nexport { TurnResourceResolver } from './TurnResourceResolver';\nexport type { TurnSandboxFactory } from './TurnResourceResolver';\n\nexport { SessionHandle } from './SessionHandle';\nexport { Sessions } from './Sessions';\nexport { TurnHandle } from './TurnHandle';\nexport type { TurnStreamingEvent } from './TurnHandle';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,uBAA2F;AAG3F,kBAYO;AAGP,qBAOO;AAUP,qBAAuC;AAGvC,oBAMO;AASP,wBAAsC;AAItC,wBAA+B;AAG/B,yCAA4C;AAC5C,kCAAqC;AA4BrC,gCAYO;AAGP,kCAAqC;AAGrC,2BAA8B;AAC9B,sBAAyB;AACzB,wBAA2B;","names":[]}
@@ -13,7 +13,14 @@ import {
13
13
  TurnStateRunningSchema,
14
14
  TurnStateSchema
15
15
  } from "./schemas/turn.mjs";
16
- import { SessionMetadataSchema, SessionMetricsSchema, SessionSchema } from "./schemas/session.mjs";
16
+ import {
17
+ SessionMetadataSchema,
18
+ SessionMetricsSchema,
19
+ SessionSchema,
20
+ SessionSourceScheduleSchema,
21
+ SessionSourceSchema,
22
+ SessionSourceTypeSchema
23
+ } from "./schemas/session.mjs";
17
24
  import { CreatedBySubjectSchema } from "./schemas/subject.mjs";
18
25
  import {
19
26
  EventType,
@@ -64,6 +71,9 @@ export {
64
71
  SessionMetricsSchema,
65
72
  SessionNotFoundError,
66
73
  SessionSchema,
74
+ SessionSourceScheduleSchema,
75
+ SessionSourceSchema,
76
+ SessionSourceTypeSchema,
67
77
  SessionStoreConflictError,
68
78
  SessionStoreInvariantError,
69
79
  SessionStoreNotFoundError,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/agent-session/index.ts"],"sourcesContent":["/**\n * Public agent session middle library.\n * Zod product contracts and session/turn runtime.\n */\n\nexport { AgentSpecSchema, DEFAULT_AGENT_CONFIG_ITERATION_LIMIT, RuntimeConfigSchema } from './schemas/agentSpec';\nexport type { AgentSpec, Skill } from './schemas/agentSpec';\n\nexport {\n CancellationReason,\n CreateTurnRequestSchema,\n TurnInputItemSchema,\n TurnMetricsSchema,\n TurnSchema,\n TurnStateCancelledReasonSchema,\n TurnStateCancelledSchema,\n TurnStateDoneSchema,\n TurnStateErrorSchema,\n TurnStateRunningSchema,\n TurnStateSchema,\n} from './schemas/turn';\nexport type { TerminalTurnState, Turn, TurnInputItem, TurnMetrics, TurnState } from './schemas/turn';\n\nexport { SessionMetadataSchema, SessionMetricsSchema, SessionSchema } from './schemas/session';\nexport type { Session, SessionAgent, SessionMetadata, SessionMetrics } from './schemas/session';\n\nexport { CreatedBySubjectSchema } from './schemas/subject';\nexport type { CreatedBySubject } from './schemas/subject';\n\nexport {\n EventType,\n SessionEventItemSchema,\n SessionEventSchema,\n TurnCreatedEventSchema,\n TurnDoneEventSchema,\n} from './schemas/events';\nexport type {\n PersistedTurnEvent,\n SessionEvent,\n SessionEventItem,\n TurnCreatedEvent,\n TurnDoneEvent,\n} from './schemas/events';\n\nexport { TokenPaginationSchema } from './schemas/pagination';\nexport type { TokenPagination } from './schemas/pagination';\n\nexport type { SessionRecord } from './models/SessionRecord';\nexport { MAIN_THREAD_ID } from './models/TurnRecord';\nexport type { TurnRecord, TurnSnapshot } from './models/TurnRecord';\n\nexport { assertCreateTurnThreadDelta } from './store/assertCreateTurnThreadDelta';\nexport { InMemorySessionStore } from './store/InMemorySessionStore';\nexport type {\n AddThreadsInput,\n AppendToEventsInput,\n AppendToThreadContextInput,\n CreateSessionInput,\n CreateTurnInput,\n DeleteSessionInput,\n FreezeAndGetTurnInput,\n GetSessionByExternalIdInput,\n GetSessionInput,\n GetTurnInput,\n ISessionStore,\n ListSessionEventsInput,\n ListSessionsInput,\n ListTurnEventsInput,\n ListTurnsInput,\n NewThreadInit,\n OverwriteThreadContextInput,\n PatchMCPServersInput,\n PatchSandboxInfoInput,\n PatchThreadCapabilityStateInput,\n RemoveThreadsInput,\n TurnContextAppend,\n TurnRecordWithoutSnapshot,\n UpdateSessionInput,\n UpdateTurnStateInput,\n} from './store/ISessionStore';\nexport {\n InvalidPageTokenError,\n PreviousTurnRunningError,\n SessionAlreadyExistsError,\n SessionExternalIdConflictError,\n SessionNotFoundError,\n SessionStoreConflictError,\n SessionStoreInvariantError,\n SessionStoreNotFoundError,\n TurnAlreadyExistsError,\n TurnNotFoundError,\n TurnNotRunningError,\n} from './store/SessionStoreErrors';\n\nexport type { ITurnResourceResolver } from './ITurnResourceResolver';\nexport { TurnResourceResolver } from './TurnResourceResolver';\nexport type { TurnSandboxFactory } from './TurnResourceResolver';\n\nexport { SessionHandle } from './SessionHandle';\nexport { Sessions } from './Sessions';\nexport { TurnHandle } from './TurnHandle';\nexport type { TurnStreamingEvent } from './TurnHandle';\n"],"mappings":";AAKA,SAAS,iBAAiB,sCAAsC,2BAA2B;AAG3F;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP,SAAS,uBAAuB,sBAAsB,qBAAqB;AAG3E,SAAS,8BAA8B;AAGvC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AASP,SAAS,6BAA6B;AAItC,SAAS,sBAAsB;AAG/B,SAAS,mCAAmC;AAC5C,SAAS,4BAA4B;AA4BrC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP,SAAS,4BAA4B;AAGrC,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB;AACzB,SAAS,kBAAkB;","names":[]}
1
+ {"version":3,"sources":["../../src/agent-session/index.ts"],"sourcesContent":["/**\n * Public agent session middle library.\n * Zod product contracts and session/turn runtime.\n */\n\nexport { AgentSpecSchema, DEFAULT_AGENT_CONFIG_ITERATION_LIMIT, RuntimeConfigSchema } from './schemas/agentSpec';\nexport type { AgentSpec, Skill } from './schemas/agentSpec';\n\nexport {\n CancellationReason,\n CreateTurnRequestSchema,\n TurnInputItemSchema,\n TurnMetricsSchema,\n TurnSchema,\n TurnStateCancelledReasonSchema,\n TurnStateCancelledSchema,\n TurnStateDoneSchema,\n TurnStateErrorSchema,\n TurnStateRunningSchema,\n TurnStateSchema,\n} from './schemas/turn';\nexport type { TerminalTurnState, Turn, TurnInputItem, TurnMetrics, TurnState } from './schemas/turn';\n\nexport {\n SessionMetadataSchema,\n SessionMetricsSchema,\n SessionSchema,\n SessionSourceScheduleSchema,\n SessionSourceSchema,\n SessionSourceTypeSchema,\n} from './schemas/session';\nexport type {\n Session,\n SessionAgent,\n SessionMetadata,\n SessionMetrics,\n SessionSource,\n SessionSourceType,\n} from './schemas/session';\n\nexport { CreatedBySubjectSchema } from './schemas/subject';\nexport type { CreatedBySubject } from './schemas/subject';\n\nexport {\n EventType,\n SessionEventItemSchema,\n SessionEventSchema,\n TurnCreatedEventSchema,\n TurnDoneEventSchema,\n} from './schemas/events';\nexport type {\n PersistedTurnEvent,\n SessionEvent,\n SessionEventItem,\n TurnCreatedEvent,\n TurnDoneEvent,\n} from './schemas/events';\n\nexport { TokenPaginationSchema } from './schemas/pagination';\nexport type { TokenPagination } from './schemas/pagination';\n\nexport type { SessionRecord } from './models/SessionRecord';\nexport { MAIN_THREAD_ID } from './models/TurnRecord';\nexport type { TurnRecord, TurnSnapshot } from './models/TurnRecord';\n\nexport { assertCreateTurnThreadDelta } from './store/assertCreateTurnThreadDelta';\nexport { InMemorySessionStore } from './store/InMemorySessionStore';\nexport type {\n AddThreadsInput,\n AppendToEventsInput,\n AppendToThreadContextInput,\n CreateSessionInput,\n CreateTurnInput,\n DeleteSessionInput,\n FreezeAndGetTurnInput,\n GetSessionByExternalIdInput,\n GetSessionInput,\n GetTurnInput,\n ISessionStore,\n ListSessionEventsInput,\n ListSessionsInput,\n ListTurnEventsInput,\n ListTurnsInput,\n NewThreadInit,\n OverwriteThreadContextInput,\n PatchMCPServersInput,\n PatchSandboxInfoInput,\n PatchThreadCapabilityStateInput,\n RemoveThreadsInput,\n TurnContextAppend,\n TurnRecordWithoutSnapshot,\n UpdateSessionInput,\n UpdateTurnStateInput,\n} from './store/ISessionStore';\nexport {\n InvalidPageTokenError,\n PreviousTurnRunningError,\n SessionAlreadyExistsError,\n SessionExternalIdConflictError,\n SessionNotFoundError,\n SessionStoreConflictError,\n SessionStoreInvariantError,\n SessionStoreNotFoundError,\n TurnAlreadyExistsError,\n TurnNotFoundError,\n TurnNotRunningError,\n} from './store/SessionStoreErrors';\n\nexport type { ITurnResourceResolver } from './ITurnResourceResolver';\nexport { TurnResourceResolver } from './TurnResourceResolver';\nexport type { TurnSandboxFactory } from './TurnResourceResolver';\n\nexport { SessionHandle } from './SessionHandle';\nexport { Sessions } from './Sessions';\nexport { TurnHandle } from './TurnHandle';\nexport type { TurnStreamingEvent } from './TurnHandle';\n"],"mappings":";AAKA,SAAS,iBAAiB,sCAAsC,2BAA2B;AAG3F;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAUP,SAAS,8BAA8B;AAGvC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AASP,SAAS,6BAA6B;AAItC,SAAS,sBAAsB;AAG/B,SAAS,mCAAmC;AAC5C,SAAS,4BAA4B;AA4BrC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP,SAAS,4BAA4B;AAGrC,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB;AACzB,SAAS,kBAAkB;","names":[]}
@@ -1,4 +1,4 @@
1
- import type { SessionAgent, SessionMetadata, SessionMetrics } from '../schemas/session';
1
+ import type { SessionAgent, SessionMetadata, SessionMetrics, SessionSource } from '../schemas/session';
2
2
  import type { CreatedBySubject } from '../schemas/subject';
3
3
  /**
4
4
  * Session persistence record. Agent binding is a single discriminated `agent`
@@ -21,6 +21,10 @@ export interface SessionRecord<TCustom extends object = Record<string, never>> {
21
21
  * Null means the session has no external id.
22
22
  */
23
23
  external_id: string | null;
24
+ /**
25
+ * How the session was created. Null for interactive sessions.
26
+ */
27
+ source: SessionSource | null;
24
28
  /**
25
29
  * Session tip — used for `previous_turn_id: 'auto'` resolution and turn
26
30
  * listing anchors. Advanced only by `createTurn` (atomic link).
@@ -1 +1 @@
1
- {"version":3,"file":"SessionRecord.d.ts","sourceRoot":"","sources":["../../../src/agent-session/models/SessionRecord.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACxF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D;;;;GAIG;AACH,MAAM,WAAW,aAAa,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IAC3E,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,kBAAkB,EAAE,gBAAgB,CAAC;IACrC,KAAK,EAAE,YAAY,CAAC;IACpB;;;OAGG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB;;;OAGG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;OAGG;IACH,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,sFAAsF;IACtF,UAAU,EAAE,IAAI,CAAC;IACjB,2FAA2F;IAC3F,UAAU,EAAE,IAAI,CAAC;IACjB;;;OAGG;IACH,0BAA0B,EAAE,MAAM,CAAC;IACnC,OAAO,EAAE,cAAc,CAAC;IACxB,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;CACxB"}
1
+ {"version":3,"file":"SessionRecord.d.ts","sourceRoot":"","sources":["../../../src/agent-session/models/SessionRecord.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACvG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D;;;;GAIG;AACH,MAAM,WAAW,aAAa,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IAC3E,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,kBAAkB,EAAE,gBAAgB,CAAC;IACrC,KAAK,EAAE,YAAY,CAAC;IACpB;;;OAGG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB;;;OAGG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;OAEG;IACH,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B;;;OAGG;IACH,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,sFAAsF;IACtF,UAAU,EAAE,IAAI,CAAC;IACjB,2FAA2F;IAC3F,UAAU,EAAE,IAAI,CAAC;IACjB;;;OAGG;IACH,0BAA0B,EAAE,MAAM,CAAC;IACnC,OAAO,EAAE,cAAc,CAAC;IACxB,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;CACxB"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/agent-session/models/SessionRecord.ts"],"sourcesContent":["import type { SessionAgent, SessionMetadata, SessionMetrics } from '../schemas/session';\nimport type { CreatedBySubject } from '../schemas/subject';\n\n/**\n * Session persistence record. Agent binding is a single discriminated `agent`\n * (`reference` | `inline`). Reference rows carry create-time `name` snapshot\n * (nullable for legacy/orphan). Named agents are not hydrated to inline on read.\n */\nexport interface SessionRecord<TCustom extends object = Record<string, never>> {\n tenant_id: string;\n session_id: string;\n /** Caller identity that created the session (immutable after create). */\n created_by_subject: CreatedBySubject;\n agent: SessionAgent;\n /**\n * Public session title (nullable). Written via updateSession patch or createTurn's\n * update_session_title_if_not_exist (first write wins; caller derives).\n */\n title: string | null;\n /**\n * Optional caller-supplied key, unique within a tenant when set.\n * Null means the session has no external id.\n */\n external_id: string | null;\n /**\n * Session tip — used for `previous_turn_id: 'auto'` resolution and turn\n * listing anchors. Advanced only by `createTurn` (atomic link).\n */\n last_turn_id: string | null;\n /** Instant the session was created (store domain). Wire/API serialize as ISO-8601. */\n created_at: Date;\n /** Instant the session was last updated (store domain). Wire/API serialize as ISO-8601. */\n updated_at: Date;\n /**\n * Liveness clock (ms since epoch). The store bumps it on createSession,\n * updateSession, and createTurn — never on reads.\n */\n last_activity_timestamp_ms: number;\n metrics: SessionMetrics;\n metadata: SessionMetadata;\n custom: TCustom | null;\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
1
+ {"version":3,"sources":["../../../src/agent-session/models/SessionRecord.ts"],"sourcesContent":["import type { SessionAgent, SessionMetadata, SessionMetrics, SessionSource } from '../schemas/session';\nimport type { CreatedBySubject } from '../schemas/subject';\n\n/**\n * Session persistence record. Agent binding is a single discriminated `agent`\n * (`reference` | `inline`). Reference rows carry create-time `name` snapshot\n * (nullable for legacy/orphan). Named agents are not hydrated to inline on read.\n */\nexport interface SessionRecord<TCustom extends object = Record<string, never>> {\n tenant_id: string;\n session_id: string;\n /** Caller identity that created the session (immutable after create). */\n created_by_subject: CreatedBySubject;\n agent: SessionAgent;\n /**\n * Public session title (nullable). Written via updateSession patch or createTurn's\n * update_session_title_if_not_exist (first write wins; caller derives).\n */\n title: string | null;\n /**\n * Optional caller-supplied key, unique within a tenant when set.\n * Null means the session has no external id.\n */\n external_id: string | null;\n /**\n * How the session was created. Null for interactive sessions.\n */\n source: SessionSource | null;\n /**\n * Session tip — used for `previous_turn_id: 'auto'` resolution and turn\n * listing anchors. Advanced only by `createTurn` (atomic link).\n */\n last_turn_id: string | null;\n /** Instant the session was created (store domain). Wire/API serialize as ISO-8601. */\n created_at: Date;\n /** Instant the session was last updated (store domain). Wire/API serialize as ISO-8601. */\n updated_at: Date;\n /**\n * Liveness clock (ms since epoch). The store bumps it on createSession,\n * updateSession, and createTurn — never on reads.\n */\n last_activity_timestamp_ms: number;\n metrics: SessionMetrics;\n metadata: SessionMetadata;\n custom: TCustom | null;\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -6,7 +6,7 @@ import { z } from '@hono/zod-openapi';
6
6
  export declare const SessionMetadataSchema: z.ZodRecord<z.ZodString, z.ZodString>;
7
7
  export type SessionMetadata = z.infer<typeof SessionMetadataSchema>;
8
8
  export declare const SessionMetricsSchema: z.ZodObject<{
9
- total_cost_in_usd: z.ZodNumber;
9
+ total_cost_in_usd: z.ZodOptional<z.ZodNumber>;
10
10
  total_duration_ms: z.ZodNumber;
11
11
  total_turns: z.ZodNumber;
12
12
  }, z.core.$strict>;
@@ -192,6 +192,25 @@ export declare const SessionAgentSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
192
192
  }, z.core.$strip>>;
193
193
  }, z.core.$strip>;
194
194
  }, z.core.$strict>], "type">;
195
+ export declare const SessionSourceTypeSchema: z.ZodEnum<{
196
+ schedule: "schedule";
197
+ }>;
198
+ export type SessionSourceType = z.infer<typeof SessionSourceTypeSchema>;
199
+ export declare const SessionSourceScheduleSchema: z.ZodObject<{
200
+ type: z.ZodLiteral<"schedule">;
201
+ id: z.ZodString;
202
+ run_id: z.ZodString;
203
+ }, z.core.$strict>;
204
+ /**
205
+ * How a session was created. Same shape as {@link SessionSourceScheduleSchema} today;
206
+ * switch to `discriminatedUnion('type', …)` when a second source arm lands.
207
+ */
208
+ export declare const SessionSourceSchema: z.ZodObject<{
209
+ type: z.ZodLiteral<"schedule">;
210
+ id: z.ZodString;
211
+ run_id: z.ZodString;
212
+ }, z.core.$strict>;
213
+ export type SessionSource = z.infer<typeof SessionSourceSchema>;
195
214
  export declare const SessionSchema: z.ZodObject<{
196
215
  id: z.ZodString;
197
216
  agent: z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -293,11 +312,16 @@ export declare const SessionSchema: z.ZodObject<{
293
312
  created_at: z.ZodString;
294
313
  updated_at: z.ZodString;
295
314
  metrics: z.ZodObject<{
296
- total_cost_in_usd: z.ZodNumber;
315
+ total_cost_in_usd: z.ZodOptional<z.ZodNumber>;
297
316
  total_duration_ms: z.ZodNumber;
298
317
  total_turns: z.ZodNumber;
299
318
  }, z.core.$strict>;
300
319
  metadata: z.ZodRecord<z.ZodString, z.ZodString>;
320
+ source: z.ZodNullable<z.ZodObject<{
321
+ type: z.ZodLiteral<"schedule">;
322
+ id: z.ZodString;
323
+ run_id: z.ZodString;
324
+ }, z.core.$strict>>;
301
325
  }, z.core.$strip>;
302
326
  export type SessionAgentReference = z.infer<typeof SessionAgentReferenceSchema>;
303
327
  export type SessionAgentInline = z.infer<typeof SessionAgentInlineSchema>;
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/agent-session/schemas/session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAWtC,eAAO,MAAM,qBAAqB,uCAgBL,CAAC;AAE9B,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,oBAAoB;;;;kBAQL,CAAC;AAE7B,eAAO,MAAM,2BAA2B;;;;kBAWL,CAAC;AAEpC,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAML,CAAC;AAEjC,oEAAoE;AACpE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAEL,CAAC;AAE3B,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAWL,CAAC;AAEtB,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAChF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC1E,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/agent-session/schemas/session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAetC,eAAO,MAAM,qBAAqB,uCAiBL,CAAC;AAE9B,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,oBAAoB;;;;kBAQL,CAAC;AAE7B,eAAO,MAAM,2BAA2B;;;;kBAWL,CAAC;AAEpC,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAML,CAAC;AAEjC,oEAAoE;AACpE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAEL,CAAC;AAE3B,eAAO,MAAM,uBAAuB;;EAAoD,CAAC;AAEzF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAYxE,eAAO,MAAM,2BAA2B;;;;kBAAiE,CAAC;AAE1G;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;;;kBAEL,CAAC;AAE5B,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAYL,CAAC;AAEtB,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAChF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC1E,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC"}
@@ -25,23 +25,27 @@ __export(session_exports, {
25
25
  SessionAgentSchema: () => SessionAgentSchema,
26
26
  SessionMetadataSchema: () => SessionMetadataSchema,
27
27
  SessionMetricsSchema: () => SessionMetricsSchema,
28
- SessionSchema: () => SessionSchema
28
+ SessionSchema: () => SessionSchema,
29
+ SessionSourceScheduleSchema: () => SessionSourceScheduleSchema,
30
+ SessionSourceSchema: () => SessionSourceSchema,
31
+ SessionSourceTypeSchema: () => SessionSourceTypeSchema
29
32
  });
30
33
  module.exports = __toCommonJS(session_exports);
31
34
  var import_zod_openapi = require("@hono/zod-openapi");
32
35
  var import_agentSpec = require("./agentSpec.js");
33
36
  var import_subject = require("./subject.js");
34
37
  var SESSION_METADATA_MAX_KEY_LENGTH = 32;
38
+ var SESSION_METADATA_KEY_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,31}$/;
35
39
  var SESSION_METADATA_MAX_VALUE_LENGTH = 128;
36
40
  var SESSION_METADATA_MAX_KEYS = 50;
37
41
  var SessionMetadataSchema = import_zod_openapi.z.record(
38
- import_zod_openapi.z.string().min(1).max(SESSION_METADATA_MAX_KEY_LENGTH).describe(`Metadata key; 1\u2013${String(SESSION_METADATA_MAX_KEY_LENGTH)} characters.`),
42
+ import_zod_openapi.z.string().min(1).max(SESSION_METADATA_MAX_KEY_LENGTH).regex(SESSION_METADATA_KEY_PATTERN).describe(`Metadata key; 1\u2013${String(SESSION_METADATA_MAX_KEY_LENGTH)} characters.`),
39
43
  import_zod_openapi.z.string().max(SESSION_METADATA_MAX_VALUE_LENGTH).describe(`Metadata value; at most ${String(SESSION_METADATA_MAX_VALUE_LENGTH)} characters.`)
40
44
  ).refine((m) => Object.keys(m).length <= SESSION_METADATA_MAX_KEYS, {
41
45
  message: `at most ${String(SESSION_METADATA_MAX_KEYS)} metadata keys`
42
46
  }).describe("Caller-owned session metadata").openapi("SessionMetadata");
43
47
  var SessionMetricsSchema = import_zod_openapi.z.object({
44
- total_cost_in_usd: import_zod_openapi.z.number().nonnegative(),
48
+ total_cost_in_usd: import_zod_openapi.z.number().nonnegative().optional().describe("Estimated total cost in USD for this session"),
45
49
  total_duration_ms: import_zod_openapi.z.number().int().nonnegative(),
46
50
  total_turns: import_zod_openapi.z.number().int().nonnegative()
47
51
  }).strict().describe("Rolled-up cost, duration, and turn counters for a session.").openapi("SessionMetrics");
@@ -56,6 +60,16 @@ var SessionAgentInlineSchema = import_zod_openapi.z.object({
56
60
  spec: import_agentSpec.AgentSpecSchema
57
61
  }).strict().openapi("SessionAgentInline");
58
62
  var SessionAgentSchema = import_zod_openapi.z.discriminatedUnion("type", [SessionAgentReferenceSchema, SessionAgentInlineSchema]).openapi("SessionAgent");
63
+ var SessionSourceTypeSchema = import_zod_openapi.z.enum(["schedule"]).openapi("SessionSourceType");
64
+ function sessionSourceScheduleObject() {
65
+ return import_zod_openapi.z.object({
66
+ type: import_zod_openapi.z.literal(SessionSourceTypeSchema.enum.schedule).describe("Session was created by a schedule run."),
67
+ id: import_zod_openapi.z.string().min(1).describe("Schedule id."),
68
+ run_id: import_zod_openapi.z.string().min(1).describe("Schedule run id.")
69
+ }).strict();
70
+ }
71
+ var SessionSourceScheduleSchema = sessionSourceScheduleObject().openapi("SessionSourceSchedule");
72
+ var SessionSourceSchema = sessionSourceScheduleObject().describe("How this session was created (e.g. a schedule run). Null for interactive sessions.").openapi("SessionSource");
59
73
  var SessionSchema = import_zod_openapi.z.object({
60
74
  id: import_zod_openapi.z.string().describe("Unique session id."),
61
75
  agent: SessionAgentSchema,
@@ -64,7 +78,8 @@ var SessionSchema = import_zod_openapi.z.object({
64
78
  created_at: import_zod_openapi.z.string().describe("ISO 8601 creation timestamp."),
65
79
  updated_at: import_zod_openapi.z.string().describe("ISO 8601 last-update timestamp."),
66
80
  metrics: SessionMetricsSchema,
67
- metadata: SessionMetadataSchema
81
+ metadata: SessionMetadataSchema,
82
+ source: SessionSourceSchema.nullable()
68
83
  }).openapi("Session");
69
84
  // Annotate the CommonJS export names for ESM import in node:
70
85
  0 && (module.exports = {
@@ -73,6 +88,9 @@ var SessionSchema = import_zod_openapi.z.object({
73
88
  SessionAgentSchema,
74
89
  SessionMetadataSchema,
75
90
  SessionMetricsSchema,
76
- SessionSchema
91
+ SessionSchema,
92
+ SessionSourceScheduleSchema,
93
+ SessionSourceSchema,
94
+ SessionSourceTypeSchema
77
95
  });
78
96
  //# sourceMappingURL=session.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/agent-session/schemas/session.ts"],"sourcesContent":["/**\n * Session product schemas. Agent binding is a single discriminated `agent`\n * field (`reference` | `inline`). DB stores agent_id / agent_name / agent_spec columns.\n */\nimport { z } from '@hono/zod-openapi';\nimport { AgentSpecSchema } from './agentSpec';\nimport { CreatedBySubjectSchema } from './subject';\n\n/** Max key length for session metadata (aligned with LLM gateway HeaderMetadata). */\nconst SESSION_METADATA_MAX_KEY_LENGTH = 32;\n/** Max value length for session metadata (aligned with LLM gateway HeaderMetadata). */\nconst SESSION_METADATA_MAX_VALUE_LENGTH = 128;\n/** Max number of keys in session metadata. */\nconst SESSION_METADATA_MAX_KEYS = 50;\n\nexport const SessionMetadataSchema = z\n .record(\n z\n .string()\n .min(1)\n .max(SESSION_METADATA_MAX_KEY_LENGTH)\n .describe(`Metadata key; 1–${String(SESSION_METADATA_MAX_KEY_LENGTH)} characters.`),\n z\n .string()\n .max(SESSION_METADATA_MAX_VALUE_LENGTH)\n .describe(`Metadata value; at most ${String(SESSION_METADATA_MAX_VALUE_LENGTH)} characters.`),\n )\n .refine(m => Object.keys(m).length <= SESSION_METADATA_MAX_KEYS, {\n message: `at most ${String(SESSION_METADATA_MAX_KEYS)} metadata keys`,\n })\n .describe('Caller-owned session metadata')\n .openapi('SessionMetadata');\n\nexport type SessionMetadata = z.infer<typeof SessionMetadataSchema>;\n\nexport const SessionMetricsSchema = z\n .object({\n total_cost_in_usd: z.number().nonnegative(),\n total_duration_ms: z.number().int().nonnegative(),\n total_turns: z.number().int().nonnegative(),\n })\n .strict()\n .describe('Rolled-up cost, duration, and turn counters for a session.')\n .openapi('SessionMetrics');\n\nexport const SessionAgentReferenceSchema = z\n .object({\n type: z.literal('reference').describe('Bind the session to a named registry agent.'),\n id: z.string().min(1).describe('Registry agent id.'),\n /** Create-time snapshot of the registry agent name; null for legacy/orphan rows. */\n name: z\n .string()\n .nullable()\n .describe('Create-time snapshot of the registry agent name; null for legacy or orphan rows.'),\n })\n .strict()\n .openapi('SessionAgentReference');\n\nexport const SessionAgentInlineSchema = z\n .object({\n type: z.literal('inline').describe('Bind the session to an inline AgentSpec (not a registry id).'),\n spec: AgentSpecSchema,\n })\n .strict()\n .openapi('SessionAgentInline');\n\n/** Named registry binding or inline AgentSpec — exactly one arm. */\nexport const SessionAgentSchema = z\n .discriminatedUnion('type', [SessionAgentReferenceSchema, SessionAgentInlineSchema])\n .openapi('SessionAgent');\n\nexport const SessionSchema = z\n .object({\n id: z.string().describe('Unique session id.'),\n agent: SessionAgentSchema,\n title: z.string().nullable().describe('Optional human-readable title; null until set.'),\n created_by_subject: CreatedBySubjectSchema,\n created_at: z.string().describe('ISO 8601 creation timestamp.'),\n updated_at: z.string().describe('ISO 8601 last-update timestamp.'),\n metrics: SessionMetricsSchema,\n metadata: SessionMetadataSchema,\n })\n .openapi('Session');\n\nexport type SessionAgentReference = z.infer<typeof SessionAgentReferenceSchema>;\nexport type SessionAgentInline = z.infer<typeof SessionAgentInlineSchema>;\nexport type SessionAgent = z.infer<typeof SessionAgentSchema>;\nexport type SessionMetrics = z.infer<typeof SessionMetricsSchema>;\nexport type Session = z.infer<typeof SessionSchema>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,yBAAkB;AAClB,uBAAgC;AAChC,qBAAuC;AAGvC,IAAM,kCAAkC;AAExC,IAAM,oCAAoC;AAE1C,IAAM,4BAA4B;AAE3B,IAAM,wBAAwB,qBAClC;AAAA,EACC,qBACG,OAAO,EACP,IAAI,CAAC,EACL,IAAI,+BAA+B,EACnC,SAAS,wBAAmB,OAAO,+BAA+B,CAAC,cAAc;AAAA,EACpF,qBACG,OAAO,EACP,IAAI,iCAAiC,EACrC,SAAS,2BAA2B,OAAO,iCAAiC,CAAC,cAAc;AAChG,EACC,OAAO,OAAK,OAAO,KAAK,CAAC,EAAE,UAAU,2BAA2B;AAAA,EAC/D,SAAS,WAAW,OAAO,yBAAyB,CAAC;AACvD,CAAC,EACA,SAAS,+BAA+B,EACxC,QAAQ,iBAAiB;AAIrB,IAAM,uBAAuB,qBACjC,OAAO;AAAA,EACN,mBAAmB,qBAAE,OAAO,EAAE,YAAY;AAAA,EAC1C,mBAAmB,qBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EAChD,aAAa,qBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAC5C,CAAC,EACA,OAAO,EACP,SAAS,4DAA4D,EACrE,QAAQ,gBAAgB;AAEpB,IAAM,8BAA8B,qBACxC,OAAO;AAAA,EACN,MAAM,qBAAE,QAAQ,WAAW,EAAE,SAAS,6CAA6C;AAAA,EACnF,IAAI,qBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,oBAAoB;AAAA;AAAA,EAEnD,MAAM,qBACH,OAAO,EACP,SAAS,EACT,SAAS,kFAAkF;AAChG,CAAC,EACA,OAAO,EACP,QAAQ,uBAAuB;AAE3B,IAAM,2BAA2B,qBACrC,OAAO;AAAA,EACN,MAAM,qBAAE,QAAQ,QAAQ,EAAE,SAAS,8DAA8D;AAAA,EACjG,MAAM;AACR,CAAC,EACA,OAAO,EACP,QAAQ,oBAAoB;AAGxB,IAAM,qBAAqB,qBAC/B,mBAAmB,QAAQ,CAAC,6BAA6B,wBAAwB,CAAC,EAClF,QAAQ,cAAc;AAElB,IAAM,gBAAgB,qBAC1B,OAAO;AAAA,EACN,IAAI,qBAAE,OAAO,EAAE,SAAS,oBAAoB;AAAA,EAC5C,OAAO;AAAA,EACP,OAAO,qBAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gDAAgD;AAAA,EACtF,oBAAoB;AAAA,EACpB,YAAY,qBAAE,OAAO,EAAE,SAAS,8BAA8B;AAAA,EAC9D,YAAY,qBAAE,OAAO,EAAE,SAAS,iCAAiC;AAAA,EACjE,SAAS;AAAA,EACT,UAAU;AACZ,CAAC,EACA,QAAQ,SAAS;","names":[]}
1
+ {"version":3,"sources":["../../../src/agent-session/schemas/session.ts"],"sourcesContent":["/**\n * Session product schemas. Agent binding is a single discriminated `agent`\n * field (`reference` | `inline`). DB stores agent_id / agent_name / agent_spec columns.\n */\nimport { z } from '@hono/zod-openapi';\nimport { AgentSpecSchema } from './agentSpec';\nimport { CreatedBySubjectSchema } from './subject';\n\nconst SESSION_METADATA_MAX_KEY_LENGTH = 32;\n/**\n * Metadata keys: alphanumeric start; then alphanumeric, `.`, `_`, `:`, `-`.\n * Bans `[]` (collide with deepObject / reserved `metadata[key][op]`) and whitespace.\n */\nconst SESSION_METADATA_KEY_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,31}$/;\n/** Max value length for session metadata */\nconst SESSION_METADATA_MAX_VALUE_LENGTH = 128;\n/** Max number of keys in session metadata. */\nconst SESSION_METADATA_MAX_KEYS = 50;\n\nexport const SessionMetadataSchema = z\n .record(\n z\n .string()\n .min(1)\n .max(SESSION_METADATA_MAX_KEY_LENGTH)\n .regex(SESSION_METADATA_KEY_PATTERN)\n .describe(`Metadata key; 1–${String(SESSION_METADATA_MAX_KEY_LENGTH)} characters.`),\n z\n .string()\n .max(SESSION_METADATA_MAX_VALUE_LENGTH)\n .describe(`Metadata value; at most ${String(SESSION_METADATA_MAX_VALUE_LENGTH)} characters.`),\n )\n .refine(m => Object.keys(m).length <= SESSION_METADATA_MAX_KEYS, {\n message: `at most ${String(SESSION_METADATA_MAX_KEYS)} metadata keys`,\n })\n .describe('Caller-owned session metadata')\n .openapi('SessionMetadata');\n\nexport type SessionMetadata = z.infer<typeof SessionMetadataSchema>;\n\nexport const SessionMetricsSchema = z\n .object({\n total_cost_in_usd: z.number().nonnegative().optional().describe('Estimated total cost in USD for this session'),\n total_duration_ms: z.number().int().nonnegative(),\n total_turns: z.number().int().nonnegative(),\n })\n .strict()\n .describe('Rolled-up cost, duration, and turn counters for a session.')\n .openapi('SessionMetrics');\n\nexport const SessionAgentReferenceSchema = z\n .object({\n type: z.literal('reference').describe('Bind the session to a named registry agent.'),\n id: z.string().min(1).describe('Registry agent id.'),\n /** Create-time snapshot of the registry agent name; null for legacy/orphan rows. */\n name: z\n .string()\n .nullable()\n .describe('Create-time snapshot of the registry agent name; null for legacy or orphan rows.'),\n })\n .strict()\n .openapi('SessionAgentReference');\n\nexport const SessionAgentInlineSchema = z\n .object({\n type: z.literal('inline').describe('Bind the session to an inline AgentSpec (not a registry id).'),\n spec: AgentSpecSchema,\n })\n .strict()\n .openapi('SessionAgentInline');\n\n/** Named registry binding or inline AgentSpec — exactly one arm. */\nexport const SessionAgentSchema = z\n .discriminatedUnion('type', [SessionAgentReferenceSchema, SessionAgentInlineSchema])\n .openapi('SessionAgent');\n\nexport const SessionSourceTypeSchema = z.enum(['schedule']).openapi('SessionSourceType');\n\nexport type SessionSourceType = z.infer<typeof SessionSourceTypeSchema>;\n\nfunction sessionSourceScheduleObject() {\n return z\n .object({\n type: z.literal(SessionSourceTypeSchema.enum.schedule).describe('Session was created by a schedule run.'),\n id: z.string().min(1).describe('Schedule id.'),\n run_id: z.string().min(1).describe('Schedule run id.'),\n })\n .strict();\n}\n\nexport const SessionSourceScheduleSchema = sessionSourceScheduleObject().openapi('SessionSourceSchedule');\n\n/**\n * How a session was created. Same shape as {@link SessionSourceScheduleSchema} today;\n * switch to `discriminatedUnion('type', …)` when a second source arm lands.\n */\nexport const SessionSourceSchema = sessionSourceScheduleObject()\n .describe('How this session was created (e.g. a schedule run). Null for interactive sessions.')\n .openapi('SessionSource');\n\nexport type SessionSource = z.infer<typeof SessionSourceSchema>;\n\nexport const SessionSchema = z\n .object({\n id: z.string().describe('Unique session id.'),\n agent: SessionAgentSchema,\n title: z.string().nullable().describe('Optional human-readable title; null until set.'),\n created_by_subject: CreatedBySubjectSchema,\n created_at: z.string().describe('ISO 8601 creation timestamp.'),\n updated_at: z.string().describe('ISO 8601 last-update timestamp.'),\n metrics: SessionMetricsSchema,\n metadata: SessionMetadataSchema,\n source: SessionSourceSchema.nullable(),\n })\n .openapi('Session');\n\nexport type SessionAgentReference = z.infer<typeof SessionAgentReferenceSchema>;\nexport type SessionAgentInline = z.infer<typeof SessionAgentInlineSchema>;\nexport type SessionAgent = z.infer<typeof SessionAgentSchema>;\nexport type SessionMetrics = z.infer<typeof SessionMetricsSchema>;\nexport type Session = z.infer<typeof SessionSchema>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,yBAAkB;AAClB,uBAAgC;AAChC,qBAAuC;AAEvC,IAAM,kCAAkC;AAKxC,IAAM,+BAA+B;AAErC,IAAM,oCAAoC;AAE1C,IAAM,4BAA4B;AAE3B,IAAM,wBAAwB,qBAClC;AAAA,EACC,qBACG,OAAO,EACP,IAAI,CAAC,EACL,IAAI,+BAA+B,EACnC,MAAM,4BAA4B,EAClC,SAAS,wBAAmB,OAAO,+BAA+B,CAAC,cAAc;AAAA,EACpF,qBACG,OAAO,EACP,IAAI,iCAAiC,EACrC,SAAS,2BAA2B,OAAO,iCAAiC,CAAC,cAAc;AAChG,EACC,OAAO,OAAK,OAAO,KAAK,CAAC,EAAE,UAAU,2BAA2B;AAAA,EAC/D,SAAS,WAAW,OAAO,yBAAyB,CAAC;AACvD,CAAC,EACA,SAAS,+BAA+B,EACxC,QAAQ,iBAAiB;AAIrB,IAAM,uBAAuB,qBACjC,OAAO;AAAA,EACN,mBAAmB,qBAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,8CAA8C;AAAA,EAC9G,mBAAmB,qBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EAChD,aAAa,qBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAC5C,CAAC,EACA,OAAO,EACP,SAAS,4DAA4D,EACrE,QAAQ,gBAAgB;AAEpB,IAAM,8BAA8B,qBACxC,OAAO;AAAA,EACN,MAAM,qBAAE,QAAQ,WAAW,EAAE,SAAS,6CAA6C;AAAA,EACnF,IAAI,qBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,oBAAoB;AAAA;AAAA,EAEnD,MAAM,qBACH,OAAO,EACP,SAAS,EACT,SAAS,kFAAkF;AAChG,CAAC,EACA,OAAO,EACP,QAAQ,uBAAuB;AAE3B,IAAM,2BAA2B,qBACrC,OAAO;AAAA,EACN,MAAM,qBAAE,QAAQ,QAAQ,EAAE,SAAS,8DAA8D;AAAA,EACjG,MAAM;AACR,CAAC,EACA,OAAO,EACP,QAAQ,oBAAoB;AAGxB,IAAM,qBAAqB,qBAC/B,mBAAmB,QAAQ,CAAC,6BAA6B,wBAAwB,CAAC,EAClF,QAAQ,cAAc;AAElB,IAAM,0BAA0B,qBAAE,KAAK,CAAC,UAAU,CAAC,EAAE,QAAQ,mBAAmB;AAIvF,SAAS,8BAA8B;AACrC,SAAO,qBACJ,OAAO;AAAA,IACN,MAAM,qBAAE,QAAQ,wBAAwB,KAAK,QAAQ,EAAE,SAAS,wCAAwC;AAAA,IACxG,IAAI,qBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,cAAc;AAAA,IAC7C,QAAQ,qBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,kBAAkB;AAAA,EACvD,CAAC,EACA,OAAO;AACZ;AAEO,IAAM,8BAA8B,4BAA4B,EAAE,QAAQ,uBAAuB;AAMjG,IAAM,sBAAsB,4BAA4B,EAC5D,SAAS,oFAAoF,EAC7F,QAAQ,eAAe;AAInB,IAAM,gBAAgB,qBAC1B,OAAO;AAAA,EACN,IAAI,qBAAE,OAAO,EAAE,SAAS,oBAAoB;AAAA,EAC5C,OAAO;AAAA,EACP,OAAO,qBAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gDAAgD;AAAA,EACtF,oBAAoB;AAAA,EACpB,YAAY,qBAAE,OAAO,EAAE,SAAS,8BAA8B;AAAA,EAC9D,YAAY,qBAAE,OAAO,EAAE,SAAS,iCAAiC;AAAA,EACjE,SAAS;AAAA,EACT,UAAU;AAAA,EACV,QAAQ,oBAAoB,SAAS;AACvC,CAAC,EACA,QAAQ,SAAS;","names":[]}
@@ -3,16 +3,17 @@ import { z } from "@hono/zod-openapi";
3
3
  import { AgentSpecSchema } from "./agentSpec.mjs";
4
4
  import { CreatedBySubjectSchema } from "./subject.mjs";
5
5
  var SESSION_METADATA_MAX_KEY_LENGTH = 32;
6
+ var SESSION_METADATA_KEY_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,31}$/;
6
7
  var SESSION_METADATA_MAX_VALUE_LENGTH = 128;
7
8
  var SESSION_METADATA_MAX_KEYS = 50;
8
9
  var SessionMetadataSchema = z.record(
9
- z.string().min(1).max(SESSION_METADATA_MAX_KEY_LENGTH).describe(`Metadata key; 1\u2013${String(SESSION_METADATA_MAX_KEY_LENGTH)} characters.`),
10
+ z.string().min(1).max(SESSION_METADATA_MAX_KEY_LENGTH).regex(SESSION_METADATA_KEY_PATTERN).describe(`Metadata key; 1\u2013${String(SESSION_METADATA_MAX_KEY_LENGTH)} characters.`),
10
11
  z.string().max(SESSION_METADATA_MAX_VALUE_LENGTH).describe(`Metadata value; at most ${String(SESSION_METADATA_MAX_VALUE_LENGTH)} characters.`)
11
12
  ).refine((m) => Object.keys(m).length <= SESSION_METADATA_MAX_KEYS, {
12
13
  message: `at most ${String(SESSION_METADATA_MAX_KEYS)} metadata keys`
13
14
  }).describe("Caller-owned session metadata").openapi("SessionMetadata");
14
15
  var SessionMetricsSchema = z.object({
15
- total_cost_in_usd: z.number().nonnegative(),
16
+ total_cost_in_usd: z.number().nonnegative().optional().describe("Estimated total cost in USD for this session"),
16
17
  total_duration_ms: z.number().int().nonnegative(),
17
18
  total_turns: z.number().int().nonnegative()
18
19
  }).strict().describe("Rolled-up cost, duration, and turn counters for a session.").openapi("SessionMetrics");
@@ -27,6 +28,16 @@ var SessionAgentInlineSchema = z.object({
27
28
  spec: AgentSpecSchema
28
29
  }).strict().openapi("SessionAgentInline");
29
30
  var SessionAgentSchema = z.discriminatedUnion("type", [SessionAgentReferenceSchema, SessionAgentInlineSchema]).openapi("SessionAgent");
31
+ var SessionSourceTypeSchema = z.enum(["schedule"]).openapi("SessionSourceType");
32
+ function sessionSourceScheduleObject() {
33
+ return z.object({
34
+ type: z.literal(SessionSourceTypeSchema.enum.schedule).describe("Session was created by a schedule run."),
35
+ id: z.string().min(1).describe("Schedule id."),
36
+ run_id: z.string().min(1).describe("Schedule run id.")
37
+ }).strict();
38
+ }
39
+ var SessionSourceScheduleSchema = sessionSourceScheduleObject().openapi("SessionSourceSchedule");
40
+ var SessionSourceSchema = sessionSourceScheduleObject().describe("How this session was created (e.g. a schedule run). Null for interactive sessions.").openapi("SessionSource");
30
41
  var SessionSchema = z.object({
31
42
  id: z.string().describe("Unique session id."),
32
43
  agent: SessionAgentSchema,
@@ -35,7 +46,8 @@ var SessionSchema = z.object({
35
46
  created_at: z.string().describe("ISO 8601 creation timestamp."),
36
47
  updated_at: z.string().describe("ISO 8601 last-update timestamp."),
37
48
  metrics: SessionMetricsSchema,
38
- metadata: SessionMetadataSchema
49
+ metadata: SessionMetadataSchema,
50
+ source: SessionSourceSchema.nullable()
39
51
  }).openapi("Session");
40
52
  export {
41
53
  SessionAgentInlineSchema,
@@ -43,6 +55,9 @@ export {
43
55
  SessionAgentSchema,
44
56
  SessionMetadataSchema,
45
57
  SessionMetricsSchema,
46
- SessionSchema
58
+ SessionSchema,
59
+ SessionSourceScheduleSchema,
60
+ SessionSourceSchema,
61
+ SessionSourceTypeSchema
47
62
  };
48
63
  //# sourceMappingURL=session.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/agent-session/schemas/session.ts"],"sourcesContent":["/**\n * Session product schemas. Agent binding is a single discriminated `agent`\n * field (`reference` | `inline`). DB stores agent_id / agent_name / agent_spec columns.\n */\nimport { z } from '@hono/zod-openapi';\nimport { AgentSpecSchema } from './agentSpec';\nimport { CreatedBySubjectSchema } from './subject';\n\n/** Max key length for session metadata (aligned with LLM gateway HeaderMetadata). */\nconst SESSION_METADATA_MAX_KEY_LENGTH = 32;\n/** Max value length for session metadata (aligned with LLM gateway HeaderMetadata). */\nconst SESSION_METADATA_MAX_VALUE_LENGTH = 128;\n/** Max number of keys in session metadata. */\nconst SESSION_METADATA_MAX_KEYS = 50;\n\nexport const SessionMetadataSchema = z\n .record(\n z\n .string()\n .min(1)\n .max(SESSION_METADATA_MAX_KEY_LENGTH)\n .describe(`Metadata key; 1–${String(SESSION_METADATA_MAX_KEY_LENGTH)} characters.`),\n z\n .string()\n .max(SESSION_METADATA_MAX_VALUE_LENGTH)\n .describe(`Metadata value; at most ${String(SESSION_METADATA_MAX_VALUE_LENGTH)} characters.`),\n )\n .refine(m => Object.keys(m).length <= SESSION_METADATA_MAX_KEYS, {\n message: `at most ${String(SESSION_METADATA_MAX_KEYS)} metadata keys`,\n })\n .describe('Caller-owned session metadata')\n .openapi('SessionMetadata');\n\nexport type SessionMetadata = z.infer<typeof SessionMetadataSchema>;\n\nexport const SessionMetricsSchema = z\n .object({\n total_cost_in_usd: z.number().nonnegative(),\n total_duration_ms: z.number().int().nonnegative(),\n total_turns: z.number().int().nonnegative(),\n })\n .strict()\n .describe('Rolled-up cost, duration, and turn counters for a session.')\n .openapi('SessionMetrics');\n\nexport const SessionAgentReferenceSchema = z\n .object({\n type: z.literal('reference').describe('Bind the session to a named registry agent.'),\n id: z.string().min(1).describe('Registry agent id.'),\n /** Create-time snapshot of the registry agent name; null for legacy/orphan rows. */\n name: z\n .string()\n .nullable()\n .describe('Create-time snapshot of the registry agent name; null for legacy or orphan rows.'),\n })\n .strict()\n .openapi('SessionAgentReference');\n\nexport const SessionAgentInlineSchema = z\n .object({\n type: z.literal('inline').describe('Bind the session to an inline AgentSpec (not a registry id).'),\n spec: AgentSpecSchema,\n })\n .strict()\n .openapi('SessionAgentInline');\n\n/** Named registry binding or inline AgentSpec — exactly one arm. */\nexport const SessionAgentSchema = z\n .discriminatedUnion('type', [SessionAgentReferenceSchema, SessionAgentInlineSchema])\n .openapi('SessionAgent');\n\nexport const SessionSchema = z\n .object({\n id: z.string().describe('Unique session id.'),\n agent: SessionAgentSchema,\n title: z.string().nullable().describe('Optional human-readable title; null until set.'),\n created_by_subject: CreatedBySubjectSchema,\n created_at: z.string().describe('ISO 8601 creation timestamp.'),\n updated_at: z.string().describe('ISO 8601 last-update timestamp.'),\n metrics: SessionMetricsSchema,\n metadata: SessionMetadataSchema,\n })\n .openapi('Session');\n\nexport type SessionAgentReference = z.infer<typeof SessionAgentReferenceSchema>;\nexport type SessionAgentInline = z.infer<typeof SessionAgentInlineSchema>;\nexport type SessionAgent = z.infer<typeof SessionAgentSchema>;\nexport type SessionMetrics = z.infer<typeof SessionMetricsSchema>;\nexport type Session = z.infer<typeof SessionSchema>;\n"],"mappings":";AAIA,SAAS,SAAS;AAClB,SAAS,uBAAuB;AAChC,SAAS,8BAA8B;AAGvC,IAAM,kCAAkC;AAExC,IAAM,oCAAoC;AAE1C,IAAM,4BAA4B;AAE3B,IAAM,wBAAwB,EAClC;AAAA,EACC,EACG,OAAO,EACP,IAAI,CAAC,EACL,IAAI,+BAA+B,EACnC,SAAS,wBAAmB,OAAO,+BAA+B,CAAC,cAAc;AAAA,EACpF,EACG,OAAO,EACP,IAAI,iCAAiC,EACrC,SAAS,2BAA2B,OAAO,iCAAiC,CAAC,cAAc;AAChG,EACC,OAAO,OAAK,OAAO,KAAK,CAAC,EAAE,UAAU,2BAA2B;AAAA,EAC/D,SAAS,WAAW,OAAO,yBAAyB,CAAC;AACvD,CAAC,EACA,SAAS,+BAA+B,EACxC,QAAQ,iBAAiB;AAIrB,IAAM,uBAAuB,EACjC,OAAO;AAAA,EACN,mBAAmB,EAAE,OAAO,EAAE,YAAY;AAAA,EAC1C,mBAAmB,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EAChD,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAC5C,CAAC,EACA,OAAO,EACP,SAAS,4DAA4D,EACrE,QAAQ,gBAAgB;AAEpB,IAAM,8BAA8B,EACxC,OAAO;AAAA,EACN,MAAM,EAAE,QAAQ,WAAW,EAAE,SAAS,6CAA6C;AAAA,EACnF,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,oBAAoB;AAAA;AAAA,EAEnD,MAAM,EACH,OAAO,EACP,SAAS,EACT,SAAS,kFAAkF;AAChG,CAAC,EACA,OAAO,EACP,QAAQ,uBAAuB;AAE3B,IAAM,2BAA2B,EACrC,OAAO;AAAA,EACN,MAAM,EAAE,QAAQ,QAAQ,EAAE,SAAS,8DAA8D;AAAA,EACjG,MAAM;AACR,CAAC,EACA,OAAO,EACP,QAAQ,oBAAoB;AAGxB,IAAM,qBAAqB,EAC/B,mBAAmB,QAAQ,CAAC,6BAA6B,wBAAwB,CAAC,EAClF,QAAQ,cAAc;AAElB,IAAM,gBAAgB,EAC1B,OAAO;AAAA,EACN,IAAI,EAAE,OAAO,EAAE,SAAS,oBAAoB;AAAA,EAC5C,OAAO;AAAA,EACP,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gDAAgD;AAAA,EACtF,oBAAoB;AAAA,EACpB,YAAY,EAAE,OAAO,EAAE,SAAS,8BAA8B;AAAA,EAC9D,YAAY,EAAE,OAAO,EAAE,SAAS,iCAAiC;AAAA,EACjE,SAAS;AAAA,EACT,UAAU;AACZ,CAAC,EACA,QAAQ,SAAS;","names":[]}
1
+ {"version":3,"sources":["../../../src/agent-session/schemas/session.ts"],"sourcesContent":["/**\n * Session product schemas. Agent binding is a single discriminated `agent`\n * field (`reference` | `inline`). DB stores agent_id / agent_name / agent_spec columns.\n */\nimport { z } from '@hono/zod-openapi';\nimport { AgentSpecSchema } from './agentSpec';\nimport { CreatedBySubjectSchema } from './subject';\n\nconst SESSION_METADATA_MAX_KEY_LENGTH = 32;\n/**\n * Metadata keys: alphanumeric start; then alphanumeric, `.`, `_`, `:`, `-`.\n * Bans `[]` (collide with deepObject / reserved `metadata[key][op]`) and whitespace.\n */\nconst SESSION_METADATA_KEY_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,31}$/;\n/** Max value length for session metadata */\nconst SESSION_METADATA_MAX_VALUE_LENGTH = 128;\n/** Max number of keys in session metadata. */\nconst SESSION_METADATA_MAX_KEYS = 50;\n\nexport const SessionMetadataSchema = z\n .record(\n z\n .string()\n .min(1)\n .max(SESSION_METADATA_MAX_KEY_LENGTH)\n .regex(SESSION_METADATA_KEY_PATTERN)\n .describe(`Metadata key; 1–${String(SESSION_METADATA_MAX_KEY_LENGTH)} characters.`),\n z\n .string()\n .max(SESSION_METADATA_MAX_VALUE_LENGTH)\n .describe(`Metadata value; at most ${String(SESSION_METADATA_MAX_VALUE_LENGTH)} characters.`),\n )\n .refine(m => Object.keys(m).length <= SESSION_METADATA_MAX_KEYS, {\n message: `at most ${String(SESSION_METADATA_MAX_KEYS)} metadata keys`,\n })\n .describe('Caller-owned session metadata')\n .openapi('SessionMetadata');\n\nexport type SessionMetadata = z.infer<typeof SessionMetadataSchema>;\n\nexport const SessionMetricsSchema = z\n .object({\n total_cost_in_usd: z.number().nonnegative().optional().describe('Estimated total cost in USD for this session'),\n total_duration_ms: z.number().int().nonnegative(),\n total_turns: z.number().int().nonnegative(),\n })\n .strict()\n .describe('Rolled-up cost, duration, and turn counters for a session.')\n .openapi('SessionMetrics');\n\nexport const SessionAgentReferenceSchema = z\n .object({\n type: z.literal('reference').describe('Bind the session to a named registry agent.'),\n id: z.string().min(1).describe('Registry agent id.'),\n /** Create-time snapshot of the registry agent name; null for legacy/orphan rows. */\n name: z\n .string()\n .nullable()\n .describe('Create-time snapshot of the registry agent name; null for legacy or orphan rows.'),\n })\n .strict()\n .openapi('SessionAgentReference');\n\nexport const SessionAgentInlineSchema = z\n .object({\n type: z.literal('inline').describe('Bind the session to an inline AgentSpec (not a registry id).'),\n spec: AgentSpecSchema,\n })\n .strict()\n .openapi('SessionAgentInline');\n\n/** Named registry binding or inline AgentSpec — exactly one arm. */\nexport const SessionAgentSchema = z\n .discriminatedUnion('type', [SessionAgentReferenceSchema, SessionAgentInlineSchema])\n .openapi('SessionAgent');\n\nexport const SessionSourceTypeSchema = z.enum(['schedule']).openapi('SessionSourceType');\n\nexport type SessionSourceType = z.infer<typeof SessionSourceTypeSchema>;\n\nfunction sessionSourceScheduleObject() {\n return z\n .object({\n type: z.literal(SessionSourceTypeSchema.enum.schedule).describe('Session was created by a schedule run.'),\n id: z.string().min(1).describe('Schedule id.'),\n run_id: z.string().min(1).describe('Schedule run id.'),\n })\n .strict();\n}\n\nexport const SessionSourceScheduleSchema = sessionSourceScheduleObject().openapi('SessionSourceSchedule');\n\n/**\n * How a session was created. Same shape as {@link SessionSourceScheduleSchema} today;\n * switch to `discriminatedUnion('type', …)` when a second source arm lands.\n */\nexport const SessionSourceSchema = sessionSourceScheduleObject()\n .describe('How this session was created (e.g. a schedule run). Null for interactive sessions.')\n .openapi('SessionSource');\n\nexport type SessionSource = z.infer<typeof SessionSourceSchema>;\n\nexport const SessionSchema = z\n .object({\n id: z.string().describe('Unique session id.'),\n agent: SessionAgentSchema,\n title: z.string().nullable().describe('Optional human-readable title; null until set.'),\n created_by_subject: CreatedBySubjectSchema,\n created_at: z.string().describe('ISO 8601 creation timestamp.'),\n updated_at: z.string().describe('ISO 8601 last-update timestamp.'),\n metrics: SessionMetricsSchema,\n metadata: SessionMetadataSchema,\n source: SessionSourceSchema.nullable(),\n })\n .openapi('Session');\n\nexport type SessionAgentReference = z.infer<typeof SessionAgentReferenceSchema>;\nexport type SessionAgentInline = z.infer<typeof SessionAgentInlineSchema>;\nexport type SessionAgent = z.infer<typeof SessionAgentSchema>;\nexport type SessionMetrics = z.infer<typeof SessionMetricsSchema>;\nexport type Session = z.infer<typeof SessionSchema>;\n"],"mappings":";AAIA,SAAS,SAAS;AAClB,SAAS,uBAAuB;AAChC,SAAS,8BAA8B;AAEvC,IAAM,kCAAkC;AAKxC,IAAM,+BAA+B;AAErC,IAAM,oCAAoC;AAE1C,IAAM,4BAA4B;AAE3B,IAAM,wBAAwB,EAClC;AAAA,EACC,EACG,OAAO,EACP,IAAI,CAAC,EACL,IAAI,+BAA+B,EACnC,MAAM,4BAA4B,EAClC,SAAS,wBAAmB,OAAO,+BAA+B,CAAC,cAAc;AAAA,EACpF,EACG,OAAO,EACP,IAAI,iCAAiC,EACrC,SAAS,2BAA2B,OAAO,iCAAiC,CAAC,cAAc;AAChG,EACC,OAAO,OAAK,OAAO,KAAK,CAAC,EAAE,UAAU,2BAA2B;AAAA,EAC/D,SAAS,WAAW,OAAO,yBAAyB,CAAC;AACvD,CAAC,EACA,SAAS,+BAA+B,EACxC,QAAQ,iBAAiB;AAIrB,IAAM,uBAAuB,EACjC,OAAO;AAAA,EACN,mBAAmB,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,8CAA8C;AAAA,EAC9G,mBAAmB,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EAChD,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAC5C,CAAC,EACA,OAAO,EACP,SAAS,4DAA4D,EACrE,QAAQ,gBAAgB;AAEpB,IAAM,8BAA8B,EACxC,OAAO;AAAA,EACN,MAAM,EAAE,QAAQ,WAAW,EAAE,SAAS,6CAA6C;AAAA,EACnF,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,oBAAoB;AAAA;AAAA,EAEnD,MAAM,EACH,OAAO,EACP,SAAS,EACT,SAAS,kFAAkF;AAChG,CAAC,EACA,OAAO,EACP,QAAQ,uBAAuB;AAE3B,IAAM,2BAA2B,EACrC,OAAO;AAAA,EACN,MAAM,EAAE,QAAQ,QAAQ,EAAE,SAAS,8DAA8D;AAAA,EACjG,MAAM;AACR,CAAC,EACA,OAAO,EACP,QAAQ,oBAAoB;AAGxB,IAAM,qBAAqB,EAC/B,mBAAmB,QAAQ,CAAC,6BAA6B,wBAAwB,CAAC,EAClF,QAAQ,cAAc;AAElB,IAAM,0BAA0B,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,QAAQ,mBAAmB;AAIvF,SAAS,8BAA8B;AACrC,SAAO,EACJ,OAAO;AAAA,IACN,MAAM,EAAE,QAAQ,wBAAwB,KAAK,QAAQ,EAAE,SAAS,wCAAwC;AAAA,IACxG,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,cAAc;AAAA,IAC7C,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,kBAAkB;AAAA,EACvD,CAAC,EACA,OAAO;AACZ;AAEO,IAAM,8BAA8B,4BAA4B,EAAE,QAAQ,uBAAuB;AAMjG,IAAM,sBAAsB,4BAA4B,EAC5D,SAAS,oFAAoF,EAC7F,QAAQ,eAAe;AAInB,IAAM,gBAAgB,EAC1B,OAAO;AAAA,EACN,IAAI,EAAE,OAAO,EAAE,SAAS,oBAAoB;AAAA,EAC5C,OAAO;AAAA,EACP,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gDAAgD;AAAA,EACtF,oBAAoB;AAAA,EACpB,YAAY,EAAE,OAAO,EAAE,SAAS,8BAA8B;AAAA,EAC9D,YAAY,EAAE,OAAO,EAAE,SAAS,iCAAiC;AAAA,EACjE,SAAS;AAAA,EACT,UAAU;AAAA,EACV,QAAQ,oBAAoB,SAAS;AACvC,CAAC,EACA,QAAQ,SAAS;","names":[]}
@@ -7,12 +7,13 @@ import type { SessionRecord } from '../models/SessionRecord';
7
7
  import type { TurnRecord } from '../models/TurnRecord';
8
8
  import type { PersistedTurnEvent, SessionEventItem } from '../schemas/events';
9
9
  import type { TokenPagination } from '../schemas/pagination';
10
+ import type { SessionMetadata } from '../schemas/session';
10
11
  import type { CancellationReason, TerminalTurnState } from '../schemas/turn';
11
12
  /**
12
13
  * Caller-supplied fields for creating a session; the store owns timestamps and tip state.
13
14
  * `agent` is a discriminated reference | inline binding.
14
15
  */
15
- export type CreateSessionInput<TSessionCustom extends object = Record<string, never>> = Pick<SessionRecord<TSessionCustom>, 'tenant_id' | 'session_id' | 'agent' | 'created_by_subject' | 'external_id' | 'metadata'> & {
16
+ export type CreateSessionInput<TSessionCustom extends object = Record<string, never>> = Pick<SessionRecord<TSessionCustom>, 'tenant_id' | 'session_id' | 'agent' | 'created_by_subject' | 'external_id' | 'metadata' | 'source'> & {
16
17
  custom: TSessionCustom | null;
17
18
  };
18
19
  /**
@@ -55,6 +56,19 @@ export interface ListSessionsInput {
55
56
  created_by_subject_id: string;
56
57
  agent_ids: readonly string[];
57
58
  } | undefined;
59
+ /**
60
+ * When set, only sessions whose metadata contains all key/value pairs
61
+ * (exact string equality; extra session keys are allowed).
62
+ * `undefined` means no metadata filter; `{}` matches only sessions with empty metadata.
63
+ */
64
+ metadata: SessionMetadata | undefined;
65
+ /** When set, only sessions whose `source.type` matches. */
66
+ source_type: string | undefined;
67
+ /**
68
+ * When set, only sessions whose `source.id` matches.
69
+ * Requires `source_type`.
70
+ */
71
+ source_id: string | undefined;
58
72
  }
59
73
  /** Turn row fields without assembled snapshot (create input / listTurns). */
60
74
  export type TurnRecordWithoutSnapshot<TTurnCustom extends object = Record<string, never>> = Omit<TurnRecord<TTurnCustom>, 'snapshot'>;
@@ -212,8 +226,9 @@ export interface ISessionStore<TSessionCustom extends object = Record<string, ne
212
226
  * keyset cursor on `(updated_at, session_id)`. `start_timestamp` /
213
227
  * `end_timestamp` are inclusive instant bounds on `created_at`. Optional
214
228
  * `agent_id` filters ref-bound sessions. `created_by_or_agent_ids` matches
215
- * rows created by its subject OR bound to one of its agent ids. Does **not**
216
- * bump `last_activity_timestamp_ms` (read path).
229
+ * rows created by its subject OR bound to one of its agent ids; optional
230
+ * `source_type` / `source_id` filter by JSON `source` (expression-indexed,
231
+ * no scalar columns). Does **not** bump `last_activity_timestamp_ms` (read path).
217
232
  */
218
233
  listSessions(input: ListSessionsInput): Promise<{
219
234
  data: SessionRecord<TSessionCustom>[];