@opencow-ai/opencow-agent-sdk 0.4.15 → 0.4.16

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/dist/cli.mjs CHANGED
@@ -94698,7 +94698,7 @@ function printStartupScreen() {
94698
94698
  const sLen = ` ● ${sL} Ready — type /help to begin`.length;
94699
94699
  out.push(boxRow(sRow, W2, sLen));
94700
94700
  out.push(`${rgb(...BORDER)}╚${"═".repeat(W2 - 2)}╝${RESET}`);
94701
- out.push(` ${DIM}${rgb(...DIMCOL)}opencow ${RESET}${rgb(...ACCENT)}v${"0.4.15"}${RESET}`);
94701
+ out.push(` ${DIM}${rgb(...DIMCOL)}opencow ${RESET}${rgb(...ACCENT)}v${"0.4.16"}${RESET}`);
94702
94702
  out.push("");
94703
94703
  process.stdout.write(out.join(`
94704
94704
  `) + `
@@ -244619,7 +244619,7 @@ function getAnthropicEnvMetadata() {
244619
244619
  function getBuildAgeMinutes() {
244620
244620
  if (false)
244621
244621
  ;
244622
- const buildTime = new Date("2026-07-07T09:41:37.769Z").getTime();
244622
+ const buildTime = new Date("2026-07-08T06:56:56.372Z").getTime();
244623
244623
  if (isNaN(buildTime))
244624
244624
  return;
244625
244625
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -273433,7 +273433,7 @@ var init_GlobTool = __esm(() => {
273433
273433
  } = lazyUI("Glob"));
273434
273434
  inputSchema10 = lazySchema(() => exports_external.strictObject({
273435
273435
  pattern: exports_external.preprocess((value) => typeof value === "string" && value.trim().length === 0 ? undefined : value, exports_external.string().default(DEFAULT_GLOB_PATTERN).describe('The glob pattern to match files against. Defaults to "*" when omitted.')),
273436
- path: exports_external.string().optional().describe('The directory to search in. If not specified, the current working directory will be used. IMPORTANT: Omit this field to use the default directory. DO NOT enter "undefined" or "null" - simply omit it for the default behavior. Must be a valid directory path if provided.')
273436
+ path: exports_external.string().optional().describe("Optional directory path to search. Omit this field to use the current working directory.")
273437
273437
  }));
273438
273438
  outputSchema9 = lazySchema(() => exports_external.object({
273439
273439
  durationMs: exports_external.number().describe("Time taken to execute the search in milliseconds"),
@@ -273567,6 +273567,18 @@ var init_GlobTool = __esm(() => {
273567
273567
  });
273568
273568
 
273569
273569
  // src/capabilities/tools/GrepTool/GrepTool.ts
273570
+ function grepBoolean(inner) {
273571
+ return exports_external.preprocess((value) => {
273572
+ if (typeof value === "string") {
273573
+ const normalized = value.trim().toLowerCase();
273574
+ if (normalized === "true")
273575
+ return true;
273576
+ if (normalized === "false")
273577
+ return false;
273578
+ }
273579
+ return value;
273580
+ }, inner);
273581
+ }
273570
273582
  function applyHeadLimit(items, limit, offset = 0) {
273571
273583
  if (limit === 0) {
273572
273584
  return { items: items.slice(offset), appliedLimit: undefined };
@@ -273600,7 +273612,6 @@ var init_GrepTool = __esm(() => {
273600
273612
  init_shellRuleMatching();
273601
273613
  init_orphanedPluginFilter();
273602
273614
  init_ripgrep();
273603
- init_semanticBoolean();
273604
273615
  init_semanticNumber();
273605
273616
  init_stringUtils();
273606
273617
  init_prompt3();
@@ -273613,19 +273624,19 @@ var init_GrepTool = __esm(() => {
273613
273624
  } = lazyUI("Grep"));
273614
273625
  inputSchema11 = lazySchema(() => exports_external.strictObject({
273615
273626
  pattern: exports_external.preprocess((value) => typeof value === "string" && value.trim().length === 0 ? undefined : value, exports_external.string().default(DEFAULT_GREP_PATTERN).describe('The regular expression pattern to search for in file contents. Defaults to "." (match any non-empty line) when omitted.')),
273616
- path: exports_external.string().optional().describe("File or directory to search in (rg PATH). Defaults to current working directory."),
273617
- glob: exports_external.string().optional().describe('Glob pattern to filter files (e.g. "*.js", "*.{ts,tsx}") - maps to rg --glob'),
273618
- output_mode: exports_external.enum(["content", "files_with_matches", "count"]).optional().describe('Output mode: "content" shows matching lines (supports -A/-B/-C context, -n line numbers, head_limit), "files_with_matches" shows file paths (supports head_limit), "count" shows match counts (supports head_limit). Defaults to "files_with_matches".'),
273619
- "-B": semanticNumber(exports_external.number().optional()).describe('Number of lines to show before each match (rg -B). Requires output_mode: "content", ignored otherwise.'),
273620
- "-A": semanticNumber(exports_external.number().optional()).describe('Number of lines to show after each match (rg -A). Requires output_mode: "content", ignored otherwise.'),
273621
- "-C": semanticNumber(exports_external.number().optional()).describe("Alias for context."),
273622
- context: semanticNumber(exports_external.number().optional()).describe('Number of lines to show before and after each match (rg -C). Requires output_mode: "content", ignored otherwise.'),
273623
- "-n": semanticBoolean(exports_external.boolean().optional()).describe('Show line numbers in output (rg -n). Requires output_mode: "content", ignored otherwise. Defaults to true.'),
273624
- "-i": semanticBoolean(exports_external.boolean().optional()).describe("Case insensitive search (rg -i)"),
273625
- type: exports_external.string().optional().describe("File type to search (rg --type). Common types: js, py, rust, go, java, etc. More efficient than include for standard file types."),
273626
- head_limit: semanticNumber(exports_external.number().optional()).describe('Limit output to first N lines/entries, equivalent to "| head -N". Works across all output modes: content (limits output lines), files_with_matches (limits file paths), count (limits count entries). Defaults to 250 when unspecified. Pass 0 for unlimited (use sparingly — large result sets waste context).'),
273627
- offset: semanticNumber(exports_external.number().optional()).describe('Skip first N lines/entries before applying head_limit, equivalent to "| tail -n +N | head -N". Works across all output modes. Defaults to 0.'),
273628
- multiline: semanticBoolean(exports_external.boolean().optional()).describe("Enable multiline mode where . matches newlines and patterns can span lines (rg -U --multiline-dotall). Default: false.")
273627
+ path: exports_external.string().optional().describe("File or directory path to search. Defaults to current working directory."),
273628
+ glob: exports_external.string().optional().describe('Glob pattern to filter searched files (e.g. "*.js", "*.{ts,tsx}").'),
273629
+ output_mode: exports_external.enum(["content", "files_with_matches", "count"]).optional().describe('Output mode: "content" shows matching lines (supports context line fields, the -n boolean field, and head_limit), "files_with_matches" shows file paths (supports head_limit), "count" shows match counts (supports head_limit). Defaults to "files_with_matches".'),
273630
+ "-B": semanticNumber(exports_external.number().optional()).describe('JSON number field: lines to show before each match. Requires output_mode: "content", ignored otherwise.'),
273631
+ "-A": semanticNumber(exports_external.number().optional()).describe('JSON number field: lines to show after each match. Requires output_mode: "content", ignored otherwise.'),
273632
+ "-C": semanticNumber(exports_external.number().optional()).describe("JSON number field: lines to show before and after each match. Alias for context."),
273633
+ context: semanticNumber(exports_external.number().optional()).describe('JSON number field: lines to show before and after each match. Requires output_mode: "content", ignored otherwise.'),
273634
+ "-n": grepBoolean(exports_external.boolean().optional()).describe('JSON boolean field that controls whether output includes line numbers. Requires output_mode: "content", ignored otherwise. Defaults to true.'),
273635
+ "-i": grepBoolean(exports_external.boolean().optional()).describe("JSON boolean field that enables case-insensitive search."),
273636
+ type: exports_external.string().optional().describe("File type filter. Common values: js, py, rust, go, java, etc. More efficient than glob for standard file types."),
273637
+ head_limit: semanticNumber(exports_external.number().optional()).describe("JSON number field limiting returned lines or entries. Works across all output modes: content limits output lines, files_with_matches limits file paths, count limits count entries. Defaults to 250 when unspecified. Pass 0 for unlimited, sparingly."),
273638
+ offset: semanticNumber(exports_external.number().optional()).describe("JSON number field skipping the first N returned lines or entries before applying head_limit. Works across all output modes. Defaults to 0."),
273639
+ multiline: grepBoolean(exports_external.boolean().optional()).describe("JSON boolean field that enables multiline mode where . matches newlines and patterns can span lines. Default: false.")
273629
273640
  }));
273630
273641
  VCS_DIRECTORIES_TO_EXCLUDE2 = [
273631
273642
  ".git",
@@ -480075,7 +480086,7 @@ function buildPrimarySection() {
480075
480086
  }, undefined, false, undefined, this);
480076
480087
  return [{
480077
480088
  label: "Version",
480078
- value: "0.4.15"
480089
+ value: "0.4.16"
480079
480090
  }, {
480080
480091
  label: "Session name",
480081
480092
  value: nameValue
@@ -536398,7 +536409,7 @@ var init_bridge_kick = __esm(() => {
536398
536409
  var call58 = async () => {
536399
536410
  return {
536400
536411
  type: "text",
536401
- value: `${"99.0.0"} (built ${"2026-07-07T09:41:37.769Z"})`
536412
+ value: `${"99.0.0"} (built ${"2026-07-08T06:56:56.372Z"})`
536402
536413
  };
536403
536414
  }, version2, version_default;
536404
536415
  var init_version = __esm(() => {
@@ -558508,7 +558519,7 @@ function WelcomeV2() {
558508
558519
  dimColor: true,
558509
558520
  children: [
558510
558521
  "v",
558511
- "0.4.15",
558522
+ "0.4.16",
558512
558523
  " "
558513
558524
  ]
558514
558525
  }, undefined, true, undefined, this)
@@ -558708,7 +558719,7 @@ function WelcomeV2() {
558708
558719
  dimColor: true,
558709
558720
  children: [
558710
558721
  "v",
558711
- "0.4.15",
558722
+ "0.4.16",
558712
558723
  " "
558713
558724
  ]
558714
558725
  }, undefined, true, undefined, this)
@@ -558934,7 +558945,7 @@ function AppleTerminalWelcomeV2(t0) {
558934
558945
  dimColor: true,
558935
558946
  children: [
558936
558947
  "v",
558937
- "0.4.15",
558948
+ "0.4.16",
558938
558949
  " "
558939
558950
  ]
558940
558951
  }, undefined, true, undefined, this);
@@ -559188,7 +559199,7 @@ function AppleTerminalWelcomeV2(t0) {
559188
559199
  dimColor: true,
559189
559200
  children: [
559190
559201
  "v",
559191
- "0.4.15",
559202
+ "0.4.16",
559192
559203
  " "
559193
559204
  ]
559194
559205
  }, undefined, true, undefined, this);
@@ -580063,7 +580074,7 @@ Usage: claude --remote "your task description"`, () => gracefulShutdown(1));
580063
580074
  pendingHookMessages
580064
580075
  }, renderAndRun);
580065
580076
  }
580066
- }).version("0.4.15 (OpenCow)", "-v, --version", "Output the version number");
580077
+ }).version("0.4.16 (OpenCow)", "-v, --version", "Output the version number");
580067
580078
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
580068
580079
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
580069
580080
  if (canUserConfigureAdvisor()) {
@@ -580709,7 +580720,7 @@ if (false) {}
580709
580720
  async function main2() {
580710
580721
  const args = process.argv.slice(2);
580711
580722
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
580712
- console.log(`${"0.4.15"} (OpenCow)`);
580723
+ console.log(`${"0.4.16"} (OpenCow)`);
580713
580724
  return;
580714
580725
  }
580715
580726
  if (args.includes("--provider")) {
@@ -580827,4 +580838,4 @@ async function main2() {
580827
580838
  }
580828
580839
  main2();
580829
580840
 
580830
- //# debugId=B3DC484465E4B22564756E2164756E21
580841
+ //# debugId=79939475117F759764756E2164756E21
package/dist/client.js CHANGED
@@ -254794,7 +254794,7 @@ var init_GlobTool = __esm(() => {
254794
254794
  } = lazyUI("Glob"));
254795
254795
  inputSchema9 = lazySchema(() => exports_external2.strictObject({
254796
254796
  pattern: exports_external2.preprocess((value) => typeof value === "string" && value.trim().length === 0 ? undefined : value, exports_external2.string().default(DEFAULT_GLOB_PATTERN).describe('The glob pattern to match files against. Defaults to "*" when omitted.')),
254797
- path: exports_external2.string().optional().describe('The directory to search in. If not specified, the current working directory will be used. IMPORTANT: Omit this field to use the default directory. DO NOT enter "undefined" or "null" - simply omit it for the default behavior. Must be a valid directory path if provided.')
254797
+ path: exports_external2.string().optional().describe("Optional directory path to search. Omit this field to use the current working directory.")
254798
254798
  }));
254799
254799
  outputSchema8 = lazySchema(() => exports_external2.object({
254800
254800
  durationMs: exports_external2.number().describe("Time taken to execute the search in milliseconds"),
@@ -254943,6 +254943,18 @@ var init_semanticNumber = __esm(() => {
254943
254943
  });
254944
254944
 
254945
254945
  // src/capabilities/tools/GrepTool/GrepTool.ts
254946
+ function grepBoolean(inner) {
254947
+ return exports_external2.preprocess((value) => {
254948
+ if (typeof value === "string") {
254949
+ const normalized = value.trim().toLowerCase();
254950
+ if (normalized === "true")
254951
+ return true;
254952
+ if (normalized === "false")
254953
+ return false;
254954
+ }
254955
+ return value;
254956
+ }, inner);
254957
+ }
254946
254958
  function applyHeadLimit(items, limit, offset = 0) {
254947
254959
  if (limit === 0) {
254948
254960
  return { items: items.slice(offset), appliedLimit: undefined };
@@ -254976,7 +254988,6 @@ var init_GrepTool = __esm(() => {
254976
254988
  init_shellRuleMatching();
254977
254989
  init_orphanedPluginFilter();
254978
254990
  init_ripgrep();
254979
- init_semanticBoolean();
254980
254991
  init_semanticNumber();
254981
254992
  init_stringUtils();
254982
254993
  init_prompt4();
@@ -254989,19 +255000,19 @@ var init_GrepTool = __esm(() => {
254989
255000
  } = lazyUI("Grep"));
254990
255001
  inputSchema10 = lazySchema(() => exports_external2.strictObject({
254991
255002
  pattern: exports_external2.preprocess((value) => typeof value === "string" && value.trim().length === 0 ? undefined : value, exports_external2.string().default(DEFAULT_GREP_PATTERN).describe('The regular expression pattern to search for in file contents. Defaults to "." (match any non-empty line) when omitted.')),
254992
- path: exports_external2.string().optional().describe("File or directory to search in (rg PATH). Defaults to current working directory."),
254993
- glob: exports_external2.string().optional().describe('Glob pattern to filter files (e.g. "*.js", "*.{ts,tsx}") - maps to rg --glob'),
254994
- output_mode: exports_external2.enum(["content", "files_with_matches", "count"]).optional().describe('Output mode: "content" shows matching lines (supports -A/-B/-C context, -n line numbers, head_limit), "files_with_matches" shows file paths (supports head_limit), "count" shows match counts (supports head_limit). Defaults to "files_with_matches".'),
254995
- "-B": semanticNumber(exports_external2.number().optional()).describe('Number of lines to show before each match (rg -B). Requires output_mode: "content", ignored otherwise.'),
254996
- "-A": semanticNumber(exports_external2.number().optional()).describe('Number of lines to show after each match (rg -A). Requires output_mode: "content", ignored otherwise.'),
254997
- "-C": semanticNumber(exports_external2.number().optional()).describe("Alias for context."),
254998
- context: semanticNumber(exports_external2.number().optional()).describe('Number of lines to show before and after each match (rg -C). Requires output_mode: "content", ignored otherwise.'),
254999
- "-n": semanticBoolean(exports_external2.boolean().optional()).describe('Show line numbers in output (rg -n). Requires output_mode: "content", ignored otherwise. Defaults to true.'),
255000
- "-i": semanticBoolean(exports_external2.boolean().optional()).describe("Case insensitive search (rg -i)"),
255001
- type: exports_external2.string().optional().describe("File type to search (rg --type). Common types: js, py, rust, go, java, etc. More efficient than include for standard file types."),
255002
- head_limit: semanticNumber(exports_external2.number().optional()).describe('Limit output to first N lines/entries, equivalent to "| head -N". Works across all output modes: content (limits output lines), files_with_matches (limits file paths), count (limits count entries). Defaults to 250 when unspecified. Pass 0 for unlimited (use sparingly — large result sets waste context).'),
255003
- offset: semanticNumber(exports_external2.number().optional()).describe('Skip first N lines/entries before applying head_limit, equivalent to "| tail -n +N | head -N". Works across all output modes. Defaults to 0.'),
255004
- multiline: semanticBoolean(exports_external2.boolean().optional()).describe("Enable multiline mode where . matches newlines and patterns can span lines (rg -U --multiline-dotall). Default: false.")
255003
+ path: exports_external2.string().optional().describe("File or directory path to search. Defaults to current working directory."),
255004
+ glob: exports_external2.string().optional().describe('Glob pattern to filter searched files (e.g. "*.js", "*.{ts,tsx}").'),
255005
+ output_mode: exports_external2.enum(["content", "files_with_matches", "count"]).optional().describe('Output mode: "content" shows matching lines (supports context line fields, the -n boolean field, and head_limit), "files_with_matches" shows file paths (supports head_limit), "count" shows match counts (supports head_limit). Defaults to "files_with_matches".'),
255006
+ "-B": semanticNumber(exports_external2.number().optional()).describe('JSON number field: lines to show before each match. Requires output_mode: "content", ignored otherwise.'),
255007
+ "-A": semanticNumber(exports_external2.number().optional()).describe('JSON number field: lines to show after each match. Requires output_mode: "content", ignored otherwise.'),
255008
+ "-C": semanticNumber(exports_external2.number().optional()).describe("JSON number field: lines to show before and after each match. Alias for context."),
255009
+ context: semanticNumber(exports_external2.number().optional()).describe('JSON number field: lines to show before and after each match. Requires output_mode: "content", ignored otherwise.'),
255010
+ "-n": grepBoolean(exports_external2.boolean().optional()).describe('JSON boolean field that controls whether output includes line numbers. Requires output_mode: "content", ignored otherwise. Defaults to true.'),
255011
+ "-i": grepBoolean(exports_external2.boolean().optional()).describe("JSON boolean field that enables case-insensitive search."),
255012
+ type: exports_external2.string().optional().describe("File type filter. Common values: js, py, rust, go, java, etc. More efficient than glob for standard file types."),
255013
+ head_limit: semanticNumber(exports_external2.number().optional()).describe("JSON number field limiting returned lines or entries. Works across all output modes: content limits output lines, files_with_matches limits file paths, count limits count entries. Defaults to 250 when unspecified. Pass 0 for unlimited, sparingly."),
255014
+ offset: semanticNumber(exports_external2.number().optional()).describe("JSON number field skipping the first N returned lines or entries before applying head_limit. Works across all output modes. Defaults to 0."),
255015
+ multiline: grepBoolean(exports_external2.boolean().optional()).describe("JSON boolean field that enables multiline mode where . matches newlines and patterns can span lines. Default: false.")
255005
255016
  }));
255006
255017
  VCS_DIRECTORIES_TO_EXCLUDE = [
255007
255018
  ".git",
@@ -282893,7 +282904,7 @@ function getAnthropicEnvMetadata() {
282893
282904
  function getBuildAgeMinutes() {
282894
282905
  if (false)
282895
282906
  ;
282896
- const buildTime = new Date("2026-07-07T09:41:37.769Z").getTime();
282907
+ const buildTime = new Date("2026-07-08T06:56:56.372Z").getTime();
282897
282908
  if (isNaN(buildTime))
282898
282909
  return;
282899
282910
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -336383,4 +336394,4 @@ export {
336383
336394
  AbortError2 as AbortError
336384
336395
  };
336385
336396
 
336386
- //# debugId=7503E4A2FEE6F7C164756E2164756E21
336397
+ //# debugId=116A1A82F0582B0D64756E2164756E21
package/dist/sdk.js CHANGED
@@ -254794,7 +254794,7 @@ var init_GlobTool = __esm(() => {
254794
254794
  } = lazyUI("Glob"));
254795
254795
  inputSchema9 = lazySchema(() => exports_external2.strictObject({
254796
254796
  pattern: exports_external2.preprocess((value) => typeof value === "string" && value.trim().length === 0 ? undefined : value, exports_external2.string().default(DEFAULT_GLOB_PATTERN).describe('The glob pattern to match files against. Defaults to "*" when omitted.')),
254797
- path: exports_external2.string().optional().describe('The directory to search in. If not specified, the current working directory will be used. IMPORTANT: Omit this field to use the default directory. DO NOT enter "undefined" or "null" - simply omit it for the default behavior. Must be a valid directory path if provided.')
254797
+ path: exports_external2.string().optional().describe("Optional directory path to search. Omit this field to use the current working directory.")
254798
254798
  }));
254799
254799
  outputSchema8 = lazySchema(() => exports_external2.object({
254800
254800
  durationMs: exports_external2.number().describe("Time taken to execute the search in milliseconds"),
@@ -254943,6 +254943,18 @@ var init_semanticNumber = __esm(() => {
254943
254943
  });
254944
254944
 
254945
254945
  // src/capabilities/tools/GrepTool/GrepTool.ts
254946
+ function grepBoolean(inner) {
254947
+ return exports_external2.preprocess((value) => {
254948
+ if (typeof value === "string") {
254949
+ const normalized = value.trim().toLowerCase();
254950
+ if (normalized === "true")
254951
+ return true;
254952
+ if (normalized === "false")
254953
+ return false;
254954
+ }
254955
+ return value;
254956
+ }, inner);
254957
+ }
254946
254958
  function applyHeadLimit(items, limit, offset = 0) {
254947
254959
  if (limit === 0) {
254948
254960
  return { items: items.slice(offset), appliedLimit: undefined };
@@ -254976,7 +254988,6 @@ var init_GrepTool = __esm(() => {
254976
254988
  init_shellRuleMatching();
254977
254989
  init_orphanedPluginFilter();
254978
254990
  init_ripgrep();
254979
- init_semanticBoolean();
254980
254991
  init_semanticNumber();
254981
254992
  init_stringUtils();
254982
254993
  init_prompt4();
@@ -254989,19 +255000,19 @@ var init_GrepTool = __esm(() => {
254989
255000
  } = lazyUI("Grep"));
254990
255001
  inputSchema10 = lazySchema(() => exports_external2.strictObject({
254991
255002
  pattern: exports_external2.preprocess((value) => typeof value === "string" && value.trim().length === 0 ? undefined : value, exports_external2.string().default(DEFAULT_GREP_PATTERN).describe('The regular expression pattern to search for in file contents. Defaults to "." (match any non-empty line) when omitted.')),
254992
- path: exports_external2.string().optional().describe("File or directory to search in (rg PATH). Defaults to current working directory."),
254993
- glob: exports_external2.string().optional().describe('Glob pattern to filter files (e.g. "*.js", "*.{ts,tsx}") - maps to rg --glob'),
254994
- output_mode: exports_external2.enum(["content", "files_with_matches", "count"]).optional().describe('Output mode: "content" shows matching lines (supports -A/-B/-C context, -n line numbers, head_limit), "files_with_matches" shows file paths (supports head_limit), "count" shows match counts (supports head_limit). Defaults to "files_with_matches".'),
254995
- "-B": semanticNumber(exports_external2.number().optional()).describe('Number of lines to show before each match (rg -B). Requires output_mode: "content", ignored otherwise.'),
254996
- "-A": semanticNumber(exports_external2.number().optional()).describe('Number of lines to show after each match (rg -A). Requires output_mode: "content", ignored otherwise.'),
254997
- "-C": semanticNumber(exports_external2.number().optional()).describe("Alias for context."),
254998
- context: semanticNumber(exports_external2.number().optional()).describe('Number of lines to show before and after each match (rg -C). Requires output_mode: "content", ignored otherwise.'),
254999
- "-n": semanticBoolean(exports_external2.boolean().optional()).describe('Show line numbers in output (rg -n). Requires output_mode: "content", ignored otherwise. Defaults to true.'),
255000
- "-i": semanticBoolean(exports_external2.boolean().optional()).describe("Case insensitive search (rg -i)"),
255001
- type: exports_external2.string().optional().describe("File type to search (rg --type). Common types: js, py, rust, go, java, etc. More efficient than include for standard file types."),
255002
- head_limit: semanticNumber(exports_external2.number().optional()).describe('Limit output to first N lines/entries, equivalent to "| head -N". Works across all output modes: content (limits output lines), files_with_matches (limits file paths), count (limits count entries). Defaults to 250 when unspecified. Pass 0 for unlimited (use sparingly — large result sets waste context).'),
255003
- offset: semanticNumber(exports_external2.number().optional()).describe('Skip first N lines/entries before applying head_limit, equivalent to "| tail -n +N | head -N". Works across all output modes. Defaults to 0.'),
255004
- multiline: semanticBoolean(exports_external2.boolean().optional()).describe("Enable multiline mode where . matches newlines and patterns can span lines (rg -U --multiline-dotall). Default: false.")
255003
+ path: exports_external2.string().optional().describe("File or directory path to search. Defaults to current working directory."),
255004
+ glob: exports_external2.string().optional().describe('Glob pattern to filter searched files (e.g. "*.js", "*.{ts,tsx}").'),
255005
+ output_mode: exports_external2.enum(["content", "files_with_matches", "count"]).optional().describe('Output mode: "content" shows matching lines (supports context line fields, the -n boolean field, and head_limit), "files_with_matches" shows file paths (supports head_limit), "count" shows match counts (supports head_limit). Defaults to "files_with_matches".'),
255006
+ "-B": semanticNumber(exports_external2.number().optional()).describe('JSON number field: lines to show before each match. Requires output_mode: "content", ignored otherwise.'),
255007
+ "-A": semanticNumber(exports_external2.number().optional()).describe('JSON number field: lines to show after each match. Requires output_mode: "content", ignored otherwise.'),
255008
+ "-C": semanticNumber(exports_external2.number().optional()).describe("JSON number field: lines to show before and after each match. Alias for context."),
255009
+ context: semanticNumber(exports_external2.number().optional()).describe('JSON number field: lines to show before and after each match. Requires output_mode: "content", ignored otherwise.'),
255010
+ "-n": grepBoolean(exports_external2.boolean().optional()).describe('JSON boolean field that controls whether output includes line numbers. Requires output_mode: "content", ignored otherwise. Defaults to true.'),
255011
+ "-i": grepBoolean(exports_external2.boolean().optional()).describe("JSON boolean field that enables case-insensitive search."),
255012
+ type: exports_external2.string().optional().describe("File type filter. Common values: js, py, rust, go, java, etc. More efficient than glob for standard file types."),
255013
+ head_limit: semanticNumber(exports_external2.number().optional()).describe("JSON number field limiting returned lines or entries. Works across all output modes: content limits output lines, files_with_matches limits file paths, count limits count entries. Defaults to 250 when unspecified. Pass 0 for unlimited, sparingly."),
255014
+ offset: semanticNumber(exports_external2.number().optional()).describe("JSON number field skipping the first N returned lines or entries before applying head_limit. Works across all output modes. Defaults to 0."),
255015
+ multiline: grepBoolean(exports_external2.boolean().optional()).describe("JSON boolean field that enables multiline mode where . matches newlines and patterns can span lines. Default: false.")
255005
255016
  }));
255006
255017
  VCS_DIRECTORIES_TO_EXCLUDE = [
255007
255018
  ".git",
@@ -282893,7 +282904,7 @@ function getAnthropicEnvMetadata() {
282893
282904
  function getBuildAgeMinutes() {
282894
282905
  if (false)
282895
282906
  ;
282896
- const buildTime = new Date("2026-07-07T09:41:37.769Z").getTime();
282907
+ const buildTime = new Date("2026-07-08T06:56:56.372Z").getTime();
282897
282908
  if (isNaN(buildTime))
282898
282909
  return;
282899
282910
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -336383,4 +336394,4 @@ export {
336383
336394
  AbortError2 as AbortError
336384
336395
  };
336385
336396
 
336386
- //# debugId=40B327CE0812EA8164756E2164756E21
336397
+ //# debugId=B9DA1355E8B3544864756E2164756E21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opencow-ai/opencow-agent-sdk",
3
- "version": "0.4.15",
3
+ "version": "0.4.16",
4
4
  "description": "Claude Code opened to any LLM — OpenAI, Gemini, DeepSeek, Ollama, and 200+ models",
5
5
  "type": "module",
6
6
  "main": "./dist/sdk.js",