dsh-zotero 0.5.2 → 0.7.0
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.
- package/README.en.md +2 -1
- package/README.md +2 -1
- package/lib/ask.d.ts +2 -1
- package/lib/ask.d.ts.map +1 -1
- package/lib/attachments.d.ts +5 -15
- package/lib/attachments.d.ts.map +1 -1
- package/lib/attachments.js +7 -18
- package/lib/attachments.js.map +1 -1
- package/lib/client.js +555 -624
- package/lib/client.js.map +4 -4
- package/lib/evidence.d.ts.map +1 -1
- package/lib/evidence.js +15 -4
- package/lib/evidence.js.map +1 -1
- package/lib/export-items.d.ts +7 -0
- package/lib/export-items.d.ts.map +1 -1
- package/lib/export-items.js +8 -1
- package/lib/export-items.js.map +1 -1
- package/lib/json.d.ts +13 -0
- package/lib/json.d.ts.map +1 -1
- package/lib/json.js +17 -1
- package/lib/json.js.map +1 -1
- package/lib/local/browse-domain.d.ts.map +1 -1
- package/lib/local/browse-domain.js.map +1 -1
- package/lib/normalize.d.ts +0 -3
- package/lib/normalize.d.ts.map +1 -1
- package/lib/normalize.js +7 -18
- package/lib/normalize.js.map +1 -1
- package/lib/presentation-meta.d.ts +1 -1
- package/lib/presentation-meta.d.ts.map +1 -1
- package/lib/presentation-meta.js +11 -6
- package/lib/presentation-meta.js.map +1 -1
- package/lib/prompt.d.ts +12 -7
- package/lib/prompt.d.ts.map +1 -1
- package/lib/prompt.js +13 -9
- package/lib/prompt.js.map +1 -1
- package/lib/ref-grammar.d.ts +34 -0
- package/lib/ref-grammar.d.ts.map +1 -0
- package/lib/ref-grammar.js +37 -0
- package/lib/ref-grammar.js.map +1 -0
- package/lib/refs.d.ts.map +1 -1
- package/lib/refs.js +6 -6
- package/lib/refs.js.map +1 -1
- package/lib/service.d.ts.map +1 -1
- package/lib/service.js +21 -28
- package/lib/service.js.map +1 -1
- package/lib/tools/attachment.d.ts.map +1 -1
- package/lib/tools/attachment.js +4 -1
- package/lib/tools/attachment.js.map +1 -1
- package/lib/tools/browse.d.ts.map +1 -1
- package/lib/tools/browse.js +14 -15
- package/lib/tools/browse.js.map +1 -1
- package/lib/tools/export.d.ts.map +1 -1
- package/lib/tools/export.js +5 -4
- package/lib/tools/export.js.map +1 -1
- package/lib/tools/get.d.ts.map +1 -1
- package/lib/tools/get.js +2 -2
- package/lib/tools/get.js.map +1 -1
- package/lib/tools/retrieve.d.ts.map +1 -1
- package/lib/tools/retrieve.js +2 -2
- package/lib/tools/retrieve.js.map +1 -1
- package/lib/tools/search.d.ts.map +1 -1
- package/lib/tools/search.js.map +1 -1
- package/lib/tools/validate.d.ts +2 -0
- package/lib/tools/validate.d.ts.map +1 -1
- package/lib/tools/validate.js +6 -4
- package/lib/tools/validate.js.map +1 -1
- package/lib/typert.d.ts +8 -7
- package/lib/typert.d.ts.map +1 -1
- package/lib/typert.js +8 -7
- package/lib/typert.js.map +1 -1
- package/lib/types.d.ts +7 -5
- package/lib/types.d.ts.map +1 -1
- package/package.json +119 -110
package/README.en.md
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
<a href="https://www.npmjs.com/package/dsh-zotero"><img src="https://img.shields.io/npm/v/dsh-zotero" alt="npm version" style="max-width:100%;"></a>
|
|
11
11
|
<a href="https://www.npmjs.com/package/dsh-zotero"><img src="https://img.shields.io/npm/dm/dsh-zotero" alt="npm downloads" style="max-width:100%;"></a>
|
|
12
12
|
<a href="https://www.npmjs.com/package/dsh-zotero"><img src="https://img.shields.io/npm/l/dsh-zotero" alt="license" style="max-width:100%;"></a>
|
|
13
|
+
<a href="https://github.com/deepseek-ai/deepseek-harness/releases/tag/dsh-v0.1.3-alpha.1"><img src="https://img.shields.io/badge/dsh-%3E%3D0.1.3--alpha.1-blue" alt="minimum dsh version" style="max-width:100%;"></a>
|
|
13
14
|
<a href="https://awesome-dsh-plugin.com"><img src="https://awesome-dsh-plugin.com/badge.svg" alt="Awesome DSH Plugin"></a>
|
|
14
15
|
</p>
|
|
15
16
|
</div>
|
|
@@ -68,7 +69,7 @@ The plugin provides a settings card under **Settings → Plugins** where you can
|
|
|
68
69
|
|
|
69
70
|
- Zotero ≥ 7 with local API enabled: **Settings → Advanced → "Allow other applications on this computer to communicate with Zotero"**
|
|
70
71
|
- Node.js ≥ 22.19 (or ≥ 24)
|
|
71
|
-
- dsh 0.1.
|
|
72
|
+
- dsh 0.1.3-alpha.1 host (all `@deepseek-ai/dsh-*` peer dependencies are `^0.1.3-alpha.1`; only the latest alpha is supported until upstream stabilizes, no backward compatibility)
|
|
72
73
|
- Local API at `http://127.0.0.1:23119/api`, unauthenticated, read-only
|
|
73
74
|
|
|
74
75
|
## Usage example
|
package/README.md
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
<a href="https://www.npmjs.com/package/dsh-zotero"><img src="https://img.shields.io/npm/v/dsh-zotero" alt="npm version" style="max-width:100%;"></a>
|
|
11
11
|
<a href="https://www.npmjs.com/package/dsh-zotero"><img src="https://img.shields.io/npm/dm/dsh-zotero" alt="npm downloads" style="max-width:100%;"></a>
|
|
12
12
|
<a href="https://www.npmjs.com/package/dsh-zotero"><img src="https://img.shields.io/npm/l/dsh-zotero" alt="license" style="max-width:100%;"></a>
|
|
13
|
+
<a href="https://github.com/deepseek-ai/deepseek-harness/releases/tag/dsh-v0.1.3-alpha.1"><img src="https://img.shields.io/badge/dsh-%3E%3D0.1.3--alpha.1-blue" alt="最低 dsh 版本" style="max-width:100%;"></a>
|
|
13
14
|
<a href="https://awesome-dsh-plugin.com"><img src="https://awesome-dsh-plugin.com/badge.svg" alt="Awesome DSH Plugin"></a>
|
|
14
15
|
</p>
|
|
15
16
|
</div>
|
|
@@ -68,7 +69,7 @@ dsh plugin --profile <name> add ./dsh-zotero-*.tgz
|
|
|
68
69
|
|
|
69
70
|
- Zotero ≥ 7 桌面版,启用本地 API:**设置 → 高级 → "允许其他应用程序与 Zotero 通信"**
|
|
70
71
|
- Node.js ≥ 22.19(或 ≥ 24)
|
|
71
|
-
- 宿主 dsh 0.1.
|
|
72
|
+
- 宿主 dsh 0.1.3-alpha.1(`@deepseek-ai/dsh-*` peer 依赖均为 `^0.1.3-alpha.1`;上游稳定前仅支持最新 alpha 版本,不向后兼容)
|
|
72
73
|
- 本地 API 地址 `http://127.0.0.1:23119/api`,无认证,只读
|
|
73
74
|
|
|
74
75
|
## 使用示例
|
package/lib/ask.d.ts
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
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
20
|
/**
|
|
21
21
|
* Run one Zotero request; on a connectivity failure, ask the user how to
|
|
22
22
|
* proceed and retry at most once when they choose the recommended action.
|
|
@@ -31,4 +31,5 @@ export type ConnectivityAskExec = Pick<ToolRunContext, 'signal' | 'agent'>;
|
|
|
31
31
|
* fails again.
|
|
32
32
|
*/
|
|
33
33
|
export declare function withConnectivityAsk<T>(ctx: Context, exec: ConnectivityAskExec, run: () => Promise<T>): Promise<T>;
|
|
34
|
+
export {};
|
|
34
35
|
//# 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,
|
|
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,CA4BZ"}
|
package/lib/attachments.d.ts
CHANGED
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
* Attachment records and deterministic attachment selection.
|
|
3
3
|
*
|
|
4
4
|
* Zotero's own best-attachment choice (`links.attachment` on item
|
|
5
|
-
* responses) is preferred wherever it exists; `
|
|
5
|
+
* responses) is preferred wherever it exists; `selectAttachments` is the
|
|
6
6
|
* documented fallback that ranks child rows the same way Zotero's
|
|
7
7
|
* `getBestAttachment` does — PDF over other kinds, imported files first,
|
|
8
|
-
* then earliest addition date, then key order.
|
|
8
|
+
* then earliest addition date, then key order. Single selection is the
|
|
9
|
+
* ranking's first entry.
|
|
9
10
|
* @module dsh-zotero/attachments
|
|
10
11
|
*/
|
|
11
12
|
/**
|
|
@@ -36,21 +37,10 @@ export declare function bestAttachmentFromLinks(json: unknown): {
|
|
|
36
37
|
* @throws {ZoteroError} `ZOTERO_UNEXPECTED` when the object has no valid Zotero key.
|
|
37
38
|
*/
|
|
38
39
|
export declare function normalizeAttachmentRecord(json: unknown): ZoteroAttachmentCandidate;
|
|
39
|
-
/**
|
|
40
|
-
* Select one attachment of the requested kind from raw child rows, ranked
|
|
41
|
-
* deterministically: imported files first, then earliest `dateAdded`, then
|
|
42
|
-
* key order. Rows without an attachment content type are skipped; a
|
|
43
|
-
* malformed attachment row fails loud like every other broken invariant.
|
|
44
|
-
* @param rows - raw child item JSON objects (notes and annotations are skipped).
|
|
45
|
-
* @param kind - `pdf` selects `application/pdf`; anything else is matched as a literal content type.
|
|
46
|
-
* @returns the winning record, or undefined when no row matches the kind.
|
|
47
|
-
* @throws {ZoteroError} `ZOTERO_UNEXPECTED` on an attachment row without a valid key.
|
|
48
|
-
*/
|
|
49
|
-
export declare function selectAttachment(rows: readonly unknown[], kind: string): ZoteroAttachmentCandidate | undefined;
|
|
50
40
|
/**
|
|
51
41
|
* Select every attachment of the requested kind from raw child rows, ordered
|
|
52
|
-
* by the same deterministic ranking
|
|
53
|
-
* first entry always equals the single-selection answer, and a work with
|
|
42
|
+
* by the same deterministic ranking Zotero's `getBestAttachment` uses — so
|
|
43
|
+
* the first entry always equals the single-selection answer, and a work with
|
|
54
44
|
* several PDFs (publisher copy, manuscript, supplement) can enter evidence
|
|
55
45
|
* ranking as several first-class sources.
|
|
56
46
|
*/
|
package/lib/attachments.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../src/attachments.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../src/attachments.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,2DAA2D;IAC3D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,uEAAuE;AACvE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAGjF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,OAAO,GACZ;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAKlD;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,GAAG,yBAAyB,CAmBlF;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,SAAS,OAAO,EAAE,EACxB,IAAI,EAAE,MAAM,GACX,SAAS,yBAAyB,EAAE,CAoBtC"}
|
package/lib/attachments.js
CHANGED
|
@@ -2,19 +2,21 @@
|
|
|
2
2
|
* Attachment records and deterministic attachment selection.
|
|
3
3
|
*
|
|
4
4
|
* Zotero's own best-attachment choice (`links.attachment` on item
|
|
5
|
-
* responses) is preferred wherever it exists; `
|
|
5
|
+
* responses) is preferred wherever it exists; `selectAttachments` is the
|
|
6
6
|
* documented fallback that ranks child rows the same way Zotero's
|
|
7
7
|
* `getBestAttachment` does — PDF over other kinds, imported files first,
|
|
8
|
-
* then earliest addition date, then key order.
|
|
8
|
+
* then earliest addition date, then key order. Single selection is the
|
|
9
|
+
* ranking's first entry.
|
|
9
10
|
* @module dsh-zotero/attachments
|
|
10
11
|
*/
|
|
11
12
|
import { ZOTERO_UNEXPECTED, ZoteroError } from './errors.js';
|
|
12
13
|
import { asRecord, asString, isObjectKey } from './json.js';
|
|
14
|
+
import { ATTACHMENT_HREF_PATTERN } from './ref-grammar.js';
|
|
13
15
|
/** Extract a Zotero object key from an API `links.attachment.href`. */
|
|
14
16
|
export function extractAttachmentKey(href) {
|
|
15
17
|
if (href === undefined)
|
|
16
18
|
return undefined;
|
|
17
|
-
return
|
|
19
|
+
return ATTACHMENT_HREF_PATTERN.exec(href)?.[1];
|
|
18
20
|
}
|
|
19
21
|
/**
|
|
20
22
|
* Read Zotero's own best-attachment link from an item response.
|
|
@@ -49,23 +51,10 @@ export function normalizeAttachmentRecord(json) {
|
|
|
49
51
|
...(url !== undefined ? { url } : {}),
|
|
50
52
|
};
|
|
51
53
|
}
|
|
52
|
-
/**
|
|
53
|
-
* Select one attachment of the requested kind from raw child rows, ranked
|
|
54
|
-
* deterministically: imported files first, then earliest `dateAdded`, then
|
|
55
|
-
* key order. Rows without an attachment content type are skipped; a
|
|
56
|
-
* malformed attachment row fails loud like every other broken invariant.
|
|
57
|
-
* @param rows - raw child item JSON objects (notes and annotations are skipped).
|
|
58
|
-
* @param kind - `pdf` selects `application/pdf`; anything else is matched as a literal content type.
|
|
59
|
-
* @returns the winning record, or undefined when no row matches the kind.
|
|
60
|
-
* @throws {ZoteroError} `ZOTERO_UNEXPECTED` on an attachment row without a valid key.
|
|
61
|
-
*/
|
|
62
|
-
export function selectAttachment(rows, kind) {
|
|
63
|
-
return selectAttachments(rows, kind)[0];
|
|
64
|
-
}
|
|
65
54
|
/**
|
|
66
55
|
* Select every attachment of the requested kind from raw child rows, ordered
|
|
67
|
-
* by the same deterministic ranking
|
|
68
|
-
* first entry always equals the single-selection answer, and a work with
|
|
56
|
+
* by the same deterministic ranking Zotero's `getBestAttachment` uses — so
|
|
57
|
+
* the first entry always equals the single-selection answer, and a work with
|
|
69
58
|
* several PDFs (publisher copy, manuscript, supplement) can enter evidence
|
|
70
59
|
* ranking as several first-class sources.
|
|
71
60
|
*/
|
package/lib/attachments.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachments.js","sourceRoot":"","sources":["../src/attachments.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"attachments.js","sourceRoot":"","sources":["../src/attachments.ts"],"names":[],"mappings":"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"}
|