alpic 1.165.1 → 1.167.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.
Files changed (52) hide show
  1. package/README.md +4 -0
  2. package/dist/__tests__/insights-category.e2e.test.d.ts +1 -0
  3. package/dist/__tests__/insights-category.e2e.test.js +248 -0
  4. package/dist/__tests__/insights-category.e2e.test.js.map +1 -0
  5. package/dist/__tests__/insights.e2e.test.d.ts +1 -0
  6. package/dist/__tests__/insights.e2e.test.js +193 -0
  7. package/dist/__tests__/insights.e2e.test.js.map +1 -0
  8. package/dist/__tests__/mock-api.d.ts +16 -0
  9. package/dist/__tests__/mock-api.js +198 -32
  10. package/dist/__tests__/mock-api.js.map +1 -1
  11. package/dist/__tests__/team-inspect.e2e.test.js +26 -1
  12. package/dist/__tests__/team-inspect.e2e.test.js.map +1 -1
  13. package/dist/__tests__/utils.d.ts +3 -0
  14. package/dist/__tests__/utils.js +13 -0
  15. package/dist/__tests__/utils.js.map +1 -1
  16. package/dist/commands/insights/category/create.d.ts +17 -0
  17. package/dist/commands/insights/category/create.js +63 -0
  18. package/dist/commands/insights/category/create.js.map +1 -0
  19. package/dist/commands/insights/category/delete.d.ts +13 -0
  20. package/dist/commands/insights/category/delete.js +40 -0
  21. package/dist/commands/insights/category/delete.js.map +1 -0
  22. package/dist/commands/insights/category/link.d.ts +14 -0
  23. package/dist/commands/insights/category/link.js +36 -0
  24. package/dist/commands/insights/category/link.js.map +1 -0
  25. package/dist/commands/insights/category/list.d.ts +13 -0
  26. package/dist/commands/insights/category/list.js +45 -0
  27. package/dist/commands/insights/category/list.js.map +1 -0
  28. package/dist/commands/insights/category/unlink.d.ts +14 -0
  29. package/dist/commands/insights/category/unlink.js +36 -0
  30. package/dist/commands/insights/category/unlink.js.map +1 -0
  31. package/dist/commands/insights/category/update.d.ts +16 -0
  32. package/dist/commands/insights/category/update.js +44 -0
  33. package/dist/commands/insights/category/update.js.map +1 -0
  34. package/dist/commands/insights/feedback/list.d.ts +19 -0
  35. package/dist/commands/insights/feedback/list.js +72 -0
  36. package/dist/commands/insights/feedback/list.js.map +1 -0
  37. package/dist/commands/insights/intent/list.d.ts +22 -0
  38. package/dist/commands/insights/intent/list.js +88 -0
  39. package/dist/commands/insights/intent/list.js.map +1 -0
  40. package/dist/commands/logs.js +1 -9
  41. package/dist/commands/logs.js.map +1 -1
  42. package/dist/commands/team/inspect.js +17 -2
  43. package/dist/commands/team/inspect.js.map +1 -1
  44. package/dist/lib/insights.d.ts +17 -0
  45. package/dist/lib/insights.js +54 -0
  46. package/dist/lib/insights.js.map +1 -0
  47. package/dist/lib/utils.d.ts +8 -1
  48. package/dist/lib/utils.js +14 -1
  49. package/dist/lib/utils.js.map +1 -1
  50. package/dist/lib/utils.test.js +28 -5
  51. package/dist/lib/utils.test.js.map +1 -1
  52. package/package.json +4 -4
package/README.md CHANGED
@@ -16,6 +16,10 @@ Full documentation: **https://docs.alpic.ai/cli/overview**
16
16
  | `login` | Authenticate via browser |
17
17
  | `logout` | Clear local credentials |
18
18
  | `logs` | Monitor runtime logs |
19
+ | `insights intent list` | List grouped user intents |
20
+ | `insights feedback list` | List user feedback |
21
+ | `insights category list\|create\|update\|delete` | Manage intent categories |
22
+ | `insights category link\|unlink` | Assign intent categories to intents |
19
23
  | `publish` | Share an MCP server to the registry |
20
24
  | `telemetry enable\|disable\|status` | Manage usage reporting |
21
25
  | `tunnel` | Expose local server to the internet |
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,248 @@
1
+ import { beforeEach, describe, expect, it } from "vitest";
2
+ import { cliSession, createConfigFile, expectSuccessfulApiCall, registerCliE2ELifecycle } from "./utils.js";
3
+ const ENV_ID = "env-insights-category-test";
4
+ const PROJECT_ID = "prj-insights-category-test";
5
+ const TEAM_ID = "mock-team-id";
6
+ describe("alpic insights category (E2E)", () => {
7
+ const context = registerCliE2ELifecycle({
8
+ projects: [
9
+ {
10
+ projectId: PROJECT_ID,
11
+ teamId: TEAM_ID,
12
+ projectName: "insights-category-project",
13
+ environmentId: ENV_ID,
14
+ environmentName: "production",
15
+ },
16
+ ],
17
+ });
18
+ let mockServer;
19
+ let serverUrl;
20
+ let cwd;
21
+ let binPath;
22
+ beforeEach(() => {
23
+ ({ mockServer, serverUrl, cwd, binPath } = context);
24
+ mockServer.setIntents(ENV_ID, [
25
+ {
26
+ id: "group-1",
27
+ intentIds: ["intent-1", "intent-2"],
28
+ environmentId: ENV_ID,
29
+ message: "Schedule a meeting with the product team",
30
+ toolName: "create-event",
31
+ createdAt: new Date("2026-08-12T10:00:00.000Z"),
32
+ occurrenceCount: 2,
33
+ clientName: "Claude Desktop",
34
+ clientId: "claude-desktop",
35
+ categories: [],
36
+ },
37
+ {
38
+ id: "group-2",
39
+ intentIds: ["intent-3"],
40
+ environmentId: ENV_ID,
41
+ message: "Find the latest release notes",
42
+ toolName: "search",
43
+ createdAt: new Date("2026-08-12T09:00:00.000Z"),
44
+ occurrenceCount: 1,
45
+ clientName: null,
46
+ clientId: null,
47
+ categories: [],
48
+ },
49
+ ]);
50
+ mockServer.setIntentCategories(ENV_ID, [
51
+ {
52
+ id: "cat-scheduling",
53
+ createdAt: new Date("2026-08-10T00:00:00.000Z"),
54
+ environmentId: ENV_ID,
55
+ name: "Scheduling",
56
+ color: "blue",
57
+ linkedIntentIds: ["intent-1", "intent-2"],
58
+ },
59
+ {
60
+ id: "cat-search",
61
+ createdAt: new Date("2026-08-11T00:00:00.000Z"),
62
+ environmentId: ENV_ID,
63
+ name: "Search",
64
+ color: "purple",
65
+ },
66
+ ]);
67
+ });
68
+ const env = () => ({ ALPIC_API_BASE_URL: serverUrl, ALPIC_API_KEY: "test-api-key" });
69
+ it("lists categories with link counts using the local environment", async () => {
70
+ createConfigFile(cwd, PROJECT_ID, TEAM_ID, "insights-category-project", ENV_ID, "production");
71
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "insights", "category", "list"], {
72
+ cwd,
73
+ env: env(),
74
+ });
75
+ expect(exitCode).toBe(0);
76
+ expect(output).toContain("Found 2 categories");
77
+ expect(output).toContain("Scheduling");
78
+ expect(output).toContain("blue");
79
+ expect(output).toContain("cat-scheduling");
80
+ expectSuccessfulApiCall(mockServer.getLastCall("GET", /\/v1\/environments\/.*\/intent-categories$/));
81
+ });
82
+ it("emits category JSON with link counts", async () => {
83
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "insights", "category", "list", "--environment-id", ENV_ID, "--json", "--non-interactive"], { cwd, env: env() });
84
+ expect(exitCode).toBe(0);
85
+ const json = output.trim().split("\n").at(-1);
86
+ const parsed = JSON.parse(json ?? "");
87
+ expect(parsed).toEqual([
88
+ { id: "cat-scheduling", name: "Scheduling", color: "blue", intentCount: 2 },
89
+ { id: "cat-search", name: "Search", color: "purple", intentCount: 0 },
90
+ ]);
91
+ });
92
+ it("creates a category with a color and linked intents", async () => {
93
+ const { exitCode, output } = await cliSession(process.execPath, [
94
+ binPath,
95
+ "insights",
96
+ "category",
97
+ "create",
98
+ "--environment-id",
99
+ ENV_ID,
100
+ "--name",
101
+ "Releases",
102
+ "--color",
103
+ "green",
104
+ "--intent-id",
105
+ "intent-3",
106
+ "--json",
107
+ ], { cwd, env: env() });
108
+ expect(exitCode).toBe(0);
109
+ expect(output).toContain("Created Releases (green)");
110
+ const call = mockServer.getLastCall("POST", /\/v1\/environments\/.*\/intent-categories$/);
111
+ expectSuccessfulApiCall(call);
112
+ expect(call.input).toMatchObject({ name: "Releases", color: "green", intentIds: ["intent-3"] });
113
+ const json = JSON.parse(output.trim().split("\n").at(-1) ?? "");
114
+ expect(json).toMatchObject({ name: "Releases", color: "green", environmentId: ENV_ID });
115
+ expect(json.createdAt).toBe("2026-08-13T00:00:00.000Z");
116
+ });
117
+ it("requires --name to create in non-interactive mode", async () => {
118
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "insights", "category", "create", "--environment-id", ENV_ID, "--non-interactive"], { cwd, env: env() });
119
+ expect(exitCode).toBe(1);
120
+ expect(output).toContain("--name is required in non-interactive mode.");
121
+ });
122
+ it("renames and recolors a category", async () => {
123
+ const { exitCode, output } = await cliSession(process.execPath, [
124
+ binPath,
125
+ "insights",
126
+ "category",
127
+ "update",
128
+ "--environment-id",
129
+ ENV_ID,
130
+ "--category-id",
131
+ "cat-search",
132
+ "--name",
133
+ "Discovery",
134
+ "--color",
135
+ "orange",
136
+ ], { cwd, env: env() });
137
+ expect(exitCode).toBe(0);
138
+ expect(output).toContain("Updated Discovery (orange)");
139
+ const call = mockServer.getLastCall("PATCH", /\/v1\/environments\/.*\/intent-categories\/cat-search$/);
140
+ expectSuccessfulApiCall(call);
141
+ expect(call.input).toMatchObject({ name: "Discovery", color: "orange" });
142
+ });
143
+ it("rejects an update without --name or --color", async () => {
144
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "insights", "category", "update", "--environment-id", ENV_ID, "--category-id", "cat-search"], { cwd, env: env() });
145
+ expect(exitCode).toBe(1);
146
+ expect(output).toContain("At least one of --name or --color must be provided.");
147
+ expect(mockServer.getCalls("PATCH", /\/intent-categories/)).toHaveLength(0);
148
+ });
149
+ it("deletes a category after interactive selection and confirmation", async () => {
150
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "insights", "category", "delete", "--environment-id", ENV_ID], { cwd, env: env() }, async (cli) => {
151
+ await cli.expect("Select a category to delete");
152
+ await cli.send("");
153
+ await cli.expect("Delete Scheduling?");
154
+ await cli.send("y");
155
+ await cli.expect("Deleted Scheduling.");
156
+ });
157
+ expect(exitCode).toBe(0);
158
+ expect(output).toContain("It will be unlinked from 2 intents.");
159
+ expectSuccessfulApiCall(mockServer.getLastCall("DELETE", /\/intent-categories\/cat-scheduling$/));
160
+ });
161
+ it("deletes without prompting in non-interactive mode", async () => {
162
+ const { exitCode, output } = await cliSession(process.execPath, [
163
+ binPath,
164
+ "insights",
165
+ "category",
166
+ "delete",
167
+ "--environment-id",
168
+ ENV_ID,
169
+ "--category-id",
170
+ "cat-search",
171
+ "--non-interactive",
172
+ ], { cwd, env: env() });
173
+ expect(exitCode).toBe(0);
174
+ expect(output).toContain("Deleted Search.");
175
+ expect(output).not.toContain("Delete Search?");
176
+ expectSuccessfulApiCall(mockServer.getLastCall("DELETE", /\/intent-categories\/cat-search$/));
177
+ });
178
+ it("requires --category-id to delete in non-interactive mode", async () => {
179
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "insights", "category", "delete", "--environment-id", ENV_ID, "--non-interactive"], { cwd, env: env() });
180
+ expect(exitCode).toBe(1);
181
+ expect(output).toContain("--category-id is required in non-interactive mode.");
182
+ });
183
+ it("links intents and reflects the category in the intent list filter", async () => {
184
+ const link = await cliSession(process.execPath, [
185
+ binPath,
186
+ "insights",
187
+ "category",
188
+ "link",
189
+ "--environment-id",
190
+ ENV_ID,
191
+ "--category-id",
192
+ "cat-search",
193
+ "--intent-id",
194
+ "intent-3",
195
+ ], { cwd, env: env() });
196
+ expect(link.exitCode).toBe(0);
197
+ expect(link.output).toContain("Linked 1 intent to Search.");
198
+ const call = mockServer.getLastCall("POST", /\/intent-categories\/cat-search\/link$/);
199
+ expectSuccessfulApiCall(call);
200
+ expect(call.input).toMatchObject({ intentIds: ["intent-3"] });
201
+ const list = await cliSession(process.execPath, [binPath, "insights", "intent", "list", "--environment-id", ENV_ID, "--category-id", "cat-search"], { cwd, env: env() });
202
+ expect(list.exitCode).toBe(0);
203
+ expect(list.output).toContain("Found 1 intent");
204
+ expect(list.output).toContain("Find the latest release notes");
205
+ expect(list.output).toContain("Search");
206
+ });
207
+ it("unlinks intents from a category", async () => {
208
+ const { exitCode, output } = await cliSession(process.execPath, [
209
+ binPath,
210
+ "insights",
211
+ "category",
212
+ "unlink",
213
+ "--environment-id",
214
+ ENV_ID,
215
+ "--category-id",
216
+ "cat-scheduling",
217
+ "--intent-id",
218
+ "intent-1",
219
+ "--intent-id",
220
+ "intent-2",
221
+ ], { cwd, env: env() });
222
+ expect(exitCode).toBe(0);
223
+ expect(output).toContain("Unlinked 2 intents from Scheduling.");
224
+ const call = mockServer.getLastCall("POST", /\/intent-categories\/cat-scheduling\/unlink$/);
225
+ expectSuccessfulApiCall(call);
226
+ expect(call.input).toMatchObject({ intentIds: ["intent-1", "intent-2"] });
227
+ });
228
+ it("reports unknown categories and environments", async () => {
229
+ const unknownCategory = await cliSession(process.execPath, [
230
+ binPath,
231
+ "insights",
232
+ "category",
233
+ "update",
234
+ "--environment-id",
235
+ ENV_ID,
236
+ "--category-id",
237
+ "missing",
238
+ "--name",
239
+ "X",
240
+ ], { cwd, env: env() });
241
+ expect(unknownCategory.exitCode).toBe(1);
242
+ expect(unknownCategory.output).toContain('Intent category "missing" not found in this environment.');
243
+ const unknownEnvironment = await cliSession(process.execPath, [binPath, "insights", "category", "list", "--environment-id", "missing"], { cwd, env: env() });
244
+ expect(unknownEnvironment.exitCode).toBe(1);
245
+ expect(unknownEnvironment.output).toContain("Environment not found");
246
+ });
247
+ });
248
+ //# sourceMappingURL=insights-category.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insights-category.e2e.test.js","sourceRoot":"","sources":["../../src/__tests__/insights-category.e2e.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,193 @@
1
+ import { beforeEach, describe, expect, it } from "vitest";
2
+ import { cliSession, createConfigFile, expectSuccessfulApiCall, registerCliE2ELifecycle } from "./utils.js";
3
+ const ENV_ID = "env-insights-test";
4
+ const PROJECT_ID = "prj-insights-test";
5
+ const TEAM_ID = "mock-team-id";
6
+ describe("alpic insights (E2E)", () => {
7
+ const context = registerCliE2ELifecycle({
8
+ projects: [
9
+ {
10
+ projectId: PROJECT_ID,
11
+ teamId: TEAM_ID,
12
+ projectName: "insights-project",
13
+ environmentId: ENV_ID,
14
+ environmentName: "production",
15
+ },
16
+ ],
17
+ });
18
+ let mockServer;
19
+ let serverUrl;
20
+ let cwd;
21
+ let binPath;
22
+ beforeEach(() => {
23
+ ({ mockServer, serverUrl, cwd, binPath } = context);
24
+ mockServer.setIntents(ENV_ID, [
25
+ {
26
+ id: "intent-1",
27
+ intentIds: ["intent-1", "intent-2"],
28
+ environmentId: ENV_ID,
29
+ message: `Schedule a meeting ${"with the product team ".repeat(6)}`,
30
+ toolName: "create-event",
31
+ createdAt: new Date("2026-08-12T10:00:00.000Z"),
32
+ occurrenceCount: 2,
33
+ clientName: "Claude Desktop",
34
+ clientId: "claude-desktop",
35
+ categories: [{ id: "category-scheduling", name: "Scheduling", color: "blue" }],
36
+ },
37
+ {
38
+ id: "intent-2",
39
+ intentIds: ["intent-3"],
40
+ environmentId: ENV_ID,
41
+ message: "Find the latest release notes",
42
+ toolName: "search",
43
+ createdAt: new Date("2026-08-12T09:00:00.000Z"),
44
+ occurrenceCount: 1,
45
+ clientName: null,
46
+ clientId: null,
47
+ categories: [],
48
+ },
49
+ ]);
50
+ mockServer.setFeedbacks(ENV_ID, [
51
+ {
52
+ id: "feedback-1",
53
+ environmentId: ENV_ID,
54
+ content: `The calendar tool timed out ${"after I selected a time ".repeat(6)}`,
55
+ source: "user",
56
+ createdAt: new Date("2026-08-12T11:00:00.000Z"),
57
+ clientName: "Claude Desktop",
58
+ clientId: "claude-desktop",
59
+ },
60
+ {
61
+ id: "feedback-2",
62
+ environmentId: ENV_ID,
63
+ content: "The calendar tool timed out again",
64
+ source: "model",
65
+ createdAt: new Date("2026-08-12T10:30:00.000Z"),
66
+ clientName: "Claude Desktop",
67
+ clientId: "claude-desktop",
68
+ },
69
+ ]);
70
+ });
71
+ const env = () => ({ ALPIC_API_BASE_URL: serverUrl, ALPIC_API_KEY: "test-api-key" });
72
+ it("lists intents using the local environment and truncates human output", async () => {
73
+ createConfigFile(cwd, PROJECT_ID, TEAM_ID, "insights-project", ENV_ID, "production");
74
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "insights", "intent", "list", "--limit", "1"], {
75
+ cwd,
76
+ env: env(),
77
+ });
78
+ expect(exitCode).toBe(0);
79
+ expect(output).toContain("Schedule a meeting");
80
+ expect(output).toContain("…");
81
+ expect(output).toContain("Found 2 intents");
82
+ expect(output).toContain("occurrences");
83
+ const call = mockServer.getLastCall("GET", /\/v1\/environments\/.*\/intents/);
84
+ expectSuccessfulApiCall(call);
85
+ const input = call.input;
86
+ expect(input.since).toBe("7d");
87
+ expect(input.until).toBeUndefined();
88
+ });
89
+ it("passes intent filters, pagination, sorting, and an explicit time range", async () => {
90
+ const { exitCode } = await cliSession(process.execPath, [
91
+ binPath,
92
+ "insights",
93
+ "intent",
94
+ "list",
95
+ "--environment-id",
96
+ ENV_ID,
97
+ "--since",
98
+ "2026-08-01T00:00:00Z",
99
+ "--until",
100
+ "2026-08-12T00:00:00Z",
101
+ "--search",
102
+ "meeting",
103
+ "--tool",
104
+ "create-event",
105
+ "--client-id",
106
+ "claude-desktop",
107
+ "--category-id",
108
+ "category-scheduling",
109
+ "--sort",
110
+ "asc",
111
+ "--limit",
112
+ "20",
113
+ "--offset",
114
+ "1",
115
+ ], { cwd, env: env() });
116
+ expect(exitCode).toBe(0);
117
+ const input = mockServer.getLastCall("GET", /\/intents/)?.input;
118
+ expect(input).toMatchObject({
119
+ since: "2026-08-01T00:00:00Z",
120
+ until: "2026-08-12T00:00:00Z",
121
+ search: "meeting",
122
+ sortDir: "asc",
123
+ limit: "20",
124
+ offset: "1",
125
+ });
126
+ expect(input["tools[0]"]).toBe("create-event");
127
+ expect(input["clientIds[0]"]).toBe("claude-desktop");
128
+ expect(input["categoryIds[0]"]).toBe("category-scheduling");
129
+ });
130
+ it("emits intent JSON and resolves an environment name", async () => {
131
+ const { exitCode, output } = await cliSession(process.execPath, [
132
+ binPath,
133
+ "insights",
134
+ "intent",
135
+ "list",
136
+ "--project-name",
137
+ "insights-project",
138
+ "--environment-name",
139
+ "production",
140
+ "--json",
141
+ ], { cwd, env: env() });
142
+ expect(exitCode).toBe(0);
143
+ const json = output.trim().split("\n").at(-1);
144
+ expect(json).toBeDefined();
145
+ const parsed = JSON.parse(json ?? "");
146
+ expect(parsed.intents[0].message).toContain("with the product team");
147
+ expect(parsed.intents[0].createdAt).toBe("2026-08-12T10:00:00.000Z");
148
+ expect(output).toContain('Resolved environment "production"');
149
+ });
150
+ it("lists feedback and passes its filters", async () => {
151
+ const { exitCode, output } = await cliSession(process.execPath, [
152
+ binPath,
153
+ "insights",
154
+ "feedback",
155
+ "list",
156
+ "--environment-id",
157
+ ENV_ID,
158
+ "--search",
159
+ "calendar",
160
+ "--client-id",
161
+ "claude-desktop",
162
+ "--limit",
163
+ "1",
164
+ "--offset",
165
+ "0",
166
+ ], { cwd, env: env() });
167
+ expect(exitCode).toBe(0);
168
+ expect(output).toContain("Found 2 feedbacks");
169
+ expect(output).toContain("calendar tool timed out");
170
+ const input = mockServer.getLastCall("GET", /\/feedbacks/)?.input;
171
+ expect(input).toMatchObject({ search: "calendar", limit: "1", offset: "0" });
172
+ expect(input["clientIds[0]"]).toBe("claude-desktop");
173
+ });
174
+ it("prints empty results and rejects invalid time values before calling the API", async () => {
175
+ mockServer.setFeedbacks(ENV_ID, []);
176
+ const empty = await cliSession(process.execPath, [binPath, "insights", "feedback", "list", "--environment-id", ENV_ID], { cwd, env: env() });
177
+ expect(empty.exitCode).toBe(0);
178
+ expect(empty.output).toContain("No feedback found for this period.");
179
+ const invalid = await cliSession(process.execPath, [binPath, "insights", "feedback", "list", "--environment-id", ENV_ID, "--since", "yesterday"], { cwd, env: env() });
180
+ expect(invalid.exitCode).toBe(1);
181
+ expect(invalid.output).toContain("Invalid --since value");
182
+ expect(mockServer.getCalls("GET", /\/feedbacks/)).toHaveLength(1);
183
+ });
184
+ it("reports authentication and missing environment errors", async () => {
185
+ const unauthenticated = await cliSession(process.execPath, [binPath, "insights", "intent", "list", "--environment-id", ENV_ID, "--non-interactive"], { cwd, env: { ALPIC_API_BASE_URL: serverUrl } });
186
+ expect(unauthenticated.exitCode).toBe(1);
187
+ expect(unauthenticated.output).toContain("Not authenticated");
188
+ const missing = await cliSession(process.execPath, [binPath, "insights", "intent", "list", "--environment-id", "missing"], { cwd, env: env() });
189
+ expect(missing.exitCode).toBe(1);
190
+ expect(missing.output).toContain("Environment not found");
191
+ });
192
+ });
193
+ //# sourceMappingURL=insights.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insights.e2e.test.js","sourceRoot":"","sources":["../../src/__tests__/insights.e2e.test.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ export type MockDeploymentLogPage = {
8
8
  }[];
9
9
  hasMoreLogs: boolean;
10
10
  };
11
+ type MockTeamUsage = RouterOutput["teams"]["getUsage"]["v1"];
11
12
  type BeaconGetResponse = RouterOutput["beacon"]["get"]["v1"];
12
13
  type MockPlaygroundData = RouterOutput["playground"]["get"]["v1"];
13
14
  type MockTunnelTicket = {
@@ -15,6 +16,11 @@ type MockTunnelTicket = {
15
16
  ticket: string;
16
17
  tunnelHost: string;
17
18
  };
19
+ type MockIntents = RouterOutput["intents"]["list"]["v1"];
20
+ type MockFeedbacks = RouterOutput["feedbacks"]["list"]["v1"];
21
+ type MockIntentCategory = RouterOutput["intentCategories"]["create"]["v1"] & {
22
+ linkedIntentIds: Set<string>;
23
+ };
18
24
  export type ApiCall = {
19
25
  method: string;
20
26
  path: string;
@@ -40,6 +46,7 @@ export declare class MockApiServer {
40
46
  id: string;
41
47
  name: string;
42
48
  }[]): void;
49
+ setTeamUsage(usage: MockTeamUsage): void;
43
50
  addEnvironmentVariables(environmentId: string, variables: RouterOutput["environmentVariables"]["list"]["v1"]): void;
44
51
  setRuntimeLogs(environmentId: string, logs: MockRuntimeLog[]): void;
45
52
  setRuntimeLogPages(environmentId: string, pages: MockRuntimeLog[][]): void;
@@ -48,6 +55,15 @@ export declare class MockApiServer {
48
55
  setDeploymentLogPages(deploymentId: string, pages: MockDeploymentLogPage[]): void;
49
56
  setBeaconGetResponses(responses: BeaconGetResponse[]): void;
50
57
  setPlayground(environmentId: string, playground: MockPlaygroundData): void;
58
+ setIntents(environmentId: string, intents: MockIntents["intents"]): void;
59
+ setIntentCategories(environmentId: string, categories: Array<Omit<MockIntentCategory, "linkedIntentIds"> & {
60
+ linkedIntentIds?: string[];
61
+ }>): void;
62
+ private requireMockEnvironmentCategories;
63
+ private requireMockIntentCategory;
64
+ private requireMockIntents;
65
+ private removeCategoryFromIntents;
66
+ setFeedbacks(environmentId: string, feedbacks: MockFeedbacks["feedbacks"]): void;
51
67
  addProject(project: RouterOutput["projects"]["get"]["v1"]): void;
52
68
  }
53
69
  export {};