@testrelic/mcp 2.1.0
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 +201 -0
- package/README.md +198 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/cache/blob.d.ts +22 -0
- package/dist/cache/blob.d.ts.map +1 -0
- package/dist/cache/blob.js +92 -0
- package/dist/cache/blob.js.map +1 -0
- package/dist/cache/diff-reader.d.ts +29 -0
- package/dist/cache/diff-reader.d.ts.map +1 -0
- package/dist/cache/diff-reader.js +34 -0
- package/dist/cache/diff-reader.js.map +1 -0
- package/dist/cache/index.d.ts +57 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +99 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/key.d.ts +15 -0
- package/dist/cache/key.d.ts.map +1 -0
- package/dist/cache/key.js +32 -0
- package/dist/cache/key.js.map +1 -0
- package/dist/cache/lru.d.ts +21 -0
- package/dist/cache/lru.d.ts.map +1 -0
- package/dist/cache/lru.js +32 -0
- package/dist/cache/lru.js.map +1 -0
- package/dist/cache/sqlite.d.ts +22 -0
- package/dist/cache/sqlite.d.ts.map +1 -0
- package/dist/cache/sqlite.js +102 -0
- package/dist/cache/sqlite.js.map +1 -0
- package/dist/cache/vector.d.ts +42 -0
- package/dist/cache/vector.d.ts.map +1 -0
- package/dist/cache/vector.js +187 -0
- package/dist/cache/vector.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +205 -0
- package/dist/cli.js.map +1 -0
- package/dist/clients/amplitude.d.ts +24 -0
- package/dist/clients/amplitude.d.ts.map +1 -0
- package/dist/clients/amplitude.js +15 -0
- package/dist/clients/amplitude.js.map +1 -0
- package/dist/clients/clickhouse.d.ts +10 -0
- package/dist/clients/clickhouse.d.ts.map +1 -0
- package/dist/clients/clickhouse.js +8 -0
- package/dist/clients/clickhouse.js.map +1 -0
- package/dist/clients/cloud.d.ts +347 -0
- package/dist/clients/cloud.d.ts.map +1 -0
- package/dist/clients/cloud.js +402 -0
- package/dist/clients/cloud.js.map +1 -0
- package/dist/clients/http.d.ts +40 -0
- package/dist/clients/http.d.ts.map +1 -0
- package/dist/clients/http.js +67 -0
- package/dist/clients/http.js.map +1 -0
- package/dist/clients/index.d.ts +38 -0
- package/dist/clients/index.d.ts.map +1 -0
- package/dist/clients/index.js +24 -0
- package/dist/clients/index.js.map +1 -0
- package/dist/clients/jira.d.ts +16 -0
- package/dist/clients/jira.d.ts.map +1 -0
- package/dist/clients/jira.js +11 -0
- package/dist/clients/jira.js.map +1 -0
- package/dist/clients/loki.d.ts +7 -0
- package/dist/clients/loki.d.ts.map +1 -0
- package/dist/clients/loki.js +8 -0
- package/dist/clients/loki.js.map +1 -0
- package/dist/clients/retry.d.ts +28 -0
- package/dist/clients/retry.d.ts.map +1 -0
- package/dist/clients/retry.js +79 -0
- package/dist/clients/retry.js.map +1 -0
- package/dist/clients/testrelic.d.ts +90 -0
- package/dist/clients/testrelic.d.ts.map +1 -0
- package/dist/clients/testrelic.js +68 -0
- package/dist/clients/testrelic.js.map +1 -0
- package/dist/config.d.ts +216 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +233 -0
- package/dist/config.js.map +1 -0
- package/dist/context/code-map.d.ts +35 -0
- package/dist/context/code-map.d.ts.map +1 -0
- package/dist/context/code-map.js +187 -0
- package/dist/context/code-map.js.map +1 -0
- package/dist/context/correlator.d.ts +32 -0
- package/dist/context/correlator.d.ts.map +1 -0
- package/dist/context/correlator.js +106 -0
- package/dist/context/correlator.js.map +1 -0
- package/dist/context/coverage-map.d.ts +25 -0
- package/dist/context/coverage-map.d.ts.map +1 -0
- package/dist/context/coverage-map.js +44 -0
- package/dist/context/coverage-map.js.map +1 -0
- package/dist/context/index.d.ts +20 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +18 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/journey-graph.d.ts +22 -0
- package/dist/context/journey-graph.d.ts.map +1 -0
- package/dist/context/journey-graph.js +38 -0
- package/dist/context/journey-graph.js.map +1 -0
- package/dist/context/signal-map.d.ts +26 -0
- package/dist/context/signal-map.d.ts.map +1 -0
- package/dist/context/signal-map.js +30 -0
- package/dist/context/signal-map.js.map +1 -0
- package/dist/elicit/ask.d.ts +28 -0
- package/dist/elicit/ask.d.ts.map +1 -0
- package/dist/elicit/ask.js +31 -0
- package/dist/elicit/ask.js.map +1 -0
- package/dist/elicit/zod-to-json.d.ts +7 -0
- package/dist/elicit/zod-to-json.d.ts.map +1 -0
- package/dist/elicit/zod-to-json.js +37 -0
- package/dist/elicit/zod-to-json.js.map +1 -0
- package/dist/errors.d.ts +59 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +122 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +127 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +6 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +29 -0
- package/dist/logger.js.map +1 -0
- package/dist/prompts/index.d.ts +8 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +86 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/registry/index.d.ts +70 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +88 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/project.d.ts +20 -0
- package/dist/registry/project.d.ts.map +1 -0
- package/dist/registry/project.js +44 -0
- package/dist/registry/project.js.map +1 -0
- package/dist/resources/index.d.ts +13 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +76 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/sampling/bridge.d.ts +35 -0
- package/dist/sampling/bridge.d.ts.map +1 -0
- package/dist/sampling/bridge.js +39 -0
- package/dist/sampling/bridge.js.map +1 -0
- package/dist/telemetry/metrics.d.ts +29 -0
- package/dist/telemetry/metrics.d.ts.map +1 -0
- package/dist/telemetry/metrics.js +46 -0
- package/dist/telemetry/metrics.js.map +1 -0
- package/dist/telemetry/tokens.d.ts +16 -0
- package/dist/telemetry/tokens.d.ts.map +1 -0
- package/dist/telemetry/tokens.js +40 -0
- package/dist/telemetry/tokens.js.map +1 -0
- package/dist/tools/core/index.d.ts +8 -0
- package/dist/tools/core/index.d.ts.map +1 -0
- package/dist/tools/core/index.js +219 -0
- package/dist/tools/core/index.js.map +1 -0
- package/dist/tools/coverage/index.d.ts +9 -0
- package/dist/tools/coverage/index.d.ts.map +1 -0
- package/dist/tools/coverage/index.js +247 -0
- package/dist/tools/coverage/index.js.map +1 -0
- package/dist/tools/creation/index.d.ts +9 -0
- package/dist/tools/creation/index.d.ts.map +1 -0
- package/dist/tools/creation/index.js +357 -0
- package/dist/tools/creation/index.js.map +1 -0
- package/dist/tools/creation/templates.d.ts +17 -0
- package/dist/tools/creation/templates.d.ts.map +1 -0
- package/dist/tools/creation/templates.js +63 -0
- package/dist/tools/creation/templates.js.map +1 -0
- package/dist/tools/devtools/index.d.ts +9 -0
- package/dist/tools/devtools/index.d.ts.map +1 -0
- package/dist/tools/devtools/index.js +106 -0
- package/dist/tools/devtools/index.js.map +1 -0
- package/dist/tools/healing/index.d.ts +10 -0
- package/dist/tools/healing/index.d.ts.map +1 -0
- package/dist/tools/healing/index.js +190 -0
- package/dist/tools/healing/index.js.map +1 -0
- package/dist/tools/impact/index.d.ts +8 -0
- package/dist/tools/impact/index.d.ts.map +1 -0
- package/dist/tools/impact/index.js +215 -0
- package/dist/tools/impact/index.js.map +1 -0
- package/dist/tools/index.d.ts +9 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +29 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/signals/index.d.ts +9 -0
- package/dist/tools/signals/index.d.ts.map +1 -0
- package/dist/tools/signals/index.js +100 -0
- package/dist/tools/signals/index.js.map +1 -0
- package/dist/tools/triage/index.d.ts +9 -0
- package/dist/tools/triage/index.d.ts.map +1 -0
- package/dist/tools/triage/index.js +366 -0
- package/dist/tools/triage/index.js.map +1 -0
- package/dist/transport/http.d.ts +16 -0
- package/dist/transport/http.d.ts.map +1 -0
- package/dist/transport/http.js +110 -0
- package/dist/transport/http.js.map +1 -0
- package/dist/transport/stdio.d.ts +6 -0
- package/dist/transport/stdio.d.ts.map +1 -0
- package/dist/transport/stdio.js +19 -0
- package/dist/transport/stdio.js.map +1 -0
- package/dist/types/index.d.ts +268 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/version.d.ts +7 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +7 -0
- package/dist/version.js.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
/**
|
|
3
|
+
* Sampling bridge: wraps `server.server.createMessage` so tools can ask the
|
|
4
|
+
* client's LLM to generate text without the server needing its own LLM key.
|
|
5
|
+
*
|
|
6
|
+
* Falls back to a deterministic template when the client doesn't support
|
|
7
|
+
* sampling — preserves the "works offline" guarantee.
|
|
8
|
+
*/
|
|
9
|
+
export interface SamplingOptions {
|
|
10
|
+
systemPrompt?: string;
|
|
11
|
+
maxTokens?: number;
|
|
12
|
+
temperature?: number;
|
|
13
|
+
modelPreferences?: {
|
|
14
|
+
hints?: Array<{
|
|
15
|
+
name: string;
|
|
16
|
+
}>;
|
|
17
|
+
intelligencePriority?: number;
|
|
18
|
+
costPriority?: number;
|
|
19
|
+
speedPriority?: number;
|
|
20
|
+
};
|
|
21
|
+
stopSequences?: string[];
|
|
22
|
+
}
|
|
23
|
+
export interface SamplingResult {
|
|
24
|
+
text: string;
|
|
25
|
+
model?: string;
|
|
26
|
+
stopReason?: string;
|
|
27
|
+
/** True when we fell back to a local template because sampling failed. */
|
|
28
|
+
fallback: boolean;
|
|
29
|
+
}
|
|
30
|
+
export declare class SamplingBridge {
|
|
31
|
+
private readonly server;
|
|
32
|
+
constructor(server: McpServer);
|
|
33
|
+
createMessage(prompt: string, opts?: SamplingOptions): Promise<SamplingResult>;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/sampling/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE;;;;;;GAMG;AAEH,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE;QACjB,KAAK,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAChC,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,SAAS;IAEjC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC;CA+BhG"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { getLogger } from "../logger.js";
|
|
2
|
+
export class SamplingBridge {
|
|
3
|
+
server;
|
|
4
|
+
constructor(server) {
|
|
5
|
+
this.server = server;
|
|
6
|
+
}
|
|
7
|
+
async createMessage(prompt, opts = {}) {
|
|
8
|
+
try {
|
|
9
|
+
const sdkServer = this.server.server;
|
|
10
|
+
if (!sdkServer?.createMessage)
|
|
11
|
+
throw new Error("sampling not supported by client");
|
|
12
|
+
const result = await sdkServer.createMessage({
|
|
13
|
+
messages: [
|
|
14
|
+
{
|
|
15
|
+
role: "user",
|
|
16
|
+
content: { type: "text", text: prompt },
|
|
17
|
+
},
|
|
18
|
+
],
|
|
19
|
+
systemPrompt: opts.systemPrompt,
|
|
20
|
+
maxTokens: opts.maxTokens ?? 2_000,
|
|
21
|
+
temperature: opts.temperature ?? 0.3,
|
|
22
|
+
modelPreferences: opts.modelPreferences,
|
|
23
|
+
stopSequences: opts.stopSequences,
|
|
24
|
+
});
|
|
25
|
+
const text = result.content?.type === "text" ? result.content.text ?? "" : "";
|
|
26
|
+
return {
|
|
27
|
+
text,
|
|
28
|
+
model: result.model,
|
|
29
|
+
stopReason: result.stopReason,
|
|
30
|
+
fallback: false,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
getLogger().debug({ err }, "sampling unavailable — using local fallback");
|
|
35
|
+
return { text: "", fallback: true };
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/sampling/bridge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AA+BzC,MAAM,OAAO,cAAc;IACI;IAA7B,YAA6B,MAAiB;QAAjB,WAAM,GAAN,MAAM,CAAW;IAAG,CAAC;IAE3C,KAAK,CAAC,aAAa,CAAC,MAAc,EAAE,OAAwB,EAAE;QACnE,IAAI,CAAC;YACH,MAAM,SAAS,GAAI,IAAI,CAAC,MAAiK,CAAC,MAAM,CAAC;YACjM,IAAI,CAAC,SAAS,EAAE,aAAa;gBAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YAEnF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC;gBAC3C,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;qBACxC;iBACF;gBACD,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,KAAK;gBAClC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,GAAG;gBACpC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;gBACvC,aAAa,EAAE,IAAI,CAAC,aAAa;aAClC,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9E,OAAO;gBACL,IAAI;gBACJ,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,QAAQ,EAAE,KAAK;aAChB,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,6CAA6C,CAAC,CAAC;YAC1E,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Appends one JSON line per tool invocation to ${outputDir}/metrics.jsonl.
|
|
3
|
+
*
|
|
4
|
+
* Line shape:
|
|
5
|
+
* { ts, tool, capability, input_tokens, output_tokens, duration_ms,
|
|
6
|
+
* cache_hit, cache_layer, error_code? }
|
|
7
|
+
*/
|
|
8
|
+
export interface MetricRecord {
|
|
9
|
+
ts: string;
|
|
10
|
+
tool: string;
|
|
11
|
+
capability: string;
|
|
12
|
+
input_tokens: number;
|
|
13
|
+
output_tokens: number;
|
|
14
|
+
duration_ms: number;
|
|
15
|
+
cache_hit: boolean;
|
|
16
|
+
cache_layer?: "L1" | "L2" | "L3" | "L4" | null;
|
|
17
|
+
error_code?: string;
|
|
18
|
+
}
|
|
19
|
+
declare class MetricsWriter {
|
|
20
|
+
private stream;
|
|
21
|
+
private path;
|
|
22
|
+
init(outputDir: string): void;
|
|
23
|
+
record(rec: MetricRecord): void;
|
|
24
|
+
close(): Promise<void>;
|
|
25
|
+
getPath(): string | null;
|
|
26
|
+
}
|
|
27
|
+
export declare const metrics: MetricsWriter;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/telemetry/metrics.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AAEH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,cAAM,aAAa;IACjB,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,IAAI,CAAuB;IAE5B,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAe7B,MAAM,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IASzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B,OAAO,IAAI,MAAM,GAAG,IAAI;CAGhC;AAED,eAAO,MAAM,OAAO,eAAsB,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { mkdirSync, createWriteStream } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { getLogger } from "../logger.js";
|
|
4
|
+
class MetricsWriter {
|
|
5
|
+
stream = null;
|
|
6
|
+
path = null;
|
|
7
|
+
init(outputDir) {
|
|
8
|
+
if (this.stream)
|
|
9
|
+
return;
|
|
10
|
+
try {
|
|
11
|
+
mkdirSync(outputDir, { recursive: true });
|
|
12
|
+
this.path = join(outputDir, "metrics.jsonl");
|
|
13
|
+
this.stream = createWriteStream(this.path, { flags: "a" });
|
|
14
|
+
this.stream.on("error", (err) => {
|
|
15
|
+
getLogger().warn({ err }, "metrics.jsonl write error — disabling metrics");
|
|
16
|
+
this.stream = null;
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
getLogger().warn({ err }, "failed to open metrics.jsonl");
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
record(rec) {
|
|
24
|
+
if (!this.stream)
|
|
25
|
+
return;
|
|
26
|
+
try {
|
|
27
|
+
this.stream.write(JSON.stringify(rec) + "\n");
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// best-effort — never throw from telemetry
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async close() {
|
|
34
|
+
if (!this.stream)
|
|
35
|
+
return;
|
|
36
|
+
await new Promise((resolve) => {
|
|
37
|
+
this.stream.end(() => resolve());
|
|
38
|
+
});
|
|
39
|
+
this.stream = null;
|
|
40
|
+
}
|
|
41
|
+
getPath() {
|
|
42
|
+
return this.path;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export const metrics = new MetricsWriter();
|
|
46
|
+
//# sourceMappingURL=metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/telemetry/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAoB,MAAM,SAAS,CAAC;AACzE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAsBzC,MAAM,aAAa;IACT,MAAM,GAAuB,IAAI,CAAC;IAClC,IAAI,GAAkB,IAAI,CAAC;IAE5B,IAAI,CAAC,SAAiB;QAC3B,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,IAAI,CAAC;YACH,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC9B,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,+CAA+C,CAAC,CAAC;gBAC3E,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACrB,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,8BAA8B,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,GAAiB;QAC7B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QACzB,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,2CAA2C;QAC7C,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QACzB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,IAAI,CAAC,MAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token counting using gpt-tokenizer (cl100k_base — OpenAI default encoder).
|
|
3
|
+
*
|
|
4
|
+
* This is an approximation for Anthropic / other models, but it's the
|
|
5
|
+
* canonical open-source tokenizer and the usual Playwright MCP choice.
|
|
6
|
+
* Accuracy within +/- 10% vs true Anthropic tokenization is acceptable
|
|
7
|
+
* for budget enforcement purposes.
|
|
8
|
+
*/
|
|
9
|
+
export declare function countTokens(text: string): number;
|
|
10
|
+
export declare function countObjectTokens(obj: unknown): number;
|
|
11
|
+
/**
|
|
12
|
+
* Truncates text to stay under `maxTokens`, preserving a prefix/suffix with
|
|
13
|
+
* a visible ellipsis marker.
|
|
14
|
+
*/
|
|
15
|
+
export declare function truncateToTokens(text: string, maxTokens: number): string;
|
|
16
|
+
//# sourceMappingURL=tokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/telemetry/tokens.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQhD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAGtD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAQxE"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { encode } from "gpt-tokenizer";
|
|
2
|
+
/**
|
|
3
|
+
* Token counting using gpt-tokenizer (cl100k_base — OpenAI default encoder).
|
|
4
|
+
*
|
|
5
|
+
* This is an approximation for Anthropic / other models, but it's the
|
|
6
|
+
* canonical open-source tokenizer and the usual Playwright MCP choice.
|
|
7
|
+
* Accuracy within +/- 10% vs true Anthropic tokenization is acceptable
|
|
8
|
+
* for budget enforcement purposes.
|
|
9
|
+
*/
|
|
10
|
+
export function countTokens(text) {
|
|
11
|
+
if (!text)
|
|
12
|
+
return 0;
|
|
13
|
+
try {
|
|
14
|
+
return encode(text).length;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
// Fallback: rough 4 chars/token heuristic.
|
|
18
|
+
return Math.ceil(text.length / 4);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export function countObjectTokens(obj) {
|
|
22
|
+
if (obj == null)
|
|
23
|
+
return 0;
|
|
24
|
+
return countTokens(typeof obj === "string" ? obj : JSON.stringify(obj));
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Truncates text to stay under `maxTokens`, preserving a prefix/suffix with
|
|
28
|
+
* a visible ellipsis marker.
|
|
29
|
+
*/
|
|
30
|
+
export function truncateToTokens(text, maxTokens) {
|
|
31
|
+
const tokens = countTokens(text);
|
|
32
|
+
if (tokens <= maxTokens)
|
|
33
|
+
return text;
|
|
34
|
+
const ratio = maxTokens / tokens;
|
|
35
|
+
const approxChars = Math.max(64, Math.floor(text.length * ratio * 0.95));
|
|
36
|
+
const head = text.slice(0, Math.floor(approxChars * 0.7));
|
|
37
|
+
const tail = text.slice(-Math.floor(approxChars * 0.3));
|
|
38
|
+
return `${head}\n\n... [truncated ${tokens - maxTokens} tokens — use tr_fetch_cached(cache_key) for full payload] ...\n\n${tail}`;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/telemetry/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC;;;;;;;GAOG;AAEH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,2CAA2C;QAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACpC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,CAAC,CAAC;IAC1B,OAAO,WAAW,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,SAAiB;IAC9D,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,MAAM,IAAI,SAAS;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;IACjC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;IACzE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC;IACxD,OAAO,GAAG,IAAI,sBAAsB,MAAM,GAAG,SAAS,qEAAqE,IAAI,EAAE,CAAC;AACpI,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ToolContext, ToolDefinition } from "../../registry/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Core capability — always on. Short, cheap introspection tools the agent
|
|
4
|
+
* uses to orient itself before committing to a capability-specific workflow.
|
|
5
|
+
*/
|
|
6
|
+
export declare const coreTools: ToolDefinition[];
|
|
7
|
+
export declare function registerCoreTools(ctx: ToolContext, register: (def: ToolDefinition) => void): void;
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/core/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAG3E;;;GAGG;AAEH,eAAO,MAAM,SAAS,EAAE,cAAc,EAsNrC,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,GAAG,IAAI,CAEjG"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { version } from "../../version.js";
|
|
3
|
+
/**
|
|
4
|
+
* Core capability — always on. Short, cheap introspection tools the agent
|
|
5
|
+
* uses to orient itself before committing to a capability-specific workflow.
|
|
6
|
+
*/
|
|
7
|
+
export const coreTools = [
|
|
8
|
+
{
|
|
9
|
+
name: "tr_list_repos",
|
|
10
|
+
capability: "core",
|
|
11
|
+
title: "List TestRelic repos",
|
|
12
|
+
description: "Lists repos the authenticated user can see in cloud-platform-app. Sourced from /api/v1/mcp/bootstrap — no upstream fetch per call. Use this first when you don't know which repo_id (== repoId) to target.",
|
|
13
|
+
inputSchema: {
|
|
14
|
+
limit: z.number().int().min(1).max(100).optional().default(20),
|
|
15
|
+
},
|
|
16
|
+
outputSchema: {
|
|
17
|
+
repos: z.array(z.object({
|
|
18
|
+
repo_id: z.string(),
|
|
19
|
+
repo_name: z.string(),
|
|
20
|
+
git_id: z.string(),
|
|
21
|
+
})),
|
|
22
|
+
},
|
|
23
|
+
handler: async (input, ctx) => {
|
|
24
|
+
const limit = input.limit ?? 20;
|
|
25
|
+
const repos = ctx.bootstrap?.repos ?? [];
|
|
26
|
+
const results = repos.slice(0, limit).map((r) => ({
|
|
27
|
+
repo_id: r.id,
|
|
28
|
+
repo_name: r.displayName,
|
|
29
|
+
git_id: r.gitId,
|
|
30
|
+
}));
|
|
31
|
+
const lines = ["## Repos", ""];
|
|
32
|
+
for (const p of results)
|
|
33
|
+
lines.push(`- **${p.repo_id}** — ${p.repo_name} (git: \`${p.git_id}\`)`);
|
|
34
|
+
if (!results.length) {
|
|
35
|
+
lines.push("_No repos found. Either bootstrap failed (check your MCP token) or this organization has no repos yet._");
|
|
36
|
+
}
|
|
37
|
+
return { text: lines.join("\n"), structured: { repos: results } };
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: "tr_describe_repo",
|
|
42
|
+
capability: "core",
|
|
43
|
+
title: "Describe a repo",
|
|
44
|
+
description: "Returns a repo's integrations and capabilities. Sourced from the startup bootstrap — zero additional upstream calls.",
|
|
45
|
+
inputSchema: {
|
|
46
|
+
repo_id: z.string().describe("Repo ID (== cloud-platform-app repoId) or git slug"),
|
|
47
|
+
},
|
|
48
|
+
handler: async (input, ctx) => {
|
|
49
|
+
const id = input.repo_id;
|
|
50
|
+
const repo = ctx.bootstrap?.repos.find((r) => r.id === id || r.gitId === id);
|
|
51
|
+
if (!repo) {
|
|
52
|
+
return {
|
|
53
|
+
text: `Repo "${id}" not found. Call \`tr_list_repos\` to see available repos.`,
|
|
54
|
+
structured: { error: { code: "NOT_FOUND" } },
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const integrations = (ctx.bootstrap?.integrations ?? [])
|
|
58
|
+
.filter((i) => i.connected)
|
|
59
|
+
.map((i) => i.type);
|
|
60
|
+
const text = [
|
|
61
|
+
`## ${repo.displayName} (${repo.id})`,
|
|
62
|
+
``,
|
|
63
|
+
`- **Git slug:** \`${repo.gitId}\``,
|
|
64
|
+
`- **Organization integrations:** ${integrations.length ? integrations.join(", ") : "(none connected)"}`,
|
|
65
|
+
`- **Created:** ${repo.createdAt}`,
|
|
66
|
+
].join("\n");
|
|
67
|
+
return { text, structured: { repo, integrations } };
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: "tr_integration_status",
|
|
72
|
+
capability: "core",
|
|
73
|
+
title: "Check integration health",
|
|
74
|
+
description: "Returns a live health check for one integration type in the current org (e.g. 'jira', 'amplitude', 'grafana-loki'). Call this when a tool that depends on an integration fails with INTEGRATION_NOT_CONNECTED — the error message tells you where to configure it in the cloud UI.",
|
|
75
|
+
inputSchema: {
|
|
76
|
+
type: z.enum(["jira", "amplitude", "grafana-loki", "github-actions"]),
|
|
77
|
+
},
|
|
78
|
+
handler: async (input, ctx) => {
|
|
79
|
+
const type = input.type;
|
|
80
|
+
const status = await ctx.clients.cloud.integrationStatus(type).catch((err) => ({
|
|
81
|
+
connected: false,
|
|
82
|
+
valid: false,
|
|
83
|
+
error: err instanceof Error ? err.message : String(err),
|
|
84
|
+
}));
|
|
85
|
+
const base = ctx.config.cloud.baseUrl.replace(/\/api\/v1\/?$/, "");
|
|
86
|
+
const lines = [
|
|
87
|
+
`## Integration: ${type}`,
|
|
88
|
+
``,
|
|
89
|
+
`- **Connected:** ${status.connected ? "yes" : "no"}`,
|
|
90
|
+
`- **Credentials valid:** ${status.valid ? "yes" : "no"}`,
|
|
91
|
+
];
|
|
92
|
+
if (!status.connected || !status.valid) {
|
|
93
|
+
lines.push(`- **Configure at:** ${base}/settings/integrations`);
|
|
94
|
+
if (status.error)
|
|
95
|
+
lines.push(`- **Last error:** ${status.error}`);
|
|
96
|
+
}
|
|
97
|
+
return { text: lines.join("\n"), structured: { type, ...status } };
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
name: "tr_recent_runs",
|
|
102
|
+
capability: "core",
|
|
103
|
+
title: "List recent test runs",
|
|
104
|
+
description: "Paginated list of recent runs. Supports filters by project, framework, status. Prefer this as the cheap entry point before diagnosing a specific run.",
|
|
105
|
+
inputSchema: {
|
|
106
|
+
project_id: z.string().optional(),
|
|
107
|
+
framework: z.enum(["playwright", "cypress", "jest", "vitest"]).optional(),
|
|
108
|
+
status: z.enum(["passed", "failed", "running", "cancelled"]).optional(),
|
|
109
|
+
cursor: z.string().optional(),
|
|
110
|
+
limit: z.number().int().min(1).max(20).optional().default(5),
|
|
111
|
+
},
|
|
112
|
+
handler: async (input, ctx) => {
|
|
113
|
+
const result = await ctx.clients.testrelic.listRuns(input);
|
|
114
|
+
const { data: runs, next_cursor, total } = result;
|
|
115
|
+
if (!runs.length)
|
|
116
|
+
return { text: "No test runs found matching your filters.", structured: { runs: [], total: 0 } };
|
|
117
|
+
const lines = [`## Test Runs (${runs.length} of ${total} total)`, ""];
|
|
118
|
+
for (const run of runs) {
|
|
119
|
+
const passRate = run.total > 0 ? ((run.passed / run.total) * 100).toFixed(1) : "0.0";
|
|
120
|
+
const duration = (run.duration_ms / 1000).toFixed(1);
|
|
121
|
+
const status = run.status === "passed" ? "✓ passed" : `✗ ${run.status}`;
|
|
122
|
+
lines.push(`- **${run.run_id}** [${status}] ${run.failed} failed · ${run.flaky} flaky · ${passRate}% pass | ${run.framework} | ${run.branch}@${run.commit_sha} | ${duration}s | ${run.started_at}`);
|
|
123
|
+
}
|
|
124
|
+
lines.push("");
|
|
125
|
+
if (next_cursor)
|
|
126
|
+
lines.push(`**Next page cursor:** \`${next_cursor}\``);
|
|
127
|
+
else
|
|
128
|
+
lines.push("_No more pages._");
|
|
129
|
+
return { text: lines.join("\n"), structured: { runs, next_cursor, total } };
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
name: "tr_get_config",
|
|
134
|
+
capability: "core",
|
|
135
|
+
title: "Resolved server config",
|
|
136
|
+
description: "Returns the resolved configuration — capabilities, transport, timeouts, cache/output dirs. Safe to call early to learn what tools/resources are available.",
|
|
137
|
+
inputSchema: {},
|
|
138
|
+
handler: async (_input, ctx) => {
|
|
139
|
+
const cloud = {
|
|
140
|
+
baseUrl: ctx.config.cloud.baseUrl,
|
|
141
|
+
token: ctx.config.cloud.token ? "***" : undefined,
|
|
142
|
+
defaultRepoId: ctx.config.cloud.defaultRepoId,
|
|
143
|
+
};
|
|
144
|
+
const bootstrapIntegrations = ctx.bootstrap?.integrations.map((i) => ({
|
|
145
|
+
type: i.type,
|
|
146
|
+
connected: i.connected,
|
|
147
|
+
capabilities: i.capabilities,
|
|
148
|
+
})) ?? [];
|
|
149
|
+
const payload = {
|
|
150
|
+
version,
|
|
151
|
+
capabilities: ctx.config.capabilities,
|
|
152
|
+
transport: ctx.config.server.transport,
|
|
153
|
+
timeouts: ctx.config.timeouts,
|
|
154
|
+
outputDir: ctx.config.outputDir,
|
|
155
|
+
cacheDir: ctx.config.cacheDir,
|
|
156
|
+
isolated: ctx.config.isolated,
|
|
157
|
+
saveSession: ctx.config.saveSession,
|
|
158
|
+
mockMode: ctx.config.mockMode,
|
|
159
|
+
cloud,
|
|
160
|
+
integrations: bootstrapIntegrations,
|
|
161
|
+
tokenBudgetPerTool: ctx.config.tokenBudgetPerTool,
|
|
162
|
+
};
|
|
163
|
+
return {
|
|
164
|
+
text: ["## TestRelic MCP — resolved config", "", "```json", JSON.stringify(payload, null, 2), "```"].join("\n"),
|
|
165
|
+
structured: payload,
|
|
166
|
+
};
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
name: "tr_health",
|
|
171
|
+
capability: "core",
|
|
172
|
+
title: "Server health",
|
|
173
|
+
description: "Reports upstream connectivity, cache state, and whether any circuit breakers are open. Call this before a long workflow to fail fast if something is down.",
|
|
174
|
+
inputSchema: {},
|
|
175
|
+
handler: async (_input, ctx) => {
|
|
176
|
+
const stats = ctx.cache.snapshot();
|
|
177
|
+
const cloudOpen = ctx.clients._raw.cloud.isCircuitOpen();
|
|
178
|
+
const integrations = ctx.bootstrap?.integrations.map((i) => ({
|
|
179
|
+
type: i.type,
|
|
180
|
+
connected: i.connected,
|
|
181
|
+
})) ?? [];
|
|
182
|
+
const ok = !cloudOpen && !!ctx.bootstrap;
|
|
183
|
+
const text = [
|
|
184
|
+
`## Health: ${ok ? "OK" : "DEGRADED"}`,
|
|
185
|
+
"",
|
|
186
|
+
"### Cloud connection",
|
|
187
|
+
`- Base URL: ${ctx.config.cloud.baseUrl}`,
|
|
188
|
+
`- Bootstrap: ${ctx.bootstrap ? "ok" : "FAILED"}`,
|
|
189
|
+
`- Circuit breaker: ${cloudOpen ? "OPEN" : "closed"}`,
|
|
190
|
+
"",
|
|
191
|
+
"### Integrations (from bootstrap)",
|
|
192
|
+
...(integrations.length
|
|
193
|
+
? integrations.map((i) => `- ${i.type}: ${i.connected ? "connected" : "disconnected"}`)
|
|
194
|
+
: ["_(none configured)_"]),
|
|
195
|
+
"",
|
|
196
|
+
"### Cache",
|
|
197
|
+
`- L1 size: ${stats.lruSize}`,
|
|
198
|
+
`- L1 hits/misses: ${stats.l1Hits}/${stats.l1Misses}`,
|
|
199
|
+
`- L2 hits/misses: ${stats.l2Hits}/${stats.l2Misses}`,
|
|
200
|
+
`- Vector store: ${stats.vectorSize} records`,
|
|
201
|
+
].join("\n");
|
|
202
|
+
return {
|
|
203
|
+
text,
|
|
204
|
+
structured: {
|
|
205
|
+
ok,
|
|
206
|
+
cloud: { baseUrl: ctx.config.cloud.baseUrl, circuitOpen: cloudOpen, bootstrapOk: !!ctx.bootstrap },
|
|
207
|
+
integrations,
|
|
208
|
+
cache: stats,
|
|
209
|
+
version,
|
|
210
|
+
},
|
|
211
|
+
};
|
|
212
|
+
},
|
|
213
|
+
},
|
|
214
|
+
];
|
|
215
|
+
export function registerCoreTools(ctx, register) {
|
|
216
|
+
for (const tool of coreTools)
|
|
217
|
+
register(tool);
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/core/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ToolContext, ToolDefinition } from "../../registry/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Coverage capability — the core intelligence behind the ≥95% User-Coverage
|
|
4
|
+
* / ≥95% Test-Coverage goal. Every tool is cache-first and uses the 3-state
|
|
5
|
+
* diff reader for repeat calls on the same project.
|
|
6
|
+
*/
|
|
7
|
+
export declare const coverageTools: ToolDefinition[];
|
|
8
|
+
export declare function registerCoverageTools(ctx: ToolContext, register: (def: ToolDefinition) => void): void;
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/coverage/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE3E;;;;GAIG;AAEH,eAAO,MAAM,aAAa,EAAE,cAAc,EAkPzC,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,GAAG,IAAI,CAErG"}
|