@moxt-ai/mobius 0.0.179 → 0.0.181
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/dist/acp/session-contracts.d.ts +4 -2
- package/dist/acp/session-contracts.d.ts.map +1 -1
- package/dist/acp/session-contracts.js.map +1 -1
- package/dist/acp/session-event-store-v2.d.ts +9 -8
- package/dist/acp/session-event-store-v2.d.ts.map +1 -1
- package/dist/acp/session-event-store-v2.js +59 -25
- package/dist/acp/session-event-store-v2.js.map +1 -1
- package/dist/acp/session-history.d.ts +3 -3
- package/dist/acp/session-history.d.ts.map +1 -1
- package/dist/acp/session-history.js +2 -1
- package/dist/acp/session-history.js.map +1 -1
- package/dist/acp/session-store.d.ts.map +1 -1
- package/dist/acp/session-store.js +2 -3
- package/dist/acp/session-store.js.map +1 -1
- package/dist/cli.js +99 -56
- package/dist/cli.js.map +4 -4
- package/dist/daemon-history-commands.d.ts.map +1 -1
- package/dist/daemon-history-commands.js +2 -2
- package/dist/daemon-history-commands.js.map +1 -1
- package/dist/daemon-observers.d.ts +3 -2
- package/dist/daemon-observers.d.ts.map +1 -1
- package/dist/daemon-observers.js.map +1 -1
- package/dist/index.js +96 -53
- package/dist/index.js.map +4 -4
- package/dist/relay-connection/session-event-publisher.d.ts +1 -1
- package/dist/relay-connection/session-event-publisher.js +1 -1
- package/dist/run-daemon.d.ts.map +1 -1
- package/dist/run-daemon.js +2 -3
- package/dist/run-daemon.js.map +1 -1
- package/dist/runtime.js +101 -58
- package/dist/runtime.js.map +4 -4
- package/dist/session-event-log-v2.d.ts +5 -5
- package/dist/session-event-log-v2.d.ts.map +1 -1
- package/dist/session-event-log-v2.js +6 -9
- package/dist/session-event-log-v2.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-history-commands.d.ts","sourceRoot":"","sources":["../src/daemon-history-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,0BAA0B,CAAC;AACnF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AACxF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AACpF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,wBAAsB,mCAAmC,CACrD,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,UAAU,CAAC,OAAO,kCAAkC,CAAC,EAC9D,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,yBAAyB,EACtC,KAAK,EAAE,UAAU,EACjB,WAAW,EAAE,0BAA0B,EACvC,QAAQ,EAAE,mBAAmB,EAC7B,UAAU,EAAE,uBAAuB,EACnC,MAAM,EAAE,WAAW,GACpB,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"daemon-history-commands.d.ts","sourceRoot":"","sources":["../src/daemon-history-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,0BAA0B,CAAC;AACnF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AACxF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AACpF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,wBAAsB,mCAAmC,CACrD,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,UAAU,CAAC,OAAO,kCAAkC,CAAC,EAC9D,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,yBAAyB,EACtC,KAAK,EAAE,UAAU,EACjB,WAAW,EAAE,0BAA0B,EACvC,QAAQ,EAAE,mBAAmB,EAC7B,UAAU,EAAE,uBAAuB,EACnC,MAAM,EAAE,WAAW,GACpB,OAAO,CAAC,IAAI,CAAC,CA0Ef"}
|
|
@@ -13,7 +13,7 @@ export async function executeSessionLiveHistoryV2PageLoad(socket, command, confi
|
|
|
13
13
|
const recovery = eventLogV2.promptRequestRecovery(command.sessionId);
|
|
14
14
|
const replay = await sessions.loadSessionEventsV2(loadOptions, command.eventLimit, command.cursor);
|
|
15
15
|
signal.throwIfAborted();
|
|
16
|
-
const events = replay.events.map((event, index) => eventLogV2.event(command.sessionId, replay.startPosition + index, event, "1970-01-01T00:00:00.000Z"));
|
|
16
|
+
const events = replay.events.map((event, index) => eventLogV2.event(command.sessionId, replay.sessionGenerationId, replay.startPosition + index, event, "1970-01-01T00:00:00.000Z"));
|
|
17
17
|
const tailCursor = events.at(-1)?.eventId ?? "";
|
|
18
18
|
audit.record({
|
|
19
19
|
commandId: command.requestId,
|
|
@@ -23,9 +23,9 @@ export async function executeSessionLiveHistoryV2PageLoad(socket, command, confi
|
|
|
23
23
|
send(socket, {
|
|
24
24
|
events: {
|
|
25
25
|
events: {
|
|
26
|
-
daemonGenerationId: eventLogV2.daemonGenerationId,
|
|
27
26
|
events,
|
|
28
27
|
nextCursor: replay.nextCursor,
|
|
28
|
+
sessionGenerationId: replay.sessionGenerationId,
|
|
29
29
|
tailCursor,
|
|
30
30
|
truncated: replay.truncated,
|
|
31
31
|
version: 2,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-history-commands.js","sourceRoot":"","sources":["../src/daemon-history-commands.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AAG3F,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAG/F,MAAM,CAAC,KAAK,UAAU,mCAAmC,CACrD,MAAiB,EACjB,OAA8D,EAC9D,MAAoB,EACpB,WAAsC,EACtC,KAAiB,EACjB,WAAuC,EACvC,QAA6B,EAC7B,UAAmC,EACnC,MAAmB;IAEnB,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,yBAAyB,CAC5C,WAAW,EACX,MAAM,CAAC,SAAS,EAChB,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,sBAAsB,EAC9B,MAAM,CACT,CAAC;QACF,MAAM,WAAW,GAAG;YAChB,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB;YACrD,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YAC3C,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM;SACT,CAAC;QACF,MAAM,QAAQ,GAAG,UAAU,CAAC,qBAAqB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACnG,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAC9C,UAAU,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"daemon-history-commands.js","sourceRoot":"","sources":["../src/daemon-history-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { type AgentContentEvent, type RecordedSessionEvent, type SessionCommandsUpdatedEvent, type SessionConfigUpdatedEvent, type SessionElicitationRequestedEvent, type SessionElicitationResolvedEvent, type SessionEventPayloadV2, type SessionInfoUpdatedEvent, type SessionPermissionRequestedEvent, type SessionPermissionResolvedEvent, type SessionUsageUpdatedEvent } from "@moxt-ai/mobius-protocol";
|
|
2
2
|
import { WebSocket } from "undici";
|
|
3
3
|
import type { AcpSessionObserver } from "./acp/agent-runtime-manager.ts";
|
|
4
|
+
import type { AcpSessionEventPositionV2 } from "./acp/session-event-store-v2.ts";
|
|
4
5
|
import { type AgentInstallation, type InstallationAudit, type InstallationObserver } from "./agent-installation/agent-installation-manager.ts";
|
|
5
6
|
import type { AuditStore } from "./audit/audit-store.ts";
|
|
6
7
|
export declare class DaemonAcpObserver implements AcpSessionObserver {
|
|
7
8
|
#private;
|
|
8
|
-
constructor(record: (sessionId: string, event: RecordedSessionEvent) => void, recordV2?: (sessionId: string, event: SessionEventPayloadV2, position:
|
|
9
|
-
readonly onSessionEventV2: (sessionId: string, event: SessionEventPayloadV2, position:
|
|
9
|
+
constructor(record: (sessionId: string, event: RecordedSessionEvent) => void, recordV2?: (sessionId: string, event: SessionEventPayloadV2, position: AcpSessionEventPositionV2) => void);
|
|
10
|
+
readonly onSessionEventV2: (sessionId: string, event: SessionEventPayloadV2, position: AcpSessionEventPositionV2) => Promise<void>;
|
|
10
11
|
readonly onCommands: (event: SessionCommandsUpdatedEvent) => Promise<void>;
|
|
11
12
|
readonly onConfig: (event: SessionConfigUpdatedEvent) => Promise<void>;
|
|
12
13
|
readonly onContent: (event: AgentContentEvent) => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-observers.d.ts","sourceRoot":"","sources":["../src/daemon-observers.ts"],"names":[],"mappings":"AAAA,OAAO,EAMH,KAAK,iBAAiB,EAEtB,KAAK,oBAAoB,EACzB,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAC9B,KAAK,gCAAgC,EACrC,KAAK,+BAA+B,EACpC,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,+BAA+B,EACpC,KAAK,8BAA8B,EACnC,KAAK,wBAAwB,EAChC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EACH,KAAK,iBAAiB,EAGtB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAI5B,MAAM,oDAAoD,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGzD,qBAAa,iBAAkB,YAAW,kBAAkB;;IAIxD,YACI,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,KAAK,IAAI,EAChE,QAAQ,GAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"daemon-observers.d.ts","sourceRoot":"","sources":["../src/daemon-observers.ts"],"names":[],"mappings":"AAAA,OAAO,EAMH,KAAK,iBAAiB,EAEtB,KAAK,oBAAoB,EACzB,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAC9B,KAAK,gCAAgC,EACrC,KAAK,+BAA+B,EACpC,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,+BAA+B,EACpC,KAAK,8BAA8B,EACnC,KAAK,wBAAwB,EAChC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,EACH,KAAK,iBAAiB,EAGtB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAI5B,MAAM,oDAAoD,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGzD,qBAAa,iBAAkB,YAAW,kBAAkB;;IAIxD,YACI,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,KAAK,IAAI,EAChE,QAAQ,GAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,yBAAyB,KAAK,IACvF,EAIhB;IAED,QAAQ,CAAC,gBAAgB,cACV,MAAM,SACV,qBAAqB,YAClB,yBAAyB,KACpC,OAAO,CAAC,IAAI,CAAC,CAGd;IAEF,QAAQ,CAAC,UAAU,UAAW,2BAA2B,KAAG,OAAO,CAAC,IAAI,CAAC,CAGvE;IAEF,QAAQ,CAAC,QAAQ,UAAW,yBAAyB,KAAG,OAAO,CAAC,IAAI,CAAC,CAGnE;IAEF,QAAQ,CAAC,SAAS,UAAW,iBAAiB,KAAG,OAAO,CAAC,IAAI,CAAC,CAG5D;IAEF,QAAQ,CAAC,aAAa,UAAW,gCAAgC,KAAG,OAAO,CAAC,IAAI,CAAC,CAG/E;IAEF,QAAQ,CAAC,qBAAqB,UAAW,+BAA+B,KAAG,OAAO,CAAC,IAAI,CAAC,CAGtF;IAEF,QAAQ,CAAC,MAAM,UAAW,uBAAuB,KAAG,OAAO,CAAC,IAAI,CAAC,CAG/D;IAEF,QAAQ,CAAC,YAAY,UAAW,+BAA+B,KAAG,OAAO,CAAC,IAAI,CAAC,CAG7E;IAEF,QAAQ,CAAC,oBAAoB,UAAW,8BAA8B,KAAG,OAAO,CAAC,IAAI,CAAC,CAGpF;IAEF,QAAQ,CAAC,OAAO,UAAW,wBAAwB,KAAG,OAAO,CAAC,IAAI,CAAC,CAGjE;CACL;AAED,qBAAa,uBAAwB,YAAW,iBAAiB;;IAG7D,YAAY,KAAK,EAAE,UAAU,EAE5B;IAED,QAAQ,CAAC,MAAM,UACJ,MAAM,aACF,MAAM,WACR,MAAM,YACN,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAC1C,IAAI,CAOL;CACL;AAED,qBAAa,0BAA2B,YAAW,oBAAoB;;IAInE,QAAQ,CAAC,OAAO,WAAY,SAAS,KAAG,IAAI,CAE1C;IAEF,QAAQ,CAAC,UAAU,WAAY,SAAS,KAAG,IAAI,CAI7C;IAYF,QAAQ,CAAC,OAAO,UAAW,iBAAiB,KAAG,OAAO,CAAC,IAAI,CAAC,CAqD1D;CACL"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-observers.js","sourceRoot":"","sources":["../src/daemon-observers.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,4BAA4B,EAC5B,4BAA4B,EAC5B,yBAAyB,EACzB,2BAA2B,EAC3B,0BAA0B,GAa7B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"daemon-observers.js","sourceRoot":"","sources":["../src/daemon-observers.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -21316,6 +21316,7 @@ var sessionEventFieldsV2 = {
|
|
|
21316
21316
|
position: positionSchema,
|
|
21317
21317
|
provenance: provenanceSchema,
|
|
21318
21318
|
recordedAt: external_exports.iso.datetime({ offset: true }),
|
|
21319
|
+
sessionGenerationId: identifierStringSchema,
|
|
21319
21320
|
sessionId: identifierStringSchema
|
|
21320
21321
|
};
|
|
21321
21322
|
var sessionEventV2Schema = external_exports.discriminatedUnion("type", [
|
|
@@ -21371,9 +21372,9 @@ var mobiusSessionExportV2Schema = external_exports.object({
|
|
|
21371
21372
|
}).readonly();
|
|
21372
21373
|
var sessionEventEnvelopeV2Schema = external_exports.object({ events: sessionEventBatchV2Schema, kind: external_exports.literal(SESSION_EVENT_V2_KIND) }).readonly();
|
|
21373
21374
|
var sessionEventLogPageV2Schema = external_exports.object({
|
|
21374
|
-
daemonGenerationId: identifierStringSchema,
|
|
21375
21375
|
events: external_exports.array(sessionEventV2Schema).max(MAX_EVENT_COUNT).readonly(),
|
|
21376
21376
|
nextCursor: external_exports.string().min(1).max(512).nullable(),
|
|
21377
|
+
sessionGenerationId: identifierStringSchema,
|
|
21377
21378
|
tailCursor: external_exports.string().max(512),
|
|
21378
21379
|
truncated: external_exports.boolean(),
|
|
21379
21380
|
version: external_exports.literal(2)
|
|
@@ -24244,7 +24245,8 @@ var AcpHistoryReplay = class {
|
|
|
24244
24245
|
record = async (update, rawUpdate, onRecorded = () => Promise.resolve()) => {
|
|
24245
24246
|
const position = this.#events.append(this.#sessionId, { payload: rawUpdate, type: "acp" });
|
|
24246
24247
|
await onRecorded(position);
|
|
24247
|
-
|
|
24248
|
+
await this.#applyUpdate(update, position.position);
|
|
24249
|
+
return position.position;
|
|
24248
24250
|
};
|
|
24249
24251
|
#applyUpdate = async (update, position) => {
|
|
24250
24252
|
if (update.sessionUpdate === "agent_thought_chunk") {
|
|
@@ -24983,9 +24985,6 @@ var AcpSessionInteractions = class {
|
|
|
24983
24985
|
};
|
|
24984
24986
|
};
|
|
24985
24987
|
|
|
24986
|
-
// src/acp/session-store.ts
|
|
24987
|
-
import { randomUUID } from "node:crypto";
|
|
24988
|
-
|
|
24989
24988
|
// ../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@cloudflare+workers-types@5.20260918.1_@types+better-sqlite3@7.6_f872c171b7e1945bb1fa42180063dab2/node_modules/drizzle-orm/entity.js
|
|
24990
24989
|
var entityKind = /* @__PURE__ */ Symbol.for("drizzle:entityKind");
|
|
24991
24990
|
function is(value, type) {
|
|
@@ -29757,6 +29756,9 @@ var acpSession = sqliteTable("acp_session", {
|
|
|
29757
29756
|
updatedAt: text("updated_at").notNull()
|
|
29758
29757
|
});
|
|
29759
29758
|
|
|
29759
|
+
// src/acp/session-event-store-v2.ts
|
|
29760
|
+
import { randomUUID } from "node:crypto";
|
|
29761
|
+
|
|
29760
29762
|
// src/schema/session-event-cache/session-event-v2.ts
|
|
29761
29763
|
var sessionEventV2 = sqliteTable(
|
|
29762
29764
|
"session_event_v2",
|
|
@@ -29779,7 +29781,7 @@ var sessionEventV2 = sqliteTable(
|
|
|
29779
29781
|
// src/acp/session-event-store-v2.ts
|
|
29780
29782
|
var HOT_EVENT_HIGH_WATER_MARK = 256;
|
|
29781
29783
|
var HOT_EVENT_RETENTION = 128;
|
|
29782
|
-
function eventPage(eventCount, eventLimit, cursor, read) {
|
|
29784
|
+
function eventPage(sessionGenerationId, eventCount, eventLimit, cursor, read) {
|
|
29783
29785
|
const parsedCursor = cursor === null ? eventCount : Number(cursor);
|
|
29784
29786
|
if (!Number.isSafeInteger(parsedCursor) || parsedCursor < 0 || parsedCursor > eventCount) {
|
|
29785
29787
|
throw new Error("The native event cursor is invalid");
|
|
@@ -29789,36 +29791,46 @@ function eventPage(eventCount, eventLimit, cursor, read) {
|
|
|
29789
29791
|
return {
|
|
29790
29792
|
events: read(startPosition + 1, endPosition),
|
|
29791
29793
|
nextCursor: startPosition === 0 ? null : startPosition.toString(),
|
|
29794
|
+
sessionGenerationId,
|
|
29792
29795
|
startPosition: startPosition + 1,
|
|
29793
29796
|
truncated: startPosition > 0
|
|
29794
29797
|
};
|
|
29795
29798
|
}
|
|
29796
29799
|
var MemoryAcpSessionEventStoreV2 = class {
|
|
29797
|
-
generationId;
|
|
29798
29800
|
#events = /* @__PURE__ */ new Map();
|
|
29799
|
-
|
|
29800
|
-
this.
|
|
29801
|
-
|
|
29801
|
+
#session = (sessionId) => {
|
|
29802
|
+
const session = this.#events.get(sessionId) ?? {
|
|
29803
|
+
hot: [],
|
|
29804
|
+
nextPosition: 1,
|
|
29805
|
+
sessionGenerationId: randomUUID()
|
|
29806
|
+
};
|
|
29807
|
+
this.#events.set(sessionId, session);
|
|
29808
|
+
return session;
|
|
29809
|
+
};
|
|
29802
29810
|
append = (sessionId, event) => {
|
|
29803
|
-
const
|
|
29804
|
-
|
|
29805
|
-
|
|
29806
|
-
|
|
29811
|
+
const session = this.#session(sessionId);
|
|
29812
|
+
const position = session.nextPosition;
|
|
29813
|
+
session.hot.push({ event, position });
|
|
29814
|
+
session.nextPosition += 1;
|
|
29815
|
+
return { position, sessionGenerationId: session.sessionGenerationId };
|
|
29807
29816
|
};
|
|
29808
29817
|
close = () => this.#events.clear();
|
|
29809
29818
|
page = (sessionId, eventLimit, cursor) => {
|
|
29810
|
-
const
|
|
29819
|
+
const session = this.#session(sessionId);
|
|
29811
29820
|
return eventPage(
|
|
29812
|
-
|
|
29821
|
+
session.sessionGenerationId,
|
|
29822
|
+
session.nextPosition - 1,
|
|
29813
29823
|
eventLimit,
|
|
29814
29824
|
cursor,
|
|
29815
|
-
(
|
|
29825
|
+
(start, end) => session.hot.slice(start - 1, end).map(({ event }) => event)
|
|
29816
29826
|
);
|
|
29817
29827
|
};
|
|
29818
29828
|
remove = (sessionId) => {
|
|
29819
29829
|
this.#events.delete(sessionId);
|
|
29820
29830
|
};
|
|
29821
|
-
reset =
|
|
29831
|
+
reset = (sessionId) => {
|
|
29832
|
+
this.#events.set(sessionId, { hot: [], nextPosition: 1, sessionGenerationId: randomUUID() });
|
|
29833
|
+
};
|
|
29822
29834
|
};
|
|
29823
29835
|
var cachedEventRowSchema = external_exports.object({ eventJson: external_exports.string(), position: external_exports.number().int().positive() });
|
|
29824
29836
|
function decodeCachedEvent(value) {
|
|
@@ -29829,20 +29841,19 @@ function decodeCachedEvent(value) {
|
|
|
29829
29841
|
position: "1",
|
|
29830
29842
|
provenance: { kind: "original" },
|
|
29831
29843
|
recordedAt: "1970-01-01T00:00:00.000Z",
|
|
29844
|
+
sessionGenerationId: "cached-generation",
|
|
29832
29845
|
sessionId: "cached-session"
|
|
29833
29846
|
});
|
|
29834
29847
|
return event.type === "acp" ? { payload: event.payload, type: event.type } : { payload: event.payload, type: event.type };
|
|
29835
29848
|
}
|
|
29836
29849
|
var CachedAcpSessionEventStoreV2 = class {
|
|
29837
|
-
generationId;
|
|
29838
29850
|
#database;
|
|
29839
29851
|
#ignoredPersistedSessions = /* @__PURE__ */ new Set();
|
|
29840
29852
|
#localDatabase;
|
|
29841
29853
|
#sessions = /* @__PURE__ */ new Map();
|
|
29842
29854
|
#flushSchedule = { kind: "idle" };
|
|
29843
29855
|
#isLocalDBAvailable = true;
|
|
29844
|
-
constructor(localDatabase
|
|
29845
|
-
this.generationId = generationId;
|
|
29856
|
+
constructor(localDatabase) {
|
|
29846
29857
|
this.#localDatabase = localDatabase;
|
|
29847
29858
|
this.#database = localDatabase.orm;
|
|
29848
29859
|
try {
|
|
@@ -29852,11 +29863,20 @@ var CachedAcpSessionEventStoreV2 = class {
|
|
|
29852
29863
|
throw error62;
|
|
29853
29864
|
}
|
|
29854
29865
|
}
|
|
29866
|
+
#session = (sessionId) => {
|
|
29867
|
+
const session = this.#sessions.get(sessionId) ?? {
|
|
29868
|
+
hot: [],
|
|
29869
|
+
nextPosition: 1,
|
|
29870
|
+
sessionGenerationId: randomUUID()
|
|
29871
|
+
};
|
|
29872
|
+
this.#sessions.set(sessionId, session);
|
|
29873
|
+
return session;
|
|
29874
|
+
};
|
|
29855
29875
|
append = (sessionId, event) => {
|
|
29856
29876
|
if (this.#flushSchedule.kind === "closed") {
|
|
29857
29877
|
throw new Error("The V2 Session event store is closed");
|
|
29858
29878
|
}
|
|
29859
|
-
const session = this.#
|
|
29879
|
+
const session = this.#session(sessionId);
|
|
29860
29880
|
const position = session.nextPosition;
|
|
29861
29881
|
session.hot.push({ event, position });
|
|
29862
29882
|
session.nextPosition += 1;
|
|
@@ -29864,7 +29884,7 @@ var CachedAcpSessionEventStoreV2 = class {
|
|
|
29864
29884
|
if (session.hot.length > HOT_EVENT_HIGH_WATER_MARK) {
|
|
29865
29885
|
this.#scheduleFlush();
|
|
29866
29886
|
}
|
|
29867
|
-
return position;
|
|
29887
|
+
return { position, sessionGenerationId: session.sessionGenerationId };
|
|
29868
29888
|
};
|
|
29869
29889
|
#scheduleFlush = () => {
|
|
29870
29890
|
if (!this.#isLocalDBAvailable || this.#flushSchedule.kind !== "idle") {
|
|
@@ -29885,12 +29905,19 @@ var CachedAcpSessionEventStoreV2 = class {
|
|
|
29885
29905
|
}
|
|
29886
29906
|
const batches = [...this.#sessions.entries()].flatMap(([sessionId, session]) => {
|
|
29887
29907
|
const count = includeHotTail ? session.hot.length : Math.max(0, session.hot.length - HOT_EVENT_RETENTION);
|
|
29888
|
-
return count === 0 ? [] : [
|
|
29908
|
+
return count === 0 ? [] : [
|
|
29909
|
+
{
|
|
29910
|
+
count,
|
|
29911
|
+
events: session.hot.slice(0, count),
|
|
29912
|
+
sessionGenerationId: session.sessionGenerationId,
|
|
29913
|
+
sessionId
|
|
29914
|
+
}
|
|
29915
|
+
];
|
|
29889
29916
|
});
|
|
29890
29917
|
const values = batches.flatMap(
|
|
29891
29918
|
(batch) => batch.events.map(({ event, position }) => ({
|
|
29892
29919
|
eventJson: JSON.stringify(event),
|
|
29893
|
-
generationId:
|
|
29920
|
+
generationId: batch.sessionGenerationId,
|
|
29894
29921
|
position,
|
|
29895
29922
|
sessionId: batch.sessionId
|
|
29896
29923
|
}))
|
|
@@ -29914,11 +29941,12 @@ var CachedAcpSessionEventStoreV2 = class {
|
|
|
29914
29941
|
};
|
|
29915
29942
|
page = (sessionId, eventLimit, cursor) => {
|
|
29916
29943
|
const session = this.#sessions.get(sessionId);
|
|
29917
|
-
const
|
|
29918
|
-
|
|
29944
|
+
const current = session ?? this.#session(sessionId);
|
|
29945
|
+
const eventCount = current.nextPosition - 1;
|
|
29946
|
+
return eventPage(current.sessionGenerationId, eventCount, eventLimit, cursor, (startPosition, endPosition) => {
|
|
29919
29947
|
const persisted = this.#ignoredPersistedSessions.has(sessionId) ? [] : this.#database.select({ eventJson: sessionEventV2.eventJson, position: sessionEventV2.position }).from(sessionEventV2).where(
|
|
29920
29948
|
and(
|
|
29921
|
-
eq(sessionEventV2.generationId,
|
|
29949
|
+
eq(sessionEventV2.generationId, current.sessionGenerationId),
|
|
29922
29950
|
eq(sessionEventV2.sessionId, sessionId),
|
|
29923
29951
|
gte(sessionEventV2.position, startPosition),
|
|
29924
29952
|
lte(sessionEventV2.position, endPosition)
|
|
@@ -29933,13 +29961,18 @@ var CachedAcpSessionEventStoreV2 = class {
|
|
|
29933
29961
|
return [...persisted, ...hot].toSorted((left, right) => left.position - right.position).map(({ event }) => event);
|
|
29934
29962
|
});
|
|
29935
29963
|
};
|
|
29936
|
-
#deletePersisted = (sessionId) => {
|
|
29964
|
+
#deletePersisted = (sessionId, sessionGenerationId) => {
|
|
29937
29965
|
if (!this.#isLocalDBAvailable) {
|
|
29938
29966
|
this.#ignoredPersistedSessions.add(sessionId);
|
|
29939
29967
|
return;
|
|
29940
29968
|
}
|
|
29941
29969
|
try {
|
|
29942
|
-
this.#database.delete(sessionEventV2).where(
|
|
29970
|
+
this.#database.delete(sessionEventV2).where(
|
|
29971
|
+
sessionGenerationId === void 0 ? eq(sessionEventV2.sessionId, sessionId) : and(
|
|
29972
|
+
eq(sessionEventV2.generationId, sessionGenerationId),
|
|
29973
|
+
eq(sessionEventV2.sessionId, sessionId)
|
|
29974
|
+
)
|
|
29975
|
+
).run();
|
|
29943
29976
|
this.#ignoredPersistedSessions.delete(sessionId);
|
|
29944
29977
|
} catch (cause) {
|
|
29945
29978
|
this.#isLocalDBAvailable = false;
|
|
@@ -29951,7 +29984,11 @@ var CachedAcpSessionEventStoreV2 = class {
|
|
|
29951
29984
|
this.#deletePersisted(sessionId);
|
|
29952
29985
|
this.#sessions.delete(sessionId);
|
|
29953
29986
|
};
|
|
29954
|
-
reset =
|
|
29987
|
+
reset = (sessionId) => {
|
|
29988
|
+
const previous = this.#sessions.get(sessionId);
|
|
29989
|
+
this.#deletePersisted(sessionId, previous?.sessionGenerationId);
|
|
29990
|
+
this.#sessions.set(sessionId, { hot: [], nextPosition: 1, sessionGenerationId: randomUUID() });
|
|
29991
|
+
};
|
|
29955
29992
|
close = () => {
|
|
29956
29993
|
if (this.#flushSchedule.kind === "closed") {
|
|
29957
29994
|
return;
|
|
@@ -30004,7 +30041,7 @@ var FoundAcpStoredSession = class extends AcpStoredSessionLookup {
|
|
|
30004
30041
|
var MemoryAcpSessionStore = class {
|
|
30005
30042
|
eventsV2;
|
|
30006
30043
|
#sessions = /* @__PURE__ */ new Map();
|
|
30007
|
-
constructor(eventsV2 = new MemoryAcpSessionEventStoreV2(
|
|
30044
|
+
constructor(eventsV2 = new MemoryAcpSessionEventStoreV2()) {
|
|
30008
30045
|
this.eventsV2 = eventsV2;
|
|
30009
30046
|
}
|
|
30010
30047
|
close = () => {
|
|
@@ -30056,7 +30093,7 @@ var SqliteAcpSessionStore = class {
|
|
|
30056
30093
|
eventsV2;
|
|
30057
30094
|
#database;
|
|
30058
30095
|
#localDatabase;
|
|
30059
|
-
constructor(localDatabase, eventsV2 = new MemoryAcpSessionEventStoreV2(
|
|
30096
|
+
constructor(localDatabase, eventsV2 = new MemoryAcpSessionEventStoreV2()) {
|
|
30060
30097
|
this.eventsV2 = eventsV2;
|
|
30061
30098
|
this.#localDatabase = localDatabase;
|
|
30062
30099
|
this.#database = localDatabase.orm;
|
|
@@ -37795,7 +37832,7 @@ function isRuntimeRelayRevocation(closeCode, closeReason) {
|
|
|
37795
37832
|
}
|
|
37796
37833
|
|
|
37797
37834
|
// src/run-daemon.ts
|
|
37798
|
-
import { createHash as
|
|
37835
|
+
import { createHash as createHash7, randomUUID as randomUUID9 } from "node:crypto";
|
|
37799
37836
|
import { join as join19 } from "node:path";
|
|
37800
37837
|
import { styleText } from "node:util";
|
|
37801
37838
|
|
|
@@ -41674,7 +41711,13 @@ async function executeSessionLiveHistoryV2PageLoad(socket, command, config2, dir
|
|
|
41674
41711
|
const replay = await sessions.loadSessionEventsV2(loadOptions, command.eventLimit, command.cursor);
|
|
41675
41712
|
signal.throwIfAborted();
|
|
41676
41713
|
const events = replay.events.map(
|
|
41677
|
-
(event, index2) => eventLogV2.event(
|
|
41714
|
+
(event, index2) => eventLogV2.event(
|
|
41715
|
+
command.sessionId,
|
|
41716
|
+
replay.sessionGenerationId,
|
|
41717
|
+
replay.startPosition + index2,
|
|
41718
|
+
event,
|
|
41719
|
+
"1970-01-01T00:00:00.000Z"
|
|
41720
|
+
)
|
|
41678
41721
|
);
|
|
41679
41722
|
const tailCursor = events.at(-1)?.eventId ?? "";
|
|
41680
41723
|
audit.record({
|
|
@@ -41685,9 +41728,9 @@ async function executeSessionLiveHistoryV2PageLoad(socket, command, config2, dir
|
|
|
41685
41728
|
send(socket, {
|
|
41686
41729
|
events: {
|
|
41687
41730
|
events: {
|
|
41688
|
-
daemonGenerationId: eventLogV2.daemonGenerationId,
|
|
41689
41731
|
events,
|
|
41690
41732
|
nextCursor: replay.nextCursor,
|
|
41733
|
+
sessionGenerationId: replay.sessionGenerationId,
|
|
41691
41734
|
tailCursor,
|
|
41692
41735
|
truncated: replay.truncated,
|
|
41693
41736
|
version: 2
|
|
@@ -43034,7 +43077,7 @@ async function runRelayConnection({
|
|
|
43034
43077
|
// src/relay-connection/session-event-publisher.ts
|
|
43035
43078
|
import { WebSocket as WebSocket8 } from "undici";
|
|
43036
43079
|
var MAX_BUFFERED_BYTES = 32 * 1024 * 1024;
|
|
43037
|
-
var SESSION_EVENT_V2_BATCH_WINDOW_MILLISECONDS =
|
|
43080
|
+
var SESSION_EVENT_V2_BATCH_WINDOW_MILLISECONDS = 100;
|
|
43038
43081
|
var DaemonSessionEventPublisher = class {
|
|
43039
43082
|
#pendingV2Events = [];
|
|
43040
43083
|
#pendingV2Task = null;
|
|
@@ -43126,7 +43169,6 @@ var SystemDaemonTimer = class {
|
|
|
43126
43169
|
var systemDaemonTimer = new SystemDaemonTimer();
|
|
43127
43170
|
|
|
43128
43171
|
// src/session-event-log-v2.ts
|
|
43129
|
-
import { createHash as createHash7, randomUUID as randomUUID9 } from "node:crypto";
|
|
43130
43172
|
function promptContent(command) {
|
|
43131
43173
|
const content = [];
|
|
43132
43174
|
if (command.prompt.length > 0) {
|
|
@@ -43150,28 +43192,26 @@ function promptContent(command) {
|
|
|
43150
43192
|
}
|
|
43151
43193
|
return content;
|
|
43152
43194
|
}
|
|
43153
|
-
function sessionEventV22(
|
|
43154
|
-
const sessionPrefix = createHash7("sha256").update(sessionId).digest("hex").slice(0, 16);
|
|
43195
|
+
function sessionEventV22(sessionGenerationId, sessionId, position, event, recordedAt) {
|
|
43155
43196
|
return {
|
|
43156
|
-
eventId: `event-${
|
|
43197
|
+
eventId: `event-${sessionGenerationId}-${position.toString().padStart(16, "0")}`,
|
|
43157
43198
|
...event,
|
|
43158
43199
|
position: position.toString(),
|
|
43159
43200
|
provenance: { kind: "original" },
|
|
43160
43201
|
recordedAt,
|
|
43202
|
+
sessionGenerationId,
|
|
43161
43203
|
sessionId
|
|
43162
43204
|
};
|
|
43163
43205
|
}
|
|
43164
43206
|
var DaemonSessionEventLogV2 = class {
|
|
43165
|
-
daemonGenerationId;
|
|
43166
43207
|
#publisher;
|
|
43167
43208
|
#terminal = /* @__PURE__ */ new Map();
|
|
43168
43209
|
#publications = /* @__PURE__ */ new Map();
|
|
43169
43210
|
#queued = /* @__PURE__ */ new Map();
|
|
43170
43211
|
#recordLifecycle;
|
|
43171
|
-
constructor(publisher, recordLifecycle
|
|
43212
|
+
constructor(publisher, recordLifecycle) {
|
|
43172
43213
|
this.#recordLifecycle = recordLifecycle;
|
|
43173
43214
|
this.#publisher = publisher;
|
|
43174
|
-
this.daemonGenerationId = daemonGenerationId;
|
|
43175
43215
|
}
|
|
43176
43216
|
requested = (command) => {
|
|
43177
43217
|
this.#queued.set(command.commandId, {
|
|
@@ -43195,7 +43235,13 @@ var DaemonSessionEventLogV2 = class {
|
|
|
43195
43235
|
throw new Error("The executing prompt was not registered in the V2 queue");
|
|
43196
43236
|
};
|
|
43197
43237
|
record = (sessionId, event, position) => {
|
|
43198
|
-
const recorded = this.event(
|
|
43238
|
+
const recorded = this.event(
|
|
43239
|
+
sessionId,
|
|
43240
|
+
position.sessionGenerationId,
|
|
43241
|
+
position.position,
|
|
43242
|
+
event,
|
|
43243
|
+
(/* @__PURE__ */ new Date()).toISOString()
|
|
43244
|
+
);
|
|
43199
43245
|
if (event.type === "lifecycle-metadata" && (event.payload.kind === "prompt.completed" || event.payload.kind === "prompt.failed" || event.payload.kind === "prompt.failed-before-start")) {
|
|
43200
43246
|
this.#terminal.set(event.payload.commandId, recorded);
|
|
43201
43247
|
const pending2 = this.#publications.get(sessionId) ?? [];
|
|
@@ -43232,7 +43278,7 @@ var DaemonSessionEventLogV2 = class {
|
|
|
43232
43278
|
}
|
|
43233
43279
|
this.#queued.delete(commandId);
|
|
43234
43280
|
};
|
|
43235
|
-
event = (sessionId, position, event, recordedAt) => sessionEventV22(
|
|
43281
|
+
event = (sessionId, sessionGenerationId, position, event, recordedAt) => sessionEventV22(sessionGenerationId, sessionId, position, event, recordedAt);
|
|
43236
43282
|
queueChanged = async (sessionId) => {
|
|
43237
43283
|
await this.#recordLifecycle(sessionId, {
|
|
43238
43284
|
type: "lifecycle-metadata",
|
|
@@ -43323,7 +43369,7 @@ async function installDetectedAgentIntegrations(config2, installations, signal)
|
|
|
43323
43369
|
{
|
|
43324
43370
|
agentId: agent.id,
|
|
43325
43371
|
kind: AGENT_INSTALL_REQUEST_KIND,
|
|
43326
|
-
requestId: `automatic-integration-${
|
|
43372
|
+
requestId: `automatic-integration-${randomUUID9()}`
|
|
43327
43373
|
},
|
|
43328
43374
|
signal
|
|
43329
43375
|
);
|
|
@@ -43341,14 +43387,12 @@ async function runDaemon(config2, audit, signal, timer = systemDaemonTimer, opti
|
|
|
43341
43387
|
publishCatalog: async (installationSignal) => await publishAgentCatalog(config2, installationSignal),
|
|
43342
43388
|
stateDirectory
|
|
43343
43389
|
});
|
|
43344
|
-
const channelHash =
|
|
43345
|
-
const daemonGenerationId = randomUUID10();
|
|
43390
|
+
const channelHash = createHash7("sha256").update(config2.channelId).digest("hex");
|
|
43346
43391
|
const sessionDatabase = openAcpSessionDatabase(join19(stateDirectory, "sessions", `${channelHash}.sqlite`));
|
|
43347
43392
|
let eventsV2;
|
|
43348
43393
|
try {
|
|
43349
43394
|
eventsV2 = new CachedAcpSessionEventStoreV2(
|
|
43350
|
-
openSessionEventCacheV2Database(join19(stateDirectory, "sessions", `${channelHash}.events.sqlite`))
|
|
43351
|
-
daemonGenerationId
|
|
43395
|
+
openSessionEventCacheV2Database(join19(stateDirectory, "sessions", `${channelHash}.events.sqlite`))
|
|
43352
43396
|
);
|
|
43353
43397
|
} catch (error62) {
|
|
43354
43398
|
sessionDatabase.close();
|
|
@@ -43360,8 +43404,7 @@ async function runDaemon(config2, audit, signal, timer = systemDaemonTimer, opti
|
|
|
43360
43404
|
const publisher = new DaemonSessionEventPublisher(timer);
|
|
43361
43405
|
const eventLogV2 = new DaemonSessionEventLogV2(
|
|
43362
43406
|
publisher,
|
|
43363
|
-
(sessionId, event) => agentRuntime.recordLifecycleEventV2(sessionId, event)
|
|
43364
|
-
daemonGenerationId
|
|
43407
|
+
(sessionId, event) => agentRuntime.recordLifecycleEventV2(sessionId, event)
|
|
43365
43408
|
);
|
|
43366
43409
|
const activeTurns = new DaemonTurnRegistry(operations);
|
|
43367
43410
|
const agentRuntime = new AgentRuntimeManager(
|