opencode-rules-md 0.9.1 → 0.10.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.
@@ -1 +1 @@
1
- {"version":3,"file":"rule-filter.d.ts","sourceRoot":"","sources":["../../src/rule-filter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAWzE;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAWT;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,gBAAgB,EAAE,MAAM,EAAE,EAC1B,aAAa,EAAE,MAAM,EAAE,GACtB,OAAO,CAOT;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,6DAA6D;IAC7D,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,wCAAwC;IACxC,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,YAAY,CAAC,CAqNvB"}
1
+ {"version":3,"file":"rule-filter.d.ts","sourceRoot":"","sources":["../../src/rule-filter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAWzE;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAWT;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,gBAAgB,EAAE,MAAM,EAAE,EAC1B,aAAa,EAAE,MAAM,EAAE,GACtB,OAAO,CAOT;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,6DAA6D;IAC7D,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,wCAAwC;IACxC,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,YAAY,CAAC,CAkPvB"}
@@ -182,17 +182,39 @@ export async function readAndFormatRules(files, context = {}) {
182
182
  if (entries.length === 0) {
183
183
  return { formattedRules: '', matchedPaths: [], tokenEstimate: 0 };
184
184
  }
185
+ // Content-based deduplication: collapse entries with identical strippedContent
186
+ // Higher priority wins; on equal priority, higher index (later-discovered) wins
187
+ const dedupedMap = new Map();
188
+ for (const entry of entries) {
189
+ const existing = dedupedMap.get(entry.strippedContent);
190
+ if (!existing) {
191
+ dedupedMap.set(entry.strippedContent, entry);
192
+ }
193
+ else {
194
+ const replace = entry.priority > existing.priority ||
195
+ (entry.priority === existing.priority && entry.index > existing.index);
196
+ if (replace) {
197
+ debugLog(`Deduplicating rule content: ${existing.relativePath} -> ${entry.relativePath} (shared content)`);
198
+ dedupedMap.set(entry.strippedContent, entry);
199
+ }
200
+ else {
201
+ debugLog(`Deduplicating rule content: ${entry.relativePath} -> ${existing.relativePath} (shared content)`);
202
+ }
203
+ }
204
+ }
205
+ // Sort survivors by discovery order (index ascending) before budget selection
206
+ const deduplicatedEntries = [...dedupedMap.values()].sort((a, b) => a.index - b.index);
185
207
  // Determine which entries to include based on budget
186
208
  const maxTokens = context.maxTokens;
187
209
  const hasValidBudget = typeof maxTokens === 'number' && maxTokens > 0 && Number.isFinite(maxTokens);
188
210
  let survivors;
189
211
  if (!hasValidBudget) {
190
212
  // No budget: use discovery order (existing behavior)
191
- survivors = entries;
213
+ survivors = deduplicatedEntries;
192
214
  }
193
215
  else {
194
216
  // Valid budget: stable sort by priority desc, index asc
195
- const sorted = [...entries].sort((a, b) => (b.priority - a.priority) || (a.index - b.index));
217
+ const sorted = [...deduplicatedEntries].sort((a, b) => (b.priority - a.priority) || (a.index - b.index));
196
218
  // Greedy selection: always keep first (≥1 survivor invariant), then add while within budget
197
219
  survivors = [sorted[0]];
198
220
  let runningTokens = sorted[0].tokenCount;
@@ -1 +1 @@
1
- {"version":3,"file":"rule-filter.js","sourceRoot":"","sources":["../../src/rule-filter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rule-filter.js","sourceRoot":"","sources":["../../src/rule-filter.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-rules-md",
3
- "version": "0.9.1",
3
+ "version": "0.10.0",
4
4
  "description": "OpenCode plugin that discovers and injects markdown rules into system prompts",
5
5
  "main": "dist/src/index.js",
6
6
  "types": "dist/src/index.d.ts",
@@ -287,6 +287,35 @@ export async function readAndFormatRules(
287
287
  return { formattedRules: '', matchedPaths: [], tokenEstimate: 0 };
288
288
  }
289
289
 
290
+ // Content-based deduplication: collapse entries with identical strippedContent
291
+ // Higher priority wins; on equal priority, higher index (later-discovered) wins
292
+ const dedupedMap = new Map<string, MatchedEntry>();
293
+ for (const entry of entries) {
294
+ const existing = dedupedMap.get(entry.strippedContent);
295
+ if (!existing) {
296
+ dedupedMap.set(entry.strippedContent, entry);
297
+ } else {
298
+ const replace =
299
+ entry.priority > existing.priority ||
300
+ (entry.priority === existing.priority && entry.index > existing.index);
301
+ if (replace) {
302
+ debugLog(
303
+ `Deduplicating rule content: ${existing.relativePath} -> ${entry.relativePath} (shared content)`
304
+ );
305
+ dedupedMap.set(entry.strippedContent, entry);
306
+ } else {
307
+ debugLog(
308
+ `Deduplicating rule content: ${entry.relativePath} -> ${existing.relativePath} (shared content)`
309
+ );
310
+ }
311
+ }
312
+ }
313
+
314
+ // Sort survivors by discovery order (index ascending) before budget selection
315
+ const deduplicatedEntries = [...dedupedMap.values()].sort(
316
+ (a, b) => a.index - b.index
317
+ );
318
+
290
319
  // Determine which entries to include based on budget
291
320
  const maxTokens = context.maxTokens;
292
321
  const hasValidBudget = typeof maxTokens === 'number' && maxTokens > 0 && Number.isFinite(maxTokens);
@@ -294,10 +323,10 @@ export async function readAndFormatRules(
294
323
  let survivors: MatchedEntry[];
295
324
  if (!hasValidBudget) {
296
325
  // No budget: use discovery order (existing behavior)
297
- survivors = entries;
326
+ survivors = deduplicatedEntries;
298
327
  } else {
299
328
  // Valid budget: stable sort by priority desc, index asc
300
- const sorted = [...entries].sort((a, b) =>
329
+ const sorted = [...deduplicatedEntries].sort((a, b) =>
301
330
  (b.priority - a.priority) || (a.index - b.index)
302
331
  );
303
332