@metyatech/ai-quota 1.2.2 → 1.2.5
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 +38 -1
- package/dist/cli-core.d.ts +14 -0
- package/dist/cli-core.d.ts.map +1 -0
- package/dist/cli-core.js +39 -0
- package/dist/cli-core.js.map +1 -0
- package/dist/cli.js +11 -8
- package/dist/cli.js.map +1 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -25,6 +25,7 @@ ai-quota [agent] Show quota for all agents, or a single named agent
|
|
|
25
25
|
ai-quota --json Machine-readable JSON output
|
|
26
26
|
ai-quota --mcp Start as an MCP server
|
|
27
27
|
ai-quota --quiet Suppress non-error output (useful in scripts)
|
|
28
|
+
ai-quota --strict Exit non-zero if any provider fetch returns error
|
|
28
29
|
ai-quota --verbose Print debug info to stderr
|
|
29
30
|
ai-quota --help Show usage information
|
|
30
31
|
ai-quota --version Show version
|
|
@@ -116,7 +117,9 @@ ai-quota --json
|
|
|
116
117
|
Claude token behavior: `ai-quota` automatically refreshes Claude OAuth tokens using `refreshToken` when needed (including stale-token `401/403/429` retries).
|
|
117
118
|
Copilot token behavior: if you already authenticated with `copilot login`, `ai-quota` will reuse that stored OAuth token automatically, including Windows Credential Manager entries created by Copilot CLI.
|
|
118
119
|
|
|
119
|
-
Exit code is `0`
|
|
120
|
+
Exit code is `0` when the command successfully reports status output (table or JSON), even if some providers are unavailable/login-required/waiting for reset.
|
|
121
|
+
Use `--strict` to make provider fetch errors fail with exit code `1`.
|
|
122
|
+
Invalid usage (unknown option/agent) and fatal command failures also exit with `1`.
|
|
120
123
|
|
|
121
124
|
### Advanced usage (SDK)
|
|
122
125
|
|
|
@@ -246,6 +249,40 @@ npm run format # Prettier format
|
|
|
246
249
|
npm run verify # lint + test + build (full CI suite)
|
|
247
250
|
```
|
|
248
251
|
|
|
252
|
+
## Release and publish
|
|
253
|
+
|
|
254
|
+
`ai-quota` publishes to npm from GitHub Actions via npm trusted publishing (OIDC). The
|
|
255
|
+
release workflow lives in `.github/workflows/publish.yml`, runs when a GitHub release is
|
|
256
|
+
published, and uses Node.js 24 because npm trusted publishing requires a modern npm/Node
|
|
257
|
+
runtime in CI.
|
|
258
|
+
|
|
259
|
+
Canonical publish path: create/publish a GitHub Release for a `vX.Y.Z` tag and let
|
|
260
|
+
GitHub Actions publish to npm. Do not use long-lived `NPM_TOKEN` secrets for this package.
|
|
261
|
+
|
|
262
|
+
One-time npm setup (outside this repo):
|
|
263
|
+
|
|
264
|
+
1. In npm package settings for `@metyatech/ai-quota`, add a trusted publisher for
|
|
265
|
+
`metyatech/ai-quota` with workflow `.github/workflows/publish.yml` and trigger
|
|
266
|
+
environment matching published releases.
|
|
267
|
+
2. Keep that npm trusted publisher binding active; no npm automation token is required.
|
|
268
|
+
|
|
269
|
+
Release flow:
|
|
270
|
+
|
|
271
|
+
```bash
|
|
272
|
+
npm version patch --no-git-tag-version
|
|
273
|
+
# update CHANGELOG.md as needed
|
|
274
|
+
npm run verify
|
|
275
|
+
git add package.json package-lock.json CHANGELOG.md
|
|
276
|
+
git commit -m "Release vX.Y.Z"
|
|
277
|
+
git push origin main
|
|
278
|
+
git tag vX.Y.Z
|
|
279
|
+
git push origin vX.Y.Z
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
Then publish a GitHub release for the `vX.Y.Z` tag. GitHub Actions will run the publish
|
|
283
|
+
workflow, publish the package to npm, and attach npm provenance automatically when trusted
|
|
284
|
+
publishing is configured for the package.
|
|
285
|
+
|
|
249
286
|
## Environment variables
|
|
250
287
|
|
|
251
288
|
| Variable | Used by | Purpose |
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AllRateLimits, SupportedAgent } from "./index.js";
|
|
2
|
+
export declare class CliUsageError extends Error {
|
|
3
|
+
constructor(message: string);
|
|
4
|
+
}
|
|
5
|
+
export type CliRunOptions = {
|
|
6
|
+
jsonMode: boolean;
|
|
7
|
+
quiet: boolean;
|
|
8
|
+
verbose: boolean;
|
|
9
|
+
strict: boolean;
|
|
10
|
+
requestedAgents: SupportedAgent[];
|
|
11
|
+
};
|
|
12
|
+
export declare function parseCliRunOptions(args: string[], supportedAgents: readonly SupportedAgent[]): CliRunOptions;
|
|
13
|
+
export declare function shouldExitNonZero(result: AllRateLimits, strict: boolean): boolean;
|
|
14
|
+
//# sourceMappingURL=cli-core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-core.d.ts","sourceRoot":"","sources":["../src/cli-core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEhE,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,cAAc,EAAE,CAAC;CACnC,CAAC;AAIF,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EAAE,EACd,eAAe,EAAE,SAAS,cAAc,EAAE,GACzC,aAAa,CAyBf;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CASjF"}
|
package/dist/cli-core.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export class CliUsageError extends Error {
|
|
2
|
+
constructor(message) {
|
|
3
|
+
super(message);
|
|
4
|
+
this.name = "CliUsageError";
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
const RUNTIME_FLAGS = new Set(["--json", "--quiet", "--verbose", "--strict"]);
|
|
8
|
+
export function parseCliRunOptions(args, supportedAgents) {
|
|
9
|
+
const supportedSet = new Set(supportedAgents);
|
|
10
|
+
const requestedAgents = [];
|
|
11
|
+
for (const arg of args) {
|
|
12
|
+
if (arg.startsWith("-")) {
|
|
13
|
+
if (!RUNTIME_FLAGS.has(arg)) {
|
|
14
|
+
throw new CliUsageError(`unknown option: ${arg}`);
|
|
15
|
+
}
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
if (!supportedSet.has(arg)) {
|
|
19
|
+
throw new CliUsageError(`unknown agent: ${arg}`);
|
|
20
|
+
}
|
|
21
|
+
requestedAgents.push(arg);
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
jsonMode: args.includes("--json"),
|
|
25
|
+
quiet: args.includes("--quiet"),
|
|
26
|
+
verbose: args.includes("--verbose"),
|
|
27
|
+
strict: args.includes("--strict"),
|
|
28
|
+
requestedAgents
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export function shouldExitNonZero(result, strict) {
|
|
32
|
+
if (!strict)
|
|
33
|
+
return false;
|
|
34
|
+
return (result.claude.status === "error" ||
|
|
35
|
+
result.gemini.status === "error" ||
|
|
36
|
+
result.copilot.status === "error" ||
|
|
37
|
+
result.codex.status === "error");
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=cli-core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-core.js","sourceRoot":"","sources":["../src/cli-core.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAUD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;AAE9E,MAAM,UAAU,kBAAkB,CAChC,IAAc,EACd,eAA0C;IAE1C,MAAM,YAAY,GAAG,IAAI,GAAG,CAAS,eAAe,CAAC,CAAC;IACtD,MAAM,eAAe,GAAqB,EAAE,CAAC;IAE7C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,MAAM,IAAI,aAAa,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;YACpD,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,aAAa,CAAC,kBAAkB,GAAG,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,eAAe,CAAC,IAAI,CAAC,GAAqB,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACjC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC/B,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QACnC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QACjC,eAAe;KAChB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAqB,EAAE,MAAe;IACtE,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAE1B,OAAO,CACL,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,OAAO;QAChC,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,OAAO;QAChC,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,OAAO;QACjC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,OAAO,CAChC,CAAC;AACJ,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import { fetchAllRateLimits, runMcpServer, SUPPORTED_AGENTS, agentToSdkKey } from "./index.js";
|
|
6
6
|
import { getVersion } from "./utils.js";
|
|
7
7
|
import { buildHumanRows, formatHumanTable } from "./human-output.js";
|
|
8
|
+
import { CliUsageError, parseCliRunOptions, shouldExitNonZero } from "./cli-core.js";
|
|
8
9
|
function showHelp() {
|
|
9
10
|
process.stdout.write(`ai-quota v${getVersion()}\n\n` +
|
|
10
11
|
"Usage:\n" +
|
|
@@ -12,6 +13,7 @@ function showHelp() {
|
|
|
12
13
|
" ai-quota --json Output machine-readable JSON\n" +
|
|
13
14
|
" ai-quota --mcp Start as an MCP server\n" +
|
|
14
15
|
" ai-quota --quiet Suppress non-error output\n" +
|
|
16
|
+
" ai-quota --strict Exit non-zero if any provider fetch errors\n" +
|
|
15
17
|
" ai-quota --verbose Show extra debug info on stderr\n" +
|
|
16
18
|
" ai-quota --help Show this help message\n" +
|
|
17
19
|
" ai-quota --version Show version\n\n" +
|
|
@@ -19,6 +21,7 @@ function showHelp() {
|
|
|
19
21
|
SUPPORTED_AGENTS.join(", ") +
|
|
20
22
|
"\n" +
|
|
21
23
|
"Output: table with AGENT, STATUS, LIMIT, DETAILS\n" +
|
|
24
|
+
"Exit codes: default 0 when status report succeeds; use --strict for fetch-error exit.\n" +
|
|
22
25
|
"Note: Use --json for scripts.\n");
|
|
23
26
|
}
|
|
24
27
|
async function main() {
|
|
@@ -35,25 +38,19 @@ async function main() {
|
|
|
35
38
|
await runMcpServer();
|
|
36
39
|
return;
|
|
37
40
|
}
|
|
38
|
-
const jsonMode = args
|
|
39
|
-
const quiet = args.includes("--quiet");
|
|
40
|
-
const verbose = args.includes("--verbose");
|
|
41
|
-
const requestedAgents = args.filter((a) => !a.startsWith("-"));
|
|
41
|
+
const { jsonMode, quiet, verbose, strict, requestedAgents } = parseCliRunOptions(args, SUPPORTED_AGENTS);
|
|
42
42
|
const allResults = await fetchAllRateLimits({
|
|
43
43
|
agents: requestedAgents.length > 0 ? requestedAgents : undefined,
|
|
44
44
|
verbose,
|
|
45
45
|
timeoutSeconds: 10
|
|
46
46
|
});
|
|
47
47
|
const agentsToDisplay = (requestedAgents.length > 0 ? requestedAgents : [...SUPPORTED_AGENTS]);
|
|
48
|
-
let anyError = false;
|
|
49
48
|
const outputJson = {};
|
|
50
49
|
for (const agent of agentsToDisplay) {
|
|
51
50
|
const sdkKey = agentToSdkKey(agent);
|
|
52
51
|
const res = allResults[sdkKey];
|
|
53
52
|
if (!res)
|
|
54
53
|
continue;
|
|
55
|
-
if (res.status === "error")
|
|
56
|
-
anyError = true;
|
|
57
54
|
if (jsonMode) {
|
|
58
55
|
outputJson[agent] = {
|
|
59
56
|
status: res.status,
|
|
@@ -71,10 +68,16 @@ async function main() {
|
|
|
71
68
|
if (jsonMode && !quiet) {
|
|
72
69
|
process.stdout.write(JSON.stringify(outputJson, null, 2) + "\n");
|
|
73
70
|
}
|
|
74
|
-
if (
|
|
71
|
+
if (shouldExitNonZero(allResults, strict))
|
|
75
72
|
process.exitCode = 1;
|
|
76
73
|
}
|
|
77
74
|
main().catch((err) => {
|
|
75
|
+
if (err instanceof CliUsageError) {
|
|
76
|
+
process.stderr.write(`ai-quota: ${err.message}\n`);
|
|
77
|
+
process.stderr.write("Run 'ai-quota --help' for usage.\n");
|
|
78
|
+
process.exitCode = 1;
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
78
81
|
process.stderr.write(`ai-quota: fatal error: ${err}\n`);
|
|
79
82
|
process.exitCode = 1;
|
|
80
83
|
});
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAEhB,aAAa,EACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAEhB,aAAa,EACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAErF,SAAS,QAAQ;IACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,aAAa,UAAU,EAAE,MAAM;QAC7B,UAAU;QACV,+EAA+E;QAC/E,6DAA6D;QAC7D,uDAAuD;QACvD,0DAA0D;QAC1D,2EAA2E;QAC3E,gEAAgE;QAChE,uDAAuD;QACvD,+CAA+C;QAC/C,UAAU;QACV,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3B,IAAI;QACJ,oDAAoD;QACpD,yFAAyF;QACzF,iCAAiC,CACpC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,QAAQ,EAAE,CAAC;QACX,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,EAAE,IAAI,CAAC,CAAC;QAC1C,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,YAAY,EAAE,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,kBAAkB,CAC9E,IAAI,EACJ,gBAAgB,CACjB,CAAC;IAEF,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC;QAC1C,MAAM,EAAE,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;QAChE,OAAO;QACP,cAAc,EAAE,EAAE;KACnB,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,CACtB,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CACjD,CAAC;IAEtB,MAAM,UAAU,GAA4B,EAAE,CAAC;IAE/C,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,GAAG,GAAI,UAAkB,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG;YAAE,SAAS;QAEnB,IAAI,QAAQ,EAAE,CAAC;YACb,UAAU,CAAC,KAAK,CAAC,GAAG;gBAClB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,OAAO,EAAE,GAAG,CAAC,OAAO;aACrB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,cAAc,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;QACtF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;QACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,iBAAiB,CAAC,UAAU,EAAE,MAAM,CAAC;QAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AAClE,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;QACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;QACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAC3D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,GAAG,IAAI,CAAC,CAAC;IACxD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metyatech/ai-quota",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.5",
|
|
4
4
|
"description": "AI agent quota/rate-limit fetching library and CLI for Claude, Gemini, Copilot, and Codex",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -38,7 +38,8 @@
|
|
|
38
38
|
"lint": "eslint . && tsc -p tsconfig.json --noEmit",
|
|
39
39
|
"format": "prettier --write .",
|
|
40
40
|
"format:check": "prettier --check .",
|
|
41
|
-
"verify": "
|
|
41
|
+
"verify:publish-workflow": "node scripts/verify-publish-workflow.mjs",
|
|
42
|
+
"verify": "npm run format:check && npm run lint && npm run verify:publish-workflow && npm test && npm run build",
|
|
42
43
|
"verify:live": "npm run build && node dist/cli.js --verbose",
|
|
43
44
|
"prepare": "husky"
|
|
44
45
|
},
|