@openchambery/web 2.0.0-beta.4 → 2.0.0-beta.5
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-Q1SmFRx2.js → AgentAvatar-BBmQXYDq.js} +1 -1
- package/dist/assets/{AssistantView-CwXkiCAd.js → AssistantView-BG8hK4y9.js} +3 -3
- package/dist/assets/{DiagramView-BW92schO.js → DiagramView-CN0qWNU5.js} +1 -1
- package/dist/assets/{FadeInOnReveal-BZmwl-zE.js → FadeInOnReveal-w_BQ7K7K.js} +1 -1
- package/dist/assets/Icon-B9kZgYZn.js +1 -0
- package/dist/assets/{MarkdownRenderer-Bv05iDZZ.js → MarkdownRenderer-Ds61--LT.js} +2 -2
- package/dist/assets/{MarkdownRendererImpl-C81xqYib.js → MarkdownRendererImpl-DOMmiOH0.js} +1 -1
- package/dist/assets/{MarkstreamRendererImpl-CXUCQuKJ.js → MarkstreamRendererImpl-F7MGg5ER.js} +1 -1
- package/dist/assets/{MobileDetailNavigation-BMgIu7zc.js → MobileDetailNavigation-DcmVOjkw.js} +1 -1
- package/dist/assets/{MobileShareBridge-BOXGNHmC.js → MobileShareBridge-C1Fc4ErB.js} +2 -2
- package/dist/assets/MobileSurface-BA7eS5Yd.js +2 -0
- package/dist/assets/{MultiRunWindow-B5At2Z95.js → MultiRunWindow-BoTnH6Yp.js} +1 -1
- package/dist/assets/{OnboardingScreen-bsPLgz4r.js → OnboardingScreen-BxItVnnO.js} +1 -1
- package/dist/assets/{OverlayScrollbar-4wp4migh.js → OverlayScrollbar-B4e0QD05.js} +1 -1
- package/dist/assets/SettingsView-CjesWNLw.js +25 -0
- package/dist/assets/{SettingsWindow-CMtX2bMl.js → SettingsWindow-CReMbg-w.js} +1 -1
- package/dist/assets/TerminalView-C64-QYOG.js +8 -0
- package/dist/assets/{ToolOutputDialog-uH1ZZDSS.js → ToolOutputDialog-CJu8DNrt.js} +1 -1
- package/dist/assets/{appThemeRegistry-DK7q2juD.js → appThemeRegistry-CF4lIxNt.js} +1 -1
- package/dist/assets/{button-CcNJUxUd.js → button-CwXyux0a.js} +1 -1
- package/dist/assets/collapsible-BZ6_cYJd.js +1 -0
- package/dist/assets/context-menu-DHrRifPE.js +1 -0
- package/dist/assets/{desktopHosts-C6HrP0jq.js → desktopHosts-JGFqhlaM.js} +1 -1
- package/dist/assets/{desktopRelayRestore-DdVBp45U.js → desktopRelayRestore-CHEwrI93.js} +1 -1
- package/dist/assets/{diagram-CxTs9hCQ.js → diagram-BwnPNKWt.js} +1 -1
- package/dist/assets/{dialog-KMVL9QKF.js → dialog-Dp0lQv5K.js} +1 -1
- package/dist/assets/es-DicJ8lKD.js +15 -0
- package/dist/assets/{fileMentionTouchSelection-7RIwlpkB.js → fileMentionTouchSelection-DPZRxNa2.js} +3 -4
- package/dist/assets/{fileQueries-CjdBRy8y.js → fileQueries-DN6gbLhM.js} +1 -1
- package/dist/assets/fr-lhgVcBW_.js +13 -0
- package/dist/assets/{gitApi-yuWg9BN4.js → gitApi-D8R7ic-T.js} +1 -1
- package/dist/assets/{imageSource-9vQBq3zp.js → imageSource-BMztRu0c.js} +1 -1
- package/dist/assets/{input-CrIvk3HZ.js → input-Biw8aNzR.js} +1 -1
- package/dist/assets/insertionBoundaries-DdwCD4S2.js +1 -0
- package/dist/assets/ja-B9EZwOcw.js +15 -0
- package/dist/assets/ko-Dxk-uJRb.js +15 -0
- package/dist/assets/main-BhlwwJ2c.js +169 -0
- package/dist/assets/main-D2BzpnUt.css +1 -0
- package/dist/assets/main-DSPCkT74.js +2 -0
- package/dist/assets/{markdownHeightCache-BmXVY_gc.js → markdownHeightCache-BOOrGCuG.js} +1 -1
- package/dist/assets/markdownTheme-DM5h1i18.js +1 -0
- package/dist/assets/{mcpQueries-C7jknHV8.js → mcpQueries-CE9tk-Jz.js} +1 -1
- package/dist/assets/miniChat-Ckk9ABql.js +2 -0
- package/dist/assets/mobile-cLMRZqI9.js +2 -0
- package/dist/assets/multirun-DVnFRb1V.js +4 -0
- package/dist/assets/persistence-D0y7226-.js +3 -0
- package/dist/assets/pl-CFhwWLJj.js +15 -0
- package/dist/assets/platform-D_c-T5nO.js +6 -0
- package/dist/assets/projectMeta-CSQgHequ.js +3 -0
- package/dist/assets/pt-BR-Ba6GfZ6J.js +15 -0
- package/dist/assets/renderElectronMiniChatApp-gGFkwoL_.js +2 -0
- package/dist/assets/{renderMobileApp-CGMMqbsO.js → renderMobileApp-B2w50kAc.js} +7 -7
- package/dist/assets/{runtimeConfig-BEANkvOd.js → runtimeConfig-BHH1hJDd.js} +1 -1
- package/dist/assets/runtimeEndpointReset-5uJ4sJk0.js +149 -0
- package/dist/assets/{sessionChangeSummary-qOLrP9fw.js → sessionChangeSummary-spf_atO8.js} +2 -2
- package/dist/assets/{sessionLookup-34XFmP9C.js → sessionLookup-BGjjwiCq.js} +1 -1
- package/dist/assets/{sortable-tabs-strip-DyEV0Heg.js → sortable-tabs-strip-CTY_wG46.js} +1 -1
- package/dist/assets/src-BjEyU6if.css +2 -0
- package/dist/assets/store-DmowK-GO.js +15 -0
- package/dist/assets/{terminalApi-CXaBEoa_.js → terminalApi-Dhqqp4xi.js} +1 -1
- package/dist/assets/{textarea-BBOlRI9O.js → textarea-QxsmcBGj.js} +1 -1
- package/dist/assets/{tooltip-CPI4fr1a.js → tooltip-CpMLl5_k.js} +1 -1
- package/dist/assets/uk-ChchBzy6.js +15 -0
- package/dist/assets/{url-DRDQXjyX.js → url-CGbJbiJq.js} +1 -1
- package/dist/assets/{useAppFontEffects-CiDe42I5.js → useAppFontEffects-B1h7ab_J.js} +56 -51
- package/dist/assets/{useAssistantUIStore-asNG6K7n.js → useAssistantUIStore-Bz4tRflF.js} +1 -1
- package/dist/assets/useDesktopWindowControlsLayout-Cxsx84NO.js +1 -0
- package/dist/assets/{useEffectiveDirectory-C_CouL5v.js → useEffectiveDirectory-DsqhqsJR.js} +1 -1
- package/dist/assets/{useFontPreferences-B0oUZAiB.js → useFontPreferences-Xw1vSkmC.js} +1 -1
- package/dist/assets/useMobileNavigationStore-B1axS4g-.js +414 -0
- package/dist/assets/{useRuntimeAPIs-DwLtO0c_.js → useRuntimeAPIs-DSLXJybW.js} +1 -1
- package/dist/assets/useSessionAutoCleanup-B5FTG_qf.js +2 -0
- package/dist/assets/{useThemeSystem-BlNUWH47.js → useThemeSystem-DMzWVJaW.js} +1 -1
- package/dist/assets/useUIStore-syVmbuDA.js +1 -0
- package/dist/assets/{useWorkerHighlightedLines-CPNYz6Wf.js → useWorkerHighlightedLines-DC_Bc-RV.js} +1 -1
- package/dist/assets/{vendor-base-ui-CDjyofeD.js → vendor-base-ui-CnHfUmDN.js} +1 -1
- package/dist/assets/{vendor-cmdk-BFH0UpXX.js → vendor-cmdk-CeAGfrLo.js} +1 -1
- package/dist/assets/{vendor-dnd-kit-accessibility-BrR3AKvM.js → vendor-dnd-kit-accessibility-BY5LhhUB.js} +1 -1
- package/dist/assets/{vendor-dnd-kit-core-CNfdvk6H.js → vendor-dnd-kit-core-CvWxUPdb.js} +1 -1
- package/dist/assets/{vendor-dnd-kit-sortable-DQUaTeGj.js → vendor-dnd-kit-sortable-hHdP9lLb.js} +1 -1
- package/dist/assets/{vendor-framer-motion-4dogsUk3.js → vendor-framer-motion-DFy_BSVd.js} +1 -1
- package/dist/assets/{vendor-legendapp-list-BU7MdPZR.js → vendor-legendapp-list-WE32lwNk.js} +1 -1
- package/dist/assets/{vendor-markstream-react-qHC2FykU.js → vendor-markstream-react-DX55XLGO.js} +3 -3
- package/dist/assets/vendor-opencode-client-C12gfjag.js +12 -0
- package/dist/assets/{vendor-pierre-diffs-CUfqC003.js → vendor-pierre-diffs-DX7XTPG3.js} +1 -1
- package/dist/assets/{vendor-react-C94A0AHl.js → vendor-react-DLPElpoQ.js} +1 -1
- package/dist/assets/{vendor-react-drawio-FVlWqKVE.js → vendor-react-drawio-ECtEwvbc.js} +1 -1
- package/dist/assets/{vendor-reactuses-core-C2A3EjUi.js → vendor-reactuses-core-B8parU1Y.js} +1 -1
- package/dist/assets/{vendor-sonner-DNqHmUQs.js → vendor-sonner-DVzioF3d.js} +1 -1
- package/dist/assets/{vendor-stream-diffs-CwbKsmlv.js → vendor-stream-diffs-DWy3xSmp.js} +2 -2
- package/dist/assets/{vendor-tanstack-react-query-D0iFK57C.js → vendor-tanstack-react-query-D7pys_c9.js} +1 -1
- package/dist/assets/{vendor-tanstack-react-virtual-B2kV6cnT.js → vendor-tanstack-react-virtual-tlDgH6PG.js} +1 -1
- package/dist/assets/{vendor-zustand-BqLKf6ZY.js → vendor-zustand-B4dlGEM2.js} +1 -1
- package/dist/assets/zh-CN-Z_bkUQk5.js +15 -0
- package/dist/assets/zh-TW-CZeTm7kd.js +15 -0
- package/dist/index.html +13 -13
- package/dist/mini-chat.html +13 -13
- package/dist/mobile.html +13 -13
- package/package.json +3 -2
- package/server/index.js +38 -7
- package/server/lib/browser-provider/DOCUMENTATION.md +141 -0
- package/server/lib/browser-provider/contract.js +312 -0
- package/server/lib/browser-provider/host.js +421 -0
- package/server/lib/browser-provider/host.test.js +304 -0
- package/server/lib/browser-provider/routes.js +122 -0
- package/server/lib/browser-provider/routes.test.js +120 -0
- package/server/lib/browser-provider/selection-store.js +43 -0
- package/server/lib/browser-provider/selection-store.test.js +35 -0
- package/server/lib/notifications/DOCUMENTATION.md +3 -1
- package/server/lib/notifications/runtime.js +110 -26
- package/server/lib/notifications/runtime.test.js +92 -0
- package/server/lib/notifications/template-runtime.js +130 -38
- package/server/lib/notifications/template-runtime.test.js +96 -0
- package/server/lib/opencode/DOCUMENTATION.md +4 -0
- package/server/lib/opencode/ensure-cli.d.ts +8 -0
- package/server/lib/opencode/feature-routes-runtime.js +10 -0
- package/server/lib/opencode/feature-routes-runtime.test.js +7 -0
- package/server/lib/opencode/proxy.js +3 -1
- package/server/lib/opencode/proxy.test.js +3 -3
- package/server/lib/opencode/routes.js +30 -0
- package/server/lib/opencode/upgrade-screen.d.ts +30 -0
- package/server/lib/opencode/upgrade-screen.js +299 -0
- package/server/lib/opencode/upgrade-screen.test.js +196 -0
- package/server/lib/session-metadata/DOCUMENTATION.md +27 -17
- package/server/lib/session-metadata/opencode-session-record.d.ts +57 -0
- package/server/lib/session-metadata/opencode-session-record.js +316 -0
- package/server/lib/session-metadata/opencode-session-record.test.js +242 -0
- package/server/lib/session-metadata/routes.js +5 -1
- package/server/lib/session-metadata/session-archive.js +1 -1
- package/server/lib/session-metadata/session-metadata-store.d.ts +2 -0
- package/server/lib/session-metadata/session-metadata-store.js +63 -16
- package/server/lib/session-metadata/session-projection.js +26 -2
- package/dist/assets/Icon-AQPvxMiU.js +0 -1
- package/dist/assets/MobileSurface-xuc_z0_G.js +0 -2
- package/dist/assets/SettingsView-CJ6tcH5_.js +0 -25
- package/dist/assets/TerminalView-Dvr-ysTS.js +0 -8
- package/dist/assets/collapsible-ZmZ6rLWs.js +0 -3
- package/dist/assets/context-menu-B2LXJgXL.js +0 -1
- package/dist/assets/es-CN3E_zXj.js +0 -15
- package/dist/assets/fr-9zZvQZD2.js +0 -13
- package/dist/assets/insertionBoundaries-BiUCSkx-.js +0 -1
- package/dist/assets/ja-Dnjk_82N.js +0 -15
- package/dist/assets/ko-BxCEE99C.js +0 -15
- package/dist/assets/main-C9mIBo77.js +0 -2
- package/dist/assets/main-DiL6w6KF.js +0 -169
- package/dist/assets/main-qSeeJRW1.css +0 -1
- package/dist/assets/markdownTheme-CKac3wKC.js +0 -1
- package/dist/assets/miniChat-CwtUaElU.js +0 -2
- package/dist/assets/mobile-DB-6--ws.js +0 -2
- package/dist/assets/multirun-TAsxFI8e.js +0 -4
- package/dist/assets/persistence-56kq8Z4V.js +0 -3
- package/dist/assets/pl-CNNsWnPM.js +0 -15
- package/dist/assets/platform-C13fMVEs.js +0 -6
- package/dist/assets/pt-BR-BZB2DJMp.js +0 -15
- package/dist/assets/renderElectronMiniChatApp-CGj0MNRU.js +0 -2
- package/dist/assets/runtimeEndpointReset-A_ZBUJFS.js +0 -147
- package/dist/assets/src-ubCWXZhR.css +0 -2
- package/dist/assets/store-DLCiZaA6.js +0 -15
- package/dist/assets/uk-rwQrxeYM.js +0 -15
- package/dist/assets/useDesktopWindowControlsLayout-BlizAlOt.js +0 -1
- package/dist/assets/useMobileNavigationStore-DfPClaW-.js +0 -414
- package/dist/assets/useSessionAutoCleanup-DtrfbxAp.js +0 -2
- package/dist/assets/useUIStore-CQYKJnrg.js +0 -1
- package/dist/assets/vendor-opencode-client-BOe2qpQb.js +0 -12
- package/dist/assets/zh-CN-BvmBDnkD.js +0 -15
- package/dist/assets/zh-TW-9wcHTX0y.js +0 -15
package/dist/index.html
CHANGED
|
@@ -552,28 +552,28 @@
|
|
|
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-DSPCkT74.js"></script>
|
|
556
556
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-C0FnF6B9.js">
|
|
557
557
|
<link rel="modulepreload" crossorigin href="/assets/runtime-auth-D66yq6ie.js">
|
|
558
558
|
<link rel="modulepreload" crossorigin href="/assets/runtime-switch-LvWDU-SL.js">
|
|
559
559
|
<link rel="modulepreload" crossorigin href="/assets/runtime-fetch-Fs9ZV2V8.js">
|
|
560
|
-
<link rel="modulepreload" crossorigin href="/assets/vendor-base-ui-
|
|
561
|
-
<link rel="modulepreload" crossorigin href="/assets/vendor-zustand-
|
|
562
|
-
<link rel="modulepreload" crossorigin href="/assets/useUIStore-
|
|
563
|
-
<link rel="modulepreload" crossorigin href="/assets/vendor-react-
|
|
560
|
+
<link rel="modulepreload" crossorigin href="/assets/vendor-base-ui-CnHfUmDN.js">
|
|
561
|
+
<link rel="modulepreload" crossorigin href="/assets/vendor-zustand-B4dlGEM2.js">
|
|
562
|
+
<link rel="modulepreload" crossorigin href="/assets/useUIStore-syVmbuDA.js">
|
|
563
|
+
<link rel="modulepreload" crossorigin href="/assets/vendor-react-DLPElpoQ.js">
|
|
564
564
|
<link rel="modulepreload" crossorigin href="/assets/vendor-pathe-vBmvQE8f.js">
|
|
565
565
|
<link rel="modulepreload" crossorigin href="/assets/vendor-tanstack-query-core-BWz0ose6.js">
|
|
566
|
-
<link rel="modulepreload" crossorigin href="/assets/persistence-
|
|
567
|
-
<link rel="modulepreload" crossorigin href="/assets/desktopHosts-
|
|
568
|
-
<link rel="modulepreload" crossorigin href="/assets/desktopRelayRestore-
|
|
569
|
-
<link rel="modulepreload" crossorigin href="/assets/vendor-opencode-client-
|
|
566
|
+
<link rel="modulepreload" crossorigin href="/assets/persistence-D0y7226-.js">
|
|
567
|
+
<link rel="modulepreload" crossorigin href="/assets/desktopHosts-JGFqhlaM.js">
|
|
568
|
+
<link rel="modulepreload" crossorigin href="/assets/desktopRelayRestore-CHEwrI93.js">
|
|
569
|
+
<link rel="modulepreload" crossorigin href="/assets/vendor-opencode-client-C12gfjag.js">
|
|
570
570
|
<link rel="modulepreload" crossorigin href="/assets/vendor-aparajita-capacitor-secure-storage-CjQdwfjS.js">
|
|
571
|
-
<link rel="modulepreload" crossorigin href="/assets/platform-
|
|
572
|
-
<link rel="modulepreload" crossorigin href="/assets/terminalApi-
|
|
571
|
+
<link rel="modulepreload" crossorigin href="/assets/platform-D_c-T5nO.js">
|
|
572
|
+
<link rel="modulepreload" crossorigin href="/assets/terminalApi-Dhqqp4xi.js">
|
|
573
573
|
<link rel="modulepreload" crossorigin href="/assets/types-BuiqMmh_.js">
|
|
574
574
|
<link rel="modulepreload" crossorigin href="/assets/capgoAdapter-DCowZ2ab.js">
|
|
575
|
-
<link rel="modulepreload" crossorigin href="/assets/runtimeConfig-
|
|
576
|
-
<link rel="stylesheet" crossorigin href="/assets/src-
|
|
575
|
+
<link rel="modulepreload" crossorigin href="/assets/runtimeConfig-BHH1hJDd.js">
|
|
576
|
+
<link rel="stylesheet" crossorigin href="/assets/src-BjEyU6if.css">
|
|
577
577
|
</head>
|
|
578
578
|
<body class="h-full bg-background text-foreground">
|
|
579
579
|
<!-- Keep the startup layer outside #root. React replaces every child of
|
package/dist/mini-chat.html
CHANGED
|
@@ -74,28 +74,28 @@
|
|
|
74
74
|
}
|
|
75
75
|
</style>
|
|
76
76
|
|
|
77
|
-
<script type="module" crossorigin src="/assets/miniChat-
|
|
77
|
+
<script type="module" crossorigin src="/assets/miniChat-Ckk9ABql.js"></script>
|
|
78
78
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-C0FnF6B9.js">
|
|
79
79
|
<link rel="modulepreload" crossorigin href="/assets/runtime-auth-D66yq6ie.js">
|
|
80
80
|
<link rel="modulepreload" crossorigin href="/assets/runtime-switch-LvWDU-SL.js">
|
|
81
81
|
<link rel="modulepreload" crossorigin href="/assets/runtime-fetch-Fs9ZV2V8.js">
|
|
82
|
-
<link rel="modulepreload" crossorigin href="/assets/vendor-base-ui-
|
|
83
|
-
<link rel="modulepreload" crossorigin href="/assets/vendor-zustand-
|
|
84
|
-
<link rel="modulepreload" crossorigin href="/assets/useUIStore-
|
|
85
|
-
<link rel="modulepreload" crossorigin href="/assets/vendor-react-
|
|
82
|
+
<link rel="modulepreload" crossorigin href="/assets/vendor-base-ui-CnHfUmDN.js">
|
|
83
|
+
<link rel="modulepreload" crossorigin href="/assets/vendor-zustand-B4dlGEM2.js">
|
|
84
|
+
<link rel="modulepreload" crossorigin href="/assets/useUIStore-syVmbuDA.js">
|
|
85
|
+
<link rel="modulepreload" crossorigin href="/assets/vendor-react-DLPElpoQ.js">
|
|
86
86
|
<link rel="modulepreload" crossorigin href="/assets/vendor-pathe-vBmvQE8f.js">
|
|
87
87
|
<link rel="modulepreload" crossorigin href="/assets/vendor-tanstack-query-core-BWz0ose6.js">
|
|
88
|
-
<link rel="modulepreload" crossorigin href="/assets/persistence-
|
|
89
|
-
<link rel="modulepreload" crossorigin href="/assets/desktopHosts-
|
|
90
|
-
<link rel="modulepreload" crossorigin href="/assets/desktopRelayRestore-
|
|
91
|
-
<link rel="modulepreload" crossorigin href="/assets/vendor-opencode-client-
|
|
88
|
+
<link rel="modulepreload" crossorigin href="/assets/persistence-D0y7226-.js">
|
|
89
|
+
<link rel="modulepreload" crossorigin href="/assets/desktopHosts-JGFqhlaM.js">
|
|
90
|
+
<link rel="modulepreload" crossorigin href="/assets/desktopRelayRestore-CHEwrI93.js">
|
|
91
|
+
<link rel="modulepreload" crossorigin href="/assets/vendor-opencode-client-C12gfjag.js">
|
|
92
92
|
<link rel="modulepreload" crossorigin href="/assets/vendor-aparajita-capacitor-secure-storage-CjQdwfjS.js">
|
|
93
|
-
<link rel="modulepreload" crossorigin href="/assets/platform-
|
|
94
|
-
<link rel="modulepreload" crossorigin href="/assets/terminalApi-
|
|
93
|
+
<link rel="modulepreload" crossorigin href="/assets/platform-D_c-T5nO.js">
|
|
94
|
+
<link rel="modulepreload" crossorigin href="/assets/terminalApi-Dhqqp4xi.js">
|
|
95
95
|
<link rel="modulepreload" crossorigin href="/assets/types-BuiqMmh_.js">
|
|
96
96
|
<link rel="modulepreload" crossorigin href="/assets/capgoAdapter-DCowZ2ab.js">
|
|
97
|
-
<link rel="modulepreload" crossorigin href="/assets/runtimeConfig-
|
|
98
|
-
<link rel="stylesheet" crossorigin href="/assets/src-
|
|
97
|
+
<link rel="modulepreload" crossorigin href="/assets/runtimeConfig-BHH1hJDd.js">
|
|
98
|
+
<link rel="stylesheet" crossorigin href="/assets/src-BjEyU6if.css">
|
|
99
99
|
</head>
|
|
100
100
|
<body class="h-full bg-background text-foreground">
|
|
101
101
|
<div id="root" class="h-full">
|
package/dist/mobile.html
CHANGED
|
@@ -63,28 +63,28 @@
|
|
|
63
63
|
})();
|
|
64
64
|
</script>
|
|
65
65
|
|
|
66
|
-
<script type="module" crossorigin src="/assets/mobile-
|
|
66
|
+
<script type="module" crossorigin src="/assets/mobile-cLMRZqI9.js"></script>
|
|
67
67
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-C0FnF6B9.js">
|
|
68
68
|
<link rel="modulepreload" crossorigin href="/assets/runtime-auth-D66yq6ie.js">
|
|
69
69
|
<link rel="modulepreload" crossorigin href="/assets/runtime-switch-LvWDU-SL.js">
|
|
70
70
|
<link rel="modulepreload" crossorigin href="/assets/runtime-fetch-Fs9ZV2V8.js">
|
|
71
|
-
<link rel="modulepreload" crossorigin href="/assets/vendor-base-ui-
|
|
72
|
-
<link rel="modulepreload" crossorigin href="/assets/vendor-zustand-
|
|
73
|
-
<link rel="modulepreload" crossorigin href="/assets/useUIStore-
|
|
74
|
-
<link rel="modulepreload" crossorigin href="/assets/vendor-react-
|
|
71
|
+
<link rel="modulepreload" crossorigin href="/assets/vendor-base-ui-CnHfUmDN.js">
|
|
72
|
+
<link rel="modulepreload" crossorigin href="/assets/vendor-zustand-B4dlGEM2.js">
|
|
73
|
+
<link rel="modulepreload" crossorigin href="/assets/useUIStore-syVmbuDA.js">
|
|
74
|
+
<link rel="modulepreload" crossorigin href="/assets/vendor-react-DLPElpoQ.js">
|
|
75
75
|
<link rel="modulepreload" crossorigin href="/assets/vendor-pathe-vBmvQE8f.js">
|
|
76
76
|
<link rel="modulepreload" crossorigin href="/assets/vendor-tanstack-query-core-BWz0ose6.js">
|
|
77
|
-
<link rel="modulepreload" crossorigin href="/assets/persistence-
|
|
78
|
-
<link rel="modulepreload" crossorigin href="/assets/desktopHosts-
|
|
79
|
-
<link rel="modulepreload" crossorigin href="/assets/desktopRelayRestore-
|
|
80
|
-
<link rel="modulepreload" crossorigin href="/assets/vendor-opencode-client-
|
|
77
|
+
<link rel="modulepreload" crossorigin href="/assets/persistence-D0y7226-.js">
|
|
78
|
+
<link rel="modulepreload" crossorigin href="/assets/desktopHosts-JGFqhlaM.js">
|
|
79
|
+
<link rel="modulepreload" crossorigin href="/assets/desktopRelayRestore-CHEwrI93.js">
|
|
80
|
+
<link rel="modulepreload" crossorigin href="/assets/vendor-opencode-client-C12gfjag.js">
|
|
81
81
|
<link rel="modulepreload" crossorigin href="/assets/vendor-aparajita-capacitor-secure-storage-CjQdwfjS.js">
|
|
82
|
-
<link rel="modulepreload" crossorigin href="/assets/platform-
|
|
83
|
-
<link rel="modulepreload" crossorigin href="/assets/terminalApi-
|
|
82
|
+
<link rel="modulepreload" crossorigin href="/assets/platform-D_c-T5nO.js">
|
|
83
|
+
<link rel="modulepreload" crossorigin href="/assets/terminalApi-Dhqqp4xi.js">
|
|
84
84
|
<link rel="modulepreload" crossorigin href="/assets/types-BuiqMmh_.js">
|
|
85
85
|
<link rel="modulepreload" crossorigin href="/assets/capgoAdapter-DCowZ2ab.js">
|
|
86
|
-
<link rel="modulepreload" crossorigin href="/assets/runtimeConfig-
|
|
87
|
-
<link rel="stylesheet" crossorigin href="/assets/src-
|
|
86
|
+
<link rel="modulepreload" crossorigin href="/assets/runtimeConfig-BHH1hJDd.js">
|
|
87
|
+
<link rel="stylesheet" crossorigin href="/assets/src-BjEyU6if.css">
|
|
88
88
|
</head>
|
|
89
89
|
<body class="h-full bg-background text-foreground">
|
|
90
90
|
<div id="root" class="h-full"></div>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openchambery/web",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.5",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./server/index.js",
|
|
@@ -27,7 +27,8 @@
|
|
|
27
27
|
"@clack/prompts": "^1.1.0",
|
|
28
28
|
"@earendil-works/pi-agent-core": "0.84.4",
|
|
29
29
|
"@octokit/rest": "^22.0.1",
|
|
30
|
-
"@opencode/client": "2.0.
|
|
30
|
+
"@opencode/client": "2.0.15",
|
|
31
|
+
"@opencode/schema": "2.0.15",
|
|
31
32
|
"@simplewebauthn/server": "13.3.1",
|
|
32
33
|
"adm-zip": "^0.5.16",
|
|
33
34
|
"better-sqlite3": "^12.10.0",
|
package/server/index.js
CHANGED
|
@@ -56,6 +56,7 @@ import { createServerUtilsRuntime } from './lib/opencode/server-utils-runtime.js
|
|
|
56
56
|
import {
|
|
57
57
|
configureServerOpenCodeFetchGate,
|
|
58
58
|
createServerOpenCodeFetch,
|
|
59
|
+
wrapFetchWithRuntimeContractGate,
|
|
59
60
|
} from './lib/opencode/server-opencode-fetch.js';
|
|
60
61
|
import { createStaticRoutesRuntime } from './lib/opencode/static-routes-runtime.js';
|
|
61
62
|
import { createSettingsRuntime } from './lib/opencode/settings-runtime.js';
|
|
@@ -79,13 +80,17 @@ import {
|
|
|
79
80
|
withGoalExecutionGeneration,
|
|
80
81
|
} from './lib/session-goal/runtime.js';
|
|
81
82
|
import { createSessionMetadataStore } from './lib/session-metadata/session-metadata-store.js';
|
|
83
|
+
import {
|
|
84
|
+
createHttpSessionRecordClient,
|
|
85
|
+
retainOpenCodeSessions,
|
|
86
|
+
startSideStoreMigration,
|
|
87
|
+
} from './lib/session-metadata/opencode-session-record.js';
|
|
82
88
|
import {
|
|
83
89
|
createSessionArchiveService,
|
|
84
90
|
createUpstreamSessionFetcher,
|
|
85
91
|
} from './lib/session-metadata/session-archive.js';
|
|
86
92
|
import {
|
|
87
93
|
projectSessionLifecyclePayload,
|
|
88
|
-
projectSessionWithHostMetadata,
|
|
89
94
|
projectSessionWithStoredMap,
|
|
90
95
|
} from './lib/session-metadata/session-projection.js';
|
|
91
96
|
import { createScheduledTasksRuntime } from './lib/scheduled-tasks/runtime.js';
|
|
@@ -766,7 +771,32 @@ let questionAutoDelegateRuntime = null;
|
|
|
766
771
|
/** Filled inside main() once the SQLite session index is constructed. */
|
|
767
772
|
let sessionIndexServiceRef = null;
|
|
768
773
|
|
|
769
|
-
const
|
|
774
|
+
const sessionRecordClient = createHttpSessionRecordClient({
|
|
775
|
+
buildSessionUrl: (sessionID, directory) => {
|
|
776
|
+
const url = new URL(buildOpenCodeUrl(`/session/${encodeURIComponent(sessionID)}`));
|
|
777
|
+
if (directory) url.searchParams.set('directory', directory);
|
|
778
|
+
return url.toString();
|
|
779
|
+
},
|
|
780
|
+
getHeaders: () => getOpenCodeAuthHeaders(),
|
|
781
|
+
fetchFn: wrapFetchWithRuntimeContractGate(fetch),
|
|
782
|
+
});
|
|
783
|
+
const sessionMetadataStore = createSessionMetadataStore({
|
|
784
|
+
dataDir: OPENCHAMBER_DATA_DIR,
|
|
785
|
+
recordReader: (sessionID, directory) => sessionRecordClient.read(sessionID, directory),
|
|
786
|
+
recordWriter: (sessionID, metadata, directory) => sessionRecordClient.write({
|
|
787
|
+
sessionID,
|
|
788
|
+
metadata,
|
|
789
|
+
directory,
|
|
790
|
+
}),
|
|
791
|
+
});
|
|
792
|
+
const stopSessionRecordMigration = startSideStoreMigration({
|
|
793
|
+
load: () => sessionMetadataStore.load(),
|
|
794
|
+
readSession: (sessionID) => sessionRecordClient.read(sessionID),
|
|
795
|
+
writeMetadata: async (sessionID, metadata, record) => {
|
|
796
|
+
const directory = record?.location?.directory || record?.directory || undefined;
|
|
797
|
+
await sessionRecordClient.write({ sessionID, metadata, directory });
|
|
798
|
+
},
|
|
799
|
+
});
|
|
770
800
|
/**
|
|
771
801
|
* load() resolves `{ ok:false }` on read/corrupt failure (does not reject).
|
|
772
802
|
* Callers must check ok / isLoaded — never treat unresolved as empty success.
|
|
@@ -1621,10 +1651,11 @@ async function main(options = {}) {
|
|
|
1621
1651
|
projectSessions: (sessions) => {
|
|
1622
1652
|
const snap = sessionMetadataStore.getSnapshotSync();
|
|
1623
1653
|
// Not ready / unavailable — throw so sync keeps prior directory rows.
|
|
1654
|
+
// A missing side-store row must not drop a session OpenCode still has.
|
|
1624
1655
|
if (!snap) {
|
|
1625
1656
|
throw new Error('session metadata is unavailable: Host store not ready');
|
|
1626
1657
|
}
|
|
1627
|
-
return sessions
|
|
1658
|
+
return retainOpenCodeSessions(sessions, snap);
|
|
1628
1659
|
},
|
|
1629
1660
|
onRevisionTip: (tip) => {
|
|
1630
1661
|
broadcastOpenChamberEvent({
|
|
@@ -1664,10 +1695,9 @@ async function main(options = {}) {
|
|
|
1664
1695
|
isHostReady: () => sessionMetadataStore.isLoaded(),
|
|
1665
1696
|
projectSession: (session) => {
|
|
1666
1697
|
if (!sessionMetadataStore.isLoaded()) return null;
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
);
|
|
1698
|
+
const snap = sessionMetadataStore.getSnapshotSync();
|
|
1699
|
+
if (!snap) return null;
|
|
1700
|
+
return projectSessionWithStoredMap(session, snap);
|
|
1671
1701
|
},
|
|
1672
1702
|
onSessionDeleted: (sessionID) => sessionArchiveServiceRef?.forgetSession(sessionID),
|
|
1673
1703
|
})) {
|
|
@@ -2165,6 +2195,7 @@ async function main(options = {}) {
|
|
|
2165
2195
|
sessionIndexSyncRuntime?.stop();
|
|
2166
2196
|
sessionIndexService?.close();
|
|
2167
2197
|
sessionArchiveServiceRef?.stop?.();
|
|
2198
|
+
stopSessionRecordMigration();
|
|
2168
2199
|
} catch {
|
|
2169
2200
|
// The index is a local cache; a failed close must not block shutdown.
|
|
2170
2201
|
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# Browser Provider Host
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
An installed extension can declare that it provides `browser`. Agent `browser.*`
|
|
6
|
+
actions then go to that extension, and the host adopts the extension's result.
|
|
7
|
+
This fork has no `packages/sdk` and no guest process platform, so this module is
|
|
8
|
+
the minimal host: recognize the declaration, list reachable providers, send one
|
|
9
|
+
action to the selected provider, and refuse when none is selected.
|
|
10
|
+
|
|
11
|
+
It does not render a settings dropdown, a live rail, or takeover / handoff.
|
|
12
|
+
Those belong to a later surface that calls this contract.
|
|
13
|
+
|
|
14
|
+
## What this fork does not do
|
|
15
|
+
|
|
16
|
+
- It does not spawn extension processes, approve capabilities, or proxy a guest panel.
|
|
17
|
+
- It does not drive the in-app browser pane. No provider means the action is
|
|
18
|
+
refused. The pane's existing behavior is unchanged because this module never
|
|
19
|
+
calls it.
|
|
20
|
+
- It does not persist the installed-extension catalog. Registration is
|
|
21
|
+
in-process. The selected id is persisted; the extension must be registered
|
|
22
|
+
again after a restart before that id is listed or used.
|
|
23
|
+
- It does not write `browser.capture` images to disk. The extension's `data` is
|
|
24
|
+
returned as-is.
|
|
25
|
+
|
|
26
|
+
## Declaration
|
|
27
|
+
|
|
28
|
+
An extension declares the role with the first array among:
|
|
29
|
+
|
|
30
|
+
1. `service.provides`
|
|
31
|
+
2. `provides`
|
|
32
|
+
3. `contributes.service.provides`
|
|
33
|
+
|
|
34
|
+
`"browser"` in that array is the declaration. A service array that does not
|
|
35
|
+
include `browser` is not a browser provider, even if another field says it is.
|
|
36
|
+
The host recognizes that declaration with `extensionDeclaresBrowser`.
|
|
37
|
+
|
|
38
|
+
Registration is in-process, not an open HTTP install route (an endpoint field
|
|
39
|
+
would otherwise be a client-controlled fetch):
|
|
40
|
+
|
|
41
|
+
```js
|
|
42
|
+
getBrowserProviderHost().install({
|
|
43
|
+
id: 'server-chrome',
|
|
44
|
+
name: 'Server Chrome',
|
|
45
|
+
service: { provides: ['browser'] },
|
|
46
|
+
answer: async (request) => ({ ok: true, data: { url, title } }),
|
|
47
|
+
// or endpoint: 'http://127.0.0.1:9' → POST /browser-control
|
|
48
|
+
});
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
`answer` wins when both are set. `endpoint` must be loopback `http:` or
|
|
52
|
+
`https:` with no userinfo. A bare origin is posted to `/browser-control`.
|
|
53
|
+
A disabled extension, a missing id, or a declaration with no way to answer is
|
|
54
|
+
rejected and not listed.
|
|
55
|
+
|
|
56
|
+
## Agent action
|
|
57
|
+
|
|
58
|
+
`host.dispatchAgentBrowserAction({ action, parameters, context, providerId, signal })`
|
|
59
|
+
is the agent entry. `providerId` overrides the stored selection for that call
|
|
60
|
+
only. Otherwise the stored selection is used. The model does not supply
|
|
61
|
+
`context`; callers pass `{ directory, sessionId }`, each `null` when unknown.
|
|
62
|
+
|
|
63
|
+
The extension receives:
|
|
64
|
+
|
|
65
|
+
```json
|
|
66
|
+
{
|
|
67
|
+
"requestId": "…",
|
|
68
|
+
"action": "browser.click",
|
|
69
|
+
"parameters": { "selector": "#save" },
|
|
70
|
+
"context": { "directory": "/repo", "sessionId": "ses_1" }
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
It answers `{ "ok": true, "data": { } }` or `{ "ok": false, "error": "…" }`.
|
|
75
|
+
`data` is what the agent gets. `ok: false` is the agent-visible error, not an
|
|
76
|
+
empty success. A missing, non-JSON, or non-200 answer is unknown page state.
|
|
77
|
+
A call that was sent and then lost may have run; a call that never left the
|
|
78
|
+
host did not.
|
|
79
|
+
|
|
80
|
+
Actions: `browser.open`, `browser.snapshot`, `browser.click`, `browser.type`,
|
|
81
|
+
`browser.scroll`, `browser.back`, `browser.forward`, `browser.inspect`,
|
|
82
|
+
`browser.capture`, `browser.resize`. Parameters are validated before send.
|
|
83
|
+
`browser.open` waits 45s; other actions wait 20s.
|
|
84
|
+
|
|
85
|
+
## HTTP contract
|
|
86
|
+
|
|
87
|
+
Registered on the web server before the generic OpenCode proxy. The global
|
|
88
|
+
`/api` auth gate already covers these routes; this module does not add a second
|
|
89
|
+
one. Web, Electron
|
|
90
|
+
(in-process server), hosted mobile, and Capacitor mobile use these routes.
|
|
91
|
+
VS Code returns **501** `{ ok: false, code: "UNSUPPORTED", error }` for the
|
|
92
|
+
same paths and does not proxy them. That is not an empty catalog.
|
|
93
|
+
|
|
94
|
+
Settings and the rail call the first two routes. Provider ids match
|
|
95
|
+
`^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$`. `surface` is always `false` here: this
|
|
96
|
+
host does not push a live picture, and reporting `true` would open a socket
|
|
97
|
+
that does not exist.
|
|
98
|
+
|
|
99
|
+
| Call | Success | Refusal |
|
|
100
|
+
|---|---|---|
|
|
101
|
+
| `GET /api/browser-providers` | `200 { providers: [{ id, name, surface: false }], selectedId }` | `503 { error, code: "CATALOG_UNAVAILABLE" }` — never `providers: []` |
|
|
102
|
+
| `PUT /api/browser-providers/selection` body `{ id }` | `200 { selectedId }` naming that same id | `404 PROVIDER_NOT_FOUND`, `400 INVALID_SELECTION`, or `503 SELECTION_UNAVAILABLE`; selection unchanged |
|
|
103
|
+
| `POST /api/browser-providers/actions` body `{ action, parameters?, context?, providerId? }` | `200 { ok: true, providerId, data }` | `ok: false` plus `code` — never `{ ok: true, data: {} }` |
|
|
104
|
+
|
|
105
|
+
`selectedId` is `null` unless it names a provider in `providers`. A saved id
|
|
106
|
+
for an extension that is not installed right now is kept on disk but not
|
|
107
|
+
reported as connected. The selection file is
|
|
108
|
+
`browser-provider-selection.json` under the OpenChamber data dir and stores
|
|
109
|
+
only `{ selectedId }`. A missing file is no selection. A read or write failure
|
|
110
|
+
is not an empty catalog and does not change the previous choice.
|
|
111
|
+
|
|
112
|
+
No endpoint, handler, or credential is returned.
|
|
113
|
+
|
|
114
|
+
Action codes:
|
|
115
|
+
|
|
116
|
+
| code | status | meaning |
|
|
117
|
+
|---|---|---|
|
|
118
|
+
| `NO_PROVIDER` | 409 | nothing selected; nothing ran |
|
|
119
|
+
| `PROVIDER_NOT_FOUND` | 404 | id is not a reachable provider; nothing ran |
|
|
120
|
+
| `CATALOG_UNAVAILABLE` | 503 | catalog read failed; nothing ran |
|
|
121
|
+
| `INVALID_ACTION` | 400 | action or parameters rejected; nothing sent |
|
|
122
|
+
| `PROVIDER_REJECTED` | 400 | extension `ok: false`; `error` is the extension text |
|
|
123
|
+
| `UNKNOWN_RESULT` | 502 | answer was not a browser result; page state unknown |
|
|
124
|
+
| `REQUEST_FAILED` | 504 | sent, no usable answer; may have run |
|
|
125
|
+
| `PROVIDER_UNAVAILABLE` | 503 | never sent |
|
|
126
|
+
| `CANCELLED` | 499 | cancelled before send |
|
|
127
|
+
| `UNSUPPORTED` | 501 | VS Code only |
|
|
128
|
+
|
|
129
|
+
An empty `providers` array with status 200 means the catalog was read and no
|
|
130
|
+
reachable browser provider is installed. That is not a connected browser.
|
|
131
|
+
|
|
132
|
+
## Invariants
|
|
133
|
+
|
|
134
|
+
- No selected provider does not fall through to the in-app pane and does not
|
|
135
|
+
return success.
|
|
136
|
+
- A catalog read failure is not "no providers" and does not run the action.
|
|
137
|
+
- The extension is re-read from the catalog on every action. A stale selection
|
|
138
|
+
that is no longer listed fails; it is not silently retargeted.
|
|
139
|
+
- Choosing an unknown id does not clear a previous valid selection.
|
|
140
|
+
- Failure after the request was handed to the extension is not described as
|
|
141
|
+
"nothing changed".
|