@jingyi0605/codingns 1.0.0-beta.2 → 1.0.0-beta.3
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/public/assets/{AdaptiveButlerPage-BHUAx_24.js → AdaptiveButlerPage-CLHLiZSY.js} +1 -1
- package/dist/public/assets/{App-D5hc6KuU.js → App-FYuZfAoO.js} +3 -3
- package/dist/public/assets/{BootstrapPage-C2sMZMJa.js → BootstrapPage-3xpnsG-A.js} +1 -1
- package/dist/public/assets/ConversationPage-C5_ZqhU3.js +9 -0
- package/dist/public/assets/{DesktopDetachPreviewPage-D9Abm5NU.js → DesktopDetachPreviewPage-B77MG82y.js} +1 -1
- package/dist/public/assets/{DesktopModal-BCVZq_PQ.js → DesktopModal-K5bEcj38.js} +1 -1
- package/dist/public/assets/{DesktopWindowPage-Cotl5fte.js → DesktopWindowPage-DbG-RBAf.js} +1 -1
- package/dist/public/assets/{FileContextPanel-DbPOq5w-.js → FileContextPanel-C-1yOton.js} +1 -1
- package/dist/public/assets/{GitSidebar-Cuxi2R93.js → GitSidebar-DFHAPT3S.js} +1 -1
- package/dist/public/assets/{MobileCreateSessionSheet-DYqarJqO.js → MobileCreateSessionSheet-gOyAZ857.js} +1 -1
- package/dist/public/assets/{MobileSheet-DPYtp5Ze.js → MobileSheet-D0MfNkTv.js} +1 -1
- package/dist/public/assets/{PluginAccessOverview-CiVzb_NI.js → PluginAccessOverview-IrYIPLg3.js} +1 -1
- package/dist/public/assets/{PluginContainerPage-BfZ3E41c.js → PluginContainerPage-b9LQVuqG.js} +1 -1
- package/dist/public/assets/{PluginDetailPage-DQQAg_ba.js → PluginDetailPage-BX7gohai.js} +1 -1
- package/dist/public/assets/{PluginsListPage-bF1NmA_r.js → PluginsListPage-R0SibHMi.js} +1 -1
- package/dist/public/assets/{PureConversationPage-CWji-ARJ.js → PureConversationPage-CcakFvo0.js} +1 -1
- package/dist/public/assets/{RelayConnectEntryPage-D4-3Fher.js → RelayConnectEntryPage-cAVq_kNM.js} +1 -1
- package/dist/public/assets/{ServerSettingsModal-BUY1Y3g6.js → ServerSettingsModal-BJwYHdKD.js} +1 -1
- package/dist/public/assets/{SessionIndexPage-zVB9jnzP.js → SessionIndexPage-CJKRHB_F.js} +1 -1
- package/dist/public/assets/{SettingsPage-DeqR2p7d.js → SettingsPage-Csp7wEBC.js} +1 -1
- package/dist/public/assets/{TerminalManagerPanel-BjnC70ga.js → TerminalManagerPanel-2HG-NyfR.js} +1 -1
- package/dist/public/assets/{ToolFilesPage-BZseQqvZ.js → ToolFilesPage-BAZdjNaF.js} +1 -1
- package/dist/public/assets/{ToolGitPage-SrOO8Ftz.js → ToolGitPage-CGkPmgsz.js} +1 -1
- package/dist/public/assets/{ToolProcessesPage-Dbzlqjdy.js → ToolProcessesPage-BHpS7-VH.js} +1 -1
- package/dist/public/assets/{ToolsHomePage-BBilUc0P.js → ToolsHomePage-DDGqYwYU.js} +1 -1
- package/dist/public/assets/{WorkbenchLandingPage-FdsBC8WN.js → WorkbenchLandingPage-B4aooEYJ.js} +1 -1
- package/dist/public/assets/{WorkbenchLayout-yGxGKcG1.js → WorkbenchLayout-DrAvGjGK.js} +81 -79
- package/dist/public/assets/{WorkbenchModal-Cm-ciXO9.js → WorkbenchModal-BK5ix8YI.js} +1 -1
- package/dist/public/assets/WorkbenchShellRoute-p1FvkoPN.js +1 -0
- package/dist/public/assets/{WorkspaceDebugDetailPage-CZtpOiY0.js → WorkspaceDebugDetailPage-CPgAe8dd.js} +1 -1
- package/dist/public/assets/{WorkspaceDetailPage-CbbgUz1H.js → WorkspaceDetailPage-YM85dTGg.js} +1 -1
- package/dist/public/assets/{WorkspaceHomePage-DMNJKAYe.js → WorkspaceHomePage-DPPvwM93.js} +1 -1
- package/dist/public/assets/{client-runtime-manager-tsFkLtO_.js → client-runtime-manager-Clq-8rWh.js} +1 -1
- package/dist/public/assets/{host-alias-df5bYDlE.js → host-alias-BxzpRYrt.js} +1 -1
- package/dist/public/assets/{index-CILPuSCp.js → index-BArTKWXk.js} +3 -3
- package/dist/public/assets/index-CqKepLbu.css +1 -0
- package/dist/public/assets/{login-direct-candidate-resolver-pkfXrMJy.js → login-direct-candidate-resolver-BiWwFKnk.js} +1 -1
- package/dist/public/assets/{peer-host-config-sync-nS_66OLg.js → peer-host-config-sync-kTom1_pp.js} +1 -1
- package/dist/public/assets/{plugin-permission-copy-LDy-lW7h.js → plugin-permission-copy-1_1wViri.js} +1 -1
- package/dist/public/assets/{plugins-api-BGF9OybZ.js → plugins-api-C0JqR2-W.js} +1 -1
- package/dist/public/assets/{preferences-service-BC25oxA_.js → preferences-service-DWeLWZST.js} +1 -1
- package/dist/public/assets/{relay-entry-ErQKnI7B.js → relay-entry-ClEd3cjN.js} +1 -1
- package/dist/public/assets/{useRegisteredDebugTemplates-BTr3ATCZ.js → useRegisteredDebugTemplates-wJGOYam9.js} +1 -1
- package/dist/public/assets/{workbench-navigation-hwM28xIb.js → workbench-navigation-vIWt3Rv_.js} +1 -1
- package/dist/public/index.html +2 -2
- package/dist/server/modules/sessions/codex-app-server-helper-process.js +84 -20
- package/dist/server/modules/sessions/codex-app-server-helper-process.js.map +1 -1
- package/dist/server/modules/sessions/session-controller.js +2 -1
- package/dist/server/modules/sessions/session-controller.js.map +1 -1
- package/dist/server/modules/sessions/session-live-runtime-service.d.ts +14 -0
- package/dist/server/modules/sessions/session-live-runtime-service.js +103 -4
- package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
- package/dist/server/modules/sessions/session-permission-request-service.d.ts +1 -0
- package/dist/server/modules/sessions/session-permission-request-service.js +27 -5
- package/dist/server/modules/sessions/session-permission-request-service.js.map +1 -1
- package/dist/server/modules/sessions/session-provider-config-service.js +1 -0
- package/dist/server/modules/sessions/session-provider-config-service.js.map +1 -1
- package/dist/server/modules/sessions/workspace-session-runtime-context-service.js +5 -1
- package/dist/server/modules/sessions/workspace-session-runtime-context-service.js.map +1 -1
- package/dist/server/storage/repositories/session-send-queue-repository.d.ts +1 -0
- package/dist/server/storage/repositories/session-send-queue-repository.js +23 -0
- package/dist/server/storage/repositories/session-send-queue-repository.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/index.d.ts +1 -0
- package/node_modules/@codingns/session-sync-core/dist/index.js +1 -0
- package/node_modules/@codingns/session-sync-core/dist/index.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-permissions.d.ts +27 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-permissions.js +48 -4
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-permissions.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js +53 -15
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js.map +1 -1
- package/package.json +2 -1
- package/scripts/claude-hook-bridge.cjs +167 -0
- package/dist/public/assets/ConversationPage-CDpyEOUA.js +0 -9
- package/dist/public/assets/WorkbenchShellRoute-CijuAd9-.js +0 -1
- package/dist/public/assets/index-CSlwKnM4.css +0 -1
|
@@ -99,6 +99,16 @@ export interface SessionRuntimeStatusView {
|
|
|
99
99
|
updatedAt: string;
|
|
100
100
|
watchdogTriggeredAt: string | null;
|
|
101
101
|
contextUsage: ContextUsageSnapshot | null;
|
|
102
|
+
permissionStatus: SessionRuntimePermissionStatusView | null;
|
|
103
|
+
}
|
|
104
|
+
export interface SessionRuntimePermissionStatusView {
|
|
105
|
+
requestedPermissionMode: string | null;
|
|
106
|
+
effectivePermissionMode: "default" | "acceptEdits" | "bypassPermissions";
|
|
107
|
+
effectiveSandboxMode: "read-only" | "workspace-write" | "danger-full-access" | null;
|
|
108
|
+
effectiveApprovalPolicy: "never" | "cli-default" | null;
|
|
109
|
+
source: "codex-cli-default" | "codingns-override" | "provider-non-codex";
|
|
110
|
+
summary: string;
|
|
111
|
+
detail: string;
|
|
102
112
|
}
|
|
103
113
|
export interface InterruptSessionResult {
|
|
104
114
|
sessionId: string;
|
|
@@ -221,6 +231,7 @@ export declare class SessionLiveRuntimeService {
|
|
|
221
231
|
private readonly queueRetryTimers;
|
|
222
232
|
private readonly pendingSendDebugTracesBySessionId;
|
|
223
233
|
private readonly runtimePersistenceQueues;
|
|
234
|
+
private readonly sessionPermissionRuntimeStates;
|
|
224
235
|
constructor(sessionHistoryService: SessionHistoryService, sessionMessageAttachmentService: SessionMessageAttachmentService, workspaceService: WorkspaceService, sessionChangedFileService: SessionChangedFileService, sessionBindingRepository: SessionBindingRepository, authUserRepository: AuthUserRepository, sessionSendQueueRepository: SessionSendQueueRepository, sessionIndexRepository: SessionIndexRepository, sessionStateRepository: SessionStateRepository, sessionStatusSnapshotRepository: SessionStatusSnapshotRepository, sessionProviderConfigService: SessionProviderConfigService, config: HostConfig, sessionActivityAuthorityService?: SessionActivityAuthorityService, openCliSessionPromptService?: OpenCliSessionPromptService | null, workspaceSessionRuntimeContextService?: Pick<WorkspaceSessionRuntimeContextService, "prepareWorkspaceInstructionBundle"> | null);
|
|
225
236
|
startLiveSession(input: StartLiveSessionInput): Promise<LiveMessageAcceptedResult>;
|
|
226
237
|
sendLiveMessage(input: SendLiveMessageInput): Promise<LiveMessageAcceptedResult>;
|
|
@@ -246,6 +257,9 @@ export declare class SessionLiveRuntimeService {
|
|
|
246
257
|
private subscribeExternalRuntime;
|
|
247
258
|
private emitExternalRuntimeEnvelope;
|
|
248
259
|
private getLiveRuntimeSnapshot;
|
|
260
|
+
private resolveRequestedPermissionMode;
|
|
261
|
+
private rememberRequestedPermissionMode;
|
|
262
|
+
private logSessionPermissionStatus;
|
|
249
263
|
private demoteDeadRuntimeSnapshot;
|
|
250
264
|
private scheduleDeadRuntimeReconciliation;
|
|
251
265
|
private reconcileDeadRuntimeSession;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
3
4
|
import { performance } from "node:perf_hooks";
|
|
4
|
-
import { ClaudeRuntimeAdapter, CodexRuntimeAdapter, GeminiRuntimeAdapter, KimiRuntimeAdapter, LegnaRuntimeAdapter, OpenCodeRuntimeAdapter, ProviderRuntimeService } from "@codingns/session-sync-core";
|
|
5
|
+
import { ClaudeRuntimeAdapter, CodexRuntimeAdapter, GeminiRuntimeAdapter, KimiRuntimeAdapter, LegnaRuntimeAdapter, OpenCodeRuntimeAdapter, ProviderRuntimeService, resolveCodexPermissionResolution } from "@codingns/session-sync-core";
|
|
5
6
|
import { AppError, isAppError } from "../../shared/errors/app-error.js";
|
|
6
7
|
import { createId } from "../../shared/utils/id.js";
|
|
7
8
|
import { isPerfDebugEnabled, logPerformance } from "../../shared/utils/perf-log.js";
|
|
@@ -17,6 +18,42 @@ import { ClaudeRuntimeHelperAdapter } from "./claude-runtime-helper-client.js";
|
|
|
17
18
|
import { CodexAppServerHelperClient } from "./codex-app-server-helper-client.js";
|
|
18
19
|
const OPENCODE_ORDER_DEBUG_ENABLED = /^(1|true|yes)$/i.test(process.env.CODINGNS_OPENCODE_ORDER_DEBUG?.trim() ?? "");
|
|
19
20
|
const RUNTIME_EVENT_SQLITE_BUSY_RETRY_DELAYS_MS = [100, 250, 500, 1_000, 1_500, 2_000];
|
|
21
|
+
function buildSessionRuntimePermissionStatus(input) {
|
|
22
|
+
if (input.provider !== "codex") {
|
|
23
|
+
return {
|
|
24
|
+
requestedPermissionMode: input.requestedPermissionMode,
|
|
25
|
+
effectivePermissionMode: "default",
|
|
26
|
+
effectiveSandboxMode: null,
|
|
27
|
+
effectiveApprovalPolicy: null,
|
|
28
|
+
source: "provider-non-codex",
|
|
29
|
+
summary: "当前 provider 不使用 Codex 沙箱权限映射。",
|
|
30
|
+
detail: "这份权限说明只对 Codex 会话生效,其他 provider 仍沿用各自的权限体系。"
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
const resolution = resolveCodexPermissionResolution(input.requestedPermissionMode);
|
|
34
|
+
if (resolution.effectivePermissionMode === "default") {
|
|
35
|
+
return {
|
|
36
|
+
requestedPermissionMode: input.requestedPermissionMode,
|
|
37
|
+
effectivePermissionMode: resolution.effectivePermissionMode,
|
|
38
|
+
effectiveSandboxMode: resolution.sandboxMode,
|
|
39
|
+
effectiveApprovalPolicy: resolution.approvalPolicy ? "never" : "cli-default",
|
|
40
|
+
source: "codex-cli-default",
|
|
41
|
+
summary: "当前会话跟随 Codex CLI 默认权限。",
|
|
42
|
+
detail: resolution.reasoning
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
requestedPermissionMode: input.requestedPermissionMode,
|
|
47
|
+
effectivePermissionMode: resolution.effectivePermissionMode,
|
|
48
|
+
effectiveSandboxMode: resolution.sandboxMode,
|
|
49
|
+
effectiveApprovalPolicy: resolution.approvalPolicy ? "never" : "cli-default",
|
|
50
|
+
source: "codingns-override",
|
|
51
|
+
summary: resolution.effectivePermissionMode === "acceptEdits"
|
|
52
|
+
? "当前会话已切到工作区可写权限。"
|
|
53
|
+
: "当前会话已切到完整权限。",
|
|
54
|
+
detail: resolution.reasoning
|
|
55
|
+
};
|
|
56
|
+
}
|
|
20
57
|
const RUNTIME_START_BINDING_WAIT_TIMEOUT_MS = 10_000;
|
|
21
58
|
const START_BINDING_POLL_INTERVAL_MS = 50;
|
|
22
59
|
const EXTERNAL_RUNTIME_INTERRUPT_SUPPRESSION_MS = 30_000;
|
|
@@ -51,6 +88,7 @@ export class SessionLiveRuntimeService {
|
|
|
51
88
|
queueRetryTimers = new Map();
|
|
52
89
|
pendingSendDebugTracesBySessionId = new Map();
|
|
53
90
|
runtimePersistenceQueues = new Map();
|
|
91
|
+
sessionPermissionRuntimeStates = new Map();
|
|
54
92
|
constructor(sessionHistoryService, sessionMessageAttachmentService, workspaceService, sessionChangedFileService, sessionBindingRepository, authUserRepository, sessionSendQueueRepository, sessionIndexRepository, sessionStateRepository, sessionStatusSnapshotRepository, sessionProviderConfigService, config, sessionActivityAuthorityService = new SessionActivityAuthorityService(), openCliSessionPromptService = null, workspaceSessionRuntimeContextService = null) {
|
|
55
93
|
this.sessionHistoryService = sessionHistoryService;
|
|
56
94
|
this.sessionMessageAttachmentService = sessionMessageAttachmentService;
|
|
@@ -90,6 +128,7 @@ export class SessionLiveRuntimeService {
|
|
|
90
128
|
clientRequestId: input.clientRequestId
|
|
91
129
|
});
|
|
92
130
|
try {
|
|
131
|
+
this.rememberRequestedPermissionMode(sessionId, input.runtimeOptions?.permissionMode ?? null, "start_live");
|
|
93
132
|
const capabilities = this.sessionHistoryService.getProviderCapabilitiesSnapshot(input.provider);
|
|
94
133
|
const providerBinding = this.sessionProviderConfigService.prepareSessionBinding({
|
|
95
134
|
sessionId,
|
|
@@ -534,6 +573,12 @@ export class SessionLiveRuntimeService {
|
|
|
534
573
|
this.maybeDispatchQueuedMessages(session);
|
|
535
574
|
const capabilities = await this.sessionHistoryService.getSessionCapabilities(sessionId, userId);
|
|
536
575
|
const contextUsage = await this.sessionHistoryService.getSessionContextUsage(sessionId).catch(() => null);
|
|
576
|
+
const requestedPermissionMode = this.resolveRequestedPermissionMode(sessionId);
|
|
577
|
+
const permissionStatus = buildSessionRuntimePermissionStatus({
|
|
578
|
+
provider: session.provider,
|
|
579
|
+
requestedPermissionMode
|
|
580
|
+
});
|
|
581
|
+
this.logSessionPermissionStatus(sessionId, session.provider, permissionStatus);
|
|
537
582
|
const resolution = runtimeSnapshot
|
|
538
583
|
? this.sessionActivityAuthorityService.observe(createRuntimeActivityObservation(runtimeSessionId, runtimeSnapshot))
|
|
539
584
|
: externalRuntimeSnapshot
|
|
@@ -562,7 +607,8 @@ export class SessionLiveRuntimeService {
|
|
|
562
607
|
: null,
|
|
563
608
|
updatedAt: resolution.updatedAt,
|
|
564
609
|
watchdogTriggeredAt: resolution.watchdogTriggeredAt,
|
|
565
|
-
contextUsage
|
|
610
|
+
contextUsage,
|
|
611
|
+
permissionStatus
|
|
566
612
|
};
|
|
567
613
|
}
|
|
568
614
|
if (externalRuntimeSnapshot) {
|
|
@@ -584,7 +630,8 @@ export class SessionLiveRuntimeService {
|
|
|
584
630
|
errorDetail: resolution.runningState === "failed" ? resolution.detail ?? session.lastErrorDetail : null,
|
|
585
631
|
updatedAt: resolution.updatedAt,
|
|
586
632
|
watchdogTriggeredAt: resolution.watchdogTriggeredAt,
|
|
587
|
-
contextUsage
|
|
633
|
+
contextUsage,
|
|
634
|
+
permissionStatus
|
|
588
635
|
};
|
|
589
636
|
}
|
|
590
637
|
const persistedErrorCode = resolution.runningState === "failed" ? resolution.errorCode ?? session.lastErrorCode : null;
|
|
@@ -607,7 +654,8 @@ export class SessionLiveRuntimeService {
|
|
|
607
654
|
errorDetail: persistedErrorDetail,
|
|
608
655
|
updatedAt: resolution.updatedAt,
|
|
609
656
|
watchdogTriggeredAt: resolution.watchdogTriggeredAt,
|
|
610
|
-
contextUsage
|
|
657
|
+
contextUsage,
|
|
658
|
+
permissionStatus
|
|
611
659
|
};
|
|
612
660
|
}
|
|
613
661
|
resolveLiveActivityObservation(sessionId) {
|
|
@@ -829,6 +877,48 @@ export class SessionLiveRuntimeService {
|
|
|
829
877
|
}
|
|
830
878
|
return snapshot;
|
|
831
879
|
}
|
|
880
|
+
resolveRequestedPermissionMode(sessionId) {
|
|
881
|
+
const runtimeState = this.sessionPermissionRuntimeStates.get(sessionId);
|
|
882
|
+
if (runtimeState?.requestedPermissionMode?.trim()) {
|
|
883
|
+
return runtimeState.requestedPermissionMode.trim();
|
|
884
|
+
}
|
|
885
|
+
const queuedItems = this.sessionSendQueueRepository.listBySessionId(sessionId);
|
|
886
|
+
const dispatchingItem = queuedItems.find((item) => item.status === "dispatching");
|
|
887
|
+
if (dispatchingItem?.permissionMode?.trim()) {
|
|
888
|
+
return dispatchingItem.permissionMode.trim();
|
|
889
|
+
}
|
|
890
|
+
const latestPermissionItem = [...queuedItems]
|
|
891
|
+
.reverse()
|
|
892
|
+
.find((item) => item.permissionMode?.trim());
|
|
893
|
+
if (latestPermissionItem?.permissionMode?.trim()) {
|
|
894
|
+
return latestPermissionItem.permissionMode.trim();
|
|
895
|
+
}
|
|
896
|
+
return null;
|
|
897
|
+
}
|
|
898
|
+
rememberRequestedPermissionMode(sessionId, permissionMode, source) {
|
|
899
|
+
this.sessionPermissionRuntimeStates.set(sessionId, {
|
|
900
|
+
requestedPermissionMode: permissionMode?.trim() || null,
|
|
901
|
+
updatedAt: nowIso(),
|
|
902
|
+
source
|
|
903
|
+
});
|
|
904
|
+
}
|
|
905
|
+
logSessionPermissionStatus(sessionId, provider, permissionStatus) {
|
|
906
|
+
if (!permissionStatus) {
|
|
907
|
+
return;
|
|
908
|
+
}
|
|
909
|
+
const runtimeState = this.sessionPermissionRuntimeStates.get(sessionId);
|
|
910
|
+
logPermissionDebug("session_runtime.permission_status", {
|
|
911
|
+
sessionId,
|
|
912
|
+
provider,
|
|
913
|
+
requestedPermissionMode: permissionStatus.requestedPermissionMode,
|
|
914
|
+
effectivePermissionMode: permissionStatus.effectivePermissionMode,
|
|
915
|
+
effectiveSandboxMode: permissionStatus.effectiveSandboxMode,
|
|
916
|
+
effectiveApprovalPolicy: permissionStatus.effectiveApprovalPolicy,
|
|
917
|
+
source: permissionStatus.source,
|
|
918
|
+
runtimeStateSource: runtimeState?.source ?? null,
|
|
919
|
+
runtimeStateUpdatedAt: runtimeState?.updatedAt ?? null
|
|
920
|
+
});
|
|
921
|
+
}
|
|
832
922
|
demoteDeadRuntimeSnapshot(snapshot) {
|
|
833
923
|
const updatedAt = nowIso();
|
|
834
924
|
for (const userId of this.authUserRepository.listIds()) {
|
|
@@ -1122,6 +1212,7 @@ export class SessionLiveRuntimeService {
|
|
|
1122
1212
|
}
|
|
1123
1213
|
}
|
|
1124
1214
|
async startRuntimeRun(request, userId, mode, providerBinding) {
|
|
1215
|
+
this.rememberRequestedPermissionMode(request.sessionId, request.options.permissionMode ?? null, "runtime_snapshot");
|
|
1125
1216
|
this.runtimeMessageSeenSessions.delete(request.sessionId);
|
|
1126
1217
|
this.runtimeHistoryFallbackSentSessions.delete(request.sessionId);
|
|
1127
1218
|
this.clearExternalRuntimeInterruptSuppression(request.sessionId);
|
|
@@ -1160,6 +1251,7 @@ export class SessionLiveRuntimeService {
|
|
|
1160
1251
|
clientRequestId: input.clientRequestId
|
|
1161
1252
|
});
|
|
1162
1253
|
try {
|
|
1254
|
+
this.rememberRequestedPermissionMode(input.sessionId, input.runtimeOptions?.permissionMode ?? null, "send_live");
|
|
1163
1255
|
const capabilities = await this.sessionHistoryService.getSessionCapabilities(input.sessionId, input.userId);
|
|
1164
1256
|
const workspace = this.workspaceService.getWorkspaceOrThrow(session.workspaceId);
|
|
1165
1257
|
const runtimeMode = shouldStartNativeSessionOnFirstMessage(session);
|
|
@@ -1396,6 +1488,7 @@ export class SessionLiveRuntimeService {
|
|
|
1396
1488
|
runtimeAttachments: restoredAttachments
|
|
1397
1489
|
};
|
|
1398
1490
|
try {
|
|
1491
|
+
this.rememberRequestedPermissionMode(nextQueueItem.sessionId, nextQueueItem.permissionMode, "queue_dispatch");
|
|
1399
1492
|
await this.sendLiveMessageDirect({
|
|
1400
1493
|
sessionId: nextQueueItem.sessionId,
|
|
1401
1494
|
userId: nextQueueItem.userId,
|
|
@@ -3158,7 +3251,13 @@ function buildClaudeHookBridgeConfig(config, provider) {
|
|
|
3158
3251
|
};
|
|
3159
3252
|
}
|
|
3160
3253
|
function resolveClaudeHookBridgeScriptPath() {
|
|
3254
|
+
const currentFilePath = fileURLToPath(import.meta.url);
|
|
3255
|
+
const currentDir = path.dirname(currentFilePath);
|
|
3256
|
+
const packageRoot = path.resolve(currentDir, "..", "..", "..", "..");
|
|
3257
|
+
const workspaceRoot = path.resolve(packageRoot, "..", "..", "..");
|
|
3161
3258
|
const candidates = [
|
|
3259
|
+
path.resolve(packageRoot, "scripts", "claude-hook-bridge.cjs"),
|
|
3260
|
+
path.resolve(workspaceRoot, "scripts", "claude-hook-bridge.cjs"),
|
|
3162
3261
|
path.resolve(process.cwd(), "scripts", "claude-hook-bridge.cjs"),
|
|
3163
3262
|
path.resolve(process.cwd(), "..", "scripts", "claude-hook-bridge.cjs"),
|
|
3164
3263
|
path.resolve(process.cwd(), "..", "..", "scripts", "claude-hook-bridge.cjs")
|