{"_id":"@akshaydev17/dsh-history-question-nav-english","name":"@akshaydev17/dsh-history-question-nav-english","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@akshaydev17/dsh-history-question-nav-english","version":"1.0.0","description":"DSH web plugin: a right-side question navigator for the current session. Lists every user question and scrolls to the matching message on click.","type":"module","main":"lib/index.js","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./cordis.patch.yml":"./cordis.patch.yml","./package.json":"./package.json"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web"}},"keywords":["dsh","deepseek-harness","plugin","web","question-navigator"],"license":"MIT","_id":"@akshaydev17/dsh-history-question-nav-english@1.0.0","gitHead":"913cffe7803f79c80eabe2de6942d7da3d8630c3","_nodeVersion":"22.22.3","_npmVersion":"10.9.8","dist":{"integrity":"sha512-OvhqYrWdEaJaB34SaGDe3JA4ymHtm00cu1dh+6Bbp78vnrcBrhcvm7liSs4LRVzoRhKf/f7btB63WlKBUxrVQA==","shasum":"680e6a55742d8d109bcd479681e962f902b4b552","tarball":"https://registry.npmjs.org/@akshaydev17/dsh-history-question-nav-english/-/dsh-history-question-nav-english-1.0.0.tgz","fileCount":7,"unpackedSize":15136,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICJBWtOF6plnETRWAAfTGnIgpst5oIHOjnc5hR/HV2VTAiBDy1L3Rp74F1w/LEmqzKiCnPvd/YJX5umRl0+L8+XHjA=="}]},"_npmUser":{"name":"akshaydev17","email":"akshayprabhakant@gmail.com"},"directories":{},"maintainers":[{"name":"akshaydev17","email":"akshayprabhakant@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-history-question-nav-english_1.0.0_1788206258897_0.033404486154901214"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-31T19:57:38.703Z","1.0.0":"2026-08-31T19:57:39.038Z","modified":"2026-08-31T19:57:39.324Z"},"maintainers":[{"name":"akshaydev17","email":"akshayprabhakant@gmail.com"}],"description":"DSH web plugin: a right-side question navigator for the current session. Lists every user question and scrolls to the matching message on click.","keywords":["dsh","deepseek-harness","plugin","web","question-navigator"],"license":"MIT","readme":"# @akshaydev17/dsh-history-question-nav-english\n\nA DeepSeek Harness **Web client plugin**: lists every question you've asked in the current session in a panel on the right side of the window; clicking any entry smoothly scrolls the conversation to the matching position (the question bubble briefly highlights).\n\n- A persistent \"Questions\" panel on the right lists all user questions in the current session, in conversation order.\n- Click a question → the conversation scrolls to that question's position and briefly highlights it.\n- The panel can be collapsed into a small \"Questions\" button in the top-right corner.\n- Follows the current session: switching sessions automatically swaps the list to that session's questions.\n- **English UI**: registers the `question-nav-english` locale namespace, so all panel copy renders in English regardless of the DSH language setting.\n\n![Right-side question panel](docs/fig1.png)\n\n## Directory structure\n\n```\ndsh-history-question-nav/\n├── package.json          # dsh.bundle.patch + dsh.client.platform = \"web\"\n├── cordis.patch.yml      # profile patch layer: inserts this plugin's row\n├── lib/\n│   ├── index.js          # host half (deliberately empty)\n│   ├── client.js         # browser half (window.__ModuleLoader__.load bundle format)\n│   └── types/            # minimal d.ts declarations\n└── README.md\n```\n\nThe client half depends only on `react`, which the shell already provides (no `dsh.client.external` needed). It registers into the layout's framework-level overlay via `ctx.slots.inject(\"shell.overlay\", ...)`, reads the current session's conversation snapshot through `ctx.sessions.binding(currentId)`, and registers its copy via `ctx.locale.register(\"question-nav-english\", ...)`, rendering through the `t` prop in the component.\n\n## Install\n\n```sh\ndsh plugin --profile web add @akshaydev17/dsh-history-question-nav-english\n```\n\n`dsh plugin` will: ① `pnpm add` the dependency; ② detect that this package declares `dsh.bundle` and automatically add it to the profile's `bundles` layer, so the `cordis.patch.yml` insert row takes effect. Then restart the web service and refresh the page:\n\n```sh\ndsh web\n```\n\n> pnpm must be installed locally (`dsh plugin` manages dependencies through it).\n\n## Manual install (without `dsh plugin`)\n\n1. Put this directory under the profile's `node_modules` and add `@akshaydev17/dsh-history-question-nav-english`\n   to the `dependencies` of the profile's `package.json`.\n2. Merge the contents of `cordis.patch.yml` into the profile's `cordis.patch.yml`, or add\n   `@akshaydev17/dsh-history-question-nav-english` to `dsh.profile.bundles` directly.\n3. Restart `dsh web` and refresh the page.\n\n\n## How it works\n\n- `shell.overlay` is a framework-level overlay declared by `ui-layout` (additive list, root scope);\n  this plugin registers its panel into it, with `pointer-events:auto` so the panel is interactive while the rest stays click-through.\n- The current session id comes from the global standard hook `useSessions(s => s.current)`; the session's conversation\n  snapshot is obtained via the injected `ctx.sessions` using `binding(id).session`, subscribed through\n  `useSyncExternalStore`.\n- The question list comes from `ConversationSnapshot.chat` (`order` + `nodes.get(key)`), filtered by\n  `kind === \"user\"`; each chat node carries a `data-chat-anchor-key` attribute in the DOM. On click, the element\n  is located by that key, then a smooth scroll is performed on the `[data-conversation-scroll]` scroll container.\n","readmeFilename":"README.md","_rev":"1-ca02ebf6fb3fdb22f717ae4549126d93"}