dsh-zotero 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 (94) hide show
  1. package/README.en.md +11 -8
  2. package/README.md +11 -8
  3. package/lib/ask.d.ts +27 -1
  4. package/lib/ask.d.ts.map +1 -1
  5. package/lib/ask.js +61 -19
  6. package/lib/ask.js.map +1 -1
  7. package/lib/client.js +22 -12
  8. package/lib/client.js.map +2 -2
  9. package/lib/command.d.ts.map +1 -1
  10. package/lib/command.js +2 -1
  11. package/lib/command.js.map +1 -1
  12. package/lib/concurrency.d.ts +40 -1
  13. package/lib/concurrency.d.ts.map +1 -1
  14. package/lib/concurrency.js +101 -1
  15. package/lib/concurrency.js.map +1 -1
  16. package/lib/config.d.ts +1 -1
  17. package/lib/config.d.ts.map +1 -1
  18. package/lib/constants.d.ts +35 -0
  19. package/lib/constants.d.ts.map +1 -1
  20. package/lib/constants.js +35 -0
  21. package/lib/constants.js.map +1 -1
  22. package/lib/contract.d.ts +2 -0
  23. package/lib/contract.d.ts.map +1 -1
  24. package/lib/contract.js +1 -0
  25. package/lib/contract.js.map +1 -1
  26. package/lib/errors.d.ts +13 -1
  27. package/lib/errors.d.ts.map +1 -1
  28. package/lib/errors.js +17 -0
  29. package/lib/errors.js.map +1 -1
  30. package/lib/evidence.d.ts +9 -4
  31. package/lib/evidence.d.ts.map +1 -1
  32. package/lib/evidence.js +13 -6
  33. package/lib/evidence.js.map +1 -1
  34. package/lib/http-client.d.ts +34 -0
  35. package/lib/http-client.d.ts.map +1 -1
  36. package/lib/http-client.js +132 -13
  37. package/lib/http-client.js.map +1 -1
  38. package/lib/local/changes-domain.d.ts +37 -10
  39. package/lib/local/changes-domain.d.ts.map +1 -1
  40. package/lib/local/changes-domain.js +385 -114
  41. package/lib/local/changes-domain.js.map +1 -1
  42. package/lib/local/limits.d.ts +1 -1
  43. package/lib/local/limits.d.ts.map +1 -1
  44. package/lib/local/provider.d.ts.map +1 -1
  45. package/lib/local/provider.js +2 -1
  46. package/lib/local/provider.js.map +1 -1
  47. package/lib/local/retrieve.d.ts +9 -2
  48. package/lib/local/retrieve.d.ts.map +1 -1
  49. package/lib/local/retrieve.js +184 -41
  50. package/lib/local/retrieve.js.map +1 -1
  51. package/lib/local/search-domain.d.ts.map +1 -1
  52. package/lib/local/search-domain.js +25 -26
  53. package/lib/local/search-domain.js.map +1 -1
  54. package/lib/prompt.js +1 -1
  55. package/lib/prompt.js.map +1 -1
  56. package/lib/remote.d.ts.map +1 -1
  57. package/lib/remote.js +1 -0
  58. package/lib/remote.js.map +1 -1
  59. package/lib/search-text.d.ts +29 -0
  60. package/lib/search-text.d.ts.map +1 -0
  61. package/lib/search-text.js +79 -0
  62. package/lib/search-text.js.map +1 -0
  63. package/lib/service.d.ts +9 -0
  64. package/lib/service.d.ts.map +1 -1
  65. package/lib/service.js +9 -0
  66. package/lib/service.js.map +1 -1
  67. package/lib/tools/attachment.d.ts.map +1 -1
  68. package/lib/tools/attachment.js +20 -3
  69. package/lib/tools/attachment.js.map +1 -1
  70. package/lib/tools/browse.js +1 -1
  71. package/lib/tools/browse.js.map +1 -1
  72. package/lib/tools/changes.d.ts +177 -14
  73. package/lib/tools/changes.d.ts.map +1 -1
  74. package/lib/tools/changes.js +218 -62
  75. package/lib/tools/changes.js.map +1 -1
  76. package/lib/tools/children.js +1 -1
  77. package/lib/tools/children.js.map +1 -1
  78. package/lib/tools/export.js +1 -1
  79. package/lib/tools/export.js.map +1 -1
  80. package/lib/tools/get.js +1 -1
  81. package/lib/tools/get.js.map +1 -1
  82. package/lib/tools/retrieve.d.ts +57 -1
  83. package/lib/tools/retrieve.d.ts.map +1 -1
  84. package/lib/tools/retrieve.js +92 -18
  85. package/lib/tools/retrieve.js.map +1 -1
  86. package/lib/tools/search.js +1 -1
  87. package/lib/tools/search.js.map +1 -1
  88. package/lib/tools/validate.d.ts +7 -0
  89. package/lib/tools/validate.d.ts.map +1 -1
  90. package/lib/tools/validate.js +13 -0
  91. package/lib/tools/validate.js.map +1 -1
  92. package/lib/types.d.ts +191 -8
  93. package/lib/types.d.ts.map +1 -1
  94. package/package.json +1 -1
package/README.en.md CHANGED
@@ -78,20 +78,23 @@ The agent calls tools step by step during a conversation. Each result becomes co
78
78
 
79
79
  ```text
80
80
  User: Find papers about Risk
81
- Agent → zotero_search(query: "Risk", itemType: "journalArticle")
81
+ Agent → zotero_search(query: "Risk", itemTypes: ["journalArticle"])
82
82
  5 matches; user picks the first 3
83
83
 
84
84
  User: What does the first one's abstract say?
85
- Agent → zotero_get(ref: 1, fields: ["abstractNote"])
86
- Returns the full abstract
85
+ Agent → zotero_get(ref: "zotero://user/0/item/ABCD1234")
86
+ Returns the full abstract (the standard model carries it)
87
87
 
88
88
  User: Find the methodology discussion in this paper
89
- Agent → zotero_retrieve(query: "methodology", sources: ["fulltext", "notes"])
89
+ Agent → zotero_retrieve(ref: "zotero://user/0/item/ABCD1234", query: "methodology",
90
+ sources: ["fulltext", "note"])
90
91
  Returns relevant passages with page numbers
91
92
 
92
93
  User: Export all three as BibTeX
93
- Agent → zotero_export(refs: [1,2,3], format: "bibtex")
94
- Generates BibTeX entries, ready to copy or download
94
+ Agent → zotero_export(refs: ["zotero://user/0/item/ABCD1234",
95
+ "zotero://user/0/item/EFGH5678",
96
+ "zotero://user/0/item/IJKL9012"], format: "bibtex")
97
+ Generates BibTeX entries; the UI can download them, the model reads the same text
95
98
  ```
96
99
 
97
100
  More examples in [Features](docs/features.md).
@@ -101,7 +104,7 @@ More examples in [Features](docs/features.md).
101
104
  - **Read-only library**: all operations are reads; items, notes, tags, and collections are unchanged
102
105
  - **Loopback only**: network requests go only to `127.0.0.1:23119`
103
106
  - **Evidence ranking is term-based**: BM25 ranks passages by query-term frequency match
104
- - **Exports are static text**: returned as text, ready to copy into your target document
107
+ - **Exports are static text**: the tool returns text, and that is what the model reads; the Zotero panel offers one-click copy or file download (`.bib`, `.ris`, `.json`), so nothing has to be retyped
105
108
  - **Full-text evidence depends on Zotero's index**: unindexed PDFs yield no full-text passages
106
109
  - **Attachment depth depends on the harness**: `zotero_attachment` returns the file location; reading the PDF further needs a matching host capability
107
110
 
@@ -120,7 +123,7 @@ More examples in [Features](docs/features.md).
120
123
  | [Getting Started](docs/getting-started.md) | Installation, prerequisites, first verification |
121
124
  | [Features](docs/features.md) | Sources panel, chat integration, evidence, exports |
122
125
  | [Tool Reference](docs/tools.md) | Parameters, return values, error codes for all 8 tools |
123
- | [Configuration](docs/configuration.md) | 21 config fields, defaults, hot-reload |
126
+ | [Configuration](docs/configuration.md) | 22 config fields, defaults, hot-reload |
124
127
  | [Architecture](docs/architecture.md) | Data flow, layer responsibilities, design boundaries |
125
128
  | [Development](docs/development.md) | Build, test, local development |
126
129
  | [Troubleshooting](docs/troubleshooting.md) | 11 common issues with symptoms and fixes |
package/README.md CHANGED
@@ -78,20 +78,23 @@ Agent 在对话中根据用户需求逐步调用工具,每次调用的结果
78
78
 
79
79
  ```text
80
80
  用户:帮我找 Risk 相关的论文
81
- Agent → zotero_search(query: "Risk", itemType: "journalArticle")
81
+ Agent → zotero_search(query: "Risk", itemTypes: ["journalArticle"])
82
82
  5 篇匹配结果,用户选择前 3 篇
83
83
 
84
84
  用户:第一篇的摘要说了什么?
85
- Agent → zotero_get(ref: 1, fields: ["abstractNote"])
86
- 返回摘要全文
85
+ Agent → zotero_get(ref: "zotero://user/0/item/ABCD1234")
86
+ 返回摘要全文(标准模型已含 abstract)
87
87
 
88
88
  用户:这篇里关于方法论的讨论,帮我找出来
89
- Agent → zotero_retrieve(query: "methodology", sources: ["fulltext", "notes"])
89
+ Agent → zotero_retrieve(ref: "zotero://user/0/item/ABCD1234", query: "methodology",
90
+ sources: ["fulltext", "note"])
90
91
  返回相关段落,带页码和来源
91
92
 
92
93
  用户:把这三篇导出为 BibTeX
93
- Agent → zotero_export(refs: [1,2,3], format: "bibtex")
94
- 生成 BibTeX 条目,可复制或下载
94
+ Agent → zotero_export(refs: ["zotero://user/0/item/ABCD1234",
95
+ "zotero://user/0/item/EFGH5678",
96
+ "zotero://user/0/item/IJKL9012"], format: "bibtex")
97
+ 生成 BibTeX 条目;界面可下载,模型读到同样的文本
95
98
  ```
96
99
 
97
100
  更多示例见 [功能概览](docs/features.md)。
@@ -101,7 +104,7 @@ Agent → zotero_export(refs: [1,2,3], format: "bibtex")
101
104
  - **只读文献库**:所有操作均为读取,不修改条目、笔记、标签或分类
102
105
  - **只访问本机**:网络请求仅发往 `127.0.0.1:23119`
103
106
  - **证据排序是词项相关性**:基于 BM25,按查询词与 passage 的词频匹配度排序
104
- - **导出是静态文本**:以文本形式返回,需要手动复制到目标位置
107
+ - **导出是静态文本**:工具以文本形式返回,模型读到的就是它;Zotero 面板可以一键复制或下载文件(`.bib` / `.ris` / `.json` 等),不需要手动誊抄
105
108
  - **全文证据依赖 Zotero 索引**:未索引的 PDF 无法提供全文段落
106
109
  - **附件深度取决于宿主**:`zotero_attachment` 返回文件位置,继续阅读 PDF 需要宿主具备对应能力
107
110
 
@@ -120,7 +123,7 @@ Agent → zotero_export(refs: [1,2,3], format: "bibtex")
120
123
  | [快速上手](docs/getting-started.md) | 安装、前置条件、首次验证 |
121
124
  | [功能概览](docs/features.md) | 来源面板、对话集成、证据提取、导出 |
122
125
  | [工具参考](docs/tools.md) | 全部 8 个工具的参数、返回值、错误码 |
123
- | [配置](docs/configuration.md) | 21 个配置字段、默认值、热更新 |
126
+ | [配置](docs/configuration.md) | 22 个配置字段、默认值、热更新 |
124
127
  | [架构](docs/architecture.md) | 数据流、各层职责、设计边界 |
125
128
  | [开发指南](docs/development.md) | 构建、测试、本地开发 |
126
129
  | [问题排查](docs/troubleshooting.md) | 11 个常见问题的症状和处理 |
package/lib/ask.d.ts CHANGED
@@ -17,11 +17,37 @@ import type { Context } from '@deepseek-ai/cordis';
17
17
  import { type ToolRunContext } from '@deepseek-ai/dsh-tools';
18
18
  /** The parts of a tool execution `withConnectivityAsk` needs. */
19
19
  type ConnectivityAskExec = Pick<ToolRunContext, 'signal' | 'agent'>;
20
+ /**
21
+ * One recovery conversation per failure kind, owned by one plugin instance.
22
+ *
23
+ * Tool calls run concurrently, and a Zotero that is down fails all of them:
24
+ * five parallel reads used to put five identical cards in front of the user,
25
+ * each one demanding the same answer. The gate keeps one ask per failure
26
+ * kind in flight and lets every other caller wait on that same answer, so a
27
+ * single card decides for all of them — and each caller then retries, or
28
+ * does not, on its own request. The entry is dropped as soon as the question
29
+ * settles, so a later failure asks again instead of inheriting a stale
30
+ * answer.
31
+ */
32
+ export declare class ConnectivityRecovery {
33
+ private readonly asking;
34
+ /**
35
+ * Answer one failure kind, asking only when no question for it is in
36
+ * flight.
37
+ * @param code - the failure kind the question belongs to.
38
+ * @param question - the ask to run when this caller is the first; resolves
39
+ * true when the user chose to retry.
40
+ * @returns the answer this caller acts on.
41
+ */
42
+ ask(code: string, question: () => Promise<boolean>): Promise<boolean>;
43
+ }
20
44
  /**
21
45
  * Run one Zotero request; on a connectivity failure, ask the user how to
22
46
  * proceed and retry at most once when they choose the recommended action.
23
47
  * @param ctx - the plugin context; the question service is looked up
24
48
  * optionally, so headless compositions skip the ask.
49
+ * @param recovery - the instance's recovery gate: callers that failed the
50
+ * same way share one question instead of stacking identical cards.
25
51
  * @param exec - the tool execution (signal and agent) the failure belongs to.
26
52
  * @param run - the request to attempt; must be re-runnable with identical
27
53
  * arguments, because the retry path calls it a second time.
@@ -30,6 +56,6 @@ type ConnectivityAskExec = Pick<ToolRunContext, 'signal' | 'agent'>;
30
56
  * does not choose to retry, the question itself fails, or the retry
31
57
  * fails again.
32
58
  */
33
- export declare function withConnectivityAsk<T>(ctx: Context, exec: ConnectivityAskExec, run: () => Promise<T>): Promise<T>;
59
+ export declare function withConnectivityAsk<T>(ctx: Context, recovery: ConnectivityRecovery, exec: ConnectivityAskExec, run: () => Promise<T>): Promise<T>;
34
60
  export {};
35
61
  //# sourceMappingURL=ask.d.ts.map
package/lib/ask.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ask.d.ts","sourceRoot":"","sources":["../src/ask.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAyB1E,iEAAiE;AACjE,KAAK,mBAAmB,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAA;AA2EnE;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,mBAAmB,EACzB,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACpB,OAAO,CAAC,CAAC,CAAC,CAgCZ"}
1
+ {"version":3,"file":"ask.d.ts","sourceRoot":"","sources":["../src/ask.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAA;AA0B1E,iEAAiE;AACjE,KAAK,mBAAmB,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAA;AA2EnE;;;;;;;;;;;GAWG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsC;IAE7D;;;;;;;OAOG;IACG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CAW5E;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,oBAAoB,EAC9B,IAAI,EAAE,mBAAmB,EACzB,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACpB,OAAO,CAAC,CAAC,CAAC,CAmCZ"}
package/lib/ask.js CHANGED
@@ -15,6 +15,7 @@
15
15
  */
16
16
  import { HarnessError } from '@deepseek-ai/dsh-llm';
17
17
  import { TOOL_ABORTED } from '@deepseek-ai/dsh-tools';
18
+ import { ZOTERO_LOCAL_API_VERSION } from './constants.js';
18
19
  import { ZOTERO_API_DISABLED, ZOTERO_API_VERSION, ZOTERO_NOT_RUNNING, ZOTERO_TIMEOUT, ZoteroError, } from './errors.js';
19
20
  /** The connectivity failure codes that warrant asking the user how to proceed. */
20
21
  const ASK_WORTHY_CODES = [
@@ -46,10 +47,10 @@ const FAILURE_SPECS = {
46
47
  abortDescription: ABORT_DESCRIPTION,
47
48
  },
48
49
  [ZOTERO_API_VERSION]: {
49
- header: 'Zotero version too old',
50
- question: 'The running Zotero does not speak local API version 3, which this plugin requires.',
51
- detail: 'Upgrade Zotero to a version whose local API supports version 3.',
52
- retryLabel: 'I upgraded Zotero, retry (Recommended)',
50
+ header: 'Zotero and this plugin share no API version',
51
+ question: `The running Zotero does not implement local API version ${ZOTERO_LOCAL_API_VERSION}, which this plugin requires.`,
52
+ detail: `Upgrade Zotero to a version whose local API supports version ${ZOTERO_LOCAL_API_VERSION} — or update dsh-zotero if the running Zotero is newer than this plugin line.`,
53
+ retryLabel: 'I fixed the version, retry (Recommended)',
53
54
  retryDescription: RETRY_DESCRIPTION,
54
55
  abortLabel: ABORT_LABEL,
55
56
  abortDescription: ABORT_DESCRIPTION,
@@ -79,11 +80,49 @@ function questionOf(spec) {
79
80
  ],
80
81
  };
81
82
  }
83
+ /**
84
+ * One recovery conversation per failure kind, owned by one plugin instance.
85
+ *
86
+ * Tool calls run concurrently, and a Zotero that is down fails all of them:
87
+ * five parallel reads used to put five identical cards in front of the user,
88
+ * each one demanding the same answer. The gate keeps one ask per failure
89
+ * kind in flight and lets every other caller wait on that same answer, so a
90
+ * single card decides for all of them — and each caller then retries, or
91
+ * does not, on its own request. The entry is dropped as soon as the question
92
+ * settles, so a later failure asks again instead of inheriting a stale
93
+ * answer.
94
+ */
95
+ export class ConnectivityRecovery {
96
+ asking = new Map();
97
+ /**
98
+ * Answer one failure kind, asking only when no question for it is in
99
+ * flight.
100
+ * @param code - the failure kind the question belongs to.
101
+ * @param question - the ask to run when this caller is the first; resolves
102
+ * true when the user chose to retry.
103
+ * @returns the answer this caller acts on.
104
+ */
105
+ async ask(code, question) {
106
+ const inFlight = this.asking.get(code);
107
+ if (inFlight !== undefined)
108
+ return await inFlight;
109
+ const answer = question();
110
+ this.asking.set(code, answer);
111
+ try {
112
+ return await answer;
113
+ }
114
+ finally {
115
+ this.asking.delete(code);
116
+ }
117
+ }
118
+ }
82
119
  /**
83
120
  * Run one Zotero request; on a connectivity failure, ask the user how to
84
121
  * proceed and retry at most once when they choose the recommended action.
85
122
  * @param ctx - the plugin context; the question service is looked up
86
123
  * optionally, so headless compositions skip the ask.
124
+ * @param recovery - the instance's recovery gate: callers that failed the
125
+ * same way share one question instead of stacking identical cards.
87
126
  * @param exec - the tool execution (signal and agent) the failure belongs to.
88
127
  * @param run - the request to attempt; must be re-runnable with identical
89
128
  * arguments, because the retry path calls it a second time.
@@ -92,7 +131,7 @@ function questionOf(spec) {
92
131
  * does not choose to retry, the question itself fails, or the retry
93
132
  * fails again.
94
133
  */
95
- export async function withConnectivityAsk(ctx, exec, run) {
134
+ export async function withConnectivityAsk(ctx, recovery, exec, run) {
96
135
  try {
97
136
  return await run();
98
137
  }
@@ -103,14 +142,23 @@ export async function withConnectivityAsk(ctx, exec, run) {
103
142
  if (questions === undefined)
104
143
  throw error;
105
144
  const spec = FAILURE_SPECS[error.code];
106
- let answer;
145
+ let retry;
107
146
  try {
108
- const request = {
109
- questions: [questionOf(spec)],
110
- ...(exec.agent !== undefined ? { agent: exec.agent } : {}),
111
- signal: exec.signal,
112
- };
113
- answer = await questions.ask(request);
147
+ retry = await recovery.ask(error.code, async () => {
148
+ const request = {
149
+ questions: [questionOf(spec)],
150
+ ...(exec.agent !== undefined ? { agent: exec.agent } : {}),
151
+ signal: exec.signal,
152
+ };
153
+ const answer = await questions.ask(request);
154
+ const answerItem = answer.answers.find((item) => item.id === 'zotero-failure');
155
+ // Matched by label string because the answer protocol carries only
156
+ // selected labels (no stable option ids); the labels are code
157
+ // constants (FAILURE_SPECS), never i18n copy, so a rename breaks the
158
+ // build's contract visibly in one place. Revisit if the protocol
159
+ // gains option ids.
160
+ return (answerItem?.selected ?? []).includes(spec.retryLabel);
161
+ });
114
162
  }
115
163
  catch {
116
164
  // A failed question (no provider, aborted ask, delegated caller) must
@@ -119,13 +167,7 @@ export async function withConnectivityAsk(ctx, exec, run) {
119
167
  throw new HarnessError('tool call aborted', TOOL_ABORTED);
120
168
  throw error;
121
169
  }
122
- const answerItem = answer.answers.find((item) => item.id === 'zotero-failure');
123
- const selected = answerItem?.selected ?? [];
124
- // Matched by label string because the answer protocol carries only
125
- // selected labels (no stable option ids); the labels are code constants
126
- // (FAILURE_SPECS), never i18n copy, so a rename breaks the build's
127
- // contract visibly in one place. Revisit if the protocol gains option ids.
128
- if (!selected.includes(spec.retryLabel))
170
+ if (!retry)
129
171
  throw error;
130
172
  // Outside the catch: a second failure propagates as-is, never re-asking.
131
173
  return await run();
package/lib/ask.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ask.js","sourceRoot":"","sources":["../src/ask.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ask.js","sourceRoot":"","sources":["../src/ask.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAuB,MAAM,wBAAwB,CAAA;AAO1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AACzD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,WAAW,GACZ,MAAM,aAAa,CAAA;AAEpB,kFAAkF;AAClF,MAAM,gBAAgB,GAAG;IACvB,kBAAkB;IAClB,mBAAmB;IACnB,kBAAkB;IAClB,cAAc;CACN,CAAA;AAkBV,MAAM,WAAW,GAAG,kBAAkB,CAAA;AACtC,MAAM,iBAAiB,GAAG,kEAAkE,CAAA;AAC5F,MAAM,iBAAiB,GAAG,gDAAgD,CAAA;AAE1E,MAAM,aAAa,GAAuC;IACxD,CAAC,kBAAkB,CAAC,EAAE;QACpB,MAAM,EAAE,uBAAuB;QAC/B,QAAQ,EAAE,yEAAyE;QACnF,MAAM,EACJ,yHAAyH;QAC3H,UAAU,EAAE,uCAAuC;QACnD,gBAAgB,EAAE,iBAAiB;QACnC,UAAU,EAAE,WAAW;QACvB,gBAAgB,EAAE,iBAAiB;KACpC;IACD,CAAC,mBAAmB,CAAC,EAAE;QACrB,MAAM,EAAE,8BAA8B;QACtC,QAAQ,EAAE,6DAA6D;QACvE,MAAM,EACJ,8GAA8G;QAChH,UAAU,EAAE,8CAA8C;QAC1D,gBAAgB,EAAE,iBAAiB;QACnC,UAAU,EAAE,WAAW;QACvB,gBAAgB,EAAE,iBAAiB;KACpC;IACD,CAAC,kBAAkB,CAAC,EAAE;QACpB,MAAM,EAAE,6CAA6C;QACrD,QAAQ,EAAE,2DAA2D,wBAAwB,+BAA+B;QAC5H,MAAM,EAAE,gEAAgE,wBAAwB,+EAA+E;QAC/K,UAAU,EAAE,0CAA0C;QACtD,gBAAgB,EAAE,iBAAiB;QACnC,UAAU,EAAE,WAAW;QACvB,gBAAgB,EAAE,iBAAiB;KACpC;IACD,CAAC,cAAc,CAAC,EAAE;QAChB,MAAM,EAAE,kBAAkB;QAC1B,QAAQ,EAAE,iFAAiF;QAC3F,MAAM,EAAE,kDAAkD;QAC1D,UAAU,EAAE,qBAAqB;QACjC,gBAAgB,EAAE,6BAA6B;QAC/C,UAAU,EAAE,WAAW;QACvB,gBAAgB,EAAE,iBAAiB;KACpC;CACF,CAAA;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,OAAQ,gBAAsC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;AAC/D,CAAC;AAED,SAAS,UAAU,CAAC,IAAiB;IACnC,OAAO;QACL,EAAE,EAAE,gBAAgB;QACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE;YAC9D,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE;SAC/D;KACF,CAAA;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,oBAAoB;IACd,MAAM,GAAG,IAAI,GAAG,EAA4B,CAAA;IAE7D;;;;;;;OAOG;IACH,KAAK,CAAC,GAAG,CAAC,IAAY,EAAE,QAAgC;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACtC,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,MAAM,QAAQ,CAAA;QACjD,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAA;QACzB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAC7B,IAAI,CAAC;YACH,OAAO,MAAM,MAAM,CAAA;QACrB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAC1B,CAAC;IACH,CAAC;CACF;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,GAAY,EACZ,QAA8B,EAC9B,IAAyB,EACzB,GAAqB;IAErB,IAAI,CAAC;QACH,OAAO,MAAM,GAAG,EAAE,CAAA;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,MAAM,KAAK,CAAA;QAChF,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,eAAe,CAAoC,CAAA;QAC7E,IAAI,SAAS,KAAK,SAAS;YAAE,MAAM,KAAK,CAAA;QACxC,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACtC,IAAI,KAAc,CAAA;QAClB,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;gBAChD,MAAM,OAAO,GAA2B;oBACtC,SAAS,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBAC7B,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC1D,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB,CAAA;gBACD,MAAM,MAAM,GAA0B,MAAM,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gBAClE,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,gBAAgB,CAAC,CAAA;gBAC9E,mEAAmE;gBACnE,8DAA8D;gBAC9D,qEAAqE;gBACrE,iEAAiE;gBACjE,oBAAoB;gBACpB,OAAO,CAAC,UAAU,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAC/D,CAAC,CAAC,CAAA;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,sEAAsE;YACtE,kDAAkD;YAClD,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO;gBAAE,MAAM,IAAI,YAAY,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAA;YACnF,MAAM,KAAK,CAAA;QACb,CAAC;QACD,IAAI,CAAC,KAAK;YAAE,MAAM,KAAK,CAAA;QACvB,yEAAyE;QACzE,OAAO,MAAM,GAAG,EAAE,CAAA;IACpB,CAAC;AACH,CAAC"}
package/lib/client.js CHANGED
@@ -40,7 +40,7 @@ if (typeof document !== "undefined" && !document.querySelector('style[data-plugi
40
40
  tag.textContent = style;
41
41
  document.head.appendChild(tag);
42
42
  }
43
- var fields_default = { "hint": "gONAZG_hint", "head": "gONAZG_head", "label": "gONAZG_label", "reset": "gONAZG_reset", "inputInvalid": "gONAZG_inputInvalid", "field": "gONAZG_field", "toggle": "gONAZG_toggle", "input": "gONAZG_input", "badges": "gONAZG_badges", "invalid": "gONAZG_invalid", "toggleRow": "gONAZG_toggleRow", "toggleLabel": "gONAZG_toggleLabel" };
43
+ var fields_default = { "field": "gONAZG_field", "reset": "gONAZG_reset", "inputInvalid": "gONAZG_inputInvalid", "input": "gONAZG_input", "hint": "gONAZG_hint", "toggleLabel": "gONAZG_toggleLabel", "label": "gONAZG_label", "badges": "gONAZG_badges", "invalid": "gONAZG_invalid", "head": "gONAZG_head", "toggle": "gONAZG_toggle", "toggleRow": "gONAZG_toggleRow" };
44
44
 
45
45
  // src/client/fields.tsx
46
46
  var import_jsx_runtime = require("react/jsx-runtime");
@@ -410,7 +410,7 @@ if (typeof document !== "undefined" && !document.querySelector('style[data-plugi
410
410
  tag.textContent = style2;
411
411
  document.head.appendChild(tag);
412
412
  }
413
- var ZoteroSettingsForm_default = { "fields": "iz3HHa_fields", "groupTitle": "iz3HHa_groupTitle", "group": "iz3HHa_group" };
413
+ var ZoteroSettingsForm_default = { "groupTitle": "iz3HHa_groupTitle", "group": "iz3HHa_group", "fields": "iz3HHa_fields" };
414
414
 
415
415
  // src/client/ZoteroSettingsForm.tsx
416
416
  var import_jsx_runtime2 = require("react/jsx-runtime");
@@ -471,7 +471,7 @@ if (typeof document !== "undefined" && !document.querySelector('style[data-plugi
471
471
  tag.textContent = style3;
472
472
  document.head.appendChild(tag);
473
473
  }
474
- var ZoteroSettingsSection_default = { "page": "_33OGJa_page", "pending": "_33OGJa_pending", "status": "_33OGJa_status", "failed": "_33OGJa_failed", "title": "_33OGJa_title", "discard": "_33OGJa_discard", "footer": "_33OGJa_footer", "head": "_33OGJa_head", "save": "_33OGJa_save", "description": "_33OGJa_description" };
474
+ var ZoteroSettingsSection_default = { "status": "_33OGJa_status", "failed": "_33OGJa_failed", "page": "_33OGJa_page", "title": "_33OGJa_title", "pending": "_33OGJa_pending", "head": "_33OGJa_head", "description": "_33OGJa_description", "footer": "_33OGJa_footer", "discard": "_33OGJa_discard", "save": "_33OGJa_save" };
475
475
 
476
476
  // src/client/ZoteroSettingsSection.tsx
477
477
  var import_jsx_runtime3 = require("react/jsx-runtime");
@@ -1444,10 +1444,10 @@ var import_dsh_client_ui_primitives3 = require("@deepseek-ai/dsh-client-ui-primi
1444
1444
 
1445
1445
  // src/client/build-info.ts
1446
1446
  function buildVersion() {
1447
- return true ? "0.8.2" : "unknown";
1447
+ return true ? "0.8.3" : "unknown";
1448
1448
  }
1449
1449
  function buildCommit() {
1450
- return true ? "ace2a66" : "unknown";
1450
+ return true ? "a3ed7f6" : "unknown";
1451
1451
  }
1452
1452
  function buildInfoOf() {
1453
1453
  return `${buildVersion()} \xB7 ${buildCommit()}`;
@@ -1471,7 +1471,7 @@ if (typeof document !== "undefined" && !document.querySelector('style[data-plugi
1471
1471
  tag.textContent = style4;
1472
1472
  document.head.appendChild(tag);
1473
1473
  }
1474
- var workspace_default = { "lensBar": "_o1AEW_lensBar", "listItemTitle": "_o1AEW_listItemTitle", "emptyWrap": "_o1AEW_emptyWrap", "panel": "_o1AEW_panel", "inspectorMeta": "_o1AEW_inspectorMeta", "passages": "_o1AEW_passages", "cardStack": "_o1AEW_cardStack", "filterBar": "_o1AEW_filterBar", "inspectorHead": "_o1AEW_inspectorHead", "inspectorTitleWrap": "_o1AEW_inspectorTitleWrap", "sectionLabel": "_o1AEW_sectionLabel", "passage": "_o1AEW_passage", "emptyText": "_o1AEW_emptyText", "detailTab": "_o1AEW_detailTab", "lensTab": "_o1AEW_lensTab", "evidenceEntry": "_o1AEW_evidenceEntry", "empty": "_o1AEW_empty", "passageHead": "_o1AEW_passageHead", "filterArrowLeft": "_o1AEW_filterArrowLeft", "starterRow": "_o1AEW_starterRow", "lensTabCount": "_o1AEW_lensTabCount", "spacer": "_o1AEW_spacer", "backAction": "_o1AEW_backAction", "evidencePage": "_o1AEW_evidencePage", "actionRow": "_o1AEW_actionRow", "listbox": "_o1AEW_listbox", "inspectorBody": "_o1AEW_inspectorBody", "inspectorTitle": "_o1AEW_inspectorTitle", "emptyNote": "_o1AEW_emptyNote", "listItemMeta": "_o1AEW_listItemMeta", "section": "_o1AEW_section", "summaryLine": "_o1AEW_summaryLine", "filterArrow": "_o1AEW_filterArrow", "warning": "_o1AEW_warning", "availability": "_o1AEW_availability", "toolbar": "_o1AEW_toolbar", "diagnosis": "_o1AEW_diagnosis", "filterArrowRight": "_o1AEW_filterArrowRight", "badges": "_o1AEW_badges", "view": "_o1AEW_view", "refresh": "_o1AEW_refresh", "detailTabActive": "_o1AEW_detailTabActive", "detailTabCount": "_o1AEW_detailTabCount", "lensTabActive": "_o1AEW_lensTabActive", "sidebar": "_o1AEW_sidebar", "listItemSelected": "_o1AEW_listItemSelected", "inspectorTabs": "_o1AEW_inspectorTabs", "workspace": "_o1AEW_workspace", "badge": "_o1AEW_badge", "detailToggle": "_o1AEW_detailToggle", "filterClear": "_o1AEW_filterClear", "listItem": "_o1AEW_listItem", "exportsPage": "_o1AEW_exportsPage", "statusText": "_o1AEW_statusText", "line": "_o1AEW_line", "sourceTag": "_o1AEW_sourceTag", "note": "_o1AEW_note", "exportStack": "_o1AEW_exportStack", "menuButton": "_o1AEW_menuButton", "emptyIcon": "_o1AEW_emptyIcon", "inspector": "_o1AEW_inspector", "action": "_o1AEW_action" };
1474
+ var workspace_default = { "filterArrow": "_o1AEW_filterArrow", "summaryLine": "_o1AEW_summaryLine", "lensTabCount": "_o1AEW_lensTabCount", "filterBar": "_o1AEW_filterBar", "listItemMeta": "_o1AEW_listItemMeta", "filterClear": "_o1AEW_filterClear", "passages": "_o1AEW_passages", "workspace": "_o1AEW_workspace", "detailTab": "_o1AEW_detailTab", "statusText": "_o1AEW_statusText", "sectionLabel": "_o1AEW_sectionLabel", "inspectorBody": "_o1AEW_inspectorBody", "detailTabCount": "_o1AEW_detailTabCount", "spacer": "_o1AEW_spacer", "filterArrowLeft": "_o1AEW_filterArrowLeft", "filterArrowRight": "_o1AEW_filterArrowRight", "warning": "_o1AEW_warning", "detailToggle": "_o1AEW_detailToggle", "action": "_o1AEW_action", "emptyWrap": "_o1AEW_emptyWrap", "empty": "_o1AEW_empty", "refresh": "_o1AEW_refresh", "note": "_o1AEW_note", "inspectorMeta": "_o1AEW_inspectorMeta", "diagnosis": "_o1AEW_diagnosis", "menuButton": "_o1AEW_menuButton", "listbox": "_o1AEW_listbox", "inspectorTitle": "_o1AEW_inspectorTitle", "sidebar": "_o1AEW_sidebar", "badge": "_o1AEW_badge", "lensTabActive": "_o1AEW_lensTabActive", "sourceTag": "_o1AEW_sourceTag", "lensTab": "_o1AEW_lensTab", "evidenceEntry": "_o1AEW_evidenceEntry", "inspectorTitleWrap": "_o1AEW_inspectorTitleWrap", "panel": "_o1AEW_panel", "listItemTitle": "_o1AEW_listItemTitle", "section": "_o1AEW_section", "inspectorHead": "_o1AEW_inspectorHead", "starterRow": "_o1AEW_starterRow", "actionRow": "_o1AEW_actionRow", "view": "_o1AEW_view", "availability": "_o1AEW_availability", "emptyNote": "_o1AEW_emptyNote", "passage": "_o1AEW_passage", "detailTabActive": "_o1AEW_detailTabActive", "listItem": "_o1AEW_listItem", "line": "_o1AEW_line", "emptyText": "_o1AEW_emptyText", "listItemSelected": "_o1AEW_listItemSelected", "inspectorTabs": "_o1AEW_inspectorTabs", "exportStack": "_o1AEW_exportStack", "toolbar": "_o1AEW_toolbar", "cardStack": "_o1AEW_cardStack", "passageHead": "_o1AEW_passageHead", "inspector": "_o1AEW_inspector", "backAction": "_o1AEW_backAction", "evidencePage": "_o1AEW_evidencePage", "badges": "_o1AEW_badges", "emptyIcon": "_o1AEW_emptyIcon", "exportsPage": "_o1AEW_exportsPage", "lensBar": "_o1AEW_lensBar" };
1475
1475
 
1476
1476
  // src/client/components/workspace/WorkspaceToolbar.tsx
1477
1477
  var import_jsx_runtime4 = require("react/jsx-runtime");
@@ -1483,6 +1483,13 @@ function WorkspaceToolbar({ connection, onRefresh, t }) {
1483
1483
  const data = connection.kind === "connected" || connection.kind === "unavailable" ? connection.data : void 0;
1484
1484
  const menuItems = [
1485
1485
  ...data?.serverId !== void 0 ? [{ id: "serverId", label: `${t("serverIdLabel")} ${data.serverId}`, disabled: true }] : [],
1486
+ ...data?.zoteroVersion !== void 0 ? [
1487
+ {
1488
+ id: "zotero",
1489
+ label: `${t("zoteroVersionLabel")} ${data.zoteroVersion}`,
1490
+ disabled: true
1491
+ }
1492
+ ] : [],
1486
1493
  ...data?.apiVersion !== void 0 ? [{ id: "api", label: `${t("apiVersionLabel")} ${data.apiVersion}`, disabled: true }] : [],
1487
1494
  ...data?.schemaVersion !== void 0 ? [
1488
1495
  {
@@ -1816,7 +1823,7 @@ if (typeof document !== "undefined" && !document.querySelector('style[data-plugi
1816
1823
  tag.textContent = style5;
1817
1824
  document.head.appendChild(tag);
1818
1825
  }
1819
- var cards_default = { "cardHead": "_27yOoG_cardHead", "passageHead": "_27yOoG_passageHead", "exportRow": "_27yOoG_exportRow", "passages": "_27yOoG_passages", "sourceTag": "_27yOoG_sourceTag", "card": "_27yOoG_card", "exportKeysText": "_27yOoG_exportKeysText", "cardTitle": "_27yOoG_cardTitle", "exportCode": "_27yOoG_exportCode", "availability": "_27yOoG_availability", "exportSection": "_27yOoG_exportSection", "line": "_27yOoG_line", "documentTitle": "_27yOoG_documentTitle", "exportFacts": "_27yOoG_exportFacts", "chevronOpen": "_27yOoG_chevronOpen", "lineActions": "_27yOoG_lineActions", "unresolvedItemsText": "_27yOoG_unresolvedItemsText", "exportPre": "_27yOoG_exportPre", "exportCodeLabel": "_27yOoG_exportCodeLabel", "passage": "_27yOoG_passage", "chevron": "_27yOoG_chevron", "exportSectionHead": "_27yOoG_exportSectionHead", "exportSectionTitle": "_27yOoG_exportSectionTitle", "exportCodeHead": "_27yOoG_exportCodeHead", "exportSectionCount": "_27yOoG_exportSectionCount", "link": "_27yOoG_link", "lineAction": "_27yOoG_lineAction", "exportToggle": "_27yOoG_exportToggle", "unresolvedItems": "_27yOoG_unresolvedItems", "note": "_27yOoG_note", "exportSectionActions": "_27yOoG_exportSectionActions", "exportBody": "_27yOoG_exportBody", "documentKey": "_27yOoG_documentKey", "exportTitle": "_27yOoG_exportTitle", "exportHead": "_27yOoG_exportHead", "exportKeys": "_27yOoG_exportKeys" };
1826
+ var cards_default = { "sourceTag": "_27yOoG_sourceTag", "passageHead": "_27yOoG_passageHead", "lineActions": "_27yOoG_lineActions", "exportCode": "_27yOoG_exportCode", "note": "_27yOoG_note", "passages": "_27yOoG_passages", "lineAction": "_27yOoG_lineAction", "exportSectionCount": "_27yOoG_exportSectionCount", "exportCodeLabel": "_27yOoG_exportCodeLabel", "chevron": "_27yOoG_chevron", "link": "_27yOoG_link", "exportSectionActions": "_27yOoG_exportSectionActions", "passage": "_27yOoG_passage", "exportPre": "_27yOoG_exportPre", "exportToggle": "_27yOoG_exportToggle", "exportKeys": "_27yOoG_exportKeys", "exportTitle": "_27yOoG_exportTitle", "exportRow": "_27yOoG_exportRow", "line": "_27yOoG_line", "documentKey": "_27yOoG_documentKey", "card": "_27yOoG_card", "availability": "_27yOoG_availability", "exportCodeHead": "_27yOoG_exportCodeHead", "cardHead": "_27yOoG_cardHead", "unresolvedItems": "_27yOoG_unresolvedItems", "exportSection": "_27yOoG_exportSection", "unresolvedItemsText": "_27yOoG_unresolvedItemsText", "documentTitle": "_27yOoG_documentTitle", "exportHead": "_27yOoG_exportHead", "exportSectionTitle": "_27yOoG_exportSectionTitle", "exportKeysText": "_27yOoG_exportKeysText", "cardTitle": "_27yOoG_cardTitle", "exportSectionHead": "_27yOoG_exportSectionHead", "exportFacts": "_27yOoG_exportFacts", "chevronOpen": "_27yOoG_chevronOpen", "exportBody": "_27yOoG_exportBody" };
1820
1827
 
1821
1828
  // src/client/components/CopyButton.tsx
1822
1829
  var import_jsx_runtime7 = require("react/jsx-runtime");
@@ -1861,7 +1868,7 @@ if (typeof document !== "undefined" && !document.querySelector('style[data-plugi
1861
1868
  tag.textContent = style6;
1862
1869
  document.head.appendChild(tag);
1863
1870
  }
1864
- var open_default = { "blocked": "_02bwZG_blocked", "button": "_02bwZG_button", "srOnly": "_02bwZG_srOnly", "linkWrap": "_02bwZG_linkWrap", "linkIcon": "_02bwZG_linkIcon", "note": "_02bwZG_note", "link": "_02bwZG_link" };
1871
+ var open_default = { "srOnly": "_02bwZG_srOnly", "linkWrap": "_02bwZG_linkWrap", "linkIcon": "_02bwZG_linkIcon", "blocked": "_02bwZG_blocked", "link": "_02bwZG_link", "note": "_02bwZG_note", "button": "_02bwZG_button" };
1865
1872
 
1866
1873
  // src/client/components/open/BlockedOpenAction.tsx
1867
1874
  var import_jsx_runtime8 = require("react/jsx-runtime");
@@ -17463,6 +17470,7 @@ var zoteroStatusSchema = external_exports.object({
17463
17470
  apiVersion: external_exports.string().optional(),
17464
17471
  serverId: external_exports.string().optional(),
17465
17472
  schemaVersion: external_exports.string().optional(),
17473
+ zoteroVersion: external_exports.string().optional(),
17466
17474
  diagnosis: external_exports.string()
17467
17475
  }).strict().readonly();
17468
17476
  var ZOTERO_INVOCATIONS = [
@@ -17542,8 +17550,8 @@ var en = {
17542
17550
  maxExportRefsHint: "Refs one zotero_export call accepts at most.",
17543
17551
  maxBrowseResults: "Browse result cap",
17544
17552
  maxBrowseResultsHint: "Items one zotero_browse call returns at most.",
17545
- maxChangesResults: "Changes result cap",
17546
- maxChangesResultsHint: "Entries one zotero_changes call lists per resource at most.",
17553
+ maxChangesResults: "Changes listing cap",
17554
+ maxChangesResultsHint: "Entries one zotero_changes call lists per resource at most \u2014 a display cap; the diff itself always reads the whole range, and totals reports the true counts.",
17547
17555
  defaultStyle: "Default citation style",
17548
17556
  defaultStyleHint: "CSL style id for citation and bibliography formats (e.g. apa).",
17549
17557
  defaultLocale: "Default locale",
@@ -17559,6 +17567,7 @@ var en = {
17559
17567
  detailsLabel: "Diagnostics",
17560
17568
  apiVersionLabel: "API version",
17561
17569
  schemaVersionLabel: "Schema version",
17570
+ zoteroVersionLabel: "Zotero version",
17562
17571
  serverIdLabel: "Server ID",
17563
17572
  buildInfoLabel: "Build",
17564
17573
  diagnosisLabel: "Diagnosis",
@@ -17727,8 +17736,8 @@ var zh = {
17727
17736
  maxExportRefsHint: "zotero_export \u5355\u6B21\u8C03\u7528\u6700\u591A\u63A5\u53D7\u7684 refs \u6570\u3002",
17728
17737
  maxBrowseResults: "\u6D4F\u89C8\u7ED3\u679C\u4E0A\u9650",
17729
17738
  maxBrowseResultsHint: "zotero_browse \u5355\u6B21\u8C03\u7528\u6700\u591A\u8FD4\u56DE\u7684\u6761\u76EE\u6570\u3002",
17730
- maxChangesResults: "\u53D8\u66F4\u7ED3\u679C\u4E0A\u9650",
17731
- maxChangesResultsHint: "zotero_changes \u5355\u6B21\u8C03\u7528\u6BCF\u79CD\u8D44\u6E90\u6700\u591A\u5217\u51FA\u7684\u6761\u76EE\u6570\u3002",
17739
+ maxChangesResults: "\u53D8\u66F4\u5217\u8868\u4E0A\u9650",
17740
+ maxChangesResultsHint: "zotero_changes \u5355\u6B21\u8C03\u7528\u6BCF\u79CD\u8D44\u6E90\u6700\u591A\u5217\u51FA\u7684\u6761\u76EE\u6570\uFF08\u4EC5\u5F71\u54CD\u5448\u73B0\uFF09\uFF1A\u5DEE\u5F02\u59CB\u7EC8\u6574\u6279\u8BFB\u53D6\uFF0Ctotals \u7ED9\u51FA\u771F\u5B9E\u6761\u6570\u3002",
17732
17741
  defaultStyle: "\u9ED8\u8BA4\u5F15\u6587\u6837\u5F0F",
17733
17742
  defaultStyleHint: "citation/bibliography \u683C\u5F0F\u7684 CSL \u6837\u5F0F id\uFF08\u5982 apa\uFF09\u3002",
17734
17743
  defaultLocale: "\u9ED8\u8BA4\u533A\u57DF\u8BBE\u7F6E",
@@ -17744,6 +17753,7 @@ var zh = {
17744
17753
  detailsLabel: "\u8BCA\u65AD\u8BE6\u60C5",
17745
17754
  apiVersionLabel: "API \u7248\u672C",
17746
17755
  schemaVersionLabel: "Schema \u7248\u672C",
17756
+ zoteroVersionLabel: "Zotero \u7248\u672C",
17747
17757
  serverIdLabel: "Server ID",
17748
17758
  buildInfoLabel: "\u6784\u5EFA",
17749
17759
  diagnosisLabel: "\u8BCA\u65AD",