{"_id":"@asuka1121/dsh-client-ui-elasticsearch","_rev":"4-946eee62afabc8d8d2b96fc83d99d695","name":"@asuka1121/dsh-client-ui-elasticsearch","dist-tags":{"latest":"0.2.1"},"versions":{"0.1.0":{"name":"@asuka1121/dsh-client-ui-elasticsearch","version":"0.1.0","license":"MIT","_id":"@asuka1121/dsh-client-ui-elasticsearch@0.1.0","maintainers":[{"name":"asuka1121","email":"asuka011121@gmail.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"ea61048eb38c2b045077f5cdd9c2ec3e9c421803","tarball":"https://registry.npmjs.org/@asuka1121/dsh-client-ui-elasticsearch/-/dsh-client-ui-elasticsearch-0.1.0.tgz","fileCount":13,"integrity":"sha512-sx+o1MonoVRZ1yAjRxoV82o65f1huJ/XkjGCuQlOdDV9ywYpr/6VjjWvqSVGUMhNrjSqJf6wgwOwex4jqEUdJw==","signatures":[{"sig":"MEUCIDvjL1bF+oANO2HO2mLveSoFs9u9am3X3nli47uo6sQSAiEAl0cOSuPjNzHarTzn2SiDMnn32xVQ8iOnLk5gDOM7Vbg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61765},"main":"lib/index.js","type":"module","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"},"./invariant":{"types":"./lib/types/invariant.d.ts","default":"./lib/invariant.js"},"./package.json":"./package.json"},"_npmUser":{"name":"asuka1121","email":"asuka011121@gmail.com"},"_npmVersion":"11.17.0","description":"Elasticsearch connection settings for DeepSeek Harness: shared settings section (URIs/username/password) plus the es_query_logs model tool","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"*","@deepseek-ai/dsh-tools":"*","@deepseek-ai/schemastery":"*","@deepseek-ai/dsh-settings":"*","@deepseek-ai/dsh-invariants":"*","@deepseek-ai/dsh-api-remotes":"*","@deepseek-ai/dsh-client-locale":"*","@deepseek-ai/dsh-client-runtime":"*","@deepseek-ai/dsh-client-ui-slots":"*","@deepseek-ai/dsh-client-connection":"*","@deepseek-ai/dsh-client-ui-settings":"*"},"_npmOperationalInternal":{"tmp":"tmp/dsh-client-ui-elasticsearch_0.1.0_1786974549837_0.18724335853985763","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@asuka1121/dsh-client-ui-elasticsearch","version":"0.1.1","license":"MIT","_id":"@asuka1121/dsh-client-ui-elasticsearch@0.1.1","maintainers":[{"name":"asuka1121","email":"asuka011121@gmail.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"f084faf2cbd5ae792732986631afdebd5c4e6b50","tarball":"https://registry.npmjs.org/@asuka1121/dsh-client-ui-elasticsearch/-/dsh-client-ui-elasticsearch-0.1.1.tgz","fileCount":13,"integrity":"sha512-3HuZV5HkO7BDw9RM+TKn/Trj5rMDlQHRxUk++NMhuWlJPMmFgiU5bS5QKC1MDILMab4cM7LRQ89exrag7z7XBA==","signatures":[{"sig":"MEUCIQDOIoBCGGBryj3arSEOcLodykz1lb3oDgqiRv2YCISGPgIgQ1DgkMd0MFGgTJPGGtx9D2GZOKIUa6fAQd4a7IkY2Jo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62854},"main":"lib/index.js","type":"module","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"},"./invariant":{"types":"./lib/types/invariant.d.ts","default":"./lib/invariant.js"},"./package.json":"./package.json"},"_npmUser":{"name":"asuka1121","email":"asuka011121@gmail.com"},"_npmVersion":"11.17.0","description":"Elasticsearch connection settings for DeepSeek Harness: shared settings section (URIs/username/password) plus the es_query_logs model tool","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"*","@deepseek-ai/dsh-tools":"*","@deepseek-ai/schemastery":"*","@deepseek-ai/dsh-settings":"*","@deepseek-ai/dsh-invariants":"*","@deepseek-ai/dsh-api-remotes":"*","@deepseek-ai/dsh-client-locale":"*","@deepseek-ai/dsh-system-prompt":"*","@deepseek-ai/dsh-client-runtime":"*","@deepseek-ai/dsh-client-ui-slots":"*","@deepseek-ai/dsh-client-connection":"*","@deepseek-ai/dsh-client-ui-settings":"*"},"_npmOperationalInternal":{"tmp":"tmp/dsh-client-ui-elasticsearch_0.1.1_1786975119441_0.29092100424408907","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@asuka1121/dsh-client-ui-elasticsearch","version":"0.2.0","license":"MIT","_id":"@asuka1121/dsh-client-ui-elasticsearch@0.2.0","maintainers":[{"name":"asuka1121","email":"asuka011121@gmail.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"ca679501ff67f82e30718e6b7760902326285b50","tarball":"https://registry.npmjs.org/@asuka1121/dsh-client-ui-elasticsearch/-/dsh-client-ui-elasticsearch-0.2.0.tgz","fileCount":13,"integrity":"sha512-YmGJZJNMCozOsJcK0XCz5HWqepIFGAzRVB+xJjY0VoX+stuyDjo/yR8XQ5kKZpY06PQo1XT0xl2eXyjsLAohaw==","signatures":[{"sig":"MEUCIQC7xmgInjKcUMR3odszgmQCFTLrJntm49Km1/iZ3VT5YQIgCOZyywaVrqoVsfhbAxFYb+p+4iK4Dd0uD8hicHyCRXs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66856},"main":"lib/index.js","type":"module","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"},"./invariant":{"types":"./lib/types/invariant.d.ts","default":"./lib/invariant.js"},"./package.json":"./package.json"},"_npmUser":{"name":"asuka1121","email":"asuka011121@gmail.com"},"_npmVersion":"11.17.0","description":"Elasticsearch connection settings for DeepSeek Harness: shared settings section (URIs/username/password) plus the es_query_logs model tool","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"*","@deepseek-ai/dsh-tools":"*","@deepseek-ai/schemastery":"*","@deepseek-ai/dsh-settings":"*","@deepseek-ai/dsh-invariants":"*","@deepseek-ai/dsh-api-remotes":"*","@deepseek-ai/dsh-client-locale":"*","@deepseek-ai/dsh-system-prompt":"*","@deepseek-ai/dsh-client-runtime":"*","@deepseek-ai/dsh-client-ui-slots":"*","@deepseek-ai/dsh-client-connection":"*","@deepseek-ai/dsh-client-ui-settings":"*"},"_npmOperationalInternal":{"tmp":"tmp/dsh-client-ui-elasticsearch_0.2.0_1787574501231_0.46804851850206286","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@asuka1121/dsh-client-ui-elasticsearch","description":"Elasticsearch connection settings for DeepSeek Harness: shared settings section (URIs/username/password) plus the es_query_logs model tool","version":"0.2.1","publishConfig":{"access":"public"},"license":"MIT","type":"module","main":"lib/index.js","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./invariant":{"types":"./lib/types/invariant.d.ts","default":"./lib/invariant.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./package.json":"./package.json"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"peerDependencies":{"@deepseek-ai/cordis":"*","@deepseek-ai/dsh-api-remotes":"*","@deepseek-ai/dsh-client-connection":"*","@deepseek-ai/dsh-client-locale":"*","@deepseek-ai/dsh-client-runtime":"*","@deepseek-ai/dsh-client-ui-settings":"*","@deepseek-ai/dsh-client-ui-slots":"*","@deepseek-ai/dsh-invariants":"*","@deepseek-ai/dsh-settings":"*","@deepseek-ai/dsh-system-prompt":"*","@deepseek-ai/dsh-tools":"*","@deepseek-ai/schemastery":"*","react":"^18.2.0"},"gitHead":"96594b7b8fc8acfaf01cc767f563faad4f36a8c5","_id":"@asuka1121/dsh-client-ui-elasticsearch@0.2.1","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-V6uVwJIDX6aa8s8ghX48pLYP0TzX5J2CDw4UEu9zACi9n2i09hVYF2ws+ShT/3iihIzAaY9A6B8kMMf/EkM+Nw==","shasum":"4d73385ae9bdc75a9bba8fcfb564244198a76687","tarball":"https://registry.npmjs.org/@asuka1121/dsh-client-ui-elasticsearch/-/dsh-client-ui-elasticsearch-0.2.1.tgz","fileCount":15,"unpackedSize":72774,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDqQwIQ2SdpQqQXQU24gptYHGTKekwvqkndL5rRyDz79AIgI/kNQscxWwsopFzXaBBq8CK/UC88JoiMdnvJejmgGFE="}]},"_npmUser":{"name":"asuka1121","email":"asuka011121@gmail.com"},"directories":{},"maintainers":[{"name":"asuka1121","email":"asuka011121@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-client-ui-elasticsearch_0.2.1_1788158563139_0.4862028314394118"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-17T13:49:09.724Z","modified":"2026-08-31T06:42:43.444Z","0.1.0":"2026-08-17T13:49:10.007Z","0.1.1":"2026-08-17T13:58:39.598Z","0.2.0":"2026-08-24T12:28:21.370Z","0.2.1":"2026-08-31T06:42:43.272Z"},"license":"MIT","description":"Elasticsearch connection settings for DeepSeek Harness: shared settings section (URIs/username/password) plus the es_query_logs model tool","maintainers":[{"name":"asuka1121","email":"asuka011121@gmail.com"}],"readme":"# dsh-client-ui-elasticsearch\n\n> [English](README.md) | 中文\n\n一个 DeepSeek Harness 插件：在 Settings 中新增 **Elasticsearch** 设置页，并提供 Host 侧模型工具 `es_query_logs`。\n\n- **Settings → Elasticsearch**：配置 `uris`（每行一个）、`username`、`password`。配置写入共享的 DSH 设置文档，跨会话共享。\n- **`es_query_logs` 工具**：按 `trace_id` 精确检索，**和/或**通过 `query` 用自然语言检索（匹配 `message`、`exception` 等日志文本字段），支持可选 `fields`、`index`、`size`。复用上述连接配置。\n- **自动指引**：系统提示词中自动注入「给了 trace_id 或问日志内容就用 `es_query_logs`」，无需专门 Agent 预设。\n\n## 安装\n\n```sh\ndsh plugin --profile web add @asuka1121/dsh-client-ui-elasticsearch@latest\n```\n\n重启部署即可。包声明了 `dsh.bundle.patch`，`dsh plugin` 会自动注册为 profile bundle。\n\n> 需要 pnpm 在 `PATH` 上。插件的 `@deepseek-ai/*` 运行时依赖以 peerDependencies 方式从 DSH 安装中解析，共享同一份 Cordis 实例。\n\n## 工具\n\n`es_query_logs` 参数：\n\n| 参数 | 类型 | 必填 | 默认 | 说明 |\n| ---- | ---- | ---- | ---- | ---- |\n| `query` | string | 否* | — | 自然语言检索词，匹配日志文本字段（如 `\"connection refused\"`、`\"NullPointerException\"`） |\n| `trace_id` | string | 否* | — | 精确 trace id，检索 trace 字段 |\n| `fields` | string[] | 否 | 常用日志文本字段 | `query` 匹配的显式字段列表；**不支持通配符** |\n| `index` | string | 否 | `*` | 索引模式 |\n| `size` | integer | 否 | `100` | 最大命中数，上限 500 |\n\n\\* `query` 与 `trace_id` 至少提供其一。\n\n- `trace_id` 对 `trace_id`、`trace.id`、`traceId`、`traceID` 做精确 `term` 查询。\n- `query` 对解析后的字段做 `multi_match`（best_fields），避免通配符字段展开在宽索引上报错。\n- 两者同时使用会先按 trace 收敛、再按内容过滤；结果按 `@timestamp` 倒序，依次尝试每个配置的 URI。\n\n## 完整安装 / 使用说明\n\n新电脑安装流程、可选 Agent 预设（es-log-assistant）、常见问题排查见 [INSTALL.md](INSTALL.md)。\n\n## 许可\n\nMIT\n\n## 开发\n\n编译产物 `lib/` 随仓库分发，可直接从目录安装。从源码构建需要\n[deepseek-harness](https://github.com/deepseek-ai/deepseek-harness) monorepo：\n`tsdown.config.ts` 引用了 `packages/client/tsdown.client.ts` 的 `clientBundle` 预设。\nnpm 发布包（`@asuka1121/dsh-client-ui-elasticsearch`）是规范的构建产物。\n\n## 未来计划\n\n**愿景。** 日志检索插件的真正价值在于「关联」：不只是找到日志，而是把每条日志都溯源到产生它的项目代码。长期目标正是实现这种「日志 → 代码」的可追溯分析。\n\n**当前边界。** 目前 Agent 只能把日志与本地工作区做关联。代码侧集成暂缓——等 dsh 官方开放远程/网络工作区访问（例如绑定 `0.0.0.0`）再启动；Agent 够不到的工作区，做代码关联没有意义。\n\n**待解难点：代码获取。** 目前的设想是在**服务器端**按需拉取：每次询问前，根据日志里的 `app_name` 克隆对应项目，让答案自包含、始终基于最新代码。但为每个应用保存完整克隆的存储开销太大，正在评估更轻量的方案：浅/部分克隆、只懒加载 trace 命中的相关文件、缓存与淘汰策略等。\n","readmeFilename":"README.zh.md"}