@deepseek-insight/dsi 0.8.2 → 0.8.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.
Files changed (60) hide show
  1. package/build/client/_app/immutable/assets/0.DyOAkKS-.css +2 -0
  2. package/build/client/_app/immutable/chunks/{CAoCg_fG.js → BoHeiMOU.js} +1 -1
  3. package/build/client/_app/immutable/chunks/C9QAOGL1.js +2 -0
  4. package/build/client/_app/immutable/chunks/QJuSx3RG.js +1 -0
  5. package/build/client/_app/immutable/chunks/sC_8Ss7w.js +1 -0
  6. package/build/client/_app/immutable/entry/{app.DIq2Q3OX.js → app.S_mxIoOg.js} +2 -2
  7. package/build/client/_app/immutable/entry/start.BPQAB3iV.js +1 -0
  8. package/build/client/_app/immutable/nodes/{1.DKIIO5Pq.js → 1.D20V6eTe.js} +1 -1
  9. package/build/client/_app/immutable/nodes/{2.CpOJSq6u.js → 2.BHcBdFqH.js} +77 -77
  10. package/build/client/_app/version.json +1 -1
  11. package/build/handler.js +4 -4
  12. package/build/index.js +4 -4
  13. package/build/server/chunks/chunks/{dsh-events.js-CGuF_had.js → dsh-events.js-BUkLR6ZV.js} +13 -1
  14. package/build/server/chunks/chunks/{git-probe.js-Cn_ugqcH.js → git-probe.js-CLF37SRh.js} +2 -2
  15. package/build/server/chunks/chunks/{internal2.js-DFG0wDsP.js → internal2.js-Ba5p8uFM.js} +2 -2
  16. package/build/server/chunks/chunks/{registry.js-BC-TNdmn.js → registry.js-C2MdrfNv.js} +388 -50
  17. package/build/server/chunks/chunks/{state.js-Dki_Bq11.js → state.js-BSiAgink.js} +2 -2
  18. package/build/server/chunks/chunks/{watcher.js-f54CFvdI.js → watcher.js-BVKnoQUw.js} +2 -2
  19. package/build/server/chunks/entries/endpoints/api/a2a/{_server.ts.js-DN0zl7cz.js → _server.ts.js-3kQCQuHT.js} +3 -3
  20. package/build/server/chunks/entries/endpoints/api/a2a/register/{_server.ts.js-C3byr74D.js → _server.ts.js-BUBTCLFn.js} +3 -3
  21. package/build/server/chunks/entries/endpoints/api/browser/_id_/activate/_server.ts.js-CogDOHKu.js +45 -0
  22. package/build/server/chunks/entries/endpoints/api/browser/_id_/close/{_server.ts.js-BKChU9D7.js → _server.ts.js-xOt7LnS1.js} +2 -2
  23. package/build/server/chunks/entries/endpoints/api/browser/_id_/closetab/_server.ts.js-CSmVPvSM.js +44 -0
  24. package/build/server/chunks/entries/endpoints/api/browser/_id_/element/_server.ts.js-BA40oCDW.js +43 -0
  25. package/build/server/chunks/entries/endpoints/api/browser/_id_/input/{_server.ts.js-CUFYX5kg.js → _server.ts.js-EX7eVzjp.js} +5 -4
  26. package/build/server/chunks/entries/endpoints/api/browser/_id_/mcp/{_server.ts.js-fg2eb_ZY.js → _server.ts.js-B_EcmyFt.js} +2 -2
  27. package/build/server/chunks/entries/endpoints/api/browser/_id_/navigate/{_server.ts.js-Dt1n31IP.js → _server.ts.js-C3dYbyS3.js} +11 -7
  28. package/build/server/chunks/entries/endpoints/api/browser/_id_/opentab/_server.ts.js-CMhJJO25.js +45 -0
  29. package/build/server/chunks/entries/endpoints/api/browser/_id_/page/{_server.ts.js-DIF8juwJ.js → _server.ts.js-DIW4uI2S.js} +4 -3
  30. package/build/server/chunks/entries/endpoints/api/browser/_id_/stream/{_server.ts.js-BFdXJdhd.js → _server.ts.js-CIPIlq5X.js} +2 -2
  31. package/build/server/chunks/entries/endpoints/api/browser/_id_/tabs/_server.ts.js-CoEdOiml.js +34 -0
  32. package/build/server/chunks/entries/endpoints/api/browser/_id_/viewport/{_server.ts.js-BIF_7OHe.js → _server.ts.js-CdELUoGT.js} +6 -4
  33. package/build/server/chunks/entries/endpoints/api/browser/{_server.ts.js-B7yjEF1N.js → _server.ts.js-ea6HpNGh.js} +14 -4
  34. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/events/{_server.ts.js-lBsxHSo6.js → _server.ts.js-BzP30TXW.js} +2 -2
  35. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/history/{_server.ts.js-BrEgFdCF.js → _server.ts.js-B7YRQhuJ.js} +2 -2
  36. package/build/server/chunks/entries/endpoints/api/workspace/file-write/{_server.ts.js-BRhlbYEe.js → _server.ts.js-B-5YihUA.js} +3 -3
  37. package/build/server/chunks/entries/endpoints/api/workspace/git-events/{_server.ts.js-B9YI66ZL.js → _server.ts.js-DT5jRZFE.js} +3 -3
  38. package/build/server/chunks/entries/endpoints/api/workspace/git-file-head/{_server.ts.js-DSvXRZQL.js → _server.ts.js-DtW-utrd.js} +3 -3
  39. package/build/server/chunks/entries/endpoints/api/workspace/git-map/{_server.ts.js-8A0skdlM.js → _server.ts.js-8AIAo9jX.js} +3 -3
  40. package/build/server/chunks/entries/endpoints/api/workspace/git-status/{_server.ts.js-Bc6J3t3m.js → _server.ts.js-CMw96vjY.js} +3 -3
  41. package/build/server/chunks/entries/endpoints/api/workspace/write-gate/{_server.ts.js-CfL8Por5.js → _server.ts.js-DKufa14_.js} +3 -3
  42. package/build/server/chunks/entries/pages/{_error.svelte.js-EnDLC3Jj.js → _error.svelte.js-D8-G0evO.js} +3 -3
  43. package/build/server/chunks/entries/pages/{_page.server.ts.js-ar1DbW1v.js → _page.server.ts.js-7x6ZfGoB.js} +2 -2
  44. package/build/server/chunks/entries/pages/{_page.svelte.js-CQUo8VGL.js → _page.svelte.js-7xWLRsiZ.js} +212 -101
  45. package/build/server/chunks/{handler-BBp0LoYK.js → handler-BedQ0jP-.js} +3 -3
  46. package/build/server/chunks/{index.js-S4257Wcs.js → index.js-BF6tPPQs.js} +2 -2
  47. package/build/server/chunks/{manifest.js-DajiWH1H.js → manifest.js-3c0p7QAl.js} +58 -23
  48. package/build/server/chunks/nodes/{0.js-DtkNHIFx.js → 0.js-B3i7sGR_.js} +3 -3
  49. package/build/server/chunks/nodes/1.js-eUf50uxI.js +9 -0
  50. package/build/server/chunks/nodes/{2.js-BORDEffk.js → 2.js-CgnRGwm6.js} +5 -5
  51. package/package.json +2 -7
  52. package/template/.dsi/prompts.sqlite-shm +0 -0
  53. package/template/.dsi/prompts.sqlite-wal +0 -0
  54. package/build/client/_app/immutable/assets/0.DBVVEjy9.css +0 -2
  55. package/build/client/_app/immutable/chunks/BHodvdRc.js +0 -1
  56. package/build/client/_app/immutable/chunks/D-jXFTzB.js +0 -1
  57. package/build/client/_app/immutable/chunks/TTdBFs3C.js +0 -2
  58. package/build/client/_app/immutable/entry/start.E6P3Z7tx.js +0 -1
  59. package/build/server/chunks/nodes/1.js-OAvYMTzU.js +0 -9
  60. /package/build/client/_app/immutable/nodes/{0.Dm_ry-Pr.js → 0.6dTmg1Xv.js} +0 -0
@@ -9,7 +9,7 @@ import { D as DEFAULT_IMAGE_LIMITS } from '../../chunks/image-limits.js-CUdJ0f7r
9
9
  import { s as sanitizeWorkspaceProfile, d as dsiKey, t as themePrefs } from '../../chunks/theme-prefs.svelte.js-8CaWz46g.js';
10
10
  import { a as appConfig, p as previewSegments, b as parseTagWords, i as isValidTagWord, s as shouldRecordPrompt, g as getTrigger, t as triggerMode, c as searchKey, d as textPreviewOf } from '../../chunks/app-config.svelte.js-BM4WbMFB.js';
11
11
  import { c as getLocale } from '../../chunks/runtime.js-CCJi3XaY.js';
12
- import { p as page, a as afterNavigate, t, c as currentLocale, e as replaceState, u as unexpectederror1, s as sessionnotfound2, r as reapednote1, d as dshunreachable1, b as backtoworkspace2 } from '../../chunks/state.js-Dki_Bq11.js';
12
+ import { p as page, a as afterNavigate, t, c as currentLocale, e as replaceState, u as unexpectederror1, s as sessionnotfound2, r as reapednote1, d as dshunreachable1, b as backtoworkspace2 } from '../../chunks/state.js-BSiAgink.js';
13
13
  import 'yaml';
14
14
  import 'html-to-image';
15
15
  import hljs from 'highlight.js/lib/core';
@@ -21,7 +21,7 @@ import xml from 'highlight.js/lib/languages/xml';
21
21
  import css from 'highlight.js/lib/languages/css';
22
22
  import '../../chunks/uneval.js-BJ9Qq2SF.js';
23
23
  import '../../chunks/shared.js-HQ0rfhm4.js';
24
- import '../../chunks/internal2.js-DFG0wDsP.js';
24
+ import '../../chunks/internal2.js-Ba5p8uFM.js';
25
25
  import '../../chunks/utils.js-CAdNO8Tu.js';
26
26
 
27
27
  //#region src/lib/paraglide/messages/abort.js
@@ -17619,8 +17619,8 @@ function ThemeToggle($$renderer, $$props) {
17619
17619
  }
17620
17620
  //#endregion
17621
17621
  //#region package.json
17622
- var version = "0.8.2";
17623
- var dsh = { "webVersion": "0.2.1-rc.2" };
17622
+ var version = "0.8.3";
17623
+ var dsh = { "webVersion": "0.2.1-rc.3" };
17624
17624
  //#endregion
17625
17625
  //#region src/lib/version.ts
17626
17626
  /**
@@ -26429,6 +26429,14 @@ function groupTurns(entries) {
26429
26429
  continue;
26430
26430
  }
26431
26431
  if (entry.kind === "turn-lifecycle") continue;
26432
+ if (entry.kind === "developer-message") {
26433
+ groups.push({
26434
+ kind: "developer",
26435
+ key: entry.id,
26436
+ entry
26437
+ });
26438
+ continue;
26439
+ }
26432
26440
  const side = entry;
26433
26441
  const last = groups[groups.length - 1];
26434
26442
  if (last?.kind === "assistant-turn") last.entries.push(side);
@@ -30458,8 +30466,11 @@ function ConversationScrollArea($$renderer, $$props) {
30458
30466
  open: openChipId === group.entry.id});
30459
30467
  $$renderer.push(`<!----></div>`);
30460
30468
  }});
30461
- } else if (group.kind === "prompt" || group.kind === "context") {
30469
+ } else if (group.kind === "developer") {
30462
30470
  $$renderer.push("<!--[1-->");
30471
+ $$renderer.push(`<div data-testid="developer-message-row"${attr("data-seq", group.entry.seq)} class="mx-auto max-w-2xl rounded-md border border-text-muted/20 bg-surface0/5 px-3 py-1.5 text-xs text-text-muted"><span class="mr-1.5 font-medium uppercase tracking-wide opacity-70">developer</span> <span data-testid="developer-message-text">${escape_html(group.entry.text)}</span></div>`);
30472
+ } else if (group.kind === "prompt" || group.kind === "context") {
30473
+ $$renderer.push("<!--[2-->");
30463
30474
  PromptBubble($$renderer, {
30464
30475
  text: group.kind === "prompt" ? group.entry.text : void 0,
30465
30476
  time: group.kind === "prompt" ? group.entry.time : group.entries[0]?.time,
@@ -32949,13 +32960,28 @@ function BrowserHeader($$renderer, $$props) {
32949
32960
  //#region src/lib/components/browser/BrowserContent.svelte
32950
32961
  function BrowserContent($$renderer, $$props) {
32951
32962
  $$renderer.component(($$renderer) => {
32952
- let { status, failReason = null, wrap = null, canvas = null, ondown, onup, onmove, onwheel, onkey } = $$props;
32963
+ let { status, failReason = null, wrap = null, canvas = null, ondown, onup, onmove, onwheel, onkey, oncontextmenu, ctxMenu = null, onctxaction, onctxclose } = $$props;
32953
32964
  if (status === "failed") {
32954
32965
  $$renderer.push("<!--[0-->");
32955
32966
  $$renderer.push(`<div data-svelte="BrowserContent" class="p-3 text-xs text-red-500" data-testid="browser-failed">${escape_html(browsersessionfailed2({ reason: failReason ?? "" }))}</div>`);
32956
32967
  } else {
32957
32968
  $$renderer.push("<!--[-1-->");
32958
32969
  $$renderer.push(`<div data-svelte="BrowserContent" class="relative min-h-0 flex-1 overflow-hidden" data-testid="browser-glass"><canvas class="h-full w-full object-contain" tabindex="0"></canvas> `);
32970
+ if (ctxMenu) {
32971
+ $$renderer.push("<!--[0-->");
32972
+ $$renderer.push(`<div class="absolute z-50 min-w-44 rounded-md border border-zinc-700 bg-white py-1 text-xs shadow-xl"${attr_style(`left:${stringify(ctxMenu.px)}px; top:${stringify(ctxMenu.py)}px`)} data-testid="browser-ctxmenu">`);
32973
+ if (ctxMenu.src) {
32974
+ $$renderer.push("<!--[0-->");
32975
+ $$renderer.push(`<button type="button" class="block w-full px-3 py-1.5 text-left text-zinc-900 hover:bg-zinc-200" data-testid="browser-ctxmenu-item">Open image in new tab</button> <button type="button" class="block w-full px-3 py-1.5 text-left text-zinc-900 hover:bg-zinc-200" data-testid="browser-ctxmenu-item">Copy image address</button>`);
32976
+ } else $$renderer.push("<!--[-1-->");
32977
+ $$renderer.push(`<!--]--> `);
32978
+ if (ctxMenu.href) {
32979
+ $$renderer.push("<!--[0-->");
32980
+ $$renderer.push(`<button type="button" class="block w-full px-3 py-1.5 text-left text-zinc-900 hover:bg-zinc-200" data-testid="browser-ctxmenu-item">Open link in new tab</button> <button type="button" class="block w-full px-3 py-1.5 text-left text-zinc-900 hover:bg-zinc-200" data-testid="browser-ctxmenu-item">Copy link address</button>`);
32981
+ } else $$renderer.push("<!--[-1-->");
32982
+ $$renderer.push(`<!--]--> <button type="button" class="block w-full px-3 py-1.5 text-left text-zinc-900 hover:bg-zinc-200" data-testid="browser-ctxmenu-item">Reload</button> <div class="my-1 border-t border-zinc-300"></div> <button type="button" class="block w-full px-3 py-1.5 text-left text-zinc-900 hover:bg-zinc-200" data-testid="browser-ctxmenu-item">Send right-click to the page</button></div>`);
32983
+ } else $$renderer.push("<!--[-1-->");
32984
+ $$renderer.push(`<!--]--> `);
32959
32985
  if (status !== "live") {
32960
32986
  $$renderer.push("<!--[0-->");
32961
32987
  $$renderer.push(`<div class="absolute inset-0 grid place-items-center text-xs opacity-60" data-testid="browser-placeholder">${escape_html(status === "opening" ? browserlaunching1() : browserwaitingframes2())}</div>`);
@@ -33013,6 +33039,99 @@ function createMoveCoalescer(raf, fire) {
33013
33039
  } };
33014
33040
  }
33015
33041
  //#endregion
33042
+ //#region src/lib/utils/sidebar-prefs.ts
33043
+ /**
33044
+ * Sidebar preferences — persisted layout state for the conversation page's
33045
+ * app sidebar (OCI ControlRail pattern, 2026-08-23).
33046
+ *
33047
+ * Pure localStorage round-trip: SSR-safe (no localStorage → defaults), junk
33048
+ * payloads and out-of-range widths fall back instead of throwing into the
33049
+ * page, and writes are best-effort (a full or blocked store must not break
33050
+ * the layout — it only loses persistence for that session).
33051
+ *
33052
+ * Workspace profiles (storage-profile.ts): `?profile=widi` moves the key
33053
+ * to `dsi-sidebar_widi` — each desk remembers its own rail layout.
33054
+ */
33055
+ /** localStorage base key — one JSON blob `{ collapsed, width }`. */
33056
+ var STORAGE_KEY = "dsi-sidebar";
33057
+ /** The single width bound site — load-side sanitizing and drag clamping
33058
+ * both route through here so the bounds exist in exactly one place.
33059
+ * Bounds read the config store (layout load has landed them before any
33060
+ * mount; constants are the fallback defaults). */
33061
+ function clampSidebarWidth(width) {
33062
+ const { minWidth, maxWidth } = appConfig().sidebar;
33063
+ return Math.max(minWidth, Math.min(maxWidth, width));
33064
+ }
33065
+ /** Config-driven default width (clamped through the single bound site). */
33066
+ function defaultSidebarWidth() {
33067
+ return clampSidebarWidth(appConfig().sidebar.defaultWidth);
33068
+ }
33069
+ /** Persisted defaults when nothing (usable) is stored. */
33070
+ function defaultSidebarPrefs() {
33071
+ return {
33072
+ collapsed: false,
33073
+ width: defaultSidebarWidth()
33074
+ };
33075
+ }
33076
+ /**
33077
+ * Read prefs from localStorage.
33078
+ * @param profile sanitized workspace profile (null/omitted = default desk).
33079
+ * @returns stored prefs when parseable, defaults when absent, junk, or SSR.
33080
+ */
33081
+ function loadSidebarPrefs(profile) {
33082
+ if (typeof localStorage === "undefined") return defaultSidebarPrefs();
33083
+ try {
33084
+ const raw = localStorage.getItem(dsiKey(STORAGE_KEY, profile));
33085
+ if (!raw) return defaultSidebarPrefs();
33086
+ const parsed = JSON.parse(raw);
33087
+ if (parsed === null || typeof parsed !== "object") return defaultSidebarPrefs();
33088
+ return {
33089
+ collapsed: parsed.collapsed === true,
33090
+ width: clampSidebarWidth(typeof parsed.width === "number" && Number.isFinite(parsed.width) ? parsed.width : defaultSidebarWidth())
33091
+ };
33092
+ } catch {
33093
+ return defaultSidebarPrefs();
33094
+ }
33095
+ }
33096
+ //#endregion
33097
+ //#region src/lib/services/workspace/page-prefs.svelte.ts
33098
+ var PagePrefs = class {
33099
+ /** Width preset for the next conversation panel (clamped). */
33100
+ panelWidth = 0;
33101
+ /** Floor zoom (clamped). */
33102
+ zoom = 1;
33103
+ /** Explorer Layout split (clamped). */
33104
+ treePct = 0;
33105
+ /** Sidebar rail state (OCI ControlRail port). */
33106
+ sidebarCollapsed = false;
33107
+ sidebarWidth = 0;
33108
+ #profile = null;
33109
+ #initialised = false;
33110
+ /** Seed every field from the persisted blobs — exactly once, BEFORE
33111
+ * the route reads any field (makePanel reads panelWidth during the
33112
+ * seed reset). Intentional initial capture per the route's old
33113
+ * "svelte-ignore state_referenced_locally" comments: prefs seed the
33114
+ * layout once; later writes go through the save effects. */
33115
+ init(profile) {
33116
+ this.#initialised = true;
33117
+ this.#profile = profile;
33118
+ const floor = loadPanelPrefs(profile);
33119
+ this.panelWidth = clampPanelWidth(floor.panelWidth);
33120
+ this.zoom = clampPanelZoom(floor.zoom);
33121
+ this.treePct = clampTreePct(floor.treePct);
33122
+ const sidebar = loadSidebarPrefs(profile);
33123
+ this.sidebarCollapsed = sidebar.collapsed;
33124
+ this.sidebarWidth = sidebar.width;
33125
+ }
33126
+ get profile() {
33127
+ return this.#profile;
33128
+ }
33129
+ /** Sidebar persistence (the route's old sidebar save effect). Call
33130
+ * during component initialisation — `$effect` needs an owner. */
33131
+ installSidebarAutoSave() {}
33132
+ };
33133
+ var pagePrefs = new PagePrefs();
33134
+ //#endregion
33016
33135
  //#region src/lib/components/browser/BrowserPanel.svelte
33017
33136
  function BrowserPanel($$renderer, $$props) {
33018
33137
  $$renderer.component(($$renderer) => {
@@ -33032,6 +33151,9 @@ function BrowserPanel($$renderer, $$props) {
33032
33151
  let proxyBusy = false;
33033
33152
  let canBack = false;
33034
33153
  let canForward = false;
33154
+ /** ADR-0040 D5: the tab strip — the registry's tab list mirrored here;
33155
+ * the SERVER stays the authority (activeTargetId), this is a view. */
33156
+ let tabs = [];
33035
33157
  const moves = createMoveCoalescer((cb) => requestAnimationFrame(cb), (x, y) => void post());
33036
33158
  async function post(input) {}
33037
33159
  function toViewportCx(e) {
@@ -33057,6 +33179,67 @@ function BrowserPanel($$renderer, $$props) {
33057
33179
  const p = toViewportCx(e);
33058
33180
  if (p) moves.push(p.x, p.y);
33059
33181
  }
33182
+ /** BUGFIX 2026-10-25 (operator: YouTube's right-click menu never appears
33183
+ * in the glass): only the LEFT button was dispatched. Right-click must
33184
+ * reach the page as a right mousePressed/Released pair — Chrome paints
33185
+ * its OWN context menu and the screencast mirrors it. preventDefault
33186
+ * stops the DSI page's menu from covering the glass. */
33187
+ /** BUGFIX 2026-10-25 round 2: Chrome's NATIVE right-click menu is browser
33188
+ * UI — it never renders in the page, so the screencast can never show it
33189
+ * (only in-page custom menus like YouTube's player menu can mirror). So
33190
+ * DSI supplies its OWN menu: what the right-click landed on comes from
33191
+ * the /element data pass; actions ride the wire (opentab/clipboard/the
33192
+ * page's own menu via a dispatched right-click). */
33193
+ let ctxMenu = null;
33194
+ let ctxPoint = null;
33195
+ function onContextMenu(e) {
33196
+ e.preventDefault();
33197
+ ctxPoint = toViewportCx(e);
33198
+ const rect = wrap?.getBoundingClientRect();
33199
+ const menuW = 190, menuH = 210;
33200
+ const px = rect ? Math.min(e.clientX - rect.left, rect.width - menuW - 6) : e.clientX;
33201
+ const py = rect ? Math.min(e.clientY - rect.top, rect.height - menuH - 6) : e.clientY;
33202
+ ctxMenu = {
33203
+ px: Math.max(6, px),
33204
+ py: Math.max(6, py),
33205
+ href: null,
33206
+ src: null
33207
+ };
33208
+ }
33209
+ function ctxClose() {
33210
+ ctxMenu = null;
33211
+ }
33212
+ function ctxSendRightClick() {
33213
+ const p = ctxPoint;
33214
+ ctxClose();
33215
+ if (!p) return;
33216
+ post({
33217
+ x: p.x,
33218
+ y: p.y});
33219
+ post({
33220
+ x: p.x,
33221
+ y: p.y});
33222
+ }
33223
+ async function ctxOpenTab(url) {
33224
+ ctxClose();
33225
+ }
33226
+ function ctxAct(action) {
33227
+ const m = ctxMenu;
33228
+ ctxClose();
33229
+ if (!m) return;
33230
+ if (action === "open-image" && m.src) return void ctxOpenTab(m.src);
33231
+ if (action === "copy-image" && m.src) return void ctxCopy(m.src);
33232
+ if (action === "open-link" && m.href) return void ctxOpenTab(m.href);
33233
+ if (action === "copy-link" && m.href) return void ctxCopy(m.href);
33234
+ if (action === "reload") return void proxy();
33235
+ if (action === "send-right-click") return ctxSendRightClick();
33236
+ }
33237
+ async function ctxCopy(text) {
33238
+ ctxClose();
33239
+ try {
33240
+ await navigator.clipboard.writeText(text);
33241
+ } catch {}
33242
+ }
33060
33243
  function onWheel(e) {
33061
33244
  const p = toViewportCx(e);
33062
33245
  if (!p) return;
@@ -33101,7 +33284,7 @@ function BrowserPanel($$renderer, $$props) {
33101
33284
  let $$settled = true;
33102
33285
  let $$inner_renderer;
33103
33286
  function $$render_inner($$renderer) {
33104
- $$renderer.push(`<div data-svelte="BrowserPanel" class="flex h-full flex-col bg-surface-elevated" data-testid="panel-browser">`);
33287
+ $$renderer.push(`<div data-svelte="BrowserPanel" class="relative flex h-full flex-col bg-surface-elevated" data-testid="panel-browser">`);
33105
33288
  BrowserHeader($$renderer, {
33106
33289
  status,
33107
33290
  reBound,
@@ -33126,6 +33309,23 @@ function BrowserPanel($$renderer, $$props) {
33126
33309
  $$renderer.push(`<!--]--></div>`);
33127
33310
  } else $$renderer.push("<!--[-1-->");
33128
33311
  $$renderer.push(`<!--]--> `);
33312
+ if (tabs.length >= 1) {
33313
+ $$renderer.push("<!--[0-->");
33314
+ $$renderer.push(`<div class="flex items-center gap-1 overflow-x-auto border-b border-surface-border px-1 py-0.5 text-[11px]" data-testid="browser-tab-strip"><!--[-->`);
33315
+ const each_array = ensure_array_like(tabs);
33316
+ for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
33317
+ let t = each_array[$$index];
33318
+ $$renderer.push(`<div class="relative shrink-0"><button type="button"${attr_class("w-32 truncate rounded px-1.5 py-0.5 pr-4 text-left whitespace-nowrap", void 0, {
33319
+ "bg-blue-200": t.active,
33320
+ "text-blue-900": t.active,
33321
+ "text-zinc-600": !t.active,
33322
+ "hover:bg-zinc-100": !t.active,
33323
+ "font-medium": t.active
33324
+ })}${attr("disabled", t.active, true)} data-testid="browser-tab"${attr("data-active", t.active)}${attr("title", t.url)}>${escape_html(t.title || t.url || "tab")}</button> <button type="button" class="absolute right-0.5 top-1/2 -translate-y-1/2 rounded text-[10px] leading-none text-red-500 hover:bg-red-500 hover:text-white" title="Close tab" data-testid="browser-tab-close">✕</button></div>`);
33325
+ }
33326
+ $$renderer.push(`<!--]--></div>`);
33327
+ } else $$renderer.push("<!--[-1-->");
33328
+ $$renderer.push(`<!--]--> `);
33129
33329
  BrowserContent($$renderer, {
33130
33330
  status,
33131
33331
  failReason,
@@ -33134,6 +33334,10 @@ function BrowserPanel($$renderer, $$props) {
33134
33334
  onmove: onPointerMove,
33135
33335
  onwheel: onWheel,
33136
33336
  onkey: onKey,
33337
+ ctxMenu,
33338
+ onctxaction: ctxAct,
33339
+ onctxclose: ctxClose,
33340
+ oncontextmenu: onContextMenu,
33137
33341
  get wrap() {
33138
33342
  return wrap;
33139
33343
  },
@@ -34802,99 +35006,6 @@ function EmptyFloor($$renderer, $$props) {
34802
35006
  });
34803
35007
  }
34804
35008
  //#endregion
34805
- //#region src/lib/utils/sidebar-prefs.ts
34806
- /**
34807
- * Sidebar preferences — persisted layout state for the conversation page's
34808
- * app sidebar (OCI ControlRail pattern, 2026-08-23).
34809
- *
34810
- * Pure localStorage round-trip: SSR-safe (no localStorage → defaults), junk
34811
- * payloads and out-of-range widths fall back instead of throwing into the
34812
- * page, and writes are best-effort (a full or blocked store must not break
34813
- * the layout — it only loses persistence for that session).
34814
- *
34815
- * Workspace profiles (storage-profile.ts): `?profile=widi` moves the key
34816
- * to `dsi-sidebar_widi` — each desk remembers its own rail layout.
34817
- */
34818
- /** localStorage base key — one JSON blob `{ collapsed, width }`. */
34819
- var STORAGE_KEY = "dsi-sidebar";
34820
- /** The single width bound site — load-side sanitizing and drag clamping
34821
- * both route through here so the bounds exist in exactly one place.
34822
- * Bounds read the config store (layout load has landed them before any
34823
- * mount; constants are the fallback defaults). */
34824
- function clampSidebarWidth(width) {
34825
- const { minWidth, maxWidth } = appConfig().sidebar;
34826
- return Math.max(minWidth, Math.min(maxWidth, width));
34827
- }
34828
- /** Config-driven default width (clamped through the single bound site). */
34829
- function defaultSidebarWidth() {
34830
- return clampSidebarWidth(appConfig().sidebar.defaultWidth);
34831
- }
34832
- /** Persisted defaults when nothing (usable) is stored. */
34833
- function defaultSidebarPrefs() {
34834
- return {
34835
- collapsed: false,
34836
- width: defaultSidebarWidth()
34837
- };
34838
- }
34839
- /**
34840
- * Read prefs from localStorage.
34841
- * @param profile sanitized workspace profile (null/omitted = default desk).
34842
- * @returns stored prefs when parseable, defaults when absent, junk, or SSR.
34843
- */
34844
- function loadSidebarPrefs(profile) {
34845
- if (typeof localStorage === "undefined") return defaultSidebarPrefs();
34846
- try {
34847
- const raw = localStorage.getItem(dsiKey(STORAGE_KEY, profile));
34848
- if (!raw) return defaultSidebarPrefs();
34849
- const parsed = JSON.parse(raw);
34850
- if (parsed === null || typeof parsed !== "object") return defaultSidebarPrefs();
34851
- return {
34852
- collapsed: parsed.collapsed === true,
34853
- width: clampSidebarWidth(typeof parsed.width === "number" && Number.isFinite(parsed.width) ? parsed.width : defaultSidebarWidth())
34854
- };
34855
- } catch {
34856
- return defaultSidebarPrefs();
34857
- }
34858
- }
34859
- //#endregion
34860
- //#region src/lib/services/workspace/page-prefs.svelte.ts
34861
- var PagePrefs = class {
34862
- /** Width preset for the next conversation panel (clamped). */
34863
- panelWidth = 0;
34864
- /** Floor zoom (clamped). */
34865
- zoom = 1;
34866
- /** Explorer Layout split (clamped). */
34867
- treePct = 0;
34868
- /** Sidebar rail state (OCI ControlRail port). */
34869
- sidebarCollapsed = false;
34870
- sidebarWidth = 0;
34871
- #profile = null;
34872
- #initialised = false;
34873
- /** Seed every field from the persisted blobs — exactly once, BEFORE
34874
- * the route reads any field (makePanel reads panelWidth during the
34875
- * seed reset). Intentional initial capture per the route's old
34876
- * "svelte-ignore state_referenced_locally" comments: prefs seed the
34877
- * layout once; later writes go through the save effects. */
34878
- init(profile) {
34879
- this.#initialised = true;
34880
- this.#profile = profile;
34881
- const floor = loadPanelPrefs(profile);
34882
- this.panelWidth = clampPanelWidth(floor.panelWidth);
34883
- this.zoom = clampPanelZoom(floor.zoom);
34884
- this.treePct = clampTreePct(floor.treePct);
34885
- const sidebar = loadSidebarPrefs(profile);
34886
- this.sidebarCollapsed = sidebar.collapsed;
34887
- this.sidebarWidth = sidebar.width;
34888
- }
34889
- get profile() {
34890
- return this.#profile;
34891
- }
34892
- /** Sidebar persistence (the route's old sidebar save effect). Call
34893
- * during component initialisation — `$effect` needs an owner. */
34894
- installSidebarAutoSave() {}
34895
- };
34896
- var pagePrefs = new PagePrefs();
34897
- //#endregion
34898
35009
  //#region src/lib/services/conversation/spine-feed.svelte.ts
34899
35010
  var spineFeed = {
34900
35011
  rows: [],
@@ -36006,4 +36117,4 @@ function _page($$renderer, $$props) {
36006
36117
  }
36007
36118
 
36008
36119
  export { _page as default };
36009
- //# sourceMappingURL=_page.svelte.js-CQUo8VGL.js.map
36120
+ //# sourceMappingURL=_page.svelte.js-7xWLRsiZ.js.map
@@ -9,8 +9,8 @@ import * as qs from 'node:querystring';
9
9
  import { Readable } from 'node:stream';
10
10
  import { S as SvelteKitError } from './chunks/shared.js-HQ0rfhm4.js';
11
11
  import './chunks/utils.js-CAdNO8Tu.js';
12
- import { S as Server } from './index.js-S4257Wcs.js';
13
- import { m as manifest } from './manifest.js-DajiWH1H.js';
12
+ import { S as Server } from './index.js-BF6tPPQs.js';
13
+ import { m as manifest } from './manifest.js-3c0p7QAl.js';
14
14
  import { env, dir, env_prefix } from '../../env.js';
15
15
  import { format } from 'node:url';
16
16
 
@@ -1732,4 +1732,4 @@ const handler = sequence(
1732
1732
  );
1733
1733
 
1734
1734
  export { format_listening_address as f, handler as h, polka as p };
1735
- //# sourceMappingURL=handler-BBp0LoYK.js.map
1735
+ //# sourceMappingURL=handler-BedQ0jP-.js.map
@@ -3,7 +3,7 @@ import { n as noop, T as TRAILING_SLASH_PARAM, I as INVALIDATED_PARAM, R as Redi
3
3
  import { b as base, o as override, a as assets, r as reset, c as app_dir } from './chunks/internal.js-BcS47nI-.js';
4
4
  import { f as format_server_error, j as json, i as is_form_content_type, t as text, h as has_prerendered_path, a as handle_fatal_error, r as redirect_response, g as get_set_cookies, n as negotiate, w as with_request_store, p as parseString, m as merge_tracing, b as method_not_allowed, s as static_error_page, c as handle_error_and_jsonify, d as get_global_name, e as create_replacer, k as serialize_uses, l as clarify_devalue_error, E as ENDPOINT_METHODS, P as PAGE_METHODS, o as get_node_type, q as isRedirect, u as escape_html, v as error, x as deserialize_binary_form } from './chunks/utils.js-CAdNO8Tu.js';
5
5
  import { u as uneval } from './chunks/uneval.js-BJ9Qq2SF.js';
6
- import { o as options, s as set_private_env, a as set_public_env, g as get_hooks, p as public_env, r as read_implementation, b as set_read_implementation } from './chunks/internal2.js-DFG0wDsP.js';
6
+ import { o as options, s as set_private_env, a as set_public_env, g as get_hooks, p as public_env, r as read_implementation, b as set_read_implementation } from './chunks/internal2.js-Ba5p8uFM.js';
7
7
  import { d as decode_pathname, f as find_route, n as normalize_path, a as disable_search, v as validate_layout_server_exports, b as validate_layout_exports, c as validate_page_server_exports, e as validate_page_exports, r as resolve, h as hash, m as make_trackable } from './chunks/exports.js-DH_tjtdv.js';
8
8
  import { S as readable, T as writable } from './chunks/server.js-B1bDXhHu.js';
9
9
 
@@ -3862,4 +3862,4 @@ var Server = class {
3862
3862
  };
3863
3863
 
3864
3864
  export { Server as S };
3865
- //# sourceMappingURL=index.js-S4257Wcs.js.map
3865
+ //# sourceMappingURL=index.js-BF6tPPQs.js.map
@@ -10,11 +10,11 @@ return {
10
10
  assets: new Set(["favicon.svg"]),
11
11
  mimeTypes: {".svg":"image/svg+xml"},
12
12
  _: {
13
- client: {start:"_app/immutable/entry/start.E6P3Z7tx.js",app:"_app/immutable/entry/app.DIq2Q3OX.js",imports:["_app/immutable/entry/start.E6P3Z7tx.js","_app/immutable/chunks/TTdBFs3C.js","_app/immutable/chunks/cHj8EuyS.js","_app/immutable/entry/app.DIq2Q3OX.js","_app/immutable/chunks/cHj8EuyS.js","_app/immutable/chunks/HclGiUj8.js","_app/immutable/chunks/xihTtKlq.js"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},
13
+ client: {start:"_app/immutable/entry/start.BPQAB3iV.js",app:"_app/immutable/entry/app.S_mxIoOg.js",imports:["_app/immutable/entry/start.BPQAB3iV.js","_app/immutable/chunks/C9QAOGL1.js","_app/immutable/chunks/cHj8EuyS.js","_app/immutable/entry/app.S_mxIoOg.js","_app/immutable/chunks/cHj8EuyS.js","_app/immutable/chunks/HclGiUj8.js","_app/immutable/chunks/xihTtKlq.js"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},
14
14
  nodes: [
15
- __memo(() => import('./nodes/0.js-DtkNHIFx.js')),
16
- __memo(() => import('./nodes/1.js-OAvYMTzU.js')),
17
- __memo(() => import('./nodes/2.js-BORDEffk.js'))
15
+ __memo(() => import('./nodes/0.js-B3i7sGR_.js')),
16
+ __memo(() => import('./nodes/1.js-eUf50uxI.js')),
17
+ __memo(() => import('./nodes/2.js-CgnRGwm6.js'))
18
18
  ],
19
19
  remotes: {
20
20
 
@@ -32,14 +32,14 @@ return {
32
32
  pattern: /^\/api\/a2a\/?$/,
33
33
  params: [],
34
34
  page: null,
35
- endpoint: __memo(() => import('./entries/endpoints/api/a2a/_server.ts.js-DN0zl7cz.js'))
35
+ endpoint: __memo(() => import('./entries/endpoints/api/a2a/_server.ts.js-3kQCQuHT.js'))
36
36
  },
37
37
  {
38
38
  id: "/api/a2a/register",
39
39
  pattern: /^\/api\/a2a\/register\/?$/,
40
40
  params: [],
41
41
  page: null,
42
- endpoint: __memo(() => import('./entries/endpoints/api/a2a/register/_server.ts.js-C3byr74D.js'))
42
+ endpoint: __memo(() => import('./entries/endpoints/api/a2a/register/_server.ts.js-BUBTCLFn.js'))
43
43
  },
44
44
  {
45
45
  id: "/api/a2a/[id]",
@@ -53,56 +53,91 @@ return {
53
53
  pattern: /^\/api\/browser\/?$/,
54
54
  params: [],
55
55
  page: null,
56
- endpoint: __memo(() => import('./entries/endpoints/api/browser/_server.ts.js-B7yjEF1N.js'))
56
+ endpoint: __memo(() => import('./entries/endpoints/api/browser/_server.ts.js-ea6HpNGh.js'))
57
+ },
58
+ {
59
+ id: "/api/browser/[id]/activate",
60
+ pattern: /^\/api\/browser\/([^/]+?)\/activate\/?$/,
61
+ params: [{"name":"id","optional":false,"rest":false,"chained":false}],
62
+ page: null,
63
+ endpoint: __memo(() => import('./entries/endpoints/api/browser/_id_/activate/_server.ts.js-CogDOHKu.js'))
64
+ },
65
+ {
66
+ id: "/api/browser/[id]/closetab",
67
+ pattern: /^\/api\/browser\/([^/]+?)\/closetab\/?$/,
68
+ params: [{"name":"id","optional":false,"rest":false,"chained":false}],
69
+ page: null,
70
+ endpoint: __memo(() => import('./entries/endpoints/api/browser/_id_/closetab/_server.ts.js-CSmVPvSM.js'))
57
71
  },
58
72
  {
59
73
  id: "/api/browser/[id]/close",
60
74
  pattern: /^\/api\/browser\/([^/]+?)\/close\/?$/,
61
75
  params: [{"name":"id","optional":false,"rest":false,"chained":false}],
62
76
  page: null,
63
- endpoint: __memo(() => import('./entries/endpoints/api/browser/_id_/close/_server.ts.js-BKChU9D7.js'))
77
+ endpoint: __memo(() => import('./entries/endpoints/api/browser/_id_/close/_server.ts.js-xOt7LnS1.js'))
78
+ },
79
+ {
80
+ id: "/api/browser/[id]/element",
81
+ pattern: /^\/api\/browser\/([^/]+?)\/element\/?$/,
82
+ params: [{"name":"id","optional":false,"rest":false,"chained":false}],
83
+ page: null,
84
+ endpoint: __memo(() => import('./entries/endpoints/api/browser/_id_/element/_server.ts.js-BA40oCDW.js'))
64
85
  },
65
86
  {
66
87
  id: "/api/browser/[id]/input",
67
88
  pattern: /^\/api\/browser\/([^/]+?)\/input\/?$/,
68
89
  params: [{"name":"id","optional":false,"rest":false,"chained":false}],
69
90
  page: null,
70
- endpoint: __memo(() => import('./entries/endpoints/api/browser/_id_/input/_server.ts.js-CUFYX5kg.js'))
91
+ endpoint: __memo(() => import('./entries/endpoints/api/browser/_id_/input/_server.ts.js-EX7eVzjp.js'))
71
92
  },
72
93
  {
73
94
  id: "/api/browser/[id]/mcp",
74
95
  pattern: /^\/api\/browser\/([^/]+?)\/mcp\/?$/,
75
96
  params: [{"name":"id","optional":false,"rest":false,"chained":false}],
76
97
  page: null,
77
- endpoint: __memo(() => import('./entries/endpoints/api/browser/_id_/mcp/_server.ts.js-fg2eb_ZY.js'))
98
+ endpoint: __memo(() => import('./entries/endpoints/api/browser/_id_/mcp/_server.ts.js-B_EcmyFt.js'))
78
99
  },
79
100
  {
80
101
  id: "/api/browser/[id]/navigate",
81
102
  pattern: /^\/api\/browser\/([^/]+?)\/navigate\/?$/,
82
103
  params: [{"name":"id","optional":false,"rest":false,"chained":false}],
83
104
  page: null,
84
- endpoint: __memo(() => import('./entries/endpoints/api/browser/_id_/navigate/_server.ts.js-Dt1n31IP.js'))
105
+ endpoint: __memo(() => import('./entries/endpoints/api/browser/_id_/navigate/_server.ts.js-C3dYbyS3.js'))
106
+ },
107
+ {
108
+ id: "/api/browser/[id]/opentab",
109
+ pattern: /^\/api\/browser\/([^/]+?)\/opentab\/?$/,
110
+ params: [{"name":"id","optional":false,"rest":false,"chained":false}],
111
+ page: null,
112
+ endpoint: __memo(() => import('./entries/endpoints/api/browser/_id_/opentab/_server.ts.js-CMhJJO25.js'))
85
113
  },
86
114
  {
87
115
  id: "/api/browser/[id]/page",
88
116
  pattern: /^\/api\/browser\/([^/]+?)\/page\/?$/,
89
117
  params: [{"name":"id","optional":false,"rest":false,"chained":false}],
90
118
  page: null,
91
- endpoint: __memo(() => import('./entries/endpoints/api/browser/_id_/page/_server.ts.js-DIF8juwJ.js'))
119
+ endpoint: __memo(() => import('./entries/endpoints/api/browser/_id_/page/_server.ts.js-DIW4uI2S.js'))
92
120
  },
93
121
  {
94
122
  id: "/api/browser/[id]/stream",
95
123
  pattern: /^\/api\/browser\/([^/]+?)\/stream\/?$/,
96
124
  params: [{"name":"id","optional":false,"rest":false,"chained":false}],
97
125
  page: null,
98
- endpoint: __memo(() => import('./entries/endpoints/api/browser/_id_/stream/_server.ts.js-BFdXJdhd.js'))
126
+ endpoint: __memo(() => import('./entries/endpoints/api/browser/_id_/stream/_server.ts.js-CIPIlq5X.js'))
127
+ },
128
+ {
129
+ id: "/api/browser/[id]/tabs",
130
+ pattern: /^\/api\/browser\/([^/]+?)\/tabs\/?$/,
131
+ params: [{"name":"id","optional":false,"rest":false,"chained":false}],
132
+ page: null,
133
+ endpoint: __memo(() => import('./entries/endpoints/api/browser/_id_/tabs/_server.ts.js-CoEdOiml.js'))
99
134
  },
100
135
  {
101
136
  id: "/api/browser/[id]/viewport",
102
137
  pattern: /^\/api\/browser\/([^/]+?)\/viewport\/?$/,
103
138
  params: [{"name":"id","optional":false,"rest":false,"chained":false}],
104
139
  page: null,
105
- endpoint: __memo(() => import('./entries/endpoints/api/browser/_id_/viewport/_server.ts.js-BIF_7OHe.js'))
140
+ endpoint: __memo(() => import('./entries/endpoints/api/browser/_id_/viewport/_server.ts.js-CdELUoGT.js'))
106
141
  },
107
142
  {
108
143
  id: "/api/config",
@@ -193,7 +228,7 @@ return {
193
228
  pattern: /^\/api\/dsh\/session\/([^/]+?)\/events\/?$/,
194
229
  params: [{"name":"sessionId","optional":false,"rest":false,"chained":false}],
195
230
  page: null,
196
- endpoint: __memo(() => import('./entries/endpoints/api/dsh/session/_sessionId_/events/_server.ts.js-lBsxHSo6.js'))
231
+ endpoint: __memo(() => import('./entries/endpoints/api/dsh/session/_sessionId_/events/_server.ts.js-BzP30TXW.js'))
197
232
  },
198
233
  {
199
234
  id: "/api/dsh/session/[sessionId]/fork",
@@ -214,7 +249,7 @@ return {
214
249
  pattern: /^\/api\/dsh\/session\/([^/]+?)\/history\/?$/,
215
250
  params: [{"name":"sessionId","optional":false,"rest":false,"chained":false}],
216
251
  page: null,
217
- endpoint: __memo(() => import('./entries/endpoints/api/dsh/session/_sessionId_/history/_server.ts.js-BrEgFdCF.js'))
252
+ endpoint: __memo(() => import('./entries/endpoints/api/dsh/session/_sessionId_/history/_server.ts.js-B7YRQhuJ.js'))
218
253
  },
219
254
  {
220
255
  id: "/api/dsh/session/[sessionId]/models",
@@ -487,42 +522,42 @@ return {
487
522
  pattern: /^\/api\/workspace\/file-write\/?$/,
488
523
  params: [],
489
524
  page: null,
490
- endpoint: __memo(() => import('./entries/endpoints/api/workspace/file-write/_server.ts.js-BRhlbYEe.js'))
525
+ endpoint: __memo(() => import('./entries/endpoints/api/workspace/file-write/_server.ts.js-B-5YihUA.js'))
491
526
  },
492
527
  {
493
528
  id: "/api/workspace/git-events",
494
529
  pattern: /^\/api\/workspace\/git-events\/?$/,
495
530
  params: [],
496
531
  page: null,
497
- endpoint: __memo(() => import('./entries/endpoints/api/workspace/git-events/_server.ts.js-B9YI66ZL.js'))
532
+ endpoint: __memo(() => import('./entries/endpoints/api/workspace/git-events/_server.ts.js-DT5jRZFE.js'))
498
533
  },
499
534
  {
500
535
  id: "/api/workspace/git-file-head",
501
536
  pattern: /^\/api\/workspace\/git-file-head\/?$/,
502
537
  params: [],
503
538
  page: null,
504
- endpoint: __memo(() => import('./entries/endpoints/api/workspace/git-file-head/_server.ts.js-DSvXRZQL.js'))
539
+ endpoint: __memo(() => import('./entries/endpoints/api/workspace/git-file-head/_server.ts.js-DtW-utrd.js'))
505
540
  },
506
541
  {
507
542
  id: "/api/workspace/git-map",
508
543
  pattern: /^\/api\/workspace\/git-map\/?$/,
509
544
  params: [],
510
545
  page: null,
511
- endpoint: __memo(() => import('./entries/endpoints/api/workspace/git-map/_server.ts.js-8A0skdlM.js'))
546
+ endpoint: __memo(() => import('./entries/endpoints/api/workspace/git-map/_server.ts.js-8AIAo9jX.js'))
512
547
  },
513
548
  {
514
549
  id: "/api/workspace/git-status",
515
550
  pattern: /^\/api\/workspace\/git-status\/?$/,
516
551
  params: [],
517
552
  page: null,
518
- endpoint: __memo(() => import('./entries/endpoints/api/workspace/git-status/_server.ts.js-Bc6J3t3m.js'))
553
+ endpoint: __memo(() => import('./entries/endpoints/api/workspace/git-status/_server.ts.js-CMw96vjY.js'))
519
554
  },
520
555
  {
521
556
  id: "/api/workspace/write-gate",
522
557
  pattern: /^\/api\/workspace\/write-gate\/?$/,
523
558
  params: [],
524
559
  page: null,
525
- endpoint: __memo(() => import('./entries/endpoints/api/workspace/write-gate/_server.ts.js-CfL8Por5.js'))
560
+ endpoint: __memo(() => import('./entries/endpoints/api/workspace/write-gate/_server.ts.js-DKufa14_.js'))
526
561
  }
527
562
  ],
528
563
  prerendered_routes: new Set([]),
@@ -536,4 +571,4 @@ return {
536
571
  })();
537
572
 
538
573
  export { manifest as m };
539
- //# sourceMappingURL=manifest.js-DajiWH1H.js.map
574
+ //# sourceMappingURL=manifest.js-3c0p7QAl.js.map