openkrak-mcp 1.0.6 → 1.0.7

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 (2) hide show
  1. package/dist/index.js +82 -62
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -244762,6 +244762,78 @@ async function runPipeline(options) {
244762
244762
  }
244763
244763
  }
244764
244764
 
244765
+ // src/license/check.ts
244766
+ var import_node_crypto = require("crypto");
244767
+ var import_node_os = require("os");
244768
+ var WORKER_URL = "https://openkrak-license-server.openkrak.workers.dev";
244769
+ var PRO_KEY = process.env.OPENKRAK_KEY;
244770
+ var VERSION = "1.0.6";
244771
+ function getFingerprint() {
244772
+ const raw = `${(0, import_node_os.hostname)()}:${(0, import_node_os.userInfo)().username}`;
244773
+ return (0, import_node_crypto.createHash)("sha256").update(raw).digest("hex").slice(0, 32);
244774
+ }
244775
+ async function checkLicense(tool = "unknown") {
244776
+ if (PRO_KEY) {
244777
+ try {
244778
+ const res = await fetch(`${WORKER_URL}/v3/validate`, {
244779
+ method: "POST",
244780
+ headers: { "Content-Type": "application/json" },
244781
+ body: JSON.stringify({ license_key: PRO_KEY })
244782
+ });
244783
+ const data = await res.json();
244784
+ if (data.valid) return { allowed: true, tier: "pro" };
244785
+ return {
244786
+ allowed: false,
244787
+ tier: "blocked",
244788
+ reason: `Pro key invalid: ${data.reason ?? "unknown"}. Get a key at openkrak-web.vercel.app`
244789
+ };
244790
+ } catch {
244791
+ return { allowed: true, tier: "pro" };
244792
+ }
244793
+ }
244794
+ const fp = getFingerprint();
244795
+ try {
244796
+ const res = await fetch(`${WORKER_URL}/v3/free-query`, {
244797
+ method: "POST",
244798
+ headers: { "Content-Type": "application/json" },
244799
+ body: JSON.stringify({ fingerprint: fp, tool })
244800
+ });
244801
+ const data = await res.json();
244802
+ if (data.allowed) return { allowed: true, tier: "free", remaining: data.remaining };
244803
+ return {
244804
+ allowed: false,
244805
+ tier: "blocked",
244806
+ reason: `Free tier limit reached (15 calls/24h). Upgrade at openkrak-web.vercel.app \u2014 $8/month unlimited.`
244807
+ };
244808
+ } catch {
244809
+ return { allowed: true, tier: "free" };
244810
+ }
244811
+ }
244812
+ function trackTokens(tokensSaved, tool) {
244813
+ const fp = getFingerprint();
244814
+ fetch(`${WORKER_URL}/v3/track-tokens`, {
244815
+ method: "POST",
244816
+ headers: { "Content-Type": "application/json" },
244817
+ body: JSON.stringify({ tokens_saved: tokensSaved, tool, fingerprint: fp, version: VERSION })
244818
+ }).catch(() => {
244819
+ });
244820
+ }
244821
+ function reportError(tool, err) {
244822
+ const message = err instanceof Error ? err.message : String(err);
244823
+ const fp = getFingerprint();
244824
+ fetch(`${WORKER_URL}/v3/telemetry`, {
244825
+ method: "POST",
244826
+ headers: { "Content-Type": "application/json" },
244827
+ body: JSON.stringify({ tool, error: message, version: VERSION, fingerprint: fp })
244828
+ }).catch(() => {
244829
+ });
244830
+ }
244831
+ function estimateTokensSaved(totalLoc, totalFiles, mahadataOutput) {
244832
+ const rawTokens = Math.round(totalLoc * 1.3 + totalFiles * 15);
244833
+ const mahadataTokens = Math.round(mahadataOutput.length / 4);
244834
+ return Math.max(0, rawTokens - mahadataTokens);
244835
+ }
244836
+
244765
244837
  // src/tools/analyze_repo.ts
244766
244838
  async function handleAnalyzeRepo(args) {
244767
244839
  const result = await runPipeline({
@@ -244800,9 +244872,11 @@ async function handleAnalyzeRepo(args) {
244800
244872
  ``,
244801
244873
  `Scan ID: ${meta?.scan_id ?? "?"}`
244802
244874
  ].filter(Boolean).join("\n");
244803
- return {
244804
- content: [{ type: "text", text: summary }]
244805
- };
244875
+ const totalLoc = Number(repo?.total_loc ?? 0);
244876
+ const totalFiles = Number(repo?.total_files ?? 0);
244877
+ const saved = estimateTokensSaved(totalLoc, totalFiles, summary);
244878
+ trackTokens(saved, "analyze_repo");
244879
+ return { content: [{ type: "text", text: summary }] };
244806
244880
  }
244807
244881
 
244808
244882
  // src/tools/get_hotspots.ts
@@ -244967,65 +245041,11 @@ async function handleGetMahadata(args) {
244967
245041
  return ` [${fi.severity ?? fi.type}] ${fi.file ?? fi.path} \u2014 ${fi.message ?? fi.description ?? ""}`;
244968
245042
  })
244969
245043
  ].filter((l) => l !== null);
244970
- return { content: [{ type: "text", text: lines.join("\n") }] };
244971
- }
244972
-
244973
- // src/license/check.ts
244974
- var import_node_crypto = require("crypto");
244975
- var import_node_os = require("os");
244976
- var WORKER_URL = "https://openkrak-license-server.openkrak.workers.dev";
244977
- var PRO_KEY = process.env.OPENKRAK_KEY;
244978
- var VERSION = "1.0.3";
244979
- function getFingerprint() {
244980
- const raw = `${(0, import_node_os.hostname)()}:${(0, import_node_os.userInfo)().username}`;
244981
- return (0, import_node_crypto.createHash)("sha256").update(raw).digest("hex").slice(0, 32);
244982
- }
244983
- async function checkLicense(tool = "unknown") {
244984
- if (PRO_KEY) {
244985
- try {
244986
- const res = await fetch(`${WORKER_URL}/v3/validate`, {
244987
- method: "POST",
244988
- headers: { "Content-Type": "application/json" },
244989
- body: JSON.stringify({ license_key: PRO_KEY })
244990
- });
244991
- const data = await res.json();
244992
- if (data.valid) return { allowed: true, tier: "pro" };
244993
- return {
244994
- allowed: false,
244995
- tier: "blocked",
244996
- reason: `Pro key invalid: ${data.reason ?? "unknown"}. Get a key at openkrak-web.vercel.app`
244997
- };
244998
- } catch {
244999
- return { allowed: true, tier: "pro" };
245000
- }
245001
- }
245002
- const fp = getFingerprint();
245003
- try {
245004
- const res = await fetch(`${WORKER_URL}/v3/free-query`, {
245005
- method: "POST",
245006
- headers: { "Content-Type": "application/json" },
245007
- body: JSON.stringify({ fingerprint: fp, tool })
245008
- });
245009
- const data = await res.json();
245010
- if (data.allowed) return { allowed: true, tier: "free", remaining: data.remaining };
245011
- return {
245012
- allowed: false,
245013
- tier: "blocked",
245014
- reason: `Free tier limit reached (15 calls/24h). Upgrade at openkrak-web.vercel.app \xE2\u20AC\u201D $8/month unlimited.`
245015
- };
245016
- } catch {
245017
- return { allowed: true, tier: "free" };
245018
- }
245019
- }
245020
- function reportError(tool, err) {
245021
- const message = err instanceof Error ? err.message : String(err);
245022
- const fp = getFingerprint();
245023
- fetch(`${WORKER_URL}/v3/telemetry`, {
245024
- method: "POST",
245025
- headers: { "Content-Type": "application/json" },
245026
- body: JSON.stringify({ tool, error: message, version: VERSION, fingerprint: fp })
245027
- }).catch(() => {
245028
- });
245044
+ const output = lines.join("\n");
245045
+ const totalLoc = Number(repo?.total_loc ?? 0);
245046
+ const saved = estimateTokensSaved(totalLoc, totalFiles, output);
245047
+ trackTokens(saved, "get_mahadata");
245048
+ return { content: [{ type: "text", text: output }] };
245029
245049
  }
245030
245050
 
245031
245051
  // src/index.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openkrak-mcp",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "description": "OpenKrak MCP Server - AI coding intelligence via Dorchester engine",
5
5
  "bin": {
6
6
  "openkrak-mcp": "./dist/index.js"