@openchambery/web 1.19.0-beta.13 → 1.19.0-beta.15
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/assets/{AgentAvatar-DDcjamcJ.js → AgentAvatar-CWn_73qY.js} +1 -1
- package/dist/assets/AssistantView-DhE1UG4p.js +1 -0
- package/dist/assets/{ChatContainer-DZPnS2OI.js → ChatContainer-f5pJ2gxc.js} +42 -42
- package/dist/assets/ContextPanel-C7KaAS3Z.js +288 -0
- package/dist/assets/{DiagramView-B9fIP1uk.js → DiagramView-xLiQ15JA.js} +1 -1
- package/dist/assets/{FadeInOnReveal-By2F9vcI.js → FadeInOnReveal-BpIMrqet.js} +1 -1
- package/dist/assets/{Icon-DpjYnXxn.js → Icon-BAf2hhrw.js} +1 -1
- package/dist/assets/{MarkdownRendererImpl-CJZfv3ZG.js → MarkdownRendererImpl-CeJxKQRH.js} +1 -1
- package/dist/assets/{MobileDetailNavigation-TZmiqs_4.js → MobileDetailNavigation-QI8Dgie6.js} +1 -1
- package/dist/assets/{MobileShareBridge-Cr2Na6iM.js → MobileShareBridge-CaSU7TBP.js} +2 -2
- package/dist/assets/{MobileSurface-B-xtWRhK.js → MobileSurface-CzvDId-0.js} +1 -1
- package/dist/assets/{MultiRunWindow--TN8qxUx.js → MultiRunWindow-BaLiRWW-.js} +1 -1
- package/dist/assets/{OnboardingScreen-BF8BuaBh.js → OnboardingScreen-CzxsmiJZ.js} +1 -1
- package/dist/assets/OverlayScrollbar-DtQqhl0Z.js +2 -0
- package/dist/assets/{SettingsView-BwtE9Hby.js → SettingsView-BJXUIfJL.js} +7 -7
- package/dist/assets/{SettingsWindow-D_t2z88w.js → SettingsWindow-CuyoC_XS.js} +1 -1
- package/dist/assets/{TerminalView-BJlWRZwf.js → TerminalView-RqdTZkOp.js} +1 -1
- package/dist/assets/{ToolOutputDialog-CjP9DdZl.js → ToolOutputDialog-D6BQMZH1.js} +1 -1
- package/dist/assets/{appThemeRegistry-CNcq8eKx.js → appThemeRegistry-CAq8jCu9.js} +2 -2
- package/dist/assets/{button-C7OXr4ae.js → button-DfF088a8.js} +1 -1
- package/dist/assets/{clipboard-O3XtpG2j.js → clipboard-DyCy8o-j.js} +1 -1
- package/dist/assets/{collapsible-DaEya6b6.js → collapsible-CVL-5iEB.js} +1 -1
- package/dist/assets/{desktopHosts-Txp4xOVQ.js → desktopHosts-Dzx3McaD.js} +1 -1
- package/dist/assets/{desktopRelayRestore-C_FSEHKM.js → desktopRelayRestore-B9S0Rp5s.js} +1 -1
- package/dist/assets/{dialog-BBR8o-ss.js → dialog-BpUGcA8h.js} +1 -1
- package/dist/assets/{es-Dhnp9uFc.js → es-L71xM_T9.js} +2 -2
- package/dist/assets/{fileQueries-B_fTkH6s.js → fileQueries-_VUJM8AE.js} +1 -1
- package/dist/assets/{fr-BSDdgLmw.js → fr-DDeqVFFE.js} +3 -3
- package/dist/assets/{gitApi-BDP5AvDM.js → gitApi-CmTOrDUi.js} +1 -1
- package/dist/assets/{input-BzYA603C.js → input-Ca2tUhgN.js} +1 -1
- package/dist/assets/insertionBoundaries-DSjll0LA.js +1 -0
- package/dist/assets/{ja-DSiOtWVF.js → ja-Cb5UuJfO.js} +3 -3
- package/dist/assets/{ko-BHzG9D00.js → ko-BOQuwJW9.js} +3 -3
- package/dist/assets/{main-u_SqzChh.js → main-Cd6Ckvte.js} +6 -6
- package/dist/assets/{main-BE8Iasfv.js → main-CspaiFTA.js} +2 -2
- package/dist/assets/{markdown-worker-W06-MhF5.js → markdown-worker-9Sn2jsDp.js} +1 -1
- package/dist/assets/{markdownTheme-B89dbj3N.js → markdownTheme-DidS-jC5.js} +1 -1
- package/dist/assets/{miniChat-Bt5Y1M49.js → miniChat-B1-H0jeh.js} +2 -2
- package/dist/assets/mobile-BrcR1Z4M.js +2 -0
- package/dist/assets/multirun-drlxE7zs.js +4 -0
- package/dist/assets/{persistence-6sclr7B6.js → persistence-aCOlo6ew.js} +2 -2
- package/dist/assets/pl-CPR51X8e.js +15 -0
- package/dist/assets/{platform-CbeLpKPk.js → platform-DxNH_0Fj.js} +1 -1
- package/dist/assets/{projectMeta-CZ1xvqQ_.js → projectMeta-CxlGMTn4.js} +2 -2
- package/dist/assets/{pt-BR-DPAxb5uf.js → pt-BR-CCmlB4Wg.js} +2 -2
- package/dist/assets/{radio-C21qxMRv.js → radio-BO8FDjt-.js} +1 -1
- package/dist/assets/renderElectronMiniChatApp-m8qaPUV-.js +2 -0
- package/dist/assets/renderMobileApp-BTTwlzP8.js +23 -0
- package/dist/assets/{runtimeConfig-D3LuSwdY.js → runtimeConfig-BNXdtD_w.js} +1 -1
- package/dist/assets/runtimeEndpointReset-C-_frggR.js +4 -0
- package/dist/assets/{shikiHighlight-DGtY3zhO.js → shikiHighlight-gHsABSen.js} +1 -1
- package/dist/assets/{sortable-tabs-strip-D9PYWV2n.js → sortable-tabs-strip-CaVP_5XI.js} +1 -1
- package/dist/assets/src-Brv0DCpZ.css +2 -0
- package/dist/assets/{store-CXHGSKbF.js → store--ZgdDfa2.js} +4 -4
- package/dist/assets/{terminalApi-BpPeXWIu.js → terminalApi-B36I-z14.js} +1 -1
- package/dist/assets/{tooltip-D_orJMYd.js → tooltip-GC3dg3gO.js} +1 -1
- package/dist/assets/{uk-CI6xwBAp.js → uk-DWxkhZMt.js} +2 -2
- package/dist/assets/{url-BsaBG5-1.js → url-BQHM4bC4.js} +1 -1
- package/dist/assets/{useAppFontEffects-DJPeS83j.js → useAppFontEffects-KFNN7bwm.js} +5 -5
- package/dist/assets/{useAssistantUIStore-BHsHXCKE.js → useAssistantUIStore-DxZsjSPQ.js} +1 -1
- package/dist/assets/{useDesktopWindowControlsLayout-C4K4es4Y.js → useDesktopWindowControlsLayout-BB8iJu3-.js} +1 -1
- package/dist/assets/{useEffectiveDirectory-BwePcDe9.js → useEffectiveDirectory-5OkuSJYc.js} +1 -1
- package/dist/assets/{useFontPreferences-ckzpXQaJ.js → useFontPreferences-D9h4M7x4.js} +1 -1
- package/dist/assets/{useMobileNavigationStore-DbD0hWMO.js → useMobileNavigationStore-BrwhPKxX.js} +19 -19
- package/dist/assets/{useSessionAutoCleanup-D8XMYMRy.js → useSessionAutoCleanup-D-85mGb9.js} +1 -1
- package/dist/assets/{useUIStore-DzwCfRqr.js → useUIStore-Wyu09VUF.js} +1 -1
- package/dist/assets/{useWorkerHighlightedLines-CGoX-xGT.js → useWorkerHighlightedLines-B7i7cO_Q.js} +1 -1
- package/dist/assets/{utils-B1EK5zKa.js → utils-CJdWZupK.js} +1 -1
- package/dist/assets/{zh-CN-DHgsAmCO.js → zh-CN-CnBbxYt8.js} +2 -2
- package/dist/assets/{zh-TW-CZ_DZMCi.js → zh-TW-B6McpMc8.js} +2 -2
- package/dist/index.html +9 -9
- package/dist/mini-chat.html +9 -9
- package/dist/mobile.html +9 -9
- package/package.json +1 -1
- package/server/index.js +4 -14
- package/server/lib/opencode/settings-helpers.js +0 -3
- package/server/lib/opencode/shutdown-runtime.js +0 -2
- package/server/lib/session-goal/DOCUMENTATION.md +3 -3
- package/server/lib/session-goal/runtime.js +3 -3
- package/server/lib/session-title/DOCUMENTATION.md +1 -2
- package/dist/assets/AssistantView-Dw6pykwG.js +0 -1
- package/dist/assets/ContextPanel-BVsxBmy5.js +0 -288
- package/dist/assets/OverlayScrollbar-Ch3J6ASR.js +0 -2
- package/dist/assets/insertionBoundaries-BZq6rsZ4.js +0 -1
- package/dist/assets/mobile-B-5b5wLN.js +0 -2
- package/dist/assets/multirun-Bh8tCLlc.js +0 -4
- package/dist/assets/pl-3z6483I9.js +0 -15
- package/dist/assets/renderElectronMiniChatApp-CIBR-c-z.js +0 -2
- package/dist/assets/renderMobileApp-BuSUOExs.js +0 -23
- package/dist/assets/runtimeEndpointReset-C3MJHiBd.js +0 -4
- package/dist/assets/src-RGaBtbGz.css +0 -2
- package/server/lib/session-assist/DOCUMENTATION.md +0 -62
- package/server/lib/session-assist/runtime.js +0 -376
- package/server/lib/session-assist/runtime.test.js +0 -114
package/dist/index.html
CHANGED
|
@@ -552,25 +552,25 @@
|
|
|
552
552
|
opacity: 0.72;
|
|
553
553
|
}
|
|
554
554
|
</style>
|
|
555
|
-
<script type="module" crossorigin src="/assets/main-
|
|
555
|
+
<script type="module" crossorigin src="/assets/main-CspaiFTA.js"></script>
|
|
556
556
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-C0FnF6B9.js">
|
|
557
557
|
<link rel="modulepreload" crossorigin href="/assets/vendor-base-ui-CnHfUmDN.js">
|
|
558
558
|
<link rel="modulepreload" crossorigin href="/assets/vendor-zustand-B4dlGEM2.js">
|
|
559
|
-
<link rel="modulepreload" crossorigin href="/assets/useUIStore-
|
|
559
|
+
<link rel="modulepreload" crossorigin href="/assets/useUIStore-Wyu09VUF.js">
|
|
560
560
|
<link rel="modulepreload" crossorigin href="/assets/vendor-pathe-vBmvQE8f.js">
|
|
561
561
|
<link rel="modulepreload" crossorigin href="/assets/vendor-react-DLPElpoQ.js">
|
|
562
562
|
<link rel="modulepreload" crossorigin href="/assets/vendor-tanstack-query-core-BWz0ose6.js">
|
|
563
|
-
<link rel="modulepreload" crossorigin href="/assets/persistence-
|
|
564
|
-
<link rel="modulepreload" crossorigin href="/assets/desktopHosts-
|
|
565
|
-
<link rel="modulepreload" crossorigin href="/assets/desktopRelayRestore-
|
|
563
|
+
<link rel="modulepreload" crossorigin href="/assets/persistence-aCOlo6ew.js">
|
|
564
|
+
<link rel="modulepreload" crossorigin href="/assets/desktopHosts-Dzx3McaD.js">
|
|
565
|
+
<link rel="modulepreload" crossorigin href="/assets/desktopRelayRestore-B9S0Rp5s.js">
|
|
566
566
|
<link rel="modulepreload" crossorigin href="/assets/vendor-opencode-sdk-C07HQypa.js">
|
|
567
567
|
<link rel="modulepreload" crossorigin href="/assets/vendor-aparajita-capacitor-secure-storage-CjQdwfjS.js">
|
|
568
|
-
<link rel="modulepreload" crossorigin href="/assets/platform-
|
|
569
|
-
<link rel="modulepreload" crossorigin href="/assets/terminalApi-
|
|
568
|
+
<link rel="modulepreload" crossorigin href="/assets/platform-DxNH_0Fj.js">
|
|
569
|
+
<link rel="modulepreload" crossorigin href="/assets/terminalApi-B36I-z14.js">
|
|
570
570
|
<link rel="modulepreload" crossorigin href="/assets/types-BuiqMmh_.js">
|
|
571
571
|
<link rel="modulepreload" crossorigin href="/assets/capgoAdapter-DCowZ2ab.js">
|
|
572
|
-
<link rel="modulepreload" crossorigin href="/assets/runtimeConfig-
|
|
573
|
-
<link rel="stylesheet" crossorigin href="/assets/src-
|
|
572
|
+
<link rel="modulepreload" crossorigin href="/assets/runtimeConfig-BNXdtD_w.js">
|
|
573
|
+
<link rel="stylesheet" crossorigin href="/assets/src-Brv0DCpZ.css">
|
|
574
574
|
</head>
|
|
575
575
|
<body class="h-full bg-background text-foreground">
|
|
576
576
|
<!-- Keep the startup layer outside #root. React replaces every child of
|
package/dist/mini-chat.html
CHANGED
|
@@ -74,25 +74,25 @@
|
|
|
74
74
|
}
|
|
75
75
|
</style>
|
|
76
76
|
|
|
77
|
-
<script type="module" crossorigin src="/assets/miniChat-
|
|
77
|
+
<script type="module" crossorigin src="/assets/miniChat-B1-H0jeh.js"></script>
|
|
78
78
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-C0FnF6B9.js">
|
|
79
79
|
<link rel="modulepreload" crossorigin href="/assets/vendor-base-ui-CnHfUmDN.js">
|
|
80
80
|
<link rel="modulepreload" crossorigin href="/assets/vendor-zustand-B4dlGEM2.js">
|
|
81
|
-
<link rel="modulepreload" crossorigin href="/assets/useUIStore-
|
|
81
|
+
<link rel="modulepreload" crossorigin href="/assets/useUIStore-Wyu09VUF.js">
|
|
82
82
|
<link rel="modulepreload" crossorigin href="/assets/vendor-pathe-vBmvQE8f.js">
|
|
83
83
|
<link rel="modulepreload" crossorigin href="/assets/vendor-react-DLPElpoQ.js">
|
|
84
84
|
<link rel="modulepreload" crossorigin href="/assets/vendor-tanstack-query-core-BWz0ose6.js">
|
|
85
|
-
<link rel="modulepreload" crossorigin href="/assets/persistence-
|
|
86
|
-
<link rel="modulepreload" crossorigin href="/assets/desktopHosts-
|
|
87
|
-
<link rel="modulepreload" crossorigin href="/assets/desktopRelayRestore-
|
|
85
|
+
<link rel="modulepreload" crossorigin href="/assets/persistence-aCOlo6ew.js">
|
|
86
|
+
<link rel="modulepreload" crossorigin href="/assets/desktopHosts-Dzx3McaD.js">
|
|
87
|
+
<link rel="modulepreload" crossorigin href="/assets/desktopRelayRestore-B9S0Rp5s.js">
|
|
88
88
|
<link rel="modulepreload" crossorigin href="/assets/vendor-opencode-sdk-C07HQypa.js">
|
|
89
89
|
<link rel="modulepreload" crossorigin href="/assets/vendor-aparajita-capacitor-secure-storage-CjQdwfjS.js">
|
|
90
|
-
<link rel="modulepreload" crossorigin href="/assets/platform-
|
|
91
|
-
<link rel="modulepreload" crossorigin href="/assets/terminalApi-
|
|
90
|
+
<link rel="modulepreload" crossorigin href="/assets/platform-DxNH_0Fj.js">
|
|
91
|
+
<link rel="modulepreload" crossorigin href="/assets/terminalApi-B36I-z14.js">
|
|
92
92
|
<link rel="modulepreload" crossorigin href="/assets/types-BuiqMmh_.js">
|
|
93
93
|
<link rel="modulepreload" crossorigin href="/assets/capgoAdapter-DCowZ2ab.js">
|
|
94
|
-
<link rel="modulepreload" crossorigin href="/assets/runtimeConfig-
|
|
95
|
-
<link rel="stylesheet" crossorigin href="/assets/src-
|
|
94
|
+
<link rel="modulepreload" crossorigin href="/assets/runtimeConfig-BNXdtD_w.js">
|
|
95
|
+
<link rel="stylesheet" crossorigin href="/assets/src-Brv0DCpZ.css">
|
|
96
96
|
</head>
|
|
97
97
|
<body class="h-full bg-background text-foreground">
|
|
98
98
|
<div id="root" class="h-full">
|
package/dist/mobile.html
CHANGED
|
@@ -63,25 +63,25 @@
|
|
|
63
63
|
})();
|
|
64
64
|
</script>
|
|
65
65
|
|
|
66
|
-
<script type="module" crossorigin src="/assets/mobile-
|
|
66
|
+
<script type="module" crossorigin src="/assets/mobile-BrcR1Z4M.js"></script>
|
|
67
67
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-C0FnF6B9.js">
|
|
68
68
|
<link rel="modulepreload" crossorigin href="/assets/vendor-base-ui-CnHfUmDN.js">
|
|
69
69
|
<link rel="modulepreload" crossorigin href="/assets/vendor-zustand-B4dlGEM2.js">
|
|
70
|
-
<link rel="modulepreload" crossorigin href="/assets/useUIStore-
|
|
70
|
+
<link rel="modulepreload" crossorigin href="/assets/useUIStore-Wyu09VUF.js">
|
|
71
71
|
<link rel="modulepreload" crossorigin href="/assets/vendor-pathe-vBmvQE8f.js">
|
|
72
72
|
<link rel="modulepreload" crossorigin href="/assets/vendor-react-DLPElpoQ.js">
|
|
73
73
|
<link rel="modulepreload" crossorigin href="/assets/vendor-tanstack-query-core-BWz0ose6.js">
|
|
74
|
-
<link rel="modulepreload" crossorigin href="/assets/persistence-
|
|
75
|
-
<link rel="modulepreload" crossorigin href="/assets/desktopHosts-
|
|
76
|
-
<link rel="modulepreload" crossorigin href="/assets/desktopRelayRestore-
|
|
74
|
+
<link rel="modulepreload" crossorigin href="/assets/persistence-aCOlo6ew.js">
|
|
75
|
+
<link rel="modulepreload" crossorigin href="/assets/desktopHosts-Dzx3McaD.js">
|
|
76
|
+
<link rel="modulepreload" crossorigin href="/assets/desktopRelayRestore-B9S0Rp5s.js">
|
|
77
77
|
<link rel="modulepreload" crossorigin href="/assets/vendor-opencode-sdk-C07HQypa.js">
|
|
78
78
|
<link rel="modulepreload" crossorigin href="/assets/vendor-aparajita-capacitor-secure-storage-CjQdwfjS.js">
|
|
79
|
-
<link rel="modulepreload" crossorigin href="/assets/platform-
|
|
80
|
-
<link rel="modulepreload" crossorigin href="/assets/terminalApi-
|
|
79
|
+
<link rel="modulepreload" crossorigin href="/assets/platform-DxNH_0Fj.js">
|
|
80
|
+
<link rel="modulepreload" crossorigin href="/assets/terminalApi-B36I-z14.js">
|
|
81
81
|
<link rel="modulepreload" crossorigin href="/assets/types-BuiqMmh_.js">
|
|
82
82
|
<link rel="modulepreload" crossorigin href="/assets/capgoAdapter-DCowZ2ab.js">
|
|
83
|
-
<link rel="modulepreload" crossorigin href="/assets/runtimeConfig-
|
|
84
|
-
<link rel="stylesheet" crossorigin href="/assets/src-
|
|
83
|
+
<link rel="modulepreload" crossorigin href="/assets/runtimeConfig-BNXdtD_w.js">
|
|
84
|
+
<link rel="stylesheet" crossorigin href="/assets/src-Brv0DCpZ.css">
|
|
85
85
|
</head>
|
|
86
86
|
<body class="h-full bg-background text-foreground">
|
|
87
87
|
<div id="root" class="h-full"></div>
|
package/package.json
CHANGED
package/server/index.js
CHANGED
|
@@ -58,7 +58,6 @@ import { createOpenCodeResolutionRuntime } from './lib/opencode/opencode-resolut
|
|
|
58
58
|
import { createBootstrapRuntime } from './lib/opencode/bootstrap-runtime.js';
|
|
59
59
|
import { createSessionRuntime } from './lib/opencode/session-runtime.js';
|
|
60
60
|
import { createOpenCodeWatcherRuntime } from './lib/opencode/watcher.js';
|
|
61
|
-
import { createSessionAssistRuntime } from './lib/session-assist/runtime.js';
|
|
62
61
|
import { createSessionTitleRuntime } from './lib/session-title/runtime.js';
|
|
63
62
|
import { createSessionIndexService } from './lib/session-index/service.js';
|
|
64
63
|
import { createSessionIndexSyncRuntime } from './lib/session-index/sync-runtime.js';
|
|
@@ -685,12 +684,6 @@ const getSmallModelService = async () => {
|
|
|
685
684
|
return smallModelServiceInstance;
|
|
686
685
|
};
|
|
687
686
|
|
|
688
|
-
const sessionAssistRuntime = createSessionAssistRuntime({
|
|
689
|
-
buildOpenCodeUrl,
|
|
690
|
-
getOpenCodeAuthHeaders,
|
|
691
|
-
getSmallModelService,
|
|
692
|
-
});
|
|
693
|
-
|
|
694
687
|
const sessionTitleRuntime = createSessionTitleRuntime({
|
|
695
688
|
buildOpenCodeUrl,
|
|
696
689
|
getOpenCodeAuthHeaders,
|
|
@@ -769,9 +762,8 @@ const openCodeWatcherRuntime = createOpenCodeWatcherRuntime({
|
|
|
769
762
|
},
|
|
770
763
|
});
|
|
771
764
|
|
|
772
|
-
// Session-
|
|
765
|
+
// Session-title and session-goal subscribe to the hub directly: they need the
|
|
773
766
|
// envelope's directory to route their own OpenCode calls to the right instance.
|
|
774
|
-
console.log('[session-assist] listening for session events');
|
|
775
767
|
console.log('[session-title] listening for session events');
|
|
776
768
|
console.log('[session-goal] listening for session events');
|
|
777
769
|
globalMessageStreamHub.subscribeEvent((event) => {
|
|
@@ -781,7 +773,6 @@ globalMessageStreamHub.subscribeEvent((event) => {
|
|
|
781
773
|
const directory = typeof event?.directory === 'string' && event.directory && event.directory !== 'global'
|
|
782
774
|
? event.directory
|
|
783
775
|
: '';
|
|
784
|
-
sessionAssistRuntime.processPayload(payload, directory);
|
|
785
776
|
sessionTitleRuntime.processPayload(payload, directory);
|
|
786
777
|
sessionGoalRuntime.processPayload(payload, directory);
|
|
787
778
|
});
|
|
@@ -1065,9 +1056,9 @@ const completeOpenCodeStartup = () => {
|
|
|
1065
1056
|
if (openCodeLifecycleState.openCodeProcess && !openCodeLifecycleState.isExternalOpenCode) {
|
|
1066
1057
|
startHealthMonitoring();
|
|
1067
1058
|
}
|
|
1068
|
-
// The global watcher used to start only for desktop notifications;
|
|
1069
|
-
// session-
|
|
1070
|
-
//
|
|
1059
|
+
// The global watcher used to start only for desktop notifications; session-title
|
|
1060
|
+
// and session-goal also ride its event hub, so it now starts unconditionally
|
|
1061
|
+
// once OpenCode is up.
|
|
1071
1062
|
void ensureGlobalWatcherStarted().catch((error) => {
|
|
1072
1063
|
console.warn(`Global event watcher startup failed: ${error?.message || error}`);
|
|
1073
1064
|
});
|
|
@@ -1099,7 +1090,6 @@ const gracefulShutdownRuntime = createGracefulShutdownRuntime({
|
|
|
1099
1090
|
},
|
|
1100
1091
|
syncToHmrState,
|
|
1101
1092
|
openCodeWatcherRuntime,
|
|
1102
|
-
sessionAssistRuntime,
|
|
1103
1093
|
sessionTitleRuntime,
|
|
1104
1094
|
sessionGoalRuntime,
|
|
1105
1095
|
sessionRuntime,
|
|
@@ -318,9 +318,6 @@ export const createSettingsHelpers = (dependencies) => {
|
|
|
318
318
|
if (typeof candidate.showReasoningTraces === 'boolean') {
|
|
319
319
|
result.showReasoningTraces = candidate.showReasoningTraces;
|
|
320
320
|
}
|
|
321
|
-
if (typeof candidate.sessionRecapEnabled === 'boolean') {
|
|
322
|
-
result.sessionRecapEnabled = candidate.sessionRecapEnabled;
|
|
323
|
-
}
|
|
324
321
|
if (typeof candidate.sessionTitleRefreshEnabled === 'boolean') {
|
|
325
322
|
result.sessionTitleRefreshEnabled = candidate.sessionTitleRefreshEnabled;
|
|
326
323
|
}
|
|
@@ -8,7 +8,6 @@ export const createGracefulShutdownRuntime = (dependencies) => {
|
|
|
8
8
|
syncToHmrState,
|
|
9
9
|
openCodeWatcherRuntime,
|
|
10
10
|
sessionRuntime,
|
|
11
|
-
sessionAssistRuntime,
|
|
12
11
|
sessionTitleRuntime,
|
|
13
12
|
sessionGoalRuntime,
|
|
14
13
|
scheduledTasksRuntime,
|
|
@@ -43,7 +42,6 @@ export const createGracefulShutdownRuntime = (dependencies) => {
|
|
|
43
42
|
|
|
44
43
|
openCodeWatcherRuntime.stop();
|
|
45
44
|
sessionRuntime.dispose();
|
|
46
|
-
sessionAssistRuntime?.stop?.();
|
|
47
45
|
sessionTitleRuntime?.stop?.();
|
|
48
46
|
sessionGoalRuntime?.stop?.();
|
|
49
47
|
// Stop timers/queue only. Keep the process-lifetime run history store open so
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Server-side control loop that keeps a session working toward a user-defined
|
|
4
4
|
objective stored under `metadata.openchamber.goal`, with the small model as
|
|
5
5
|
an independent progress auditor. Built on OpenChamber's backend-driven
|
|
6
|
-
architecture
|
|
6
|
+
architecture: the loop lives in
|
|
7
7
|
the web server and survives UI disconnects.
|
|
8
8
|
|
|
9
9
|
## Goal payload (`metadata.openchamber.goal`)
|
|
@@ -69,8 +69,8 @@ before touching the filesystem). Rationale: metadata rides every
|
|
|
69
69
|
|
|
70
70
|
## Flow
|
|
71
71
|
|
|
72
|
-
1. `createSessionGoalRuntime` subscribes to the global SSE hub (
|
|
73
|
-
|
|
72
|
+
1. `createSessionGoalRuntime` subscribes to the global SSE hub (it needs
|
|
73
|
+
the envelope's `directory`).
|
|
74
74
|
2. `session.status: idle` arms a 15s per-session timer; `busy`/`retry` clears
|
|
75
75
|
it. A `session.updated` carrying a fresh active goal (`turnsUsed === 0` or
|
|
76
76
|
`statusReason === 'resumed'`) arms a kickoff timer — 3s for fresh goals,
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// has no channel to settle its own goal. When the small model is unavailable
|
|
12
12
|
// the loop still terminates via the budget and the continuation cap.
|
|
13
13
|
//
|
|
14
|
-
// Purely event-driven
|
|
14
|
+
// Purely event-driven: no polling, no backfill, no session
|
|
15
15
|
// scans. Only sessions that emit events while the server runs ever tick.
|
|
16
16
|
|
|
17
17
|
import fs from 'fs';
|
|
@@ -110,8 +110,8 @@ const buildAuditSystemPrompt = () => [
|
|
|
110
110
|
].join('\n');
|
|
111
111
|
|
|
112
112
|
// Hard guard against language hallucination (account-side personalization
|
|
113
|
-
// can leak a different language despite the instruction
|
|
114
|
-
//
|
|
113
|
+
// can leak a different language despite the instruction): if the note uses
|
|
114
|
+
// a script absent from the objective
|
|
115
115
|
// and the agent's reply, drop the note but keep the verdict.
|
|
116
116
|
const SCRIPT_RANGES = [
|
|
117
117
|
/[Ѐ-ӿ]/, // Cyrillic
|
|
@@ -14,8 +14,7 @@ throttle (`TITLE_THROTTLE_MS`) when a refresh is armed.
|
|
|
14
14
|
## Flow
|
|
15
15
|
|
|
16
16
|
1. `createSessionTitleRuntime` is a consumer of the server's global SSE
|
|
17
|
-
fan-out (`index.js` → `globalMessageStreamHub.subscribeEvent`)
|
|
18
|
-
pattern as session-assist. Purely event-driven — dormant sessions never
|
|
17
|
+
fan-out (`index.js` → `globalMessageStreamHub.subscribeEvent`). Purely event-driven — dormant sessions never
|
|
19
18
|
generate anything.
|
|
20
19
|
2. Auto title refresh is intentionally sparse (title stability first). A newly
|
|
21
20
|
observed root `session.created` generates its first title immediately on the
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{A as n,E as r,t as i,w as a}from"./useUIStore-DzwCfRqr.js";import{$t as o,Ot as s,et as c,rt as l,yt as u}from"./persistence-6sclr7B6.js";import{nt as d,rt as f}from"./vendor-base-ui-CnHfUmDN.js";import{r as p}from"./platform-CbeLpKPk.js";import{n as m}from"./vendor-react-DLPElpoQ.js";import{r as h}from"./vendor-sonner-DVzioF3d.js";import{n as g}from"./vendor-reactuses-core-DDoDDyM9.js";import{n as ee}from"./clipboard-O3XtpG2j.js";import{a as _,n as v,s as y}from"./MobileShareBridge-Cr2Na6iM.js";import{Fo as b,Ja as x,Si as te,Vi as S,Xr as C,Za as w,_n as T,bo as E,cn as D,ei as O,gn as k,hn as A,o as j,rn as M,ua as N,xo as P}from"./useMobileNavigationStore-DbD0hWMO.js";import{_ as F,a as I,c as L,d as R,f as z,g as ne,l as re,n as ie,o as ae,p as B,r as oe,t as V,v as H,x as U,y as se}from"./MobileDetailNavigation-TZmiqs_4.js";import{i as ce,r as le}from"./useAssistantUIStore-BHsHXCKE.js";import{t as ue}from"./AgentAvatar-DDcjamcJ.js";import{t as de}from"./utils-B1EK5zKa.js";import{n as fe}from"./Icon-DpjYnXxn.js";import{a as pe,i as me,n as W,o as G,r as K,t as q}from"./dialog-BBR8o-ss.js";import{t as he}from"./button-C7OXr4ae.js";import{i as ge}from"./OverlayScrollbar-Ch3J6ASR.js";import{J as _e,L as ve,N as ye,P as J,R as be,t as xe}from"./ChatContainer-DZPnS2OI.js";import{t as Se}from"./ContextPanel-BVsxBmy5.js";import{a as Ce,c as we,l as Te,o as Ee,s as De}from"./shikiHighlight-DGtY3zhO.js";var Y=e(f(),1),Oe=m(),X=e=>e.isVSCode||e.isPhoneShell||e.isMobile&&!e.isIPad?`session`:`context-panel`,Z=d(),ke=e=>{let t=(0,Oe.c)(56),{assistant:n,sessionID:r,warning:a,surface:s,onRevertMessage:c,onEditMessage:l,pendingUserMessages:u,onPendingUserMessagesMaterialized:d}=e,{t:f}=ee(),{isMobile:m}=ge(),h=n.effectiveWorkspacePath,_;t[0]!==n.sessionGeneration||t[1]!==r?(_={sessionID:r,sessionGeneration:n.sessionGeneration},t[0]=n.sessionGeneration,t[1]=r,t[2]=_):_=t[2];let v=H(n.id,_,s.active);v.data?.pages;let y;t[3]===v.data?.pages?y=t[4]:(y=v.data?.pages??[],t[3]=v.data?.pages,t[4]=y);let b;t[5]===y?b=t[6]:(b=te(y),t[5]=y,t[6]=b);let x=b,S;if(t[7]!==x){S=new Map;for(let e of x){let t=S.get(e.sessionID);S.set(e.sessionID,t===void 0||t===e.directory?e.directory:null)}t[7]=x,t[8]=S}else S=t[8];let C=S,w;t[9]===v?w=t[10]:(w=async()=>{(v.hasNextPage||v.isFetchNextPageError)&&await v.fetchNextPage()},t[9]=v,t[10]=w);let E=g(w),D=n.mode===`continuous`,O=ye(),A;t[11]===O?A=t[12]:(A=O&&!p(),t[11]=O,t[12]=A);let j=!!A,M;t[13]===j?M=t[14]:(M=(e,t)=>{T(e,t,{phoneShell:j,switchToChat:!0})},t[13]=j,t[14]=M);let N=g(M),P;t[15]!==h||t[16]!==C||t[17]!==N||t[18]!==r?(P=(e,t)=>{let n=e===r?h:C.get(e);if(!n||n!==t){k(e,`missing-directory`);return}N(e,t)},t[15]=h,t[16]=C,t[17]=N,t[18]=r,t[19]=P):P=t[19];let F=g(P),I;t[20]!==m||t[21]!==j||t[22]!==N||t[23]!==f?(I=(e,t)=>{let n=e.trim(),r=t.trim();if(!n){k(e,`missing-session-id`);return}if(!r){k(n,`missing-directory`);return}if(X({isPhoneShell:j,isMobile:m,isIPad:p(),isVSCode:o()})===`session`){N(n,r);return}i.getState().openContextPanelTab(r,{mode:`chat`,dedupeKey:`session:${n}`,label:f(`contextPanel.mode.chat`),readOnly:!0})},t[20]=m,t[21]=j,t[22]=N,t[23]=f,t[24]=I):I=t[24];let L=g(I),R;t[25]===D?R=t[26]:(R={...J,forkSession:!1,mutateSession:D},t[25]=D,t[26]=R);let z;t[27]===l?z=t[28]:(z=l?{onEditMessage:l}:{},t[27]=l,t[28]=z);let ne;t[29]!==h||t[30]!==L||t[31]!==c||t[32]!==F||t[33]!==r||t[34]!==s.active||t[35]!==s.surfaceID||t[36]!==z||t[37]!==R?(ne={kind:`embedded`,surfaceId:s.surfaceID,sessionId:r,directory:h,active:s.active,capabilities:R,navigateSession:L,onRevertMessage:c,...z,openSourceSession:F},t[29]=h,t[30]=L,t[31]=c,t[32]=F,t[33]=r,t[34]=s.active,t[35]=s.surfaceID,t[36]=z,t[37]=R,t[38]=ne):ne=t[38];let re=ne,ie=v.isError||v.isSuccess&&!v.hasNextPage,ae=v.isLoading||v.isFetchingNextPage,B;t[39]!==E||t[40]!==ie||t[41]!==x||t[42]!==ae?(B={entries:x,complete:ie,loading:ae,fetchPrevious:E},t[39]=E,t[40]=ie,t[41]=x,t[42]=ae,t[43]=B):B=t[43];let oe;t[44]!==h||t[45]!==d||t[46]!==c||t[47]!==u||t[48]!==r||t[49]!==re||t[50]!==s||t[51]!==B||t[52]!==a?(oe={sessionId:r,directory:h,composerSurface:s,sessionSurface:re,warning:a,pendingUserMessages:u,onPendingUserMessagesMaterialized:d,assistantHistory:B,onRevertMessage:c},t[44]=h,t[45]=d,t[46]=c,t[47]=u,t[48]=r,t[49]=re,t[50]=s,t[51]=B,t[52]=a,t[53]=oe):oe=t[53];let V=oe,U;return t[54]===V?U=t[55]:(U=(0,Z.jsx)(xe,{autoOpenDraft:!1,host:V}),t[54]=V,t[55]=U),U},Ae=class extends Error{constructor(){super(`assistant_selection_stale`)}},Q=(e,t)=>e.assistantID===t.assistantID&&e.transportIdentity===t.transportIdentity&&e.runtimeGeneration===t.runtimeGeneration,je=class{onBusyChange;onError;flight=null;authoritativeIdentity=null;constructor(e,t){this.onBusyChange=e,this.onError=t}activate(e){this.authoritativeIdentity&&!Q(this.authoritativeIdentity,e)&&this.flight&&this.retire(this.flight),this.authoritativeIdentity=e}enqueue(e,t,n){if(!this.isAuthoritative(e))return Promise.reject(new Ae);let r=this.flight;r||(r={identity:e,controller:new AbortController,running:!1,desired:null,waiters:[],activeWaiters:[],idleWaiters:[],retired:!1},this.flight=r),r.desired=t;let i=new Promise((e,t)=>{r.waiters.push({resolve:e,reject:t})});return r.running||(r.running=!0,this.onBusyChange(!0),this.run(r,n)),i}async flush(e){if(!this.isAuthoritative(e))throw new Ae;let t=this.flight;t?.running&&await new Promise((e,n)=>t.idleWaiters.push({resolve:e,reject:n}))}assertAuthoritative(e){if(!this.isAuthoritative(e))throw new Ae}dispose(){this.flight&&this.retire(this.flight),this.authoritativeIdentity=null}async run(e,t){for(;!e.retired&&e.desired;){let n=e.desired;e.desired=null;let r=e.waiters.splice(0);e.activeWaiters=r;try{if(await t({identity:e.identity,selection:n,signal:e.controller.signal}),!e.retired)for(let e of r)e.resolve()}catch(t){if(!e.retired){this.onError(t);for(let e of r)e.reject(t)}}e.activeWaiters=[]}e.running=!1;for(let t of e.idleWaiters.splice(0))t.resolve();this.flight===e&&this.onBusyChange(!1)}retire(e){e.retired=!0,e.controller.abort();let t=new Ae;for(let n of e.activeWaiters.splice(0))n.reject(t);for(let n of e.waiters.splice(0))n.reject(t);for(let n of e.idleWaiters.splice(0))n.reject(t);this.flight===e&&(this.flight=null,this.onBusyChange(!1))}isAuthoritative(e){return this.authoritativeIdentity!==null&&Q(this.authoritativeIdentity,e)}},Me=(e,t)=>{let n=t.providerID??e.providerID,r=t.modelID??e.modelID,i=n!==e.providerID||r!==e.modelID;return{enabled:e.enabled,name:e.name,defaultPrompt:e.defaultPrompt,workspacePath:e.workspacePath,providerID:n,modelID:r,agent:t.agent??null,variant:i?null:t.variant??null,mode:e.mode}},Ne=async(e,t,n)=>{n.assertAuthoritative();let r=n.readSnapshot()?.assistants.find(t=>t.id===e.assistantID);if(!r)throw Error(`assistant_unavailable`);try{n.assertAuthoritative(),await n.updateAssistant(r,Me(r,t)),n.assertAuthoritative()}catch(i){if(n.assertAuthoritative(),n.signal.aborted)throw new Ae;if(!(i instanceof U)||i.code!==`revision_conflict`)throw i;if(n.assertAuthoritative(),r=(await n.ensureSnapshot(n.signal)).assistants.find(t=>t.id===e.assistantID),n.assertAuthoritative(),!r)throw new U(`revision_conflict`,409);n.assertAuthoritative(),await n.updateAssistant(r,Me(r,t)),n.assertAuthoritative()}};async function Pe(e){await I(e);let t=ce.getState().defaultShareAssistant;if(t?.assistantID!==e.id)return;let n=await L();n.serverInstanceID&&t.serverInstanceID===n.serverInstanceID&&ce.getState().setDefaultShareAssistant(null)}function Fe({assistant:e,open:t,onOpenChange:n,onDeleted:r}){let{t:i}=ee(),[a,o]=Y.useState(!1),s=e?_(e.name).displayName||e.name:``,c=g(e=>{a&&!e||n(e)}),l=g(()=>{a||n(!1)}),u=g(async()=>{if(!(!e||a)){o(!0);try{await Pe(e),r?.(e.id),n(!1),h.success(i(`assistants.settings.toast.deleted`))}catch{h.error(i(`assistants.settings.toast.deleteFailed`))}finally{o(!1)}}});return(0,Z.jsx)(q,{open:t&&e!==null,onOpenChange:c,children:(0,Z.jsxs)(W,{className:`max-w-md`,children:[(0,Z.jsxs)(pe,{children:[(0,Z.jsx)(G,{children:i(`assistants.settings.delete`)}),(0,Z.jsx)(K,{children:i(`assistants.settings.deleteConfirm`,{name:s})})]}),(0,Z.jsxs)(me,{children:[(0,Z.jsx)(he,{size:`sm`,variant:`ghost`,onClick:l,disabled:a,children:i(`settings.common.actions.cancel`)}),(0,Z.jsx)(he,{size:`sm`,variant:`destructive`,onClick:u,disabled:a,children:i(`settings.common.actions.delete`)})]})]})})}var Ie=[0,500,1500,4e3],Le=(e,t,n)=>{let r=!1,i=e.map(e=>e.info.id!==t||e.info.sessionID===n?e:(r=!0,{...e,info:{...e.info,sessionID:n}}));return r?i:e},Re=e=>{let t=e.refreshDelaysMs??Ie,n=e.sleep??(e=>new Promise(t=>setTimeout(t,e)));(async()=>{for(let r of t){if(r>0&&await n(r),!e.isCurrent())return;try{await e.refresh(e.binding);break}catch{}}})()},ze=e=>`${e.transport}\u0000${e.assistantID}`,Be=e=>({transport:e.transport,assistantID:e.assistantID}),Ve=(e,t)=>e.assistantID===t.assistantID&&e.sessionID===t.sessionID&&e.directory===t.directory&&e.sessionGeneration===t.sessionGeneration&&e.transport===t.transport&&e.runtimeGeneration===t.runtimeGeneration,He=(e,t)=>e.assistantID===t.assistantID&&e.sessionID===t.sessionID&&e.directory===t.directory&&e.sessionGeneration===t.sessionGeneration&&e.messageID===t.messageID&&e.transport===t.transport&&e.runtimeGeneration===t.runtimeGeneration,Ue=()=>{let e=new Map,t=new Map,n=1,r=e=>ze(e),i=async(e,n)=>{let i=r(e),a=t.get(i)??Promise.resolve(),o,s=new Promise(e=>{o=e}),c=a.catch(()=>void 0).then(()=>s);t.set(i,c),await a.catch(()=>void 0);try{return await n()}finally{o(),t.get(i)===c&&t.delete(i)}},a=(t,i)=>{let a=r(Be(t)),o=n++;return e.set(a,{identity:t,rollback:i,token:o}),o},o=t=>e.get(r(t))?.identity,s=t=>e.delete(r(t)),c=async e=>i(e,()=>s(e)),l=async t=>{let n=r(t),i=e.get(n);if(!i)return{kind:`none`};let a=i.token,o=i.identity,s;try{s=await i.rollback()}catch{return{kind:`blocked`,status:`failed`}}let c=e.get(n);return!c||c.token!==a||!He(c.identity,o)?{kind:`superseded`}:s.status===`rolled-back`||s.status===`conflict`?(e.delete(n),{kind:`cleared`,status:s.status}):{kind:`blocked`,status:s.status}},u=async(t,n)=>{let i=r(t),a=e.get(i);if(!a)return{kind:`none`};if(Ve(a.identity,n))return{kind:`match`};let o=a.token,s=a.identity,c=await a.rollback(),l=e.get(i);return!l||l.token!==o||!He(l.identity,s)?{kind:`superseded`}:c.status===`rolled-back`||c.status===`conflict`?(e.delete(i),{kind:`cleared`,status:c.status}):{kind:`rollback_failed`,retained:!0,status:c.status}};return{register:a,read:o,clear:s,clearExclusive:c,retireCurrent:l,rollbackAndClearIfBindingMismatch:async(e,t)=>i(e,()=>u(e,t)),rollbackAllBestEffort:async t=>{let n=[...e.entries()];await Promise.all(n.map(async([,n])=>{if(t?.excludeTransport!==void 0&&n.identity.transport===t.excludeTransport)return;let a=Be(n.identity);await i(a,async()=>{let t=r(a),i=e.get(t);if(!i||i.token!==n.token)return;let o=i.token,s=i.identity;try{let n=await i.rollback(),r=e.get(t);if(!r||r.token!==o||!He(r.identity,s))return;(n.status===`rolled-back`||n.status===`conflict`)&&e.delete(t)}catch{}})}))},stageExclusive:async(e,t)=>i(e,async()=>{let n=await l(e);if(n.kind===`blocked`)return{kind:`blocked`,status:n.status};let r=await t();if(!r)return{kind:`skipped`};let i=a(r.identity,r.rollback);return r.protectOnStale?{kind:`stale_protected`,token:i,identity:r.identity}:{kind:`registered`,token:i,identity:r.identity}})}},We=(e,t)=>!e?.attachments?.length||!t?[]:e.attachments.flatMap(e=>{let n=t[e.attachmentRefID];return n?[n]:[]}),Ge=(e,t)=>{let n=t??{};return e.map(e=>({partID:e.partID,text:e.text,...e.synthetic===!0?{synthetic:!0}:{},attachments:e.attachments.flatMap(e=>n[e.attachmentRefID]?[n[e.attachmentRefID]]:[])}))},Ke=(e,t)=>{if(t.length===0)return[...e];let n=new Map;for(let t of e)n.set(t.partID,t);for(let e of t)n.set(e.partID,e);let r=new Set,i=[];for(let t of e){let e=n.get(t.partID);e&&(i.push(e),r.add(t.partID))}for(let e of t)r.has(e.partID)||(i.push(e),r.add(e.partID));return i},qe=t({AssistantView:()=>et}),Je={},Ye=[],Xe=[],Ze=(e,t,n)=>[...e===void 0?[]:[{type:`text`,text:e}],...(t??[]).flatMap(e=>[{type:`text`,text:e.text,...e.synthetic===!0?{synthetic:!0}:{}},...(e.attachments??[]).map(e=>({type:`file`,mime:e.mimeType,url:e.dataUrl}))]),...(n??[]).map(e=>({type:`file`,mime:e.mimeType,url:e.dataUrl}))],Qe=e=>{let t=(0,Oe.c)(11),{assistant:n,onBack:r}=e,{t:i}=ee(),a;t[0]===n?a=t[1]:(a=n?_(n.name):null,t[0]=n,t[1]=a);let o=a,s=n&&o?o.displayName||n.name:``,c;t[2]!==s||t[3]!==i?(c=s||i(`assistants.title`),t[2]=s,t[3]=i,t[4]=c):c=t[4];let l;t[5]===i?l=t[6]:(l=i(`assistants.actions.backToChat`),t[5]=i,t[6]=l);let u;return t[7]!==r||t[8]!==c||t[9]!==l?(u=(0,Z.jsx)(V,{title:c,backAriaLabel:l,onBack:r}),t[7]=r,t[8]=c,t[9]=l,t[10]=u):u=t[10],u},$e=e=>{let t=(0,Oe.c)(45),{assistantID:n,displayName:r,avatarEmoji:i,modeLabel:a,selected:o,enabled:s,editLabel:c,deleteLabel:l,onSelect:u,onEdit:d,onDelete:f}=e,[p,m]=Y.useState(!1),h;t[0]===u?h=t[1]:(h=()=>u(),t[0]=u,t[1]=h);let ee=g(h),_;t[2]===d?_=t[3]:(_=()=>{m(!1),d()},t[2]=d,t[3]=_);let v=g(_),y;t[4]===f?y=t[5]:(y=()=>{m(!1),f()},t[4]=f,t[5]=y);let b=g(y),x;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(x=e=>{e.preventDefault(),m(!0)},t[6]=x):x=t[6];let te=o?`border-border/50 bg-[var(--surface-elevated)]`:`border-transparent hover:bg-interactive-hover`,S=!s&&`opacity-65`,C;t[7]!==te||t[8]!==S?(C=de(`flex w-full min-h-11 items-center gap-3 rounded-xl border px-3 py-3 text-left outline-none transition-[background-color,border-color,transform,opacity] duration-150 ease-out active:scale-[0.995] focus-visible:ring-2 focus-visible:ring-[var(--interactive-focus-ring)] motion-reduce:transition-none`,te,S),t[7]=te,t[8]=S,t[9]=C):C=t[9];let w;t[10]!==ee||t[11]!==o||t[12]!==C?(w=(0,Z.jsx)(`button`,{type:`button`,role:`option`,"aria-selected":o,onClick:ee,onContextMenu:x,className:C}),t[10]=ee,t[11]=o,t[12]=C,t[13]=w):w=t[13];let T;t[14]!==n||t[15]!==i||t[16]!==r?(T=(0,Z.jsx)(ue,{name:n,emoji:i,size:24,label:r}),t[14]=n,t[15]=i,t[16]=r,t[17]=T):T=t[17];let E;t[18]===r?E=t[19]:(E=(0,Z.jsx)(`span`,{className:`block truncate typography-ui-label font-medium`,children:r}),t[18]=r,t[19]=E);let D;t[20]===a?D=t[21]:(D=(0,Z.jsx)(`span`,{className:`mt-0.5 block truncate typography-micro text-muted-foreground`,children:a}),t[20]=a,t[21]=D);let O;t[22]!==E||t[23]!==D?(O=(0,Z.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[E,D]}),t[22]=E,t[23]=D,t[24]=O):O=t[24];let k;t[25]!==O||t[26]!==w||t[27]!==T?(k=(0,Z.jsxs)(Te,{render:w,children:[T,O]}),t[25]=O,t[26]=w,t[27]=T,t[28]=k):k=t[28];let A;t[29]===Symbol.for(`react.memo_cache_sentinel`)?(A=(0,Z.jsx)(fe,{name:`edit`,className:`size-4`}),t[29]=A):A=t[29];let j;t[30]!==c||t[31]!==v?(j=(0,Z.jsxs)(De,{onClick:v,children:[A,c]}),t[30]=c,t[31]=v,t[32]=j):j=t[32];let M;t[33]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,Z.jsx)(we,{}),t[33]=M):M=t[33];let N;t[34]===Symbol.for(`react.memo_cache_sentinel`)?(N=(0,Z.jsx)(fe,{name:`delete-bin`,className:`size-4`}),t[34]=N):N=t[34];let P;t[35]!==l||t[36]!==b?(P=(0,Z.jsxs)(De,{onClick:b,className:`text-[var(--status-error)] focus:text-[var(--status-error)] data-[highlighted]:text-[var(--status-error)] [&_svg]:text-[var(--status-error)]`,children:[N,l]}),t[35]=l,t[36]=b,t[37]=P):P=t[37];let F;t[38]!==j||t[39]!==P?(F=(0,Z.jsxs)(Ee,{className:`min-w-[10rem]`,children:[j,M,P]}),t[38]=j,t[39]=P,t[40]=F):F=t[40];let I;return t[41]!==p||t[42]!==k||t[43]!==F?(I=(0,Z.jsxs)(Ce,{open:p,onOpenChange:m,children:[k,F]}),t[41]=p,t[42]=k,t[43]=F,t[44]=I):I=t[44],I},et=({activeOverride:e,onMobileBack:t})=>{let{t:o}=ee(),{isMobile:d}=ge(),f=ye(),p=Y.useSyncExternalStore(n,r,r),m=a(),te=i(e=>e.activeMainTab===`assistant`),T=e??te,k=i(e=>e.isMobile),I=d||k,L=F(),V=se(),H=V.data,U=ce(e=>e.assistantByTransport[p]??null),pe=ce(e=>e.selectAssistant),me=ce(e=>e.requestCreate),W=H?.assistants.find(e=>e.id===U)??null,G=W?.id??``,K=W?.sessionID??``,q=W?.effectiveWorkspacePath??``,J=Y.useMemo(()=>s({transportIdentity:p},`assistant:${G}`),[G,p]),xe=u(J),Ce=b(e=>e.draftAttachmentViews[xe]??Je),we=b(e=>e.drafts[xe]),Te=Y.useMemo(()=>{let e=We(we,Ce);return e.length===0?Ye:e},[Ce,we]),Ee=we?.attachments,De=we?.syntheticParts,Oe=Y.useMemo(()=>!Ee||!De?``:`${Ee.map(e=>e.attachmentRefID).join(``)}\u0004${De.map(e=>`${e.partID}\u0002${e.attachments.map(e=>e.attachmentRefID).join(``)}`).join(``)}`,[Ee,De]);Y.useEffect(()=>{G&&b.getState().hydrateDraftAttachments(J)},[G,J,Oe]);let X=P(q||null,{enabled:!!q&&T}),Q=E(q||null,{enabled:!!q&&T}),Me=M(K,q||void 0),Pe=D(K,q||void 0),Ie=A(K),ze=_e(),[Ve,He]=Y.useState(()=>new Map),qe=Y.useRef(0),et=Y.useRef(Ue()),tt=Ve.get(G)??Xe,[,nt]=Y.useState(!1),rt=Y.useRef(()=>{});rt.current=()=>{h.error(o(`assistants.composer.selectionSaveFailed`))};let it=Y.useRef(null);it.current||=new je(nt,e=>rt.current(e));let at=Y.useMemo(()=>({assistantID:G,transportIdentity:p,runtimeGeneration:m}),[G,m,p]),$=it.current,ot=Y.useMemo(()=>({transport:p,assistantID:G}),[G,p]),st=g(async(e,t=p)=>{await et.current.clearExclusive({transport:t,assistantID:e})}),ct=g(e=>{et.current.rollbackAllBestEffort(e).catch(()=>void 0)});Y.useEffect(()=>{!U&&H?.assistants[0]&&pe(H.assistants[0].id)},[pe,U,H?.assistants]),Y.useEffect(()=>{V.isSuccess&&U&&!W&&pe(H?.assistants[0]?.id??null)},[W,pe,U,H?.assistants,V.isSuccess]),Y.useEffect(()=>{T&&G&&!K&&ae(G)},[T,G,K]),Y.useEffect(()=>{qe.current++,He(new Map),ct({excludeTransport:p})},[p,m,ct]),Y.useEffect(()=>()=>{qe.current++,ct()},[ct]),Y.useEffect(()=>{$.activate(at)},[$,at]),Y.useEffect(()=>()=>{$.dispose()},[$]),Y.useEffect(()=>{G&&et.current.rollbackAndClearIfBindingMismatch(ot,{assistantID:G,sessionID:K,directory:q,sessionGeneration:W?.sessionGeneration??-1,transport:p,runtimeGeneration:m}).catch(()=>void 0)},[W?.sessionGeneration,G,q,m,K,ot,p]);let lt=g(e=>at.assistantID?$.enqueue(at,e,async({identity:e,selection:t,signal:n})=>{await Ne(e,t,{readSnapshot:()=>z(void 0,e.transportIdentity),ensureSnapshot:e=>re(e),updateAssistant:ne,signal:n,assertAuthoritative:()=>{if($.assertAuthoritative(e),r()!==e.transportIdentity||a()!==e.runtimeGeneration)throw new Ae}})}):Promise.reject(Error(`assistant_unavailable`))),ut=Y.useMemo(()=>be(Q.data),[Q.data]),dt=g(e=>{if(!W)return;let t=x(ut,W.agent??void 0,e);if(t){let e=w({providerID:W.providerID,modelID:W.modelID,agent:W.agent},t,ut,X.data??[]),n=e.providerID===W.providerID&&e.modelID===W.modelID;lt({...e,agent:e.agent??void 0,variant:n?W.variant??void 0:void 0})}}),ft=g(async(e,t)=>{e.sessionID&&await ze.ensureSessionRenderable(e.sessionID,{directory:e.directory,...t?.force?{force:!0}:{}})}),pt=W?.sessionGeneration;Y.useEffect(()=>{!T||!G||!K||!q||pt===void 0||ft({sessionID:K,directory:q,sessionGeneration:pt},{force:!0})},[T,G,q,ft,pt,K]);let mt=g((e,t)=>{if(t.length===0)return;let n=new Set(t);He(t=>{let r=t.get(e);if(!r?.some(e=>n.has(e.info.id)))return t;let i=new Map(t),a=r.filter(e=>!n.has(e.info.id));return a.length>0?i.set(e,a):i.delete(e),i})}),ht=g((e,t,n)=>{He(r=>{let i=r.get(e);if(!i)return r;let a=Le(i,t,n);if(a===i)return r;let o=new Map(r);return o.set(e,a),o})}),gt=g(e=>{mt(G,e)}),_t=g(async e=>{if(!K||!q)throw Error(`assistant_unavailable`);N(K,q).some(t=>t?.id===e)&&(await C(K,e,{directory:q,draftKey:J,restorePrimaryInput:!1}),await st(G))}),vt=g(async(e,t)=>{if(!W||W.mode!==`continuous`)return;if(!K||!q)throw Error(`assistant_unavailable`);if(!N(K,q).some(t=>t?.id===e))return;if(t.info.id!==e||t.info.sessionID!==K||t.info.role!==`user`)throw Error(`The selected user message is unavailable`);let n={assistantID:W.id,sessionID:K,directory:q,sessionGeneration:W.sessionGeneration,messageID:e,transport:p,runtimeGeneration:m},i=Be(n),o=await et.current.stageExclusive(i,async()=>{let i=await O(K,e,t,{directory:q,draftKey:J}),o=r()===n.transport&&a()===n.runtimeGeneration,s=o?z(void 0,n.transport)?.assistants.find(e=>e.id===n.assistantID):void 0,c=!!(s&&s.mode===`continuous`&&s.sessionID===n.sessionID&&s.sessionGeneration===n.sessionGeneration&&(s.effectiveWorkspacePath??``)===n.directory);if(o&&c)return{identity:n,rollback:()=>i.rollback()};let l=await i.rollback();return l.status===`failed`||l.status===`skipped`?{identity:n,rollback:()=>i.rollback(),protectOnStale:!0}:null});if(o.kind===`blocked`)throw Error(`assistant_stage_message_edit_prior_blocked`);if(o.kind===`stale_protected`)throw Error(`assistant_stage_message_edit_rollback_failed`)}),yt=Y.useMemo(()=>{let e=S(J,()=>b.getState());return{busy:!1,attachments:Te,addAttachment:t=>e.addLocal(t),removeAttachment:t=>e.removeByAttachmentID(t),clearAttachments:()=>e.clearRootAttachments(),restoreAttachments:t=>e.restoreRootAttachments(t),pendingInput:null,consumePendingInput:()=>null,pendingPreset:null,consumePendingPreset:()=>null,consumeSyntheticParts:()=>{let e=b.getState(),t=e.draftAttachmentViews[u(J)]??Je,n=e.consumeDraftSyntheticParts(J,y);return n?Ge(n,t):null},restoreSyntheticParts:e=>{(async()=>{let t=b.getState(),n=e.map(e=>({partID:e.partID??c(),text:e.text,attachments:[],...e.synthetic===!0?{synthetic:!0}:{}})),r=Ke(t.getDraft(J)?.syntheticParts??[],n);t.setDraftSyntheticParts(J,r);for(let r=0;r<n.length;r++){let i=n[r].partID;for(let n of e[r]?.attachments??[])n.source===`server`&&n.dataUrl?t.addDraftDurableAttachment(J,{attachmentID:n.id,filename:n.filename,mimeType:n.mimeType,size:n.size,source:`server`,url:n.dataUrl,serverPath:n.serverPath,partID:i}):await t.addDraftLocalAttachment(J,n.file,{attachmentID:n.id,filename:n.filename,source:n.source===`vscode`?`vscode`:`local`,vscodePath:n.vscodePath,vscodeSource:n.vscodeSource===`selection`?`selection`:void 0,partID:i})}})()},inlineDrafts:[],removeInlineDraft:()=>{},restoreInlineDrafts:()=>{},history:Ie,captureRuntime:()=>b.getState().captureDraftRuntime(),getDraft:e=>b.getState().getDraft(e),abortPrompt:{sessionID:null,clear:()=>{}}}},[Te,J,Ie]),bt=Y.useMemo(()=>{let e=(X.data??[]).find(e=>e.id===W?.providerID)?.models?.find(e=>e.id===W?.modelID);return ve(e)},[W?.modelID,W?.providerID,X.data]),xt=Me.length>0,St=Y.useMemo(()=>{if(!W||!K||!q)return null;let e={sessionID:K,directory:q,sessionGeneration:W.sessionGeneration};return{kind:`secondary`,surfaceID:`assistant:${W.id}`,active:T,sessionID:K,directory:q,draftKey:J,transportIdentity:p,runtimeGeneration:m,deliveryTarget:{kind:`assistant`,assistantID:W.id},resources:yt,...W.mode===`stateless`?{queueSessionID:`assistant:${W.id}`}:{},selection:{value:{providerID:W.providerID,modelID:W.modelID,agent:W.agent??void 0,variant:W.variant??void 0},catalog:{providers:X.data??[],agents:ut,variants:bt,variantsReady:X.isSuccess,ready:X.isSuccess&&Q.isSuccess,loading:X.isPending||Q.isPending,error:X.isError||Q.isError},change:lt,flush:()=>$.flush(at)},activity:{phase:Pe?.type===`busy`?`busy`:Pe?.type===`retry`?`retry`:`idle`,canAbort:Pe?.type===`busy`||Pe?.type===`retry`},commands:{sessionID:K,hasMessages:xt,hasNewDraft:!1},commandPolicy:e=>e.name!==`fork`&&e.name!==`thread`,backend:{send:async t=>{let n;for(let t of N(e.sessionID,e.directory)){let e=typeof t?.id==`string`?t.id:``;/^msg_[0-9a-f]{12}[0-9A-Za-z]{14}$/.test(e)&&(!n||e>n)&&(n=e)}let r=l(`msg`,n);t.options?.commitStagedMessageEdit&&et.current.clear({transport:p,assistantID:W.id});let i=j({messageID:r,sessionID:e.sessionID,providerID:t.providerID??W.providerID,modelID:t.modelID??W.modelID,agent:t.agent??W.agent??void 0,text:t.text,attachments:t.attachments,additionalParts:t.parts});He(e=>{let t=new Map(e);return t.set(W.id,[...e.get(W.id)??[],i]),t});let a;try{a=await B(W.id,e,r,Ze(t.text,t.parts,t.attachments))}catch(e){throw mt(W.id,[r]),e}if(L.data?.serverInstanceID){let e=_(W.name);v({serverInstanceID:L.data.serverInstanceID,assistantID:W.id,name:e.displayName||W.name,avatarSeed:W.id,...e.avatarEmoji?{avatarEmoji:e.avatarEmoji}:{}}).catch(()=>void 0)}a.binding.sessionID&&ht(W.id,r,a.binding.sessionID);let o=qe.current;Re({binding:a.binding,refresh:t=>ft(t,{force:t.sessionID!==e.sessionID||t.sessionGeneration!==e.sessionGeneration}),isCurrent:()=>qe.current===o})},sendQueued:async()=>{throw Error(`assistant-server-queue-required`)},create:async()=>{let e=await R(W.id);await st(W.id),await ft(e,{force:!0})},compact:async()=>{let t=await oe(W.id,e);await st(W.id),await ft(t.binding,{force:!0})},abort:async()=>{await ie(W.id,e)}},shortcuts:{cycle:dt,new:async()=>{let e=await R(W.id);await st(W.id),await ft(e,{force:!0})},abort:async()=>{await ie(W.id,e)},submit:()=>{}}}},[T,W,L.data?.serverInstanceID,lt,st,dt,q,J,xt,X.data,X.isError,X.isPending,X.isSuccess,Q.isError,Q.isPending,Q.isSuccess,ft,ht,mt,yt,m,$,at,K,Pe,p,bt,ut]),Ct=g(()=>{if(me(),f){f.openSettings();return}let e=i.getState();e.setSettingsPage(`assistants`),e.setSettingsDialogOpen(!0)}),wt=g(e=>{le(e,f?{openMobileSettings:f.openSettings}:void 0)}),[Tt,Et]=Y.useState(null),Dt=g(e=>{Et(e)}),Ot=g(e=>{e||Et(null)}),kt=g(()=>{i.getState().setActiveMainTab(`chat`)}),At=g(()=>{if(t){t();return}kt()}),jt=(e,t,n,r)=>(0,Z.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[I?(0,Z.jsx)(Qe,{assistant:W,onBack:At}):null,(0,Z.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col items-center justify-center px-6 text-center`,children:[(0,Z.jsx)(fe,{name:e,className:`size-6 text-muted-foreground`}),(0,Z.jsx)(`h1`,{className:`mt-4 typography-ui-header font-semibold`,children:t}),n?(0,Z.jsx)(`p`,{className:`mt-2 max-w-md typography-ui text-muted-foreground`,children:n}):null,r?(0,Z.jsx)(`div`,{className:`mt-5`,children:r}):null]})]});if(L.isPending||V.isPending)return jt(`ai-agent`,o(`assistants.state.unavailable`));if(L.isError||!L.data?.supported||!L.data.enabled||!H?.enabled)return jt(`cloud-off`,o(`assistants.state.unavailable`));if(!H.assistants.length)return jt(`ai-agent`,o(`assistants.onboarding.title`),o(`assistants.onboarding.description`),(0,Z.jsx)(he,{onClick:Ct,children:o(`assistants.onboarding.action`)}));if(!W)return jt(`ai-agent`,o(`assistants.state.unavailable`));if(!St)return(0,Z.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col bg-background`,children:[I?(0,Z.jsx)(Qe,{assistant:W,onBack:At}):null,(0,Z.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col items-center justify-center gap-3 px-6`,"aria-busy":`true`,"aria-label":o(`assistants.state.unavailable`),children:[(0,Z.jsx)(`div`,{className:`size-10 animate-pulse rounded-xl bg-[var(--surface-muted)] motion-reduce:animate-none`}),(0,Z.jsx)(`div`,{className:`h-3.5 w-36 animate-pulse rounded-md bg-[var(--surface-muted)] motion-reduce:animate-none`})]})]});let Mt=_(W.name),Nt=W.enabled?V.isError?o(`assistants.state.staleSnapshot`):null:o(`assistants.state.assistantDisabled`);return(0,Z.jsxs)(`div`,{className:`relative flex h-full min-h-0 overflow-hidden bg-background`,"data-presentation":`workspace`,children:[I?null:(0,Z.jsxs)(`section`,{className:`flex h-full min-h-0 w-[clamp(16rem,22vw,20rem)] shrink-0 flex-col overflow-hidden`,children:[(0,Z.jsx)(`header`,{className:`shrink-0 px-4 pb-3 pt-4 sm:px-5`,children:(0,Z.jsx)(`h1`,{className:`truncate typography-ui-label font-semibold text-foreground`,children:o(`assistants.title`)})}),(0,Z.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto px-3 pb-4 sm:px-4`,role:`listbox`,"aria-label":o(`assistants.listAria`),children:(0,Z.jsx)(`div`,{className:`flex flex-col gap-1 border-t border-border/40 pt-3`,children:H.assistants.map(e=>{let t=e.id===U,n=_(e.name);return(0,Z.jsx)($e,{assistantID:e.id,displayName:n.displayName,avatarEmoji:n.avatarEmoji??void 0,modeLabel:e.mode===`stateless`?o(`assistants.mode.stateless`):o(`assistants.mode.continuous`),selected:t,enabled:e.enabled,editLabel:o(`assistants.menu.edit`),deleteLabel:o(`assistants.settings.delete`),onSelect:()=>pe(e.id),onEdit:()=>wt(e.id),onDelete:()=>Dt(e)},e.id)})})})]}),(0,Z.jsx)(Fe,{assistant:Tt,open:Tt!==null,onOpenChange:Ot}),(0,Z.jsxs)(`div`,{className:de(`flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden bg-background`,!I&&`border-l border-border/60`),children:[I?(0,Z.jsx)(Qe,{assistant:W,onBack:At}):(0,Z.jsxs)(`header`,{className:`flex h-14 shrink-0 items-center gap-3 border-b border-border/40 px-4 sm:px-5`,children:[(0,Z.jsx)(ue,{name:W.id,emoji:Mt.avatarEmoji,size:24,label:Mt.displayName||W.name}),(0,Z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Z.jsx)(`div`,{className:`truncate typography-ui-label font-medium`,children:Mt.displayName}),(0,Z.jsx)(`div`,{className:`mt-0.5 truncate typography-micro leading-none text-muted-foreground/70`,children:W.mode===`stateless`?o(`assistants.conversation.statelessHint`):o(`assistants.conversation.continuousHint`)})]})]}),(0,Z.jsx)(ke,{onRevertMessage:_t,onEditMessage:W.mode===`continuous`?vt:void 0,assistant:W,sessionID:K,warning:Nt,surface:St,pendingUserMessages:tt,onPendingUserMessagesMaterialized:gt})]}),I?null:(0,Z.jsx)(Se,{directory:q||null})]})};export{qe as n,Fe as r,et as t};
|