@defai.digital/session-domain 13.0.3

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.
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Session Store Implementation
3
+ *
4
+ * Provides storage for session state.
5
+ */
6
+ import type { Session, CreateSessionInput } from '@defai.digital/contracts';
7
+ import type { SessionStore, SessionFilter } from './types.js';
8
+ /**
9
+ * In-memory session store implementation
10
+ */
11
+ export declare class InMemorySessionStore implements SessionStore {
12
+ private readonly sessions;
13
+ /**
14
+ * Create a new session
15
+ */
16
+ create(input: CreateSessionInput): Promise<Session>;
17
+ /**
18
+ * Get a session by ID
19
+ */
20
+ get(sessionId: string): Promise<Session | undefined>;
21
+ /**
22
+ * Update a session
23
+ */
24
+ update(sessionId: string, session: Session): Promise<void>;
25
+ /**
26
+ * Delete a session
27
+ */
28
+ delete(sessionId: string): Promise<void>;
29
+ /**
30
+ * List sessions with optional filters
31
+ */
32
+ list(filter?: SessionFilter): Promise<Session[]>;
33
+ /**
34
+ * Find active session for an agent
35
+ */
36
+ findActiveForAgent(agentId: string, workspace?: string): Promise<Session | undefined>;
37
+ /**
38
+ * Apply a governance policy to a session
39
+ */
40
+ applyPolicy(sessionId: string, policyId: string): Promise<Session>;
41
+ /**
42
+ * Get applied policies for a session
43
+ */
44
+ getAppliedPolicies(sessionId: string): Promise<string[]>;
45
+ /**
46
+ * Clear all sessions (useful for testing)
47
+ */
48
+ clear(): void;
49
+ /**
50
+ * Get the count of sessions
51
+ */
52
+ get size(): number;
53
+ }
54
+ /**
55
+ * Session version conflict error
56
+ */
57
+ export declare class SessionVersionConflictError extends Error {
58
+ readonly sessionId: string;
59
+ readonly expectedVersion: number;
60
+ readonly actualVersion: number;
61
+ constructor(sessionId: string, expectedVersion: number, actualVersion: number);
62
+ }
63
+ /**
64
+ * Creates a new in-memory session store
65
+ */
66
+ export declare function createSessionStore(): SessionStore;
67
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,OAAO,EACP,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9D;;GAEG;AACH,qBAAa,oBAAqB,YAAW,YAAY;IACvD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;IAEvD;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IA6BzD;;OAEG;IACG,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAI1D;;OAEG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBhE;;OAEG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9C;;OAEG;IACG,IAAI,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAkDtD;;OAEG;IACG,kBAAkB,CACtB,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAsB/B;;OAEG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAwBxE;;OAEG;IACG,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAQ9D;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF;AAED;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,KAAK;aAElC,SAAS,EAAE,MAAM;aACjB,eAAe,EAAE,MAAM;aACvB,aAAa,EAAE,MAAM;gBAFrB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,MAAM;CAOxC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CAEjD"}
package/dist/store.js ADDED
@@ -0,0 +1,188 @@
1
+ /**
2
+ * Session Store Implementation
3
+ *
4
+ * Provides storage for session state.
5
+ */
6
+ /**
7
+ * In-memory session store implementation
8
+ */
9
+ export class InMemorySessionStore {
10
+ sessions = new Map();
11
+ /**
12
+ * Create a new session
13
+ */
14
+ async create(input) {
15
+ const now = new Date().toISOString();
16
+ const sessionId = crypto.randomUUID();
17
+ const session = {
18
+ sessionId,
19
+ initiator: input.initiator,
20
+ task: input.task,
21
+ participants: [
22
+ {
23
+ agentId: input.initiator,
24
+ role: 'initiator',
25
+ joinedAt: now,
26
+ tasks: [],
27
+ },
28
+ ],
29
+ status: 'active',
30
+ createdAt: now,
31
+ updatedAt: now,
32
+ version: 1,
33
+ workspace: input.workspace,
34
+ metadata: input.metadata,
35
+ appliedPolicies: [],
36
+ };
37
+ this.sessions.set(sessionId, session);
38
+ return session;
39
+ }
40
+ /**
41
+ * Get a session by ID
42
+ */
43
+ async get(sessionId) {
44
+ return this.sessions.get(sessionId);
45
+ }
46
+ /**
47
+ * Update a session
48
+ */
49
+ async update(sessionId, session) {
50
+ if (!this.sessions.has(sessionId)) {
51
+ throw new Error(`Session ${sessionId} not found`);
52
+ }
53
+ // Check version for optimistic concurrency
54
+ const existing = this.sessions.get(sessionId);
55
+ if (existing.version !== session.version - 1) {
56
+ throw new SessionVersionConflictError(sessionId, existing.version, session.version);
57
+ }
58
+ this.sessions.set(sessionId, {
59
+ ...session,
60
+ updatedAt: new Date().toISOString(),
61
+ });
62
+ }
63
+ /**
64
+ * Delete a session
65
+ */
66
+ async delete(sessionId) {
67
+ this.sessions.delete(sessionId);
68
+ }
69
+ /**
70
+ * List sessions with optional filters
71
+ */
72
+ async list(filter) {
73
+ let sessions = Array.from(this.sessions.values());
74
+ if (filter !== undefined) {
75
+ if (filter.status !== undefined) {
76
+ sessions = sessions.filter((s) => s.status === filter.status);
77
+ }
78
+ if (filter.initiator !== undefined) {
79
+ sessions = sessions.filter((s) => s.initiator === filter.initiator);
80
+ }
81
+ if (filter.participant !== undefined) {
82
+ sessions = sessions.filter((s) => s.participants.some((p) => p.agentId === filter.participant));
83
+ }
84
+ if (filter.workspace !== undefined) {
85
+ sessions = sessions.filter((s) => s.workspace === filter.workspace);
86
+ }
87
+ if (filter.createdAfter !== undefined) {
88
+ const after = new Date(filter.createdAfter).getTime();
89
+ sessions = sessions.filter((s) => new Date(s.createdAt).getTime() > after);
90
+ }
91
+ if (filter.createdBefore !== undefined) {
92
+ const before = new Date(filter.createdBefore).getTime();
93
+ sessions = sessions.filter((s) => new Date(s.createdAt).getTime() < before);
94
+ }
95
+ if (filter.limit !== undefined) {
96
+ sessions = sessions.slice(0, filter.limit);
97
+ }
98
+ }
99
+ // Sort by createdAt descending
100
+ sessions.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
101
+ return sessions;
102
+ }
103
+ /**
104
+ * Find active session for an agent
105
+ */
106
+ async findActiveForAgent(agentId, workspace) {
107
+ for (const session of this.sessions.values()) {
108
+ if (session.status !== 'active') {
109
+ continue;
110
+ }
111
+ if (workspace !== undefined && session.workspace !== workspace) {
112
+ continue;
113
+ }
114
+ const isParticipant = session.participants.some((p) => p.agentId === agentId && p.leftAt === undefined);
115
+ if (isParticipant) {
116
+ return session;
117
+ }
118
+ }
119
+ return undefined;
120
+ }
121
+ /**
122
+ * Apply a governance policy to a session
123
+ */
124
+ async applyPolicy(sessionId, policyId) {
125
+ const session = this.sessions.get(sessionId);
126
+ if (session === undefined) {
127
+ throw new Error(`Session ${sessionId} not found`);
128
+ }
129
+ // Check if policy already applied
130
+ const appliedPolicies = session.appliedPolicies ?? [];
131
+ if (appliedPolicies.includes(policyId)) {
132
+ return session; // Already applied, return as-is
133
+ }
134
+ // Apply policy and increment version
135
+ const updatedSession = {
136
+ ...session,
137
+ appliedPolicies: [...appliedPolicies, policyId],
138
+ updatedAt: new Date().toISOString(),
139
+ version: session.version + 1,
140
+ };
141
+ this.sessions.set(sessionId, updatedSession);
142
+ return updatedSession;
143
+ }
144
+ /**
145
+ * Get applied policies for a session
146
+ */
147
+ async getAppliedPolicies(sessionId) {
148
+ const session = this.sessions.get(sessionId);
149
+ if (session === undefined) {
150
+ throw new Error(`Session ${sessionId} not found`);
151
+ }
152
+ return session.appliedPolicies ?? [];
153
+ }
154
+ /**
155
+ * Clear all sessions (useful for testing)
156
+ */
157
+ clear() {
158
+ this.sessions.clear();
159
+ }
160
+ /**
161
+ * Get the count of sessions
162
+ */
163
+ get size() {
164
+ return this.sessions.size;
165
+ }
166
+ }
167
+ /**
168
+ * Session version conflict error
169
+ */
170
+ export class SessionVersionConflictError extends Error {
171
+ sessionId;
172
+ expectedVersion;
173
+ actualVersion;
174
+ constructor(sessionId, expectedVersion, actualVersion) {
175
+ super(`Version conflict for session ${sessionId}: expected ${expectedVersion}, got ${actualVersion}`);
176
+ this.sessionId = sessionId;
177
+ this.expectedVersion = expectedVersion;
178
+ this.actualVersion = actualVersion;
179
+ this.name = 'SessionVersionConflictError';
180
+ }
181
+ }
182
+ /**
183
+ * Creates a new in-memory session store
184
+ */
185
+ export function createSessionStore() {
186
+ return new InMemorySessionStore();
187
+ }
188
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Session Domain Types
3
+ */
4
+ import { type Session, type SessionTask, type SessionStatus, type SessionEvent, type CreateSessionInput, type JoinSessionInput, type StartTaskInput, type CompleteTaskInput, type FailTaskInput, type RunRecord, type HistoryQuery } from '@defai.digital/contracts';
5
+ /**
6
+ * Session store interface
7
+ */
8
+ export interface SessionStore {
9
+ /**
10
+ * Create a new session
11
+ */
12
+ create(input: CreateSessionInput): Promise<Session>;
13
+ /**
14
+ * Get a session by ID
15
+ */
16
+ get(sessionId: string): Promise<Session | undefined>;
17
+ /**
18
+ * Update a session
19
+ */
20
+ update(sessionId: string, session: Session): Promise<void>;
21
+ /**
22
+ * Delete a session
23
+ */
24
+ delete(sessionId: string): Promise<void>;
25
+ /**
26
+ * List sessions with optional filters
27
+ */
28
+ list(filter?: SessionFilter): Promise<Session[]>;
29
+ /**
30
+ * Find active session for an agent
31
+ */
32
+ findActiveForAgent(agentId: string, workspace?: string): Promise<Session | undefined>;
33
+ /**
34
+ * Apply a governance policy to a session
35
+ */
36
+ applyPolicy(sessionId: string, policyId: string): Promise<Session>;
37
+ /**
38
+ * Get applied policies for a session
39
+ */
40
+ getAppliedPolicies(sessionId: string): Promise<string[]>;
41
+ }
42
+ /**
43
+ * Filter options for listing sessions
44
+ */
45
+ export interface SessionFilter {
46
+ status?: SessionStatus;
47
+ initiator?: string;
48
+ participant?: string;
49
+ workspace?: string;
50
+ createdAfter?: string;
51
+ createdBefore?: string;
52
+ limit?: number;
53
+ }
54
+ /**
55
+ * Session manager interface
56
+ */
57
+ export interface SessionManager {
58
+ /**
59
+ * Create a new session
60
+ */
61
+ createSession(input: CreateSessionInput): Promise<Session>;
62
+ /**
63
+ * Get a session by ID
64
+ */
65
+ getSession(sessionId: string): Promise<Session | undefined>;
66
+ /**
67
+ * Join an existing session
68
+ */
69
+ joinSession(input: JoinSessionInput): Promise<Session>;
70
+ /**
71
+ * Leave a session
72
+ */
73
+ leaveSession(sessionId: string, agentId: string): Promise<Session>;
74
+ /**
75
+ * Start a task within a session
76
+ */
77
+ startTask(input: StartTaskInput): Promise<SessionTask>;
78
+ /**
79
+ * Complete a task
80
+ */
81
+ completeTask(input: CompleteTaskInput): Promise<SessionTask>;
82
+ /**
83
+ * Fail a task
84
+ */
85
+ failTask(input: FailTaskInput): Promise<SessionTask>;
86
+ /**
87
+ * Complete a session
88
+ */
89
+ completeSession(sessionId: string, summary?: string): Promise<Session>;
90
+ /**
91
+ * Fail a session
92
+ */
93
+ failSession(sessionId: string, error: SessionFailure): Promise<Session>;
94
+ /**
95
+ * List sessions
96
+ */
97
+ listSessions(filter?: SessionFilter): Promise<Session[]>;
98
+ /**
99
+ * Get run history across all sessions
100
+ * Aggregates tasks from all participants across sessions
101
+ */
102
+ getRunHistory(options?: HistoryQuery): Promise<RunRecord[]>;
103
+ /**
104
+ * Count active sessions
105
+ */
106
+ countActiveSessions(): Promise<number>;
107
+ }
108
+ /**
109
+ * Session failure info
110
+ * Matches SessionErrorSchema from contracts
111
+ */
112
+ export interface SessionFailure {
113
+ code: string;
114
+ message: string;
115
+ taskId?: string;
116
+ retryable?: boolean;
117
+ details?: Record<string, unknown>;
118
+ }
119
+ /**
120
+ * Session event handler
121
+ */
122
+ export type SessionEventHandler = (event: SessionEvent) => void | Promise<void>;
123
+ /**
124
+ * Session event emitter interface
125
+ */
126
+ export interface SessionEventEmitter {
127
+ /**
128
+ * Subscribe to session events
129
+ */
130
+ on(type: SessionEvent['type'] | '*', handler: SessionEventHandler): void;
131
+ /**
132
+ * Unsubscribe from session events
133
+ */
134
+ off(type: SessionEvent['type'] | '*', handler: SessionEventHandler): void;
135
+ /**
136
+ * Emit a session event
137
+ */
138
+ emit(event: SessionEvent): void;
139
+ }
140
+ /**
141
+ * Session domain configuration
142
+ */
143
+ export interface SessionDomainConfig {
144
+ maxParticipants: number;
145
+ maxTasksPerParticipant: number;
146
+ sessionTimeout: number;
147
+ eventBufferSize: number;
148
+ }
149
+ /**
150
+ * Default session domain configuration
151
+ */
152
+ export declare const DEFAULT_SESSION_DOMAIN_CONFIG: SessionDomainConfig;
153
+ export type { RunRecord, RunStatus, HistoryQuery } from '@defai.digital/contracts';
154
+ export type RunHistoryOptions = HistoryQuery;
155
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Session Domain Types
3
+ */
4
+ import {
5
+ // Constants
6
+ TIMEOUT_SESSION, LIMIT_EVENT_BUFFER, } from '@defai.digital/contracts';
7
+ /**
8
+ * Default session domain configuration
9
+ */
10
+ export const DEFAULT_SESSION_DOMAIN_CONFIG = {
11
+ maxParticipants: 10,
12
+ maxTasksPerParticipant: 50,
13
+ sessionTimeout: TIMEOUT_SESSION,
14
+ eventBufferSize: LIMIT_EVENT_BUFFER,
15
+ };
16
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO;AAaL,YAAY;AACZ,eAAe,EACf,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AA6KlC;;GAEG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAwB;IAChE,eAAe,EAAE,EAAE;IACnB,sBAAsB,EAAE,EAAE;IAC1B,cAAc,EAAE,eAAe;IAC/B,eAAe,EAAE,kBAAkB;CACpC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@defai.digital/session-domain",
3
+ "version": "13.0.3",
4
+ "type": "module",
5
+ "description": "Session lifecycle management for AutomatosX",
6
+ "license": "Apache-2.0",
7
+ "author": "DEFAI Private Limited",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/defai-digital/automatosx.git",
11
+ "directory": "packages/core/session-domain"
12
+ },
13
+ "homepage": "https://github.com/defai-digital/automatosx#readme",
14
+ "bugs": {
15
+ "url": "https://github.com/defai-digital/automatosx/issues"
16
+ },
17
+ "main": "dist/index.js",
18
+ "types": "dist/index.d.ts",
19
+ "exports": {
20
+ ".": {
21
+ "types": "./dist/index.d.ts",
22
+ "import": "./dist/index.js"
23
+ }
24
+ },
25
+ "files": [
26
+ "dist",
27
+ "src"
28
+ ],
29
+ "engines": {
30
+ "node": ">=20.0.0"
31
+ },
32
+ "publishConfig": {
33
+ "access": "public"
34
+ },
35
+ "dependencies": {
36
+ "@defai.digital/contracts": "13.0.3"
37
+ },
38
+ "devDependencies": {
39
+ "typescript": "^5.7.2"
40
+ },
41
+ "peerDependencies": {
42
+ "zod": "^3.23.0"
43
+ },
44
+ "scripts": {
45
+ "build": "tsc --build",
46
+ "clean": "rm -rf dist"
47
+ }
48
+ }
package/src/index.ts ADDED
@@ -0,0 +1,75 @@
1
+ /**
2
+ * @defai.digital/session-domain
3
+ *
4
+ * Session lifecycle management for AutomatosX.
5
+ * Tracks multi-agent collaboration, task progress, and shared state.
6
+ */
7
+
8
+ // Types
9
+ export type {
10
+ SessionStore,
11
+ SessionFilter,
12
+ SessionManager,
13
+ SessionFailure,
14
+ SessionEventHandler,
15
+ SessionEventEmitter,
16
+ SessionDomainConfig,
17
+ RunRecord,
18
+ RunHistoryOptions,
19
+ RunStatus,
20
+ } from './types.js';
21
+
22
+ export { DEFAULT_SESSION_DOMAIN_CONFIG } from './types.js';
23
+
24
+ // Store
25
+ export {
26
+ InMemorySessionStore,
27
+ SessionVersionConflictError,
28
+ createSessionStore,
29
+ } from './store.js';
30
+
31
+ // Manager
32
+ export {
33
+ DefaultSessionManager,
34
+ SessionError,
35
+ createSessionManager,
36
+ } from './manager.js';
37
+
38
+ // Re-export contract types for convenience
39
+ export type {
40
+ Session,
41
+ SessionTask,
42
+ SessionParticipant,
43
+ SessionStatus,
44
+ TaskStatus,
45
+ ParticipantRole,
46
+ SessionEvent,
47
+ SessionEventType,
48
+ SessionEventPayload,
49
+ SessionError as SessionErrorType,
50
+ CreateSessionInput,
51
+ JoinSessionInput,
52
+ StartTaskInput,
53
+ CompleteTaskInput,
54
+ FailTaskInput,
55
+ } from '@defai.digital/contracts';
56
+
57
+ export {
58
+ SessionSchema,
59
+ SessionTaskSchema,
60
+ SessionParticipantSchema,
61
+ SessionStatusSchema,
62
+ TaskStatusSchema,
63
+ ParticipantRoleSchema,
64
+ SessionEventSchema,
65
+ SessionErrorCode,
66
+ SESSION_TRANSITIONS,
67
+ TASK_TRANSITIONS,
68
+ validateSession,
69
+ safeValidateSession,
70
+ isValidSessionTransition,
71
+ isValidTaskTransition,
72
+ validateCreateSessionInput,
73
+ validateJoinSessionInput,
74
+ validateStartTaskInput,
75
+ } from '@defai.digital/contracts';