@kanchingyg/repomcp 0.0.0-stage → 0.1.1
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/LICENSE +21 -0
- package/README.md +114 -2
- package/SKILL.md +10 -0
- package/dist/adapters/api-routes.d.ts +31 -0
- package/dist/adapters/api-routes.d.ts.map +1 -0
- package/dist/adapters/api-routes.js +680 -0
- package/dist/adapters/api-routes.js.map +1 -0
- package/dist/adapters/cli-crawler.d.ts +28 -0
- package/dist/adapters/cli-crawler.d.ts.map +1 -0
- package/dist/adapters/cli-crawler.js +467 -0
- package/dist/adapters/cli-crawler.js.map +1 -0
- package/dist/adapters/data-sources.d.ts +6 -0
- package/dist/adapters/data-sources.d.ts.map +1 -0
- package/dist/adapters/data-sources.js +672 -0
- package/dist/adapters/data-sources.js.map +1 -0
- package/dist/adapters/docs-bm25.d.ts +50 -0
- package/dist/adapters/docs-bm25.d.ts.map +1 -0
- package/dist/adapters/docs-bm25.js +484 -0
- package/dist/adapters/docs-bm25.js.map +1 -0
- package/dist/adapters/index.d.ts +18 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +66 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/polyglot-code.d.ts +65 -0
- package/dist/adapters/polyglot-code.d.ts.map +1 -0
- package/dist/adapters/polyglot-code.js +691 -0
- package/dist/adapters/polyglot-code.js.map +1 -0
- package/dist/adapters/remote-target.d.ts +30 -0
- package/dist/adapters/remote-target.d.ts.map +1 -0
- package/dist/adapters/remote-target.js +559 -0
- package/dist/adapters/remote-target.js.map +1 -0
- package/dist/adapters/task-runners.d.ts +8 -0
- package/dist/adapters/task-runners.d.ts.map +1 -0
- package/dist/adapters/task-runners.js +468 -0
- package/dist/adapters/task-runners.js.map +1 -0
- package/dist/adapters/types.d.ts +9 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +21 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/bridge.d.ts +136 -0
- package/dist/bridge.d.ts.map +1 -0
- package/dist/bridge.js +488 -0
- package/dist/bridge.js.map +1 -0
- package/dist/checkpoints.d.ts +41 -0
- package/dist/checkpoints.d.ts.map +1 -0
- package/dist/checkpoints.js +208 -0
- package/dist/checkpoints.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +124 -0
- package/dist/cli.js.map +1 -0
- package/dist/dirty-parser.d.ts +10 -0
- package/dist/dirty-parser.d.ts.map +1 -0
- package/dist/dirty-parser.js +220 -0
- package/dist/dirty-parser.js.map +1 -0
- package/dist/harnesses.d.ts +74 -0
- package/dist/harnesses.d.ts.map +1 -0
- package/dist/harnesses.js +204 -0
- package/dist/harnesses.js.map +1 -0
- package/dist/introspect.d.ts +18 -0
- package/dist/introspect.d.ts.map +1 -0
- package/dist/introspect.js +125 -0
- package/dist/introspect.js.map +1 -0
- package/dist/path-containment.d.ts +2 -0
- package/dist/path-containment.d.ts.map +1 -0
- package/dist/path-containment.js +20 -0
- package/dist/path-containment.js.map +1 -0
- package/dist/providers.d.ts +17 -0
- package/dist/providers.d.ts.map +1 -0
- package/dist/providers.js +127 -0
- package/dist/providers.js.map +1 -0
- package/dist/types.d.ts +58 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/jsr.json +24 -0
- package/package.json +57 -4
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/** Constant `DEFAULT_N_CTX` defining default n ctx. */
|
|
2
|
+
export declare const DEFAULT_N_CTX = 4096;
|
|
3
|
+
export declare const TRUNCATION_MARKER = "[...TRUNCATED BY REPOMCP CONTEXT GUARD...]";
|
|
4
|
+
export declare const MULTI_FAMILY_STOP_SEQUENCES: string[];
|
|
5
|
+
/** Configuration and data shape for `NCtxProbeResult` (nctx probe result). */
|
|
6
|
+
export type NCtxProbeResult = {
|
|
7
|
+
nCtx: number;
|
|
8
|
+
source: "llama.cpp" | "ollama" | "vllm" | "fallback";
|
|
9
|
+
};
|
|
10
|
+
/** Executes `probeNCtx` to probe nctx in `repomcp`. */
|
|
11
|
+
export declare function probeNCtx(baseUrl: string, fetchImpl?: typeof fetch): Promise<NCtxProbeResult>;
|
|
12
|
+
/** Head 60% + tail 40% by character budget (approx token guard). */
|
|
13
|
+
export declare function headTailTruncate(text: string, maxChars: number): string;
|
|
14
|
+
export declare function toolOutputBudgetChars(nCtx: number, charsPerToken?: number): number;
|
|
15
|
+
/** Executes `truncateToolOutput` to truncate tool output in `repomcp`. */
|
|
16
|
+
export declare function truncateToolOutput(text: string, nCtx: number): string;
|
|
17
|
+
/** Executes `buildRecencyAnchor` to build recency anchor in `repomcp`. */
|
|
18
|
+
export declare function buildRecencyAnchor(sigs: {
|
|
19
|
+
name: string;
|
|
20
|
+
summary: string;
|
|
21
|
+
}[]): string;
|
|
22
|
+
/** Executes `anchorPromptTail` to anchor prompt tail in `repomcp`. */
|
|
23
|
+
export declare function anchorPromptTail(prompt: string, anchor: string): string;
|
|
24
|
+
export declare function pickRawCompletionEndpoint(baseUrl: string, prefer?: string): string;
|
|
25
|
+
export declare function chatOrRawFallback(baseUrl: string, chatPath: string, rawPath: string, options: {
|
|
26
|
+
forceRaw?: boolean;
|
|
27
|
+
fetchImpl?: typeof fetch;
|
|
28
|
+
}): Promise<{
|
|
29
|
+
mode: "raw" | "chat";
|
|
30
|
+
path: string;
|
|
31
|
+
}>;
|
|
32
|
+
export declare function injectStopSequences(body: Record<string, unknown>): Record<string, unknown>;
|
|
33
|
+
export declare class StreamToolJsonAbort {
|
|
34
|
+
depth: number;
|
|
35
|
+
started: boolean;
|
|
36
|
+
acc: string;
|
|
37
|
+
feed(chunk: string): boolean;
|
|
38
|
+
reset(): void;
|
|
39
|
+
}
|
|
40
|
+
export declare function readStreamUntilToolJsonDone(stream: ReadableStream<Uint8Array>, onAbort: () => void): Promise<string>;
|
|
41
|
+
//# sourceMappingURL=checkpoints.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoints.d.ts","sourceRoot":"","sources":["../src/checkpoints.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,eAAO,MAAM,aAAa,OAAO,CAAC;AAClC,eAAO,MAAM,iBAAiB,+CAA+C,CAAC;AAE9E,eAAO,MAAM,2BAA2B,UAcvC,CAAC;AACF,8EAA8E;AAC9E,MAAM,MAAM,eAAe,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;CACxD,CAAC;AAEF,uDAAuD;AACvD,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,OAAO,KAAa,GAAG,OAAO,CAAC,eAAe,CAAC,CA+C1G;AACD,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQvE;AACD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,SAAI,GAAG,MAAM,CAE7E;AACD,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAErE;AACD,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,MAAM,CAOpF;AACD,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CASvE;AACD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAOlF;AACD,wBAAsB,iBAAiB,CACnC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CAAE,GAC1D,OAAO,CAAC;IAAE,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAmBjD;AACD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAI1F;AACD,qBAAa,mBAAmB;IAC5B,KAAK,SAAK;IACV,OAAO,UAAS;IAChB,GAAG,SAAM;IACT,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAa5B,KAAK;CAKR;AA6BD,wBAAsB,2BAA2B,CAC7C,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,EAClC,OAAO,EAAE,MAAM,IAAI,GACpB,OAAO,CAAC,MAAM,CAAC,CAiBjB"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/** Constant `DEFAULT_N_CTX` defining default n ctx. */
|
|
2
|
+
export const DEFAULT_N_CTX = 4096;
|
|
3
|
+
export const TRUNCATION_MARKER = "[...TRUNCATED BY REPOMCP CONTEXT GUARD...]";
|
|
4
|
+
const IM_END = "<|" + "redacted_im_end" + "|>";
|
|
5
|
+
export const MULTI_FAMILY_STOP_SEQUENCES = [
|
|
6
|
+
"</tool_call>",
|
|
7
|
+
"</tool_calls>",
|
|
8
|
+
IM_END,
|
|
9
|
+
"<|eot_id|>",
|
|
10
|
+
"<|end|>",
|
|
11
|
+
"<|observation|>",
|
|
12
|
+
"<|tool_calls_section_end|>",
|
|
13
|
+
"<\uFF5Ctool\u2581calls\u2581end\uFF5C>",
|
|
14
|
+
"\n\u273FRESULT\u273F",
|
|
15
|
+
"\nOBS:",
|
|
16
|
+
"\nObservation:",
|
|
17
|
+
"\nUSER:",
|
|
18
|
+
"\nHuman:",
|
|
19
|
+
];
|
|
20
|
+
/** Executes `probeNCtx` to probe nctx in `repomcp`. */
|
|
21
|
+
export async function probeNCtx(baseUrl, fetchImpl = fetch) {
|
|
22
|
+
const base = baseUrl.replace(/\/$/, "");
|
|
23
|
+
try {
|
|
24
|
+
const props = await fetchImpl(`${base}/props`);
|
|
25
|
+
if (props.ok) {
|
|
26
|
+
const j = (await props.json());
|
|
27
|
+
const n = j.n_ctx ?? j.default_generation_settings?.n_ctx;
|
|
28
|
+
if (typeof n === "number" && n > 0)
|
|
29
|
+
return { nCtx: n, source: "llama.cpp" };
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
/* continue */
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const show = await fetchImpl(`${base}/api/show`, {
|
|
37
|
+
method: "POST",
|
|
38
|
+
headers: { "Content-Type": "application/json" },
|
|
39
|
+
body: JSON.stringify({ name: "dummy" }),
|
|
40
|
+
});
|
|
41
|
+
if (show.ok) {
|
|
42
|
+
const j = (await show.json());
|
|
43
|
+
const info = j.model_info ?? {};
|
|
44
|
+
for (const [k, v] of Object.entries(info)) {
|
|
45
|
+
if (k.includes("context_length") && typeof v === "number" && v > 0) {
|
|
46
|
+
return { nCtx: v, source: "ollama" };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
/* continue */
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
const models = await fetchImpl(`${base}/v1/models`);
|
|
56
|
+
if (models.ok) {
|
|
57
|
+
const j = (await models.json());
|
|
58
|
+
const first = j.data?.[0];
|
|
59
|
+
if (first?.max_model_len && first.max_model_len > 0) {
|
|
60
|
+
return { nCtx: first.max_model_len, source: "vllm" };
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
/* continue */
|
|
66
|
+
}
|
|
67
|
+
return { nCtx: DEFAULT_N_CTX, source: "fallback" };
|
|
68
|
+
}
|
|
69
|
+
/** Head 60% + tail 40% by character budget (approx token guard). */
|
|
70
|
+
export function headTailTruncate(text, maxChars) {
|
|
71
|
+
if (text.length <= maxChars)
|
|
72
|
+
return text;
|
|
73
|
+
const headLen = Math.floor(maxChars * 0.6);
|
|
74
|
+
const tailLen = Math.floor(maxChars * 0.4) - TRUNCATION_MARKER.length;
|
|
75
|
+
if (tailLen < 0)
|
|
76
|
+
return text.slice(0, maxChars);
|
|
77
|
+
return text.slice(0, headLen) + TRUNCATION_MARKER + text.slice(-tailLen);
|
|
78
|
+
}
|
|
79
|
+
export function toolOutputBudgetChars(nCtx, charsPerToken = 4) {
|
|
80
|
+
return Math.floor(nCtx * charsPerToken * 0.3);
|
|
81
|
+
}
|
|
82
|
+
/** Executes `truncateToolOutput` to truncate tool output in `repomcp`. */
|
|
83
|
+
export function truncateToolOutput(text, nCtx) {
|
|
84
|
+
return headTailTruncate(text, toolOutputBudgetChars(nCtx));
|
|
85
|
+
}
|
|
86
|
+
/** Executes `buildRecencyAnchor` to build recency anchor in `repomcp`. */
|
|
87
|
+
export function buildRecencyAnchor(sigs) {
|
|
88
|
+
const lines = sigs.map((s) => `- ${s.name}: ${s.summary}`);
|
|
89
|
+
return [
|
|
90
|
+
"[AVAILABLE TOOLS - ANCHORED FOR RECENCY]",
|
|
91
|
+
...lines,
|
|
92
|
+
'To call a tool, output ONLY: <tool_call>{"name": "TOOL_NAME", "arguments": {...}}</tool_call>',
|
|
93
|
+
].join("\n");
|
|
94
|
+
}
|
|
95
|
+
/** Executes `anchorPromptTail` to anchor prompt tail in `repomcp`. */
|
|
96
|
+
export function anchorPromptTail(prompt, anchor) {
|
|
97
|
+
const marker = "\nASSISTANT:";
|
|
98
|
+
const idx = prompt.lastIndexOf(marker);
|
|
99
|
+
if (idx === -1) {
|
|
100
|
+
return `${prompt}\n\n${anchor}\n${marker}`;
|
|
101
|
+
}
|
|
102
|
+
const before = prompt.slice(0, idx);
|
|
103
|
+
const after = prompt.slice(idx);
|
|
104
|
+
return `${before}\n\n${anchor}\n${after}`;
|
|
105
|
+
}
|
|
106
|
+
export function pickRawCompletionEndpoint(baseUrl, prefer) {
|
|
107
|
+
if (prefer)
|
|
108
|
+
return prefer;
|
|
109
|
+
if (baseUrl.includes("11434") || baseUrl.includes("ollama")) {
|
|
110
|
+
return "/v1/completions";
|
|
111
|
+
}
|
|
112
|
+
return "/v1/completions";
|
|
113
|
+
}
|
|
114
|
+
export async function chatOrRawFallback(baseUrl, chatPath, rawPath, options) {
|
|
115
|
+
if (options.forceRaw) {
|
|
116
|
+
return { mode: "raw", path: rawPath };
|
|
117
|
+
}
|
|
118
|
+
const fetchImpl = options.fetchImpl ?? fetch;
|
|
119
|
+
try {
|
|
120
|
+
const res = await fetchImpl(`${baseUrl.replace(/\/$/, "")}${chatPath}`, {
|
|
121
|
+
method: "POST",
|
|
122
|
+
headers: { "Content-Type": "application/json" },
|
|
123
|
+
body: JSON.stringify({ model: "probe", messages: [] }),
|
|
124
|
+
});
|
|
125
|
+
if (res.status === 400 || res.status === 404 || res.status === 501) {
|
|
126
|
+
return { mode: "raw", path: rawPath };
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return { mode: "raw", path: rawPath };
|
|
131
|
+
}
|
|
132
|
+
return { mode: "chat", path: chatPath };
|
|
133
|
+
}
|
|
134
|
+
export function injectStopSequences(body) {
|
|
135
|
+
const existing = Array.isArray(body.stop) ? body.stop : [];
|
|
136
|
+
const merged = [...new Set([...existing, ...MULTI_FAMILY_STOP_SEQUENCES])];
|
|
137
|
+
return { ...body, stop: merged };
|
|
138
|
+
}
|
|
139
|
+
export class StreamToolJsonAbort {
|
|
140
|
+
depth = 0;
|
|
141
|
+
started = false;
|
|
142
|
+
acc = "";
|
|
143
|
+
feed(chunk) {
|
|
144
|
+
this.acc += chunk;
|
|
145
|
+
if (!this.started) {
|
|
146
|
+
if (/<tool_call>/i.test(this.acc) ||
|
|
147
|
+
/\u273FFUNCTION\u273F/i.test(this.acc) ||
|
|
148
|
+
/<\|tool_call_argument_begin\|>/i.test(this.acc) ||
|
|
149
|
+
/"name"\s*:\s*"/.test(this.acc)) {
|
|
150
|
+
this.started = true;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
this.depth = countBraceFrom(this.acc);
|
|
154
|
+
return this.started && this.depth === 0 && /\{[\s\S]*\}/.test(this.acc);
|
|
155
|
+
}
|
|
156
|
+
reset() {
|
|
157
|
+
this.depth = 0;
|
|
158
|
+
this.started = false;
|
|
159
|
+
this.acc = "";
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
function countBraceFrom(text) {
|
|
163
|
+
let depth = 0;
|
|
164
|
+
let inString = false;
|
|
165
|
+
let escape = false;
|
|
166
|
+
for (let i = 0; i < text.length; i++) {
|
|
167
|
+
const c = text[i];
|
|
168
|
+
if (escape) {
|
|
169
|
+
escape = false;
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
if (inString) {
|
|
173
|
+
if (c === "\\")
|
|
174
|
+
escape = true;
|
|
175
|
+
else if (c === '"')
|
|
176
|
+
inString = false;
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
if (c === '"') {
|
|
180
|
+
inString = true;
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
if (c === "{")
|
|
184
|
+
depth++;
|
|
185
|
+
else if (c === "}")
|
|
186
|
+
depth--;
|
|
187
|
+
}
|
|
188
|
+
return depth;
|
|
189
|
+
}
|
|
190
|
+
export async function readStreamUntilToolJsonDone(stream, onAbort) {
|
|
191
|
+
const decoder = new TextDecoder();
|
|
192
|
+
const reader = stream.getReader();
|
|
193
|
+
const guard = new StreamToolJsonAbort();
|
|
194
|
+
let out = "";
|
|
195
|
+
while (true) {
|
|
196
|
+
const { done, value } = await reader.read();
|
|
197
|
+
if (done)
|
|
198
|
+
break;
|
|
199
|
+
const chunk = decoder.decode(value, { stream: true });
|
|
200
|
+
out += chunk;
|
|
201
|
+
if (guard.feed(chunk)) {
|
|
202
|
+
onAbort();
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return out;
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=checkpoints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoints.js","sourceRoot":"","sources":["../src/checkpoints.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AA4CA,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwF1D"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { existsSync, statSync } from "node:fs";
|
|
3
|
+
import { resolve } from "node:path";
|
|
4
|
+
import { crawlCliBinary, discoverFromRemote, discoverRepoAdapters } from "./adapters/index.js";
|
|
5
|
+
import { createDashScopeUpstream, setGuards, startEmbedServer, startMcpServer, } from "./bridge.js";
|
|
6
|
+
import { initHarness } from "./harnesses.js";
|
|
7
|
+
import { introspectRepoFull } from "./introspect.js";
|
|
8
|
+
import { parseRemoteTarget } from "./adapters/remote-target.js";
|
|
9
|
+
function looksLikeRemoteTarget(arg) {
|
|
10
|
+
const trimmed = arg.trim();
|
|
11
|
+
if (trimmed.toLowerCase().startsWith("github:"))
|
|
12
|
+
return true;
|
|
13
|
+
if (/^https?:\/\//i.test(trimmed))
|
|
14
|
+
return true;
|
|
15
|
+
const parsed = parseRemoteTarget(trimmed);
|
|
16
|
+
return parsed.kind === "github" || parsed.kind === "openapi-url";
|
|
17
|
+
}
|
|
18
|
+
function resolveRepoRootFromArg(arg) {
|
|
19
|
+
const abs = resolve(arg);
|
|
20
|
+
if (!existsSync(abs))
|
|
21
|
+
return null;
|
|
22
|
+
const st = statSync(abs);
|
|
23
|
+
if (st.isDirectory())
|
|
24
|
+
return abs;
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
async function startMcpForRoot(repoRoot, argv) {
|
|
28
|
+
setGuards({
|
|
29
|
+
allowWrite: argv.includes("--allow-write"),
|
|
30
|
+
dryRun: argv.includes("--dry-run"),
|
|
31
|
+
});
|
|
32
|
+
const { tools, handlers } = await introspectRepoFull(repoRoot, {
|
|
33
|
+
allowWrite: argv.includes("--allow-write"),
|
|
34
|
+
});
|
|
35
|
+
startMcpServer({ repoRoot, tools, handlers });
|
|
36
|
+
}
|
|
37
|
+
export async function runCli(argv) {
|
|
38
|
+
if (argv.length === 0) {
|
|
39
|
+
process.stderr.write("Usage: repomcp [--mcp] | wrap <binary> | init | embed | <path> | github:owner/repo | <url>\n");
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (argv.includes("--mcp") && argv[0] !== "wrap") {
|
|
43
|
+
await startMcpForRoot(process.cwd(), argv);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if (argv[0] === "wrap") {
|
|
47
|
+
const binary = argv[1];
|
|
48
|
+
if (!binary) {
|
|
49
|
+
process.stderr.write("Usage: repomcp wrap <binary> [--depth N] [--mcp]\n");
|
|
50
|
+
process.exitCode = 1;
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const depthIdx = argv.indexOf("--depth");
|
|
54
|
+
const depth = depthIdx >= 0 ? parseInt(argv[depthIdx + 1] ?? "2", 10) : undefined;
|
|
55
|
+
setGuards({
|
|
56
|
+
allowWrite: argv.includes("--allow-write"),
|
|
57
|
+
dryRun: argv.includes("--dry-run"),
|
|
58
|
+
});
|
|
59
|
+
const discovery = await crawlCliBinary(binary, { depth });
|
|
60
|
+
if (argv.includes("--mcp")) {
|
|
61
|
+
startMcpServer({ tools: discovery.tools, handlers: discovery.handlers });
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
process.stdout.write(`${discovery.tools.length} tools\n`);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (argv[0] === "embed" || argv.includes("embed")) {
|
|
68
|
+
const portIdx = argv.indexOf("--port");
|
|
69
|
+
const port = portIdx >= 0 ? parseInt(argv[portIdx + 1], 10) : 11435;
|
|
70
|
+
startEmbedServer({
|
|
71
|
+
port,
|
|
72
|
+
repoRoot: process.cwd(),
|
|
73
|
+
upstream: createDashScopeUpstream(),
|
|
74
|
+
defaultModel: "text-embedding-v3",
|
|
75
|
+
});
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (argv[0] === "init" || argv.includes("init")) {
|
|
79
|
+
const targetIdx = argv.indexOf("--target");
|
|
80
|
+
const target = targetIdx >= 0 ? argv[targetIdx + 1] : "all";
|
|
81
|
+
const repoRoot = process.cwd();
|
|
82
|
+
const { tools } = await discoverRepoAdapters(repoRoot);
|
|
83
|
+
initHarness(target ?? "all", {
|
|
84
|
+
repoRoot,
|
|
85
|
+
serverName: "repomcp",
|
|
86
|
+
command: "npx",
|
|
87
|
+
args: ["-y", "repomcp"],
|
|
88
|
+
tools,
|
|
89
|
+
});
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const first = argv[0];
|
|
93
|
+
if (first && looksLikeRemoteTarget(first)) {
|
|
94
|
+
const { root, kind } = await discoverFromRemote(first);
|
|
95
|
+
if (argv.includes("--mcp")) {
|
|
96
|
+
await startMcpForRoot(root, argv);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
process.stdout.write(`${root}\n`);
|
|
100
|
+
if (kind)
|
|
101
|
+
process.stderr.write(`kind: ${kind}\n`);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const localRoot = first ? resolveRepoRootFromArg(first) : null;
|
|
105
|
+
if (localRoot) {
|
|
106
|
+
if (argv.includes("--mcp")) {
|
|
107
|
+
await startMcpForRoot(localRoot, argv);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
const { tools } = await discoverRepoAdapters(localRoot);
|
|
111
|
+
process.stdout.write(`${localRoot}\n${tools.length} tools\n`);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
process.stderr.write(`Unknown target or path: ${first ?? ""}\n`);
|
|
115
|
+
process.exitCode = 1;
|
|
116
|
+
}
|
|
117
|
+
const isMain = process.argv[1]?.includes("cli") || process.argv[1]?.endsWith("repomcp");
|
|
118
|
+
if (isMain && process.argv.length > 2) {
|
|
119
|
+
const sub = process.argv.slice(2);
|
|
120
|
+
if (sub[0] !== "test") {
|
|
121
|
+
void runCli(sub);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DirtyToolCall, JsonSchema } from "./types.js";
|
|
2
|
+
/** Remove thinking blocks before parsing tool calls. */
|
|
3
|
+
export declare function stripRedactedThinking(text: string): string;
|
|
4
|
+
export declare function coerceToSchema(args: Record<string, unknown>, schema: JsonSchema | undefined): Record<string, unknown>;
|
|
5
|
+
/** Lexical brace balancer for streaming stop (ignores strings). */
|
|
6
|
+
export declare function countJsonBraceDepth(chunk: string, priorDepth: number): number;
|
|
7
|
+
export declare function shouldAbortStreamOnToolJson(accumulated: string, started: boolean, depth: number): boolean;
|
|
8
|
+
/** Executes `parseDirtyToolCall` to parse dirty tool call in `repomcp`. */
|
|
9
|
+
export declare function parseDirtyToolCall(content: string, schema?: JsonSchema): DirtyToolCall | null;
|
|
10
|
+
//# sourceMappingURL=dirty-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dirty-parser.d.ts","sourceRoot":"","sources":["../src/dirty-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAsB,MAAM,YAAY,CAAC;AAEhF,wDAAwD;AACxD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1D;AAsED,wBAAgB,cAAc,CAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,UAAU,GAAG,SAAS,GAC/B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASzB;AAED,mEAAmE;AACnE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CA2B7E;AAED,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAIzG;AAED,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI,CA0G7F"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/** Remove thinking blocks before parsing tool calls. */
|
|
2
|
+
export function stripRedactedThinking(text) {
|
|
3
|
+
return text.replace(/<think>[\s\S]*?(?:<\/redacted_thinking>|$)/gi, "");
|
|
4
|
+
}
|
|
5
|
+
function repairJson(raw) {
|
|
6
|
+
let s = raw.trim();
|
|
7
|
+
if (!s)
|
|
8
|
+
return "{}";
|
|
9
|
+
s = s.replace(/\/\/[^\n]*/g, "");
|
|
10
|
+
s = s.replace(/\/\*[\s\S]*?\*\//g, "");
|
|
11
|
+
s = s.replace(/,\s*([}\]])/g, "$1");
|
|
12
|
+
s = s.replace(/'/g, '"');
|
|
13
|
+
s = s.replace(/([{,]\s*)([a-zA-Z_][a-zA-Z0-9_]*)(\s*:)/g, '$1"$2"$3');
|
|
14
|
+
const open = (s.match(/\{/g) ?? []).length;
|
|
15
|
+
const close = (s.match(/\}/g) ?? []).length;
|
|
16
|
+
if (open > close) {
|
|
17
|
+
s += "}".repeat(open - close);
|
|
18
|
+
}
|
|
19
|
+
return s;
|
|
20
|
+
}
|
|
21
|
+
function tryParseObject(raw) {
|
|
22
|
+
const attempts = [raw, repairJson(raw)];
|
|
23
|
+
for (const a of attempts) {
|
|
24
|
+
try {
|
|
25
|
+
const v = JSON.parse(a);
|
|
26
|
+
if (v && typeof v === "object" && !Array.isArray(v)) {
|
|
27
|
+
return v;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
/* next */
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
function coerceValue(value, prop) {
|
|
37
|
+
if (!prop?.type)
|
|
38
|
+
return value;
|
|
39
|
+
switch (prop.type) {
|
|
40
|
+
case "integer":
|
|
41
|
+
if (typeof value === "string" && /^-?\d+$/.test(value))
|
|
42
|
+
return parseInt(value, 10);
|
|
43
|
+
if (typeof value === "number")
|
|
44
|
+
return Math.trunc(value);
|
|
45
|
+
return value;
|
|
46
|
+
case "number":
|
|
47
|
+
if (typeof value === "string" && /^-?\d+(\.\d+)?$/.test(value))
|
|
48
|
+
return Number(value);
|
|
49
|
+
return value;
|
|
50
|
+
case "boolean":
|
|
51
|
+
if (value === "true")
|
|
52
|
+
return true;
|
|
53
|
+
if (value === "false")
|
|
54
|
+
return false;
|
|
55
|
+
return value;
|
|
56
|
+
case "array":
|
|
57
|
+
if (typeof value === "string") {
|
|
58
|
+
try {
|
|
59
|
+
return JSON.parse(value);
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return value;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return value;
|
|
66
|
+
default:
|
|
67
|
+
return value;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
export function coerceToSchema(args, schema) {
|
|
71
|
+
if (!schema?.properties)
|
|
72
|
+
return args;
|
|
73
|
+
const out = { ...args };
|
|
74
|
+
for (const [key, prop] of Object.entries(schema.properties)) {
|
|
75
|
+
if (key in out)
|
|
76
|
+
out[key] = coerceValue(out[key], prop);
|
|
77
|
+
}
|
|
78
|
+
return out;
|
|
79
|
+
}
|
|
80
|
+
/** Lexical brace balancer for streaming stop (ignores strings). */
|
|
81
|
+
export function countJsonBraceDepth(chunk, priorDepth) {
|
|
82
|
+
let depth = priorDepth;
|
|
83
|
+
let inString = false;
|
|
84
|
+
let escape = false;
|
|
85
|
+
for (let i = 0; i < chunk.length; i++) {
|
|
86
|
+
const c = chunk[i];
|
|
87
|
+
if (escape) {
|
|
88
|
+
escape = false;
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
if (inString) {
|
|
92
|
+
if (c === "\\")
|
|
93
|
+
escape = true;
|
|
94
|
+
else if (c === '"')
|
|
95
|
+
inString = false;
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (c === '"') {
|
|
99
|
+
inString = true;
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
if (c === "{")
|
|
103
|
+
depth++;
|
|
104
|
+
else if (c === "}")
|
|
105
|
+
depth--;
|
|
106
|
+
}
|
|
107
|
+
return depth;
|
|
108
|
+
}
|
|
109
|
+
export function shouldAbortStreamOnToolJson(accumulated, started, depth) {
|
|
110
|
+
if (!started)
|
|
111
|
+
return false;
|
|
112
|
+
return depth === 0 && /\{[\s\S]*\}/.test(accumulated);
|
|
113
|
+
}
|
|
114
|
+
/** Executes `parseDirtyToolCall` to parse dirty tool call in `repomcp`. */
|
|
115
|
+
export function parseDirtyToolCall(content, schema) {
|
|
116
|
+
const text = stripRedactedThinking(content);
|
|
117
|
+
const hermes = text.match(/<tool_call>\s*([\s\S]*?)\s*<\/tool_call>/i);
|
|
118
|
+
if (hermes) {
|
|
119
|
+
const obj = tryParseObject(hermes[1]);
|
|
120
|
+
if (obj?.name && typeof obj.name === "string") {
|
|
121
|
+
const args = (obj.arguments ?? obj.args ?? {});
|
|
122
|
+
return {
|
|
123
|
+
name: obj.name,
|
|
124
|
+
arguments: coerceToSchema(args, schema),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
const minimax = text.match(/<tool_calls>\s*([\s\S]*?)\s*<\/tool_calls>/i);
|
|
129
|
+
if (minimax) {
|
|
130
|
+
const obj = tryParseObject(minimax[1]);
|
|
131
|
+
if (obj?.name && typeof obj.name === "string") {
|
|
132
|
+
return {
|
|
133
|
+
name: obj.name,
|
|
134
|
+
arguments: coerceToSchema((obj.arguments ?? {}), schema),
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
const deepseek = text.match(/<\|redacted_tool_call_begin\|>[\s\S]*?```json\s*([\s\S]*?)```[\s\S]*?<\|redacted_tool_call_end\|>/i);
|
|
139
|
+
if (deepseek) {
|
|
140
|
+
const obj = tryParseObject(deepseek[1]);
|
|
141
|
+
if (obj) {
|
|
142
|
+
const name = obj.name ?? obj.function ?? obj.tool;
|
|
143
|
+
if (name) {
|
|
144
|
+
return {
|
|
145
|
+
name: String(name),
|
|
146
|
+
arguments: coerceToSchema(obj, schema),
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
const kimi = text.match(/functions\.([^:<\|]+):\d+<\|tool_call_argument_begin\|>([\s\S]*?)<\|tool_call_end\|>/i);
|
|
152
|
+
if (kimi) {
|
|
153
|
+
const obj = tryParseObject(kimi[2]);
|
|
154
|
+
return {
|
|
155
|
+
name: kimi[1].trim(),
|
|
156
|
+
arguments: coerceToSchema(obj ?? {}, schema),
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
const glm = text.match(/<\|(?:redacted_tool_call_begin_kimi|tool_call_begin)\|>([^<\|]+)<\|tool_call_sep\|>([\s\S]*?)<\|(?:redacted_tool_call_end_kimi|tool_call_end)\|>/i);
|
|
160
|
+
if (glm) {
|
|
161
|
+
const obj = tryParseObject(glm[2]);
|
|
162
|
+
return {
|
|
163
|
+
name: glm[1].trim(),
|
|
164
|
+
arguments: coerceToSchema(obj ?? {}, schema),
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
const qwenFn = text.match(/\u273FFUNCTION\u273F:\s*([^\n]+)\s*\u273FARGS\u273F:\s*([\s\S]*?)(?:\u273FRESULT\u273F|$)/i);
|
|
168
|
+
if (qwenFn) {
|
|
169
|
+
const obj = tryParseObject(qwenFn[2]);
|
|
170
|
+
return {
|
|
171
|
+
name: qwenFn[1].trim(),
|
|
172
|
+
arguments: coerceToSchema(obj ?? {}, schema),
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
const step3 = text.match(/<steptml:invoke\s+name="([^"]+)"[^>]*>([\s\S]*?)<\/steptml:invoke>/i);
|
|
176
|
+
if (step3) {
|
|
177
|
+
const args = {};
|
|
178
|
+
const paramRe = /<steptml:parameter\s+name="([^"]+)"[^>]*>([\s\S]*?)<\/steptml:parameter>/gi;
|
|
179
|
+
let m;
|
|
180
|
+
while ((m = paramRe.exec(step3[2])) !== null) {
|
|
181
|
+
args[m[1]] = m[2].trim();
|
|
182
|
+
}
|
|
183
|
+
return { name: step3[1], arguments: coerceToSchema(args, schema) };
|
|
184
|
+
}
|
|
185
|
+
const py = text.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\s*\(([\s\S]*)\)\s*$/m);
|
|
186
|
+
if (py) {
|
|
187
|
+
const args = {};
|
|
188
|
+
const inner = py[2].trim();
|
|
189
|
+
if (inner) {
|
|
190
|
+
for (const part of inner.split(",")) {
|
|
191
|
+
const eq = part.indexOf("=");
|
|
192
|
+
if (eq > 0) {
|
|
193
|
+
const k = part.slice(0, eq).trim();
|
|
194
|
+
let v = part.slice(eq + 1).trim();
|
|
195
|
+
if (typeof v === "string" && /^["']/.test(v)) {
|
|
196
|
+
v = v.slice(1, -1);
|
|
197
|
+
}
|
|
198
|
+
args[k] = v;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return { name: py[1], arguments: coerceToSchema(args, schema) };
|
|
203
|
+
}
|
|
204
|
+
const openAiBlock = text.match(/\{\s*"name"\s*:\s*"([^"]+)"[\s\S]*?"arguments"\s*:\s*(\{[\s\S]*\})/);
|
|
205
|
+
if (openAiBlock) {
|
|
206
|
+
const obj = tryParseObject(`{"name":"${openAiBlock[1]}","arguments":${openAiBlock[2]}}`);
|
|
207
|
+
if (obj?.name) {
|
|
208
|
+
return {
|
|
209
|
+
name: String(obj.name),
|
|
210
|
+
arguments: coerceToSchema((obj.arguments ?? {}), schema),
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
const iqBroken = text.match(/\{\s*['"]?cmd['"]?\s*:\s*['"]([^'"]+)['"]/);
|
|
215
|
+
if (iqBroken) {
|
|
216
|
+
return { name: "run_shell", arguments: { cmd: iqBroken[1] } };
|
|
217
|
+
}
|
|
218
|
+
return null;
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=dirty-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dirty-parser.js","sourceRoot":"","sources":["../src/dirty-parser.ts"],"names":[],"mappings":"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"}
|