cc-viewer 1.9.17 → 1.9.18

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/cli.js CHANGED
@@ -838,6 +838,7 @@ async function runSdkMode(extraClaudeArgs = [], cwd, noOpen = false) {
838
838
  }
839
839
  // 观测面走与 PTY 相同的 wire 通路(SDK 子进程流量经 ANTHROPIC_BASE_URL 到 ccv proxy →
840
840
  // fetch hook → v2 transcript → SSE),sdk-manager 不再另接 v2/streaming 注入。
841
+ const { runWaterfallHook } = await import('./server/lib/plugin-loader.js');
841
842
  sdkManager.initSdkSession(workingDir, basename(workingDir), {
842
843
  broadcastWs: (msg) => serverMod.broadcastWsMessage(msg),
843
844
  permissionMode,
@@ -849,7 +850,7 @@ async function runSdkMode(extraClaudeArgs = [], cwd, noOpen = false) {
849
850
  ? { continue: sdkArgs.continue, resumeId: sdkArgs.resume, forkSession: sdkArgs.forkSession }
850
851
  : null,
851
852
  userArgs: sdkArgs.rest,
852
- runWaterfallHook: (await import('./server/lib/plugin-loader.js')).runWaterfallHook,
853
+ runWaterfallHook,
853
854
  // Round-3 P0: SDK mode has no Stop hook (ensureHooks() skipped above), so
854
855
  // the only place we learn a turn ended is the SDK 'result' message. Forward
855
856
  // it to the same SSE channel the Stop hook bridge uses in PTY mode.
@@ -894,6 +895,7 @@ async function runSdkMode(extraClaudeArgs = [], cwd, noOpen = false) {
894
895
  serverMod.setSdkAutoCancelApproval(sdkManager.autoCancelApproval);
895
896
  serverMod.setSdkSendUserMessage(sdkManager.sendUserMessage);
896
897
  serverMod.setSdkInterruptTurn(sdkManager.interruptTurn);
898
+ serverMod.setSdkRetryTurn(sdkManager.retryInterruptedTurn);
897
899
  serverMod.setSdkGetPendingApprovals(sdkManager.getPendingApprovals);
898
900
  serverMod.setSdkGetInitSnapshot(sdkManager.getSdkInitSnapshot);
899
901
  serverMod.setSdkGetSkillsSnapshot(sdkManager.getSkillsSnapshot);
@@ -906,6 +908,20 @@ async function runSdkMode(extraClaudeArgs = [], cwd, noOpen = false) {
906
908
  serverMod.setSdkClearQueued(sdkManager.clearQueued);
907
909
  serverMod.setSdkGetQueueSnapshot(sdkManager.getQueueSnapshot);
908
910
 
911
+ // Durable process-level wiring: registered ONCE here so a workspace stop→relaunch
912
+ // (which calls stopSession and clears the mutable callbacks, then re-inits without
913
+ // them) re-adopts the process wiring instead of silently losing every sdk-* frame.
914
+ sdkManager.setSdkProcessWiring({
915
+ onTurnEnd: ({ sessionId, ts, cwd }) => {
916
+ if (typeof serverMod.broadcastTurnEnd !== 'function') return;
917
+ try { serverMod.broadcastTurnEnd(sessionId, ts, null, cwd); }
918
+ catch (err) { console.warn('[sdk] broadcastTurnEnd threw:', err?.message); }
919
+ },
920
+ onQueryError: (message, meta) => serverMod.broadcastWsMessage({ type: 'sdk-error', message, ...(meta || {}) }),
921
+ broadcastWs: (msg) => serverMod.broadcastWsMessage(msg),
922
+ runWaterfallHook,
923
+ });
924
+
909
925
  // 自动打开浏览器
910
926
  const protocol = serverMod.getProtocol();
911
927
  const basePath = normalizeBasePath(process.env.CCV_BASE_PATH);