@adhd/agent-store-runtime 2.2.1 → 2.2.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.
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adhd/agent-store-runtime",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.3",
|
|
4
4
|
"description": "Runtime state stores for sessions, tasks, and usage tracking — extracted from agent-mcp",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
}
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@adhd/agent-base-types": "^2.3.
|
|
16
|
+
"@adhd/agent-base-types": "^2.3.3",
|
|
17
17
|
"better-sqlite3": "12.10.0",
|
|
18
18
|
"drizzle-orm": "0.45.2",
|
|
19
19
|
"uuid": "14.0.0",
|
|
@@ -40,7 +40,7 @@ export class UsageClient {
|
|
|
40
40
|
}
|
|
41
41
|
markModelCallEnd(taskId) {
|
|
42
42
|
const acc = this.accumulators.get(taskId);
|
|
43
|
-
if (
|
|
43
|
+
if (acc?.modelCallStartMs === undefined)
|
|
44
44
|
return;
|
|
45
45
|
acc.totalModelMs += Date.now() - acc.modelCallStartMs;
|
|
46
46
|
acc.modelCallStartMs = undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage-client.js","sourceRoot":"","sources":["../../../src/runtime/usage-client.ts"],"names":[],"mappings":"AAuBA,MAAM,OAAO,WAAW;IAGO;IAFZ,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;IAE/D,YAA6B,EAAW;QAAX,OAAE,GAAF,EAAE,CAAS;IAAG,CAAC;IAE5C,uEAAuE;IAEvE,MAAM,CAAC,MAAc,EAAE,IAAsB;QAC3C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE;YAC5B,MAAM;YACN,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;YACvB,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,CAAC;YACf,WAAW,EAAE,CAAC;YACd,UAAU,EAAE,CAAC;YACb,YAAY,EAAE,CAAC;YACf,SAAS,EAAE,IAAI,GAAG,EAAE;SACrB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,MAAc;QACnB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,uEAAuE;IAEvE,eAAe,CAAC,MAAc,EAAE,KAA6B;QAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,IAAI,KAAK,EAAE,CAAC;YACV,GAAG,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;YAC1C,GAAG,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;YAC5C,GAAG,CAAC,WAAW;gBACb,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,IAAI,CAAC,CAAC,CAAC;QACpE,CAAC;QACD,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,kBAAkB,CAAC,MAAc;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,GAAG;YAAE,GAAG,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7C,CAAC;IAED,gBAAgB,CAAC,MAAc;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,
|
|
1
|
+
{"version":3,"file":"usage-client.js","sourceRoot":"","sources":["../../../src/runtime/usage-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,28 @@ export declare class SessionStore {
|
|
|
14
14
|
read(id: string): Session;
|
|
15
15
|
getAgentDefinition(sessionId: string): AgentDefinition;
|
|
16
16
|
list(input: SessionListInput): Session[];
|
|
17
|
+
/**
|
|
18
|
+
* Close a session.
|
|
19
|
+
*
|
|
20
|
+
* The leading `read()` exists only to preserve `SESSION_NOT_FOUND` for a
|
|
21
|
+
* truly-absent session — a bare conditional UPDATE cannot distinguish
|
|
22
|
+
* "absent" from "already closed". The authoritative transition is the
|
|
23
|
+
* single UPDATE below: `WHERE id = ? AND status != 'closed'` folds the
|
|
24
|
+
* "already closed" guard into the same statement as the write, so of two
|
|
25
|
+
* concurrent closers exactly one observes a returned row and the other
|
|
26
|
+
* reliably raises `SESSION_CLOSED` — `closedAt` is written at most once.
|
|
27
|
+
*/
|
|
17
28
|
close(id: string): Session;
|
|
29
|
+
/**
|
|
30
|
+
* Clear a session's message history.
|
|
31
|
+
*
|
|
32
|
+
* The leading `read()` preserves `SESSION_NOT_FOUND`; the authoritative
|
|
33
|
+
* status guard then re-runs *inside* the same transaction as the DELETE.
|
|
34
|
+
* `behavior: 'immediate'` (`BEGIN IMMEDIATE`) takes SQLite's write lock at
|
|
35
|
+
* BEGIN rather than deferring it to the first write, so a concurrent
|
|
36
|
+
* `close()` cannot commit between the guard and the delete — the two can
|
|
37
|
+
* never interleave, and a closed session's context cannot be cleared.
|
|
38
|
+
*/
|
|
18
39
|
clearMessages(sessionId: string): number;
|
|
19
40
|
appendMessage(sessionId: string, message: Message): void;
|
|
20
41
|
getMessages(sessionId: string): Message[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../../src/store/session-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAIxE,OAAO,KAAK,EACV,eAAe,EACf,OAAO,EACP,OAAO,EACR,MAAM,0BAA0B,CAAC;AAKlC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAIjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;gBADN,EAAE,EAAE,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAChD,KAAK,CAAC,EAAE,aAAa,YAAA;IAGxC,MAAM,CAAC,KAAK,EAAE;QACZ,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,eAAe,CAAC;QACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,GAAG,OAAO;IA4BX,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAsBzB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe;IAiBtD,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,EAAE;IAiCxC,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../../src/store/session-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAIxE,OAAO,KAAK,EACV,eAAe,EACf,OAAO,EACP,OAAO,EACR,MAAM,0BAA0B,CAAC;AAKlC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAIjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;gBADN,EAAE,EAAE,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAChD,KAAK,CAAC,EAAE,aAAa,YAAA;IAGxC,MAAM,CAAC,KAAK,EAAE;QACZ,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,eAAe,CAAC;QACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,GAAG,OAAO;IA4BX,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAsBzB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe;IAiBtD,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,EAAE;IAiCxC;;;;;;;;;;OAUG;IACH,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IA0B1B;;;;;;;;;OASG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAuCxC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAiBxD,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE;CAiB1C;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAW1D;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,OAAO,EAAE,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,EAAE,CAsBX"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { and, eq } from 'drizzle-orm';
|
|
1
|
+
import { and, eq, ne } from 'drizzle-orm';
|
|
2
2
|
import { messagesTable, sessionsTable } from '../db/schema.js';
|
|
3
3
|
import { logger } from '../logger.js';
|
|
4
4
|
import { agentDefinitionStoredSchema, sessionSchema, } from '../validation/schemas.js';
|
|
@@ -88,35 +88,68 @@ export class SessionStore {
|
|
|
88
88
|
closedAt: row.closedAt ?? undefined,
|
|
89
89
|
}));
|
|
90
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* Close a session.
|
|
93
|
+
*
|
|
94
|
+
* The leading `read()` exists only to preserve `SESSION_NOT_FOUND` for a
|
|
95
|
+
* truly-absent session — a bare conditional UPDATE cannot distinguish
|
|
96
|
+
* "absent" from "already closed". The authoritative transition is the
|
|
97
|
+
* single UPDATE below: `WHERE id = ? AND status != 'closed'` folds the
|
|
98
|
+
* "already closed" guard into the same statement as the write, so of two
|
|
99
|
+
* concurrent closers exactly one observes a returned row and the other
|
|
100
|
+
* reliably raises `SESSION_CLOSED` — `closedAt` is written at most once.
|
|
101
|
+
*/
|
|
91
102
|
close(id) {
|
|
92
|
-
|
|
93
|
-
if (session.status === 'closed') {
|
|
94
|
-
throw new ToolError('SESSION_CLOSED', `Session '${id}' is already closed`);
|
|
95
|
-
}
|
|
103
|
+
this.read(id);
|
|
96
104
|
const now = nowIso();
|
|
97
|
-
this.db
|
|
105
|
+
const closed = this.db
|
|
98
106
|
.update(sessionsTable)
|
|
99
107
|
.set({
|
|
100
108
|
status: 'closed',
|
|
101
109
|
closedAt: now,
|
|
102
110
|
updatedAt: now,
|
|
103
111
|
})
|
|
104
|
-
.where(eq(sessionsTable.id, id))
|
|
105
|
-
.
|
|
112
|
+
.where(and(eq(sessionsTable.id, id), ne(sessionsTable.status, 'closed')))
|
|
113
|
+
.returning()
|
|
114
|
+
.get();
|
|
115
|
+
if (closed === undefined) {
|
|
116
|
+
throw new ToolError('SESSION_CLOSED', `Session '${id}' is already closed`);
|
|
117
|
+
}
|
|
106
118
|
logger.info({ sessionId: id }, 'Session closed');
|
|
107
119
|
return this.read(id);
|
|
108
120
|
}
|
|
121
|
+
/**
|
|
122
|
+
* Clear a session's message history.
|
|
123
|
+
*
|
|
124
|
+
* The leading `read()` preserves `SESSION_NOT_FOUND`; the authoritative
|
|
125
|
+
* status guard then re-runs *inside* the same transaction as the DELETE.
|
|
126
|
+
* `behavior: 'immediate'` (`BEGIN IMMEDIATE`) takes SQLite's write lock at
|
|
127
|
+
* BEGIN rather than deferring it to the first write, so a concurrent
|
|
128
|
+
* `close()` cannot commit between the guard and the delete — the two can
|
|
129
|
+
* never interleave, and a closed session's context cannot be cleared.
|
|
130
|
+
*/
|
|
109
131
|
clearMessages(sessionId) {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
132
|
+
this.read(sessionId);
|
|
133
|
+
const cleared = this.db.transaction((tx) => {
|
|
134
|
+
const row = tx
|
|
135
|
+
.select({ status: sessionsTable.status })
|
|
136
|
+
.from(sessionsTable)
|
|
137
|
+
.where(eq(sessionsTable.id, sessionId))
|
|
138
|
+
.get();
|
|
139
|
+
if (row === undefined) {
|
|
140
|
+
throw new ToolError('SESSION_NOT_FOUND', `Session '${sessionId}' not found`);
|
|
141
|
+
}
|
|
142
|
+
if (row.status === 'closed') {
|
|
143
|
+
throw new ToolError('SESSION_CLOSED', `Session '${sessionId}' is closed; cannot clear context`);
|
|
144
|
+
}
|
|
145
|
+
const result = tx
|
|
146
|
+
.delete(messagesTable)
|
|
147
|
+
.where(eq(messagesTable.sessionId, sessionId))
|
|
148
|
+
.run();
|
|
149
|
+
return result.changes;
|
|
150
|
+
}, { behavior: 'immediate' });
|
|
151
|
+
logger.info({ sessionId, cleared }, 'Session context cleared');
|
|
152
|
+
return cleared;
|
|
120
153
|
}
|
|
121
154
|
appendMessage(sessionId, message) {
|
|
122
155
|
this.db
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../../src/store/session-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../../src/store/session-store.ts"],"names":[],"mappings":"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"}
|