@chainpatrol/cli 1.10.0 → 1.11.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 (54) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/{breakdown-2HAZ2MX5.js → breakdown-BLCYJP7O.js} +4 -3
  3. package/dist/{check-5LJI7N5I.js → check-2IFMTAIU.js} +4 -3
  4. package/dist/chunk-4QZ7KD2Y.js +18 -0
  5. package/dist/{chunk-GGBG2R63.js → chunk-BSWGLZDK.js} +1 -1
  6. package/dist/{chunk-FPCN4SNK.js → chunk-CABRZEYB.js} +1 -1
  7. package/dist/chunk-K4RAUZSD.js +32 -0
  8. package/dist/{chunk-322AVMUH.js → chunk-NSRQ62C4.js} +3 -16
  9. package/dist/chunk-OKIUEBUK.js +61 -0
  10. package/dist/{chunk-EGWK6SRQ.js → chunk-ORAY4KMA.js} +1 -1
  11. package/dist/{chunk-LE5ZOOUI.js → chunk-TGIVCSKT.js} +6 -62
  12. package/dist/cli.js +81 -50
  13. package/dist/{config-Z3TASRME.js → config-IKTL6KVW.js} +3 -1
  14. package/dist/{configs-update-N7ZIWWKQ.js → configs-update-XUN4X4T2.js} +4 -3
  15. package/dist/{create-4ZJ7DXHX.js → create-ILSWAUVI.js} +4 -3
  16. package/dist/{drift-BGWNH6QE.js → drift-DPYW7LYN.js} +4 -3
  17. package/dist/{found-QOARB5G2.js → found-YLTMVPBZ.js} +4 -3
  18. package/dist/{get-ON5JOCV7.js → get-NDEY54AO.js} +4 -3
  19. package/dist/{healthcheck-34LQTSVZ.js → healthcheck-SYZQ2ILK.js} +4 -3
  20. package/dist/{list-AG6LWNMN.js → list-2H2CV3JJ.js} +4 -3
  21. package/dist/{list-XV3G2AX6.js → list-4THJBDSU.js} +4 -3
  22. package/dist/{list-JG5ARDTR.js → list-FUQK3TIN.js} +5 -4
  23. package/dist/{list-UXYGISAK.js → list-GTN2HNGZ.js} +4 -3
  24. package/dist/{list-DJFIKDY6.js → list-H4RCDI6Q.js} +4 -3
  25. package/dist/{list-PAJBOVN2.js → list-LWB5JQAY.js} +4 -3
  26. package/dist/{list-6CAKS43I.js → list-PV5GY2DY.js} +4 -3
  27. package/dist/{list-W6CF25ZS.js → list-Q5K4RMM4.js} +4 -3
  28. package/dist/{list-UPY6PHY4.js → list-RUIQIVEA.js} +4 -3
  29. package/dist/{list-5TKOWBC4.js → list-VHDU3XMN.js} +4 -3
  30. package/dist/{list-SJFJT4V3.js → list-WYC4ZP7X.js} +4 -3
  31. package/dist/{list-IVFZGLKN.js → list-YFBZVQWK.js} +4 -3
  32. package/dist/{list-json-ZR3XOQPJ.js → list-json-B4X74BTZ.js} +4 -3
  33. package/dist/{login-2NRI3ECY.js → login-H2G6RBLL.js} +3 -3
  34. package/dist/{login-json-HOCNSQQ7.js → login-json-5DVIMAO2.js} +3 -3
  35. package/dist/{login-plain-6ZJF5KA7.js → login-plain-PUWGRRYT.js} +3 -3
  36. package/dist/{logout-T6Q4IVPU.js → logout-332KFFNS.js} +2 -2
  37. package/dist/{logout-json-ACXBI6PN.js → logout-json-VMGXQQS2.js} +2 -2
  38. package/dist/mcp-ITEWOAOR.js +46 -0
  39. package/dist/{organization-SSCPM7XN.js → organization-KANXTARX.js} +4 -3
  40. package/dist/{review-7A7WV73T.js → review-5J3EQRCB.js} +4 -3
  41. package/dist/{run-LZZOV4HG.js → run-FDZWPY4W.js} +4 -3
  42. package/dist/{run-AIYPHWFJ.js → run-JBQ43OW6.js} +4 -3
  43. package/dist/{run-YP4O5VXZ.js → run-XWM67MBV.js} +5 -4
  44. package/dist/{search-OGGKNPUJ.js → search-A75YUJFI.js} +4 -3
  45. package/dist/{search-IWS42COG.js → search-DRTTZJJP.js} +4 -3
  46. package/dist/{setup-skill-ESJ4HIKR.js → setup-skill-TVJJD6NC.js} +2 -1
  47. package/dist/{snapshot-TLSOPK7C.js → snapshot-2IT4KG4F.js} +4 -3
  48. package/dist/{summary-XA3PVJIW.js → summary-A24TNQNR.js} +4 -3
  49. package/dist/{takedown-time-ARGVSPL6.js → takedown-time-HB3J2FTZ.js} +4 -3
  50. package/dist/{takedown-time-trend-LL3ZCCSD.js → takedown-time-trend-KYPA3W3U.js} +4 -3
  51. package/dist/{validate-WB5367QN.js → validate-FOZCI7HX.js} +4 -3
  52. package/dist/{whoami-YE3V6I65.js → whoami-DSXNLG3B.js} +4 -3
  53. package/package.json +3 -1
  54. package/dist/chunk-U73SABXK.js +0 -46
@@ -4,13 +4,14 @@ import {
4
4
  } from "./chunk-JCMWDZYY.js";
5
5
  import {
6
6
  createApiClient
7
- } from "./chunk-322AVMUH.js";
7
+ } from "./chunk-NSRQ62C4.js";
8
+ import "./chunk-4QZ7KD2Y.js";
8
9
  import {
9
10
  AuthCorruptedError,
10
11
  AuthExpiredError,
11
12
  AuthNotLoggedInError
12
- } from "./chunk-EGWK6SRQ.js";
13
- import "./chunk-U73SABXK.js";
13
+ } from "./chunk-ORAY4KMA.js";
14
+ import "./chunk-K4RAUZSD.js";
14
15
 
15
16
  // src/commands/configs/list.tsx
16
17
  import { useState, useEffect } from "react";
@@ -4,9 +4,10 @@ import {
4
4
  } from "./chunk-VFT3TD3E.js";
5
5
  import {
6
6
  createApiClient
7
- } from "./chunk-322AVMUH.js";
8
- import "./chunk-EGWK6SRQ.js";
9
- import "./chunk-U73SABXK.js";
7
+ } from "./chunk-NSRQ62C4.js";
8
+ import "./chunk-4QZ7KD2Y.js";
9
+ import "./chunk-ORAY4KMA.js";
10
+ import "./chunk-K4RAUZSD.js";
10
11
 
11
12
  // src/commands/healthchecks/list.ts
12
13
  async function runHealthchecksList(options) {
@@ -8,9 +8,10 @@ import {
8
8
  } from "./chunk-VFT3TD3E.js";
9
9
  import {
10
10
  createApiClient
11
- } from "./chunk-322AVMUH.js";
12
- import "./chunk-EGWK6SRQ.js";
13
- import "./chunk-U73SABXK.js";
11
+ } from "./chunk-NSRQ62C4.js";
12
+ import "./chunk-4QZ7KD2Y.js";
13
+ import "./chunk-ORAY4KMA.js";
14
+ import "./chunk-K4RAUZSD.js";
14
15
 
15
16
  // src/commands/threats/list.ts
16
17
  function toRow(threat) {
@@ -8,9 +8,10 @@ import {
8
8
  } from "./chunk-VFT3TD3E.js";
9
9
  import {
10
10
  createApiClient
11
- } from "./chunk-322AVMUH.js";
12
- import "./chunk-EGWK6SRQ.js";
13
- import "./chunk-U73SABXK.js";
11
+ } from "./chunk-NSRQ62C4.js";
12
+ import "./chunk-4QZ7KD2Y.js";
13
+ import "./chunk-ORAY4KMA.js";
14
+ import "./chunk-K4RAUZSD.js";
14
15
 
15
16
  // src/commands/orgs/assets/list.ts
16
17
  function toRow(asset) {
@@ -4,9 +4,10 @@ import {
4
4
  } from "./chunk-VFT3TD3E.js";
5
5
  import {
6
6
  createApiClient
7
- } from "./chunk-322AVMUH.js";
8
- import "./chunk-EGWK6SRQ.js";
9
- import "./chunk-U73SABXK.js";
7
+ } from "./chunk-NSRQ62C4.js";
8
+ import "./chunk-4QZ7KD2Y.js";
9
+ import "./chunk-ORAY4KMA.js";
10
+ import "./chunk-K4RAUZSD.js";
10
11
 
11
12
  // src/commands/orgs/asset-groups/list.ts
12
13
  function toRow(group) {
@@ -4,9 +4,10 @@ import {
4
4
  } from "./chunk-VFT3TD3E.js";
5
5
  import {
6
6
  createApiClient
7
- } from "./chunk-322AVMUH.js";
8
- import "./chunk-EGWK6SRQ.js";
9
- import "./chunk-U73SABXK.js";
7
+ } from "./chunk-NSRQ62C4.js";
8
+ import "./chunk-4QZ7KD2Y.js";
9
+ import "./chunk-ORAY4KMA.js";
10
+ import "./chunk-K4RAUZSD.js";
10
11
 
11
12
  // src/commands/brands/list.ts
12
13
  function summarizeLegalDocs(brand) {
@@ -1,8 +1,9 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-322AVMUH.js";
4
- import "./chunk-EGWK6SRQ.js";
5
- import "./chunk-U73SABXK.js";
3
+ } from "./chunk-NSRQ62C4.js";
4
+ import "./chunk-4QZ7KD2Y.js";
5
+ import "./chunk-ORAY4KMA.js";
6
+ import "./chunk-K4RAUZSD.js";
6
7
 
7
8
  // src/commands/configs/list-json.ts
8
9
  async function listConfigsJson({
@@ -5,7 +5,7 @@ import {
5
5
  import {
6
6
  formatUserCode,
7
7
  isHeadlessEnv
8
- } from "./chunk-GGBG2R63.js";
8
+ } from "./chunk-BSWGLZDK.js";
9
9
  import "./chunk-TFCNKBRC.js";
10
10
  import {
11
11
  fetchUserEmail,
@@ -15,8 +15,8 @@ import {
15
15
  pollForToken,
16
16
  requestDeviceCode,
17
17
  storeCredentials
18
- } from "./chunk-EGWK6SRQ.js";
19
- import "./chunk-U73SABXK.js";
18
+ } from "./chunk-ORAY4KMA.js";
19
+ import "./chunk-K4RAUZSD.js";
20
20
 
21
21
  // src/commands/login.tsx
22
22
  import { useState, useEffect } from "react";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  isHeadlessEnv,
3
3
  runLoginFlow
4
- } from "./chunk-GGBG2R63.js";
4
+ } from "./chunk-BSWGLZDK.js";
5
5
  import "./chunk-TFCNKBRC.js";
6
- import "./chunk-EGWK6SRQ.js";
7
- import "./chunk-U73SABXK.js";
6
+ import "./chunk-ORAY4KMA.js";
7
+ import "./chunk-K4RAUZSD.js";
8
8
 
9
9
  // src/commands/login-json.ts
10
10
  async function loginJson() {
@@ -2,10 +2,10 @@ import {
2
2
  formatUserCode,
3
3
  isHeadlessEnv,
4
4
  runLoginFlow
5
- } from "./chunk-GGBG2R63.js";
5
+ } from "./chunk-BSWGLZDK.js";
6
6
  import "./chunk-TFCNKBRC.js";
7
- import "./chunk-EGWK6SRQ.js";
8
- import "./chunk-U73SABXK.js";
7
+ import "./chunk-ORAY4KMA.js";
8
+ import "./chunk-K4RAUZSD.js";
9
9
 
10
10
  // src/commands/login-plain.ts
11
11
  async function loginPlain() {
@@ -2,8 +2,8 @@ import {
2
2
  clearCredentials,
3
3
  hasApiKeyEnv,
4
4
  isLoggedIn
5
- } from "./chunk-EGWK6SRQ.js";
6
- import "./chunk-U73SABXK.js";
5
+ } from "./chunk-ORAY4KMA.js";
6
+ import "./chunk-K4RAUZSD.js";
7
7
 
8
8
  // src/commands/logout.tsx
9
9
  import { Text, useApp } from "ink";
@@ -2,8 +2,8 @@ import {
2
2
  clearCredentials,
3
3
  hasApiKeyEnv,
4
4
  isLoggedIn
5
- } from "./chunk-EGWK6SRQ.js";
6
- import "./chunk-U73SABXK.js";
5
+ } from "./chunk-ORAY4KMA.js";
6
+ import "./chunk-K4RAUZSD.js";
7
7
 
8
8
  // src/commands/logout-json.ts
9
9
  async function logoutJson() {
@@ -0,0 +1,46 @@
1
+ import {
2
+ CliExitError,
3
+ ExitCode
4
+ } from "./chunk-E2LAMILJ.js";
5
+ import {
6
+ getCliVersion
7
+ } from "./chunk-OKIUEBUK.js";
8
+ import {
9
+ createCliCredentialProvider
10
+ } from "./chunk-4QZ7KD2Y.js";
11
+ import "./chunk-ORAY4KMA.js";
12
+ import {
13
+ getConfig
14
+ } from "./chunk-K4RAUZSD.js";
15
+
16
+ // src/commands/mcp.ts
17
+ import {
18
+ createChainPatrolMcpServer,
19
+ createHttpInvoker,
20
+ toolsFromEnvironment
21
+ } from "@chainpatrol/mcp";
22
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
23
+ async function runMcpServe(options = {}, deps = {}) {
24
+ const createServer = deps.createServer ?? createChainPatrolMcpServer;
25
+ const createTransport = deps.createTransport ?? (() => new StdioServerTransport());
26
+ const only = options.only ?? toolsFromEnvironment(deps.env);
27
+ const server = createServer({
28
+ invoker: createHttpInvoker({
29
+ baseUrl: options.apiUrl ?? getConfig().apiUrl,
30
+ credential: createCliCredentialProvider()
31
+ }),
32
+ only,
33
+ version: getCliVersion()
34
+ });
35
+ try {
36
+ await server.connect(createTransport());
37
+ } catch (error) {
38
+ throw new CliExitError(
39
+ `Failed to start the MCP server: ${error instanceof Error ? error.message : String(error)}`,
40
+ ExitCode.UNKNOWN
41
+ );
42
+ }
43
+ }
44
+ export {
45
+ runMcpServe
46
+ };
@@ -8,10 +8,11 @@ import {
8
8
  import {
9
9
  ORGANIZATION_METRICS_INCLUDE_FIELDS,
10
10
  createApiClient
11
- } from "./chunk-322AVMUH.js";
11
+ } from "./chunk-NSRQ62C4.js";
12
+ import "./chunk-4QZ7KD2Y.js";
12
13
  import "./chunk-TFCNKBRC.js";
13
- import "./chunk-EGWK6SRQ.js";
14
- import "./chunk-U73SABXK.js";
14
+ import "./chunk-ORAY4KMA.js";
15
+ import "./chunk-K4RAUZSD.js";
15
16
 
16
17
  // src/commands/metrics/organization.ts
17
18
  var SERVICE_KEYS = [
@@ -10,9 +10,10 @@ import {
10
10
  PROPOSAL_REJECT_REASONS,
11
11
  PROPOSAL_WATCHLIST_REASONS,
12
12
  createApiClient
13
- } from "./chunk-322AVMUH.js";
14
- import "./chunk-EGWK6SRQ.js";
15
- import "./chunk-U73SABXK.js";
13
+ } from "./chunk-NSRQ62C4.js";
14
+ import "./chunk-4QZ7KD2Y.js";
15
+ import "./chunk-ORAY4KMA.js";
16
+ import "./chunk-K4RAUZSD.js";
16
17
 
17
18
  // src/commands/proposals/review.ts
18
19
  var BRAND_REQUIRED_LABELS = ["brand impersonation", "employee impersonation"];
@@ -8,9 +8,10 @@ import {
8
8
  } from "./chunk-VFT3TD3E.js";
9
9
  import {
10
10
  createApiClient
11
- } from "./chunk-322AVMUH.js";
12
- import "./chunk-EGWK6SRQ.js";
13
- import "./chunk-U73SABXK.js";
11
+ } from "./chunk-NSRQ62C4.js";
12
+ import "./chunk-4QZ7KD2Y.js";
13
+ import "./chunk-ORAY4KMA.js";
14
+ import "./chunk-K4RAUZSD.js";
14
15
 
15
16
  // src/commands/detections/run.ts
16
17
  async function runDetectionsRun(options) {
@@ -8,9 +8,10 @@ import {
8
8
  } from "./chunk-VFT3TD3E.js";
9
9
  import {
10
10
  createApiClient
11
- } from "./chunk-322AVMUH.js";
12
- import "./chunk-EGWK6SRQ.js";
13
- import "./chunk-U73SABXK.js";
11
+ } from "./chunk-NSRQ62C4.js";
12
+ import "./chunk-4QZ7KD2Y.js";
13
+ import "./chunk-ORAY4KMA.js";
14
+ import "./chunk-K4RAUZSD.js";
14
15
 
15
16
  // src/commands/healthchecks/run.ts
16
17
  function buildPayload(entry, org, thresholds) {
@@ -1,16 +1,17 @@
1
1
  import {
2
2
  getPresetDefinition,
3
3
  runPreset
4
- } from "./chunk-FPCN4SNK.js";
4
+ } from "./chunk-CABRZEYB.js";
5
5
  import {
6
6
  CliExitError,
7
7
  ExitCode
8
8
  } from "./chunk-E2LAMILJ.js";
9
9
  import "./chunk-VFT3TD3E.js";
10
- import "./chunk-322AVMUH.js";
10
+ import "./chunk-NSRQ62C4.js";
11
+ import "./chunk-4QZ7KD2Y.js";
11
12
  import "./chunk-TFCNKBRC.js";
12
- import "./chunk-EGWK6SRQ.js";
13
- import "./chunk-U73SABXK.js";
13
+ import "./chunk-ORAY4KMA.js";
14
+ import "./chunk-K4RAUZSD.js";
14
15
 
15
16
  // src/commands/presets/run.ts
16
17
  async function runPresetsRun({
@@ -8,9 +8,10 @@ import {
8
8
  } from "./chunk-VFT3TD3E.js";
9
9
  import {
10
10
  createApiClient
11
- } from "./chunk-322AVMUH.js";
12
- import "./chunk-EGWK6SRQ.js";
13
- import "./chunk-U73SABXK.js";
11
+ } from "./chunk-NSRQ62C4.js";
12
+ import "./chunk-4QZ7KD2Y.js";
13
+ import "./chunk-ORAY4KMA.js";
14
+ import "./chunk-K4RAUZSD.js";
14
15
 
15
16
  // src/commands/reports/search.ts
16
17
  function toRow(report) {
@@ -8,9 +8,10 @@ import {
8
8
  } from "./chunk-VFT3TD3E.js";
9
9
  import {
10
10
  createApiClient
11
- } from "./chunk-322AVMUH.js";
12
- import "./chunk-EGWK6SRQ.js";
13
- import "./chunk-U73SABXK.js";
11
+ } from "./chunk-NSRQ62C4.js";
12
+ import "./chunk-4QZ7KD2Y.js";
13
+ import "./chunk-ORAY4KMA.js";
14
+ import "./chunk-K4RAUZSD.js";
14
15
 
15
16
  // src/commands/asset/search.ts
16
17
  function formatAssetRow(item) {
@@ -6,7 +6,8 @@ import {
6
6
  readInstalledSkillVersion,
7
7
  setupSkill,
8
8
  uninstallSkill
9
- } from "./chunk-LE5ZOOUI.js";
9
+ } from "./chunk-TGIVCSKT.js";
10
+ import "./chunk-OKIUEBUK.js";
10
11
  import "./chunk-TI2HK3NM.js";
11
12
  export {
12
13
  getBundledSkillContent,
@@ -8,9 +8,10 @@ import {
8
8
  } from "./chunk-VFT3TD3E.js";
9
9
  import {
10
10
  createApiClient
11
- } from "./chunk-322AVMUH.js";
12
- import "./chunk-EGWK6SRQ.js";
13
- import "./chunk-U73SABXK.js";
11
+ } from "./chunk-NSRQ62C4.js";
12
+ import "./chunk-4QZ7KD2Y.js";
13
+ import "./chunk-ORAY4KMA.js";
14
+ import "./chunk-K4RAUZSD.js";
14
15
 
15
16
  // src/commands/queues/snapshot.ts
16
17
  async function runQueuesSnapshot(options) {
@@ -7,10 +7,11 @@ import {
7
7
  } from "./chunk-VFT3TD3E.js";
8
8
  import {
9
9
  createApiClient
10
- } from "./chunk-322AVMUH.js";
10
+ } from "./chunk-NSRQ62C4.js";
11
+ import "./chunk-4QZ7KD2Y.js";
11
12
  import "./chunk-TFCNKBRC.js";
12
- import "./chunk-EGWK6SRQ.js";
13
- import "./chunk-U73SABXK.js";
13
+ import "./chunk-ORAY4KMA.js";
14
+ import "./chunk-K4RAUZSD.js";
14
15
 
15
16
  // src/commands/metrics/summary.ts
16
17
  async function runMetricsSummary(options) {
@@ -7,10 +7,11 @@ import {
7
7
  } from "./chunk-VFT3TD3E.js";
8
8
  import {
9
9
  createApiClient
10
- } from "./chunk-322AVMUH.js";
10
+ } from "./chunk-NSRQ62C4.js";
11
+ import "./chunk-4QZ7KD2Y.js";
11
12
  import "./chunk-TFCNKBRC.js";
12
- import "./chunk-EGWK6SRQ.js";
13
- import "./chunk-U73SABXK.js";
13
+ import "./chunk-ORAY4KMA.js";
14
+ import "./chunk-K4RAUZSD.js";
14
15
 
15
16
  // src/commands/metrics/takedown-time.ts
16
17
  function formatDuration(hours) {
@@ -4,9 +4,10 @@ import {
4
4
  } from "./chunk-VFT3TD3E.js";
5
5
  import {
6
6
  createApiClient
7
- } from "./chunk-322AVMUH.js";
8
- import "./chunk-EGWK6SRQ.js";
9
- import "./chunk-U73SABXK.js";
7
+ } from "./chunk-NSRQ62C4.js";
8
+ import "./chunk-4QZ7KD2Y.js";
9
+ import "./chunk-ORAY4KMA.js";
10
+ import "./chunk-K4RAUZSD.js";
10
11
 
11
12
  // src/commands/metrics/takedown-time-trend.ts
12
13
  function formatDuration(hours) {
@@ -8,9 +8,10 @@ import {
8
8
  } from "./chunk-VFT3TD3E.js";
9
9
  import {
10
10
  createApiClient
11
- } from "./chunk-322AVMUH.js";
12
- import "./chunk-EGWK6SRQ.js";
13
- import "./chunk-U73SABXK.js";
11
+ } from "./chunk-NSRQ62C4.js";
12
+ import "./chunk-4QZ7KD2Y.js";
13
+ import "./chunk-ORAY4KMA.js";
14
+ import "./chunk-K4RAUZSD.js";
14
15
 
15
16
  // src/commands/detections/validate.ts
16
17
  async function runDetectionsValidate(options) {
@@ -3,9 +3,10 @@ import {
3
3
  } from "./chunk-VFT3TD3E.js";
4
4
  import {
5
5
  createApiClient
6
- } from "./chunk-322AVMUH.js";
7
- import "./chunk-EGWK6SRQ.js";
8
- import "./chunk-U73SABXK.js";
6
+ } from "./chunk-NSRQ62C4.js";
7
+ import "./chunk-4QZ7KD2Y.js";
8
+ import "./chunk-ORAY4KMA.js";
9
+ import "./chunk-K4RAUZSD.js";
9
10
 
10
11
  // src/commands/whoami.ts
11
12
  function detectAuthKind() {
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@chainpatrol/cli",
3
3
  "description": "The official ChainPatrol CLI — terminal interface for threat detection",
4
4
  "author": "Umar Ahmed <umar@chainpatrol.io>",
5
- "version": "1.10.0",
5
+ "version": "1.11.0",
6
6
  "license": "UNLICENSED",
7
7
  "homepage": "https://chainpatrol.com/docs/cli",
8
8
  "keywords": [
@@ -33,7 +33,9 @@
33
33
  "lint": "npx oxlint ."
34
34
  },
35
35
  "dependencies": {
36
+ "@chainpatrol/mcp": "1.10.0",
36
37
  "@chainpatrol/sdk": "1.10.0",
38
+ "@modelcontextprotocol/sdk": "^1.30.0",
37
39
  "ink": "^7.0.1",
38
40
  "meow": "^14.1.0",
39
41
  "open": "^11.0.0",
@@ -1,46 +0,0 @@
1
- // src/lib/config.ts
2
- import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs";
3
- import { join } from "path";
4
- import { homedir } from "os";
5
- var DEFAULTS = {
6
- apiUrl: process.env.CHAINPATROL_API_URL ?? "https://app.chainpatrol.io"
7
- };
8
- function getConfigDir() {
9
- if (process.env.CHAINPATROL_CONFIG_DIR) {
10
- return process.env.CHAINPATROL_CONFIG_DIR;
11
- }
12
- const legacy = join(homedir(), ".chainpatrol");
13
- const xdg = join(
14
- process.env.XDG_CONFIG_HOME ?? join(homedir(), ".config"),
15
- "chainpatrol"
16
- );
17
- if (existsSync(legacy) && !existsSync(xdg)) {
18
- return legacy;
19
- }
20
- return xdg;
21
- }
22
- function getConfig() {
23
- const configFile = join(getConfigDir(), "config.json");
24
- if (!existsSync(configFile)) {
25
- return { ...DEFAULTS };
26
- }
27
- try {
28
- const raw = readFileSync(configFile, "utf-8");
29
- return { ...DEFAULTS, ...JSON.parse(raw) };
30
- } catch {
31
- return { ...DEFAULTS };
32
- }
33
- }
34
- function saveConfig(config) {
35
- const configDir = getConfigDir();
36
- mkdirSync(configDir, { recursive: true });
37
- writeFileSync(join(configDir, "config.json"), JSON.stringify(config, null, 2), {
38
- mode: 420
39
- });
40
- }
41
-
42
- export {
43
- getConfigDir,
44
- getConfig,
45
- saveConfig
46
- };