File size: 2,572 Bytes
9b906ea | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | import type { MarketplacePlugin } from "#/api/plugins-service";
import type { PluginSpec } from "#/api/conversation-service/agent-server-conversation-service.types";
/**
* Stable identity for a plugin reference. Two references are "the same" when
* their attachable coordinates (source / ref / repo_path) match — `name`,
* `description`, install state, and parameters are intentionally excluded,
* since the start-conversation payload only carries coordinates.
*
* `null` and `undefined` collapse to "" so a catalog entry (`ref?: null`) and a
* stored spec (`ref: null`) compare equal.
*/
export function pluginSpecKey(
plugin: Pick<PluginSpec, "source" | "ref" | "repo_path">,
): string {
return [plugin.source, plugin.ref ?? "", plugin.repo_path ?? ""].join(" |