checkly 7.6.1 → 7.7.0-prerelease-a0c39b4

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.
@@ -26,6 +26,10 @@ Agent Skills are a standardized format for giving AI agents specialized knowledg
26
26
  - Build dashboards and status pages
27
27
  - Follow monitoring-as-code best practices with the Checkly CLI
28
28
 
29
+ ## Installing This Skill
30
+
31
+ Run `npx checkly skills install` to install the skill into your project. The command supports Claude Code, Cursor, Codex and more out of the box, or you can specify a custom path.
32
+
29
33
  ## Using This Skill
30
34
 
31
35
  AI agents can load this skill to gain expertise in Checkly monitoring. The skill follows the [Agent Skills specification](https://agentskills.io) with:
@@ -10,6 +10,8 @@ metadata:
10
10
 
11
11
  The Checkly CLI provides all the required information via the `npx checkly skills` command.
12
12
 
13
+ Use `npx checkly skills install` to install this skill into your project (supports Claude Code, Cursor, Codex and more).
14
+
13
15
  Use `npx checkly skills` to list all available actions, and `npx checkly skills <action>` to access up-to-date information on how to use the Checkly CLI for each action.
14
16
 
15
17
  ## Progressive Disclosure via `npx checkly skills`
@@ -0,0 +1,18 @@
1
+ import { AuthCommand } from '../authCommand';
2
+ export default class AccountPlan extends AuthCommand {
3
+ static coreCommand: boolean;
4
+ static hidden: boolean;
5
+ static readOnly: boolean;
6
+ static idempotent: boolean;
7
+ static description: string;
8
+ static args: {
9
+ key: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
10
+ };
11
+ static flags: {
12
+ type: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ search: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ disabled: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
+ output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
16
+ };
17
+ run(): Promise<void>;
18
+ }
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const core_1 = require("@oclif/core");
27
+ const authCommand_1 = require("../authCommand");
28
+ const flags_1 = require("../../helpers/flags");
29
+ const api = __importStar(require("../../rest/api"));
30
+ const account_plan_1 = require("../../formatters/account-plan");
31
+ function withUpgradeUrl(e, checkoutUrl) {
32
+ if (e.enabled)
33
+ return e;
34
+ return { ...e, upgradeUrl: (0, account_plan_1.getEntitlementUpgradeUrl)(e, checkoutUrl) };
35
+ }
36
+ class AccountPlan extends authCommand_1.AuthCommand {
37
+ static coreCommand = false;
38
+ static hidden = false;
39
+ static readOnly = true;
40
+ static idempotent = true;
41
+ static description = 'Show your account plan, entitlements, and feature limits.';
42
+ static args = {
43
+ key: core_1.Args.string({
44
+ required: false,
45
+ description: 'Entitlement key to look up (e.g. BROWSER_CHECKS). Shows detail view.',
46
+ }),
47
+ };
48
+ static flags = {
49
+ type: core_1.Flags.string({
50
+ char: 't',
51
+ description: 'Filter entitlements by type.',
52
+ options: ['metered', 'flag'],
53
+ }),
54
+ search: core_1.Flags.string({
55
+ char: 's',
56
+ description: 'Search entitlements by name or description.',
57
+ }),
58
+ disabled: core_1.Flags.boolean({
59
+ description: 'Show only entitlements not included in your plan.',
60
+ default: false,
61
+ }),
62
+ output: (0, flags_1.outputFlag)({ default: 'table' }),
63
+ };
64
+ async run() {
65
+ const { args, flags } = await this.parse(AccountPlan);
66
+ this.style.outputFormat = flags.output;
67
+ // Validate: key arg is mutually exclusive with --type, --search, and --disabled
68
+ if (args.key && (flags.type || flags.search || flags.disabled)) {
69
+ this.error('Cannot use --type, --search, or --disabled when looking up a specific entitlement key.');
70
+ }
71
+ let plan;
72
+ try {
73
+ const resp = await api.entitlements.getAll();
74
+ plan = resp.data;
75
+ }
76
+ catch (err) {
77
+ this.style.longError('Failed to fetch account plan.', err);
78
+ process.exitCode = 1;
79
+ return;
80
+ }
81
+ const { accountId } = api.getDefaults();
82
+ const checkoutUrl = `https://app.checklyhq.com/accounts/${accountId}/billing/checkout`;
83
+ // Single key lookup
84
+ if (args.key) {
85
+ const entitlement = plan.entitlements.find(e => e.key === args.key);
86
+ if (!entitlement) {
87
+ this.error(`Entitlement "${args.key}" not found. Use "checkly account plan" to see available keys.`);
88
+ }
89
+ if (flags.output === 'json') {
90
+ this.log(JSON.stringify(withUpgradeUrl(entitlement, checkoutUrl), null, 2));
91
+ return;
92
+ }
93
+ const fmt = flags.output === 'md' ? 'md' : 'terminal';
94
+ this.log((0, account_plan_1.formatEntitlementDetail)(plan, entitlement, fmt, checkoutUrl));
95
+ return;
96
+ }
97
+ // Apply filters (--type, --search, --disabled)
98
+ const hasFilters = flags.type || flags.search || flags.disabled;
99
+ let filtered = plan.entitlements;
100
+ if (flags.disabled) {
101
+ filtered = filtered.filter(e => !e.enabled);
102
+ }
103
+ if (flags.type) {
104
+ filtered = filtered.filter(e => e.type === flags.type);
105
+ }
106
+ if (flags.search) {
107
+ const term = flags.search.toLowerCase();
108
+ filtered = filtered.filter(e => e.key.toLowerCase().includes(term)
109
+ || e.name.toLowerCase().includes(term)
110
+ || e.description.toLowerCase().includes(term));
111
+ }
112
+ // JSON output (respects filters)
113
+ if (flags.output === 'json') {
114
+ const enriched = filtered.map(e => withUpgradeUrl(e, checkoutUrl));
115
+ if (hasFilters) {
116
+ this.log(JSON.stringify(enriched, null, 2));
117
+ }
118
+ else {
119
+ this.log(JSON.stringify({
120
+ ...plan,
121
+ checkoutUrl,
122
+ contactSalesUrl: account_plan_1.CONTACT_SALES_URL,
123
+ entitlements: enriched,
124
+ }, null, 2));
125
+ }
126
+ return;
127
+ }
128
+ const fmt = flags.output === 'md' ? 'md' : 'terminal';
129
+ // Filtered view
130
+ if (hasFilters) {
131
+ this.log((0, account_plan_1.formatFilteredEntitlements)(plan, filtered, fmt, checkoutUrl));
132
+ return;
133
+ }
134
+ // Default summary view
135
+ this.log((0, account_plan_1.formatPlanSummary)(plan, fmt, checkoutUrl));
136
+ }
137
+ }
138
+ exports.default = AccountPlan;
139
+ //# sourceMappingURL=plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/commands/account/plan.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { BaseCommand } from './baseCommand';
1
+ import { BaseCommand } from '../baseCommand';
2
2
  export default class Skills extends BaseCommand {
3
3
  static hidden: boolean;
4
4
  static description: string;
@@ -3,9 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const core_1 = require("@oclif/core");
4
4
  const promises_1 = require("fs/promises");
5
5
  const path_1 = require("path");
6
- const context_1 = require("../ai-context/context");
7
- const baseCommand_1 = require("./baseCommand");
8
- const REFERENCES_DIR = (0, path_1.join)(__dirname, '../ai-context/skills-command/references');
6
+ const context_1 = require("../../ai-context/context");
7
+ const baseCommand_1 = require("../baseCommand");
8
+ const REFERENCES_DIR = (0, path_1.join)(__dirname, '../../ai-context/skills-command/references');
9
9
  class Skills extends baseCommand_1.BaseCommand {
10
10
  static hidden = false;
11
11
  static description = 'Show Checkly AI skills, actions and their references.';
@@ -106,4 +106,4 @@ class Skills extends baseCommand_1.BaseCommand {
106
106
  }
107
107
  }
108
108
  exports.default = Skills;
109
- //# sourceMappingURL=skills.js.map
109
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/skills/index.ts"],"names":[],"mappings":";;AAAA,sCAAkC;AAClC,0CAA+C;AAC/C,+BAA2B;AAE3B,sDAAyD;AACzD,gDAA4C;AAE5C,MAAM,cAAc,GAAG,IAAA,WAAI,EAAC,SAAS,EAAE,4CAA4C,CAAC,CAAA;AAEpF,MAAqB,MAAO,SAAQ,yBAAW;IAC7C,MAAM,CAAC,MAAM,GAAG,KAAK,CAAA;IACrB,MAAM,CAAC,WAAW,GAAG,uDAAuD,CAAA;IAE5E,MAAM,CAAC,IAAI,GAAG;QACZ,MAAM,EAAE,WAAI,CAAC,MAAM,CAAC;YAClB,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,mDAAmD;SACjE,CAAC;QACF,SAAS,EAAE,WAAI,CAAC,MAAM,CAAC;YACrB,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,6DAA6D;SAC3E,CAAC;KACH,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAEzC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,aAAa,EAAE,CAAA;YACpB,OAAM;QACR,CAAC;QAED,MAAM,SAAS,GAAa,iBAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QAClD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK,CACR,WAAW,IAAI,CAAC,MAAM,cAAc;kBAClC,0BAA0B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACnD,CAAA;QACH,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,KAAK,CAAA;YACtD,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,cAAc,EAAE,QAAQ,CAAC,CAAA;YAC9C,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,OAAO,EAAE,MAAM,CAAC,CAAA;gBAC/C,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACnB,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBACjE,IAAI,CAAC,KAAK,CACR,cAAc,IAAI,CAAC,SAAS,2BAA2B,IAAI,CAAC,MAAM,IAAI;sBACpE,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;wBACrB,CAAC,CAAC,6BAA6B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBACrD,CAAC,CAAC,EAAE,CAAC,CACR,CAAA;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,cAAc,EAAE,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,CAAA;YAC5D,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,UAAU,EAAE,MAAM,CAAC,CAAA;gBAClD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACnB,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,KAAK,CAAC,mCAAmC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAA;YAChE,CAAC;QACH,CAAC;IACH,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,GAAG,CAAC,GAAG,eAAK,CAAC,WAAW,IAAI,CAAC,CAAA;QAElC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;QACvB,KAAK,MAAM,MAAM,IAAI,iBAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,EAAE,EAAE,CAAC,CAAA;YAC3C,IAAI,YAAY,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;gBACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAA;gBACtD,IAAI,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,EAAE,IAAI,KAAK,EAAE,CAAC,CAAA;YACtD,CAAC;QACH,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAEZ,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QAEtB,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,iBAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;QAE/D,KAAK,MAAM,MAAM,IAAI,iBAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;YAC9D,IAAI,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAA;QAC5D,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAEZ,KAAK,MAAM,MAAM,IAAI,iBAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,CAAC,YAAY,IAAI,MAAM,CAAC;gBAAE,SAAQ;YAEvC,IAAI,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,EAAE,MAAM,CAAC,CAAA;YAE5C,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACvC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;gBAC1C,WAAW,EAAE,CAAC,CAAC,WAAW;aAC3B,CAAC,CAAC,CAAA;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;YAE9D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAA;gBACnD,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAA;YAC3D,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,uBAAuB,CAAE,MAAc;QACnD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAA,kBAAO,EAAC,cAAc,CAAC,CAAA;YAC3C,MAAM,MAAM,GAAG,GAAG,MAAM,GAAG,CAAA;YAC3B,OAAO,KAAK;iBACT,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;iBACtD,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;iBACrD,IAAI,EAAE,CAAA;QACX,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAA;QACX,CAAC;IACH,CAAC;;AAjHH,yBAkHC"}
@@ -0,0 +1,17 @@
1
+ import { BaseCommand } from '../baseCommand';
2
+ export default class SkillsInstall extends BaseCommand {
3
+ static hidden: boolean;
4
+ static idempotent: boolean;
5
+ static description: string;
6
+ static flags: {
7
+ target: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ path: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ };
11
+ run(): Promise<void>;
12
+ private readSkillFile;
13
+ private resolveTarget;
14
+ private promptForTarget;
15
+ private installSkill;
16
+ private confirmOverwrite;
17
+ }
@@ -0,0 +1,178 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const core_1 = require("@oclif/core");
7
+ const fs_1 = require("fs");
8
+ const promises_1 = require("fs/promises");
9
+ const path_1 = require("path");
10
+ const prompts_1 = __importDefault(require("prompts"));
11
+ const cli_mode_1 = require("../../helpers/cli-mode");
12
+ const baseCommand_1 = require("../baseCommand");
13
+ const SKILL_FILE_PATH = (0, path_1.join)(__dirname, '../../ai-context/public-skills/checkly/SKILL.md');
14
+ const SKILL_FILENAME = 'SKILL.md';
15
+ const PLATFORM_TARGETS = {
16
+ 'amp': '.agents/skills/checkly',
17
+ 'claude': '.claude/skills/checkly',
18
+ 'cline': '.agents/skills/checkly',
19
+ 'codex': '.agents/skills/checkly',
20
+ 'continue': '.continue/skills/checkly',
21
+ 'cursor': '.cursor/skills/checkly',
22
+ 'gemini-cli': '.agents/skills/checkly',
23
+ 'github-copilot': '.agents/skills/checkly',
24
+ 'goose': '.goose/skills/checkly',
25
+ 'opencode': '.agents/skills/checkly',
26
+ 'roo': '.roo/skills/checkly',
27
+ 'windsurf': '.windsurf/skills/checkly',
28
+ };
29
+ const VALID_TARGETS = Object.keys(PLATFORM_TARGETS);
30
+ class SkillsInstall extends baseCommand_1.BaseCommand {
31
+ static hidden = false;
32
+ static idempotent = true;
33
+ static description = 'Install the Checkly agent skill (SKILL.md) into your project.';
34
+ static flags = {
35
+ target: core_1.Flags.string({
36
+ char: 't',
37
+ description: `Platform to install the skill for (${VALID_TARGETS.join(', ')}).`,
38
+ exclusive: ['path'],
39
+ }),
40
+ path: core_1.Flags.string({
41
+ char: 'p',
42
+ description: 'Custom target directory to install the skill into.',
43
+ exclusive: ['target'],
44
+ }),
45
+ force: core_1.Flags.boolean({
46
+ char: 'f',
47
+ description: 'Overwrite existing SKILL.md without confirmation.',
48
+ default: false,
49
+ }),
50
+ };
51
+ async run() {
52
+ const { flags } = await this.parse(SkillsInstall);
53
+ const skillContent = await this.readSkillFile();
54
+ const targetDir = this.resolveTarget(flags);
55
+ if (targetDir) {
56
+ await this.installSkill(skillContent, targetDir, flags.force);
57
+ return;
58
+ }
59
+ if ((0, cli_mode_1.detectCliMode)() !== 'interactive') {
60
+ const flagCol = '--target '.length;
61
+ const maxLen = Math.max(...VALID_TARGETS.map(t => t.length));
62
+ const descCol = flagCol + maxLen + 2;
63
+ const padTo = (flag, arg) => ` ${(flag + ' ' + arg).padEnd(descCol)}`;
64
+ this.log('Non-interactive mode detected. Use one of the following flags:\n');
65
+ for (const [name, dir] of Object.entries(PLATFORM_TARGETS)) {
66
+ this.log(`${padTo('--target', name)}Install to ${dir}/`);
67
+ }
68
+ this.log(`${padTo('--path', '<dir>')}Install to a custom directory`);
69
+ this.log(`${padTo('--force', '')}Overwrite existing SKILL.md without confirmation`);
70
+ this.log('\nExample: npx checkly skills install --target claude --force');
71
+ return;
72
+ }
73
+ const selectedDir = await this.promptForTarget();
74
+ if (!selectedDir) {
75
+ this.log('Cancelled. No skill file written.');
76
+ return;
77
+ }
78
+ await this.installSkill(skillContent, selectedDir, flags.force);
79
+ }
80
+ async readSkillFile() {
81
+ try {
82
+ return await (0, promises_1.readFile)(SKILL_FILE_PATH, 'utf8');
83
+ }
84
+ catch {
85
+ this.error(`Failed to read skill file at ${SKILL_FILE_PATH}`);
86
+ }
87
+ }
88
+ resolveTarget(flags) {
89
+ if (flags.path) {
90
+ return flags.path;
91
+ }
92
+ if (flags.target) {
93
+ const dir = PLATFORM_TARGETS[flags.target];
94
+ if (!dir) {
95
+ this.error(`Unknown target "${flags.target}".`
96
+ + `\n\nAvailable targets: ${VALID_TARGETS.join(', ')}`);
97
+ }
98
+ return dir;
99
+ }
100
+ return undefined;
101
+ }
102
+ async promptForTarget() {
103
+ const choices = [
104
+ ...Object.entries(PLATFORM_TARGETS).map(([platform, dir]) => ({
105
+ title: `${platform.charAt(0).toUpperCase() + platform.slice(1)} (${dir}/)`,
106
+ value: dir,
107
+ })),
108
+ {
109
+ title: 'Custom path',
110
+ value: '__custom__',
111
+ },
112
+ ];
113
+ const { target } = await (0, prompts_1.default)({
114
+ type: 'select',
115
+ name: 'target',
116
+ message: 'Where do you want to install the Checkly agent skill?',
117
+ choices,
118
+ initial: 0,
119
+ });
120
+ if (target === undefined) {
121
+ return undefined;
122
+ }
123
+ if (target === '__custom__') {
124
+ const { customPath } = await (0, prompts_1.default)({
125
+ type: 'text',
126
+ name: 'customPath',
127
+ message: 'Enter the target directory:',
128
+ });
129
+ return customPath || undefined;
130
+ }
131
+ return target;
132
+ }
133
+ async installSkill(content, targetDir, force) {
134
+ const absoluteDir = (0, path_1.join)(process.cwd(), targetDir);
135
+ const targetPath = (0, path_1.join)(absoluteDir, SKILL_FILENAME);
136
+ try {
137
+ await (0, promises_1.mkdir)(absoluteDir, { recursive: true });
138
+ }
139
+ catch {
140
+ this.error(`Failed to create directory ${absoluteDir}`);
141
+ }
142
+ if (!force) {
143
+ const shouldOverwrite = await this.confirmOverwrite(targetPath);
144
+ if (!shouldOverwrite) {
145
+ this.log(`Skipped ${targetPath}`);
146
+ return;
147
+ }
148
+ }
149
+ try {
150
+ await (0, promises_1.writeFile)(targetPath, content, 'utf8');
151
+ }
152
+ catch {
153
+ this.error(`Failed to write skill file to ${targetPath}`);
154
+ }
155
+ this.style.shortSuccess(`Installed Checkly agent skill to: ${targetPath}`);
156
+ }
157
+ async confirmOverwrite(targetPath) {
158
+ try {
159
+ await (0, promises_1.access)(targetPath, fs_1.constants.F_OK);
160
+ }
161
+ catch {
162
+ return true;
163
+ }
164
+ if ((0, cli_mode_1.detectCliMode)() !== 'interactive') {
165
+ this.log(`Skill file already exists at ${targetPath}. Use --force to overwrite.`);
166
+ return false;
167
+ }
168
+ const { overwrite } = await (0, prompts_1.default)({
169
+ type: 'confirm',
170
+ name: 'overwrite',
171
+ message: `Skill file already exists at ${targetPath}. Overwrite?`,
172
+ initial: false,
173
+ });
174
+ return overwrite ?? false;
175
+ }
176
+ }
177
+ exports.default = SkillsInstall;
178
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/commands/skills/install.ts"],"names":[],"mappings":"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"}
@@ -34,6 +34,14 @@ class Whoami extends authCommand_1.AuthCommand {
34
34
  const account = this.account;
35
35
  const { data: user } = await api.user.get();
36
36
  this.log(`You are currently on account "${account.name}" (${account.id}) as ${user.name}.`);
37
+ if (account.planDisplayName) {
38
+ this.log(`Plan: ${account.planDisplayName}`);
39
+ }
40
+ const addons = account.addons ?? {};
41
+ const addonNames = Object.values(addons).map(a => a.tierDisplayName);
42
+ if (addonNames.length > 0) {
43
+ this.log(`Add-ons: ${addonNames.join(', ')}`);
44
+ }
37
45
  }
38
46
  }
39
47
  exports.default = Whoami;
@@ -1 +1 @@
1
- {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAkC;AAClC,+CAA2C;AAE3C,MAAqB,MAAO,SAAQ,yBAAW;IAC7C,MAAM,CAAC,MAAM,GAAG,KAAK,CAAA;IACrB,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAA;IACtB,MAAM,CAAC,UAAU,GAAG,IAAI,CAAA;IACxB,MAAM,CAAC,WAAW,GAAG,gDAAgD,CAAA;IACrE,KAAK,CAAC,GAAG;QACP,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAC5B,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;QAC3C,IAAI,CAAC,GAAG,CAAC,iCAAiC,OAAO,CAAC,IAAI,MAAM,OAAO,CAAC,EAAE,QAAQ,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;IAC7F,CAAC;;AATH,yBAUC"}
1
+ {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAkC;AAClC,+CAA2C;AAE3C,MAAqB,MAAO,SAAQ,yBAAW;IAC7C,MAAM,CAAC,MAAM,GAAG,KAAK,CAAA;IACrB,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAA;IACtB,MAAM,CAAC,UAAU,GAAG,IAAI,CAAA;IACxB,MAAM,CAAC,WAAW,GAAG,gDAAgD,CAAA;IACrE,KAAK,CAAC,GAAG;QACP,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAC5B,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;QAC3C,IAAI,CAAC,GAAG,CAAC,iCAAiC,OAAO,CAAC,IAAI,MAAM,OAAO,CAAC,EAAE,QAAQ,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;QAC3F,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,SAAS,OAAO,CAAC,eAAe,EAAE,CAAC,CAAA;QAC9C,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAA;QACnC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAA;QACpE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,YAAY,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC;;AAjBH,yBAkBC"}
@@ -0,0 +1,16 @@
1
+ import type { Entitlement, AccountPlan, AccountLocations } from '../rest/entitlements';
2
+ import { type OutputFormat } from './render';
3
+ export declare function formatUpgradePath(e: Entitlement): string | null;
4
+ export declare function formatLocations(locations: AccountLocations, format: OutputFormat): string;
5
+ export declare const CONTACT_SALES_URL = "https://www.checklyhq.com/contact-sales/";
6
+ /**
7
+ * Returns the appropriate upgrade URL for a disabled entitlement:
8
+ * - CONTRACT plan → contact sales
9
+ * - Self-serve plan/addon → billing checkout
10
+ * - No upgrade data → contact sales (fallback)
11
+ */
12
+ export declare function getEntitlementUpgradeUrl(e: Entitlement, checkoutUrl: string): string;
13
+ export declare function formatPlanHeader(plan: AccountPlan, format: OutputFormat, upgradeUrl?: string): string;
14
+ export declare function formatPlanSummary(plan: AccountPlan, format: OutputFormat, upgradeUrl?: string): string;
15
+ export declare function formatEntitlementDetail(plan: AccountPlan, entitlement: Entitlement, format: OutputFormat, upgradeUrl?: string): string;
16
+ export declare function formatFilteredEntitlements(plan: AccountPlan, filtered: Entitlement[], format: OutputFormat, upgradeUrl?: string): string;