hackmyagent 0.14.1 → 0.15.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/dist/.integrity-manifest.json +1 -1
- package/dist/arp/engine/event-engine.d.ts.map +1 -1
- package/dist/arp/engine/event-engine.js +8 -6
- package/dist/arp/engine/event-engine.js.map +1 -1
- package/dist/arp/intelligence/coordinator.d.ts.map +1 -1
- package/dist/arp/intelligence/coordinator.js +17 -12
- package/dist/arp/intelligence/coordinator.js.map +1 -1
- package/dist/arp/intelligence/nanomind-l1.js +2 -2
- package/dist/arp/intelligence/nanomind-l1.js.map +1 -1
- package/dist/arp/interceptors/process.d.ts.map +1 -1
- package/dist/arp/interceptors/process.js +40 -5
- package/dist/arp/interceptors/process.js.map +1 -1
- package/dist/arp/proxy/server.d.ts +6 -0
- package/dist/arp/proxy/server.d.ts.map +1 -1
- package/dist/arp/proxy/server.js +40 -14
- package/dist/arp/proxy/server.js.map +1 -1
- package/dist/arp/telemetry/gtin.d.ts +1 -1
- package/dist/arp/telemetry/gtin.d.ts.map +1 -1
- package/dist/arp/telemetry/gtin.js +4 -0
- package/dist/arp/telemetry/gtin.js.map +1 -1
- package/dist/attack/payloads/index.d.ts +2 -1
- package/dist/attack/payloads/index.d.ts.map +1 -1
- package/dist/attack/payloads/index.js +5 -1
- package/dist/attack/payloads/index.js.map +1 -1
- package/dist/attack/payloads/policy-enforcement-integrity.d.ts +13 -0
- package/dist/attack/payloads/policy-enforcement-integrity.d.ts.map +1 -0
- package/dist/attack/payloads/policy-enforcement-integrity.js +217 -0
- package/dist/attack/payloads/policy-enforcement-integrity.js.map +1 -0
- package/dist/attack/scanner.d.ts.map +1 -1
- package/dist/attack/scanner.js +1 -0
- package/dist/attack/scanner.js.map +1 -1
- package/dist/attack/types.d.ts +1 -1
- package/dist/attack/types.d.ts.map +1 -1
- package/dist/attack/types.js +5 -0
- package/dist/attack/types.js.map +1 -1
- package/dist/attack-engine/types.d.ts +1 -1
- package/dist/attack-engine/types.d.ts.map +1 -1
- package/dist/attack-engine/types.js.map +1 -1
- package/dist/cli.js +279 -20
- package/dist/cli.js.map +1 -1
- package/dist/hardening/scanner.d.ts +18 -4
- package/dist/hardening/scanner.d.ts.map +1 -1
- package/dist/hardening/scanner.js +76 -18
- package/dist/hardening/scanner.js.map +1 -1
- package/dist/nanomind-core/inference/tme-classifier.d.ts.map +1 -1
- package/dist/nanomind-core/inference/tme-classifier.js +0 -1
- package/dist/nanomind-core/inference/tme-classifier.js.map +1 -1
- package/dist/nanomind-core/scanner-bridge.d.ts.map +1 -1
- package/dist/nanomind-core/scanner-bridge.js +8 -0
- package/dist/nanomind-core/scanner-bridge.js.map +1 -1
- package/package.json +1 -1
- package/dist/abgr/controls.d.ts +0 -35
- package/dist/abgr/controls.d.ts.map +0 -1
- package/dist/abgr/controls.js +0 -1058
- package/dist/abgr/controls.js.map +0 -1
- package/dist/abgr/detector.d.ts +0 -45
- package/dist/abgr/detector.d.ts.map +0 -1
- package/dist/abgr/detector.js +0 -175
- package/dist/abgr/detector.js.map +0 -1
- package/dist/abgr/index.d.ts +0 -24
- package/dist/abgr/index.d.ts.map +0 -1
- package/dist/abgr/index.js +0 -50
- package/dist/abgr/index.js.map +0 -1
- package/dist/abgr/scorer.d.ts +0 -36
- package/dist/abgr/scorer.d.ts.map +0 -1
- package/dist/abgr/scorer.js +0 -205
- package/dist/abgr/scorer.js.map +0 -1
- package/dist/abgr/templates.d.ts +0 -35
- package/dist/abgr/templates.d.ts.map +0 -1
- package/dist/abgr/templates.js +0 -668
- package/dist/abgr/templates.js.map +0 -1
- package/dist/abgr/tier.d.ts +0 -27
- package/dist/abgr/tier.d.ts.map +0 -1
- package/dist/abgr/tier.js +0 -115
- package/dist/abgr/tier.js.map +0 -1
- package/dist/abgr/types.d.ts +0 -59
- package/dist/abgr/types.d.ts.map +0 -1
- package/dist/abgr/types.js +0 -10
- package/dist/abgr/types.js.map +0 -1
- package/dist/agent-scan/checks.d.ts +0 -6
- package/dist/agent-scan/checks.d.ts.map +0 -1
- package/dist/agent-scan/checks.js +0 -93
- package/dist/agent-scan/checks.js.map +0 -1
- package/dist/agent-scan/index.d.ts +0 -10
- package/dist/agent-scan/index.d.ts.map +0 -1
- package/dist/agent-scan/index.js +0 -16
- package/dist/agent-scan/index.js.map +0 -1
- package/dist/agent-scan/scanner.d.ts +0 -31
- package/dist/agent-scan/scanner.d.ts.map +0 -1
- package/dist/agent-scan/scanner.js +0 -484
- package/dist/agent-scan/scanner.js.map +0 -1
- package/dist/agent-scan/types.d.ts +0 -63
- package/dist/agent-scan/types.d.ts.map +0 -1
- package/dist/agent-scan/types.js +0 -10
- package/dist/agent-scan/types.js.map +0 -1
- package/dist/hardening/llm-checks.d.ts +0 -18
- package/dist/hardening/llm-checks.d.ts.map +0 -1
- package/dist/hardening/llm-checks.js +0 -434
- package/dist/hardening/llm-checks.js.map +0 -1
- package/dist/hardening/mcp-tool-enum.d.ts +0 -45
- package/dist/hardening/mcp-tool-enum.d.ts.map +0 -1
- package/dist/hardening/mcp-tool-enum.js +0 -315
- package/dist/hardening/mcp-tool-enum.js.map +0 -1
- package/dist/hardening/shell-checks.d.ts +0 -21
- package/dist/hardening/shell-checks.d.ts.map +0 -1
- package/dist/hardening/shell-checks.js +0 -236
- package/dist/hardening/shell-checks.js.map +0 -1
- package/dist/nanomind-core/telemetry/auto-update.d.ts +0 -27
- package/dist/nanomind-core/telemetry/auto-update.d.ts.map +0 -1
- package/dist/nanomind-core/telemetry/auto-update.js +0 -129
- package/dist/nanomind-core/telemetry/auto-update.js.map +0 -1
- package/dist/nanomind-core/telemetry/client.d.ts +0 -66
- package/dist/nanomind-core/telemetry/client.d.ts.map +0 -1
- package/dist/nanomind-core/telemetry/client.js +0 -123
- package/dist/nanomind-core/telemetry/client.js.map +0 -1
- package/dist/nanomind-core/telemetry/config.d.ts +0 -33
- package/dist/nanomind-core/telemetry/config.d.ts.map +0 -1
- package/dist/nanomind-core/telemetry/config.js +0 -119
- package/dist/nanomind-core/telemetry/config.js.map +0 -1
- package/dist/nanomind-core/telemetry/index.d.ts +0 -15
- package/dist/nanomind-core/telemetry/index.d.ts.map +0 -1
- package/dist/nanomind-core/telemetry/index.js +0 -27
- package/dist/nanomind-core/telemetry/index.js.map +0 -1
- package/dist/registry/contribution.d.ts +0 -178
- package/dist/registry/contribution.d.ts.map +0 -1
- package/dist/registry/contribution.js +0 -272
- package/dist/registry/contribution.js.map +0 -1
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* NanoMind Auto-Update
|
|
4
|
-
*
|
|
5
|
-
* Checks the Registry for newer model versions on each run.
|
|
6
|
-
* Downloads and caches the latest model if available.
|
|
7
|
-
* Never blocks: if check/download fails, use the cached version.
|
|
8
|
-
*/
|
|
9
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
-
}
|
|
15
|
-
Object.defineProperty(o, k2, desc);
|
|
16
|
-
}) : (function(o, m, k, k2) {
|
|
17
|
-
if (k2 === undefined) k2 = k;
|
|
18
|
-
o[k2] = m[k];
|
|
19
|
-
}));
|
|
20
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
-
}) : function(o, v) {
|
|
23
|
-
o["default"] = v;
|
|
24
|
-
});
|
|
25
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
26
|
-
var ownKeys = function(o) {
|
|
27
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
28
|
-
var ar = [];
|
|
29
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
30
|
-
return ar;
|
|
31
|
-
};
|
|
32
|
-
return ownKeys(o);
|
|
33
|
-
};
|
|
34
|
-
return function (mod) {
|
|
35
|
-
if (mod && mod.__esModule) return mod;
|
|
36
|
-
var result = {};
|
|
37
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
38
|
-
__setModuleDefault(result, mod);
|
|
39
|
-
return result;
|
|
40
|
-
};
|
|
41
|
-
})();
|
|
42
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
-
exports.checkForUpdate = checkForUpdate;
|
|
44
|
-
exports.downloadModel = downloadModel;
|
|
45
|
-
const config_js_1 = require("./config.js");
|
|
46
|
-
const fs = __importStar(require("fs"));
|
|
47
|
-
const path = __importStar(require("path"));
|
|
48
|
-
const os = __importStar(require("os"));
|
|
49
|
-
const MODEL_CACHE_DIR = path.join(os.homedir(), '.nanomind', 'models');
|
|
50
|
-
const CHECK_INTERVAL_MS = 60 * 60 * 1000; // 1 hour between checks
|
|
51
|
-
const LAST_CHECK_FILE = path.join(MODEL_CACHE_DIR, '.last-version-check');
|
|
52
|
-
const UPDATE_TIMEOUT_MS = 5000;
|
|
53
|
-
/**
|
|
54
|
-
* Check if a newer model version is available.
|
|
55
|
-
* Returns null if check fails or no update available.
|
|
56
|
-
* Respects CHECK_INTERVAL_MS to avoid hammering the registry.
|
|
57
|
-
*/
|
|
58
|
-
async function checkForUpdate(currentVersion, config) {
|
|
59
|
-
// Rate-limit checks.
|
|
60
|
-
if (!shouldCheck())
|
|
61
|
-
return null;
|
|
62
|
-
const cfg = config || (0, config_js_1.loadConfig)('unknown');
|
|
63
|
-
try {
|
|
64
|
-
const controller = new AbortController();
|
|
65
|
-
const timeout = setTimeout(() => controller.abort(), UPDATE_TIMEOUT_MS);
|
|
66
|
-
const response = await fetch(`${cfg.registryUrl}/api/v1/nanomind/latest`, {
|
|
67
|
-
signal: controller.signal,
|
|
68
|
-
});
|
|
69
|
-
clearTimeout(timeout);
|
|
70
|
-
if (!response.ok)
|
|
71
|
-
return null;
|
|
72
|
-
const info = (await response.json());
|
|
73
|
-
recordCheck();
|
|
74
|
-
// Compare versions (simple string comparison for semver).
|
|
75
|
-
if (info.version > currentVersion) {
|
|
76
|
-
return info;
|
|
77
|
-
}
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
catch {
|
|
81
|
-
return null;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Download and cache a new model version.
|
|
86
|
-
* Returns the local path to the downloaded model, or null on failure.
|
|
87
|
-
*/
|
|
88
|
-
async function downloadModel(info) {
|
|
89
|
-
try {
|
|
90
|
-
if (!fs.existsSync(MODEL_CACHE_DIR)) {
|
|
91
|
-
fs.mkdirSync(MODEL_CACHE_DIR, { recursive: true });
|
|
92
|
-
}
|
|
93
|
-
const versionDir = path.join(MODEL_CACHE_DIR, `v${info.version}`);
|
|
94
|
-
if (fs.existsSync(versionDir)) {
|
|
95
|
-
// Already downloaded.
|
|
96
|
-
return versionDir;
|
|
97
|
-
}
|
|
98
|
-
// Download would happen here. In production, this downloads from
|
|
99
|
-
// HuggingFace or the Registry CDN. For now, return the path where
|
|
100
|
-
// the model would be cached.
|
|
101
|
-
return null;
|
|
102
|
-
}
|
|
103
|
-
catch {
|
|
104
|
-
return null;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
function shouldCheck() {
|
|
108
|
-
try {
|
|
109
|
-
if (!fs.existsSync(LAST_CHECK_FILE))
|
|
110
|
-
return true;
|
|
111
|
-
const lastCheck = parseInt(fs.readFileSync(LAST_CHECK_FILE, 'utf-8'), 10);
|
|
112
|
-
return Date.now() - lastCheck > CHECK_INTERVAL_MS;
|
|
113
|
-
}
|
|
114
|
-
catch {
|
|
115
|
-
return true;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
function recordCheck() {
|
|
119
|
-
try {
|
|
120
|
-
if (!fs.existsSync(MODEL_CACHE_DIR)) {
|
|
121
|
-
fs.mkdirSync(MODEL_CACHE_DIR, { recursive: true });
|
|
122
|
-
}
|
|
123
|
-
fs.writeFileSync(LAST_CHECK_FILE, Date.now().toString());
|
|
124
|
-
}
|
|
125
|
-
catch {
|
|
126
|
-
// Non-fatal.
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
//# sourceMappingURL=auto-update.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auto-update.js","sourceRoot":"","sources":["../../../src/nanomind-core/telemetry/auto-update.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* NanoMind Telemetry Client
|
|
3
|
-
*
|
|
4
|
-
* Sends anonymized classification stats (Tier 1) or labeled feedback (Tier 2)
|
|
5
|
-
* to the Registry. All submissions are fire-and-forget with a 3-second timeout.
|
|
6
|
-
* Telemetry failures never break the tool.
|
|
7
|
-
*/
|
|
8
|
-
import { TelemetryConfig } from './config.js';
|
|
9
|
-
/** Tier 1: Anonymous classification stats. NO content, NO filenames, NO identity. */
|
|
10
|
-
export interface ClassificationStat {
|
|
11
|
-
/** Content type (e.g., 'skill', 'mcp_config', 'soul', 'system_prompt') */
|
|
12
|
-
contentType: string;
|
|
13
|
-
/** SHA-256 hash of the content (for dedup, not identification) */
|
|
14
|
-
contentHash: string;
|
|
15
|
-
/** Classification result (e.g., 'injection', 'benign') */
|
|
16
|
-
classification: string;
|
|
17
|
-
/** Model confidence 0.0-1.0 */
|
|
18
|
-
confidence: number;
|
|
19
|
-
/** Scan verdict: 'malicious' | 'benign' | 'unknown' */
|
|
20
|
-
verdict: string;
|
|
21
|
-
/** NanoMind model version used */
|
|
22
|
-
modelVersion: string;
|
|
23
|
-
/** Tool identifier (e.g., 'hackmyagent', 'oasb', 'ai-trust') */
|
|
24
|
-
toolId: string;
|
|
25
|
-
/** Timestamp (ISO 8601) */
|
|
26
|
-
timestamp: string;
|
|
27
|
-
}
|
|
28
|
-
/** Tier 2: Labeled feedback for retraining. Includes content. */
|
|
29
|
-
export interface LabeledFeedback {
|
|
30
|
-
/** The artifact content */
|
|
31
|
-
content: string;
|
|
32
|
-
/** Content type */
|
|
33
|
-
contentType: string;
|
|
34
|
-
/** NanoMind's classification */
|
|
35
|
-
modelClassification: string;
|
|
36
|
-
/** Model confidence */
|
|
37
|
-
modelConfidence: number;
|
|
38
|
-
/** User's corrected label (if different) */
|
|
39
|
-
correctedLabel: string | null;
|
|
40
|
-
/** Whether the user confirmed the model's label */
|
|
41
|
-
confirmed: boolean;
|
|
42
|
-
/** Model version */
|
|
43
|
-
modelVersion: string;
|
|
44
|
-
/** Tool ID */
|
|
45
|
-
toolId: string;
|
|
46
|
-
/** Timestamp */
|
|
47
|
-
timestamp: string;
|
|
48
|
-
}
|
|
49
|
-
/** Hash content for Tier 1 stats (no raw content leaves the machine). */
|
|
50
|
-
export declare function hashContent(content: string): string;
|
|
51
|
-
/**
|
|
52
|
-
* Submit Tier 1 anonymous stats to the Registry.
|
|
53
|
-
* Fire-and-forget: never throws, never blocks for more than 3 seconds.
|
|
54
|
-
*/
|
|
55
|
-
export declare function submitStats(stats: ClassificationStat[], config?: TelemetryConfig): Promise<boolean>;
|
|
56
|
-
/**
|
|
57
|
-
* Submit Tier 2 labeled feedback to the Registry.
|
|
58
|
-
* Fire-and-forget: never throws, never blocks for more than 3 seconds.
|
|
59
|
-
*/
|
|
60
|
-
export declare function submitFeedback(feedback: LabeledFeedback[], config?: TelemetryConfig): Promise<boolean>;
|
|
61
|
-
/**
|
|
62
|
-
* Create a ClassificationStat from a NanoMind scan result.
|
|
63
|
-
* Convenience function for consumers.
|
|
64
|
-
*/
|
|
65
|
-
export declare function createStat(content: string, contentType: string, classification: string, confidence: number, verdict: string, modelVersion: string, toolId: string): ClassificationStat;
|
|
66
|
-
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/nanomind-core/telemetry/client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,eAAe,EAA6B,MAAM,aAAa,CAAC;AAGzE,qFAAqF;AACrF,MAAM,WAAW,kBAAkB;IACjC,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,cAAc,EAAE,MAAM,CAAC;IACvB,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,iEAAiE;AACjE,MAAM,WAAW,eAAe;IAC9B,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,uBAAuB;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,4CAA4C;IAC5C,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,mDAAmD;IACnD,SAAS,EAAE,OAAO,CAAC;IACnB,oBAAoB;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc;IACd,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,yEAAyE;AACzE,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,kBAAkB,EAAE,EAC3B,MAAM,CAAC,EAAE,eAAe,GACvB,OAAO,CAAC,OAAO,CAAC,CAsBlB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,eAAe,EAAE,EAC3B,MAAM,CAAC,EAAE,eAAe,GACvB,OAAO,CAAC,OAAO,CAAC,CAqBlB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GACb,kBAAkB,CAWpB"}
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* NanoMind Telemetry Client
|
|
4
|
-
*
|
|
5
|
-
* Sends anonymized classification stats (Tier 1) or labeled feedback (Tier 2)
|
|
6
|
-
* to the Registry. All submissions are fire-and-forget with a 3-second timeout.
|
|
7
|
-
* Telemetry failures never break the tool.
|
|
8
|
-
*/
|
|
9
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
-
}
|
|
15
|
-
Object.defineProperty(o, k2, desc);
|
|
16
|
-
}) : (function(o, m, k, k2) {
|
|
17
|
-
if (k2 === undefined) k2 = k;
|
|
18
|
-
o[k2] = m[k];
|
|
19
|
-
}));
|
|
20
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
-
}) : function(o, v) {
|
|
23
|
-
o["default"] = v;
|
|
24
|
-
});
|
|
25
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
26
|
-
var ownKeys = function(o) {
|
|
27
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
28
|
-
var ar = [];
|
|
29
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
30
|
-
return ar;
|
|
31
|
-
};
|
|
32
|
-
return ownKeys(o);
|
|
33
|
-
};
|
|
34
|
-
return function (mod) {
|
|
35
|
-
if (mod && mod.__esModule) return mod;
|
|
36
|
-
var result = {};
|
|
37
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
38
|
-
__setModuleDefault(result, mod);
|
|
39
|
-
return result;
|
|
40
|
-
};
|
|
41
|
-
})();
|
|
42
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
-
exports.hashContent = hashContent;
|
|
44
|
-
exports.submitStats = submitStats;
|
|
45
|
-
exports.submitFeedback = submitFeedback;
|
|
46
|
-
exports.createStat = createStat;
|
|
47
|
-
const config_js_1 = require("./config.js");
|
|
48
|
-
const crypto = __importStar(require("crypto"));
|
|
49
|
-
const TELEMETRY_TIMEOUT_MS = 3000;
|
|
50
|
-
/** Hash content for Tier 1 stats (no raw content leaves the machine). */
|
|
51
|
-
function hashContent(content) {
|
|
52
|
-
return crypto.createHash('sha256').update(content).digest('hex');
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Submit Tier 1 anonymous stats to the Registry.
|
|
56
|
-
* Fire-and-forget: never throws, never blocks for more than 3 seconds.
|
|
57
|
-
*/
|
|
58
|
-
async function submitStats(stats, config) {
|
|
59
|
-
const cfg = config || (0, config_js_1.loadConfig)('unknown');
|
|
60
|
-
if (cfg.tier < config_js_1.TelemetryTier.AnonymousStats)
|
|
61
|
-
return false;
|
|
62
|
-
if (stats.length === 0)
|
|
63
|
-
return true;
|
|
64
|
-
try {
|
|
65
|
-
const controller = new AbortController();
|
|
66
|
-
const timeout = setTimeout(() => controller.abort(), TELEMETRY_TIMEOUT_MS);
|
|
67
|
-
const response = await fetch(`${cfg.registryUrl}/api/v1/nanomind/telemetry`, {
|
|
68
|
-
method: 'POST',
|
|
69
|
-
headers: { 'Content-Type': 'application/json' },
|
|
70
|
-
body: JSON.stringify({ stats, toolId: cfg.toolId }),
|
|
71
|
-
signal: controller.signal,
|
|
72
|
-
});
|
|
73
|
-
clearTimeout(timeout);
|
|
74
|
-
return response.ok;
|
|
75
|
-
}
|
|
76
|
-
catch {
|
|
77
|
-
// Telemetry failure is never an error for the user.
|
|
78
|
-
return false;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Submit Tier 2 labeled feedback to the Registry.
|
|
83
|
-
* Fire-and-forget: never throws, never blocks for more than 3 seconds.
|
|
84
|
-
*/
|
|
85
|
-
async function submitFeedback(feedback, config) {
|
|
86
|
-
const cfg = config || (0, config_js_1.loadConfig)('unknown');
|
|
87
|
-
if (cfg.tier < config_js_1.TelemetryTier.LabeledFeedback)
|
|
88
|
-
return false;
|
|
89
|
-
if (feedback.length === 0)
|
|
90
|
-
return true;
|
|
91
|
-
try {
|
|
92
|
-
const controller = new AbortController();
|
|
93
|
-
const timeout = setTimeout(() => controller.abort(), TELEMETRY_TIMEOUT_MS);
|
|
94
|
-
const response = await fetch(`${cfg.registryUrl}/api/v1/nanomind/feedback`, {
|
|
95
|
-
method: 'POST',
|
|
96
|
-
headers: { 'Content-Type': 'application/json' },
|
|
97
|
-
body: JSON.stringify({ feedback, toolId: cfg.toolId }),
|
|
98
|
-
signal: controller.signal,
|
|
99
|
-
});
|
|
100
|
-
clearTimeout(timeout);
|
|
101
|
-
return response.ok;
|
|
102
|
-
}
|
|
103
|
-
catch {
|
|
104
|
-
return false;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Create a ClassificationStat from a NanoMind scan result.
|
|
109
|
-
* Convenience function for consumers.
|
|
110
|
-
*/
|
|
111
|
-
function createStat(content, contentType, classification, confidence, verdict, modelVersion, toolId) {
|
|
112
|
-
return {
|
|
113
|
-
contentType,
|
|
114
|
-
contentHash: hashContent(content),
|
|
115
|
-
classification,
|
|
116
|
-
confidence,
|
|
117
|
-
verdict,
|
|
118
|
-
modelVersion,
|
|
119
|
-
toolId,
|
|
120
|
-
timestamp: new Date().toISOString(),
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
//# sourceMappingURL=client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/nanomind-core/telemetry/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* NanoMind Telemetry Configuration
|
|
3
|
-
*
|
|
4
|
-
* Three tiers:
|
|
5
|
-
* Tier 0 (off): default on first install, fully local
|
|
6
|
-
* Tier 1 (anonymous stats, opt-in): classification result, confidence,
|
|
7
|
-
* content type, content hash, scan verdict, model version, tool ID.
|
|
8
|
-
* NO content, NO filenames, NO user identity.
|
|
9
|
-
* Tier 2 (labeled feedback, opt-in): artifact content + user corrections
|
|
10
|
-
* for retraining.
|
|
11
|
-
*/
|
|
12
|
-
export declare enum TelemetryTier {
|
|
13
|
-
Off = 0,
|
|
14
|
-
AnonymousStats = 1,
|
|
15
|
-
LabeledFeedback = 2
|
|
16
|
-
}
|
|
17
|
-
export interface TelemetryConfig {
|
|
18
|
-
tier: TelemetryTier;
|
|
19
|
-
registryUrl: string;
|
|
20
|
-
toolId: string;
|
|
21
|
-
consentedAt: string | null;
|
|
22
|
-
modelVersion: string;
|
|
23
|
-
}
|
|
24
|
-
export declare function getDefaultConfig(toolId: string): TelemetryConfig;
|
|
25
|
-
/** Load telemetry config from disk. Returns default (Tier 0) if not found. */
|
|
26
|
-
export declare function loadConfig(toolId: string): TelemetryConfig;
|
|
27
|
-
/** Save telemetry config to disk. */
|
|
28
|
-
export declare function saveConfig(config: TelemetryConfig): void;
|
|
29
|
-
/** Set the telemetry tier and record consent timestamp. */
|
|
30
|
-
export declare function setTier(toolId: string, tier: TelemetryTier): TelemetryConfig;
|
|
31
|
-
/** Check if telemetry is enabled (Tier 1 or higher). */
|
|
32
|
-
export declare function isEnabled(toolId: string): boolean;
|
|
33
|
-
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/nanomind-core/telemetry/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,oBAAY,aAAa;IACvB,GAAG,IAAI;IACP,cAAc,IAAI;IAClB,eAAe,IAAI;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,aAAa,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;CACtB;AAMD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAQhE;AAED,8EAA8E;AAC9E,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAe1D;AAED,qCAAqC;AACrC,wBAAgB,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CASxD;AAED,2DAA2D;AAC3D,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,eAAe,CAQ5E;AAED,wDAAwD;AACxD,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAGjD"}
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* NanoMind Telemetry Configuration
|
|
4
|
-
*
|
|
5
|
-
* Three tiers:
|
|
6
|
-
* Tier 0 (off): default on first install, fully local
|
|
7
|
-
* Tier 1 (anonymous stats, opt-in): classification result, confidence,
|
|
8
|
-
* content type, content hash, scan verdict, model version, tool ID.
|
|
9
|
-
* NO content, NO filenames, NO user identity.
|
|
10
|
-
* Tier 2 (labeled feedback, opt-in): artifact content + user corrections
|
|
11
|
-
* for retraining.
|
|
12
|
-
*/
|
|
13
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
-
if (k2 === undefined) k2 = k;
|
|
15
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
-
}
|
|
19
|
-
Object.defineProperty(o, k2, desc);
|
|
20
|
-
}) : (function(o, m, k, k2) {
|
|
21
|
-
if (k2 === undefined) k2 = k;
|
|
22
|
-
o[k2] = m[k];
|
|
23
|
-
}));
|
|
24
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
-
}) : function(o, v) {
|
|
27
|
-
o["default"] = v;
|
|
28
|
-
});
|
|
29
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
30
|
-
var ownKeys = function(o) {
|
|
31
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
32
|
-
var ar = [];
|
|
33
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
34
|
-
return ar;
|
|
35
|
-
};
|
|
36
|
-
return ownKeys(o);
|
|
37
|
-
};
|
|
38
|
-
return function (mod) {
|
|
39
|
-
if (mod && mod.__esModule) return mod;
|
|
40
|
-
var result = {};
|
|
41
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
42
|
-
__setModuleDefault(result, mod);
|
|
43
|
-
return result;
|
|
44
|
-
};
|
|
45
|
-
})();
|
|
46
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
-
exports.TelemetryTier = void 0;
|
|
48
|
-
exports.getDefaultConfig = getDefaultConfig;
|
|
49
|
-
exports.loadConfig = loadConfig;
|
|
50
|
-
exports.saveConfig = saveConfig;
|
|
51
|
-
exports.setTier = setTier;
|
|
52
|
-
exports.isEnabled = isEnabled;
|
|
53
|
-
const fs = __importStar(require("fs"));
|
|
54
|
-
const path = __importStar(require("path"));
|
|
55
|
-
const os = __importStar(require("os"));
|
|
56
|
-
var TelemetryTier;
|
|
57
|
-
(function (TelemetryTier) {
|
|
58
|
-
TelemetryTier[TelemetryTier["Off"] = 0] = "Off";
|
|
59
|
-
TelemetryTier[TelemetryTier["AnonymousStats"] = 1] = "AnonymousStats";
|
|
60
|
-
TelemetryTier[TelemetryTier["LabeledFeedback"] = 2] = "LabeledFeedback";
|
|
61
|
-
})(TelemetryTier || (exports.TelemetryTier = TelemetryTier = {}));
|
|
62
|
-
const DEFAULT_REGISTRY_URL = 'https://api.oa2a.org';
|
|
63
|
-
const CONFIG_DIR = path.join(os.homedir(), '.opena2a');
|
|
64
|
-
const CONFIG_FILE = path.join(CONFIG_DIR, 'nanomind-telemetry.json');
|
|
65
|
-
function getDefaultConfig(toolId) {
|
|
66
|
-
return {
|
|
67
|
-
tier: TelemetryTier.Off,
|
|
68
|
-
registryUrl: process.env.NANOMIND_REGISTRY_URL || DEFAULT_REGISTRY_URL,
|
|
69
|
-
toolId,
|
|
70
|
-
consentedAt: null,
|
|
71
|
-
modelVersion: '0.5.0',
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
/** Load telemetry config from disk. Returns default (Tier 0) if not found. */
|
|
75
|
-
function loadConfig(toolId) {
|
|
76
|
-
try {
|
|
77
|
-
if (fs.existsSync(CONFIG_FILE)) {
|
|
78
|
-
const raw = fs.readFileSync(CONFIG_FILE, 'utf-8');
|
|
79
|
-
const stored = JSON.parse(raw);
|
|
80
|
-
return {
|
|
81
|
-
...getDefaultConfig(toolId),
|
|
82
|
-
...stored,
|
|
83
|
-
toolId, // always use the current tool's ID
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
catch {
|
|
88
|
-
// Corrupted config: fall back to default.
|
|
89
|
-
}
|
|
90
|
-
return getDefaultConfig(toolId);
|
|
91
|
-
}
|
|
92
|
-
/** Save telemetry config to disk. */
|
|
93
|
-
function saveConfig(config) {
|
|
94
|
-
try {
|
|
95
|
-
if (!fs.existsSync(CONFIG_DIR)) {
|
|
96
|
-
fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
97
|
-
}
|
|
98
|
-
fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2));
|
|
99
|
-
}
|
|
100
|
-
catch {
|
|
101
|
-
// Non-fatal: telemetry config write failure should never break the tool.
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
/** Set the telemetry tier and record consent timestamp. */
|
|
105
|
-
function setTier(toolId, tier) {
|
|
106
|
-
const config = loadConfig(toolId);
|
|
107
|
-
config.tier = tier;
|
|
108
|
-
if (tier > TelemetryTier.Off && !config.consentedAt) {
|
|
109
|
-
config.consentedAt = new Date().toISOString();
|
|
110
|
-
}
|
|
111
|
-
saveConfig(config);
|
|
112
|
-
return config;
|
|
113
|
-
}
|
|
114
|
-
/** Check if telemetry is enabled (Tier 1 or higher). */
|
|
115
|
-
function isEnabled(toolId) {
|
|
116
|
-
const config = loadConfig(toolId);
|
|
117
|
-
return config.tier >= TelemetryTier.AnonymousStats;
|
|
118
|
-
}
|
|
119
|
-
//# sourceMappingURL=config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/nanomind-core/telemetry/config.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBH,4CAQC;AAGD,gCAeC;AAGD,gCASC;AAGD,0BAQC;AAGD,8BAGC;AA7ED,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAEzB,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,+CAAO,CAAA;IACP,qEAAkB,CAAA;IAClB,uEAAmB,CAAA;AACrB,CAAC,EAJW,aAAa,6BAAb,aAAa,QAIxB;AAUD,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AACpD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AACvD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;AAErE,SAAgB,gBAAgB,CAAC,MAAc;IAC7C,OAAO;QACL,IAAI,EAAE,aAAa,CAAC,GAAG;QACvB,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,oBAAoB;QACtE,MAAM;QACN,WAAW,EAAE,IAAI;QACjB,YAAY,EAAE,OAAO;KACtB,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,SAAgB,UAAU,CAAC,MAAc;IACvC,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA6B,CAAC;YAC3D,OAAO;gBACL,GAAG,gBAAgB,CAAC,MAAM,CAAC;gBAC3B,GAAG,MAAM;gBACT,MAAM,EAAE,mCAAmC;aAC5C,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,0CAA0C;IAC5C,CAAC;IACD,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC;AAED,qCAAqC;AACrC,SAAgB,UAAU,CAAC,MAAuB;IAChD,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;IAC3E,CAAC;AACH,CAAC;AAED,2DAA2D;AAC3D,SAAgB,OAAO,CAAC,MAAc,EAAE,IAAmB;IACzD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,IAAI,IAAI,GAAG,aAAa,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACpD,MAAM,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAChD,CAAC;IACD,UAAU,CAAC,MAAM,CAAC,CAAC;IACnB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,wDAAwD;AACxD,SAAgB,SAAS,CAAC,MAAc;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAClC,OAAO,MAAM,CAAC,IAAI,IAAI,aAAa,CAAC,cAAc,CAAC;AACrD,CAAC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* NanoMind Telemetry - Shared library for all consumers.
|
|
3
|
-
*
|
|
4
|
-
* Usage:
|
|
5
|
-
* import { telemetry } from './nanomind-core/telemetry/index.js';
|
|
6
|
-
* telemetry.loadConfig('hackmyagent');
|
|
7
|
-
* telemetry.submitStats([...]);
|
|
8
|
-
*/
|
|
9
|
-
export { TelemetryTier, loadConfig, saveConfig, setTier, isEnabled, getDefaultConfig, } from './config.js';
|
|
10
|
-
export type { TelemetryConfig } from './config.js';
|
|
11
|
-
export { submitStats, submitFeedback, createStat, hashContent, } from './client.js';
|
|
12
|
-
export type { ClassificationStat, LabeledFeedback, } from './client.js';
|
|
13
|
-
export { checkForUpdate, downloadModel, } from './auto-update.js';
|
|
14
|
-
export type { ModelVersionInfo } from './auto-update.js';
|
|
15
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/nanomind-core/telemetry/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,aAAa,EACb,UAAU,EACV,UAAU,EACV,OAAO,EACP,SAAS,EACT,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EACL,WAAW,EACX,cAAc,EACd,UAAU,EACV,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,kBAAkB,EAClB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,cAAc,EACd,aAAa,GACd,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* NanoMind Telemetry - Shared library for all consumers.
|
|
4
|
-
*
|
|
5
|
-
* Usage:
|
|
6
|
-
* import { telemetry } from './nanomind-core/telemetry/index.js';
|
|
7
|
-
* telemetry.loadConfig('hackmyagent');
|
|
8
|
-
* telemetry.submitStats([...]);
|
|
9
|
-
*/
|
|
10
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
-
exports.downloadModel = exports.checkForUpdate = exports.hashContent = exports.createStat = exports.submitFeedback = exports.submitStats = exports.getDefaultConfig = exports.isEnabled = exports.setTier = exports.saveConfig = exports.loadConfig = exports.TelemetryTier = void 0;
|
|
12
|
-
var config_js_1 = require("./config.js");
|
|
13
|
-
Object.defineProperty(exports, "TelemetryTier", { enumerable: true, get: function () { return config_js_1.TelemetryTier; } });
|
|
14
|
-
Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return config_js_1.loadConfig; } });
|
|
15
|
-
Object.defineProperty(exports, "saveConfig", { enumerable: true, get: function () { return config_js_1.saveConfig; } });
|
|
16
|
-
Object.defineProperty(exports, "setTier", { enumerable: true, get: function () { return config_js_1.setTier; } });
|
|
17
|
-
Object.defineProperty(exports, "isEnabled", { enumerable: true, get: function () { return config_js_1.isEnabled; } });
|
|
18
|
-
Object.defineProperty(exports, "getDefaultConfig", { enumerable: true, get: function () { return config_js_1.getDefaultConfig; } });
|
|
19
|
-
var client_js_1 = require("./client.js");
|
|
20
|
-
Object.defineProperty(exports, "submitStats", { enumerable: true, get: function () { return client_js_1.submitStats; } });
|
|
21
|
-
Object.defineProperty(exports, "submitFeedback", { enumerable: true, get: function () { return client_js_1.submitFeedback; } });
|
|
22
|
-
Object.defineProperty(exports, "createStat", { enumerable: true, get: function () { return client_js_1.createStat; } });
|
|
23
|
-
Object.defineProperty(exports, "hashContent", { enumerable: true, get: function () { return client_js_1.hashContent; } });
|
|
24
|
-
var auto_update_js_1 = require("./auto-update.js");
|
|
25
|
-
Object.defineProperty(exports, "checkForUpdate", { enumerable: true, get: function () { return auto_update_js_1.checkForUpdate; } });
|
|
26
|
-
Object.defineProperty(exports, "downloadModel", { enumerable: true, get: function () { return auto_update_js_1.downloadModel; } });
|
|
27
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/nanomind-core/telemetry/index.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAEH,yCAOqB;AANnB,0GAAA,aAAa,OAAA;AACb,uGAAA,UAAU,OAAA;AACV,uGAAA,UAAU,OAAA;AACV,oGAAA,OAAO,OAAA;AACP,sGAAA,SAAS,OAAA;AACT,6GAAA,gBAAgB,OAAA;AAIlB,yCAKqB;AAJnB,wGAAA,WAAW,OAAA;AACX,2GAAA,cAAc,OAAA;AACd,uGAAA,UAAU,OAAA;AACV,wGAAA,WAAW,OAAA;AAOb,mDAG0B;AAFxB,gHAAA,cAAc,OAAA;AACd,+GAAA,aAAa,OAAA"}
|