@moxt-ai/mobius 0.0.177 → 0.0.179
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/agent-connection.d.ts +1 -3
- package/dist/acp/agent-connection.d.ts.map +1 -1
- package/dist/acp/agent-connection.js +3 -4
- package/dist/acp/agent-connection.js.map +1 -1
- package/dist/acp/agent-runtime-manager.d.ts.map +1 -1
- package/dist/acp/agent-runtime-manager.js +1 -8
- package/dist/acp/agent-runtime-manager.js.map +1 -1
- package/dist/acp/agent-session.d.ts +1 -2
- package/dist/acp/agent-session.d.ts.map +1 -1
- package/dist/acp/agent-session.js +6 -12
- package/dist/acp/agent-session.js.map +1 -1
- package/dist/acp/codex/agent.d.ts.map +1 -1
- package/dist/acp/codex/agent.js +1 -1
- package/dist/acp/codex/agent.js.map +1 -1
- package/dist/acp/codex/app-server-protocol.d.ts +11 -0
- package/dist/acp/codex/app-server-protocol.d.ts.map +1 -1
- package/dist/acp/codex/app-server-protocol.js +16 -0
- package/dist/acp/codex/app-server-protocol.js.map +1 -1
- package/dist/acp/codex/items.d.ts.map +1 -1
- package/dist/acp/codex/items.js +23 -0
- package/dist/acp/codex/items.js.map +1 -1
- package/dist/cli.js +100 -26
- package/dist/cli.js.map +2 -2
- package/dist/index.js +99 -25
- package/dist/index.js.map +2 -2
- package/dist/relay-connection/session-event-publisher.d.ts +5 -0
- package/dist/relay-connection/session-event-publisher.d.ts.map +1 -1
- package/dist/relay-connection/session-event-publisher.js +48 -2
- package/dist/relay-connection/session-event-publisher.js.map +1 -1
- package/dist/run-daemon.js +1 -1
- package/dist/run-daemon.js.map +1 -1
- package/dist/runtime.js +99 -25
- package/dist/runtime.js.map +2 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -20954,6 +20954,7 @@ var MAX_CONTENT_LENGTH = 1e6;
|
|
|
20954
20954
|
var MAX_JSON_DEPTH = 16;
|
|
20955
20955
|
var MAX_JSON_KEYS = 1e3;
|
|
20956
20956
|
var SESSION_EVENT_V2_KIND = "session.event.v2";
|
|
20957
|
+
var SESSION_EVENT_V2_BATCH_MAX_SIZE = 1e3;
|
|
20957
20958
|
var boundedString = external_exports.string().max(MAX_CONTENT_LENGTH);
|
|
20958
20959
|
var shortString = external_exports.string().max(2048);
|
|
20959
20960
|
var externalContentKeySchema = external_exports.string().regex(/^[a-f0-9]{64}$/u);
|
|
@@ -21325,6 +21326,7 @@ var sessionEventV2Schema = external_exports.discriminatedUnion("type", [
|
|
|
21325
21326
|
type: external_exports.literal("lifecycle-metadata")
|
|
21326
21327
|
}).readonly()
|
|
21327
21328
|
]);
|
|
21329
|
+
var sessionEventBatchV2Schema = external_exports.array(sessionEventV2Schema).min(1).max(SESSION_EVENT_V2_BATCH_MAX_SIZE).readonly();
|
|
21328
21330
|
var sessionExportV2Schema = external_exports.object({
|
|
21329
21331
|
binding: external_exports.object({
|
|
21330
21332
|
bindingId: identifierStringSchema,
|
|
@@ -21367,7 +21369,7 @@ var mobiusSessionExportV2Schema = external_exports.object({
|
|
|
21367
21369
|
formatVersion: external_exports.literal("2"),
|
|
21368
21370
|
session: sessionExportV2Schema
|
|
21369
21371
|
}).readonly();
|
|
21370
|
-
var sessionEventEnvelopeV2Schema = external_exports.object({
|
|
21372
|
+
var sessionEventEnvelopeV2Schema = external_exports.object({ events: sessionEventBatchV2Schema, kind: external_exports.literal(SESSION_EVENT_V2_KIND) }).readonly();
|
|
21371
21373
|
var sessionEventLogPageV2Schema = external_exports.object({
|
|
21372
21374
|
daemonGenerationId: identifierStringSchema,
|
|
21373
21375
|
events: external_exports.array(sessionEventV2Schema).max(MAX_EVENT_COUNT).readonly(),
|
|
@@ -23339,14 +23341,13 @@ var AgentConnection = class {
|
|
|
23339
23341
|
get inProcessAgent() {
|
|
23340
23342
|
return this.#process.kind === "in-process" ? this.#process.endpoint : null;
|
|
23341
23343
|
}
|
|
23342
|
-
|
|
23343
|
-
closeProcess = async (capturedProcesses = []) => {
|
|
23344
|
+
closeProcess = async () => {
|
|
23344
23345
|
try {
|
|
23345
23346
|
if (this.#process.kind === "in-process") {
|
|
23346
23347
|
await this.#process.endpoint.close();
|
|
23347
23348
|
return;
|
|
23348
23349
|
}
|
|
23349
|
-
await stopProcessTree(this.#process.child
|
|
23350
|
+
await stopProcessTree(this.#process.child);
|
|
23350
23351
|
} finally {
|
|
23351
23352
|
this.connection.close();
|
|
23352
23353
|
}
|
|
@@ -30973,16 +30974,11 @@ var AgentSession = class _AgentSession {
|
|
|
30973
30974
|
}
|
|
30974
30975
|
};
|
|
30975
30976
|
cancel = async () => {
|
|
30976
|
-
|
|
30977
|
-
|
|
30978
|
-
await this.#
|
|
30979
|
-
|
|
30980
|
-
|
|
30981
|
-
sessionId: this.#updates.sessionId()
|
|
30982
|
-
});
|
|
30983
|
-
}
|
|
30984
|
-
} finally {
|
|
30985
|
-
await this.closeProcess(capturedProcesses);
|
|
30977
|
+
await this.#interactions.cancelPendingInteractions();
|
|
30978
|
+
if (this.#turn.running) {
|
|
30979
|
+
await this.#connection.connection.agent.notify(methods3.agent.session.cancel, {
|
|
30980
|
+
sessionId: this.#updates.sessionId()
|
|
30981
|
+
});
|
|
30986
30982
|
}
|
|
30987
30983
|
};
|
|
30988
30984
|
respondPermission = (options) => this.#interactions.respondPermission(options);
|
|
@@ -31182,7 +31178,7 @@ var AgentSession = class _AgentSession {
|
|
|
31182
31178
|
await this.closeProcess();
|
|
31183
31179
|
}
|
|
31184
31180
|
};
|
|
31185
|
-
closeProcess = (
|
|
31181
|
+
closeProcess = () => this.#connection.closeProcess();
|
|
31186
31182
|
race = (operation, exitMessage, signal) => this.#connection.race(operation, exitMessage, signal);
|
|
31187
31183
|
assertNativeSession = (sessionId) => {
|
|
31188
31184
|
if (sessionId !== this.#updates.sessionId()) {
|
|
@@ -32323,13 +32319,7 @@ var AgentRuntimeManager = class {
|
|
|
32323
32319
|
await this.#executions.cancel(sessionId, async () => {
|
|
32324
32320
|
const runtime = this.#executionProcesses.get(sessionId);
|
|
32325
32321
|
if (runtime !== void 0) {
|
|
32326
|
-
|
|
32327
|
-
await runtime.cancel();
|
|
32328
|
-
} finally {
|
|
32329
|
-
if (this.#executionProcesses.detach(sessionId, runtime)) {
|
|
32330
|
-
this.#processes.releaseClosed(runtime);
|
|
32331
|
-
}
|
|
32332
|
-
}
|
|
32322
|
+
await runtime.cancel();
|
|
32333
32323
|
}
|
|
32334
32324
|
});
|
|
32335
32325
|
};
|
|
@@ -33382,7 +33372,21 @@ var fileUpdateChangeSchema = external_exports.object({
|
|
|
33382
33372
|
kind: external_exports.unknown(),
|
|
33383
33373
|
path: boundedText(4096)
|
|
33384
33374
|
});
|
|
33375
|
+
var imageGenerationItemSchema = external_exports.object({
|
|
33376
|
+
id: boundedText(256),
|
|
33377
|
+
type: external_exports.literal("imageGeneration"),
|
|
33378
|
+
status: boundedText(80),
|
|
33379
|
+
revisedPrompt: boundedText(32768).nullish(),
|
|
33380
|
+
// The app-server frame is bounded; media validation belongs to the content externalizer.
|
|
33381
|
+
result: external_exports.string(),
|
|
33382
|
+
failure: external_exports.object({
|
|
33383
|
+
type: external_exports.literal("usageLimitExceeded"),
|
|
33384
|
+
limitId: boundedText(256),
|
|
33385
|
+
resetsAt: external_exports.number().nullish()
|
|
33386
|
+
}).nullish()
|
|
33387
|
+
});
|
|
33385
33388
|
var threadItemSchema = external_exports.discriminatedUnion("type", [
|
|
33389
|
+
imageGenerationItemSchema,
|
|
33386
33390
|
external_exports.object({
|
|
33387
33391
|
id: boundedText(256),
|
|
33388
33392
|
text: boundedText(1e6),
|
|
@@ -33848,6 +33852,29 @@ function mcpStatus(status) {
|
|
|
33848
33852
|
return status === "inProgress" ? "in_progress" : status === "completed" ? "completed" : "failed";
|
|
33849
33853
|
}
|
|
33850
33854
|
function presentToolItem(item) {
|
|
33855
|
+
if (item.type === "imageGeneration") {
|
|
33856
|
+
const failed = item.failure != null || item.status === "failed";
|
|
33857
|
+
const content = [];
|
|
33858
|
+
if (!failed && item.result.length > 0) {
|
|
33859
|
+
content.push({ type: "content", content: { type: "image", data: item.result, mimeType: "image/png" } });
|
|
33860
|
+
}
|
|
33861
|
+
if (failed) {
|
|
33862
|
+
content.push(
|
|
33863
|
+
textContent(
|
|
33864
|
+
item.failure?.type === "usageLimitExceeded" ? "Image generation usage limit reached." : "Image generation failed."
|
|
33865
|
+
)
|
|
33866
|
+
);
|
|
33867
|
+
}
|
|
33868
|
+
return {
|
|
33869
|
+
content,
|
|
33870
|
+
kind: "other",
|
|
33871
|
+
locations: [],
|
|
33872
|
+
rawInput: item.revisedPrompt == null ? null : { prompt: item.revisedPrompt },
|
|
33873
|
+
rawOutput: null,
|
|
33874
|
+
status: failed ? "failed" : item.status === "completed" ? "completed" : "in_progress",
|
|
33875
|
+
title: "Generate image"
|
|
33876
|
+
};
|
|
33877
|
+
}
|
|
33851
33878
|
if (item.type === "commandExecution") {
|
|
33852
33879
|
const output2 = item.aggregatedOutput ?? "";
|
|
33853
33880
|
const content = [];
|
|
@@ -35117,7 +35144,7 @@ var CodexAcpAgent = class {
|
|
|
35117
35144
|
};
|
|
35118
35145
|
#completeTurn = async (turn) => {
|
|
35119
35146
|
const active = this.#turn;
|
|
35120
|
-
if (active === null) {
|
|
35147
|
+
if (active === null || active.turn.id !== turn.id) {
|
|
35121
35148
|
return;
|
|
35122
35149
|
}
|
|
35123
35150
|
await this.#updateTail;
|
|
@@ -43007,24 +43034,33 @@ async function runRelayConnection({
|
|
|
43007
43034
|
// src/relay-connection/session-event-publisher.ts
|
|
43008
43035
|
import { WebSocket as WebSocket8 } from "undici";
|
|
43009
43036
|
var MAX_BUFFERED_BYTES = 32 * 1024 * 1024;
|
|
43037
|
+
var SESSION_EVENT_V2_BATCH_WINDOW_MILLISECONDS = 200;
|
|
43010
43038
|
var DaemonSessionEventPublisher = class {
|
|
43039
|
+
#pendingV2Events = [];
|
|
43040
|
+
#pendingV2Task = null;
|
|
43011
43041
|
#socket = null;
|
|
43042
|
+
#timer;
|
|
43043
|
+
constructor(timer) {
|
|
43044
|
+
this.#timer = timer;
|
|
43045
|
+
}
|
|
43012
43046
|
connect = (socket) => {
|
|
43047
|
+
this.dropPendingV2Events();
|
|
43013
43048
|
this.#socket = socket;
|
|
43014
43049
|
};
|
|
43015
43050
|
disconnect = (socket) => {
|
|
43016
43051
|
if (this.#socket === socket) {
|
|
43017
43052
|
this.#socket = null;
|
|
43053
|
+
this.dropPendingV2Events();
|
|
43018
43054
|
}
|
|
43019
43055
|
};
|
|
43020
43056
|
close = () => {
|
|
43021
43057
|
this.#socket = null;
|
|
43058
|
+
this.dropPendingV2Events();
|
|
43022
43059
|
};
|
|
43023
43060
|
publishOperationFailure = (sessionId, requestId, code, message) => {
|
|
43024
43061
|
this.#send({ kind: "session.operation.failed", sessionId, requestId, code, message });
|
|
43025
43062
|
};
|
|
43026
43063
|
publishStatus = (event) => this.#send(event);
|
|
43027
|
-
publishV2 = (event) => this.#send({ event, kind: SESSION_EVENT_V2_KIND });
|
|
43028
43064
|
#send = (message) => {
|
|
43029
43065
|
const socket = this.#socket;
|
|
43030
43066
|
if (socket === null || socket.readyState !== WebSocket8.OPEN) {
|
|
@@ -43040,6 +43076,44 @@ var DaemonSessionEventPublisher = class {
|
|
|
43040
43076
|
} catch {
|
|
43041
43077
|
}
|
|
43042
43078
|
};
|
|
43079
|
+
publishV2 = (event) => {
|
|
43080
|
+
const socket = this.#socket;
|
|
43081
|
+
if (socket === null || socket.readyState !== WebSocket8.OPEN) {
|
|
43082
|
+
return;
|
|
43083
|
+
}
|
|
43084
|
+
this.#pendingV2Events.push(event);
|
|
43085
|
+
if (this.#pendingV2Events.length >= SESSION_EVENT_V2_BATCH_MAX_SIZE) {
|
|
43086
|
+
this.flushV2Events(socket);
|
|
43087
|
+
return;
|
|
43088
|
+
}
|
|
43089
|
+
this.#pendingV2Task ??= this.#timer.schedule(
|
|
43090
|
+
() => this.flushV2Events(socket),
|
|
43091
|
+
SESSION_EVENT_V2_BATCH_WINDOW_MILLISECONDS
|
|
43092
|
+
);
|
|
43093
|
+
};
|
|
43094
|
+
dropPendingV2Events = () => {
|
|
43095
|
+
this.#pendingV2Task?.cancel();
|
|
43096
|
+
this.#pendingV2Task = null;
|
|
43097
|
+
this.#pendingV2Events = [];
|
|
43098
|
+
};
|
|
43099
|
+
flushV2Events = (socket) => {
|
|
43100
|
+
this.#pendingV2Task?.cancel();
|
|
43101
|
+
this.#pendingV2Task = null;
|
|
43102
|
+
const events = this.#pendingV2Events;
|
|
43103
|
+
this.#pendingV2Events = [];
|
|
43104
|
+
if (events.length === 0 || this.#socket !== socket || socket.readyState !== WebSocket8.OPEN) {
|
|
43105
|
+
return;
|
|
43106
|
+
}
|
|
43107
|
+
const encoded = encodeDaemonToServiceMessage({ events, kind: SESSION_EVENT_V2_KIND });
|
|
43108
|
+
if (socket.bufferedAmount + Buffer.byteLength(encoded, "utf8") > MAX_BUFFERED_BYTES) {
|
|
43109
|
+
socket.close(1013, "Live event transport overloaded");
|
|
43110
|
+
return;
|
|
43111
|
+
}
|
|
43112
|
+
try {
|
|
43113
|
+
socket.send(encoded);
|
|
43114
|
+
} catch {
|
|
43115
|
+
}
|
|
43116
|
+
};
|
|
43043
43117
|
};
|
|
43044
43118
|
|
|
43045
43119
|
// src/relay-connection/timer.ts
|
|
@@ -43283,7 +43357,7 @@ async function runDaemon(config2, audit, signal, timer = systemDaemonTimer, opti
|
|
|
43283
43357
|
const sessionStore = new SqliteAcpSessionStore(sessionDatabase, eventsV2);
|
|
43284
43358
|
await using externalContent = new LocalExternalContentStore(stateDirectory);
|
|
43285
43359
|
const operations = new DaemonOperationState();
|
|
43286
|
-
const publisher = new DaemonSessionEventPublisher();
|
|
43360
|
+
const publisher = new DaemonSessionEventPublisher(timer);
|
|
43287
43361
|
const eventLogV2 = new DaemonSessionEventLogV2(
|
|
43288
43362
|
publisher,
|
|
43289
43363
|
(sessionId, event) => agentRuntime.recordLifecycleEventV2(sessionId, event),
|