@inferevents/mcp 0.3.1 → 0.3.3
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/api-client.test.d.ts +2 -0
- package/dist/api-client.test.d.ts.map +1 -0
- package/dist/api-client.test.js +383 -0
- package/dist/api-client.test.js.map +1 -0
- package/dist/charts.test.d.ts +2 -0
- package/dist/charts.test.d.ts.map +1 -0
- package/dist/charts.test.js +218 -0
- package/dist/charts.test.js.map +1 -0
- package/dist/config.d.ts +5 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +51 -9
- package/dist/config.js.map +1 -1
- package/dist/config.test.d.ts +2 -0
- package/dist/config.test.d.ts.map +1 -0
- package/dist/config.test.js +409 -0
- package/dist/config.test.js.map +1 -0
- package/dist/tips.test.d.ts +2 -0
- package/dist/tips.test.d.ts.map +1 -0
- package/dist/tips.test.js +92 -0
- package/dist/tips.test.js.map +1 -0
- package/dist/tools/switch-project.d.ts.map +1 -1
- package/dist/tools/switch-project.js +5 -2
- package/dist/tools/switch-project.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
2
|
+
// Tips module uses module-level Map state, so we need fresh imports for isolation.
|
|
3
|
+
// vi.resetModules() + dynamic import gives us a clean module each time.
|
|
4
|
+
async function freshGetTip() {
|
|
5
|
+
vi.resetModules();
|
|
6
|
+
const mod = await import("./tips.js");
|
|
7
|
+
return mod.getTip;
|
|
8
|
+
}
|
|
9
|
+
describe("getTip", () => {
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
vi.resetModules();
|
|
12
|
+
});
|
|
13
|
+
it("returns a tip string for a valid category", async () => {
|
|
14
|
+
const getTip = await freshGetTip();
|
|
15
|
+
const tip = getTip("afterCounts");
|
|
16
|
+
expect(tip).toBeTruthy();
|
|
17
|
+
expect(typeof tip).toBe("string");
|
|
18
|
+
expect(tip.length).toBeGreaterThan(0);
|
|
19
|
+
});
|
|
20
|
+
it("returns tip prefixed with double newline", async () => {
|
|
21
|
+
const getTip = await freshGetTip();
|
|
22
|
+
const tip = getTip("afterCounts");
|
|
23
|
+
expect(tip).toMatch(/^\n\n/);
|
|
24
|
+
});
|
|
25
|
+
it("returns different tips on subsequent calls (rotation)", async () => {
|
|
26
|
+
const getTip = await freshGetTip();
|
|
27
|
+
const tip1 = getTip("afterCounts");
|
|
28
|
+
const tip2 = getTip("afterCounts");
|
|
29
|
+
const tip3 = getTip("afterCounts");
|
|
30
|
+
expect(tip1).not.toBe(tip2);
|
|
31
|
+
expect(tip2).not.toBe(tip3);
|
|
32
|
+
});
|
|
33
|
+
it("returns tips in order (index 0, then 1, then 2...)", async () => {
|
|
34
|
+
const getTip = await freshGetTip();
|
|
35
|
+
const tip1 = getTip("afterRetention");
|
|
36
|
+
// The first tip should contain the first item's content
|
|
37
|
+
expect(tip1).toContain("Track this over time");
|
|
38
|
+
});
|
|
39
|
+
it("resets and starts over after all tips are shown", async () => {
|
|
40
|
+
const getTip = await freshGetTip();
|
|
41
|
+
// afterTopEvents has 4 tips
|
|
42
|
+
const firstRound = [];
|
|
43
|
+
for (let i = 0; i < 4; i++) {
|
|
44
|
+
firstRound.push(getTip("afterTopEvents"));
|
|
45
|
+
}
|
|
46
|
+
// All 4 should be unique
|
|
47
|
+
const unique = new Set(firstRound);
|
|
48
|
+
expect(unique.size).toBe(4);
|
|
49
|
+
// Next call should reset and return the first tip again
|
|
50
|
+
const afterReset = getTip("afterTopEvents");
|
|
51
|
+
expect(afterReset).toBe(firstRound[0]);
|
|
52
|
+
});
|
|
53
|
+
it("tracks categories independently", async () => {
|
|
54
|
+
const getTip = await freshGetTip();
|
|
55
|
+
const countsTip = getTip("afterCounts");
|
|
56
|
+
const retentionTip = getTip("afterRetention");
|
|
57
|
+
// Both should return their first tips, not share state
|
|
58
|
+
expect(countsTip).toContain("automatically");
|
|
59
|
+
expect(retentionTip).toContain("Track this over time");
|
|
60
|
+
});
|
|
61
|
+
it("works for afterCounts category", async () => {
|
|
62
|
+
const getTip = await freshGetTip();
|
|
63
|
+
const tip = getTip("afterCounts");
|
|
64
|
+
expect(tip).toBeTruthy();
|
|
65
|
+
expect(tip).toContain("💡");
|
|
66
|
+
});
|
|
67
|
+
it("works for afterRetention category", async () => {
|
|
68
|
+
const getTip = await freshGetTip();
|
|
69
|
+
const tip = getTip("afterRetention");
|
|
70
|
+
expect(tip).toBeTruthy();
|
|
71
|
+
expect(tip).toContain("💡");
|
|
72
|
+
});
|
|
73
|
+
it("works for afterJourney category", async () => {
|
|
74
|
+
const getTip = await freshGetTip();
|
|
75
|
+
const tip = getTip("afterJourney");
|
|
76
|
+
expect(tip).toBeTruthy();
|
|
77
|
+
expect(tip).toContain("💡");
|
|
78
|
+
});
|
|
79
|
+
it("works for afterTopEvents category", async () => {
|
|
80
|
+
const getTip = await freshGetTip();
|
|
81
|
+
const tip = getTip("afterTopEvents");
|
|
82
|
+
expect(tip).toBeTruthy();
|
|
83
|
+
expect(tip).toContain("💡");
|
|
84
|
+
});
|
|
85
|
+
it("works for afterInsights category", async () => {
|
|
86
|
+
const getTip = await freshGetTip();
|
|
87
|
+
const tip = getTip("afterInsights");
|
|
88
|
+
expect(tip).toBeTruthy();
|
|
89
|
+
expect(tip).toContain("💡");
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
//# sourceMappingURL=tips.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tips.test.js","sourceRoot":"","sources":["../src/tips.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"switch-project.d.ts","sourceRoot":"","sources":["../../src/tools/switch-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,mBAAmB;;CAK/B,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,MAAM,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAChC,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"switch-project.d.ts","sourceRoot":"","sources":["../../src/tools/switch-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,mBAAmB;;CAK/B,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,MAAM,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAChC,OAAO,CAAC,MAAM,CAAC,CAqBjB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { listProjects, switchProject } from "../config.js";
|
|
2
|
+
import { listProjects, switchProject, writeLocalConfig } from "../config.js";
|
|
3
3
|
export const switchProjectSchema = {
|
|
4
4
|
project_name: z
|
|
5
5
|
.string()
|
|
@@ -21,6 +21,9 @@ export async function handleSwitchProject(params) {
|
|
|
21
21
|
return lines.join("\n");
|
|
22
22
|
}
|
|
23
23
|
const config = await switchProject(params.project_name);
|
|
24
|
-
|
|
24
|
+
// Also write .infer.json in current directory so this project auto-selects here
|
|
25
|
+
const localPath = await writeLocalConfig(params.project_name).catch(() => null);
|
|
26
|
+
const localMsg = localPath ? ` Wrote .infer.json so this directory always uses "${params.project_name}".` : "";
|
|
27
|
+
return `Switched to project "${params.project_name}" (${config.projectId}).${localMsg} MCP tools now query this project.`;
|
|
25
28
|
}
|
|
26
29
|
//# sourceMappingURL=switch-project.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"switch-project.js","sourceRoot":"","sources":["../../src/tools/switch-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"switch-project.js","sourceRoot":"","sources":["../../src/tools/switch-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE7E,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,8DAA8D,CAAC;CAC5E,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAiC;IAEjC,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IAEtC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,yDAAyD,CAAC;QACnE,CAAC;QACD,MAAM,KAAK,GAAG,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;QAC3C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,SAAS,GAAG,MAAM,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,uDAAuD,CAAC,CAAC;QACxE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACxD,gFAAgF;IAChF,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAChF,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,qDAAqD,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/G,OAAO,wBAAwB,MAAM,CAAC,YAAY,MAAM,MAAM,CAAC,SAAS,KAAK,QAAQ,oCAAoC,CAAC;AAC5H,CAAC"}
|