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.
- package/README.md +4 -0
- package/dist/__tests__/insights-category.e2e.test.d.ts +1 -0
- package/dist/__tests__/insights-category.e2e.test.js +248 -0
- package/dist/__tests__/insights-category.e2e.test.js.map +1 -0
- package/dist/__tests__/insights.e2e.test.d.ts +1 -0
- package/dist/__tests__/insights.e2e.test.js +193 -0
- package/dist/__tests__/insights.e2e.test.js.map +1 -0
- package/dist/__tests__/mock-api.d.ts +16 -0
- package/dist/__tests__/mock-api.js +198 -32
- package/dist/__tests__/mock-api.js.map +1 -1
- package/dist/__tests__/team-inspect.e2e.test.js +26 -1
- package/dist/__tests__/team-inspect.e2e.test.js.map +1 -1
- package/dist/__tests__/utils.d.ts +3 -0
- package/dist/__tests__/utils.js +13 -0
- package/dist/__tests__/utils.js.map +1 -1
- package/dist/commands/insights/category/create.d.ts +17 -0
- package/dist/commands/insights/category/create.js +63 -0
- package/dist/commands/insights/category/create.js.map +1 -0
- package/dist/commands/insights/category/delete.d.ts +13 -0
- package/dist/commands/insights/category/delete.js +40 -0
- package/dist/commands/insights/category/delete.js.map +1 -0
- package/dist/commands/insights/category/link.d.ts +14 -0
- package/dist/commands/insights/category/link.js +36 -0
- package/dist/commands/insights/category/link.js.map +1 -0
- package/dist/commands/insights/category/list.d.ts +13 -0
- package/dist/commands/insights/category/list.js +45 -0
- package/dist/commands/insights/category/list.js.map +1 -0
- package/dist/commands/insights/category/unlink.d.ts +14 -0
- package/dist/commands/insights/category/unlink.js +36 -0
- package/dist/commands/insights/category/unlink.js.map +1 -0
- package/dist/commands/insights/category/update.d.ts +16 -0
- package/dist/commands/insights/category/update.js +44 -0
- package/dist/commands/insights/category/update.js.map +1 -0
- package/dist/commands/insights/feedback/list.d.ts +19 -0
- package/dist/commands/insights/feedback/list.js +72 -0
- package/dist/commands/insights/feedback/list.js.map +1 -0
- package/dist/commands/insights/intent/list.d.ts +22 -0
- package/dist/commands/insights/intent/list.js +88 -0
- package/dist/commands/insights/intent/list.js.map +1 -0
- package/dist/commands/logs.js +1 -9
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/team/inspect.js +17 -2
- package/dist/commands/team/inspect.js.map +1 -1
- package/dist/lib/insights.d.ts +17 -0
- package/dist/lib/insights.js +54 -0
- package/dist/lib/insights.js.map +1 -0
- package/dist/lib/utils.d.ts +8 -1
- package/dist/lib/utils.js +14 -1
- package/dist/lib/utils.js.map +1 -1
- package/dist/lib/utils.test.js +28 -5
- package/dist/lib/utils.test.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { AlpicCommand } from "../../../lib/alpic-command.js";
|
|
2
|
+
export declare class InsightsCategoryCreate extends AlpicCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
color: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
"intent-id": import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
|
+
"project-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
"project-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
"environment-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
"environment-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
};
|
|
15
|
+
run(): Promise<void>;
|
|
16
|
+
private resolveName;
|
|
17
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { INTENT_CATEGORY_COLORS } from "@alpic-ai/api";
|
|
2
|
+
import * as p from "@clack/prompts";
|
|
3
|
+
import { Flags } from "@oclif/core";
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
import { api } from "../../../api.js";
|
|
6
|
+
import { isAgentMode } from "../../../lib/agent-mode.js";
|
|
7
|
+
import { AlpicCommand } from "../../../lib/alpic-command.js";
|
|
8
|
+
import { parseIntentCategoryColor } from "../../../lib/insights.js";
|
|
9
|
+
import { environmentFlags, projectFlags, resolveEnvironmentId } from "../../../lib/resolve.js";
|
|
10
|
+
export class InsightsCategoryCreate extends AlpicCommand {
|
|
11
|
+
static description = "Create an intent category";
|
|
12
|
+
static examples = [
|
|
13
|
+
"<%= config.bin %> insights category create",
|
|
14
|
+
"<%= config.bin %> insights category create --name Scheduling --color blue",
|
|
15
|
+
"<%= config.bin %> insights category create --name Scheduling --intent-id <intentId>",
|
|
16
|
+
];
|
|
17
|
+
static flags = {
|
|
18
|
+
...environmentFlags,
|
|
19
|
+
...projectFlags,
|
|
20
|
+
name: Flags.string({ description: "The category name" }),
|
|
21
|
+
color: Flags.string({
|
|
22
|
+
description: "The category color; derived from the name when omitted",
|
|
23
|
+
options: [...INTENT_CATEGORY_COLORS],
|
|
24
|
+
}),
|
|
25
|
+
"intent-id": Flags.string({ description: "Link the new category to this intent ID", multiple: true }),
|
|
26
|
+
json: Flags.boolean({ description: "Print the unmodified API response as JSON", default: false }),
|
|
27
|
+
};
|
|
28
|
+
async run() {
|
|
29
|
+
const { flags } = await this.parse(InsightsCategoryCreate);
|
|
30
|
+
await this.ensureAuthenticated(flags);
|
|
31
|
+
const environmentId = await resolveEnvironmentId(flags);
|
|
32
|
+
const name = await this.resolveName(flags);
|
|
33
|
+
const spinner = this.spinner();
|
|
34
|
+
spinner.start("Creating category...");
|
|
35
|
+
const category = await api.intentCategories.create.v1({
|
|
36
|
+
environmentId,
|
|
37
|
+
name,
|
|
38
|
+
color: parseIntentCategoryColor(flags.color),
|
|
39
|
+
intentIds: flags["intent-id"],
|
|
40
|
+
});
|
|
41
|
+
spinner.stop(`Created ${chalk.cyan(category.name)} (${category.color}). ✅`);
|
|
42
|
+
if (flags.json) {
|
|
43
|
+
this.log(JSON.stringify(category));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async resolveName(flags) {
|
|
47
|
+
if (flags.name !== undefined) {
|
|
48
|
+
return flags.name;
|
|
49
|
+
}
|
|
50
|
+
if (flags["non-interactive"] || isAgentMode()) {
|
|
51
|
+
throw new Error("--name is required in non-interactive mode.");
|
|
52
|
+
}
|
|
53
|
+
const name = await p.text({
|
|
54
|
+
message: "Category name",
|
|
55
|
+
validate: (value) => (value === undefined || value.trim().length === 0 ? "Name cannot be empty." : undefined),
|
|
56
|
+
});
|
|
57
|
+
if (p.isCancel(name)) {
|
|
58
|
+
throw new Error("Cancelled.");
|
|
59
|
+
}
|
|
60
|
+
return name;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../../src/commands/insights/category/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AlpicCommand } from "../../../lib/alpic-command.js";
|
|
2
|
+
export declare class InsightsCategoryDelete extends AlpicCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
"category-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
"project-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
"project-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
"environment-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
"environment-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
};
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import * as p from "@clack/prompts";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { api } from "../../../api.js";
|
|
4
|
+
import { AlpicCommand } from "../../../lib/alpic-command.js";
|
|
5
|
+
import { categoryFlags, resolveIntentCategory } from "../../../lib/insights.js";
|
|
6
|
+
import { environmentFlags, projectFlags, resolveEnvironmentId } from "../../../lib/resolve.js";
|
|
7
|
+
import { plural } from "../../../lib/utils.js";
|
|
8
|
+
export class InsightsCategoryDelete extends AlpicCommand {
|
|
9
|
+
static description = "Delete an intent category; its intents are unlinked but not deleted";
|
|
10
|
+
static examples = [
|
|
11
|
+
"<%= config.bin %> insights category delete",
|
|
12
|
+
"<%= config.bin %> insights category delete --category-id <categoryId>",
|
|
13
|
+
"<%= config.bin %> insights category delete --category-id <categoryId> --non-interactive",
|
|
14
|
+
];
|
|
15
|
+
static flags = {
|
|
16
|
+
...environmentFlags,
|
|
17
|
+
...projectFlags,
|
|
18
|
+
...categoryFlags,
|
|
19
|
+
};
|
|
20
|
+
async run() {
|
|
21
|
+
const { flags } = await this.parse(InsightsCategoryDelete);
|
|
22
|
+
await this.ensureAuthenticated(flags);
|
|
23
|
+
const environmentId = await resolveEnvironmentId(flags);
|
|
24
|
+
const category = await resolveIntentCategory(environmentId, flags, "delete");
|
|
25
|
+
if (!flags["non-interactive"]) {
|
|
26
|
+
const confirmed = await p.confirm({
|
|
27
|
+
message: `Delete ${chalk.cyan(category.name)}? It will be unlinked from ${plural(category.intentCount, "intent")}.`,
|
|
28
|
+
initialValue: false,
|
|
29
|
+
});
|
|
30
|
+
if (p.isCancel(confirmed) || !confirmed) {
|
|
31
|
+
throw new Error("Cancelled.");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const spinner = this.spinner();
|
|
35
|
+
spinner.start("Deleting category...");
|
|
36
|
+
await api.intentCategories.delete.v1({ environmentId, categoryId: category.id });
|
|
37
|
+
spinner.stop(`Deleted ${chalk.cyan(category.name)}. ✅`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../../src/commands/insights/category/delete.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,OAAO,sBAAuB,SAAQ,YAAY;IACtD,MAAM,CAAU,WAAW,GAAG,qEAAqE,CAAC;IAEpG,MAAM,CAAU,QAAQ,GAAG;QACzB,4CAA4C;QAC5C,uEAAuE;QACvE,yFAAyF;KAC1F,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,gBAAgB;QACnB,GAAG,YAAY;QACf,GAAG,aAAa;KACjB,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAE3D,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,aAAa,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAE7E,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC;gBAChC,OAAO,EAAE,UAAU,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,8BAA8B,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG;gBACnH,YAAY,EAAE,KAAK;aACpB,CAAC,CAAC;YACH,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAEtC,MAAM,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;QAEjF,OAAO,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AlpicCommand } from "../../../lib/alpic-command.js";
|
|
2
|
+
export declare class InsightsCategoryLink extends AlpicCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
"intent-id": import("@oclif/core/interfaces").OptionFlag<string[], import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
"category-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
"project-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
"project-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
"environment-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
"environment-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
};
|
|
13
|
+
run(): Promise<void>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Flags } from "@oclif/core";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { api } from "../../../api.js";
|
|
4
|
+
import { AlpicCommand } from "../../../lib/alpic-command.js";
|
|
5
|
+
import { categoryFlags, resolveIntentCategory } from "../../../lib/insights.js";
|
|
6
|
+
import { environmentFlags, projectFlags, resolveEnvironmentId } from "../../../lib/resolve.js";
|
|
7
|
+
import { plural } from "../../../lib/utils.js";
|
|
8
|
+
export class InsightsCategoryLink extends AlpicCommand {
|
|
9
|
+
static description = "Link an intent category to intents";
|
|
10
|
+
static examples = [
|
|
11
|
+
"<%= config.bin %> insights category link --intent-id <intentId>",
|
|
12
|
+
"<%= config.bin %> insights category link --category-id <categoryId> --intent-id <intentId> --intent-id <intentId>",
|
|
13
|
+
];
|
|
14
|
+
static flags = {
|
|
15
|
+
...environmentFlags,
|
|
16
|
+
...projectFlags,
|
|
17
|
+
...categoryFlags,
|
|
18
|
+
"intent-id": Flags.string({ description: "The ID of an intent to link", multiple: true, required: true }),
|
|
19
|
+
};
|
|
20
|
+
async run() {
|
|
21
|
+
const { flags } = await this.parse(InsightsCategoryLink);
|
|
22
|
+
await this.ensureAuthenticated(flags);
|
|
23
|
+
const environmentId = await resolveEnvironmentId(flags);
|
|
24
|
+
const category = await resolveIntentCategory(environmentId, flags, "link");
|
|
25
|
+
const intentIds = [...new Set(flags["intent-id"])];
|
|
26
|
+
const spinner = this.spinner();
|
|
27
|
+
spinner.start("Linking intents...");
|
|
28
|
+
await api.intentCategories.link.v1({
|
|
29
|
+
environmentId,
|
|
30
|
+
categoryId: category.id,
|
|
31
|
+
intentIds,
|
|
32
|
+
});
|
|
33
|
+
spinner.stop(`Linked ${plural(intentIds.length, "intent")} to ${chalk.cyan(category.name)}. ✅`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../../../src/commands/insights/category/link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,OAAO,oBAAqB,SAAQ,YAAY;IACpD,MAAM,CAAU,WAAW,GAAG,oCAAoC,CAAC;IAEnE,MAAM,CAAU,QAAQ,GAAG;QACzB,iEAAiE;QACjE,mHAAmH;KACpH,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,gBAAgB;QACnB,GAAG,YAAY;QACf,GAAG,aAAa;QAChB,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,6BAA6B,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KAC1G,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAEzD,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC3E,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAEnD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAEpC,MAAM,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,aAAa;YACb,UAAU,EAAE,QAAQ,CAAC,EAAE;YACvB,SAAS;SACV,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClG,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AlpicCommand } from "../../../lib/alpic-command.js";
|
|
2
|
+
export declare class InsightsCategoryList extends AlpicCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
7
|
+
"project-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
"project-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
"environment-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
"environment-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
};
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import * as p from "@clack/prompts";
|
|
2
|
+
import { Flags } from "@oclif/core";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import { api } from "../../../api.js";
|
|
5
|
+
import { AlpicCommand } from "../../../lib/alpic-command.js";
|
|
6
|
+
import { pluralCategories } from "../../../lib/insights.js";
|
|
7
|
+
import { environmentFlags, projectFlags, resolveEnvironmentId } from "../../../lib/resolve.js";
|
|
8
|
+
import { formatTable } from "../../../lib/table.js";
|
|
9
|
+
export class InsightsCategoryList extends AlpicCommand {
|
|
10
|
+
static description = "List intent categories for an environment";
|
|
11
|
+
static examples = [
|
|
12
|
+
"<%= config.bin %> insights category list",
|
|
13
|
+
"<%= config.bin %> insights category list --environment-id <environmentId>",
|
|
14
|
+
"<%= config.bin %> insights category list --json --non-interactive",
|
|
15
|
+
];
|
|
16
|
+
static flags = {
|
|
17
|
+
...environmentFlags,
|
|
18
|
+
...projectFlags,
|
|
19
|
+
json: Flags.boolean({ description: "Print the unmodified API response as JSON", default: false }),
|
|
20
|
+
};
|
|
21
|
+
async run() {
|
|
22
|
+
const { flags } = await this.parse(InsightsCategoryList);
|
|
23
|
+
await this.ensureAuthenticated(flags);
|
|
24
|
+
const environmentId = await resolveEnvironmentId(flags);
|
|
25
|
+
const spinner = this.spinner();
|
|
26
|
+
spinner.start("Fetching categories...");
|
|
27
|
+
const categories = await api.intentCategories.list.v1({ environmentId });
|
|
28
|
+
spinner.stop(`Found ${pluralCategories(categories.length)}`);
|
|
29
|
+
if (flags.json) {
|
|
30
|
+
this.log(JSON.stringify(categories));
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (categories.length === 0) {
|
|
34
|
+
p.log.info("No intent categories found in this environment.");
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
console.log(formatTable(categories, [
|
|
38
|
+
{ key: "name", header: "name", format: (value) => chalk.bold(value) },
|
|
39
|
+
{ key: "color", header: "color", format: (value) => chalk.gray(value) },
|
|
40
|
+
{ key: "intentCount", header: "intents", format: (value) => chalk.gray(value) },
|
|
41
|
+
{ key: "id", header: "id", format: (value) => chalk.gray(value) },
|
|
42
|
+
]));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/insights/category/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,OAAO,oBAAqB,SAAQ,YAAY;IACpD,MAAM,CAAU,WAAW,GAAG,2CAA2C,CAAC;IAE1E,MAAM,CAAU,QAAQ,GAAG;QACzB,0CAA0C;QAC1C,2EAA2E;QAC3E,mEAAmE;KACpE,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,gBAAgB;QACnB,GAAG,YAAY;QACf,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,2CAA2C,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;KAClG,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAEzD,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAExD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAExC,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC;QAEzE,OAAO,CAAC,IAAI,CAAC,SAAS,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAE7D,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;YAC9D,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CACT,WAAW,CAAC,UAAU,EAAE;YACtB,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACrE,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACvE,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAC/E,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;SAClE,CAAC,CACH,CAAC;IACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AlpicCommand } from "../../../lib/alpic-command.js";
|
|
2
|
+
export declare class InsightsCategoryUnlink extends AlpicCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
"intent-id": import("@oclif/core/interfaces").OptionFlag<string[], import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
"category-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
"project-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
"project-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
"environment-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
"environment-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
};
|
|
13
|
+
run(): Promise<void>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Flags } from "@oclif/core";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { api } from "../../../api.js";
|
|
4
|
+
import { AlpicCommand } from "../../../lib/alpic-command.js";
|
|
5
|
+
import { categoryFlags, resolveIntentCategory } from "../../../lib/insights.js";
|
|
6
|
+
import { environmentFlags, projectFlags, resolveEnvironmentId } from "../../../lib/resolve.js";
|
|
7
|
+
import { plural } from "../../../lib/utils.js";
|
|
8
|
+
export class InsightsCategoryUnlink extends AlpicCommand {
|
|
9
|
+
static description = "Unlink an intent category from intents";
|
|
10
|
+
static examples = [
|
|
11
|
+
"<%= config.bin %> insights category unlink --intent-id <intentId>",
|
|
12
|
+
"<%= config.bin %> insights category unlink --category-id <categoryId> --intent-id <intentId> --intent-id <intentId>",
|
|
13
|
+
];
|
|
14
|
+
static flags = {
|
|
15
|
+
...environmentFlags,
|
|
16
|
+
...projectFlags,
|
|
17
|
+
...categoryFlags,
|
|
18
|
+
"intent-id": Flags.string({ description: "The ID of an intent to unlink", multiple: true, required: true }),
|
|
19
|
+
};
|
|
20
|
+
async run() {
|
|
21
|
+
const { flags } = await this.parse(InsightsCategoryUnlink);
|
|
22
|
+
await this.ensureAuthenticated(flags);
|
|
23
|
+
const environmentId = await resolveEnvironmentId(flags);
|
|
24
|
+
const category = await resolveIntentCategory(environmentId, flags, "unlink");
|
|
25
|
+
const intentIds = [...new Set(flags["intent-id"])];
|
|
26
|
+
const spinner = this.spinner();
|
|
27
|
+
spinner.start("Unlinking intents...");
|
|
28
|
+
await api.intentCategories.unlink.v1({
|
|
29
|
+
environmentId,
|
|
30
|
+
categoryId: category.id,
|
|
31
|
+
intentIds,
|
|
32
|
+
});
|
|
33
|
+
spinner.stop(`Unlinked ${plural(intentIds.length, "intent")} from ${chalk.cyan(category.name)}. ✅`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=unlink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unlink.js","sourceRoot":"","sources":["../../../../src/commands/insights/category/unlink.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,OAAO,sBAAuB,SAAQ,YAAY;IACtD,MAAM,CAAU,WAAW,GAAG,wCAAwC,CAAC;IAEvE,MAAM,CAAU,QAAQ,GAAG;QACzB,mEAAmE;QACnE,qHAAqH;KACtH,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,gBAAgB;QACnB,GAAG,YAAY;QACf,GAAG,aAAa;QAChB,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KAC5G,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAE3D,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,aAAa,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC7E,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAEnD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAEtC,MAAM,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YACnC,aAAa;YACb,UAAU,EAAE,QAAQ,CAAC,EAAE;YACvB,SAAS;SACV,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtG,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { AlpicCommand } from "../../../lib/alpic-command.js";
|
|
2
|
+
export declare class InsightsCategoryUpdate extends AlpicCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
color: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
|
+
"category-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
"project-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
"project-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
"environment-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
"environment-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
};
|
|
15
|
+
run(): Promise<void>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { INTENT_CATEGORY_COLORS } from "@alpic-ai/api";
|
|
2
|
+
import { Flags } from "@oclif/core";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import { api } from "../../../api.js";
|
|
5
|
+
import { AlpicCommand } from "../../../lib/alpic-command.js";
|
|
6
|
+
import { categoryFlags, parseIntentCategoryColor, resolveIntentCategory } from "../../../lib/insights.js";
|
|
7
|
+
import { environmentFlags, projectFlags, resolveEnvironmentId } from "../../../lib/resolve.js";
|
|
8
|
+
export class InsightsCategoryUpdate extends AlpicCommand {
|
|
9
|
+
static description = "Rename or recolor an intent category";
|
|
10
|
+
static examples = [
|
|
11
|
+
"<%= config.bin %> insights category update --name Scheduling",
|
|
12
|
+
"<%= config.bin %> insights category update --category-id <categoryId> --color green",
|
|
13
|
+
];
|
|
14
|
+
static flags = {
|
|
15
|
+
...environmentFlags,
|
|
16
|
+
...projectFlags,
|
|
17
|
+
...categoryFlags,
|
|
18
|
+
name: Flags.string({ description: "The new category name" }),
|
|
19
|
+
color: Flags.string({ description: "The new category color", options: [...INTENT_CATEGORY_COLORS] }),
|
|
20
|
+
json: Flags.boolean({ description: "Print the unmodified API response as JSON", default: false }),
|
|
21
|
+
};
|
|
22
|
+
async run() {
|
|
23
|
+
const { flags } = await this.parse(InsightsCategoryUpdate);
|
|
24
|
+
if (flags.name === undefined && flags.color === undefined) {
|
|
25
|
+
throw new Error("At least one of --name or --color must be provided.");
|
|
26
|
+
}
|
|
27
|
+
await this.ensureAuthenticated(flags);
|
|
28
|
+
const environmentId = await resolveEnvironmentId(flags);
|
|
29
|
+
const category = await resolveIntentCategory(environmentId, flags, "update");
|
|
30
|
+
const spinner = this.spinner();
|
|
31
|
+
spinner.start("Updating category...");
|
|
32
|
+
const updated = await api.intentCategories.update.v1({
|
|
33
|
+
environmentId,
|
|
34
|
+
categoryId: category.id,
|
|
35
|
+
name: flags.name,
|
|
36
|
+
color: parseIntentCategoryColor(flags.color),
|
|
37
|
+
});
|
|
38
|
+
spinner.stop(`Updated ${chalk.cyan(updated.name)} (${updated.color}). ✅`);
|
|
39
|
+
if (flags.json) {
|
|
40
|
+
this.log(JSON.stringify(updated));
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/commands/insights/category/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAC1G,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/F,MAAM,OAAO,sBAAuB,SAAQ,YAAY;IACtD,MAAM,CAAU,WAAW,GAAG,sCAAsC,CAAC;IAErE,MAAM,CAAU,QAAQ,GAAG;QACzB,8DAA8D;QAC9D,qFAAqF;KACtF,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,gBAAgB;QACnB,GAAG,YAAY;QACf,GAAG,aAAa;QAChB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,uBAAuB,EAAE,CAAC;QAC5D,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,wBAAwB,EAAE,OAAO,EAAE,CAAC,GAAG,sBAAsB,CAAC,EAAE,CAAC;QACpG,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,2CAA2C,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;KAClG,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAE3D,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QAED,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,aAAa,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAE7E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAEtC,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YACnD,aAAa;YACb,UAAU,EAAE,QAAQ,CAAC,EAAE;YACvB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE,wBAAwB,CAAC,KAAK,CAAC,KAAK,CAAC;SAC7C,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,KAAK,MAAM,CAAC,CAAC;QAE1E,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QACpC,CAAC;IACH,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { AlpicCommand } from "../../../lib/alpic-command.js";
|
|
2
|
+
export declare class InsightsFeedbackList extends AlpicCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
since: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
until: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
search: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
"client-id": import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
limit: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
offset: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
|
+
"project-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
"project-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
"environment-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
|
+
"environment-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
|
+
};
|
|
18
|
+
run(): Promise<void>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import * as p from "@clack/prompts";
|
|
2
|
+
import { Flags } from "@oclif/core";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import { api } from "../../../api.js";
|
|
5
|
+
import { AlpicCommand } from "../../../lib/alpic-command.js";
|
|
6
|
+
import { truncateInsightContent } from "../../../lib/insights.js";
|
|
7
|
+
import { environmentFlags, projectFlags, resolveEnvironmentId } from "../../../lib/resolve.js";
|
|
8
|
+
import { formatTable } from "../../../lib/table.js";
|
|
9
|
+
import { plural, validateTimeFlag } from "../../../lib/utils.js";
|
|
10
|
+
export class InsightsFeedbackList extends AlpicCommand {
|
|
11
|
+
static description = "List user feedback for an environment";
|
|
12
|
+
static examples = [
|
|
13
|
+
"<%= config.bin %> insights feedback list",
|
|
14
|
+
"<%= config.bin %> insights feedback list --environment-name production --project-name my-project",
|
|
15
|
+
"<%= config.bin %> insights feedback list --search timeout --client-id claude-desktop",
|
|
16
|
+
"<%= config.bin %> insights feedback list --json --non-interactive",
|
|
17
|
+
];
|
|
18
|
+
static flags = {
|
|
19
|
+
...environmentFlags,
|
|
20
|
+
...projectFlags,
|
|
21
|
+
since: Flags.string({
|
|
22
|
+
description: "Show feedback after this time (relative duration or ISO 8601 date)",
|
|
23
|
+
default: "7d",
|
|
24
|
+
}),
|
|
25
|
+
until: Flags.string({ description: "Show feedback before this time (relative duration or ISO 8601 date)" }),
|
|
26
|
+
search: Flags.string({ description: "Search feedback content and source" }),
|
|
27
|
+
"client-id": Flags.string({ description: "Filter by stable MCP client ID", multiple: true }),
|
|
28
|
+
limit: Flags.integer({ description: "Maximum number of feedbacks to return", min: 1, max: 200, default: 50 }),
|
|
29
|
+
offset: Flags.integer({ description: "Number of feedbacks to skip", min: 0, default: 0 }),
|
|
30
|
+
json: Flags.boolean({ description: "Print the unmodified API response as JSON", default: false }),
|
|
31
|
+
};
|
|
32
|
+
async run() {
|
|
33
|
+
const { flags } = await this.parse(InsightsFeedbackList);
|
|
34
|
+
await this.ensureAuthenticated(flags);
|
|
35
|
+
const environmentId = await resolveEnvironmentId(flags);
|
|
36
|
+
validateTimeFlag(flags.since, "since");
|
|
37
|
+
validateTimeFlag(flags.until, "until");
|
|
38
|
+
const spinner = this.spinner();
|
|
39
|
+
spinner.start("Fetching feedback...");
|
|
40
|
+
const response = await api.feedbacks.list.v1({
|
|
41
|
+
environmentId,
|
|
42
|
+
since: flags.since,
|
|
43
|
+
until: flags.until,
|
|
44
|
+
search: flags.search,
|
|
45
|
+
clientIds: flags["client-id"],
|
|
46
|
+
limit: flags.limit,
|
|
47
|
+
offset: flags.offset,
|
|
48
|
+
});
|
|
49
|
+
spinner.stop(`Found ${plural(response.totalCount, "feedback")}`);
|
|
50
|
+
if (flags.json) {
|
|
51
|
+
this.log(JSON.stringify(response));
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (response.feedbacks.length === 0) {
|
|
55
|
+
p.log.info("No feedback found for this period.");
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const rows = response.feedbacks.map((feedback) => ({
|
|
59
|
+
date: feedback.createdAt.toISOString(),
|
|
60
|
+
source: feedback.source,
|
|
61
|
+
feedback: truncateInsightContent(feedback.content),
|
|
62
|
+
client: feedback.clientName ?? feedback.clientId ?? "-",
|
|
63
|
+
}));
|
|
64
|
+
console.log(formatTable(rows, [
|
|
65
|
+
{ key: "date", header: "date", format: (value) => chalk.gray(value) },
|
|
66
|
+
{ key: "source", header: "source", format: (value) => chalk.cyan(value) },
|
|
67
|
+
{ key: "feedback", header: "feedback", format: (value) => chalk.bold(value) },
|
|
68
|
+
{ key: "client", header: "client", format: (value) => chalk.gray(value) },
|
|
69
|
+
]));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/insights/feedback/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { AlpicCommand } from "../../../lib/alpic-command.js";
|
|
2
|
+
export declare class InsightsIntentList extends AlpicCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
since: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
until: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
search: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
tool: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
"client-id": import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
"category-id": import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
sort: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
limit: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
offset: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
16
|
+
"project-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
|
+
"project-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
18
|
+
"environment-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
19
|
+
"environment-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
20
|
+
};
|
|
21
|
+
run(): Promise<void>;
|
|
22
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import * as p from "@clack/prompts";
|
|
2
|
+
import { Flags } from "@oclif/core";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import { api } from "../../../api.js";
|
|
5
|
+
import { AlpicCommand } from "../../../lib/alpic-command.js";
|
|
6
|
+
import { truncateInsightContent } from "../../../lib/insights.js";
|
|
7
|
+
import { environmentFlags, projectFlags, resolveEnvironmentId } from "../../../lib/resolve.js";
|
|
8
|
+
import { formatTable } from "../../../lib/table.js";
|
|
9
|
+
import { plural, validateTimeFlag } from "../../../lib/utils.js";
|
|
10
|
+
const parseSortDir = (sort) => {
|
|
11
|
+
if (sort === "asc" || sort === "desc") {
|
|
12
|
+
return sort;
|
|
13
|
+
}
|
|
14
|
+
throw new Error(`Invalid sort direction: ${sort}`);
|
|
15
|
+
};
|
|
16
|
+
export class InsightsIntentList extends AlpicCommand {
|
|
17
|
+
static description = "List grouped user intents for an environment";
|
|
18
|
+
static examples = [
|
|
19
|
+
"<%= config.bin %> insights intent list",
|
|
20
|
+
"<%= config.bin %> insights intent list --environment-id <environmentId> --since 24h",
|
|
21
|
+
"<%= config.bin %> insights intent list --tool search --client-id claude-desktop",
|
|
22
|
+
"<%= config.bin %> insights intent list --json --non-interactive",
|
|
23
|
+
];
|
|
24
|
+
static flags = {
|
|
25
|
+
...environmentFlags,
|
|
26
|
+
...projectFlags,
|
|
27
|
+
since: Flags.string({
|
|
28
|
+
description: "Show intents after this time (relative duration or ISO 8601 date)",
|
|
29
|
+
default: "7d",
|
|
30
|
+
}),
|
|
31
|
+
until: Flags.string({ description: "Show intents before this time (relative duration or ISO 8601 date)" }),
|
|
32
|
+
search: Flags.string({ description: "Search intent messages, tools, and categories" }),
|
|
33
|
+
tool: Flags.string({ description: "Filter by tool name", multiple: true }),
|
|
34
|
+
"client-id": Flags.string({ description: "Filter by stable MCP client ID", multiple: true }),
|
|
35
|
+
"category-id": Flags.string({ description: "Filter by category ID", multiple: true }),
|
|
36
|
+
sort: Flags.string({ description: "Sort by date", options: ["asc", "desc"], default: "desc" }),
|
|
37
|
+
limit: Flags.integer({ description: "Maximum number of grouped intents to return", min: 1, max: 200, default: 50 }),
|
|
38
|
+
offset: Flags.integer({ description: "Number of grouped intents to skip", min: 0, default: 0 }),
|
|
39
|
+
json: Flags.boolean({ description: "Print the unmodified API response as JSON", default: false }),
|
|
40
|
+
};
|
|
41
|
+
async run() {
|
|
42
|
+
const { flags } = await this.parse(InsightsIntentList);
|
|
43
|
+
await this.ensureAuthenticated(flags);
|
|
44
|
+
const environmentId = await resolveEnvironmentId(flags);
|
|
45
|
+
validateTimeFlag(flags.since, "since");
|
|
46
|
+
validateTimeFlag(flags.until, "until");
|
|
47
|
+
const spinner = this.spinner();
|
|
48
|
+
spinner.start("Fetching intents...");
|
|
49
|
+
const response = await api.intents.list.v1({
|
|
50
|
+
environmentId,
|
|
51
|
+
since: flags.since,
|
|
52
|
+
until: flags.until,
|
|
53
|
+
search: flags.search,
|
|
54
|
+
tools: flags.tool,
|
|
55
|
+
clientIds: flags["client-id"],
|
|
56
|
+
categoryIds: flags["category-id"],
|
|
57
|
+
sortDir: parseSortDir(flags.sort),
|
|
58
|
+
limit: flags.limit,
|
|
59
|
+
offset: flags.offset,
|
|
60
|
+
});
|
|
61
|
+
spinner.stop(`Found ${plural(response.totalCount, "intent")}`);
|
|
62
|
+
if (flags.json) {
|
|
63
|
+
this.log(JSON.stringify(response));
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (response.intents.length === 0) {
|
|
67
|
+
p.log.info("No intents found for this period.");
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const rows = response.intents.map((intent) => ({
|
|
71
|
+
date: intent.createdAt.toISOString(),
|
|
72
|
+
intent: truncateInsightContent(intent.message),
|
|
73
|
+
occurrences: intent.occurrenceCount,
|
|
74
|
+
tool: intent.toolName,
|
|
75
|
+
client: intent.clientName ?? intent.clientId ?? "-",
|
|
76
|
+
categories: intent.categories.map(({ name }) => name).join(", ") || "-",
|
|
77
|
+
}));
|
|
78
|
+
console.log(formatTable(rows, [
|
|
79
|
+
{ key: "date", header: "date", format: (value) => chalk.gray(value) },
|
|
80
|
+
{ key: "intent", header: "intent", format: (value) => chalk.bold(value) },
|
|
81
|
+
{ key: "occurrences", header: "occurrences", format: (value) => chalk.gray(value) },
|
|
82
|
+
{ key: "tool", header: "tool", format: (value) => chalk.cyan(value) },
|
|
83
|
+
{ key: "client", header: "client", format: (value) => chalk.gray(value) },
|
|
84
|
+
{ key: "categories", header: "categories", format: (value) => chalk.gray(value) },
|
|
85
|
+
]));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=list.js.map
|