@deepseek-insight/dsi 0.5.34 → 0.5.36

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 (27) hide show
  1. package/.agents/skills/dsi-bump-up/SKILL.md +82 -0
  2. package/build/client/_app/immutable/assets/{2.DEfYr14g.css → 2.B2TMGoNC.css} +1 -1
  3. package/build/client/_app/immutable/chunks/B8475bbs.js +1 -0
  4. package/build/client/_app/immutable/chunks/{B53Y9F3N.js → Cvfdkz5B.js} +1 -1
  5. package/build/client/_app/immutable/chunks/{D07HHvcI.js → ZTD3u9Qg.js} +2 -2
  6. package/build/client/_app/immutable/chunks/b-tPv4uU.js +1 -0
  7. package/build/client/_app/immutable/entry/{app.JnGE9QaY.js → app.DM-WIZa8.js} +2 -2
  8. package/build/client/_app/immutable/entry/start.DsdVwQ2P.js +1 -0
  9. package/build/client/_app/immutable/nodes/{1.DibfLi2p.js → 1.CSG0CVRN.js} +1 -1
  10. package/build/client/_app/immutable/nodes/{2.ChfcYWGA.js → 2.CWJBqz9q.js} +190 -190
  11. package/build/client/_app/version.json +1 -1
  12. package/build/handler.js +4 -4
  13. package/build/index.js +4 -4
  14. package/build/server/chunks/chunks/{internal.js-CiAyaHU8.js → internal.js-D8oISUTm.js} +2 -2
  15. package/build/server/chunks/chunks/{state.js-DDFKGUCM.js → state.js-D6nZd_zN.js} +2 -2
  16. package/build/server/chunks/entries/pages/{_error.svelte.js-CfEcN0a5.js → _error.svelte.js-yH59g5II.js} +3 -3
  17. package/build/server/chunks/entries/pages/{_page.svelte.js-5qYAGNkZ.js → _page.svelte.js-Be_p_N6K.js} +92 -14
  18. package/build/server/chunks/{handler-C29GDWFA.js → handler-DjgkfjqU.js} +3 -3
  19. package/build/server/chunks/{index.js-CzsX25WI.js → index.js-DAuFLIFQ.js} +2 -2
  20. package/build/server/chunks/{manifest.js-BKlTd1KI.js → manifest.js-9-1nxrAa.js} +4 -4
  21. package/build/server/chunks/nodes/1.js-CBSPs58f.js +9 -0
  22. package/build/server/chunks/nodes/{2.js-043RuGl0.js → 2.js-C8rwGPl3.js} +4 -4
  23. package/package.json +1 -1
  24. package/build/client/_app/immutable/chunks/B5GSQvZ-.js +0 -1
  25. package/build/client/_app/immutable/chunks/D25JjSwh.js +0 -1
  26. package/build/client/_app/immutable/entry/start.B82JjWXe.js +0 -1
  27. package/build/server/chunks/nodes/1.js-Dv0mcT1C.js +0 -9
@@ -1 +1 @@
1
- {"version":"1790337423419"}
1
+ {"version":"1790387602090"}
package/build/handler.js CHANGED
@@ -2,9 +2,9 @@ import './shims.js';
2
2
  import 'node:fs';
3
3
  import 'node:path';
4
4
  import 'node:process';
5
- export { h as handler } from './server/chunks/handler-C29GDWFA.js';
6
- import './server/chunks/index.js-CzsX25WI.js';
7
- import './server/chunks/manifest.js-BKlTd1KI.js';
5
+ export { h as handler } from './server/chunks/handler-DjgkfjqU.js';
6
+ import './server/chunks/index.js-DAuFLIFQ.js';
7
+ import './server/chunks/manifest.js-9-1nxrAa.js';
8
8
  import './env.js';
9
9
  import 'node:buffer';
10
10
  import 'node:crypto';
@@ -16,7 +16,7 @@ import './server/chunks/chunks/shared.js-HQ0rfhm4.js';
16
16
  import './server/chunks/chunks/uneval.js-BJ9Qq2SF.js';
17
17
  import './server/chunks/chunks/utils.js-CAdNO8Tu.js';
18
18
  import 'node:url';
19
- import './server/chunks/chunks/internal.js-CiAyaHU8.js';
19
+ import './server/chunks/chunks/internal.js-D8oISUTm.js';
20
20
  import './server/chunks/chunks/server.js-11-pxAWV.js';
21
21
  import './server/chunks/chunks/internal2.js-BcS47nI-.js';
22
22
  import './server/chunks/chunks/exports.js-DH_tjtdv.js';
package/build/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import http from 'node:http';
2
2
  import fs__default from 'node:fs';
3
3
  import process from 'node:process';
4
- import { p as polka, h as handler, f as format_listening_address } from './server/chunks/handler-C29GDWFA.js';
4
+ import { p as polka, h as handler, f as format_listening_address } from './server/chunks/handler-DjgkfjqU.js';
5
5
  import { env, timeout_env } from './env.js';
6
6
  import { rm } from 'node:fs/promises';
7
7
  import './shims.js';
@@ -14,12 +14,12 @@ import 'node:stream';
14
14
  import './server/chunks/chunks/shared.js-HQ0rfhm4.js';
15
15
  import './server/chunks/chunks/uneval.js-BJ9Qq2SF.js';
16
16
  import './server/chunks/chunks/utils.js-CAdNO8Tu.js';
17
- import './server/chunks/index.js-CzsX25WI.js';
18
- import './server/chunks/chunks/internal.js-CiAyaHU8.js';
17
+ import './server/chunks/index.js-DAuFLIFQ.js';
18
+ import './server/chunks/chunks/internal.js-D8oISUTm.js';
19
19
  import './server/chunks/chunks/server.js-11-pxAWV.js';
20
20
  import './server/chunks/chunks/internal2.js-BcS47nI-.js';
21
21
  import './server/chunks/chunks/exports.js-DH_tjtdv.js';
22
- import './server/chunks/manifest.js-BKlTd1KI.js';
22
+ import './server/chunks/manifest.js-9-1nxrAa.js';
23
23
  import 'node:url';
24
24
 
25
25
  const path = env('SOCKET_PATH', false);
@@ -722,7 +722,7 @@ var options = {
722
722
  app: ({ head, body, assets, nonce, env }) => "<!doctype html>\n<html lang=\"%paraglide.locale%\">\n <head>\n <meta charset=\"utf-8\" />\n <link rel=\"icon\" href=\"" + assets + "/favicon.svg\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n " + head + "\n </head>\n <body data-sveltekit-preload-data=\"tap\">\n <div style=\"display: contents\">" + body + "</div>\n </body>\n</html>\n",
723
723
  error: error_template_default
724
724
  },
725
- version_hash: "1jgn7x0"
725
+ version_hash: "11vgwpn"
726
726
  };
727
727
  async function get_hooks() {
728
728
  let handle;
@@ -745,4 +745,4 @@ async function get_hooks() {
745
745
  }
746
746
 
747
747
  export { __commonJSMin as _, set_public_env as a, set_read_implementation as b, onDestroy as c, __exportAll as d, get_hooks as g, index_server_exports as i, options as o, public_env as p, read_implementation as r, set_private_env as s };
748
- //# sourceMappingURL=internal.js-CiAyaHU8.js.map
748
+ //# sourceMappingURL=internal.js-D8oISUTm.js.map
@@ -1,4 +1,4 @@
1
- import { i as index_server_exports } from './internal.js-CiAyaHU8.js';
1
+ import { i as index_server_exports } from './internal.js-D8oISUTm.js';
2
2
  import './shared.js-HQ0rfhm4.js';
3
3
  import './exports.js-DH_tjtdv.js';
4
4
  import { U as snapshot, J as getContext, G as noop } from './server.js-11-pxAWV.js';
@@ -303,4 +303,4 @@ var page = {
303
303
  };
304
304
 
305
305
  export { afterNavigate as a, backtoworkspace2 as b, replaceState as c, dshunreachable1 as d, currentLocale as e, page as p, reapednote1 as r, sessionnotfound2 as s, t, unexpectederror1 as u };
306
- //# sourceMappingURL=state.js-DDFKGUCM.js.map
306
+ //# sourceMappingURL=state.js-D6nZd_zN.js.map
@@ -1,7 +1,7 @@
1
1
  import { V as head, W as escape_html, y as derived } from '../../chunks/server.js-11-pxAWV.js';
2
- import { t, p as page, s as sessionnotfound2, r as reapednote1, d as dshunreachable1, u as unexpectederror1, b as backtoworkspace2 } from '../../chunks/state.js-DDFKGUCM.js';
2
+ import { t, p as page, s as sessionnotfound2, r as reapednote1, d as dshunreachable1, u as unexpectederror1, b as backtoworkspace2 } from '../../chunks/state.js-D6nZd_zN.js';
3
3
  import '../../chunks/uneval.js-BJ9Qq2SF.js';
4
- import '../../chunks/internal.js-CiAyaHU8.js';
4
+ import '../../chunks/internal.js-D8oISUTm.js';
5
5
  import '../../chunks/shared.js-HQ0rfhm4.js';
6
6
  import '../../chunks/exports.js-DH_tjtdv.js';
7
7
  import '../../chunks/config.js-B0w1-uCA.js';
@@ -40,4 +40,4 @@ function _error($$renderer, $$props) {
40
40
  }
41
41
 
42
42
  export { _error as default };
43
- //# sourceMappingURL=_error.svelte.js-CfEcN0a5.js.map
43
+ //# sourceMappingURL=_error.svelte.js-yH59g5II.js.map
@@ -1,4 +1,4 @@
1
- import { c as onDestroy, d as __exportAll } from '../../chunks/internal.js-CiAyaHU8.js';
1
+ import { c as onDestroy, d as __exportAll } from '../../chunks/internal.js-D8oISUTm.js';
2
2
  import { V as head, y as derived, X as bind_props, W as escape_html, Y as attr, Z as attr_style, _ as attr_class, x as setContext, $ as spread_props, a0 as attributes, a1 as clsx, a2 as ensure_array_like, a3 as element, J as getContext, a4 as stringify, a5 as html, F as run, a6 as props_id } from '../../chunks/server.js-11-pxAWV.js';
3
3
  import { U as UI_LOCALES } from '../../chunks/config.js-B0w1-uCA.js';
4
4
  import { m as mergeEntries, c as collapseSystemPromptEntries, t as truncate } from '../../chunks/dsh-events.js-CyvSb4O3.js';
@@ -7,7 +7,7 @@ import { b as applyKnobEvent, E as EMPTY_KNOBS, r as resolvePermission, l as loc
7
7
  import { D as DEFAULT_IMAGE_LIMITS } from '../../chunks/image-limits.js-CUdJ0f7r.js';
8
8
  import { a as appConfig, t as triggerMode, g as getTrigger, p as previewSegments, i as isValidTagWord, b as textPreviewOf, s as searchKey, c as shouldRecordPrompt, d as parseTagWords } from '../../chunks/app-config.svelte.js-BBPHOX4N.js';
9
9
  import { c as getLocale } from '../../chunks/runtime.js-CCJi3XaY.js';
10
- import { p as page, a as afterNavigate, t, c as replaceState, e as currentLocale, u as unexpectederror1, s as sessionnotfound2, r as reapednote1, d as dshunreachable1, b as backtoworkspace2 } from '../../chunks/state.js-DDFKGUCM.js';
10
+ import { p as page, a as afterNavigate, t, c as replaceState, e as currentLocale, u as unexpectederror1, s as sessionnotfound2, r as reapednote1, d as dshunreachable1, b as backtoworkspace2 } from '../../chunks/state.js-D6nZd_zN.js';
11
11
  import 'yaml';
12
12
  import 'html-to-image';
13
13
  import hljs from 'highlight.js/lib/core';
@@ -20022,6 +20022,56 @@ function LoadOlderSentinel($$renderer, $$props) {
20022
20022
  });
20023
20023
  }
20024
20024
  //#endregion
20025
+ //#region src/lib/utils/file-link.ts
20026
+ /**
20027
+ * file-link — pure predicates for transcript file links (File Link Intent
20028
+ * spec, 2026-09-25; ADR The File Link Intent D2/D4). No DOM, no I/O: the
20029
+ * sanitizer (markdown.ts) stays pure and the transcript handler stays
20030
+ * testable — this module is the shared layer both import.
20031
+ *
20032
+ * The CONFINEMENT authority is the host (workspace-tree/workspace-file
20033
+ * routes refuse outside-workspace reads); these predicates are a client
20034
+ * fast-fail, not a security boundary.
20035
+ */
20036
+ /** True when the segment escapes the workspace — never a real file. */
20037
+ function hasDotDotSegment(path) {
20038
+ return path.split("/").some((segment) => segment === "..");
20039
+ }
20040
+ /**
20041
+ * Normalize a file-link href to a workspace-relative path: strip a
20042
+ * leading './', collapse duplicate slashes, strip a single leading slash.
20043
+ * Returns null when the path escapes the workspace ('..' anywhere) or
20044
+ * normalizes to empty.
20045
+ */
20046
+ function normalizeFileLinkPath(href) {
20047
+ let value = href.trim().replace(/^\.\//, "").replace(/\/{2,}/g, "/");
20048
+ if (value.startsWith("/")) value = value.slice(1);
20049
+ if (value === "" || hasDotDotSegment(value)) return null;
20050
+ return value;
20051
+ }
20052
+ /**
20053
+ * The existence gate (ADR D3): probe the dirname via the confined tree
20054
+ * route and require the basename in the listing. Any refusal (404
20055
+ * missing/outside, 415, 502, transport) resolves false — the click
20056
+ * drops. Uses the injected fetch so tests mount the double.
20057
+ */
20058
+ async function workspaceFileExists(sessionId, path, fetchImpl = fetch) {
20059
+ const clean = path.split("#")[0];
20060
+ if (clean === "") return false;
20061
+ const slash = clean.lastIndexOf("/");
20062
+ const dir = slash === -1 ? "" : clean.slice(0, slash);
20063
+ const base = slash === -1 ? clean : clean.slice(slash + 1);
20064
+ try {
20065
+ const res = await fetchImpl(`/api/dsh/workspace-tree?sessionId=${encodeURIComponent(sessionId)}&path=${encodeURIComponent(dir)}`);
20066
+ if (!res.ok) return false;
20067
+ const body = await res.json();
20068
+ if (body?.ok !== true || !Array.isArray(body.listing?.entries)) return false;
20069
+ return body.listing.entries.some((entry) => entry.name === base);
20070
+ } catch {
20071
+ return false;
20072
+ }
20073
+ }
20074
+ //#endregion
20025
20075
  //#region src/lib/components/common/buttons/CopyButton.svelte
20026
20076
  function CopyButton($$renderer, $$props) {
20027
20077
  $$renderer.component(($$renderer) => {
@@ -20053,7 +20103,7 @@ function RawPreviewToggle($$renderer, $$props) {
20053
20103
  //#region src/lib/components/common/viewers/MarkdownContent.svelte
20054
20104
  function MarkdownContent($$renderer, $$props) {
20055
20105
  $$renderer.component(($$renderer) => {
20056
- let { content, small = false, hideToggle = false, searchTerm = "" } = $$props;
20106
+ let { content, small = false, hideToggle = false, searchTerm = "", onFileLink = void 0 } = $$props;
20057
20107
  let showRaw = false;
20058
20108
  let containerEl = null;
20059
20109
  /** Sanitized HTML — BC-12: allow-listed tags only (never raw input). */
@@ -23332,7 +23382,7 @@ function ConversationScrollArea($$renderer, $$props) {
23332
23382
  * The viewport element is $bindable: the page keeps it for the
23333
23383
  * floating anchor stack (jumper + back-to-top act on this scroller).
23334
23384
  */
23335
- let { viewport = void 0, stick = true, entries, groups, hasMore, loadingOlder, olderError, onloadolder, openChipId, ontogglechip, autoThinkId = null, autoPlanId = null, peekOpenRunKey, ontogglepeek, pendingCards, settledCards, onanswer, sessionId, title = null, agentPreset = null, subagent = false, depth = 0 } = $$props;
23385
+ let { viewport = void 0, stick = true, entries, groups, hasMore, loadingOlder, olderError, onloadolder, openChipId, ontogglechip, autoThinkId = null, autoPlanId = null, peekOpenRunKey, ontogglepeek, pendingCards, settledCards, onanswer, onFileLink = void 0, sessionId, title = null, agentPreset = null, subagent = false, depth = 0 } = $$props;
23336
23386
  /** Depth-graded sub-agent tints: beige at depth 1, one step darker
23337
23387
  * per nesting level, darkest from depth 3 on (the cap). */
23338
23388
  const SUBAGENT_TINTS = [
@@ -23513,7 +23563,8 @@ function ConversationScrollArea($$renderer, $$props) {
23513
23563
  $$renderer.push("<!--[0-->");
23514
23564
  MarkdownContent($$renderer, {
23515
23565
  content: run.entry.text,
23516
- hideToggle: true
23566
+ hideToggle: true,
23567
+ onFileLink
23517
23568
  });
23518
23569
  } else {
23519
23570
  $$renderer.push("<!--[-1-->");
@@ -23541,7 +23592,8 @@ function ConversationScrollArea($$renderer, $$props) {
23541
23592
  $$renderer.push("<!--[0-->");
23542
23593
  MarkdownContent($$renderer, {
23543
23594
  content: run.entry.text,
23544
- hideToggle: true
23595
+ hideToggle: true,
23596
+ onFileLink
23545
23597
  });
23546
23598
  } else {
23547
23599
  $$renderer.push("<!--[-1-->");
@@ -23570,7 +23622,8 @@ function ConversationScrollArea($$renderer, $$props) {
23570
23622
  $$renderer.push("<!--[0-->");
23571
23623
  MarkdownContent($$renderer, {
23572
23624
  content: run.entry.text,
23573
- hideToggle: true
23625
+ hideToggle: true,
23626
+ onFileLink
23574
23627
  });
23575
23628
  } else {
23576
23629
  $$renderer.push("<!--[-1-->");
@@ -25741,7 +25794,7 @@ function ConversationPanel($$renderer, $$props) {
25741
25794
  * existing command banner. Catalog reads fire on first menu open,
25742
25795
  * never at mount (cold sessions stay cold).
25743
25796
  */
25744
- let { panelId = null, sessionId, title: initialTitleProp = null, workspace = null, workspaces = [], agent, agentDisplay = null, subagent = false, depth = 0, parentSessionId = null, entries, lastSeq, running, hasMore = void 0, pendingAnswers = [], settledAnswers = [], permission = null, imageLimits = void 0, knobEvents = void 0, a2aRows = [], a2aTitles = {}, onNeedCold = void 0, onClose = void 0, focusComposer = false, oncomposerfocus = void 0, focused = false, onOpenExplorer = void 0 } = $$props;
25797
+ let { panelId = null, sessionId, title: initialTitleProp = null, workspace = null, workspaces = [], agent, agentDisplay = null, subagent = false, depth = 0, parentSessionId = null, entries, lastSeq, running, hasMore = void 0, pendingAnswers = [], settledAnswers = [], permission = null, imageLimits = void 0, knobEvents = void 0, a2aRows = [], a2aTitles = {}, onNeedCold = void 0, onClose = void 0, focusComposer = false, oncomposerfocus = void 0, focused = false, onOpenExplorer = void 0, onFileLink = void 0 } = $$props;
25745
25798
  setPanelMode(true);
25746
25799
  setConversationSession(sessionId);
25747
25800
  const store = createConversationStore(sessionId);
@@ -26147,6 +26200,7 @@ function ConversationPanel($$renderer, $$props) {
26147
26200
  pendingCards: pendingCards(),
26148
26201
  settledCards: settledCards(),
26149
26202
  onanswer: (rpcId, payload) => void onanswer(rpcId, payload),
26203
+ onFileLink,
26150
26204
  sessionId: store.sessionId,
26151
26205
  title,
26152
26206
  agentPreset: agent,
@@ -27363,7 +27417,7 @@ function WorkspaceExplorerTree($$renderer, $$props) {
27363
27417
  */
27364
27418
  /** One listing row (workspaceFiles/list WorkspaceDirectoryEntry). */
27365
27419
  /** Viewing state for one fetched level (owner-held, never persisted). */
27366
- let { root, levels, expanded, repoMaps, changedPaths, changedDirs} = $$props;
27420
+ let { root, levels, expanded, repoMaps, changedPaths, changedDirs, activeFile = null } = $$props;
27367
27421
  /** The row's child rel path (the listing's names are basenames). */
27368
27422
  function childRel(rel, name) {
27369
27423
  return rel === "" ? name : rel + "/" + name;
@@ -27383,7 +27437,8 @@ function WorkspaceExplorerTree($$renderer, $$props) {
27383
27437
  const isRepoChild = dir && repoMaps[rel]?.repos?.[entry.name] === true;
27384
27438
  const isChanged = !dir && changedPaths.has(childRel(rel, entry.name));
27385
27439
  const isHotDir = dir && changedDirs.has(childRel(rel, entry.name));
27386
- $$renderer.push(`<li role="treeitem" aria-selected="false"${attr("aria-expanded", dir ? isOpen : void 0)} class="row-line svelte-hbtlo6">`);
27440
+ const isActive = activeFile !== null && activeFile === child;
27441
+ $$renderer.push(`<li role="treeitem"${attr("aria-selected", isActive)}${attr("aria-expanded", dir ? isOpen : void 0)}${attr_class("row-line svelte-hbtlo6", void 0, { "active": isActive })}>`);
27387
27442
  if (dir) {
27388
27443
  $$renderer.push("<!--[0-->");
27389
27444
  $$renderer.push(`<button${attr_class("row dir svelte-hbtlo6", void 0, {
@@ -27457,7 +27512,7 @@ function WorkspaceExplorerTree($$renderer, $$props) {
27457
27512
  } else $$renderer.push("<!--[-1-->");
27458
27513
  $$renderer.push(`<!--]--></li>`);
27459
27514
  }
27460
- $$renderer.push(`<ul data-svelte="WorkspaceExplorerTree" class="tree svelte-hbtlo6" role="tree"${attr("aria-label", workspacePanelCopy.explorer.title + ": " + root)}><!--[-->`);
27515
+ $$renderer.push(`<ul data-svelte="WorkspaceExplorerTree" class="tree svelte-hbtlo6" role="tree"${attr("aria-label", workspacePanelCopy.explorer.title + ": " + root)}${attr("data-active-file", activeFile ?? "")}><!--[-->`);
27461
27516
  const each_array_1 = ensure_array_like(sorted(levels[""]?.kind === "ready" ? levels[""].entries : []));
27462
27517
  for (let $$index = 0, $$length = each_array_1.length; $$index < $$length; $$index++) {
27463
27518
  let entry = each_array_1[$$index];
@@ -27582,7 +27637,7 @@ function WorkspaceExplorer($$renderer, $$props) {
27582
27637
  * never scroll itself; the scroll lives on .tree-scroll so the toolbar
27583
27638
  * stays pinned (the toolbar-scrolls-away bug).
27584
27639
  */
27585
- let { root, activeTab, levels, expanded, repoMaps, changedPaths, changedDirs, changesRepos, changesStatuses, collapsedRepos} = $$props;
27640
+ let { root, activeTab, levels, expanded, repoMaps, changedPaths, changedDirs, activeFile = null, changesRepos, changesStatuses, collapsedRepos} = $$props;
27586
27641
  $$renderer.push(`<div data-svelte="WorkspaceExplorer" class="explorer svelte-1l3v1je">`);
27587
27642
  WorkspaceExplorerToolbar($$renderer, {
27588
27643
  activeTab});
@@ -27605,7 +27660,9 @@ function WorkspaceExplorer($$renderer, $$props) {
27605
27660
  expanded,
27606
27661
  repoMaps,
27607
27662
  changedPaths,
27608
- changedDirs});
27663
+ changedDirs,
27664
+ activeFile
27665
+ });
27609
27666
  $$renderer.push(`<!----></div>`);
27610
27667
  }
27611
27668
  $$renderer.push(`<!--]--></div>`);
@@ -28403,6 +28460,7 @@ function WorkspaceExplorerPanel($$renderer, $$props) {
28403
28460
  const splitPct = derived(() => clampTreePct(treePct));
28404
28461
  $$renderer.push(`<div data-svelte="WorkspaceExplorerPanel" data-testid="workspace-explorer" class="split svelte-v4uero"${attr_style(`--tree-basis: ${stringify(splitPct())}%; --file-basis: ${stringify(100 - splitPct())}%`)}>`);
28405
28462
  WorkspaceExplorer($$renderer, {
28463
+ activeFile,
28406
28464
  root,
28407
28465
  activeTab: activeTab(),
28408
28466
  levels,
@@ -29152,6 +29210,24 @@ function _page($$renderer, $$props) {
29152
29210
  const host = sessionWorkspaceExplorer(sessionId);
29153
29211
  if (host) publishFileIntent(host.id, path);
29154
29212
  }
29213
+ /** File Link Intent (ADR 2026-09-25 D3): a transcript file link publishes
29214
+ * ONLY after the tree route proves the file exists inside the session's
29215
+ * workspace — the gate lives in the shared util; anything else drops the
29216
+ * click. No navigation ever happens. */
29217
+ async function openFileLinkFromMarkdown(sessionId, rawHref) {
29218
+ const path = normalizeFileLinkPath(rawHref);
29219
+ console.log("[FLINK] click", sessionId, rawHref, "->", path);
29220
+ if (path === null) return;
29221
+ const exists = await workspaceFileExists(sessionId, path);
29222
+ console.log("[FLINK] exists:", exists);
29223
+ if (!exists) return;
29224
+ if (!sessionWorkspaceExplorer(sessionId)) {
29225
+ const root = panelWorkspaceFor(sessionId);
29226
+ if (!root) return;
29227
+ openWorkspaceExplorer(sessionId, root);
29228
+ }
29229
+ openWorkspaceFile(sessionId, path);
29230
+ }
29155
29231
  const seedData = page.data;
29156
29232
  const seedCold = seedData && typeof seedData.sessionId === "string" && Array.isArray(seedData.entries) ? {
29157
29233
  title: seedData.title ?? null,
@@ -29583,6 +29659,7 @@ function _page($$renderer, $$props) {
29583
29659
  ConversationPanel($$renderer, {
29584
29660
  panelId: floorPanelId,
29585
29661
  sessionId: p.sessionId,
29662
+ onFileLink: (href) => void openFileLinkFromMarkdown(p.sessionId, href),
29586
29663
  title: panelTitleFor(p.sessionId),
29587
29664
  workspace: panelWorkspaceFor(p.sessionId),
29588
29665
  workspaces: spineWorkspaces(),
@@ -29615,6 +29692,7 @@ function _page($$renderer, $$props) {
29615
29692
  ConversationPanel($$renderer, {
29616
29693
  panelId: floorPanelId,
29617
29694
  sessionId: p.sessionId,
29695
+ onFileLink: (href) => void openFileLinkFromMarkdown(p.sessionId, href),
29618
29696
  title: panelTitleFor(p.sessionId),
29619
29697
  workspace: panelWorkspaceFor(p.sessionId),
29620
29698
  workspaces: spineWorkspaces(),
@@ -29731,4 +29809,4 @@ function _page($$renderer, $$props) {
29731
29809
  }
29732
29810
 
29733
29811
  export { _page as default };
29734
- //# sourceMappingURL=_page.svelte.js-5qYAGNkZ.js.map
29812
+ //# sourceMappingURL=_page.svelte.js-Be_p_N6K.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-CzsX25WI.js';
13
- import { m as manifest } from './manifest.js-BKlTd1KI.js';
12
+ import { S as Server } from './index.js-DAuFLIFQ.js';
13
+ import { m as manifest } from './manifest.js-9-1nxrAa.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-C29GDWFA.js.map
1735
+ //# sourceMappingURL=handler-DjgkfjqU.js.map
@@ -1,4 +1,4 @@
1
- import { _ as __commonJSMin, 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/internal.js-CiAyaHU8.js';
1
+ import { _ as __commonJSMin, 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/internal.js-D8oISUTm.js';
2
2
  import { n as noop, T as TRAILING_SLASH_PARAM, I as INVALIDATED_PARAM, R as Redirect, b as get_relative_path, S as SvelteKitError, g as get_status, t as text_encoder, o as once, H as HttpError, d as normalize_error, e as create_remote_key, f as parse_remote_arg, s as stringify, h as stringify$1, A as ActionFailure, i as split_remote_key, j as base64_encode } from './chunks/shared.js-HQ0rfhm4.js';
3
3
  import { b as base, o as override, a as assets, r as reset, c as app_dir } from './chunks/internal2.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';
@@ -3861,4 +3861,4 @@ var Server = class {
3861
3861
  };
3862
3862
 
3863
3863
  export { Server as S };
3864
- //# sourceMappingURL=index.js-CzsX25WI.js.map
3864
+ //# sourceMappingURL=index.js-DAuFLIFQ.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.B82JjWXe.js",app:"_app/immutable/entry/app.JnGE9QaY.js",imports:["_app/immutable/entry/start.B82JjWXe.js","_app/immutable/chunks/D07HHvcI.js","_app/immutable/chunks/C-58cZAk.js","_app/immutable/entry/app.JnGE9QaY.js","_app/immutable/chunks/C-58cZAk.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.DsdVwQ2P.js",app:"_app/immutable/entry/app.DM-WIZa8.js",imports:["_app/immutable/entry/start.DsdVwQ2P.js","_app/immutable/chunks/ZTD3u9Qg.js","_app/immutable/chunks/C-58cZAk.js","_app/immutable/entry/app.DM-WIZa8.js","_app/immutable/chunks/C-58cZAk.js","_app/immutable/chunks/HclGiUj8.js","_app/immutable/chunks/xihTtKlq.js"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},
14
14
  nodes: [
15
15
  __memo(() => import('./nodes/0.js-D1vjUdTF.js')),
16
- __memo(() => import('./nodes/1.js-Dv0mcT1C.js')),
17
- __memo(() => import('./nodes/2.js-043RuGl0.js'))
16
+ __memo(() => import('./nodes/1.js-CBSPs58f.js')),
17
+ __memo(() => import('./nodes/2.js-C8rwGPl3.js'))
18
18
  ],
19
19
  remotes: {
20
20
 
@@ -424,4 +424,4 @@ return {
424
424
  })();
425
425
 
426
426
  export { manifest as m };
427
- //# sourceMappingURL=manifest.js-BKlTd1KI.js.map
427
+ //# sourceMappingURL=manifest.js-9-1nxrAa.js.map
@@ -0,0 +1,9 @@
1
+ const index = 1;
2
+ let component_cache;
3
+ const component = async () => component_cache ??= (await import('../entries/pages/_error.svelte.js-yH59g5II.js')).default;
4
+ const imports = ["_app/immutable/nodes/1.CSG0CVRN.js","_app/immutable/chunks/C-58cZAk.js","_app/immutable/chunks/xihTtKlq.js","_app/immutable/chunks/Cvfdkz5B.js","_app/immutable/chunks/ZTD3u9Qg.js","_app/immutable/chunks/DlfWhx6l.js"];
5
+ const stylesheets = [];
6
+ const fonts = [];
7
+
8
+ export { component, fonts, imports, index, stylesheets };
9
+ //# sourceMappingURL=1.js-CBSPs58f.js.map
@@ -17,11 +17,11 @@ import '../chunks/uneval.js-BJ9Qq2SF.js';
17
17
 
18
18
  const index = 2;
19
19
  let component_cache;
20
- const component = async () => component_cache ??= (await import('../entries/pages/_page.svelte.js-5qYAGNkZ.js')).default;
20
+ const component = async () => component_cache ??= (await import('../entries/pages/_page.svelte.js-Be_p_N6K.js')).default;
21
21
  const server_id = "src/routes/+page.server.ts";
22
- const imports = ["_app/immutable/nodes/2.ChfcYWGA.js","_app/immutable/chunks/C-58cZAk.js","_app/immutable/chunks/D07HHvcI.js","_app/immutable/chunks/HclGiUj8.js","_app/immutable/chunks/xihTtKlq.js","_app/immutable/chunks/DlfWhx6l.js","_app/immutable/chunks/DsZdPfqt.js","_app/immutable/chunks/B53Y9F3N.js"];
23
- const stylesheets = ["_app/immutable/assets/2.DEfYr14g.css"];
22
+ const imports = ["_app/immutable/nodes/2.CWJBqz9q.js","_app/immutable/chunks/C-58cZAk.js","_app/immutable/chunks/ZTD3u9Qg.js","_app/immutable/chunks/HclGiUj8.js","_app/immutable/chunks/xihTtKlq.js","_app/immutable/chunks/DlfWhx6l.js","_app/immutable/chunks/DsZdPfqt.js","_app/immutable/chunks/Cvfdkz5B.js"];
23
+ const stylesheets = ["_app/immutable/assets/2.B2TMGoNC.css"];
24
24
  const fonts = [];
25
25
 
26
26
  export { component, fonts, imports, index, server_id, stylesheets };
27
- //# sourceMappingURL=2.js-043RuGl0.js.map
27
+ //# sourceMappingURL=2.js-C8rwGPl3.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deepseek-insight/dsi",
3
- "version": "0.5.34",
3
+ "version": "0.5.36",
4
4
  "description": "See your multiple agents run on the floor (agent, sub-agent, etc), each conversation on the floor are updated instantly.",
5
5
  "keywords": [
6
6
  "Deepseek",
@@ -1 +0,0 @@
1
- import{H as e}from"../nodes/2.ChfcYWGA.js";export{e as startPanelResize};
@@ -1 +0,0 @@
1
- import{r as e}from"../nodes/2.ChfcYWGA.js";export{e as stringify};
@@ -1 +0,0 @@
1
- import{o as e,r as t}from"../chunks/D07HHvcI.js";export{e as load_css,t as start};
@@ -1,9 +0,0 @@
1
- const index = 1;
2
- let component_cache;
3
- const component = async () => component_cache ??= (await import('../entries/pages/_error.svelte.js-CfEcN0a5.js')).default;
4
- const imports = ["_app/immutable/nodes/1.DibfLi2p.js","_app/immutable/chunks/C-58cZAk.js","_app/immutable/chunks/xihTtKlq.js","_app/immutable/chunks/B53Y9F3N.js","_app/immutable/chunks/D07HHvcI.js","_app/immutable/chunks/DlfWhx6l.js"];
5
- const stylesheets = [];
6
- const fonts = [];
7
-
8
- export { component, fonts, imports, index, stylesheets };
9
- //# sourceMappingURL=1.js-Dv0mcT1C.js.map