obsidian-mcp-server 3.7.2 → 3.9.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/AGENTS.md +20 -15
- package/CLAUDE.md +20 -15
- package/README.md +31 -19
- package/changelog/3.8.x/3.8.0.md +38 -0
- package/changelog/3.9.x/3.9.0.md +43 -0
- package/changelog/template.md +10 -3
- package/dist/config/server-config.d.ts +1 -0
- package/dist/config/server-config.d.ts.map +1 -1
- package/dist/config/server-config.js +30 -19
- package/dist/config/server-config.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +27 -15
- package/dist/index.js.map +1 -1
- package/dist/instructions.d.ts +4 -3
- package/dist/instructions.d.ts.map +1 -1
- package/dist/instructions.js +23 -12
- package/dist/instructions.js.map +1 -1
- package/dist/mcp-server/resources/definitions/index.d.ts +2 -2
- package/dist/mcp-server/resources/definitions/obsidian-tags.resource.d.ts +3 -2
- package/dist/mcp-server/resources/definitions/obsidian-tags.resource.d.ts.map +1 -1
- package/dist/mcp-server/resources/definitions/obsidian-tags.resource.js +6 -5
- package/dist/mcp-server/resources/definitions/obsidian-tags.resource.js.map +1 -1
- package/dist/mcp-server/resources/definitions/obsidian-vault-note.resource.d.ts +2 -2
- package/dist/mcp-server/resources/definitions/obsidian-vault-note.resource.js +2 -2
- package/dist/mcp-server/resources/definitions/obsidian-vault-note.resource.js.map +1 -1
- package/dist/mcp-server/tools/definitions/_shared/suggest-paths.d.ts +15 -6
- package/dist/mcp-server/tools/definitions/_shared/suggest-paths.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/_shared/suggest-paths.js +24 -12
- package/dist/mcp-server/tools/definitions/_shared/suggest-paths.js.map +1 -1
- package/dist/mcp-server/tools/definitions/index.d.ts +250 -230
- package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/index.js +6 -4
- package/dist/mcp-server/tools/definitions/index.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.d.ts +8 -2
- package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.js +10 -3
- package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.d.ts +7 -6
- package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.js +7 -7
- package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.d.ts +2 -2
- package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.js +8 -5
- package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.d.ts +6 -6
- package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.js +8 -8
- package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-list-tags.tool.d.ts +4 -4
- package/dist/mcp-server/tools/definitions/obsidian-list-tags.tool.js +7 -7
- package/dist/mcp-server/tools/definitions/obsidian-list-tags.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.d.ts +2 -2
- package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.d.ts +2 -2
- package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.d.ts +2 -2
- package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.js +3 -3
- package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.d.ts +8 -2
- package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.js +10 -3
- package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.d.ts +2 -2
- package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.d.ts +185 -35
- package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.js +145 -82
- package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.d.ts +8 -2
- package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.js +12 -5
- package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.js.map +1 -1
- package/dist/services/obsidian/jsonlogic-evaluator.d.ts +33 -8
- package/dist/services/obsidian/jsonlogic-evaluator.d.ts.map +1 -1
- package/dist/services/obsidian/jsonlogic-evaluator.js +171 -32
- package/dist/services/obsidian/jsonlogic-evaluator.js.map +1 -1
- package/dist/services/obsidian/jsonlogic-worker.d.ts +6 -5
- package/dist/services/obsidian/jsonlogic-worker.d.ts.map +1 -1
- package/dist/services/obsidian/jsonlogic-worker.js +7 -5
- package/dist/services/obsidian/jsonlogic-worker.js.map +1 -1
- package/dist/services/obsidian/obsidian-service.d.ts +90 -36
- package/dist/services/obsidian/obsidian-service.d.ts.map +1 -1
- package/dist/services/obsidian/obsidian-service.js +748 -248
- package/dist/services/obsidian/obsidian-service.js.map +1 -1
- package/dist/services/obsidian/patch-instruction.d.ts +4 -1
- package/dist/services/obsidian/patch-instruction.d.ts.map +1 -1
- package/dist/services/obsidian/patch-instruction.js +5 -2
- package/dist/services/obsidian/patch-instruction.js.map +1 -1
- package/dist/services/obsidian/path-policy.d.ts +67 -23
- package/dist/services/obsidian/path-policy.d.ts.map +1 -1
- package/dist/services/obsidian/path-policy.js +183 -80
- package/dist/services/obsidian/path-policy.js.map +1 -1
- package/dist/services/obsidian/section-extractor.d.ts +62 -1
- package/dist/services/obsidian/section-extractor.d.ts.map +1 -1
- package/dist/services/obsidian/section-extractor.js +387 -51
- package/dist/services/obsidian/section-extractor.js.map +1 -1
- package/dist/services/obsidian/simple-search.d.ts +62 -0
- package/dist/services/obsidian/simple-search.d.ts.map +1 -0
- package/dist/services/obsidian/simple-search.js +264 -0
- package/dist/services/obsidian/simple-search.js.map +1 -0
- package/manifest.json +12 -4
- package/package.json +9 -9
- package/server.json +23 -11
- package/skills/obsidian-guide/SKILL.md +61 -0
|
@@ -27,6 +27,11 @@ export type ObsidianFetch = (url: string, init: RequestInit & {
|
|
|
27
27
|
rejectUnauthorized: boolean;
|
|
28
28
|
};
|
|
29
29
|
}) => Promise<UndiciResponse>;
|
|
30
|
+
/** A text hit with its match locations capped at `maxMatchesPerHit`; a capped hit carries `truncated` and `totalMatches`. */
|
|
31
|
+
type ClippedTextHit = TextSearchHit & {
|
|
32
|
+
totalMatches?: number;
|
|
33
|
+
truncated?: boolean;
|
|
34
|
+
};
|
|
30
35
|
export declare class ObsidianService {
|
|
31
36
|
#private;
|
|
32
37
|
/**
|
|
@@ -41,8 +46,9 @@ export declare class ObsidianService {
|
|
|
41
46
|
get omnisearchUrl(): string;
|
|
42
47
|
/**
|
|
43
48
|
* Close the undici dispatcher, releasing its keep-alive sockets to the Local
|
|
44
|
-
* REST API and Omnisearch
|
|
45
|
-
* in-flight requests to
|
|
49
|
+
* REST API and Omnisearch, after rejecting the note-body reads still queued.
|
|
50
|
+
* Wired through `createApp({ teardown })`; waits for in-flight requests to
|
|
51
|
+
* settle rather than aborting them.
|
|
46
52
|
*
|
|
47
53
|
* Bun resolves `undici` to a built-in shim whose `Agent` is an inert object
|
|
48
54
|
* with no `close` — Bun's `fetch` pools sockets itself and ignores the
|
|
@@ -96,6 +102,11 @@ export declare class ObsidianService {
|
|
|
96
102
|
* applied to — identical to `instruction.target` unless a bare heading leaf
|
|
97
103
|
* was expanded to its full `Parent::Child` path (see `#resolveHeadingTarget`),
|
|
98
104
|
* which callers echo back so an agent can see where the write landed.
|
|
105
|
+
*
|
|
106
|
+
* A heading write placed by a heading the note has is checked against the
|
|
107
|
+
* note's link definitions first (`#refuseDroppedDefinition`). Every step
|
|
108
|
+
* that needs the note's text shares one read of it: the one
|
|
109
|
+
* `#headingIndex` made, or else one made on first need.
|
|
99
110
|
*/
|
|
100
111
|
patchNote(ctx: Context, target: NoteTarget, content: string, instruction: PatchInstruction): Promise<string>;
|
|
101
112
|
deleteNote(ctx: Context, target: NoteTarget): Promise<void>;
|
|
@@ -112,8 +123,9 @@ export declare class ObsidianService {
|
|
|
112
123
|
* coddingtonbear/obsidian-local-rest-api#237). Always prefer delivered
|
|
113
124
|
* bytes or HEAD over the metadata field.
|
|
114
125
|
*
|
|
115
|
-
*
|
|
116
|
-
* gates readable on path targets
|
|
126
|
+
* One attempt, never retried (HEAD is not in `RETRY_SAFE_METHODS`; a 404 is
|
|
127
|
+
* the answer, not a transient failure), and gates readable on path targets
|
|
128
|
+
* before issuing the HEAD.
|
|
117
129
|
*/
|
|
118
130
|
tryGetSize(ctx: Context, target: NoteTarget): Promise<number | null>;
|
|
119
131
|
/**
|
|
@@ -125,9 +137,10 @@ export declare class ObsidianService {
|
|
|
125
137
|
/**
|
|
126
138
|
* Vault tags with usage counts, hierarchical parents included. Unscoped, the
|
|
127
139
|
* plugin's `/tags/` with its occurrence counts. That payload carries no
|
|
128
|
-
* per-note attribution, so under OBSIDIAN_READ_PATHS
|
|
129
|
-
* the readable notes' contexts instead (one upstream
|
|
130
|
-
* each one counts the readable notes carrying it or a
|
|
140
|
+
* per-note attribution, so under OBSIDIAN_READ_PATHS or OBSIDIAN_DENY_PATHS
|
|
141
|
+
* the tags are read from the readable notes' contexts instead (one upstream
|
|
142
|
+
* search, no bodies), and each one counts the readable notes carrying it or a
|
|
143
|
+
* tag nested under it.
|
|
131
144
|
*/
|
|
132
145
|
listTags(ctx: Context): Promise<ObsidianTag[]>;
|
|
133
146
|
listCommands(ctx: Context): Promise<ObsidianCommand[]>;
|
|
@@ -136,53 +149,85 @@ export declare class ObsidianService {
|
|
|
136
149
|
* (`contextRelativeSpan`), then a multi-token query's spans are merged into
|
|
137
150
|
* match locations (`mergeIntoLocations`).
|
|
138
151
|
*
|
|
139
|
-
* The upstream
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
*
|
|
143
|
-
*
|
|
152
|
+
* The upstream serializes every match in the vault, its context window and
|
|
153
|
+
* about 150 characters of offsets and framing, into one response, so a
|
|
154
|
+
* broad query exhausts V8's string capacity, even at a small
|
|
155
|
+
* `contextLength`, and comes back as an opaque 500 — caught
|
|
156
|
+
* here and re-thrown typed, the way `searchOmnisearch` re-throws its own
|
|
157
|
+
* reachability failure. Under OBSIDIAN_READ_PATHS or OBSIDIAN_DENY_PATHS
|
|
158
|
+
* that would make the outcome depend on notes outside the scope, so the
|
|
159
|
+
* search runs here instead (`#searchTextScoped`).
|
|
144
160
|
*/
|
|
145
161
|
searchText(ctx: Context, query: string, contextLength?: number): Promise<TextSearchHit[]>;
|
|
146
162
|
/**
|
|
147
163
|
* JSONLogic search. Unscoped, the tree goes to the plugin unchanged. Under
|
|
148
|
-
* OBSIDIAN_READ_PATHS
|
|
149
|
-
*
|
|
164
|
+
* OBSIDIAN_READ_PATHS or OBSIDIAN_DENY_PATHS (`restrictsReads`) the plugin
|
|
165
|
+
* would evaluate it against every note in the vault, denied ones included,
|
|
166
|
+
* so the tree stays here instead: the readable notes' contexts
|
|
150
167
|
* are fetched and the tree is evaluated over those alone
|
|
151
168
|
* (`createJsonLogicEvaluation`), the way the plugin evaluates it. No hit,
|
|
152
|
-
* result, or error then reads a note outside the read scope
|
|
153
|
-
*
|
|
154
|
-
*
|
|
155
|
-
*
|
|
169
|
+
* result, or error then reads a note outside the read scope. The contexts
|
|
170
|
+
* carry no `links`, `backlinks`, or `unresolvedLinks`, since which note a
|
|
171
|
+
* link resolves to depends on notes outside the scope; a tree that names
|
|
172
|
+
* one fails before any request (`assertNoLinkFields`).
|
|
156
173
|
*
|
|
157
174
|
* The plugin hands a tree note bodies only when its JSON holds the string
|
|
158
|
-
* `"content"` (`readsContent`); such a tree gets them here too,
|
|
159
|
-
*
|
|
160
|
-
* scope never holds every readable body at once.
|
|
175
|
+
* `"content"` (`readsContent`); such a tree gets them here too, one read
|
|
176
|
+
* per readable note, evaluated in batches of at most `CONTENT_BATCH_BYTES`
|
|
177
|
+
* so a broad scope never holds every readable body at once. Every request
|
|
178
|
+
* the search makes shares `ctx.signal` and one deadline,
|
|
179
|
+
* `SCOPED_SEARCH_DEADLINE_MS`; past it the search fails with
|
|
180
|
+
* `logic_too_costly`.
|
|
161
181
|
*/
|
|
162
182
|
searchJsonLogic(ctx: Context, logic: Record<string, unknown>): Promise<StructuredSearchHit[]>;
|
|
163
183
|
/**
|
|
164
|
-
* A JSONLogic search for a caller paging through its hits
|
|
165
|
-
*
|
|
166
|
-
* without `walk` evaluates fresh and, when the
|
|
167
|
-
*
|
|
184
|
+
* A JSONLogic search for a caller paging through its hits, whose page this
|
|
185
|
+
* call serves ends at index `pageEnd`. Unscoped, it is `searchJsonLogic`.
|
|
186
|
+
* Under a read scope a call without `walk` evaluates fresh and, when the
|
|
187
|
+
* hits run past `pageEnd`, so a later page will read them, stores the full
|
|
188
|
+
* ordered hit list under a new walk id, returned as `walk`;
|
|
168
189
|
* a call naming that id with the same tree is served from the stored list
|
|
169
190
|
* without evaluating. The store belongs to this service, whose read scope
|
|
170
191
|
* is fixed at construction, so a list is only read under the scope that
|
|
171
|
-
* produced it. Anything else — an expired, evicted, or unknown id,
|
|
172
|
-
* different tree — evaluates fresh, and a call cancelled
|
|
173
|
-
* stores nothing.
|
|
192
|
+
* produced it. Anything else — an expired, evicted, or unknown id, a text
|
|
193
|
+
* walk's id, or a different tree — evaluates fresh, and a call cancelled
|
|
194
|
+
* before it answers stores nothing.
|
|
174
195
|
*/
|
|
175
|
-
pageJsonLogic(ctx: Context, logic: Record<string, unknown>, walk: string | undefined,
|
|
196
|
+
pageJsonLogic(ctx: Context, logic: Record<string, unknown>, walk: string | undefined, pageEnd: number): Promise<{
|
|
176
197
|
hits: StructuredSearchHit[];
|
|
177
198
|
walk?: string;
|
|
178
199
|
}>;
|
|
200
|
+
/**
|
|
201
|
+
* A text search for a caller paging through its hits, whose page this call
|
|
202
|
+
* serves ends at index `pageEnd`: each hit's match locations capped at
|
|
203
|
+
* `maxMatchesPerHit`, and only the hits whose filename starts with
|
|
204
|
+
* `pathPrefix` when one is given. Unscoped, every page runs `searchText`.
|
|
205
|
+
* Under a read scope a call without `walk` searches fresh and, when the
|
|
206
|
+
* prefixed hits run past `pageEnd`, so a later page will read them, stores
|
|
207
|
+
* the capped hits, unprefixed, under a new walk id, returned as
|
|
208
|
+
* `walk`. A call naming that id with the same `query`, `contextLength`, and
|
|
209
|
+
* `maxMatchesPerHit` is served from the stored hits with no request, its own
|
|
210
|
+
* `pathPrefix` applied to them; the scope is fixed for this service, so it
|
|
211
|
+
* is no part of the key. Anything else — an expired, evicted, or unknown
|
|
212
|
+
* id, a JSONLogic walk's id, or a changed input — searches fresh, and a
|
|
213
|
+
* call cancelled before it answers stores nothing.
|
|
214
|
+
*/
|
|
215
|
+
pageText(ctx: Context, search: {
|
|
216
|
+
contextLength: number;
|
|
217
|
+
maxMatchesPerHit: number;
|
|
218
|
+
pathPrefix?: string | undefined;
|
|
219
|
+
query: string;
|
|
220
|
+
}, walk: string | undefined, pageEnd: number): Promise<{
|
|
221
|
+
hits: ClippedTextHit[];
|
|
222
|
+
walk?: string;
|
|
223
|
+
}>;
|
|
179
224
|
/**
|
|
180
225
|
* One-shot startup probe for the Omnisearch plugin's HTTP endpoint. Returns
|
|
181
226
|
* `true` only when the response is `HTTP 200`, declares `application/json`,
|
|
182
227
|
* and the body parses as a JSON array — unrouted paths on the Omnisearch
|
|
183
228
|
* server also return `200` with an empty body, so status alone is
|
|
184
|
-
* insufficient.
|
|
185
|
-
*
|
|
229
|
+
* insufficient. `omnisearchAvailability` calls it, and only when reads are
|
|
230
|
+
* unscoped, to decide between the `offered` and `unreachable` states of the
|
|
186
231
|
* `omnisearch` mode.
|
|
187
232
|
*/
|
|
188
233
|
probeOmnisearch(signal?: AbortSignal): Promise<boolean>;
|
|
@@ -190,9 +235,11 @@ export declare class ObsidianService {
|
|
|
190
235
|
* Query the Omnisearch HTTP endpoint. Normalizes the response on the way
|
|
191
236
|
* out: decodes HTML entities + `<br>` → `\n` in `excerpt`, renames `path`
|
|
192
237
|
* to `filename`, and drops `vault`. Throws `omnisearch_unreachable`
|
|
193
|
-
* (ServiceUnavailable) on network failures
|
|
194
|
-
*
|
|
195
|
-
*
|
|
238
|
+
* (ServiceUnavailable) on network failures, on a query that outlasts
|
|
239
|
+
* `OBSIDIAN_REQUEST_TIMEOUT_MS`, and on non-2xx responses — the plugin can
|
|
240
|
+
* shut down mid-session (Obsidian quits, plugin disabled), and the tool
|
|
241
|
+
* needs a distinct signal from the upstream's success cases. One attempt,
|
|
242
|
+
* the body read under the same timer as the fetch.
|
|
196
243
|
*/
|
|
197
244
|
searchOmnisearch(ctx: Context, query: string): Promise<OmnisearchHit[]>;
|
|
198
245
|
executeCommand(ctx: Context, commandId: string): Promise<void>;
|
|
@@ -211,14 +258,21 @@ export declare class ObsidianService {
|
|
|
211
258
|
createIfMissing?: boolean;
|
|
212
259
|
}): Promise<void>;
|
|
213
260
|
}
|
|
261
|
+
/**
|
|
262
|
+
* `path` less its leading and trailing `/` runs, as `/^\/+|\/+$/g` leaves it,
|
|
263
|
+
* found by scanning in from each end: the regex retries at every `/` of a run
|
|
264
|
+
* inside the path, in time quadratic in the run.
|
|
265
|
+
*/
|
|
266
|
+
export declare function trimSlashes(path: string): string;
|
|
214
267
|
/**
|
|
215
268
|
* Encode a vault-relative path for the URL. Splits on `/` and `\` (so
|
|
216
269
|
* Windows-style separators are honored), URL-encodes each segment, and
|
|
217
270
|
* rejoins with `/` since the Local REST API plugin expects forward slashes.
|
|
218
271
|
*
|
|
219
272
|
* Rejects `.` and `..` segments here rather than relying on the upstream Local
|
|
220
|
-
* REST API plugin to normalize them — `
|
|
221
|
-
*
|
|
273
|
+
* REST API plugin to normalize them — with `OBSIDIAN_READ_PATHS` unset,
|
|
274
|
+
* `PathPolicy` allows every path no deny prefix covers, and `..` is
|
|
275
|
+
* unreserved per RFC 3986 so
|
|
222
276
|
* `encodeURIComponent` leaves it intact. This is the single chokepoint before
|
|
223
277
|
* URL construction, so guard vault escape here. Backslash is treated as a
|
|
224
278
|
* separator so `..\..\etc` traverses identically to `../../etc` and can't
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"obsidian-service.d.ts","sourceRoot":"","sources":["../../../src/services/obsidian/obsidian-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"obsidian-service.d.ts","sourceRoot":"","sources":["../../../src/services/obsidian/obsidian-service.ts"],"names":[],"mappings":"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"}
|