@moxt-ai/mobius 0.0.7 → 0.0.9
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-session.d.ts +2 -2
- package/dist/acp/native-session.d.ts.map +1 -1
- package/dist/acp/native-session.js +2 -1
- package/dist/acp/native-session.js.map +1 -1
- package/dist/acp/session-manager.d.ts +2 -0
- package/dist/acp/session-manager.d.ts.map +1 -1
- package/dist/acp/session-manager.js +134 -32
- package/dist/acp/session-manager.js.map +1 -1
- package/dist/cli.js +212 -64
- package/dist/cli.js.map +3 -3
- package/dist/index.js +212 -64
- package/dist/index.js.map +3 -3
- package/dist/native-sessions/service.js +1 -1
- package/dist/native-sessions/service.js.map +1 -1
- package/dist/run-daemon.d.ts.map +1 -1
- package/dist/run-daemon.js +9 -0
- package/dist/run-daemon.js.map +1 -1
- package/package.json +1 -1
|
@@ -4,7 +4,7 @@ declare const nativeSessionInfoSchema: z.ZodReadonly<z.ZodObject<{
|
|
|
4
4
|
sessionId: z.ZodString;
|
|
5
5
|
cwd: z.ZodString;
|
|
6
6
|
additionalDirectories: z.ZodReadonly<z.ZodDefault<z.ZodArray<z.ZodString>>>;
|
|
7
|
-
title: z.ZodOptional<z.ZodNullable<z.ZodString
|
|
7
|
+
title: z.ZodOptional<z.ZodNullable<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>>;
|
|
8
8
|
updatedAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
9
9
|
}, z.core.$strip>>;
|
|
10
10
|
export type NativeSessionInfo = z.infer<typeof nativeSessionInfoSchema>;
|
|
@@ -13,7 +13,7 @@ export declare const nativeSessionPageSchema: z.ZodReadonly<z.ZodObject<{
|
|
|
13
13
|
sessionId: z.ZodString;
|
|
14
14
|
cwd: z.ZodString;
|
|
15
15
|
additionalDirectories: z.ZodReadonly<z.ZodDefault<z.ZodArray<z.ZodString>>>;
|
|
16
|
-
title: z.ZodOptional<z.ZodNullable<z.ZodString
|
|
16
|
+
title: z.ZodOptional<z.ZodNullable<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>>;
|
|
17
17
|
updatedAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
18
18
|
}, z.core.$strip>>>>;
|
|
19
19
|
nextCursor: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-session.d.ts","sourceRoot":"","sources":["../../src/acp/native-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"native-session.d.ts","sourceRoot":"","sources":["../../src/acp/native-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,qBAAqB,aAEa,CAAC;AAChD,QAAA,MAAM,uBAAuB;;;;;;kBAQhB,CAAC;AACd,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,eAAO,MAAM,uBAAuB;;;;;;;;;kBAKvB,CAAC;AACd,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,MAAM,MAAM,mBAAmB,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;CAAE,GAC7D;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC"}
|
|
@@ -4,6 +4,7 @@ const path = z
|
|
|
4
4
|
.min(1)
|
|
5
5
|
.max(2_048)
|
|
6
6
|
.refine((value) => !value.includes("\0"));
|
|
7
|
+
const title = z.string().transform((value) => value.slice(0, 500));
|
|
7
8
|
export const nativeSessionIdSchema = z
|
|
8
9
|
.string()
|
|
9
10
|
.regex(/^[a-zA-Z0-9][a-zA-Z0-9._:-]{0,255}$/);
|
|
@@ -12,7 +13,7 @@ const nativeSessionInfoSchema = z
|
|
|
12
13
|
sessionId: nativeSessionIdSchema,
|
|
13
14
|
cwd: path,
|
|
14
15
|
additionalDirectories: z.array(path).max(16).default([]).readonly(),
|
|
15
|
-
title:
|
|
16
|
+
title: title.nullish(),
|
|
16
17
|
updatedAt: z.iso.datetime({ offset: true }).nullish(),
|
|
17
18
|
})
|
|
18
19
|
.readonly();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-session.js","sourceRoot":"","sources":["../../src/acp/native-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,IAAI,GAAG,CAAC;KACX,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,KAAK,CAAC;KACV,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC;KACnC,MAAM,EAAE;KACR,KAAK,CAAC,qCAAqC,CAAC,CAAC;AAChD,MAAM,uBAAuB,GAAG,CAAC;KAC9B,MAAM,CAAC;IACN,SAAS,EAAE,qBAAqB;IAChC,GAAG,EAAE,IAAI;IACT,qBAAqB,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IACnE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"native-session.js","sourceRoot":"","sources":["../../src/acp/native-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,IAAI,GAAG,CAAC;KACX,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,KAAK,CAAC;KACV,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5C,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACnE,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC;KACnC,MAAM,EAAE;KACR,KAAK,CAAC,qCAAqC,CAAC,CAAC;AAChD,MAAM,uBAAuB,GAAG,CAAC;KAC9B,MAAM,CAAC;IACN,SAAS,EAAE,qBAAqB;IAChC,GAAG,EAAE,IAAI;IACT,qBAAqB,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IACnE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE;IACtB,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;CACtD,CAAC;KACD,QAAQ,EAAE,CAAC;AAEd,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC;KACrC,MAAM,CAAC;IACN,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IAC9D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE;CACnD,CAAC;KACD,QAAQ,EAAE,CAAC"}
|
|
@@ -81,6 +81,7 @@ declare class AcpProcessSession implements AcpClientHandler {
|
|
|
81
81
|
#private;
|
|
82
82
|
private constructor();
|
|
83
83
|
static readonly start: (options: AcpPrepareOptions, getObserver: () => AcpSessionObserver, store: AcpSessionStore) => Promise<AcpProcessSession>;
|
|
84
|
+
static readonly startNativeSessionBrowser: (options: AcpPrepareOptions, getObserver: () => AcpSessionObserver, store: AcpSessionStore) => Promise<AcpProcessSession>;
|
|
84
85
|
readonly belongsTo: (agentId: string, cwd: string, additionalDirectories: readonly string[]) => boolean;
|
|
85
86
|
readonly canRebind: () => boolean;
|
|
86
87
|
readonly prepared: () => AcpPreparedSession;
|
|
@@ -113,6 +114,7 @@ export declare class AcpSessionManager {
|
|
|
113
114
|
constructor(observer?: AcpSessionObserver, store?: AcpSessionStore);
|
|
114
115
|
readonly setObserver: (observer: AcpSessionObserver) => void;
|
|
115
116
|
readonly prepareSession: (options: AcpPrepareOptions) => Promise<AcpPreparedSession>;
|
|
117
|
+
readonly prepareNativeSessionBrowser: (options: AcpPrepareOptions) => Promise<AcpPreparedSession>;
|
|
116
118
|
readonly configureSession: (options: AcpConfigureOptions) => Promise<readonly SessionConfigOption[]>;
|
|
117
119
|
readonly cancelPrompt: (sessionId: string) => Promise<void>;
|
|
118
120
|
readonly runPrompt: (options: AcpTurnOptions) => Promise<AcpPromptResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/acp/session-manager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/acp/session-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,6 +44,12 @@ export class AcpExecutionError extends Error {
|
|
|
44
44
|
this.name = "AcpExecutionError";
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
|
+
class RetryableAcpInitializationError extends AcpExecutionError {
|
|
48
|
+
constructor(cause) {
|
|
49
|
+
super("ACP agent initialization failed", { cause });
|
|
50
|
+
this.name = "RetryableAcpInitializationError";
|
|
51
|
+
}
|
|
52
|
+
}
|
|
47
53
|
function readableWebStream(input) {
|
|
48
54
|
let streamOpen = true;
|
|
49
55
|
return new ReadableStream({
|
|
@@ -631,32 +637,41 @@ class AcpProcessSession {
|
|
|
631
637
|
const stream = ndJsonStream(createWritableAcpStream(stdin), readableWebStream(stdout));
|
|
632
638
|
this.#connection = createAcpClient(this).connect(stream);
|
|
633
639
|
}
|
|
634
|
-
static
|
|
635
|
-
|
|
636
|
-
const [adapterUnchanged, agentUnchanged] = await Promise.all([
|
|
637
|
-
revalidateExecutable(options.agent.adapterIdentity),
|
|
638
|
-
revalidateExecutable(options.agent.agentIdentity),
|
|
639
|
-
]);
|
|
640
|
-
options.signal.throwIfAborted();
|
|
641
|
-
if (!adapterUnchanged || !agentUnchanged) {
|
|
642
|
-
throw new AcpExecutionError("The local Agent runtime changed; restart Mobius before starting a new conversation", {}, "agent_runtime_changed");
|
|
643
|
-
}
|
|
644
|
-
const runtime = new AcpProcessSession(options.agent, options.cwd, options.additionalDirectories, options.sessionId, getObserver, store);
|
|
645
|
-
try {
|
|
646
|
-
await runtime.initialize(options.signal, options.origin);
|
|
647
|
-
return runtime;
|
|
648
|
-
}
|
|
649
|
-
catch (error) {
|
|
650
|
-
await runtime.closeProcess();
|
|
640
|
+
static async #start(options, getObserver, store, initialize) {
|
|
641
|
+
for (let attempt = 1; attempt <= 2; attempt += 1) {
|
|
651
642
|
options.signal.throwIfAborted();
|
|
652
|
-
|
|
653
|
-
|
|
643
|
+
const [adapterUnchanged, agentUnchanged] = await Promise.all([
|
|
644
|
+
revalidateExecutable(options.agent.adapterIdentity),
|
|
645
|
+
revalidateExecutable(options.agent.agentIdentity),
|
|
646
|
+
]);
|
|
647
|
+
options.signal.throwIfAborted();
|
|
648
|
+
if (!adapterUnchanged || !agentUnchanged) {
|
|
649
|
+
throw new AcpExecutionError("The local Agent runtime changed; restart Mobius before starting a new conversation", {}, "agent_runtime_changed");
|
|
650
|
+
}
|
|
651
|
+
const runtime = new AcpProcessSession(options.agent, options.cwd, options.additionalDirectories, options.sessionId, getObserver, store);
|
|
652
|
+
try {
|
|
653
|
+
await initialize(runtime);
|
|
654
|
+
return runtime;
|
|
655
|
+
}
|
|
656
|
+
catch (error) {
|
|
657
|
+
await runtime.closeProcess();
|
|
658
|
+
options.signal.throwIfAborted();
|
|
659
|
+
if (error instanceof RetryableAcpInitializationError && attempt === 1) {
|
|
660
|
+
console.warn(`[${options.agent.id}-acp] ACP agent initialization failed; retrying once`);
|
|
661
|
+
continue;
|
|
662
|
+
}
|
|
663
|
+
if (error instanceof AcpExecutionError) {
|
|
664
|
+
throw error;
|
|
665
|
+
}
|
|
666
|
+
throw new AcpExecutionError("ACP agent initialization failed", {
|
|
667
|
+
cause: error,
|
|
668
|
+
});
|
|
654
669
|
}
|
|
655
|
-
throw new AcpExecutionError("ACP agent initialization failed", {
|
|
656
|
-
cause: error,
|
|
657
|
-
});
|
|
658
670
|
}
|
|
659
|
-
|
|
671
|
+
throw new AcpExecutionError("ACP agent initialization failed");
|
|
672
|
+
}
|
|
673
|
+
static start = async (options, getObserver, store) => await AcpProcessSession.#start(options, getObserver, store, async (runtime) => await runtime.initialize(options.signal, options.origin));
|
|
674
|
+
static startNativeSessionBrowser = async (options, getObserver, store) => await AcpProcessSession.#start(options, getObserver, store, async (runtime) => await runtime.#initializeAgent(options.signal));
|
|
660
675
|
belongsTo = (agentId, cwd, additionalDirectories) => this.#agentId === agentId &&
|
|
661
676
|
this.#cwd === cwd &&
|
|
662
677
|
arraysEqual(this.#additionalDirectories, additionalDirectories);
|
|
@@ -682,7 +697,7 @@ class AcpProcessSession {
|
|
|
682
697
|
this.#replay = { kind: "idle" };
|
|
683
698
|
}
|
|
684
699
|
};
|
|
685
|
-
|
|
700
|
+
async #initializeAgent(signal) {
|
|
686
701
|
const initialized = await this.race(this.#connection.agent.request(methods.agent.initialize, {
|
|
687
702
|
clientCapabilities: {
|
|
688
703
|
elicitation: { form: {}, url: {} },
|
|
@@ -691,7 +706,10 @@ class AcpProcessSession {
|
|
|
691
706
|
},
|
|
692
707
|
clientInfo: { name: "mobius", version: "0.0.3" },
|
|
693
708
|
protocolVersion: PROTOCOL_VERSION,
|
|
694
|
-
}, { cancellationSignal: signal }), "ACP agent exited during initialization", signal)
|
|
709
|
+
}, { cancellationSignal: signal }), "ACP agent exited during initialization", signal).catch((cause) => {
|
|
710
|
+
signal.throwIfAborted();
|
|
711
|
+
throw new RetryableAcpInitializationError(cause);
|
|
712
|
+
});
|
|
695
713
|
if (initialized.protocolVersion !== PROTOCOL_VERSION) {
|
|
696
714
|
throw new AcpExecutionError("ACP agent selected an unsupported protocol version", {}, "unsupported_acp_protocol");
|
|
697
715
|
}
|
|
@@ -701,9 +719,16 @@ class AcpProcessSession {
|
|
|
701
719
|
initialized.agentInfo?.name ??
|
|
702
720
|
this.#agentId, 255);
|
|
703
721
|
this.#agentVersion = truncate(initialized.agentInfo?.version ?? "", 128);
|
|
704
|
-
|
|
722
|
+
}
|
|
723
|
+
initialize = async (signal, origin) => {
|
|
724
|
+
await this.#initializeAgent(signal);
|
|
725
|
+
let stored = origin?.kind === "import"
|
|
705
726
|
? new FoundAcpStoredSession(new AcpStoredSession(this.#mobiusSessionId, this.#agentId, nativeSessionIdSchema.parse(origin.nativeSessionId), this.#cwd, this.#additionalDirectories, true))
|
|
706
727
|
: this.#store.read(this.#mobiusSessionId);
|
|
728
|
+
if (stored instanceof FoundAcpStoredSession && !stored.session.prompted) {
|
|
729
|
+
this.#store.remove(this.#mobiusSessionId);
|
|
730
|
+
stored = this.#store.read(this.#mobiusSessionId);
|
|
731
|
+
}
|
|
707
732
|
if (stored instanceof DeletedAcpStoredSession)
|
|
708
733
|
throw new AcpExecutionError("The native Agent session was deleted. Start a new chat.", {}, "native_session_deleted");
|
|
709
734
|
let lifecycleResponse;
|
|
@@ -773,7 +798,6 @@ class AcpProcessSession {
|
|
|
773
798
|
}, { cancellationSignal: signal }), "ACP agent exited while starting a session", signal);
|
|
774
799
|
this.#nativeSessionId = created.sessionId;
|
|
775
800
|
lifecycleResponse = created;
|
|
776
|
-
this.#store.write(new AcpStoredSession(this.#mobiusSessionId, this.#agentId, this.#nativeSessionId, this.#cwd, this.#additionalDirectories, false));
|
|
777
801
|
}
|
|
778
802
|
const lifecycleRecord = isRecord(lifecycleResponse)
|
|
779
803
|
? lifecycleResponse
|
|
@@ -781,7 +805,9 @@ class AcpProcessSession {
|
|
|
781
805
|
this.#configOptions = normalizeConfigOptions(lifecycleRecord["configOptions"], lifecycleRecord["modes"]);
|
|
782
806
|
await this.#updateTail;
|
|
783
807
|
signal.throwIfAborted();
|
|
784
|
-
|
|
808
|
+
if (this.#prompted) {
|
|
809
|
+
this.#store.write(new AcpStoredSession(this.#mobiusSessionId, this.#agentId, this.#nativeSessionId, this.#cwd, this.#additionalDirectories, true));
|
|
810
|
+
}
|
|
785
811
|
};
|
|
786
812
|
listNativeSessions = async (cursor, signal) => {
|
|
787
813
|
if (!this.#capabilities.listSessions)
|
|
@@ -1313,6 +1339,10 @@ class AcpProcessSession {
|
|
|
1313
1339
|
}
|
|
1314
1340
|
export class AcpSessionManager {
|
|
1315
1341
|
#nativeOperations = new Set();
|
|
1342
|
+
#nativeBrowserObserver = new NullAcpSessionObserver();
|
|
1343
|
+
#nativeBrowserPreparing = new Map();
|
|
1344
|
+
#nativeBrowserSessions = new Map();
|
|
1345
|
+
#nativeBrowserStore = new MemoryAcpSessionStore();
|
|
1316
1346
|
#activeSessionIds = new Set();
|
|
1317
1347
|
#cancellationRequests = new Set();
|
|
1318
1348
|
#preparing = new Map();
|
|
@@ -1326,6 +1356,37 @@ export class AcpSessionManager {
|
|
|
1326
1356
|
setObserver = (observer) => {
|
|
1327
1357
|
this.#observer = observer;
|
|
1328
1358
|
};
|
|
1359
|
+
async #startNativeBrowserPreparation(options) {
|
|
1360
|
+
const operation = (async () => {
|
|
1361
|
+
try {
|
|
1362
|
+
const runtime = await AcpProcessSession.startNativeSessionBrowser(options, () => this.#nativeBrowserObserver, this.#nativeBrowserStore);
|
|
1363
|
+
this.#nativeBrowserSessions.set(options.sessionId, runtime);
|
|
1364
|
+
return runtime;
|
|
1365
|
+
}
|
|
1366
|
+
finally {
|
|
1367
|
+
this.#nativeBrowserPreparing.delete(options.sessionId);
|
|
1368
|
+
}
|
|
1369
|
+
})();
|
|
1370
|
+
this.#nativeBrowserPreparing.set(options.sessionId, operation);
|
|
1371
|
+
return await operation;
|
|
1372
|
+
}
|
|
1373
|
+
async #replaceNativeBrowserPreparation(existing, options) {
|
|
1374
|
+
const operation = (async () => {
|
|
1375
|
+
try {
|
|
1376
|
+
this.#nativeBrowserSessions.delete(options.sessionId);
|
|
1377
|
+
await existing.close();
|
|
1378
|
+
this.#nativeBrowserStore.remove(options.sessionId);
|
|
1379
|
+
const runtime = await AcpProcessSession.startNativeSessionBrowser(options, () => this.#nativeBrowserObserver, this.#nativeBrowserStore);
|
|
1380
|
+
this.#nativeBrowserSessions.set(options.sessionId, runtime);
|
|
1381
|
+
return runtime;
|
|
1382
|
+
}
|
|
1383
|
+
finally {
|
|
1384
|
+
this.#nativeBrowserPreparing.delete(options.sessionId);
|
|
1385
|
+
}
|
|
1386
|
+
})();
|
|
1387
|
+
this.#nativeBrowserPreparing.set(options.sessionId, operation);
|
|
1388
|
+
return await operation;
|
|
1389
|
+
}
|
|
1329
1390
|
async #startPreparation(options) {
|
|
1330
1391
|
const operation = (async () => {
|
|
1331
1392
|
try {
|
|
@@ -1386,6 +1447,29 @@ export class AcpSessionManager {
|
|
|
1386
1447
|
const runtime = await this.#startPreparation(options);
|
|
1387
1448
|
return runtime.prepared();
|
|
1388
1449
|
};
|
|
1450
|
+
prepareNativeSessionBrowser = async (options) => {
|
|
1451
|
+
const pending = this.#nativeBrowserPreparing.get(options.sessionId);
|
|
1452
|
+
if (pending !== undefined) {
|
|
1453
|
+
const runtime = await pending;
|
|
1454
|
+
if (runtime.belongsTo(options.agent.id, options.cwd, options.additionalDirectories)) {
|
|
1455
|
+
return runtime.prepared();
|
|
1456
|
+
}
|
|
1457
|
+
return await this.prepareNativeSessionBrowser(options);
|
|
1458
|
+
}
|
|
1459
|
+
const existing = this.#nativeBrowserSessions.get(options.sessionId);
|
|
1460
|
+
if (existing !== undefined) {
|
|
1461
|
+
if (existing.belongsTo(options.agent.id, options.cwd, options.additionalDirectories)) {
|
|
1462
|
+
return existing.prepared();
|
|
1463
|
+
}
|
|
1464
|
+
if (!existing.canRebind()) {
|
|
1465
|
+
throw new AcpExecutionError("The agent or workspace cannot change after a conversation has started", {}, "session_identity_mismatch");
|
|
1466
|
+
}
|
|
1467
|
+
const runtime = await this.#replaceNativeBrowserPreparation(existing, options);
|
|
1468
|
+
return runtime.prepared();
|
|
1469
|
+
}
|
|
1470
|
+
const runtime = await this.#startNativeBrowserPreparation(options);
|
|
1471
|
+
return runtime.prepared();
|
|
1472
|
+
};
|
|
1389
1473
|
configureSession = async (options) => {
|
|
1390
1474
|
const runtime = await this.ensureSession(options);
|
|
1391
1475
|
return await runtime.configure(options);
|
|
@@ -1453,8 +1537,10 @@ export class AcpSessionManager {
|
|
|
1453
1537
|
};
|
|
1454
1538
|
close = async () => {
|
|
1455
1539
|
const sessions = [...this.#sessions.values()];
|
|
1540
|
+
const nativeBrowserSessions = [...this.#nativeBrowserSessions.values()];
|
|
1456
1541
|
this.#sessions.clear();
|
|
1457
|
-
|
|
1542
|
+
this.#nativeBrowserSessions.clear();
|
|
1543
|
+
await Promise.all([...sessions, ...nativeBrowserSessions].map(async (session) => await session.close()));
|
|
1458
1544
|
};
|
|
1459
1545
|
ensureSession = async (options) => {
|
|
1460
1546
|
const existing = this.#sessions.get(options.sessionId);
|
|
@@ -1471,7 +1557,22 @@ export class AcpSessionManager {
|
|
|
1471
1557
|
}
|
|
1472
1558
|
return started;
|
|
1473
1559
|
};
|
|
1474
|
-
|
|
1560
|
+
async #ensureNativeSessionBrowser(options) {
|
|
1561
|
+
const existing = this.#nativeBrowserSessions.get(options.sessionId);
|
|
1562
|
+
if (existing !== undefined) {
|
|
1563
|
+
if (!existing.belongsTo(options.agent.id, options.cwd, options.additionalDirectories)) {
|
|
1564
|
+
throw new AcpExecutionError("The agent or workspace cannot change after a conversation has started", {}, "session_identity_mismatch");
|
|
1565
|
+
}
|
|
1566
|
+
return existing;
|
|
1567
|
+
}
|
|
1568
|
+
await this.prepareNativeSessionBrowser(options);
|
|
1569
|
+
const started = this.#nativeBrowserSessions.get(options.sessionId);
|
|
1570
|
+
if (started === undefined) {
|
|
1571
|
+
throw new AcpExecutionError("ACP native session browser did not start");
|
|
1572
|
+
}
|
|
1573
|
+
return started;
|
|
1574
|
+
}
|
|
1575
|
+
listNativeSessions = async (options, cursor) => await (await this.#ensureNativeSessionBrowser(options)).listNativeSessions(cursor, options.signal);
|
|
1475
1576
|
openNativeSession = async (options, origin) => {
|
|
1476
1577
|
const key = `${options.agent.id}:${origin.nativeSessionId}`;
|
|
1477
1578
|
if (this.#nativeOperations.has(key))
|
|
@@ -1540,7 +1641,7 @@ export class AcpSessionManager {
|
|
|
1540
1641
|
}
|
|
1541
1642
|
};
|
|
1542
1643
|
deleteNativeSession = async (options, nativeSessionId) => {
|
|
1543
|
-
const runtime = await this
|
|
1644
|
+
const runtime = await this.#ensureNativeSessionBrowser(options);
|
|
1544
1645
|
const key = `${options.agent.id}:${nativeSessionId}`;
|
|
1545
1646
|
const linked = this.#store.findNative(options.agent.id, nativeSessionId);
|
|
1546
1647
|
if (this.#nativeOperations.has(key) ||
|
|
@@ -1560,7 +1661,8 @@ export class AcpSessionManager {
|
|
|
1560
1661
|
await runtime.deleteNativeSession(nativeSessionId, options.signal);
|
|
1561
1662
|
const deleted = this.#store.markDeleted(options.agent.id, nativeSessionId);
|
|
1562
1663
|
if (runtime.nativeSessionId() === nativeSessionId) {
|
|
1563
|
-
this.#
|
|
1664
|
+
this.#nativeBrowserSessions.delete(options.sessionId);
|
|
1665
|
+
this.#nativeBrowserStore.remove(options.sessionId);
|
|
1564
1666
|
await runtime.close();
|
|
1565
1667
|
}
|
|
1566
1668
|
return deleted;
|