@code-yeongyu/senpi 2026.8.28 → 2026.8.29
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/CHANGELOG.md +74 -0
- package/dist/cli/args.d.ts +2 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +4 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +2 -0
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +5 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +1 -0
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-storage.d.ts +1 -0
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +3 -0
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/credential-accounts.d.ts.map +1 -1
- package/dist/core/credential-accounts.js +22 -12
- package/dist/core/credential-accounts.js.map +1 -1
- package/dist/core/credential-pool/classify.d.ts +6 -1
- package/dist/core/credential-pool/classify.d.ts.map +1 -1
- package/dist/core/credential-pool/classify.js +22 -5
- package/dist/core/credential-pool/classify.js.map +1 -1
- package/dist/core/credential-pool/failover.d.ts +8 -0
- package/dist/core/credential-pool/failover.d.ts.map +1 -1
- package/dist/core/credential-pool/failover.js +24 -6
- package/dist/core/credential-pool/failover.js.map +1 -1
- package/dist/core/credential-pool/rotation-stream.d.ts +13 -2
- package/dist/core/credential-pool/rotation-stream.d.ts.map +1 -1
- package/dist/core/credential-pool/rotation-stream.js +97 -10
- package/dist/core/credential-pool/rotation-stream.js.map +1 -1
- package/dist/core/extensions/builtin/goal/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/index.js +7 -0
- package/dist/core/extensions/builtin/goal/index.js.map +1 -1
- package/dist/core/extensions/builtin/service-tier.d.ts.map +1 -1
- package/dist/core/extensions/builtin/service-tier.js +13 -0
- package/dist/core/extensions/builtin/service-tier.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/extension.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/extension.js +4 -2
- package/dist/core/extensions/builtin/terminal/extension.js.map +1 -1
- package/dist/core/model-config-schema.d.ts +4 -4
- package/dist/core/model-runtime.d.ts +2 -0
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +74 -37
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/retry-fallback/chains.d.ts +23 -1
- package/dist/core/retry-fallback/chains.d.ts.map +1 -1
- package/dist/core/retry-fallback/chains.js +59 -3
- package/dist/core/retry-fallback/chains.js.map +1 -1
- package/dist/core/retry-fallback/controller.d.ts.map +1 -1
- package/dist/core/retry-fallback/controller.js +9 -2
- package/dist/core/retry-fallback/controller.js.map +1 -1
- package/dist/core/retry-fallback/settings.d.ts.map +1 -1
- package/dist/core/retry-fallback/settings.js +9 -0
- package/dist/core/retry-fallback/settings.js.map +1 -1
- package/dist/core/retry-fallback/validate.js +1 -1
- package/dist/core/retry-fallback/validate.js.map +1 -1
- package/dist/core/sdk.js +1 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +9 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +31 -0
- package/dist/core/session-manager.js.map +1 -1
- package/dist/main.d.ts +7 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +10 -1
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/favorite-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/favorite-models-selector.js +2 -2
- package/dist/modes/interactive/components/favorite-models-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-host-runtime.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-host-runtime.js +323 -33
- package/dist/modes/interactive/interactive-host-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +276 -237
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
- package/dist/modes/rpc/connection-handler.js +133 -24
- package/dist/modes/rpc/connection-handler.js.map +1 -1
- package/dist/modes/rpc/multi-session-host.js +14 -4
- package/dist/modes/rpc/multi-session-host.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +82 -13
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +85 -28
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts +3 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +3 -1
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +162 -2
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/modes/rpc/session-command-router.d.ts +22 -0
- package/dist/modes/rpc/session-command-router.d.ts.map +1 -1
- package/dist/modes/rpc/session-command-router.js +147 -16
- package/dist/modes/rpc/session-command-router.js.map +1 -1
- package/dist/modes/rpc/session-event-writer.d.ts +2 -0
- package/dist/modes/rpc/session-event-writer.d.ts.map +1 -1
- package/dist/modes/rpc/session-event-writer.js +4 -0
- package/dist/modes/rpc/session-event-writer.js.map +1 -1
- package/dist/modes/rpc/session-registry.d.ts +7 -0
- package/dist/modes/rpc/session-registry.d.ts.map +1 -1
- package/dist/modes/rpc/session-registry.js +9 -0
- package/dist/modes/rpc/session-registry.js.map +1 -1
- package/docs/rpc.md +37 -0
- package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +24 -0
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +6 -3
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/baseten.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-workers-ai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/package.json +2 -2
- package/node_modules/@earendil-works/pi-pty/package.json +1 -1
- package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection-handler.d.ts","sourceRoot":"","sources":["../../../src/modes/rpc/connection-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"connection-handler.d.ts","sourceRoot":"","sources":["../../../src/modes/rpc/connection-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAOH,OAAO,KAAK,EAAE,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AACnF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAwC/E,OAAO,KAAK,EAWX,eAAe,EAEf,MAAM,gBAAgB,CAAC;AAGxB,kFAAkF;AAClF,MAAM,WAAW,oBAAoB;IACpC,mFAAmF;IACnF,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,iFAAiF;IACjF,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,0DAA0D;IAC1D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,oBAAoB;IACpC;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,sEAAsE;IACtE,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C;;;OAGG;IACH,mBAAmB,IAAI,OAAO,CAAC;IAC/B,iFAAiF;IACjF,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AA4BD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,GAAG,eAAe,CAsC3E;AA4BD;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACzC,WAAW,EAAE,mBAAmB,EAChC,IAAI,EAAE,iBAAiB,EACvB,OAAO,GAAE,oBAAyB,GAChC,oBAAoB,CA4pCtB"}
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* (and whether) to end the process.
|
|
16
16
|
*/
|
|
17
17
|
import * as crypto from "node:crypto";
|
|
18
|
+
import { existsSync } from "node:fs";
|
|
18
19
|
import { basename, dirname, extname } from "node:path";
|
|
19
20
|
import { VERSION } from "../../config.js";
|
|
20
21
|
import { buildLoginProviderInfos } from "../../core/auth-providers.js";
|
|
@@ -73,14 +74,31 @@ export function buildRpcSessionState(session) {
|
|
|
73
74
|
fastMode: session.isFastModeActive(),
|
|
74
75
|
isStreaming: session.isStreaming,
|
|
75
76
|
isCompacting: session.isCompacting,
|
|
77
|
+
retryAttempt: session.retryAttempt,
|
|
78
|
+
isBashRunning: session.isBashRunning,
|
|
76
79
|
steeringMode: session.steeringMode,
|
|
77
80
|
followUpMode: session.followUpMode,
|
|
78
81
|
sessionFile: session.sessionFile,
|
|
79
82
|
sessionId: session.sessionId,
|
|
80
83
|
sessionName: session.sessionName,
|
|
84
|
+
cwd: session.sessionManager.getCwd(),
|
|
85
|
+
projectTrusted: session.settingsManager?.isProjectTrusted?.() ?? true,
|
|
86
|
+
...(session.sessionFile &&
|
|
87
|
+
!existsSync(session.sessionFile) &&
|
|
88
|
+
session.sessionManager
|
|
89
|
+
.getEntries()
|
|
90
|
+
.some((entry) => entry.type !== "model_change" && entry.type !== "thinking_level_change")
|
|
91
|
+
? { entries: session.sessionManager.getEntries() }
|
|
92
|
+
: {}),
|
|
93
|
+
steering: typeof session.getSteeringMessages === "function" ? [...session.getSteeringMessages()] : [],
|
|
94
|
+
followUp: typeof session.getFollowUpMessages === "function" ? [...session.getFollowUpMessages()] : [],
|
|
95
|
+
ordered: [
|
|
96
|
+
...(session._queuedInputOrder ?? []),
|
|
97
|
+
].sort((a, b) => a.enqueueOrder - b.enqueueOrder),
|
|
81
98
|
autoCompactionEnabled: session.autoCompactionEnabled,
|
|
82
99
|
messageCount: session.messages.length,
|
|
83
100
|
pendingMessageCount: session.pendingMessageCount,
|
|
101
|
+
usageTotals: session.sessionManager.getUsageTotals(),
|
|
84
102
|
};
|
|
85
103
|
}
|
|
86
104
|
function loadedMcpServers(snapshot) {
|
|
@@ -191,8 +209,16 @@ export function createRpcConnectionHandler(runtimeHost, sink, options = {}) {
|
|
|
191
209
|
}
|
|
192
210
|
return { id, type: "response", command, success: true, data };
|
|
193
211
|
};
|
|
194
|
-
const error = (id, command, message) => {
|
|
195
|
-
return {
|
|
212
|
+
const error = (id, command, message, errorCode, errorData) => {
|
|
213
|
+
return {
|
|
214
|
+
id,
|
|
215
|
+
type: "response",
|
|
216
|
+
command,
|
|
217
|
+
success: false,
|
|
218
|
+
error: message,
|
|
219
|
+
...(errorCode ? { errorCode } : {}),
|
|
220
|
+
...(errorData === undefined ? {} : { errorData }),
|
|
221
|
+
};
|
|
196
222
|
};
|
|
197
223
|
// Pending extension UI requests waiting for response
|
|
198
224
|
const pendingExtensionRequests = new SessionExtensionUiRequests();
|
|
@@ -597,6 +623,7 @@ export function createRpcConnectionHandler(runtimeHost, sink, options = {}) {
|
|
|
597
623
|
images: command.images,
|
|
598
624
|
streamingBehavior: command.streamingBehavior,
|
|
599
625
|
thinkingLevel: command.thinkingLevel,
|
|
626
|
+
expandPromptTemplates: command.expandPromptTemplates,
|
|
600
627
|
source: "rpc",
|
|
601
628
|
promptDisposition: (nextDisposition) => {
|
|
602
629
|
disposition = nextDisposition;
|
|
@@ -615,21 +642,68 @@ export function createRpcConnectionHandler(runtimeHost, sink, options = {}) {
|
|
|
615
642
|
});
|
|
616
643
|
return undefined;
|
|
617
644
|
}
|
|
645
|
+
case "append_user_message": {
|
|
646
|
+
const content = command.content;
|
|
647
|
+
const message = typeof content === "string"
|
|
648
|
+
? { role: "user", content, timestamp: Date.now() }
|
|
649
|
+
: { role: "user", content, timestamp: Date.now() };
|
|
650
|
+
session.sessionManager.appendMessage(message);
|
|
651
|
+
session.messages.push(message);
|
|
652
|
+
return success(id, "append_user_message");
|
|
653
|
+
}
|
|
654
|
+
case "append_session_entry": {
|
|
655
|
+
session.sessionManager.appendEntry(command.entry);
|
|
656
|
+
if (command.entry.type === "message")
|
|
657
|
+
session.messages.push(command.entry.message);
|
|
658
|
+
return success(id, "append_session_entry");
|
|
659
|
+
}
|
|
660
|
+
case "send_custom_message": {
|
|
661
|
+
await session.sendCustomMessage({
|
|
662
|
+
customType: command.customType,
|
|
663
|
+
content: command.content,
|
|
664
|
+
display: command.display,
|
|
665
|
+
details: command.details,
|
|
666
|
+
}, { triggerTurn: command.triggerTurn, deliverAs: command.deliverAs });
|
|
667
|
+
return success(id, "send_custom_message");
|
|
668
|
+
}
|
|
618
669
|
case "steer": {
|
|
619
|
-
await session.steer(command.message, command.images);
|
|
670
|
+
await session.steer(command.message, command.images, { enqueueOrder: command.enqueueOrder });
|
|
620
671
|
return success(id, "steer");
|
|
621
672
|
}
|
|
622
673
|
case "follow_up": {
|
|
623
|
-
await session.followUp(command.message, command.images);
|
|
674
|
+
await session.followUp(command.message, command.images, { enqueueOrder: command.enqueueOrder });
|
|
624
675
|
return success(id, "follow_up");
|
|
625
676
|
}
|
|
626
677
|
case "abort": {
|
|
627
678
|
await session.abort();
|
|
628
679
|
return success(id, "abort");
|
|
629
680
|
}
|
|
681
|
+
case "abort_compaction": {
|
|
682
|
+
session.abortCompaction();
|
|
683
|
+
return success(id, "abort_compaction");
|
|
684
|
+
}
|
|
685
|
+
case "reload": {
|
|
686
|
+
const result = await session.reload();
|
|
687
|
+
return success(id, "reload", result);
|
|
688
|
+
}
|
|
689
|
+
case "check_reload_veto": {
|
|
690
|
+
return success(id, "check_reload_veto", await session.checkReloadVeto());
|
|
691
|
+
}
|
|
630
692
|
case "clear_queue": {
|
|
631
|
-
|
|
693
|
+
const cleared = session.clearQueue({ abortWillFollow: command.abortWillFollow ?? false });
|
|
694
|
+
return success(id, "clear_queue", {
|
|
695
|
+
steering: cleared.steering,
|
|
696
|
+
followUp: cleared.followUp,
|
|
697
|
+
ordered: [...cleared.ordered],
|
|
698
|
+
});
|
|
632
699
|
}
|
|
700
|
+
case "get_steering_messages":
|
|
701
|
+
return success(id, "get_steering_messages", { messages: [...session.getSteeringMessages()] });
|
|
702
|
+
case "get_follow_up_messages":
|
|
703
|
+
return success(id, "get_follow_up_messages", { messages: [...session.getFollowUpMessages()] });
|
|
704
|
+
case "abort_branch_summary":
|
|
705
|
+
session.abortBranchSummary();
|
|
706
|
+
return success(id, "abort_branch_summary");
|
|
633
707
|
case "new_session": {
|
|
634
708
|
const options = command.parentSession ? { parentSession: command.parentSession } : undefined;
|
|
635
709
|
const result = await runtimeHost.newSession(options);
|
|
@@ -652,8 +726,8 @@ export function createRpcConnectionHandler(runtimeHost, sink, options = {}) {
|
|
|
652
726
|
if (!model) {
|
|
653
727
|
return error(id, "set_model", `Model not found: ${command.provider}/${command.modelId}`);
|
|
654
728
|
}
|
|
655
|
-
await session.setModel(model);
|
|
656
|
-
return success(id, "set_model", model);
|
|
729
|
+
const systemPromptChange = await session.setModel(model);
|
|
730
|
+
return success(id, "set_model", { ...model, systemPromptName: systemPromptChange?.systemPromptName });
|
|
657
731
|
}
|
|
658
732
|
case "cycle_model": {
|
|
659
733
|
const result = await session.cycleModel();
|
|
@@ -769,24 +843,49 @@ export function createRpcConnectionHandler(runtimeHost, sink, options = {}) {
|
|
|
769
843
|
// =================================================================
|
|
770
844
|
// Bash
|
|
771
845
|
// =================================================================
|
|
772
|
-
case "
|
|
773
|
-
const
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
846
|
+
case "navigate_tree": {
|
|
847
|
+
const result = await session.navigateTree(command.targetId, {
|
|
848
|
+
summarize: command.summarize,
|
|
849
|
+
customInstructions: command.customInstructions,
|
|
850
|
+
replaceInstructions: command.replaceInstructions,
|
|
851
|
+
label: command.label,
|
|
852
|
+
});
|
|
853
|
+
return success(id, "navigate_tree", result);
|
|
854
|
+
}
|
|
855
|
+
case "record_bash_result":
|
|
856
|
+
session.recordBashResult(command.command, command.result, {
|
|
857
|
+
excludeFromContext: command.excludeFromContext,
|
|
778
858
|
});
|
|
779
|
-
|
|
780
|
-
|
|
859
|
+
return success(id, "record_bash_result");
|
|
860
|
+
case "set_label":
|
|
861
|
+
session.sessionManager.appendLabelChange(command.entryId, command.label);
|
|
862
|
+
return success(id, "set_label");
|
|
863
|
+
case "bash": {
|
|
864
|
+
outputEvent({ type: "bash_start" });
|
|
865
|
+
try {
|
|
866
|
+
const eventResult = await session.extensionRunner.emitUserBash({
|
|
867
|
+
type: "user_bash",
|
|
868
|
+
command: command.command,
|
|
869
|
+
excludeFromContext: command.excludeFromContext ?? false,
|
|
870
|
+
cwd: session.sessionManager.getCwd(),
|
|
871
|
+
});
|
|
872
|
+
if (eventResult?.result) {
|
|
873
|
+
session.recordBashResult(command.command, eventResult.result, {
|
|
874
|
+
excludeFromContext: command.excludeFromContext,
|
|
875
|
+
});
|
|
876
|
+
return success(id, "bash", eventResult.result);
|
|
877
|
+
}
|
|
878
|
+
const result = await session.executeBash(command.command, undefined, {
|
|
781
879
|
excludeFromContext: command.excludeFromContext,
|
|
880
|
+
// Functions cannot cross JSONL. Host extensions may still provide the
|
|
881
|
+
// executable operations object; client-supplied data is only a wire-safe hint.
|
|
882
|
+
operations: eventResult?.operations,
|
|
782
883
|
});
|
|
783
|
-
return success(id, "bash",
|
|
884
|
+
return success(id, "bash", result);
|
|
885
|
+
}
|
|
886
|
+
finally {
|
|
887
|
+
outputEvent({ type: "bash_end" });
|
|
784
888
|
}
|
|
785
|
-
const result = await session.executeBash(command.command, undefined, {
|
|
786
|
-
excludeFromContext: command.excludeFromContext,
|
|
787
|
-
operations: eventResult?.operations,
|
|
788
|
-
});
|
|
789
|
-
return success(id, "bash", result);
|
|
790
889
|
}
|
|
791
890
|
case "abort_bash": {
|
|
792
891
|
session.abortBash();
|
|
@@ -803,15 +902,18 @@ export function createRpcConnectionHandler(runtimeHost, sink, options = {}) {
|
|
|
803
902
|
const path = await session.exportToHtml(command.outputPath);
|
|
804
903
|
return success(id, "export_html", { path });
|
|
805
904
|
}
|
|
905
|
+
case "export_jsonl": {
|
|
906
|
+
return success(id, "export_jsonl", { path: session.exportToJsonl(command.outputPath) });
|
|
907
|
+
}
|
|
806
908
|
case "switch_session": {
|
|
807
|
-
const result = await runtimeHost.switchSession(command.sessionPath);
|
|
909
|
+
const result = await runtimeHost.switchSession(command.sessionPath, { cwdOverride: command.cwdOverride });
|
|
808
910
|
if (!result.cancelled) {
|
|
809
911
|
await rebindSession();
|
|
810
912
|
}
|
|
811
913
|
return success(id, "switch_session", result);
|
|
812
914
|
}
|
|
813
915
|
case "fork": {
|
|
814
|
-
const result = await runtimeHost.fork(command.entryId);
|
|
916
|
+
const result = await runtimeHost.fork(command.entryId, { position: command.position });
|
|
815
917
|
if (!result.cancelled) {
|
|
816
918
|
await rebindSession();
|
|
817
919
|
}
|
|
@@ -852,6 +954,12 @@ export function createRpcConnectionHandler(runtimeHost, sink, options = {}) {
|
|
|
852
954
|
const text = session.getLastAssistantText();
|
|
853
955
|
return success(id, "get_last_assistant_text", { text });
|
|
854
956
|
}
|
|
957
|
+
case "import_jsonl": {
|
|
958
|
+
const result = await runtimeHost.importFromJsonl(command.inputPath, command.cwdOverride);
|
|
959
|
+
if (!result.cancelled)
|
|
960
|
+
await rebindSession();
|
|
961
|
+
return success(id, "import_jsonl", result);
|
|
962
|
+
}
|
|
855
963
|
case "set_session_name": {
|
|
856
964
|
const name = command.name.trim();
|
|
857
965
|
if (!name) {
|
|
@@ -985,7 +1093,8 @@ export function createRpcConnectionHandler(runtimeHost, sink, options = {}) {
|
|
|
985
1093
|
}
|
|
986
1094
|
}
|
|
987
1095
|
catch (commandError) {
|
|
988
|
-
|
|
1096
|
+
const missingCwd = commandError instanceof Error && commandError.name === "MissingSessionCwdError" && "issue" in commandError;
|
|
1097
|
+
output(error(command.id, command.type, commandError instanceof Error ? commandError.message : String(commandError), missingCwd ? "missing_session_cwd" : undefined, missingCwd ? commandError.issue : undefined));
|
|
989
1098
|
await waitForRpcBackpressure();
|
|
990
1099
|
}
|
|
991
1100
|
};
|