@probelabs/probe 0.6.0-rc318 → 0.6.0-rc319

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.
@@ -719,14 +719,12 @@ export const searchTool = (options = {}) => {
719
719
  // ── Delegate-level semantic dedup ────────────────────────────
720
720
  // Each delegate is a full flash agent session (minutes, not seconds).
721
721
  // Use LLM to detect semantic duplicates and suggest rewrites.
722
- // Compare against ALL previous delegations (not filtered by path) because
723
- // the parent model often narrows the path while asking the same concept
724
- // (e.g., "dedup" at /src → "deduplicate" at /src/search.js).
725
722
  const delegatePath = searchPath || '';
723
+ const samePathDelegations = previousDelegations.filter(d => d.path === delegatePath);
726
724
 
727
725
  let effectiveQuery = searchQuery;
728
726
 
729
- if (previousDelegations.length > 0) {
727
+ if (samePathDelegations.length > 0) {
730
728
  const dedupProvider = options.searchDelegateProvider || process.env.PROBE_SEARCH_DELEGATE_PROVIDER || options.provider || process.env.FORCE_PROVIDER || null;
731
729
  const dedupModelName = options.searchDelegateModel || process.env.PROBE_SEARCH_DELEGATE_MODEL || options.model || process.env.MODEL_NAME || null;
732
730
  // Lazily create the dedup model (same provider/model as delegate)
@@ -742,8 +740,8 @@ export const searchTool = (options = {}) => {
742
740
 
743
741
  const dedupSpanAttrs = {
744
742
  'dedup.query': searchQuery,
745
- 'dedup.previous_count': String(previousDelegations.length),
746
- 'dedup.previous_queries': previousDelegations.map(d => d.query).join(' | '),
743
+ 'dedup.previous_count': String(samePathDelegations.length),
744
+ 'dedup.previous_queries': samePathDelegations.map(d => d.query).join(' | '),
747
745
  'dedup.provider': dedupProvider || '',
748
746
  'dedup.model': dedupModelName || '',
749
747
  'dedup.model_available': cachedDedupModel ? 'true' : 'false',
@@ -751,7 +749,7 @@ export const searchTool = (options = {}) => {
751
749
 
752
750
  const dedup = options.tracer?.withSpan
753
751
  ? await options.tracer.withSpan('search.delegate.dedup', async () => {
754
- return await checkDelegateDedup(searchQuery, previousDelegations, cachedDedupModel, debug);
752
+ return await checkDelegateDedup(searchQuery, samePathDelegations, cachedDedupModel, debug);
755
753
  }, dedupSpanAttrs, (span, result) => {
756
754
  span.setAttributes({
757
755
  'dedup.action': result.action,
@@ -760,14 +758,14 @@ export const searchTool = (options = {}) => {
760
758
  'dedup.error': result.error || '',
761
759
  });
762
760
  })
763
- : await checkDelegateDedup(searchQuery, previousDelegations, cachedDedupModel, debug);
761
+ : await checkDelegateDedup(searchQuery, samePathDelegations, cachedDedupModel, debug);
764
762
 
765
763
  if (debug) {
766
764
  console.error(`[DEDUP-LLM] Query: "${searchQuery}" → ${dedup.action}: ${dedup.reason}${dedup.rewritten ? ` → "${dedup.rewritten}"` : ''}`);
767
765
  }
768
766
 
769
767
  if (dedup.action === 'block') {
770
- const prevQueries = previousDelegations.map(d => `"${d.query}"`).join(', ');
768
+ const prevQueries = samePathDelegations.map(d => `"${d.query}"`).join(', ');
771
769
  return `DELEGATE BLOCKED: "${searchQuery}" is semantically duplicate of previous delegation(s) [${prevQueries}]. ${dedup.reason}\n\nDo NOT re-delegate the same concept. Use extract() on files already found, or synthesize your answer from existing results.`;
772
770
  }
773
771
 
@@ -32567,8 +32567,9 @@ Change your strategy:${scopeHint}
32567
32567
  }
32568
32568
  }
32569
32569
  const delegatePath = searchPath || "";
32570
+ const samePathDelegations = previousDelegations.filter((d) => d.path === delegatePath);
32570
32571
  let effectiveQuery = searchQuery;
32571
- if (previousDelegations.length > 0) {
32572
+ if (samePathDelegations.length > 0) {
32572
32573
  const dedupProvider = options.searchDelegateProvider || process.env.PROBE_SEARCH_DELEGATE_PROVIDER || options.provider || process.env.FORCE_PROVIDER || null;
32573
32574
  const dedupModelName = options.searchDelegateModel || process.env.PROBE_SEARCH_DELEGATE_MODEL || options.model || process.env.MODEL_NAME || null;
32574
32575
  if (cachedDedupModel === void 0) {
@@ -32582,14 +32583,14 @@ Change your strategy:${scopeHint}
32582
32583
  }
32583
32584
  const dedupSpanAttrs = {
32584
32585
  "dedup.query": searchQuery,
32585
- "dedup.previous_count": String(previousDelegations.length),
32586
- "dedup.previous_queries": previousDelegations.map((d) => d.query).join(" | "),
32586
+ "dedup.previous_count": String(samePathDelegations.length),
32587
+ "dedup.previous_queries": samePathDelegations.map((d) => d.query).join(" | "),
32587
32588
  "dedup.provider": dedupProvider || "",
32588
32589
  "dedup.model": dedupModelName || "",
32589
32590
  "dedup.model_available": cachedDedupModel ? "true" : "false"
32590
32591
  };
32591
32592
  const dedup = options.tracer?.withSpan ? await options.tracer.withSpan("search.delegate.dedup", async () => {
32592
- return await checkDelegateDedup(searchQuery, previousDelegations, cachedDedupModel, debug);
32593
+ return await checkDelegateDedup(searchQuery, samePathDelegations, cachedDedupModel, debug);
32593
32594
  }, dedupSpanAttrs, (span, result) => {
32594
32595
  span.setAttributes({
32595
32596
  "dedup.action": result.action,
@@ -32597,12 +32598,12 @@ Change your strategy:${scopeHint}
32597
32598
  "dedup.rewritten": result.rewritten || "",
32598
32599
  "dedup.error": result.error || ""
32599
32600
  });
32600
- }) : await checkDelegateDedup(searchQuery, previousDelegations, cachedDedupModel, debug);
32601
+ }) : await checkDelegateDedup(searchQuery, samePathDelegations, cachedDedupModel, debug);
32601
32602
  if (debug) {
32602
32603
  console.error(`[DEDUP-LLM] Query: "${searchQuery}" \u2192 ${dedup.action}: ${dedup.reason}${dedup.rewritten ? ` \u2192 "${dedup.rewritten}"` : ""}`);
32603
32604
  }
32604
32605
  if (dedup.action === "block") {
32605
- const prevQueries = previousDelegations.map((d) => `"${d.query}"`).join(", ");
32606
+ const prevQueries = samePathDelegations.map((d) => `"${d.query}"`).join(", ");
32606
32607
  return `DELEGATE BLOCKED: "${searchQuery}" is semantically duplicate of previous delegation(s) [${prevQueries}]. ${dedup.reason}
32607
32608
 
32608
32609
  Do NOT re-delegate the same concept. Use extract() on files already found, or synthesize your answer from existing results.`;
package/cjs/index.cjs CHANGED
@@ -107983,8 +107983,9 @@ Change your strategy:${scopeHint}
107983
107983
  }
107984
107984
  }
107985
107985
  const delegatePath = searchPath || "";
107986
+ const samePathDelegations = previousDelegations.filter((d) => d.path === delegatePath);
107986
107987
  let effectiveQuery = searchQuery;
107987
- if (previousDelegations.length > 0) {
107988
+ if (samePathDelegations.length > 0) {
107988
107989
  const dedupProvider = options.searchDelegateProvider || process.env.PROBE_SEARCH_DELEGATE_PROVIDER || options.provider || process.env.FORCE_PROVIDER || null;
107989
107990
  const dedupModelName = options.searchDelegateModel || process.env.PROBE_SEARCH_DELEGATE_MODEL || options.model || process.env.MODEL_NAME || null;
107990
107991
  if (cachedDedupModel === void 0) {
@@ -107998,14 +107999,14 @@ Change your strategy:${scopeHint}
107998
107999
  }
107999
108000
  const dedupSpanAttrs = {
108000
108001
  "dedup.query": searchQuery,
108001
- "dedup.previous_count": String(previousDelegations.length),
108002
- "dedup.previous_queries": previousDelegations.map((d) => d.query).join(" | "),
108002
+ "dedup.previous_count": String(samePathDelegations.length),
108003
+ "dedup.previous_queries": samePathDelegations.map((d) => d.query).join(" | "),
108003
108004
  "dedup.provider": dedupProvider || "",
108004
108005
  "dedup.model": dedupModelName || "",
108005
108006
  "dedup.model_available": cachedDedupModel ? "true" : "false"
108006
108007
  };
108007
108008
  const dedup = options.tracer?.withSpan ? await options.tracer.withSpan("search.delegate.dedup", async () => {
108008
- return await checkDelegateDedup(searchQuery, previousDelegations, cachedDedupModel, debug);
108009
+ return await checkDelegateDedup(searchQuery, samePathDelegations, cachedDedupModel, debug);
108009
108010
  }, dedupSpanAttrs, (span, result) => {
108010
108011
  span.setAttributes({
108011
108012
  "dedup.action": result.action,
@@ -108013,12 +108014,12 @@ Change your strategy:${scopeHint}
108013
108014
  "dedup.rewritten": result.rewritten || "",
108014
108015
  "dedup.error": result.error || ""
108015
108016
  });
108016
- }) : await checkDelegateDedup(searchQuery, previousDelegations, cachedDedupModel, debug);
108017
+ }) : await checkDelegateDedup(searchQuery, samePathDelegations, cachedDedupModel, debug);
108017
108018
  if (debug) {
108018
108019
  console.error(`[DEDUP-LLM] Query: "${searchQuery}" \u2192 ${dedup.action}: ${dedup.reason}${dedup.rewritten ? ` \u2192 "${dedup.rewritten}"` : ""}`);
108019
108020
  }
108020
108021
  if (dedup.action === "block") {
108021
- const prevQueries = previousDelegations.map((d) => `"${d.query}"`).join(", ");
108022
+ const prevQueries = samePathDelegations.map((d) => `"${d.query}"`).join(", ");
108022
108023
  return `DELEGATE BLOCKED: "${searchQuery}" is semantically duplicate of previous delegation(s) [${prevQueries}]. ${dedup.reason}
108023
108024
 
108024
108025
  Do NOT re-delegate the same concept. Use extract() on files already found, or synthesize your answer from existing results.`;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@probelabs/probe",
3
- "version": "0.6.0-rc318",
3
+ "version": "0.6.0-rc319",
4
4
  "description": "Node.js wrapper for the probe code search tool",
5
5
  "main": "src/index.js",
6
6
  "module": "src/index.js",
@@ -719,14 +719,12 @@ export const searchTool = (options = {}) => {
719
719
  // ── Delegate-level semantic dedup ────────────────────────────
720
720
  // Each delegate is a full flash agent session (minutes, not seconds).
721
721
  // Use LLM to detect semantic duplicates and suggest rewrites.
722
- // Compare against ALL previous delegations (not filtered by path) because
723
- // the parent model often narrows the path while asking the same concept
724
- // (e.g., "dedup" at /src → "deduplicate" at /src/search.js).
725
722
  const delegatePath = searchPath || '';
723
+ const samePathDelegations = previousDelegations.filter(d => d.path === delegatePath);
726
724
 
727
725
  let effectiveQuery = searchQuery;
728
726
 
729
- if (previousDelegations.length > 0) {
727
+ if (samePathDelegations.length > 0) {
730
728
  const dedupProvider = options.searchDelegateProvider || process.env.PROBE_SEARCH_DELEGATE_PROVIDER || options.provider || process.env.FORCE_PROVIDER || null;
731
729
  const dedupModelName = options.searchDelegateModel || process.env.PROBE_SEARCH_DELEGATE_MODEL || options.model || process.env.MODEL_NAME || null;
732
730
  // Lazily create the dedup model (same provider/model as delegate)
@@ -742,8 +740,8 @@ export const searchTool = (options = {}) => {
742
740
 
743
741
  const dedupSpanAttrs = {
744
742
  'dedup.query': searchQuery,
745
- 'dedup.previous_count': String(previousDelegations.length),
746
- 'dedup.previous_queries': previousDelegations.map(d => d.query).join(' | '),
743
+ 'dedup.previous_count': String(samePathDelegations.length),
744
+ 'dedup.previous_queries': samePathDelegations.map(d => d.query).join(' | '),
747
745
  'dedup.provider': dedupProvider || '',
748
746
  'dedup.model': dedupModelName || '',
749
747
  'dedup.model_available': cachedDedupModel ? 'true' : 'false',
@@ -751,7 +749,7 @@ export const searchTool = (options = {}) => {
751
749
 
752
750
  const dedup = options.tracer?.withSpan
753
751
  ? await options.tracer.withSpan('search.delegate.dedup', async () => {
754
- return await checkDelegateDedup(searchQuery, previousDelegations, cachedDedupModel, debug);
752
+ return await checkDelegateDedup(searchQuery, samePathDelegations, cachedDedupModel, debug);
755
753
  }, dedupSpanAttrs, (span, result) => {
756
754
  span.setAttributes({
757
755
  'dedup.action': result.action,
@@ -760,14 +758,14 @@ export const searchTool = (options = {}) => {
760
758
  'dedup.error': result.error || '',
761
759
  });
762
760
  })
763
- : await checkDelegateDedup(searchQuery, previousDelegations, cachedDedupModel, debug);
761
+ : await checkDelegateDedup(searchQuery, samePathDelegations, cachedDedupModel, debug);
764
762
 
765
763
  if (debug) {
766
764
  console.error(`[DEDUP-LLM] Query: "${searchQuery}" → ${dedup.action}: ${dedup.reason}${dedup.rewritten ? ` → "${dedup.rewritten}"` : ''}`);
767
765
  }
768
766
 
769
767
  if (dedup.action === 'block') {
770
- const prevQueries = previousDelegations.map(d => `"${d.query}"`).join(', ');
768
+ const prevQueries = samePathDelegations.map(d => `"${d.query}"`).join(', ');
771
769
  return `DELEGATE BLOCKED: "${searchQuery}" is semantically duplicate of previous delegation(s) [${prevQueries}]. ${dedup.reason}\n\nDo NOT re-delegate the same concept. Use extract() on files already found, or synthesize your answer from existing results.`;
772
770
  }
773
771