@moxt-ai/mobius 0.0.291 → 0.0.293
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/native-history/preview-contract.d.ts +1 -0
- package/dist/acp/native-history/preview-contract.d.ts.map +1 -1
- package/dist/cli.js +122 -11
- package/dist/cli.js.map +4 -4
- package/dist/daemon/lifecycle/worker.d.ts.map +1 -1
- package/dist/daemon/lifecycle/worker.js +4 -1
- package/dist/daemon/lifecycle/worker.js.map +1 -1
- package/dist/daemon/upgrades/upgrade.d.ts +2 -1
- package/dist/daemon/upgrades/upgrade.d.ts.map +1 -1
- package/dist/daemon/upgrades/upgrade.js +101 -10
- package/dist/daemon/upgrades/upgrade.js.map +1 -1
- package/dist/runtime/command/registry/history.d.ts.map +1 -1
- package/dist/runtime/command/registry/history.js +5 -1
- package/dist/runtime/command/registry/history.js.map +1 -1
- package/dist/runtime/command/registry/prompt.d.ts.map +1 -1
- package/dist/runtime/command/registry/prompt.js +10 -0
- package/dist/runtime/command/registry/prompt.js.map +1 -1
- package/dist/runtime/engine.d.ts +2 -0
- package/dist/runtime/engine.d.ts.map +1 -1
- package/dist/runtime/engine.js +1 -0
- package/dist/runtime/engine.js.map +1 -1
- package/dist/runtime/relay/run-relay-connection.d.ts.map +1 -1
- package/dist/runtime/relay/run-relay-connection.js +2 -0
- package/dist/runtime/relay/run-relay-connection.js.map +1 -1
- package/dist/runtime/relay/session-event-publisher.d.ts +1 -0
- package/dist/runtime/relay/session-event-publisher.d.ts.map +1 -1
- package/dist/runtime/relay/session-event-publisher.js +5 -0
- package/dist/runtime/relay/session-event-publisher.js.map +1 -1
- package/dist/runtime/run.d.ts +2 -0
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +1 -0
- package/dist/runtime/run.js.map +1 -1
- package/dist/runtime.js +87 -5
- package/dist/runtime.js.map +4 -4
- package/dist/session/api/session-layer.d.ts +2 -0
- package/dist/session/api/session-layer.d.ts.map +1 -1
- package/dist/session/api/session-layer.js +1 -1
- package/dist/session/api/session-layer.js.map +1 -1
- package/dist/session/history/session-event-store.d.ts +1 -0
- package/dist/session/history/session-event-store.d.ts.map +1 -1
- package/dist/session/history/session-event-store.js +6 -0
- package/dist/session/history/session-event-store.js.map +1 -1
- package/dist/session/turn/runtime-turn-activity.d.ts +11 -0
- package/dist/session/turn/runtime-turn-activity.d.ts.map +1 -0
- package/dist/session/turn/runtime-turn-activity.js +45 -0
- package/dist/session/turn/runtime-turn-activity.js.map +1 -0
- package/dist/session/turn/session-turns.d.ts +3 -1
- package/dist/session/turn/session-turns.d.ts.map +1 -1
- package/dist/session/turn/session-turns.js +11 -2
- package/dist/session/turn/session-turns.js.map +1 -1
- package/package.json +2 -2
|
@@ -3,6 +3,7 @@ import type { AcpAgentDefinition } from "../agent/agent-definition.ts";
|
|
|
3
3
|
import type { ProjectedToolCall } from "../tool-call-projection.ts";
|
|
4
4
|
/** One page of a saved native session's events. */
|
|
5
5
|
export interface SessionEventPage {
|
|
6
|
+
readonly throughPosition: string;
|
|
6
7
|
readonly events: readonly SessionEvent[];
|
|
7
8
|
readonly nextCursor: string | null;
|
|
8
9
|
readonly sessionGenerationId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview-contract.d.ts","sourceRoot":"","sources":["../../../src/acp/native-history/preview-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACxG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,mDAAmD;AACnD,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC/B;AAED,wFAAwF;AACxF,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,KAAK,gBAAgB,CAAC;IACrF,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,iBAAiB,GAAG,SAAS,CAAC;IAC/F,6DAA6D;IAC7D,QAAQ,CAAC,WAAW,EAAE,CAClB,SAAS,EAAE,MAAM,EACjB,mBAAmB,EAAE,MAAM,EAC3B,MAAM,EAAE,SAAS,mBAAmB,EAAE,KACrC,IAAI,CAAC;IACV,yCAAyC;IACzC,QAAQ,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,gBAAgB,CAAC;IAClG,QAAQ,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C;AAED,kEAAkE;AAClE,MAAM,WAAW,2BAA2B;IACxC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,kEAAkE;IAClE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC9B;AAED,+CAA+C;AAC/C,MAAM,WAAW,cAAc;IAC3B;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,qBAAqB,EAAE,SAAS,MAAM,EAAE,CAAC;IAClD,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,kFAAkF;IAClF,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC;;;OAGG;IACH,QAAQ,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACnG;AAED;;;;GAIG;AACH,MAAM,WAAW,OAAO;IACpB,QAAQ,CAAC,oBAAoB,EAAE,CAC3B,OAAO,EAAE,2BAA2B,EACpC,OAAO,EAAE,cAAc,KACtB,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAClC;AAED,oEAAoE;AACpE,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC"}
|
|
1
|
+
{"version":3,"file":"preview-contract.d.ts","sourceRoot":"","sources":["../../../src/acp/native-history/preview-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACxG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,mDAAmD;AACnD,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC/B;AAED,wFAAwF;AACxF,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,KAAK,gBAAgB,CAAC;IACrF,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,iBAAiB,GAAG,SAAS,CAAC;IAC/F,6DAA6D;IAC7D,QAAQ,CAAC,WAAW,EAAE,CAClB,SAAS,EAAE,MAAM,EACjB,mBAAmB,EAAE,MAAM,EAC3B,MAAM,EAAE,SAAS,mBAAmB,EAAE,KACrC,IAAI,CAAC;IACV,yCAAyC;IACzC,QAAQ,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,gBAAgB,CAAC;IAClG,QAAQ,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C;AAED,kEAAkE;AAClE,MAAM,WAAW,2BAA2B;IACxC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,kEAAkE;IAClE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC9B;AAED,+CAA+C;AAC/C,MAAM,WAAW,cAAc;IAC3B;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,qBAAqB,EAAE,SAAS,MAAM,EAAE,CAAC;IAClD,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,kFAAkF;IAClF,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC;;;OAGG;IACH,QAAQ,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACnG;AAED;;;;GAIG;AACH,MAAM,WAAW,OAAO;IACpB,QAAQ,CAAC,oBAAoB,EAAE,CAC3B,OAAO,EAAE,2BAA2B,EACpC,OAAO,EAAE,cAAc,KACtB,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAClC;AAED,oEAAoE;AACpE,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -5398,7 +5398,7 @@ var program = new Command();
|
|
|
5398
5398
|
// package.json
|
|
5399
5399
|
var package_default = {
|
|
5400
5400
|
name: "@moxt-ai/mobius",
|
|
5401
|
-
version: "0.0.
|
|
5401
|
+
version: "0.0.293",
|
|
5402
5402
|
description: "Mobius CLI for pairing and running local AI agent services.",
|
|
5403
5403
|
type: "module",
|
|
5404
5404
|
bin: {
|
|
@@ -73018,6 +73018,9 @@ var sessionEventLogPageSchema = external_exports.object({
|
|
|
73018
73018
|
nextCursor: external_exports.string().min(1).max(512).nullable(),
|
|
73019
73019
|
sessionGenerationId: identifierStringSchema,
|
|
73020
73020
|
tailCursor: external_exports.string().max(512),
|
|
73021
|
+
// The generation-scoped live position covered by this snapshot, including
|
|
73022
|
+
// coalesced and omitted events. Absent only on older Runtime versions.
|
|
73023
|
+
throughPosition: positionSchema.optional(),
|
|
73021
73024
|
truncated: external_exports.boolean(),
|
|
73022
73025
|
version: external_exports.literal(2)
|
|
73023
73026
|
}).readonly();
|
|
@@ -88351,6 +88354,7 @@ var ProjectedSessionEvent = class {
|
|
|
88351
88354
|
};
|
|
88352
88355
|
};
|
|
88353
88356
|
var SessionEvents = class {
|
|
88357
|
+
#throughPosition = "0";
|
|
88354
88358
|
#eventIds = [];
|
|
88355
88359
|
#eventIndexById = /* @__PURE__ */ new Map();
|
|
88356
88360
|
#cachedItemsByEventId = /* @__PURE__ */ new Map();
|
|
@@ -88362,6 +88366,7 @@ var SessionEvents = class {
|
|
|
88362
88366
|
}
|
|
88363
88367
|
apply = (event, resolve20) => {
|
|
88364
88368
|
const projected = this.#projection.apply(event, resolve20);
|
|
88369
|
+
this.#throughPosition = event.position;
|
|
88365
88370
|
if (projected.kind === "replace") {
|
|
88366
88371
|
const current = this.#cachedItemsByEventId.get(projected.replacedEventId);
|
|
88367
88372
|
if (current === void 0) {
|
|
@@ -88375,6 +88380,9 @@ var SessionEvents = class {
|
|
|
88375
88380
|
this.#cachedItemsByEventId.set(projected.event.eventId, item);
|
|
88376
88381
|
this.#eventIds.push(projected.event.eventId);
|
|
88377
88382
|
};
|
|
88383
|
+
get throughPosition() {
|
|
88384
|
+
return this.#throughPosition;
|
|
88385
|
+
}
|
|
88378
88386
|
get materializedCount() {
|
|
88379
88387
|
return this.#cachedItemsByEventId.size;
|
|
88380
88388
|
}
|
|
@@ -88462,6 +88470,7 @@ function eventPage(session, sessionGenerationId, endIndex, eventLimit, read) {
|
|
|
88462
88470
|
const startIndex = Math.max(0, endIndex - eventLimit);
|
|
88463
88471
|
return {
|
|
88464
88472
|
events: read(startIndex, endIndex),
|
|
88473
|
+
throughPosition: session.throughPosition,
|
|
88465
88474
|
nextCursor: startIndex === 0 ? null : session.cursorAt(startIndex),
|
|
88466
88475
|
sessionGenerationId,
|
|
88467
88476
|
truncated: startIndex > 0
|
|
@@ -93230,6 +93239,50 @@ var ExecutionReceipts = class {
|
|
|
93230
93239
|
};
|
|
93231
93240
|
};
|
|
93232
93241
|
|
|
93242
|
+
// src/session/turn/runtime-turn-activity.ts
|
|
93243
|
+
var RuntimeTurnActivity = class {
|
|
93244
|
+
#turns = /* @__PURE__ */ new Set();
|
|
93245
|
+
#admission = { kind: "open" };
|
|
93246
|
+
acceptsPrompts = () => this.#admission.kind !== "reserved";
|
|
93247
|
+
count = () => this.#turns.size;
|
|
93248
|
+
start = (turn) => {
|
|
93249
|
+
this.#turns.add(turn);
|
|
93250
|
+
};
|
|
93251
|
+
finish = (turn) => {
|
|
93252
|
+
this.#turns.delete(turn);
|
|
93253
|
+
if (this.#turns.size === 0 && this.#admission.kind === "waiting") {
|
|
93254
|
+
this.#admission.reserve();
|
|
93255
|
+
}
|
|
93256
|
+
};
|
|
93257
|
+
reserveWhenIdle = (signal) => {
|
|
93258
|
+
signal.throwIfAborted();
|
|
93259
|
+
if (this.#admission.kind !== "open") {
|
|
93260
|
+
throw new Error("A daemon upgrade already owns admission");
|
|
93261
|
+
}
|
|
93262
|
+
return new Promise((resolve20, reject2) => {
|
|
93263
|
+
const abort = () => {
|
|
93264
|
+
this.#admission = { kind: "open" };
|
|
93265
|
+
signal.removeEventListener("abort", abort);
|
|
93266
|
+
reject2(signal.reason);
|
|
93267
|
+
};
|
|
93268
|
+
const reserve = () => {
|
|
93269
|
+
this.#admission = { kind: "reserved" };
|
|
93270
|
+
signal.removeEventListener("abort", abort);
|
|
93271
|
+
resolve20({
|
|
93272
|
+
[Symbol.dispose]: () => {
|
|
93273
|
+
this.#admission = { kind: "open" };
|
|
93274
|
+
}
|
|
93275
|
+
});
|
|
93276
|
+
};
|
|
93277
|
+
this.#admission = { kind: "waiting", reserve };
|
|
93278
|
+
signal.addEventListener("abort", abort, { once: true });
|
|
93279
|
+
if (this.#turns.size === 0) {
|
|
93280
|
+
reserve();
|
|
93281
|
+
}
|
|
93282
|
+
});
|
|
93283
|
+
};
|
|
93284
|
+
};
|
|
93285
|
+
|
|
93233
93286
|
// src/session/turn/active-turn.ts
|
|
93234
93287
|
import { randomUUID as randomUUID15 } from "node:crypto";
|
|
93235
93288
|
var ActiveRuntimeTurn = class {
|
|
@@ -93446,9 +93499,12 @@ var SessionExecutionState = class {
|
|
|
93446
93499
|
var SessionTurns = class {
|
|
93447
93500
|
#bySessionId = /* @__PURE__ */ new Map();
|
|
93448
93501
|
#operations;
|
|
93449
|
-
|
|
93502
|
+
#activity;
|
|
93503
|
+
constructor(operations, activity2 = new RuntimeTurnActivity()) {
|
|
93450
93504
|
this.#operations = operations;
|
|
93505
|
+
this.#activity = activity2;
|
|
93451
93506
|
}
|
|
93507
|
+
acceptsPrompts = () => this.#activity.acceptsPrompts();
|
|
93452
93508
|
session = (sessionId) => {
|
|
93453
93509
|
let session = this.#bySessionId.get(sessionId);
|
|
93454
93510
|
if (session === void 0) {
|
|
@@ -93458,10 +93514,15 @@ var SessionTurns = class {
|
|
|
93458
93514
|
return session;
|
|
93459
93515
|
};
|
|
93460
93516
|
get = (commandId, sessionId) => this.#bySessionId.get(sessionId)?.get(commandId);
|
|
93461
|
-
start = (command, attemptId) =>
|
|
93517
|
+
start = (command, attemptId) => {
|
|
93518
|
+
const turn = this.session(command.sessionId).start(command, attemptId);
|
|
93519
|
+
this.#activity.start(turn);
|
|
93520
|
+
return turn;
|
|
93521
|
+
};
|
|
93462
93522
|
finish = (turn) => {
|
|
93463
93523
|
this.#bySessionId.get(turn.command.sessionId)?.finish(turn);
|
|
93464
93524
|
this.sweep();
|
|
93525
|
+
this.#activity.finish(turn);
|
|
93465
93526
|
};
|
|
93466
93527
|
recordEvent = (event) => "sessionId" in event ? this.#bySessionId.get(event.sessionId)?.recordEvent(event) ?? event : event;
|
|
93467
93528
|
recordSessionEvent = (event) => {
|
|
@@ -93703,7 +93764,7 @@ function buildSessionLayer(options) {
|
|
|
93703
93764
|
const sessionStore = new SqliteSessionStore(new AcpSessionTable(sessionDatabase), events);
|
|
93704
93765
|
const externalContent = new LocalExternalContentStore(stateDirectory);
|
|
93705
93766
|
const operations = new ExecutionReceipts();
|
|
93706
|
-
const activeSessions = new SessionTurns(operations);
|
|
93767
|
+
const activeSessions = new SessionTurns(operations, options.turnActivity);
|
|
93707
93768
|
const directories = new WorkspaceDirectoryService(bindingId, defaultWorkspace);
|
|
93708
93769
|
const manager = new SessionManager2({
|
|
93709
93770
|
observer: new SessionLayerObserver((event) => eventProjection.record(event), sink.publishInfo),
|
|
@@ -94717,8 +94778,10 @@ async function loadHistoryPage(sessionId, eventLimit, initialCursor, omitReasoni
|
|
|
94717
94778
|
let loaded = [];
|
|
94718
94779
|
let sessionGenerationId = null;
|
|
94719
94780
|
let sourceNextCursor = null;
|
|
94781
|
+
let throughPosition = null;
|
|
94720
94782
|
do {
|
|
94721
94783
|
const replay = await load(eventLimit, cursor);
|
|
94784
|
+
throughPosition ??= replay.throughPosition;
|
|
94722
94785
|
if (sessionGenerationId !== null && replay.sessionGenerationId !== sessionGenerationId) {
|
|
94723
94786
|
throw new SessionError("session_reloaded", "The Session reloaded while history was loading");
|
|
94724
94787
|
}
|
|
@@ -94744,7 +94807,7 @@ async function loadHistoryPage(sessionId, eventLimit, initialCursor, omitReasoni
|
|
|
94744
94807
|
}
|
|
94745
94808
|
cursor = sourceNextCursor;
|
|
94746
94809
|
} while (cursor !== null);
|
|
94747
|
-
if (sessionGenerationId === null) {
|
|
94810
|
+
if (sessionGenerationId === null || throughPosition === null) {
|
|
94748
94811
|
throw new SessionError("session_history_unavailable", "The Session history is unavailable");
|
|
94749
94812
|
}
|
|
94750
94813
|
const visible = omitReasoning ? omitAgentReasoning(loaded) : loaded;
|
|
@@ -94756,6 +94819,7 @@ async function loadHistoryPage(sessionId, eventLimit, initialCursor, omitReasoni
|
|
|
94756
94819
|
nextCursor,
|
|
94757
94820
|
sessionGenerationId,
|
|
94758
94821
|
tailCursor: orderedEvents.at(-1)?.event.eventId ?? "",
|
|
94822
|
+
throughPosition,
|
|
94759
94823
|
truncated: nextCursor !== null,
|
|
94760
94824
|
version: 2
|
|
94761
94825
|
},
|
|
@@ -95673,6 +95737,16 @@ var sessionPromptCommand = {
|
|
|
95673
95737
|
if (message.kind !== SESSION_PROMPT_KIND) {
|
|
95674
95738
|
throw new Error("Command kind mismatch");
|
|
95675
95739
|
}
|
|
95740
|
+
if (!context.sessionTurns.acceptsPrompts()) {
|
|
95741
|
+
send(context.socket, {
|
|
95742
|
+
code: "runtime_upgrading",
|
|
95743
|
+
requestId: message.commandId,
|
|
95744
|
+
kind: "session.operation.failed",
|
|
95745
|
+
message: "The Runtime is upgrading. Retry after it reconnects.",
|
|
95746
|
+
sessionId: message.sessionId
|
|
95747
|
+
});
|
|
95748
|
+
return;
|
|
95749
|
+
}
|
|
95676
95750
|
const receipt = context.operations.claimExecution(
|
|
95677
95751
|
message.commandId,
|
|
95678
95752
|
message.sessionId,
|
|
@@ -96478,6 +96552,7 @@ async function runRelayConnection({
|
|
|
96478
96552
|
reject2(failure2);
|
|
96479
96553
|
};
|
|
96480
96554
|
const stop = () => {
|
|
96555
|
+
publisher.flush();
|
|
96481
96556
|
diagnostics.connectionClosed(connectionEpoch, 1e3, "Daemon stopped", "daemon_stop");
|
|
96482
96557
|
closeRelaySocket(socket, 1e3, "Daemon stopped");
|
|
96483
96558
|
resolveConnection();
|
|
@@ -96633,6 +96708,11 @@ var RuntimeSessionEventPublisher = class {
|
|
|
96633
96708
|
this.#socket = null;
|
|
96634
96709
|
this.dropPendingEvents();
|
|
96635
96710
|
};
|
|
96711
|
+
flush = () => {
|
|
96712
|
+
if (this.#socket !== null) {
|
|
96713
|
+
this.flushEvents(this.#socket);
|
|
96714
|
+
}
|
|
96715
|
+
};
|
|
96636
96716
|
publishOperationFailure = (sessionId, requestId, code, message) => {
|
|
96637
96717
|
this.#send({ kind: "session.operation.failed", sessionId, requestId, code, message });
|
|
96638
96718
|
};
|
|
@@ -96766,6 +96846,7 @@ async function runRuntime(config2, parentSignal, timer = systemTimer, options =
|
|
|
96766
96846
|
);
|
|
96767
96847
|
const publisher = new RuntimeSessionEventPublisher(timer);
|
|
96768
96848
|
const layer = buildSessionLayer({
|
|
96849
|
+
...options.turnActivity === void 0 ? {} : { turnActivity: options.turnActivity },
|
|
96769
96850
|
bindingId: config2.bindingId,
|
|
96770
96851
|
channelId: config2.channelId,
|
|
96771
96852
|
defaultWorkspace: config2.defaultWorkspace,
|
|
@@ -96935,6 +97016,7 @@ var MobiusRuntimeEngine = class {
|
|
|
96935
97016
|
this.#state = new RunningMobiusRuntimeState();
|
|
96936
97017
|
try {
|
|
96937
97018
|
await runRuntime(this.#config, signal, void 0, {
|
|
97019
|
+
...this.#options.turnActivity === void 0 ? {} : { turnActivity: this.#options.turnActivity },
|
|
96938
97020
|
...this.#options.onConnectionStatus === void 0 ? {} : { onConnectionStatus: this.#options.onConnectionStatus },
|
|
96939
97021
|
...this.#options.reportUpgradeAvailability === void 0 ? {} : { reportUpgradeAvailability: this.#options.reportUpgradeAvailability },
|
|
96940
97022
|
...this.#options.processLogsDirectory === void 0 ? {} : { processLogsDirectory: this.#options.processLogsDirectory }
|
|
@@ -97083,11 +97165,11 @@ async function reportDaemonUpgradeAvailability(send2, signal) {
|
|
|
97083
97165
|
send2({ ...base, kind: "runtime.upgrade.result", outcome: { status: "succeeded" } });
|
|
97084
97166
|
}
|
|
97085
97167
|
}
|
|
97086
|
-
async function runDaemonReleaseUpgrades(signal) {
|
|
97168
|
+
async function runDaemonReleaseUpgrades(signal, activity2) {
|
|
97087
97169
|
try {
|
|
97088
97170
|
for await (const _tick of setInterval2(36e5, void 0, { signal })) {
|
|
97089
97171
|
try {
|
|
97090
|
-
await checkDaemonReleaseUpgrade(signal);
|
|
97172
|
+
await checkDaemonReleaseUpgrade(signal, activity2);
|
|
97091
97173
|
} catch (cause) {
|
|
97092
97174
|
signal.throwIfAborted();
|
|
97093
97175
|
console.error("Daemon npm upgrade check failed", cause);
|
|
@@ -97105,6 +97187,9 @@ async function requestDaemonReleaseUpgrade(stateDirectory, currentVersion, signa
|
|
|
97105
97187
|
return { kind: "current" };
|
|
97106
97188
|
}
|
|
97107
97189
|
const launch = await installDaemonReleaseVersion(version2, signal);
|
|
97190
|
+
return await requestInstalledDaemonReleaseSwitch(stateDirectory, launch, signal);
|
|
97191
|
+
}
|
|
97192
|
+
async function requestInstalledDaemonReleaseSwitch(stateDirectory, launch, signal) {
|
|
97108
97193
|
const id = randomUUID17();
|
|
97109
97194
|
const response = lifecycleResponse.parse(
|
|
97110
97195
|
await sendLocalRequest(stateDirectory, "manager", { kind: "switch", id, context: "npm", launch }, signal)
|
|
@@ -97115,7 +97200,7 @@ async function requestDaemonReleaseUpgrade(stateDirectory, currentVersion, signa
|
|
|
97115
97200
|
if (response.kind !== "switching") {
|
|
97116
97201
|
throw new DaemonReleaseUpgradeError("manager_incompatible", "The manager does not support daemon switching");
|
|
97117
97202
|
}
|
|
97118
|
-
return { kind: "requested", id, version:
|
|
97203
|
+
return { kind: "requested", id, version: launch.version };
|
|
97119
97204
|
}
|
|
97120
97205
|
async function awaitDaemonReleaseSwitch(stateDirectory, id, signal) {
|
|
97121
97206
|
const deadline = AbortSignal.any([signal, AbortSignal.timeout(SWITCH_COMPLETION_MILLISECONDS)]);
|
|
@@ -97146,13 +97231,37 @@ async function awaitDaemonReleaseSwitch(stateDirectory, id, signal) {
|
|
|
97146
97231
|
}
|
|
97147
97232
|
return outcome;
|
|
97148
97233
|
}
|
|
97149
|
-
async function checkDaemonReleaseUpgrade(signal) {
|
|
97234
|
+
async function checkDaemonReleaseUpgrade(signal, activity2) {
|
|
97150
97235
|
const control = await openMobiusControlInstallation(signal, process.env);
|
|
97151
97236
|
const transition2 = await readSwitchStatus(control.stateDirectory, signal);
|
|
97152
97237
|
if (transition2?.kind === "switching" || transition2?.kind === "rolled-back" && transition2.retryAfter > Date.now()) {
|
|
97153
97238
|
return;
|
|
97154
97239
|
}
|
|
97155
|
-
await
|
|
97240
|
+
const version2 = await findNewDaemonReleaseVersion(package_default.version, signal);
|
|
97241
|
+
if (version2 === null) {
|
|
97242
|
+
return;
|
|
97243
|
+
}
|
|
97244
|
+
const launch = await installDaemonReleaseVersion(version2, signal);
|
|
97245
|
+
if (activity2.count() > 0) {
|
|
97246
|
+
new RuntimeDiagnosticLog(control.stateDirectory).record(
|
|
97247
|
+
`Mobius daemon diagnostic ${JSON.stringify({
|
|
97248
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
97249
|
+
event: "daemon_upgrade_deferred",
|
|
97250
|
+
version: version2,
|
|
97251
|
+
activeTurns: activity2.count()
|
|
97252
|
+
})}`
|
|
97253
|
+
);
|
|
97254
|
+
}
|
|
97255
|
+
using _reservation = await activity2.reserveWhenIdle(signal);
|
|
97256
|
+
signal.throwIfAborted();
|
|
97257
|
+
await requestInstalledDaemonReleaseSwitch(control.stateDirectory, launch, signal);
|
|
97258
|
+
await new Promise((resolve20) => {
|
|
97259
|
+
if (signal.aborted) {
|
|
97260
|
+
resolve20();
|
|
97261
|
+
} else {
|
|
97262
|
+
signal.addEventListener("abort", () => resolve20(), { once: true });
|
|
97263
|
+
}
|
|
97264
|
+
});
|
|
97156
97265
|
}
|
|
97157
97266
|
|
|
97158
97267
|
// src/daemon/lifecycle/worker.ts
|
|
@@ -97208,6 +97317,7 @@ async function runWorkerRuntime(version2, combined, shutdown, rejectionGuard) {
|
|
|
97208
97317
|
}
|
|
97209
97318
|
}
|
|
97210
97319
|
rejectionGuard.bindStateDirectory(control.stateDirectory);
|
|
97320
|
+
const turnActivity = new RuntimeTurnActivity();
|
|
97211
97321
|
const active = /* @__PURE__ */ new Map();
|
|
97212
97322
|
const fail = (connectionId2, cause) => {
|
|
97213
97323
|
console.error(`Runtime ${connectionId2} failed; stopping the daemon`, cause);
|
|
@@ -97235,6 +97345,7 @@ async function runWorkerRuntime(version2, combined, shutdown, rejectionGuard) {
|
|
|
97235
97345
|
const controller = new AbortController();
|
|
97236
97346
|
const engine = new MobiusRuntimeEngine(paired.config, {
|
|
97237
97347
|
processLogsDirectory: control.stateDirectory,
|
|
97348
|
+
turnActivity,
|
|
97238
97349
|
reportUpgradeAvailability: reportDaemonUpgradeAvailability
|
|
97239
97350
|
});
|
|
97240
97351
|
const completion = engine.run(AbortSignal.any([combined, controller.signal])).then(
|
|
@@ -97277,7 +97388,7 @@ async function runWorkerRuntime(version2, combined, shutdown, rejectionGuard) {
|
|
|
97277
97388
|
async () => {
|
|
97278
97389
|
combined.throwIfAborted();
|
|
97279
97390
|
await recordCurrentData(version2, combined);
|
|
97280
|
-
upgrades = runDaemonReleaseUpgrades(combined);
|
|
97391
|
+
upgrades = runDaemonReleaseUpgrades(combined, turnActivity);
|
|
97281
97392
|
if (process.connected) {
|
|
97282
97393
|
process.send?.({ kind: "worker-ready", version: version2 }, () => void 0);
|
|
97283
97394
|
}
|