dsh-reference-anything 0.2.2 → 0.2.4

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.md CHANGED
@@ -26,9 +26,12 @@ Within the unified `@` menu of DeepSeek Harness (DSH), reference commands, Skill
26
26
 
27
27
  This plugin uses OpenCLI to access historical conversations through AI chat sessions that are already logged in. By default, only conversation titles are stored locally, and the agent fetches remote content on demand. An optional offline-mirror mode stores the latest complete conversation bodies locally.
28
28
 
29
+ > [!NOTE]
30
+ > DSH is currently in Beta, so its underlying capabilities and interfaces may change as it evolves. This plugin will adapt alongside those changes. Because of some current DSH limitations, parts of the implementation may not yet be ideal; we will continue to follow DSH updates and improve the plugin over time. See the relevant sections below for specific limitations and usage notes.
31
+
29
32
  ## News
30
33
 
31
- - **2026-08-19 · v0.2.2** — Added automatic version checks and in-settings updates, Pill/Raw text input rendering modes, and reusable background browser sessions for more reliable OpenCLI synchronization and input interactions.
34
+ - **2026-08-19 · v0.2.3** — Added automatic version checks and in-settings updates, Pill/Raw text input rendering modes, and reusable background browser sessions for more reliable OpenCLI synchronization and input interactions.
32
35
  - **2026-08-18 · v0.2.0** — A redesigned Reference Anything settings page with local session statistics, paginated management, Provider/Profile selection, and sync status checks.
33
36
  - **2026-08-18** — Introduced on-demand read protocol: references default to safe pointers, and the agent reads the body and attachments only after authorization.
34
37
  - **2026-08-17** — Unified ChatGPT, Claude, Gemini, DeepSeek, Grok, and Kimi under the DSH `@` menu.
package/lib/client.js CHANGED
@@ -15477,6 +15477,7 @@ var zh = {
15477
15477
  "settings.adapterInstalled": "\u5DF2\u5B89\u88C5\u4E14\u53EF\u53D1\u73B0",
15478
15478
  "settings.adapterInstalledVersion": "\u5DF2\u5B89\u88C5\u4E14\u53EF\u53D1\u73B0\uFF08v{version}\uFF09",
15479
15479
  "settings.adapterMissing": "\u672A\u5B89\u88C5\u9002\u914D\u5668",
15480
+ "settings.adapterLoadFailed": "\u9002\u914D\u5668\u5DF2\u767B\u8BB0\u4F46\u52A0\u8F7D\u5931\u8D25\uFF1A{error}",
15480
15481
  "settings.adapterIncomplete": "\u9002\u914D\u5668\u5305\u4E0D\u5B8C\u6574\uFF0C\u672A\u6CE8\u518C\u5168\u90E8\u516D\u4E2A\u5BF9\u8BDD\u6765\u6E90",
15481
15482
  "settings.adapterVersionUnsupported": "\u9002\u914D\u5668\u7248\u672C {version} \u8FC7\u65E7\u6216\u65E0\u6CD5\u8BC6\u522B",
15482
15483
  "settings.adapterStillUnavailable": "\u5B89\u88C5\u540E\u5BF9\u8BDD\u9002\u914D\u5668\u4ECD\u4E0D\u53EF\u7528\u3002",
@@ -15513,11 +15514,12 @@ var zh = {
15513
15514
  "settings.setupStep.complete": "\u6240\u6709\u68C0\u67E5\u5747\u5DF2\u901A\u8FC7\u3002",
15514
15515
  "settings.install": "\u5B89\u88C5\u9002\u914D\u5668",
15515
15516
  "settings.reinstall": "\u91CD\u65B0\u5B89\u88C5\u9002\u914D\u5668",
15517
+ "settings.repairAdapter": "\u4FEE\u590D\u9002\u914D\u5668",
15516
15518
  "settings.oneClickSetup": "\u4E00\u952E\u5B89\u88C5",
15517
15519
  "settings.restartDaemon": "\u91CD\u542F\u6D4F\u89C8\u5668\u6865\u63A5\u670D\u52A1",
15518
15520
  "settings.restarting": "\u6B63\u5728\u91CD\u542F\u2026",
15519
15521
  "settings.serviceActions": "\u670D\u52A1\u64CD\u4F5C",
15520
- "settings.serviceActionsDetail": "\u4E00\u952E\u5B89\u88C5\u4F1A\u81EA\u52A8\u5B89\u88C5\u9002\u914D\u5668\u3001\u542F\u52A8\u5B88\u62A4\u8FDB\u7A0B\u5E76\u6253\u5F00\u6D4F\u89C8\u5668\u6269\u5C55\u5B89\u88C5\u9875\uFF1B\u4E5F\u53EF\u5355\u72EC\u5B89\u88C5\u9002\u914D\u5668\u6216\u91CD\u542F\u6D4F\u89C8\u5668\u6865\u63A5\u670D\u52A1\u3002",
15522
+ "settings.serviceActionsDetail": "\u4E00\u952E\u5B89\u88C5\u4F1A\u6309\u9700\u5B89\u88C5\u6216\u4FEE\u590D\u9002\u914D\u5668\u3001\u542F\u52A8\u5B88\u62A4\u8FDB\u7A0B\uFF0C\u5E76\u5F15\u5BFC\u5B89\u88C5\u6D4F\u89C8\u5668\u6269\u5C55\u3002",
15521
15523
  "settings.general": "\u901A\u7528\u8BBE\u7F6E",
15522
15524
  "settings.generalDetail": "\u63A7\u5236 @ \u9762\u677F\u4E2D\u53EF\u7528\u7684\u7C7B\u522B\u3001\u663E\u793A\u987A\u5E8F\u53CA\u6BCF\u7C7B\u6700\u591A\u663E\u793A\u7684\u6761\u76EE\u6570\u3002\u5173\u95ED\u67D0\u7C7B\u540E\uFF0C\u5B83\u4E0D\u4F1A\u51FA\u73B0\u5728 @ \u9762\u677F\uFF0C\u4E5F\u4E0D\u4F1A\u5411 Agent \u63D0\u4F9B\u5BF9\u5E94\u6307\u4EE4\u3002",
15523
15525
  "settings.inputRenderMode": "\u8F93\u5165\u6846\u6E32\u67D3",
@@ -15650,6 +15652,7 @@ var en = {
15650
15652
  "settings.updateConfirm": "Update Reference Anything to v{version}? Restart DSH after the update completes.",
15651
15653
  "settings.github": "GitHub",
15652
15654
  "settings.adapterIncomplete": "The adapter package is incomplete and did not register all six conversation sources.",
15655
+ "settings.adapterLoadFailed": "The adapter is registered but failed to load: {error}",
15653
15656
  "settings.setupStep.checking": "Rechecking every dependency\u2026",
15654
15657
  "settings.setupStep.opencli": "Finding, installing, or upgrading OpenCLI\u2026",
15655
15658
  "settings.setupStep.adapter": "Installing the conversation adapter\u2026",
@@ -15717,11 +15720,12 @@ var en = {
15717
15720
  "settings.moveUp": "Move {item} up",
15718
15721
  "settings.moveDown": "Move {item} down",
15719
15722
  "settings.reinstall": "Reinstall adapter",
15723
+ "settings.repairAdapter": "Repair adapter",
15720
15724
  "settings.oneClickSetup": "One-click setup",
15721
15725
  "settings.settingUp": "Setting up\u2026",
15722
15726
  "settings.restartDaemon": "Restart Browser Bridge",
15723
15727
  "settings.serviceActions": "Service actions",
15724
- "settings.serviceActionsDetail": "One-click setup installs the adapter, starts the daemon, and opens the extension install page; you can also install the adapter or restart Browser Bridge individually.",
15728
+ "settings.serviceActionsDetail": "One-click setup installs or repairs the adapter as needed, starts the daemon, and guides browser-extension installation.",
15725
15729
  "notice.daemonRestarted": "Browser Bridge restarted.",
15726
15730
  "notice.oneClickSetup": 'Extension install page opened. Click "Add to Chrome", then Recheck here.',
15727
15731
  "notice.updateInstalled": "Reference Anything updated to v{version}. Restart DSH to load the new version.",
@@ -15994,6 +15998,7 @@ function ConversationSettings({ useScope, save, sync, cancel, refresh, refreshOn
15994
15998
  const daemonReady = Boolean(state.health?.daemonRunning && !state.health.daemonStale);
15995
15999
  const extensionReady = Boolean(state.health?.extensionConnected && state.health.connectivityOk);
15996
16000
  const adapterReady = Boolean(state.health?.pluginInstalled && state.health.adapterCompatible);
16001
+ const adapterNeedsRepair = Boolean(state.health?.pluginInstalled && !adapterReady);
15997
16002
  const runAction = (name, action) => {
15998
16003
  if (busyActionRef.current || state.loading) return;
15999
16004
  busyActionRef.current = true;
@@ -16216,7 +16221,7 @@ function ConversationSettings({ useScope, save, sync, cancel, refresh, refreshOn
16216
16221
  label: t("check.conversationAdapter"),
16217
16222
  detail: adapterStateDetail(state.health, t),
16218
16223
  ready: adapterReady,
16219
- actionLabel: !opencliReady ? t("settings.installOpenCli") : state.health?.pluginInstalled ? t("settings.reinstall") : t("settings.install"),
16224
+ actionLabel: !opencliReady ? t("settings.installOpenCli") : adapterNeedsRepair ? t("settings.repairAdapter") : state.health?.pluginInstalled ? t("settings.reinstall") : t("settings.install"),
16220
16225
  actionBusy: busyAction === "adapter",
16221
16226
  actionDisabled: Boolean(busyAction),
16222
16227
  onAction: () => {
@@ -16236,18 +16241,10 @@ function ConversationSettings({ useScope, save, sync, cancel, refresh, refreshOn
16236
16241
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("strong", { children: t("settings.serviceActions") }),
16237
16242
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { children: t("settings.serviceActionsDetail") })
16238
16243
  ] }),
16239
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "dsh_ref_service_actions", children: [
16240
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("button", { className: "is_primary", type: "button", disabled: state.loading || Boolean(busyAction), onClick: () => {
16241
- const opened = state.health?.extensionConnected ? true : openStore();
16242
- runAction("setup", () => setupAll(opened));
16243
- }, children: busyAction === "setup" ? t("settings.settingUp") : t("settings.oneClickSetup") }),
16244
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("button", { type: "button", disabled: state.loading || Boolean(busyAction) || !opencliReady, onClick: () => {
16245
- runAction("adapter", install);
16246
- }, children: busyAction === "adapter" ? t("settings.installing") : state.health?.pluginInstalled ? t("settings.reinstall") : t("settings.install") }),
16247
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("button", { type: "button", disabled: state.loading || Boolean(busyAction) || !opencliReady, onClick: () => {
16248
- runAction("daemon", restartDaemon);
16249
- }, children: busyAction === "daemon" ? t("settings.restarting") : t("settings.restartDaemon") })
16250
- ] })
16244
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "dsh_ref_service_actions", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("button", { className: "is_primary", type: "button", disabled: state.loading || Boolean(busyAction), onClick: () => {
16245
+ const opened = state.health?.extensionConnected ? true : openStore();
16246
+ runAction("setup", () => setupAll(opened));
16247
+ }, children: busyAction === "setup" ? t("settings.settingUp") : t("settings.oneClickSetup") }) })
16251
16248
  ] })
16252
16249
  ] }),
16253
16250
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "dsh_ref_chat_divider" }),
@@ -16535,6 +16532,7 @@ function daemonStateDetail(health, t) {
16535
16532
  }
16536
16533
  function adapterStateDetail(health, t) {
16537
16534
  if (!health?.pluginInstalled) return health?.pluginError || t("settings.adapterMissing");
16535
+ if (health.pluginError) return t("settings.adapterLoadFailed", { error: health.pluginError });
16538
16536
  if (!health.adapterCommandsReady) return t("settings.adapterIncomplete");
16539
16537
  if (!health.adapterCompatible) return t("settings.adapterVersionUnsupported", { version: health.pluginVersion || t("settings.unknownVersion") });
16540
16538
  return health.pluginVersion ? t("settings.adapterInstalledVersion", { version: health.pluginVersion }) : t("settings.adapterInstalled");
package/lib/opencli.d.ts CHANGED
@@ -107,6 +107,7 @@ export declare class OpenCliRunner {
107
107
  private historyRows;
108
108
  private json;
109
109
  private raw;
110
+ private command;
110
111
  }
111
112
  /** Locate a working OpenCLI without asking a command-line newcomer for PATH details. */
112
113
  export declare function discoverOpenCli(configured?: string, signal?: AbortSignal): Promise<OpenCliDiscovery>;
package/lib/opencli.js CHANGED
@@ -12,6 +12,7 @@ const SITE = {
12
12
  deepseek: 'dsh-deepseek', grok: 'dsh-grok', kimi: 'dsh-kimi',
13
13
  };
14
14
  const REQUIRED_ADAPTER_COMMANDS = ['chatgpt', 'claude', 'gemini', 'deepseek', 'grok', 'kimi'];
15
+ const ADAPTER_PLUGIN_NAME = 'dsh-chat-history';
15
16
  /**
16
17
  * A persistent OpenCLI site session owns one mutable browser tab. Serialize
17
18
  * commands that target the same executable/profile/site across runner
@@ -127,7 +128,9 @@ export class OpenCliRunner {
127
128
  const daemonVersion = daemon.value.match(/^Version:\s+v?([^\s(]+)/m)?.[1];
128
129
  const pluginVersion = plugins.value.match(/dsh-chat-history\s+@([^\s—]+)/i)?.[1];
129
130
  const pluginInstalled = /dsh-chat-history/i.test(plugins.value);
130
- const adapterCommandsReady = REQUIRED_ADAPTER_COMMANDS.every(command => new RegExp(`\\b${command}\\b`, 'i').test(plugins.value));
131
+ const adapterLoadError = adapterPluginLoadError(plugins.diagnostic);
132
+ const adapterCommandsReady = !adapterLoadError
133
+ && REQUIRED_ADAPTER_COMMANDS.every(command => new RegExp(`\\b${command}\\b`, 'i').test(plugins.value));
131
134
  const opencliCompatible = versionAtLeast(cliVersion, MIN_OPENCLI_VERSION);
132
135
  const daemonStale = Boolean(status.daemonRunning && (!daemonVersion || normalizeVersion(daemonVersion) !== cliVersion));
133
136
  const connectivityOk = /\[OK\]\s+Connectivity:/i.test(doctor.value);
@@ -143,7 +146,7 @@ export class OpenCliRunner {
143
146
  adapterCompatible: pluginInstalled && adapterCommandsReady && versionAtLeast(pluginVersion ?? '', MIN_ADAPTER_VERSION),
144
147
  ...(version.error ? { versionError: version.error } : {}),
145
148
  ...(daemon.error ? { daemonError: daemon.error } : {}),
146
- ...(plugins.error ? { pluginError: plugins.error } : {}),
149
+ ...(plugins.error || adapterLoadError ? { pluginError: plugins.error || adapterLoadError } : {}),
147
150
  ...(doctor.error ? { doctorError: doctor.error } : {}),
148
151
  };
149
152
  }
@@ -164,12 +167,25 @@ export class OpenCliRunner {
164
167
  });
165
168
  }
166
169
  async installPlugin(pluginUrl, signal) {
167
- await this.raw(['plugin', 'install', pluginUrl], signal);
170
+ const before = await this.command(['plugin', 'list'], signal);
171
+ if (new RegExp(`\\b${ADAPTER_PLUGIN_NAME}\\b`, 'i').test(before.stdout)) {
172
+ await this.raw(['plugin', 'update', ADAPTER_PLUGIN_NAME], signal);
173
+ }
174
+ else {
175
+ await this.raw(['plugin', 'install', pluginUrl], signal);
176
+ }
177
+ const after = await this.command(['plugin', 'list'], signal);
178
+ const loadError = adapterPluginLoadError(after.stderr);
179
+ const commandsReady = REQUIRED_ADAPTER_COMMANDS.every(command => new RegExp(`\\b${command}\\b`, 'i').test(after.stdout));
180
+ if (loadError || !commandsReady) {
181
+ throw new OpenCliError(loadError || 'OpenCLI did not register all six conversation adapters', 'OPENCLI_CONFIGURATION');
182
+ }
168
183
  }
169
184
  async restartDaemon(signal) { await this.raw(['daemon', 'restart'], signal); }
170
185
  async probe(args, signal) {
171
186
  try {
172
- return { value: await this.raw(args, signal) };
187
+ const result = await this.command(args, signal);
188
+ return { value: result.stdout, ...(result.stderr.trim() ? { diagnostic: result.stderr.trim() } : {}) };
173
189
  }
174
190
  catch (error) {
175
191
  return { value: '', error: error instanceof Error ? error.message : String(error) };
@@ -213,6 +229,9 @@ export class OpenCliRunner {
213
229
  });
214
230
  }
215
231
  async raw(args, signal) {
232
+ return (await this.command(args, signal)).stdout;
233
+ }
234
+ async command(args, signal) {
216
235
  const invocation = resolveInvocation(this.executable);
217
236
  const fullArgs = [...invocation.prefix, ...this.prefixArgs, ...(this.profile ? ['--profile', this.profile] : []), ...args];
218
237
  try {
@@ -220,7 +239,7 @@ export class OpenCliRunner {
220
239
  encoding: 'utf8', timeout: this.timeoutMs, maxBuffer: this.maxStdoutBytes,
221
240
  windowsHide: true, shell: false, signal, env: { ...process.env, OPENCLI_WINDOW: 'background' },
222
241
  });
223
- return result.stdout;
242
+ return { stdout: result.stdout, stderr: result.stderr };
224
243
  }
225
244
  catch (error) {
226
245
  const detail = error;
@@ -237,6 +256,13 @@ export class OpenCliRunner {
237
256
  }
238
257
  }
239
258
  }
259
+ /** Keep successful-process diagnostics: OpenCLI reports plugin import failures on stderr while exiting zero. */
260
+ function adapterPluginLoadError(diagnostic = '') {
261
+ const lines = diagnostic.split(/\r?\n/)
262
+ .map(line => line.trim())
263
+ .filter(line => /Plugin dsh-chat-history\//i.test(line));
264
+ return [...new Set(lines)].join('\n').slice(0, 2_000);
265
+ }
240
266
  async function serializeSiteCommand(key, task) {
241
267
  const previous = SITE_COMMAND_TAILS.get(key) ?? Promise.resolve();
242
268
  const current = previous.then(task, task);
@@ -97,6 +97,7 @@ export default class WebChatHistoryService extends Service implements ReferenceS
97
97
  profiles(signal?: AbortSignal): Promise<import("../../opencli.ts").BrowserProfile[]>;
98
98
  private runner;
99
99
  installAdapter(signal?: AbortSignal): Promise<boolean>;
100
+ private installAdapterFrom;
100
101
  /**
101
102
  * (Re)arm the background sync timer from the current settings.
102
103
  *
@@ -4,7 +4,9 @@ import { providerSchema, referenceAnythingDomainSpec, settingsRecordSchema } fro
4
4
  import { ConversationStore } from "../../store/store.js";
5
5
  import { ConversationSyncManager } from "../../sync/index.js";
6
6
  import { OpenCliError, OpenCliRunner, discoverOpenCli, installOpenCli as installOpenCliPackage } from "../../opencli.js";
7
- import { PackageUpdateManager } from "../../update.js";
7
+ import { PACKAGE_NAME, PackageUpdateManager } from "../../update.js";
8
+ import { join } from 'node:path';
9
+ import { pathToFileURL } from 'node:url';
8
10
  import { ReferenceAnythingError } from "../../errors.js";
9
11
  import { parseProviderQuery } from "../../search.js";
10
12
  export { parseProviderQuery };
@@ -27,7 +29,11 @@ export default class WebChatHistoryService extends Service {
27
29
  syncValue;
28
30
  autoSyncInterval;
29
31
  autoSyncCatchUp;
30
- packageUpdates = new PackageUpdateManager();
32
+ packageUpdates = new PackageUpdateManager({
33
+ afterInstall: async (profileDir, _version, signal) => {
34
+ await this.installAdapterFrom(pathToFileURL(join(profileDir, 'node_modules', PACKAGE_NAME, 'opencli-plugin')).href, signal);
35
+ },
36
+ });
31
37
  liveAttachments = new Map();
32
38
  constructor(ctx, config = {}) {
33
39
  super(ctx, 'referenceChatHistory');
@@ -234,11 +240,14 @@ export default class WebChatHistoryService extends Service {
234
240
  timeoutMs: this.config.timeoutMs, maxStdoutBytes: this.config.maxStdoutBytes });
235
241
  }
236
242
  async installAdapter(signal) {
243
+ await this.installAdapterFrom(new URL('../../../opencli-plugin/', import.meta.url).href, signal);
244
+ return true;
245
+ }
246
+ async installAdapterFrom(pluginUrl, signal) {
237
247
  const settings = this.store.settings;
238
248
  const runner = new OpenCliRunner({ executable: settings.opencliPath, profile: settings.profile,
239
249
  timeoutMs: this.config.timeoutMs, maxStdoutBytes: this.config.maxStdoutBytes });
240
- await runner.installPlugin(new URL('../../../opencli-plugin/', import.meta.url).href, signal);
241
- return true;
250
+ await runner.installPlugin(pluginUrl, signal);
242
251
  }
243
252
  /**
244
253
  * (Re)arm the background sync timer from the current settings.
package/lib/update.d.ts CHANGED
@@ -16,6 +16,7 @@ interface UpdateManagerOptions {
16
16
  dshHome?: string;
17
17
  fetchLatest?: (signal?: AbortSignal) => Promise<string>;
18
18
  install?: (profileDir: string, version: string, signal?: AbortSignal) => Promise<void>;
19
+ afterInstall?: (profileDir: string, version: string, signal?: AbortSignal) => Promise<void>;
19
20
  }
20
21
  /** One startup/manual-check cache and the confirmed profile-local updater. */
21
22
  export declare class PackageUpdateManager {
@@ -23,6 +24,7 @@ export declare class PackageUpdateManager {
23
24
  private readonly dshHome?;
24
25
  private readonly fetchLatest;
25
26
  private readonly install;
27
+ private readonly afterInstall?;
26
28
  private cached?;
27
29
  private checking?;
28
30
  constructor(options?: UpdateManagerOptions);
package/lib/update.js CHANGED
@@ -16,6 +16,7 @@ export class PackageUpdateManager {
16
16
  dshHome;
17
17
  fetchLatest;
18
18
  install;
19
+ afterInstall;
19
20
  cached;
20
21
  checking;
21
22
  constructor(options = {}) {
@@ -23,6 +24,7 @@ export class PackageUpdateManager {
23
24
  this.dshHome = options.dshHome;
24
25
  this.fetchLatest = options.fetchLatest ?? fetchLatestVersion;
25
26
  this.install = options.install ?? installPackageVersion;
27
+ this.afterInstall = options.afterInstall;
26
28
  }
27
29
  /** Return the startup result, waiting for it when it is still in flight. */
28
30
  status(signal) {
@@ -52,6 +54,7 @@ export class PackageUpdateManager {
52
54
  return { version: status.currentVersion, restartRequired: false };
53
55
  const profileDir = await findOwningProfileDir(this.packageRoot, this.dshHome);
54
56
  await this.install(profileDir, status.latestVersion, signal);
57
+ await this.afterInstall?.(profileDir, status.latestVersion, signal);
55
58
  this.cached = {
56
59
  currentVersion: status.latestVersion,
57
60
  latestVersion: status.latestVersion,
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "dsh-reference-anything",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "description": "Reference locally mirrored ChatGPT, Claude, Gemini, DeepSeek, Grok, and Kimi conversations from DeepSeek Harness",
5
- "license": "MIT",
6
- "publishConfig": {
7
- "access": "public"
8
- },
5
+ "license": "MIT",
6
+ "publishConfig": {
7
+ "access": "public"
8
+ },
9
9
  "type": "module",
10
10
  "repository": {
11
11
  "type": "git",
@@ -53,9 +53,9 @@
53
53
  "opencli-plugin/*.js",
54
54
  "opencli-plugin/opencli-plugin.json",
55
55
  "opencli-plugin/package.json",
56
- "cordis.patch.yml",
57
- "images/logo.png",
58
- "NOTICE.md",
56
+ "cordis.patch.yml",
57
+ "images/logo.png",
58
+ "NOTICE.md",
59
59
  "README.md"
60
60
  ],
61
61
  "dsh": {
@@ -78,8 +78,8 @@
78
78
  "build": "node build.mjs",
79
79
  "typecheck": "tsc -p tsconfig.json --noEmit",
80
80
  "test": "vitest run",
81
- "check": "pnpm run typecheck && pnpm run test && pnpm run build",
82
- "prepublishOnly": "pnpm run check",
81
+ "check": "pnpm run typecheck && pnpm run test && pnpm run build",
82
+ "prepublishOnly": "pnpm run check",
83
83
  "prepare": "node build.mjs"
84
84
  },
85
85
  "peerDependencies": {