@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.
- package/dist/cli.js +92 -103
- 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
|
|
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: "
|
|
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 (
|
|
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
|
|
657
|
-
2. MINIMAL CHANGES:
|
|
658
|
-
3. REALITY CHECK:
|
|
659
|
-
4. VERIFY: after modifying code, run the project's
|
|
660
|
-
5.
|
|
661
|
-
6.
|
|
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
|
-
#
|
|
686
|
-
-
|
|
687
|
-
-
|
|
688
|
-
-
|
|
689
|
-
-
|
|
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
|
-
|
|
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 =
|
|
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
|
|
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 =
|
|
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 =
|
|
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.
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
2459
|
-
to: { type: "string", description: "Destination path relative to
|
|
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
|
|
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: "
|
|
2488
|
-
start_line: { type: "number", description: "First line
|
|
2489
|
-
end_line: { type: "number", description: "Last line
|
|
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 +
|
|
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"),
|
|
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
|
|
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: "
|
|
2531
|
-
content: { type: "string", description: "
|
|
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: "
|
|
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: "
|
|
2554
|
-
old_string: { type: "string", description: "
|
|
2555
|
-
new_string: { type: "string", description: "
|
|
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: "
|
|
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
|
|
2840
|
-
path: { type: "string", description: "Subdirectory
|
|
2841
|
-
glob: { type: "string", description: '
|
|
2842
|
-
max_results: { type: "number", description: "
|
|
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
|
|
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: '
|
|
2928
|
-
path: { type: "string", description: "Subdirectory
|
|
2929
|
-
max_results: { type: "number", description: "
|
|
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: "
|
|
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
|
|
3154
|
-
timeout_ms: { type: "number", description: `Timeout
|
|
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:
|
|
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
|
|
3209
|
-
content: { type: "string", description: "
|
|
3210
|
-
topic: {
|
|
3211
|
-
|
|
3212
|
-
|
|
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: "
|
|
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: "
|
|
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
|
|
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: "
|
|
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: "
|
|
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
|
|
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: "
|
|
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
|
|
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.
|
|
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",
|