@moxt-ai/mobius 0.0.300 → 0.0.302
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/harness/claude/endpoint.d.ts.map +1 -1
- package/dist/acp/harness/claude/endpoint.js +2 -0
- package/dist/acp/harness/claude/endpoint.js.map +1 -1
- package/dist/acp/harness/claude/parent-lifeline.d.ts +3 -0
- package/dist/acp/harness/claude/parent-lifeline.d.ts.map +1 -0
- package/dist/acp/harness/claude/parent-lifeline.js +73 -0
- package/dist/acp/harness/claude/parent-lifeline.js.map +1 -0
- package/dist/acp/harness/codex/agent.d.ts.map +1 -1
- package/dist/acp/harness/codex/agent.js +5 -1
- package/dist/acp/harness/codex/agent.js.map +1 -1
- package/dist/acp/harness/pi/endpoint.d.ts.map +1 -1
- package/dist/acp/harness/pi/endpoint.js +1 -0
- package/dist/acp/harness/pi/endpoint.js.map +1 -1
- package/dist/cli.js +595 -61
- package/dist/cli.js.map +4 -4
- package/dist/generated/acp-session-store-migrations.d.ts +3 -0
- package/dist/generated/acp-session-store-migrations.d.ts.map +1 -1
- package/dist/generated/acp-session-store-migrations.js +5 -1
- package/dist/generated/acp-session-store-migrations.js.map +1 -1
- package/dist/runtime/command/registry/prompt.d.ts.map +1 -1
- package/dist/runtime/command/registry/prompt.js +6 -0
- package/dist/runtime/command/registry/prompt.js.map +1 -1
- package/dist/runtime/engine.d.ts +1 -0
- package/dist/runtime/engine.d.ts.map +1 -1
- package/dist/runtime/engine.js +8 -0
- package/dist/runtime/engine.js.map +1 -1
- package/dist/runtime/run.d.ts +1 -0
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +3 -0
- package/dist/runtime/run.js.map +1 -1
- package/dist/runtime.js +560 -54
- package/dist/runtime.js.map +4 -4
- package/dist/schema/acp-session-store/execution-receipt.d.ts +136 -0
- package/dist/schema/acp-session-store/execution-receipt.d.ts.map +1 -0
- package/dist/schema/acp-session-store/execution-receipt.js +12 -0
- package/dist/schema/acp-session-store/execution-receipt.js.map +1 -0
- package/dist/schema/acp-session-store/index.d.ts +1 -0
- package/dist/schema/acp-session-store/index.d.ts.map +1 -1
- package/dist/schema/acp-session-store/index.js +1 -0
- package/dist/schema/acp-session-store/index.js.map +1 -1
- package/dist/session/api/session-api.d.ts +4 -0
- package/dist/session/api/session-api.d.ts.map +1 -1
- package/dist/session/api/session-api.js.map +1 -1
- 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 +25 -4
- package/dist/session/api/session-layer.js.map +1 -1
- package/dist/session/history/session-event-store.d.ts +7 -4
- package/dist/session/history/session-event-store.d.ts.map +1 -1
- package/dist/session/history/session-event-store.js +13 -7
- package/dist/session/history/session-event-store.js.map +1 -1
- package/dist/session/history/session-history.d.ts +1 -4
- package/dist/session/history/session-history.d.ts.map +1 -1
- package/dist/session/history/session-history.js +1 -4
- package/dist/session/history/session-history.js.map +1 -1
- package/dist/session/live/agent-session-restore.d.ts +1 -0
- package/dist/session/live/agent-session-restore.d.ts.map +1 -1
- package/dist/session/live/agent-session.d.ts +2 -0
- package/dist/session/live/agent-session.d.ts.map +1 -1
- package/dist/session/live/agent-session.js +15 -4
- package/dist/session/live/agent-session.js.map +1 -1
- package/dist/session/live/session-restore.d.ts.map +1 -1
- package/dist/session/live/session-restore.js +37 -0
- package/dist/session/live/session-restore.js.map +1 -1
- package/dist/session/manager/session-manager.d.ts.map +1 -1
- package/dist/session/manager/session-manager.js +11 -3
- package/dist/session/manager/session-manager.js.map +1 -1
- package/dist/session/prompt/execute-prompt.d.ts.map +1 -1
- package/dist/session/prompt/execute-prompt.js +6 -1
- package/dist/session/prompt/execute-prompt.js.map +1 -1
- package/dist/session/prompt/prompt-lifecycle.d.ts +1 -0
- package/dist/session/prompt/prompt-lifecycle.d.ts.map +1 -1
- package/dist/session/prompt/prompt-lifecycle.js +9 -1
- package/dist/session/prompt/prompt-lifecycle.js.map +1 -1
- package/dist/session/turn/execution-receipts.d.ts +23 -2
- package/dist/session/turn/execution-receipts.d.ts.map +1 -1
- package/dist/session/turn/execution-receipts.js +161 -10
- package/dist/session/turn/execution-receipts.js.map +1 -1
- package/dist/storage/session/execution-receipt-table.d.ts +45 -0
- package/dist/storage/session/execution-receipt-table.d.ts.map +1 -0
- package/dist/storage/session/execution-receipt-table.js +64 -0
- package/dist/storage/session/execution-receipt-table.js.map +1 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-prompt.js","sourceRoot":"","sources":["../../../src/session/prompt/execute-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"execute-prompt.js","sourceRoot":"","sources":["../../../src/session/prompt/execute-prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,7 @@ export declare class PromptLifecycle {
|
|
|
18
18
|
};
|
|
19
19
|
readonly record: (recorded: SessionLiveEvent) => void;
|
|
20
20
|
readonly publishTerminal: (sessionId: string, commandId: string) => void;
|
|
21
|
+
readonly replayOutcome: (sessionId: string, event: SessionEventPayload) => Promise<void>;
|
|
21
22
|
readonly queueChanged: (sessionId: string) => Promise<void>;
|
|
22
23
|
readonly completed: (sessionId: string, commandId: string, stopReason: string) => Promise<void>;
|
|
23
24
|
readonly failed: (sessionId: string, commandId: string, code: string, message: string) => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/session/prompt/prompt-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,YAAY,EACZ,sBAAsB,EACtB,2BAA2B,EAC3B,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACvB,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"prompt-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/session/prompt/prompt-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,YAAY,EACZ,sBAAsB,EACtB,2BAA2B,EAC3B,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACvB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAgBvE,MAAM,WAAW,qBAAqB;IAClC,QAAQ,CAAC,oBAAoB,EAAE,SAAS,2BAA2B,EAAE,CAAC;CACzE;AA2BD,qBAAa,eAAe;;IAQxB,YACI,IAAI,EAAE,gBAAgB,EACtB,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,KAAK,OAAO,CAAC,OAAO,CAAC,EACpF,gBAAgB,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,EAKtD;IAED,QAAQ,CAAC,SAAS,YAAa,oBAAoB,KAAG,IAAI,CAcxD;IAEF,QAAQ,CAAC,OAAO,cACD,MAAM,aACN,MAAM,aACN,MAAM,SACV,MAAM,eACA,MAAM,KACpB;QACC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;QAC1C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC;QACzC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;KACrC,CAcC;IAEF,QAAQ,CAAC,MAAM,aAAc,gBAAgB,KAAG,IAAI,CAsBlD;IAEF,QAAQ,CAAC,eAAe,cAAe,MAAM,aAAa,MAAM,KAAG,IAAI,CAyBrE;IAEF,QAAQ,CAAC,aAAa,cAAqB,MAAM,SAAS,mBAAmB,KAAG,OAAO,CAAC,IAAI,CAAC,CAM3F;IAEF,QAAQ,CAAC,YAAY,cAAqB,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAK9D;IAEF,QAAQ,CAAC,SAAS,cAAqB,MAAM,aAAa,MAAM,cAAc,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAiBlG;IAEF,QAAQ,CAAC,MAAM,cAAqB,MAAM,aAAa,MAAM,QAAQ,MAAM,WAAW,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAY1G;IAEF,QAAQ,CAAC,qBAAqB,cAAe,MAAM,KAAG,qBAAqB,CASxE;CACN;AAED,wBAAsB,mBAAmB,CACrC,UAAU,EAAE,eAAe,EAC3B,UAAU,EAAE,iBAAiB,EAC7B,YAAY,EAAE,oBAAoB,GACnC,OAAO,CAAC,IAAI,CAAC,CAcf"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { SESSION_CLOSED_ERROR_CODE } from "@moxt-ai/mobius-sdk/protocol";
|
|
1
2
|
function promptContent(command) {
|
|
2
3
|
const content = [];
|
|
3
4
|
if (command.prompt.length > 0) {
|
|
@@ -108,6 +109,13 @@ export class PromptLifecycle {
|
|
|
108
109
|
}
|
|
109
110
|
this.#queued.delete(commandId);
|
|
110
111
|
};
|
|
112
|
+
replayOutcome = async (sessionId, event) => {
|
|
113
|
+
if (event.type !== "lifecycle-metadata" || !("commandId" in event.payload)) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
await this.#recordLifecycle(sessionId, event);
|
|
117
|
+
this.publishTerminal(sessionId, event.payload.commandId);
|
|
118
|
+
};
|
|
111
119
|
queueChanged = async (sessionId) => {
|
|
112
120
|
await this.#recordLifecycle(sessionId, {
|
|
113
121
|
type: "lifecycle-metadata",
|
|
@@ -136,7 +144,7 @@ export class PromptLifecycle {
|
|
|
136
144
|
type: "lifecycle-metadata",
|
|
137
145
|
payload: { kind: "prompt.failed-before-start", commandId, code, message },
|
|
138
146
|
});
|
|
139
|
-
if (!recorded) {
|
|
147
|
+
if (!recorded || code === SESSION_CLOSED_ERROR_CODE) {
|
|
140
148
|
this.#sink.publishOperationFailure(sessionId, commandId, code, message);
|
|
141
149
|
}
|
|
142
150
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-lifecycle.js","sourceRoot":"","sources":["../../../src/session/prompt/prompt-lifecycle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prompt-lifecycle.js","sourceRoot":"","sources":["../../../src/session/prompt/prompt-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,38 @@
|
|
|
1
|
+
import { type SessionEventPayload, type SessionLiveEvent } from "@moxt-ai/mobius-sdk/protocol";
|
|
2
|
+
import type { ExecutionReceiptTable } from "../../storage/session/execution-receipt-table.ts";
|
|
1
3
|
export type RuntimeExecutionState = "cancelled" | "dispatching" | "failed" | "running" | "succeeded";
|
|
2
4
|
export type RuntimeExecutionReceipt = Readonly<{
|
|
3
5
|
attemptId: string;
|
|
4
6
|
commandId: string;
|
|
5
|
-
kind: "accepted"
|
|
7
|
+
kind: "accepted";
|
|
8
|
+
state: "dispatching";
|
|
9
|
+
}> | Readonly<{
|
|
10
|
+
attemptId: string;
|
|
11
|
+
commandId: string;
|
|
12
|
+
kind: "duplicate";
|
|
6
13
|
state: RuntimeExecutionState;
|
|
14
|
+
outcome: SessionEventPayload | undefined;
|
|
7
15
|
}> | {
|
|
8
16
|
readonly kind: "conflict";
|
|
9
17
|
};
|
|
10
18
|
export declare class ExecutionReceipts {
|
|
11
19
|
#private;
|
|
20
|
+
constructor(table?: ExecutionReceiptTable, onCount?: (count: number) => void);
|
|
21
|
+
readonly beginShutdown: () => void;
|
|
22
|
+
readonly outcome: (commandId: string) => SessionEventPayload | undefined;
|
|
23
|
+
readonly recordOutcome: (event: SessionLiveEvent) => void;
|
|
24
|
+
readonly recover: () => readonly {
|
|
25
|
+
readonly sessionId: string;
|
|
26
|
+
readonly event: SessionEventPayload;
|
|
27
|
+
readonly recordedAt: string;
|
|
28
|
+
}[];
|
|
29
|
+
readonly terminalOutcomes: (sessionId: string) => readonly {
|
|
30
|
+
readonly event: SessionEventPayload;
|
|
31
|
+
readonly recordedAt: string;
|
|
32
|
+
}[];
|
|
12
33
|
readonly claimExecution: (commandId: string, sessionId: string, commandJson: string) => RuntimeExecutionReceipt;
|
|
13
34
|
readonly transitionExecution: (commandId: string, state: RuntimeExecutionState) => void;
|
|
14
|
-
/**
|
|
35
|
+
/** Only commands without a terminal result can still be cancelled. */
|
|
15
36
|
readonly findUnsettledAttemptId: (commandId: string, sessionId: string) => string | null;
|
|
16
37
|
readonly isTerminalExecution: (commandId: string, sessionId: string) => boolean;
|
|
17
38
|
readonly close: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution-receipts.d.ts","sourceRoot":"","sources":["../../../src/session/turn/execution-receipts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"execution-receipts.d.ts","sourceRoot":"","sources":["../../../src/session/turn/execution-receipts.ts"],"names":[],"mappings":"AACA,OAAO,EACH,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EAExB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kDAAkD,CAAC;AAI9F,MAAM,MAAM,qBAAqB,GAAG,WAAW,GAAG,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;AAErG,MAAM,MAAM,uBAAuB,GAC7B,QAAQ,CAAC;IACL,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;CACxB,CAAC,GACF,QAAQ,CAAC;IACL,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,qBAAqB,CAAC;IAC7B,OAAO,EAAE,mBAAmB,GAAG,SAAS,CAAC;CAC5C,CAAC,GACF;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AAkBpC,qBAAa,iBAAiB;;IAS1B,YAAY,KAAK,CAAC,EAAE,qBAAqB,EAAE,OAAO,GAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAsB,EAgB5F;IAqBD,QAAQ,CAAC,aAAa,QAAO,IAAI,CAE/B;IACF,QAAQ,CAAC,OAAO,cAAe,MAAM,KAAG,mBAAmB,GAAG,SAAS,CAKrE;IACF,QAAQ,CAAC,aAAa,UAAW,gBAAgB,KAAG,IAAI,CA8BtD;IACF,QAAQ,CAAC,OAAO,QAAO,SAAS;QAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;QACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;KAC/B,EAAE,CAuCD;IAEF,QAAQ,CAAC,gBAAgB,cACV,MAAM,KAClB,SAAS;QACR,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;QACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;KAC/B,EAAE,CAYI;IAEP,QAAQ,CAAC,cAAc,cAAe,MAAM,aAAa,MAAM,eAAe,MAAM,KAAG,uBAAuB,CA0C5G;IAEF,QAAQ,CAAC,mBAAmB,cAAe,MAAM,SAAS,qBAAqB,KAAG,IAAI,CAmBpF;IAEF,sEAAsE;IACtE,QAAQ,CAAC,sBAAsB,cAAe,MAAM,aAAa,MAAM,KAAG,MAAM,GAAG,IAAI,CAGrF;IAEF,QAAQ,CAAC,mBAAmB,cAAe,MAAM,aAAa,MAAM,KAAG,OAAO,CAG5E;IAEF,QAAQ,CAAC,KAAK,QAAO,IAAI,CAKvB;IAEF,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAoBpC;CACL"}
|
|
@@ -1,22 +1,170 @@
|
|
|
1
1
|
import { createHash, randomUUID } from "node:crypto";
|
|
2
|
+
import { sessionEventPayloadSchema, } from "@moxt-ai/mobius-sdk/protocol";
|
|
3
|
+
import { z } from "zod";
|
|
2
4
|
const MAX_TERMINAL_RECEIPTS = 1_024;
|
|
3
5
|
function isTerminal(state) {
|
|
4
6
|
return state === "succeeded" || state === "failed" || state === "cancelled";
|
|
5
7
|
}
|
|
6
8
|
export class ExecutionReceipts {
|
|
7
9
|
#executions = new Map();
|
|
10
|
+
#recoveredCommands = new Set();
|
|
8
11
|
#terminalCountBySession = new Map();
|
|
12
|
+
#table;
|
|
13
|
+
#closing = false;
|
|
14
|
+
#activeCount = 0;
|
|
15
|
+
#onCount;
|
|
16
|
+
constructor(table, onCount = () => undefined) {
|
|
17
|
+
this.#onCount = onCount;
|
|
18
|
+
this.#table = table;
|
|
19
|
+
for (const row of table?.list() ?? []) {
|
|
20
|
+
this.#executions.set(row.commandId, row);
|
|
21
|
+
this.#recoveredCommands.add(row.commandId);
|
|
22
|
+
if (!isTerminal(row.state)) {
|
|
23
|
+
this.#activeCount += 1;
|
|
24
|
+
}
|
|
25
|
+
if (isTerminal(row.state)) {
|
|
26
|
+
this.#terminalCountBySession.set(row.sessionId, (this.#terminalCountBySession.get(row.sessionId) ?? 0) + 1);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
#save = (commandId, receipt) => {
|
|
31
|
+
if (!this.#closing) {
|
|
32
|
+
this.#table?.save({ ...receipt, commandId, updatedAt: new Date().toISOString() });
|
|
33
|
+
}
|
|
34
|
+
const previous = this.#executions.get(commandId);
|
|
35
|
+
const wasActive = previous !== undefined && !isTerminal(previous.state);
|
|
36
|
+
if (isTerminal(receipt.state)) {
|
|
37
|
+
this.#executions.delete(commandId);
|
|
38
|
+
}
|
|
39
|
+
this.#executions.set(commandId, receipt);
|
|
40
|
+
this.#activeCount += Number(!isTerminal(receipt.state)) - Number(wasActive);
|
|
41
|
+
this.#onCount(this.#activeCount);
|
|
42
|
+
if (isTerminal(receipt.state) && (previous === undefined || !isTerminal(previous.state))) {
|
|
43
|
+
this.#terminalCountBySession.set(receipt.sessionId, (this.#terminalCountBySession.get(receipt.sessionId) ?? 0) + 1);
|
|
44
|
+
this.pruneTerminalReceipts(receipt.sessionId);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
beginShutdown = () => {
|
|
48
|
+
this.#closing = true;
|
|
49
|
+
};
|
|
50
|
+
outcome = (commandId) => {
|
|
51
|
+
const receipt = this.#executions.get(commandId);
|
|
52
|
+
return receipt?.outcome === null || receipt === undefined
|
|
53
|
+
? undefined
|
|
54
|
+
: sessionEventPayloadSchema.parse(JSON.parse(receipt.outcome));
|
|
55
|
+
};
|
|
56
|
+
recordOutcome = (event) => {
|
|
57
|
+
if (event.type !== "lifecycle-metadata") {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const payload = event.payload;
|
|
61
|
+
if (payload.kind !== "prompt.completed" &&
|
|
62
|
+
payload.kind !== "prompt.failed" &&
|
|
63
|
+
payload.kind !== "prompt.failed-before-start") {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const receipt = this.#executions.get(payload.commandId);
|
|
67
|
+
if (receipt === undefined) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const sanitized = payload.kind === "prompt.completed"
|
|
71
|
+
? payload
|
|
72
|
+
: { ...payload, message: "The local Agent could not complete the request" };
|
|
73
|
+
this.#save(payload.commandId, {
|
|
74
|
+
...receipt,
|
|
75
|
+
state: payload.kind === "prompt.completed"
|
|
76
|
+
? payload.stopReason === "cancelled"
|
|
77
|
+
? "cancelled"
|
|
78
|
+
: "succeeded"
|
|
79
|
+
: "failed",
|
|
80
|
+
outcome: JSON.stringify({ type: "lifecycle-metadata", payload: sanitized, recordedAt: event.recordedAt }),
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
recover = () => {
|
|
84
|
+
const recovered = [];
|
|
85
|
+
for (const [commandId, receipt] of [...this.#executions]) {
|
|
86
|
+
const event = receipt.outcome === null
|
|
87
|
+
? {
|
|
88
|
+
type: "lifecycle-metadata",
|
|
89
|
+
payload: receipt.started
|
|
90
|
+
? {
|
|
91
|
+
kind: "prompt.failed",
|
|
92
|
+
commandId,
|
|
93
|
+
attemptId: receipt.attemptId,
|
|
94
|
+
code: "runtime_restarted",
|
|
95
|
+
message: "The local runtime restarted while this request was running",
|
|
96
|
+
}
|
|
97
|
+
: {
|
|
98
|
+
kind: "prompt.failed-before-start",
|
|
99
|
+
commandId,
|
|
100
|
+
code: "runtime_restarted",
|
|
101
|
+
message: "The local runtime restarted before this request started",
|
|
102
|
+
},
|
|
103
|
+
}
|
|
104
|
+
: sessionEventPayloadSchema.parse(JSON.parse(receipt.outcome));
|
|
105
|
+
const recordedAt = receipt.outcome === null
|
|
106
|
+
? new Date().toISOString()
|
|
107
|
+
: z.object({ recordedAt: z.string() }).parse(JSON.parse(receipt.outcome)).recordedAt;
|
|
108
|
+
recovered.push({ sessionId: receipt.sessionId, event, recordedAt });
|
|
109
|
+
if (!isTerminal(receipt.state)) {
|
|
110
|
+
const state = event.type === "lifecycle-metadata" && event.payload.kind === "prompt.completed"
|
|
111
|
+
? event.payload.stopReason === "cancelled"
|
|
112
|
+
? "cancelled"
|
|
113
|
+
: "succeeded"
|
|
114
|
+
: "failed";
|
|
115
|
+
this.#save(commandId, { ...receipt, state, outcome: JSON.stringify({ ...event, recordedAt }) });
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return recovered;
|
|
119
|
+
};
|
|
120
|
+
terminalOutcomes = (sessionId) => [...this.#executions.values()].flatMap((receipt) => {
|
|
121
|
+
if (receipt.sessionId !== sessionId || receipt.outcome === null) {
|
|
122
|
+
return [];
|
|
123
|
+
}
|
|
124
|
+
const decoded = JSON.parse(receipt.outcome);
|
|
125
|
+
return [
|
|
126
|
+
{
|
|
127
|
+
event: sessionEventPayloadSchema.parse(decoded),
|
|
128
|
+
recordedAt: z.object({ recordedAt: z.string() }).parse(decoded).recordedAt,
|
|
129
|
+
},
|
|
130
|
+
];
|
|
131
|
+
});
|
|
9
132
|
claimExecution = (commandId, sessionId, commandJson) => {
|
|
10
133
|
const commandHash = createHash("sha256").update(commandJson).digest("hex");
|
|
11
|
-
|
|
134
|
+
let existing = this.#executions.get(commandId);
|
|
135
|
+
const previous = this.outcome(commandId);
|
|
136
|
+
if (existing?.sessionId === sessionId &&
|
|
137
|
+
!existing.started &&
|
|
138
|
+
previous?.type === "lifecycle-metadata" &&
|
|
139
|
+
previous.payload.kind === "prompt.failed-before-start" &&
|
|
140
|
+
previous.payload.code === "runtime_restarted") {
|
|
141
|
+
this.#executions.delete(commandId);
|
|
142
|
+
this.#recoveredCommands.delete(commandId);
|
|
143
|
+
this.#table?.remove(commandId);
|
|
144
|
+
this.#terminalCountBySession.set(sessionId, Math.max(0, (this.#terminalCountBySession.get(sessionId) ?? 1) - 1));
|
|
145
|
+
existing = undefined;
|
|
146
|
+
}
|
|
12
147
|
if (existing !== undefined) {
|
|
13
148
|
if (existing.sessionId !== sessionId || existing.commandHash !== commandHash) {
|
|
14
149
|
return { kind: "conflict" };
|
|
15
150
|
}
|
|
16
|
-
return {
|
|
151
|
+
return {
|
|
152
|
+
attemptId: existing.attemptId,
|
|
153
|
+
commandId,
|
|
154
|
+
kind: "duplicate",
|
|
155
|
+
state: existing.state,
|
|
156
|
+
outcome: this.#recoveredCommands.has(commandId) ? this.outcome(commandId) : undefined,
|
|
157
|
+
};
|
|
17
158
|
}
|
|
18
159
|
const attemptId = randomUUID();
|
|
19
|
-
this.#
|
|
160
|
+
this.#save(commandId, {
|
|
161
|
+
attemptId,
|
|
162
|
+
commandHash,
|
|
163
|
+
sessionId,
|
|
164
|
+
state: "dispatching",
|
|
165
|
+
started: false,
|
|
166
|
+
outcome: null,
|
|
167
|
+
});
|
|
20
168
|
return { attemptId, commandId, kind: "accepted", state: "dispatching" };
|
|
21
169
|
};
|
|
22
170
|
transitionExecution = (commandId, state) => {
|
|
@@ -32,15 +180,14 @@ export class ExecutionReceipts {
|
|
|
32
180
|
if (!allowed) {
|
|
33
181
|
throw new Error("The runtime execution transition is invalid");
|
|
34
182
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
this.#
|
|
40
|
-
this.pruneTerminalReceipts(current.sessionId);
|
|
183
|
+
if (state === "running") {
|
|
184
|
+
this.#save(commandId, { ...current, state, started: true });
|
|
185
|
+
}
|
|
186
|
+
else if (isTerminal(state)) {
|
|
187
|
+
this.#save(commandId, { ...current, state });
|
|
41
188
|
}
|
|
42
189
|
};
|
|
43
|
-
/**
|
|
190
|
+
/** Only commands without a terminal result can still be cancelled. */
|
|
44
191
|
findUnsettledAttemptId = (commandId, sessionId) => {
|
|
45
192
|
const receipt = this.#executions.get(commandId);
|
|
46
193
|
return receipt?.sessionId === sessionId && !isTerminal(receipt.state) ? receipt.attemptId : null;
|
|
@@ -51,7 +198,9 @@ export class ExecutionReceipts {
|
|
|
51
198
|
};
|
|
52
199
|
close = () => {
|
|
53
200
|
this.#executions.clear();
|
|
201
|
+
this.#recoveredCommands.clear();
|
|
54
202
|
this.#terminalCountBySession.clear();
|
|
203
|
+
this.#activeCount = 0;
|
|
55
204
|
};
|
|
56
205
|
pruneTerminalReceipts = (sessionId) => {
|
|
57
206
|
if ((this.#terminalCountBySession.get(sessionId) ?? 0) <= MAX_TERMINAL_RECEIPTS) {
|
|
@@ -60,6 +209,8 @@ export class ExecutionReceipts {
|
|
|
60
209
|
for (const [commandId, receipt] of this.#executions) {
|
|
61
210
|
if (receipt.sessionId === sessionId && isTerminal(receipt.state)) {
|
|
62
211
|
this.#executions.delete(commandId);
|
|
212
|
+
this.#recoveredCommands.delete(commandId);
|
|
213
|
+
this.#table?.remove(commandId);
|
|
63
214
|
const remaining = (this.#terminalCountBySession.get(sessionId) ?? 1) - 1;
|
|
64
215
|
if (remaining > 0) {
|
|
65
216
|
this.#terminalCountBySession.set(sessionId, remaining);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution-receipts.js","sourceRoot":"","sources":["../../../src/session/turn/execution-receipts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"execution-receipts.js","sourceRoot":"","sources":["../../../src/session/turn/execution-receipts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { LocalSqliteDatabase } from "../sqlite/local-sqlite-database.ts";
|
|
3
|
+
declare const receiptSchema: z.ZodReadonly<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
4
|
+
commandId: z.ZodString;
|
|
5
|
+
sessionId: z.ZodString;
|
|
6
|
+
commandHash: z.ZodString;
|
|
7
|
+
attemptId: z.ZodString;
|
|
8
|
+
updatedAt: z.ZodString;
|
|
9
|
+
state: z.ZodLiteral<"dispatching">;
|
|
10
|
+
started: z.ZodLiteral<false>;
|
|
11
|
+
outcome: z.ZodNull;
|
|
12
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
13
|
+
commandId: z.ZodString;
|
|
14
|
+
sessionId: z.ZodString;
|
|
15
|
+
commandHash: z.ZodString;
|
|
16
|
+
attemptId: z.ZodString;
|
|
17
|
+
updatedAt: z.ZodString;
|
|
18
|
+
state: z.ZodLiteral<"running">;
|
|
19
|
+
started: z.ZodLiteral<true>;
|
|
20
|
+
outcome: z.ZodNullable<z.ZodString>;
|
|
21
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
22
|
+
commandId: z.ZodString;
|
|
23
|
+
sessionId: z.ZodString;
|
|
24
|
+
commandHash: z.ZodString;
|
|
25
|
+
attemptId: z.ZodString;
|
|
26
|
+
updatedAt: z.ZodString;
|
|
27
|
+
state: z.ZodEnum<{
|
|
28
|
+
cancelled: "cancelled";
|
|
29
|
+
failed: "failed";
|
|
30
|
+
succeeded: "succeeded";
|
|
31
|
+
}>;
|
|
32
|
+
started: z.ZodBoolean;
|
|
33
|
+
outcome: z.ZodNullable<z.ZodString>;
|
|
34
|
+
}, z.core.$strip>], "state">>;
|
|
35
|
+
export type PersistedExecutionReceipt = z.infer<typeof receiptSchema>;
|
|
36
|
+
/** Prompt bodies and Agent error text never enter the execution ledger. */
|
|
37
|
+
export declare class ExecutionReceiptTable {
|
|
38
|
+
#private;
|
|
39
|
+
constructor(database: LocalSqliteDatabase);
|
|
40
|
+
readonly list: () => readonly PersistedExecutionReceipt[];
|
|
41
|
+
readonly save: (receipt: PersistedExecutionReceipt) => void;
|
|
42
|
+
readonly remove: (commandId: string) => void;
|
|
43
|
+
}
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=execution-receipt-table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-receipt-table.d.ts","sourceRoot":"","sources":["../../../src/storage/session/execution-receipt-table.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAS9E,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAUJ,CAAC;AAChB,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEtE,2EAA2E;AAC3E,qBAAa,qBAAqB;;IAE9B,YAAY,QAAQ,EAAE,mBAAmB,EAExC;IACD,QAAQ,CAAC,IAAI,QAAO,SAAS,yBAAyB,EAAE,CAS9C;IACV,QAAQ,CAAC,IAAI,YAAa,yBAAyB,KAAG,IAAI,CAsCxD;IACF,QAAQ,CAAC,MAAM,cAAe,MAAM,KAAG,IAAI,CAEzC;CACL"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { and, asc, desc, eq, inArray, notInArray } from "drizzle-orm";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { executionReceipt } from "../../schema/acp-session-store/index.js";
|
|
4
|
+
const receiptFields = z.object({
|
|
5
|
+
commandId: z.string(),
|
|
6
|
+
sessionId: z.string(),
|
|
7
|
+
commandHash: z.string(),
|
|
8
|
+
attemptId: z.string(),
|
|
9
|
+
updatedAt: z.string(),
|
|
10
|
+
});
|
|
11
|
+
const receiptSchema = z
|
|
12
|
+
.discriminatedUnion("state", [
|
|
13
|
+
receiptFields.extend({ state: z.literal("dispatching"), started: z.literal(false), outcome: z.null() }),
|
|
14
|
+
receiptFields.extend({ state: z.literal("running"), started: z.literal(true), outcome: z.string().nullable() }),
|
|
15
|
+
receiptFields.extend({
|
|
16
|
+
state: z.enum(["succeeded", "failed", "cancelled"]),
|
|
17
|
+
started: z.boolean(),
|
|
18
|
+
outcome: z.string().nullable(),
|
|
19
|
+
}),
|
|
20
|
+
])
|
|
21
|
+
.readonly();
|
|
22
|
+
/** Prompt bodies and Agent error text never enter the execution ledger. */
|
|
23
|
+
export class ExecutionReceiptTable {
|
|
24
|
+
#database;
|
|
25
|
+
constructor(database) {
|
|
26
|
+
this.#database = database;
|
|
27
|
+
}
|
|
28
|
+
list = () => receiptSchema
|
|
29
|
+
.array()
|
|
30
|
+
.parse(this.#database.orm
|
|
31
|
+
.select()
|
|
32
|
+
.from(executionReceipt)
|
|
33
|
+
.orderBy(asc(executionReceipt.updatedAt), asc(executionReceipt.commandId))
|
|
34
|
+
.all());
|
|
35
|
+
save = (receipt) => {
|
|
36
|
+
this.#database.transaction(() => {
|
|
37
|
+
this.#database.orm
|
|
38
|
+
.insert(executionReceipt)
|
|
39
|
+
.values(receipt)
|
|
40
|
+
.onConflictDoUpdate({ target: executionReceipt.commandId, set: receipt })
|
|
41
|
+
.run();
|
|
42
|
+
if (receipt.state === "dispatching" || receipt.state === "running") {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const retained = this.#database.orm
|
|
46
|
+
.select({ commandId: executionReceipt.commandId })
|
|
47
|
+
.from(executionReceipt)
|
|
48
|
+
.where(and(eq(executionReceipt.sessionId, receipt.sessionId), inArray(executionReceipt.state, ["succeeded", "failed", "cancelled"])))
|
|
49
|
+
.orderBy(desc(executionReceipt.updatedAt), desc(executionReceipt.commandId))
|
|
50
|
+
.limit(1024)
|
|
51
|
+
.all();
|
|
52
|
+
if (retained.length === 1024) {
|
|
53
|
+
this.#database.orm
|
|
54
|
+
.delete(executionReceipt)
|
|
55
|
+
.where(and(eq(executionReceipt.sessionId, receipt.sessionId), inArray(executionReceipt.state, ["succeeded", "failed", "cancelled"]), notInArray(executionReceipt.commandId, retained.map((row) => row.commandId))))
|
|
56
|
+
.run();
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
remove = (commandId) => {
|
|
61
|
+
this.#database.orm.delete(executionReceipt).where(eq(executionReceipt.commandId, commandId)).run();
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=execution-receipt-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-receipt-table.js","sourceRoot":"","sources":["../../../src/storage/session/execution-receipt-table.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@moxt-ai/mobius",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.302",
|
|
4
4
|
"description": "Mobius CLI for pairing and running local AI agent services.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"@anthropic-ai/sdk": "0.122.0",
|
|
50
|
-
"@moxt-ai/mobius-sdk": "0.0.
|
|
50
|
+
"@moxt-ai/mobius-sdk": "0.0.117",
|
|
51
51
|
"@moxt-ai/mobius-test": "0.0.1",
|
|
52
52
|
"@types/node": "^24.13.5",
|
|
53
53
|
"@types/semver": "^7.8.0",
|