rehydra 0.15.0 → 0.16.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.
@@ -10,46 +10,7 @@
10
10
  * - tool.execute.before — rehydrate PII tags in tool args
11
11
  * - experimental.text.complete — rehydrate PII tags in LLM response
12
12
  */
13
- import { createAnonymizer } from "../core/anonymizer.js";
14
- import { AnonymizerSessionImpl } from "../storage/session-base.js";
15
- import { InMemoryPIIStorageProvider } from "../storage/in-memory.js";
16
- import { InMemoryKeyProvider } from "../crypto/index.js";
17
- import { PIIType, createDefaultPolicy, SECRET_PII_TYPES, DEFAULT_TAG_FORMAT } from "../types/index.js";
18
- import { buildPIISystemInstruction } from "../proxy/system-instruction.js";
19
- import { buildTagPrefix } from "../utils/regex.js";
20
- import { githubUsernameRecognizer } from "./github-username.js";
21
- import { protectIdentityTags } from "./identity-recognizer.js";
22
- import { vcsCommandTypes } from "./vcs-command.js";
23
- import { gitIdentityRecognizer } from "./git-identity.js";
24
- /**
25
- * Recursively rehydrate all string values containing PII tags.
26
- * Returns a new value (for strings/arrays) or the same object mutated in-place
27
- * (for plain objects). The in-place mutation is required because OpenCode's
28
- * tool.execute.before hook uses the original args reference for execution —
29
- * replacing the object wholesale has no effect.
30
- */
31
- export async function deepRehydrate(value, session, tagPrefix) {
32
- if (typeof value === "string") {
33
- if (value.includes(tagPrefix)) {
34
- return session.rehydrate(value);
35
- }
36
- return value;
37
- }
38
- if (Array.isArray(value)) {
39
- for (let i = 0; i < value.length; i++) {
40
- value[i] = await deepRehydrate(value[i], session, tagPrefix);
41
- }
42
- return value;
43
- }
44
- if (value !== null && typeof value === "object") {
45
- const obj = value;
46
- for (const key of Object.keys(obj)) {
47
- obj[key] = await deepRehydrate(obj[key], session, tagPrefix);
48
- }
49
- return obj;
50
- }
51
- return value;
52
- }
13
+ import { createRehydraCore, mergeOptions } from "./core.js";
53
14
  /**
54
15
  * Creates a Rehydra plugin for OpenCode.
55
16
  *
@@ -71,254 +32,65 @@ export async function deepRehydrate(value, session, tagPrefix) {
71
32
  export function createRehydraPlugin(factoryOptions) {
72
33
  return async (ctx, configOptions) => {
73
34
  const { client } = ctx;
74
- // OpenCode passes options from opencode.json as the second argument.
75
- // Factory options take precedence per key.
76
- const options = {
77
- ...configOptions,
78
- ...factoryOptions,
79
- };
80
35
  const SERVICE = "rehydra";
81
36
  function log(level, message, extra) {
82
37
  void client.app.log({ body: { service: SERVICE, level, message, extra } });
83
38
  }
84
- const keyProvider = new InMemoryKeyProvider();
85
- const piiStorage = new InMemoryPIIStorageProvider();
86
- // Build anonymizer config from options, sharing key and storage providers
87
- const baseConfig = options?.anonymizer ?? {
88
- secrets: {
89
- enabled: true,
90
- envFiles: options?.envFiles ?? ["**/.env*"],
91
- redactValues: options?.redactValues,
92
- minValueLength: options?.minValueLength,
93
- },
94
- };
95
- const anonymizerConfig = {
96
- ...baseConfig,
97
- secrets: baseConfig.secrets === undefined ? undefined : {
98
- ...baseConfig.secrets,
99
- envBaseDirectory: baseConfig.secrets.envBaseDirectory ?? ctx.directory,
100
- },
101
- };
102
- const tagFormat = anonymizerConfig.tagFormat ?? options?.tagFormat ?? DEFAULT_TAG_FORMAT;
103
- const tagPrefix = buildTagPrefix(tagFormat);
104
- const rehydraInstruction = `<rehydra>\n${buildPIISystemInstruction(tagFormat)}\n</rehydra>`;
105
- const anonymizer = createAnonymizer({
106
- ...anonymizerConfig,
107
- tagFormat,
108
- keyProvider,
109
- piiStorageProvider: piiStorage,
110
- });
111
- if (options?.vcsIdentities === true) {
112
- anonymizer.getRegistry().register(protectIdentityTags(githubUsernameRecognizer, tagFormat));
113
- anonymizer.getRegistry().register(protectIdentityTags(gitIdentityRecognizer, tagFormat));
114
- }
115
- await anonymizer.initialize();
116
- // Build policy with disabled types (URL and IP_ADDRESS disabled by default)
117
- const disableTypes = options?.disableTypes ?? ["URL", "IP_ADDRESS"];
118
- let policy = options?.policy;
119
- if (disableTypes.length > 0) {
120
- const base = createDefaultPolicy();
121
- const disableSet = new Set(disableTypes);
122
- const regexEnabledTypes = new Set(base.regexEnabledTypes);
123
- const nerEnabledTypes = new Set(base.nerEnabledTypes);
124
- // createDefaultPolicy() excludes secret types (they're opt-in via
125
- // AnonymizerConfig.secrets). Add them back so that passing this
126
- // partial policy to mergePolicyWithBase doesn't accidentally drop
127
- // the secret types the anonymizer added to its internal default.
128
- for (const secretType of SECRET_PII_TYPES) {
129
- regexEnabledTypes.add(secretType);
130
- }
131
- for (const t of disableSet) {
132
- const piiType = t;
133
- regexEnabledTypes.delete(piiType);
134
- nerEnabledTypes.delete(piiType);
135
- }
136
- policy = {
137
- ...policy,
138
- regexEnabledTypes,
139
- nerEnabledTypes,
140
- };
141
- }
142
- log("info", "plugin initialized", {
143
- envFiles: anonymizerConfig.secrets?.envFiles,
144
- redactValueCount: options?.redactValues?.length ?? 0,
145
- disableTypes,
39
+ // OpenCode passes options from opencode.json as the second argument.
40
+ const core = await createRehydraCore(mergeOptions(configOptions, factoryOptions), {
41
+ directory: ctx.directory,
42
+ log,
146
43
  });
147
- const locale = options?.locale;
148
- const identityPolicy = (types) => {
149
- const defaults = createDefaultPolicy();
150
- const configPolicy = anonymizerConfig.defaultPolicy;
151
- const enabledTypes = new Set(policy?.enabledTypes ?? configPolicy?.enabledTypes ?? defaults.enabledTypes);
152
- const regexEnabledTypes = new Set(policy?.regexEnabledTypes ?? configPolicy?.regexEnabledTypes ?? defaults.regexEnabledTypes);
153
- if (anonymizerConfig.secrets?.enabled === true) {
154
- for (const type of SECRET_PII_TYPES) {
155
- if (!disableTypes.includes(type)) {
156
- enabledTypes.add(type);
157
- regexEnabledTypes.add(type);
158
- }
159
- }
160
- }
161
- for (const type of types) {
162
- if (!disableTypes.includes(type)) {
163
- enabledTypes.add(type);
164
- regexEnabledTypes.add(type);
165
- }
166
- }
167
- return { ...policy, enabledTypes, regexEnabledTypes, reuseIdsForRepeatedPII: true };
168
- };
169
- // One session per OpenCode session, keyed by sessionID
170
- const sessions = new Map();
171
- function getSession(sessionID) {
172
- let session = sessions.get(sessionID);
173
- if (session === undefined) {
174
- session = new AnonymizerSessionImpl(anonymizer, sessionID, piiStorage, keyProvider);
175
- sessions.set(sessionID, session);
176
- }
177
- return session;
178
- }
179
- // Track whether any anonymization occurred (to conditionally inject instruction)
180
- let hasAnonymized = false;
181
44
  return {
182
45
  "experimental.chat.messages.transform": async (_input, output) => {
183
- let totalScrubbed = 0;
184
- const scrubbedByType = {};
46
+ await core.refreshSecrets();
47
+ const request = core.startRequest();
185
48
  for (const msg of output.messages) {
186
- const session = getSession(msg.info.sessionID);
187
- // OpenCode retains the rehydrated arguments after tool execution and
188
- // serializes them into later model requests. Copy and scrub values so
189
- // the execution arguments and JSON property names stay intact.
190
- const scrubToolInput = async (value) => {
191
- if (typeof value === "string") {
192
- const result = await session.anonymize(value, locale, policy);
193
- if (result.stats.totalEntities > 0) {
194
- hasAnonymized = true;
195
- totalScrubbed += result.stats.totalEntities;
196
- for (const [type, count] of Object.entries(result.stats.countsByType)) {
197
- scrubbedByType[type] = (scrubbedByType[type] ?? 0) + count;
198
- }
199
- }
200
- return result.anonymizedText;
201
- }
202
- if (Array.isArray(value)) {
203
- const result = [];
204
- for (const item of value)
205
- result.push(await scrubToolInput(item));
206
- return result;
207
- }
208
- if (value !== null && typeof value === "object") {
209
- const entries = [];
210
- for (const [key, item] of Object.entries(value)) {
211
- entries.push([key, await scrubToolInput(item)]);
212
- }
213
- return Object.fromEntries(entries);
214
- }
215
- return value;
216
- };
49
+ const sessionID = msg.info.sessionID;
217
50
  for (const part of msg.parts) {
51
+ // Read the command before scrubbing so VCS detection sees it intact
52
+ const command = part.state?.input?.command;
218
53
  if (part.type === "tool" && part.state !== undefined) {
219
54
  const state = part.state;
220
55
  if (state.input !== undefined)
221
- state.input = await scrubToolInput(state.input);
56
+ state.input = await request.copy(sessionID, state.input);
222
57
  if (typeof state.error === "string") {
223
- state.error = await scrubToolInput(state.error);
58
+ state.error = await request.text(sessionID, state.error);
224
59
  }
225
60
  }
226
61
  // Anonymize .text on any part type (text, reasoning, file, patch, etc.)
227
62
  if (typeof part.text === "string") {
228
- const result = await session.anonymize(part.text, locale, policy);
229
- if (result.stats.totalEntities > 0) {
230
- hasAnonymized = true;
231
- totalScrubbed += result.stats.totalEntities;
232
- for (const [type, count] of Object.entries(result.stats.countsByType)) {
233
- scrubbedByType[type] = (scrubbedByType[type] ?? 0) + count;
234
- }
235
- }
236
- part.text = result.anonymizedText;
63
+ part.text = await request.text(sessionID, part.text);
237
64
  }
238
65
  // Anonymize tool output
239
66
  if (part.state !== undefined &&
240
67
  part.state.status === "completed" &&
241
68
  typeof part.state.output === "string") {
242
- const command = part.state.input?.command;
243
- let outputPolicy = policy;
244
- if (options?.vcsIdentities === true &&
245
- typeof command === "string") {
246
- const commands = vcsCommandTypes(command);
247
- const types = [];
248
- if (commands.has('github'))
249
- types.push(PIIType.GITHUB_USERNAME);
250
- if (commands.has('git'))
251
- types.push(PIIType.PERSON);
252
- if (types.length > 0)
253
- outputPolicy = identityPolicy(types);
254
- }
255
- const result = await session.anonymize(part.state.output, locale, outputPolicy);
256
- if (result.stats.totalEntities > 0) {
257
- hasAnonymized = true;
258
- totalScrubbed += result.stats.totalEntities;
259
- for (const [type, count] of Object.entries(result.stats.countsByType)) {
260
- scrubbedByType[type] = (scrubbedByType[type] ?? 0) + count;
261
- }
262
- }
263
- part.state.output = result.anonymizedText;
69
+ part.state.output = await request.text(sessionID, part.state.output, core.outputPolicy(command));
264
70
  }
265
71
  }
266
72
  }
267
- if (totalScrubbed > 0) {
268
- // Only include types that actually had hits
269
- const nonZero = {};
270
- for (const [type, count] of Object.entries(scrubbedByType)) {
271
- if (count > 0)
272
- nonZero[type] = count;
273
- }
274
- log("info", `scrubbed ${totalScrubbed} secret(s) from messages`, {
275
- scrubbed: nonZero,
276
- messageCount: output.messages.length,
277
- });
278
- }
279
- else {
280
- log("debug", "no secrets found in messages", {
281
- messageCount: output.messages.length,
282
- });
283
- }
73
+ request.finish(output.messages.length);
284
74
  },
285
75
  "experimental.chat.system.transform": (_input, output) => {
286
- if (hasAnonymized) {
76
+ if (core.hasAnonymized) {
287
77
  log("debug", "injected rehydra instruction into system prompt");
288
- output.system.push(rehydraInstruction);
78
+ output.system.push(core.rehydraInstruction);
289
79
  }
290
80
  },
291
81
  "tool.execute.before": async (input, output) => {
292
- const session = getSession(input.sessionID);
293
- const before = JSON.stringify(output.args);
294
- output.args = await deepRehydrate(output.args, session, tagPrefix);
295
- const after = JSON.stringify(output.args);
296
- if (before !== after) {
297
- log("info", `rehydrated PII tags in tool args`, {
298
- tool: input.tool,
299
- callID: input.callID,
300
- });
301
- }
82
+ output.args = await core.beforeTool(input.tool, input.sessionID, input.callID, output.args);
302
83
  },
303
84
  // Output shape varies by tool type: native tools pass
304
85
  // { title, output, metadata } while MCP tools pass the raw
305
- // CallToolResult ({ content: [{type,text}], … }). Use deepRehydrate
306
- // so we handle any shape without hard-coding field names.
86
+ // CallToolResult ({ content: [{type,text}], … }). Rehydrate every
87
+ // string so we handle any shape without hard-coding field names.
307
88
  "tool.execute.after": async (input, output) => {
308
- const session = getSession(input.sessionID);
309
- const before = JSON.stringify(output);
310
- await deepRehydrate(output, session, tagPrefix);
311
- if (JSON.stringify(output) !== before) {
312
- log("info", "rehydrated PII tags in tool result", {
313
- tool: input.tool,
314
- callID: input.callID,
315
- });
316
- }
89
+ await core.afterTool(input.tool, input.sessionID, input.callID, output);
317
90
  },
318
91
  "experimental.text.complete": async (input, output) => {
319
- if (output.text.includes(tagPrefix)) {
320
- const session = getSession(input.sessionID);
321
- output.text = await session.rehydrate(output.text);
92
+ if (output.text.includes(core.tagPrefix)) {
93
+ output.text = await core.rehydrateText(input.sessionID, output.text);
322
94
  log("debug", "rehydrated PII tags in LLM response text", {
323
95
  messageID: input.messageID,
324
96
  });
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/opencode-plugin/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/opencode-plugin/plugin.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,13 @@ export interface RehydraPluginOptions {
13
13
  /** Paths/globs relative to the OpenCode project directory. Defaults to recursive .env discovery.
14
14
  * Skips node_modules, .git, and symlinks. Pass [] to disable file loading. */
15
15
  envFiles?: string[];
16
+ /** Minimum milliseconds between checks of envFiles for new or changed secrets (default: 2000).
17
+ * Pass false to load them only when the plugin starts. */
18
+ envRefreshInterval?: number | false;
19
+ /** Tools whose arguments keep their placeholders: real values are not restored before they run,
20
+ * and detected values are redacted. `*` matches any characters, e.g. "exa_*".
21
+ * Default: ["webfetch", "websearch"]. Pass [] to restore real values for every tool. */
22
+ redactTools?: string[];
16
23
  /** Explicit values to always redact */
17
24
  redactValues?: string[];
18
25
  /** Minimum value length to consider as a secret (default: 4) */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/opencode-plugin/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD,kEAAkE;AAClE,MAAM,MAAM,WAAW,GAAG,GAAG,OAAO,EAAE,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;kFAC8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAEpB,uCAAuC;IACvC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,gEAAgE;IAChE,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,0FAA0F;IAC1F,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAE7B,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,2DAA2D;IAC3D,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,uBAAuB;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAEtC,wFAAwF;IACxF,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAE9B,qFAAqF;IACrF,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/opencode-plugin/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD,kEAAkE;AAClE,MAAM,MAAM,WAAW,GAAG,GAAG,OAAO,EAAE,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;kFAC8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAEpB;8DAC0D;IAC1D,kBAAkB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAEpC;;4FAEwF;IACxF,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAEvB,uCAAuC;IACvC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,gEAAgE;IAChE,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,0FAA0F;IAC1F,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAE7B,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,2DAA2D;IAC3D,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,uBAAuB;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAEtC,wFAAwF;IACxF,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAE9B,qFAAqF;IACrF,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB"}
@@ -37,6 +37,10 @@ export declare class RecognizerRegistry {
37
37
  * Removes all recognizers for a type
38
38
  */
39
39
  unregister(type: PIIType): void;
40
+ /**
41
+ * Removes one recognizer, keeping the others registered for its type
42
+ */
43
+ remove(recognizer: Recognizer): void;
40
44
  /**
41
45
  * Clears all recognizers
42
46
  */
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/recognizers/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,WAAW,CAAyC;IAE5D;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAMtC;;OAEG;IACH,WAAW,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI;IAM5C;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,EAAE;IAI3C;;OAEG;IACH,iBAAiB,IAAI,UAAU,EAAE;IAQjC;;OAEG;IACH,kBAAkB,IAAI,OAAO,EAAE;IAI/B;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;IAKrC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAI/B;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,SAAS,EAAE;CA0BhE;AAOD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,kBAAkB,CAKtD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,kBAAkB,CAEnD"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/recognizers/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,WAAW,CAAyC;IAE5D;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAMtC;;OAEG;IACH,WAAW,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI;IAM5C;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,EAAE;IAI3C;;OAEG;IACH,iBAAiB,IAAI,UAAU,EAAE;IAQjC;;OAEG;IACH,kBAAkB,IAAI,OAAO,EAAE;IAI/B;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;IAKrC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAI/B;;OAEG;IACH,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAWpC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,SAAS,EAAE;CA0BhE;AAOD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,kBAAkB,CAKtD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,kBAAkB,CAEnD"}
@@ -58,6 +58,18 @@ export class RecognizerRegistry {
58
58
  unregister(type) {
59
59
  this.recognizers.delete(type);
60
60
  }
61
+ /**
62
+ * Removes one recognizer, keeping the others registered for its type
63
+ */
64
+ remove(recognizer) {
65
+ const remaining = (this.recognizers.get(recognizer.type) ?? []).filter((item) => item !== recognizer);
66
+ if (remaining.length > 0) {
67
+ this.recognizers.set(recognizer.type, remaining);
68
+ }
69
+ else {
70
+ this.recognizers.delete(recognizer.type);
71
+ }
72
+ }
61
73
  /**
62
74
  * Clears all recognizers
63
75
  */
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/recognizers/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/recognizers/registry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rehydra",
3
- "version": "0.15.0",
3
+ "version": "0.16.0",
4
4
  "description": "On-device PII anonymization module for high-privacy AI workflows",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",