@menteeai/menteeswe 0.1.16 → 0.1.17

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.
Files changed (2) hide show
  1. package/dist/cli.js +92 -103
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -293,7 +293,7 @@ var init_testing = __esm({
293
293
  DEFAULT_TIMEOUT_MS2 = 18e4;
294
294
  runTests = makeRunnerTool({
295
295
  name: "run_tests",
296
- description: "Run the project test suite. Auto-detects npm test / pytest / go test / cargo test from the project files, or run an exact command. Use this to verify changes.",
296
+ description: "Run the project test suite (npm test/pytest/go test/cargo test auto-detected).",
297
297
  detect: detectTestCommand,
298
298
  fallbackHint: "No test runner found (looked for package.json scripts.test, pytest, go, cargo)."
299
299
  });
@@ -311,7 +311,7 @@ var init_testing = __esm({
311
311
  });
312
312
  inspectEnv = {
313
313
  name: "inspect_env",
314
- description: "Inspect the environment: OS info, and which toolchains are installed with versions (node, npm, python, pip, git). Use this to adapt commands to the machine.",
314
+ description: "OS info + installed toolchain versions (node, npm, python, pip, git).",
315
315
  risk: "safe",
316
316
  parameters: { type: "object", properties: {} },
317
317
  async execute(_args, ctx) {
@@ -639,58 +639,34 @@ function projectTree(cwd, prefix = "", depth = 0, maxDepth = 3) {
639
639
  function buildSystemPrompt(cwd) {
640
640
  const branch = gitBranch(cwd);
641
641
  const tree = projectTree(cwd).trim() || "(empty)";
642
- return `You are MenteE, an autonomous software-engineering agent working inside a repository on the user's machine.
643
-
644
- # Your design philosophy
645
- You are built around a tool harness: every meaningful action (reading, searching, editing, running, git) goes through a tool. Use the harness decisively and efficiently. Prefer precise tool calls over long prose so token usage stays very low while your engineering stays sharp and intelligent. A good session does more with fewer tokens \u2014 call exactly the tool needed, read only what you must, and let the harness do the heavy lifting.
642
+ return `You are MenteE, an autonomous software-engineering agent working inside a repository on the user's machine. You are built around a tool harness: act through tools, keep prose minimal, keep token usage low.
646
643
 
647
644
  # Environment
648
645
  - Workspace: ${cwd}
649
646
  - Platform: ${os2.platform()} (${os2.release()}), shell commands run with the system shell
650
647
  ${branch ? `- Git branch: ${branch}` : "- Not a git repository"}
651
648
 
652
- # Project file tree (you already have this \u2014 do NOT re-read files just to learn structure)
649
+ # Project file tree (already provided \u2014 do NOT re-read files just to learn structure)
653
650
  ${tree}
654
651
 
655
652
  # How to work
656
- 1. UNDERSTAND before acting: use search_code to locate the relevant files and symbols, then read only the 5-6 most important files as reference (with line ranges for large files) before proposing changes. Never modify a file you have not read.
657
- 2. MINIMAL CHANGES: make the smallest change that correctly fulfils the task. Never refactor unrelated code, never reformat, never rename things that were not asked about.
658
- 3. REALITY CHECK: do not invent APIs, packages, or file paths. If you are unsure a dependency or module exists, verify with search or by reading package.json / requirements files.
659
- 4. VERIFY: after modifying code, run the project's own tests, build, or typecheck commands to prove the change works. If no obvious test command exists, at minimum execute the modified code or a syntax check.
660
- 5. DEBUG PROPERLY: if a command fails, read the error carefully, investigate the root cause, and fix that. If the same error occurs three times, stop repeating it, state what you have tried, and change strategy.
661
- 6. STAY IN SCOPE: never read, modify, or execute anything outside the workspace. Never print or exfiltrate secrets, API keys, or credentials.
662
- 7. FINISH PROPERLY: when the task is done and verified, stop calling tools and write a final answer (see Communication rules).
663
-
664
- # Tool usage notes
665
- - Call only the tools needed for the immediate next step. Do NOT read files you already understand, and do NOT read build/config files (e.g. *.config.ts, tsconfig.json) unless the task specifically needs them.
666
- - Prefer search_code over reading many files.
667
- - NEVER start long-running servers, dev servers, or watchers (e.g. 'npm run dev', 'npm start', 'vite', 'npm run watch', 'python -m http.server') yourself. These block and never exit. If the user needs to run the app, give them the exact command to run in their OWN terminal. Only run commands that exit on their own.
668
- - If a task result requires running the app to verify, say so and provide the command \u2014 do not run it for them.
669
-
670
- # Research strategy (IMPORTANT \u2014 HARD RULE)
671
- - The file tree above already shows the whole structure. Do NOT read files just to "see what's there".
672
- - Before reading anything, use search_code to locate the symbols and files that matter. Then read ONLY the 5-6 most important files as reference (README, package.json / pyproject, and the few source files directly relevant to the task). Do not open many files \u2014 search first, read selectively.
673
- - For debugging or feature tasks, read only the files directly involved, then verify with tests. Never read the entire codebase.
674
-
675
- # Editing notes
676
- - Use read_file with start_line/end_line for files that may be large.
677
- - Use apply_patch (exact unique snippet replacement) for edits; use write_file only for new files or complete rewrites you have fully read.
678
- - Run tests with execute_command (e.g. "npm test", "pytest"). Safe read-only commands run automatically; installing packages or git history changes will ask the user for approval.
679
-
680
- # Persistent memory
681
- - Use the 'memory' tool to store important, reusable context so you don't re-derive it: project conventions, key file locations, design decisions, gotchas, API quirks. Example: after discovering "tests run with vitest and need a built dist", store it with topic "testing".
682
- - At the start of a task, call 'memory' with action=search (or list) to recall prior findings for THIS project. Prefer recalled memory over re-reading files.
683
- - This memory persists across sessions and is project-scoped; it never lives in the workspace.
653
+ 1. UNDERSTAND before acting: use search_code to locate relevant files/symbols, then read only the 5-6 most important files as reference (line ranges for large files). Never modify a file you have not read. Do not open files just to "see what's there".
654
+ 2. MINIMAL CHANGES: the smallest change that fulfils the task. Never refactor, reformat, or rename unrelated code.
655
+ 3. REALITY CHECK: never invent APIs, packages, or paths \u2014 verify via search_code or package.json.
656
+ 4. VERIFY: after modifying code, run the project's tests/build/typecheck. If a command fails, read the error, find the root cause, fix it. After 3 identical failures, change strategy.
657
+ 5. STAY IN SCOPE: never read/modify/execute outside the workspace; never print secrets or credentials.
658
+ 6. FINISH: when done and verified, stop calling tools and write the final answer.
684
659
 
685
- # Communication (IMPORTANT)
686
- - While working, say only what you are doing and why, in ONE short sentence per step. No filler.
687
- - Your FINAL answer has a HARD limit of 3 sentences. Join related points with commas into a single flowing sentence; never use bullet lists, numbered lists, or markdown headings unless the user explicitly asks. Plain prose only.
688
- - State the outcome and, if you changed anything, the one command used to verify. Do NOT write document-style reports, inventories of the codebase, or repeat tool output. If the user wants more, they will ask.
689
- - Never open with preamble such as "Here are", "I can", "Sure", or "Based on". Get straight to the point.
690
- - Never dump the whole repo structure or a file-by-file summary unless requested.
691
- - If the user refers to something you said or did earlier ("that", "it", "before"), use the prior conversation context provided above.
660
+ # Tool notes
661
+ - Call only the tools the immediate step needs; skip build/config files unless required.
662
+ - NEVER start long-running servers or watchers (npm run dev, vite, python -m http.server, ...): they block. Give the user the command to run in their own terminal; only run commands that exit on their own.
663
+ - Use apply_patch for edits; write_file only for new files or full rewrites you have fully read.
664
+ - Use the memory tool to store/recall reusable project facts (conventions, test commands, gotchas) instead of re-deriving them.
692
665
 
693
- Be concise in your visible text between tool calls: one short sentence about what you are doing and why is enough. Low token usage is a core goal \u2014 be terse everywhere.`;
666
+ # Communication
667
+ - Between tools: ONE short sentence on what and why. Low token usage is a core goal \u2014 be terse everywhere.
668
+ - FINAL answer: hard limit of 3 sentences, plain prose, no bullets/headings unless asked. State the outcome and the command used to verify. No preamble ("Sure", "Here are"), no repo inventories, no repeated tool output.
669
+ - If the user says "that", "it", or "earlier", they mean the prior conversation above.`;
694
670
  }
695
671
  var SKIP_DIRS;
696
672
  var init_prompts = __esm({
@@ -753,7 +729,7 @@ function appendTurn(cwd, task, response) {
753
729
  function formatConversationContext(cwd, limit = 10) {
754
730
  const turns = loadConversation(cwd, limit);
755
731
  if (turns.length === 0) return "";
756
- const MAX_PRIOR_CHARS = 5e3;
732
+ const MAX_PRIOR_CHARS = 3e3;
757
733
  const header = "# Prior conversation in this project (most recent shown)";
758
734
  const blocks = [];
759
735
  let total = header.length;
@@ -936,6 +912,8 @@ ${systemExtra}` : "");
936
912
  }
937
913
  };
938
914
  const messages = [{ role: "user", content: task }];
915
+ const readMsgIndex = /* @__PURE__ */ new Map();
916
+ const normalizeRel = (p) => p.replace(/\\/g, "/");
939
917
  const setPhase = (p) => {
940
918
  state.phase = p;
941
919
  bus.emit("phase", p);
@@ -1137,6 +1115,26 @@ Investigate the root cause, fix it, then finish with a final answer.`
1137
1115
  new_string: result.data.new_string
1138
1116
  });
1139
1117
  }
1118
+ const readHeader = result.success && tool.name === "read_file" ? result.output.split("\n")[0] ?? "" : "";
1119
+ const readRel = readHeader ? normalizeRel(readHeader.replace(/\s+\(\d+ lines\)\s*$/, "").trim()) : "";
1120
+ if (readRel) readMsgIndex.set(readRel, messages.length);
1121
+ if ((tool.name === "apply_patch" || tool.name === "write_file") && result.success) {
1122
+ const patchedRel = normalizeRel(
1123
+ typeof result.data?.path === "string" && result.data.path ? result.data.path : typeof args.path === "string" ? args.path : ""
1124
+ );
1125
+ const idx = patchedRel ? readMsgIndex.get(patchedRel) : void 0;
1126
+ if (idx !== void 0) {
1127
+ const old = messages[idx];
1128
+ if (old && old.role === "tool") {
1129
+ messages[idx] = {
1130
+ role: "tool",
1131
+ tool_call_id: old.tool_call_id ?? "elided",
1132
+ content: `\u27E8${patchedRel} was read earlier; its content is elided because it has since been modified. Re-read only if needed.\u27E9`
1133
+ };
1134
+ readMsgIndex.delete(patchedRel);
1135
+ }
1136
+ }
1137
+ }
1140
1138
  messages.push({
1141
1139
  role: "tool",
1142
1140
  tool_call_id: call.id,
@@ -1147,9 +1145,9 @@ Investigate the root cause, fix it, then finish with a final answer.`
1147
1145
  finalText = "Task cancelled.";
1148
1146
  break;
1149
1147
  }
1148
+ trimOldToolResults(messages);
1150
1149
  if (estimateContextChars(messages, system) > MAX_CONTEXT_CHARS) {
1151
- bus.emit("warning", "Context is large; trimming oldest tool outputs.");
1152
- trimOldToolResults(messages);
1150
+ bus.emit("warning", "Context is still very large after trimming oldest tool outputs.");
1153
1151
  }
1154
1152
  }
1155
1153
  if (!sawFinish && !finalText) {
@@ -1179,11 +1177,11 @@ var init_loop = __esm({
1179
1177
  init_state();
1180
1178
  init_base();
1181
1179
  init_testing();
1182
- MAX_CONTEXT_CHARS = 7e4;
1180
+ MAX_CONTEXT_CHARS = 4e4;
1183
1181
  RATE_LIMIT_MAX_ATTEMPTS = 8;
1184
1182
  MAX_VERIFY = 3;
1185
1183
  EDIT_TOOLS = /* @__PURE__ */ new Set(["apply_patch", "write_file", "move_path"]);
1186
- KEEP_RECENT_TOOL = 4;
1184
+ KEEP_RECENT_TOOL = 3;
1187
1185
  }
1188
1186
  });
1189
1187
 
@@ -1191,7 +1189,7 @@ var init_loop = __esm({
1191
1189
  var version;
1192
1190
  var init_package = __esm({
1193
1191
  "package.json"() {
1194
- version = "0.1.16";
1192
+ version = "0.1.17";
1195
1193
  }
1196
1194
  });
1197
1195
 
@@ -2379,19 +2377,13 @@ function relativeToWorkspace(cwd, target) {
2379
2377
  }
2380
2378
  var listFiles = {
2381
2379
  name: "list_files",
2382
- description: "List files and directories under a path inside the workspace. Respects common ignore rules (node_modules, .git, dist, ...). Use this to orient yourself in the repository.",
2380
+ description: "List files/dirs under a path (ignores node_modules etc.). The system prompt already contains a file tree.",
2383
2381
  risk: "safe",
2384
2382
  parameters: {
2385
2383
  type: "object",
2386
2384
  properties: {
2387
- path: {
2388
- type: "string",
2389
- description: "Relative path inside the workspace. Defaults to the workspace root."
2390
- },
2391
- max_entries: {
2392
- type: "number",
2393
- description: "Maximum number of entries to return. Defaults to 500."
2394
- }
2385
+ path: { type: "string", description: "Relative path (default root)." },
2386
+ max_entries: { type: "number", description: "Max entries (default 500)." }
2395
2387
  }
2396
2388
  },
2397
2389
  async execute(args, ctx) {
@@ -2450,13 +2442,13 @@ var listFiles = {
2450
2442
  };
2451
2443
  var movePath = {
2452
2444
  name: "move_path",
2453
- description: "Move or rename a file or directory within the workspace. Requires user approval. Parent directories of the destination are created automatically.",
2445
+ description: "Move or rename a file/directory within the workspace. Requires user approval.",
2454
2446
  risk: "restricted",
2455
2447
  parameters: {
2456
2448
  type: "object",
2457
2449
  properties: {
2458
- from: { type: "string", description: "Source path relative to the workspace root." },
2459
- to: { type: "string", description: "Destination path relative to the workspace root." }
2450
+ from: { type: "string", description: "Source path (relative to root)." },
2451
+ to: { type: "string", description: "Destination path (relative to root)." }
2460
2452
  },
2461
2453
  required: ["from", "to"]
2462
2454
  },
@@ -2479,14 +2471,14 @@ var movePath = {
2479
2471
  };
2480
2472
  var readFile = {
2481
2473
  name: "read_file",
2482
- description: "Read a file from the workspace, optionally restricted to a line range. Output is prefixed with line numbers. Prefer reading ranges of large files instead of whole files.",
2474
+ description: "Read a file (line-numbered), optionally a line range. Prefer ranges for large files.",
2483
2475
  risk: "safe",
2484
2476
  parameters: {
2485
2477
  type: "object",
2486
2478
  properties: {
2487
- path: { type: "string", description: "File path relative to the workspace root." },
2488
- start_line: { type: "number", description: "First line to read (1-based). Defaults to 1." },
2489
- end_line: { type: "number", description: "Last line to read (inclusive). Defaults to start_line + 2000." }
2479
+ path: { type: "string", description: "Path relative to workspace root." },
2480
+ start_line: { type: "number", description: "First line (1-based)." },
2481
+ end_line: { type: "number", description: "Last line inclusive (default start+400)." }
2490
2482
  },
2491
2483
  required: ["path"]
2492
2484
  },
@@ -2500,7 +2492,7 @@ var readFile = {
2500
2492
  }
2501
2493
  const lines = content.split(/\r?\n/);
2502
2494
  const start = Math.max(1, firstNumber(args, "start_line") ?? 1);
2503
- const defaultEnd = start + 2e3 - 1;
2495
+ const defaultEnd = start + 400 - 1;
2504
2496
  const end = Math.min(lines.length, firstNumber(args, "end_line") ?? defaultEnd);
2505
2497
  if (start > lines.length) {
2506
2498
  return {
@@ -2509,7 +2501,7 @@ var readFile = {
2509
2501
  };
2510
2502
  }
2511
2503
  const slice = lines.slice(start - 1, end).map((line, i) => `${start + i}: ${line}`);
2512
- const { text, truncated } = truncateOutput(slice.join("\n"), 5e4);
2504
+ const { text, truncated } = truncateOutput(slice.join("\n"), 12e3);
2513
2505
  const note = end < lines.length ? `
2514
2506
  ...[${lines.length - end} more lines. Use start_line=${end + 1} to continue reading.]` : "";
2515
2507
  return {
@@ -2522,13 +2514,13 @@ ${text}${note}`,
2522
2514
  };
2523
2515
  var writeFile = {
2524
2516
  name: "write_file",
2525
- description: "Create a new file or fully overwrite an existing file with the given content inside the workspace. For modifying existing files prefer apply_patch.",
2517
+ description: "Create or fully overwrite a file. Prefer apply_patch for edits to existing files.",
2526
2518
  risk: "safe",
2527
2519
  parameters: {
2528
2520
  type: "object",
2529
2521
  properties: {
2530
- path: { type: "string", description: "File path relative to the workspace root." },
2531
- content: { type: "string", description: "The full file content to write." }
2522
+ path: { type: "string", description: "Path relative to workspace root." },
2523
+ content: { type: "string", description: "Full file content." }
2532
2524
  },
2533
2525
  required: ["path", "content"]
2534
2526
  },
@@ -2545,14 +2537,14 @@ var writeFile = {
2545
2537
  };
2546
2538
  var applyPatch = {
2547
2539
  name: "apply_patch",
2548
- description: "Apply a minimal edit to an existing file by replacing an exact unique snippet (old_string) with new_string. The snippet must appear exactly once in the file. This is the preferred way to modify files: it makes the smallest possible change.",
2540
+ description: "Replace an exact unique snippet in a file: old_string (must occur exactly once) becomes new_string. Preferred edit method.",
2549
2541
  risk: "safe",
2550
2542
  parameters: {
2551
2543
  type: "object",
2552
2544
  properties: {
2553
- path: { type: "string", description: "File path relative to the workspace root." },
2554
- old_string: { type: "string", description: "The exact text to replace. Must occur exactly once in the file." },
2555
- new_string: { type: "string", description: "The replacement text." }
2545
+ path: { type: "string", description: "Path relative to workspace root." },
2546
+ old_string: { type: "string", description: "Exact text to replace, unique in file." },
2547
+ new_string: { type: "string", description: "Replacement text." }
2556
2548
  },
2557
2549
  required: ["path", "old_string", "new_string"]
2558
2550
  },
@@ -2831,15 +2823,15 @@ function ripgrepAvailable() {
2831
2823
  }
2832
2824
  var searchCode = {
2833
2825
  name: "search_code",
2834
- description: "Search file contents across the workspace for a pattern (regex supported). Faster and more context-efficient than reading many files. Returns matching file paths, line numbers, and lines.",
2826
+ description: "Regex-search file contents workspace-wide; returns path:line:match. Cheaper than reading files.",
2835
2827
  risk: "safe",
2836
2828
  parameters: {
2837
2829
  type: "object",
2838
2830
  properties: {
2839
- pattern: { type: "string", description: "Regex or literal text to search for." },
2840
- path: { type: "string", description: "Subdirectory to search. Defaults to the workspace root." },
2841
- glob: { type: "string", description: 'Optional file glob filter, e.g. "*.ts" or "src/**".' },
2842
- max_results: { type: "number", description: "Maximum matches to return. Defaults to 50." }
2831
+ pattern: { type: "string", description: "Regex or literal text." },
2832
+ path: { type: "string", description: "Subdirectory (default root)." },
2833
+ glob: { type: "string", description: 'Glob filter, e.g. "*.ts".' },
2834
+ max_results: { type: "number", description: "Max matches (default 50)." }
2843
2835
  },
2844
2836
  required: ["pattern"]
2845
2837
  },
@@ -2919,14 +2911,14 @@ ${text}`,
2919
2911
  };
2920
2912
  var searchFiles = {
2921
2913
  name: "search_files",
2922
- description: "Find files by name pattern (supports * and ? wildcards) inside the workspace. Use when you know roughly what a file is called.",
2914
+ description: "Find files by name with * and ? wildcards.",
2923
2915
  risk: "safe",
2924
2916
  parameters: {
2925
2917
  type: "object",
2926
2918
  properties: {
2927
- pattern: { type: "string", description: 'File name pattern with wildcards, e.g. "*.test.ts" or "config*". Matches against the full relative path too.' },
2928
- path: { type: "string", description: "Subdirectory to search. Defaults to the workspace root." },
2929
- max_results: { type: "number", description: "Maximum results. Defaults to 100." }
2919
+ pattern: { type: "string", description: 'Name pattern with wildcards, e.g. "*.test.ts".' },
2920
+ path: { type: "string", description: "Subdirectory (default root)." },
2921
+ max_results: { type: "number", description: "Max results (default 100)." }
2930
2922
  },
2931
2923
  required: ["pattern"]
2932
2924
  },
@@ -3140,7 +3132,7 @@ var DEFAULT_TIMEOUT_MS = 12e4;
3140
3132
  var MAX_OUTPUT_CHARS = 1e5;
3141
3133
  var executeCommand = {
3142
3134
  name: "execute_command",
3143
- description: "Execute a shell command in the workspace. Safe read-only commands (ls, git status, npm test, ...) run automatically. Install/git-write commands require user approval. Dangerous commands (rm -rf, sudo, ...) are blocked.",
3135
+ description: "Run a shell command in the workspace. Read-only commands auto-run; installs/git-writes need approval; dangerous ones are blocked.",
3144
3136
  risk: "restricted",
3145
3137
  timeoutMs: DEFAULT_TIMEOUT_MS,
3146
3138
  dynamicRisk: (args) => {
@@ -3150,8 +3142,8 @@ var executeCommand = {
3150
3142
  parameters: {
3151
3143
  type: "object",
3152
3144
  properties: {
3153
- command: { type: "string", description: "The shell command to execute." },
3154
- timeout_ms: { type: "number", description: `Timeout in milliseconds. Defaults to ${DEFAULT_TIMEOUT_MS}, max 600000.` }
3145
+ command: { type: "string", description: "The command." },
3146
+ timeout_ms: { type: "number", description: `Timeout ms (default ${DEFAULT_TIMEOUT_MS}).` }
3155
3147
  },
3156
3148
  required: ["command"]
3157
3149
  },
@@ -3200,19 +3192,16 @@ function save(cwd, entries) {
3200
3192
  }
3201
3193
  var memoryTool = {
3202
3194
  name: "memory",
3203
- description: 'Persist and recall key information across iterations AND across sessions (project-scoped, stored under ~/.mentee/memory, never in the workspace). Use action=add to store important findings, decisions, conventions, or context you discovered (e.g. "project uses TypeScript 5 strict mode", "auth lives in src/auth.ts"). Use action=search (query) to recall before re-deriving something you may have learned earlier. Use list to see everything, forget to remove by id or topic.',
3195
+ description: "Persist notes for this project across sessions. Actions: add (content, topic?), search (query), list, forget (id or topic).",
3204
3196
  risk: "safe",
3205
3197
  parameters: {
3206
3198
  type: "object",
3207
3199
  properties: {
3208
- action: { type: "string", enum: ["add", "search", "list", "forget"], description: "Operation to perform." },
3209
- content: { type: "string", description: "The note text (for action=add)." },
3210
- topic: {
3211
- type: "string",
3212
- description: "Optional short tag/category for the note (action=add) or, for action=forget, the topic to clear."
3213
- },
3214
- query: { type: "string", description: "Search terms (for action=search). Falls back to content if omitted." },
3215
- id: { type: "string", description: "Entry id to remove (for action=forget)." }
3200
+ action: { type: "string", enum: ["add", "search", "list", "forget"], description: "Operation." },
3201
+ content: { type: "string", description: "Note text (add)." },
3202
+ topic: { type: "string", description: "Tag (add) or topic to clear (forget)." },
3203
+ query: { type: "string", description: "Search terms (search)." },
3204
+ id: { type: "string", description: "Entry id (forget)." }
3216
3205
  },
3217
3206
  required: ["action"]
3218
3207
  },
@@ -3324,13 +3313,13 @@ function deleteCommands(cwd, target) {
3324
3313
  }
3325
3314
  var webSearch = {
3326
3315
  name: "web_search",
3327
- description: "Search the web for documentation, tutorials, or solutions to problems. Returns top results with snippets.",
3316
+ description: "Web search for docs/solutions. Returns top results with snippets.",
3328
3317
  risk: "safe",
3329
3318
  parameters: {
3330
3319
  type: "object",
3331
3320
  properties: {
3332
3321
  query: { type: "string", description: "Search query." },
3333
- maxResults: { type: "number", description: "Maximum results to return. Defaults to 10." }
3322
+ maxResults: { type: "number", description: "Max results (default 10)." }
3334
3323
  },
3335
3324
  required: ["query"]
3336
3325
  },
@@ -3346,7 +3335,7 @@ var webSearch = {
3346
3335
  };
3347
3336
  var httpFetch = {
3348
3337
  name: "http_fetch",
3349
- description: "Fetch the content of a URL. Useful for retrieving API responses, documentation pages, or raw files. Returns the raw body text (truncated if large).",
3338
+ description: "Fetch a URL and return the body text (truncated if large).",
3350
3339
  risk: "safe",
3351
3340
  parameters: {
3352
3341
  type: "object",
@@ -3372,7 +3361,7 @@ var httpFetch = {
3372
3361
  };
3373
3362
  var fileInfo = {
3374
3363
  name: "file_info",
3375
- description: "Get detailed information about a file or directory inside the workspace. Includes size, type, and a profile suitable for safe manual deletion.",
3364
+ description: "File/dir info: size, type, safe-deletion profile.",
3376
3365
  risk: "safe",
3377
3366
  parameters: {
3378
3367
  type: "object",
@@ -3404,7 +3393,7 @@ ${steps.join("\n")}`,
3404
3393
  };
3405
3394
  var safeDeleteSuggestion = {
3406
3395
  name: "safe_delete_suggestion",
3407
- description: "Get PowerShell and CMD commands for manual deletion of a file/directory, WITH double-checking steps and verification hints. Does NOT execute deletion; returns commands for the user to run.",
3396
+ description: "Return (not execute) PowerShell/CMD deletion commands with double-check steps for a path.",
3408
3397
  risk: "safe",
3409
3398
  parameters: {
3410
3399
  type: "object",
@@ -3438,12 +3427,12 @@ ${steps.join("\n")}
3438
3427
  };
3439
3428
  var processList = {
3440
3429
  name: "process_list",
3441
- description: "List currently running processes on the system. Useful for finding processes that may be locking files or consuming resources.",
3430
+ description: "List running processes (find what locks files or uses resources).",
3442
3431
  risk: "safe",
3443
3432
  parameters: {
3444
3433
  type: "object",
3445
3434
  properties: {
3446
- filter: { type: "string", description: "Optional filter substring to match process names." }
3435
+ filter: { type: "string", description: "Filter substring for process names." }
3447
3436
  }
3448
3437
  },
3449
3438
  async execute(args, ctx) {
@@ -3464,7 +3453,7 @@ ${trimmed}` };
3464
3453
  };
3465
3454
  var portCheck = {
3466
3455
  name: "port_check",
3467
- description: "Check if a port is in use on the local machine. useful for debugging server startup issues or verifying ports are free.",
3456
+ description: "Check whether a local port is in use.",
3468
3457
  risk: "safe",
3469
3458
  parameters: {
3470
3459
  type: "object",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@menteeai/menteeswe",
3
- "version": "0.1.16",
3
+ "version": "0.1.17",
4
4
  "description": "MenteE SWE — a model-agnostic autonomous software-engineering agent CLI. Bring your own intelligence: Kimi, GLM/Z.ai, and more.",
5
5
  "type": "module",
6
6
  "license": "MIT",