monora-ai 2.1.0 → 2.1.4
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 +339 -158
- package/dist/aims_governance.d.ts +238 -0
- package/dist/aims_governance.d.ts.map +1 -0
- package/dist/aims_governance.js +922 -0
- package/dist/alerts.d.ts +16 -0
- package/dist/alerts.d.ts.map +1 -1
- package/dist/alerts.js +16 -0
- package/dist/api.d.ts +6 -0
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +6 -0
- package/dist/assessment.d.ts +85 -0
- package/dist/assessment.d.ts.map +1 -1
- package/dist/assessment.js +525 -13
- package/dist/attribution.d.ts +44 -3
- package/dist/attribution.d.ts.map +1 -1
- package/dist/attribution.js +197 -10
- package/dist/autodetect.d.ts +68 -0
- package/dist/autodetect.d.ts.map +1 -1
- package/dist/autodetect.js +639 -0
- package/dist/bias.d.ts +130 -0
- package/dist/bias.d.ts.map +1 -0
- package/dist/bias.js +223 -0
- package/dist/cli/diagnostics.d.ts +5 -1
- package/dist/cli/diagnostics.d.ts.map +1 -1
- package/dist/cli/diagnostics.js +23 -6
- package/dist/cli/doctor.d.ts +25 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +381 -0
- package/dist/cli/fix.d.ts +16 -0
- package/dist/cli/fix.d.ts.map +1 -0
- package/dist/cli/fix.js +284 -0
- package/dist/cli/init.d.ts +57 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +205 -0
- package/dist/cli.js +1564 -177
- package/dist/complianceConsolidation.d.ts +17 -0
- package/dist/complianceConsolidation.d.ts.map +1 -0
- package/dist/complianceConsolidation.js +68 -0
- package/dist/complianceTargets.d.ts +111 -0
- package/dist/complianceTargets.d.ts.map +1 -0
- package/dist/complianceTargets.js +521 -0
- package/dist/config.d.ts +261 -16
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +381 -32
- package/dist/config_migrations.d.ts.map +1 -1
- package/dist/config_migrations.js +38 -1
- package/dist/config_schema.d.ts +2490 -1035
- package/dist/config_schema.d.ts.map +1 -1
- package/dist/config_schema.js +233 -64
- package/dist/context.d.ts +34 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +118 -7
- package/dist/control_backbone.d.ts +128 -0
- package/dist/control_backbone.d.ts.map +1 -0
- package/dist/control_backbone.js +826 -0
- package/dist/data-governance.d.ts +187 -0
- package/dist/data-governance.d.ts.map +1 -0
- package/dist/data-governance.js +424 -0
- package/dist/dataResidency.d.ts +44 -0
- package/dist/dataResidency.d.ts.map +1 -0
- package/dist/dataResidency.js +203 -0
- package/dist/dispatcher.d.ts.map +1 -1
- package/dist/dispatcher.js +17 -5
- package/dist/evidence_store.d.ts +103 -0
- package/dist/evidence_store.d.ts.map +1 -0
- package/dist/evidence_store.js +459 -0
- package/dist/executiveSummary.d.ts +15 -0
- package/dist/executiveSummary.d.ts.map +1 -1
- package/dist/executiveSummary.js +135 -22
- package/dist/identity.d.ts +143 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +231 -0
- package/dist/impact-assessment.d.ts +350 -0
- package/dist/impact-assessment.d.ts.map +1 -0
- package/dist/impact-assessment.js +580 -0
- package/dist/index.d.ts +21 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +254 -5
- package/dist/instrumentation.d.ts +1 -1
- package/dist/instrumentation.d.ts.map +1 -1
- package/dist/instrumentation.js +123 -22
- package/dist/integrations/anthropic.d.ts +3 -0
- package/dist/integrations/anthropic.d.ts.map +1 -1
- package/dist/integrations/anthropic.js +282 -80
- package/dist/integrations/governance.d.ts +33 -0
- package/dist/integrations/governance.d.ts.map +1 -0
- package/dist/integrations/governance.js +208 -0
- package/dist/integrations/langchain.d.ts +4 -0
- package/dist/integrations/langchain.d.ts.map +1 -1
- package/dist/integrations/langchain.js +362 -142
- package/dist/integrations/openai.d.ts +9 -0
- package/dist/integrations/openai.d.ts.map +1 -1
- package/dist/integrations/openai.js +673 -73
- package/dist/iso42001_consolidation.d.ts +16 -0
- package/dist/iso42001_consolidation.d.ts.map +1 -0
- package/dist/iso42001_consolidation.js +413 -0
- package/dist/iso42001_workflows.d.ts +263 -0
- package/dist/iso42001_workflows.d.ts.map +1 -0
- package/dist/iso42001_workflows.js +781 -0
- package/dist/lifecycle.d.ts +299 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +624 -0
- package/dist/lineage.d.ts +2 -2
- package/dist/lineage.d.ts.map +1 -1
- package/dist/lineage.js +9 -16
- package/dist/middleware/express.d.ts.map +1 -1
- package/dist/middleware/express.js +18 -3
- package/dist/middleware/nextjs.js +2 -2
- package/dist/model.d.ts +143 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +371 -0
- package/dist/onboarding.d.ts +42 -0
- package/dist/onboarding.d.ts.map +1 -0
- package/dist/onboarding.js +1075 -0
- package/dist/oversight.d.ts +264 -0
- package/dist/oversight.d.ts.map +1 -0
- package/dist/oversight.js +497 -0
- package/dist/presets.js +7 -7
- package/dist/quotas.d.ts +171 -0
- package/dist/quotas.d.ts.map +1 -0
- package/dist/quotas.js +259 -0
- package/dist/register.d.ts +13 -0
- package/dist/register.d.ts.map +1 -0
- package/dist/register.js +99 -0
- package/dist/registry.d.ts +1 -0
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +7 -0
- package/dist/registryData.json +43 -6
- package/dist/report.d.ts +2 -1
- package/dist/report.d.ts.map +1 -1
- package/dist/report.js +189 -2
- package/dist/reporting.d.ts +125 -0
- package/dist/reporting.d.ts.map +1 -1
- package/dist/reporting.js +192 -2
- package/dist/resources.d.ts +285 -0
- package/dist/resources.d.ts.map +1 -0
- package/dist/resources.js +643 -0
- package/dist/risk.d.ts +120 -0
- package/dist/risk.d.ts.map +1 -0
- package/dist/risk.js +220 -0
- package/dist/runtime.d.ts +74 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +416 -18
- package/dist/schemaInference.d.ts +92 -0
- package/dist/schemaInference.d.ts.map +1 -0
- package/dist/schemaInference.js +466 -0
- package/dist/schema_validation.js +2 -2
- package/dist/schemas/config.schema.json +118 -4
- package/dist/security_report.js +4 -4
- package/dist/signing.d.ts +1 -1
- package/dist/signing.d.ts.map +1 -1
- package/dist/signing.js +4 -0
- package/dist/sinks/file.d.ts +19 -1
- package/dist/sinks/file.d.ts.map +1 -1
- package/dist/sinks/file.js +82 -13
- package/dist/sinks/https.d.ts +10 -0
- package/dist/sinks/https.d.ts.map +1 -1
- package/dist/sinks/https.js +76 -16
- package/dist/sinks/stdout.d.ts +1 -0
- package/dist/sinks/stdout.d.ts.map +1 -1
- package/dist/sinks/stdout.js +12 -1
- package/dist/spec.d.ts +159 -0
- package/dist/spec.d.ts.map +1 -0
- package/dist/spec.js +391 -0
- package/dist/stakeholders.d.ts +199 -0
- package/dist/stakeholders.d.ts.map +1 -0
- package/dist/stakeholders.js +398 -0
- package/dist/standards.d.ts.map +1 -1
- package/dist/standards.js +160 -2
- package/dist/standards_ingest.d.ts.map +1 -1
- package/dist/standards_ingest.js +1 -4
- package/dist/telemetry.d.ts +16 -2
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +77 -14
- package/dist/templates/controls/gdpr_control_catalog.json +261 -0
- package/dist/templates/controls/iso42001_control_catalog.json +1443 -0
- package/dist/templates/controls/soc2_control_catalog.json +163 -0
- package/dist/templates/standards/iso42001_claims.json +72 -0
- package/dist/traced_emitter.d.ts.map +1 -1
- package/dist/traced_emitter.js +19 -9
- package/dist/trust_package.d.ts +20 -1
- package/dist/trust_package.d.ts.map +1 -1
- package/dist/trust_package.js +90 -2
- package/dist/verify.d.ts.map +1 -1
- package/dist/verify.js +9 -2
- package/dist/wal.d.ts.map +1 -1
- package/dist/wal.js +2 -1
- package/package.json +14 -1
- package/scripts/postinstall.js +105 -210
- package/templates/controls/gdpr_control_catalog.json +261 -0
- package/templates/controls/iso42001_control_catalog.json +1443 -0
- package/templates/controls/soc2_control_catalog.json +163 -0
- package/templates/standards/iso42001_claims.json +72 -0
package/dist/attribution.d.ts
CHANGED
|
@@ -30,7 +30,7 @@ export interface ProjectRegistration {
|
|
|
30
30
|
company?: string;
|
|
31
31
|
/** Your role (e.g., "ML Engineer", "DevOps", "CTO") */
|
|
32
32
|
role?: string;
|
|
33
|
-
/** Work email for best practices updates (
|
|
33
|
+
/** Work email for best practices updates (included in registration payload when enabled) */
|
|
34
34
|
email?: string;
|
|
35
35
|
/** How you found Monora (npm, pypi, github, blog, referral) */
|
|
36
36
|
source?: string;
|
|
@@ -260,9 +260,9 @@ export declare function configureHttp(config: {
|
|
|
260
260
|
eu?: string;
|
|
261
261
|
};
|
|
262
262
|
apiKeyEnv?: string;
|
|
263
|
-
|
|
263
|
+
timeoutSec?: number;
|
|
264
264
|
retryAttempts?: number;
|
|
265
|
-
|
|
265
|
+
backoffBaseSec?: number;
|
|
266
266
|
}): void;
|
|
267
267
|
/**
|
|
268
268
|
* Send a telemetry event (e.g., startup, shutdown, error).
|
|
@@ -305,4 +305,45 @@ export declare function setAuditMetadata(metadata: AuditMetadata): AuditMetadata
|
|
|
305
305
|
* @returns AuditMetadata object or null.
|
|
306
306
|
*/
|
|
307
307
|
export declare function getAuditMetadata(): AuditMetadata | null;
|
|
308
|
+
/**
|
|
309
|
+
* Check if first-run registration prompt has been shown.
|
|
310
|
+
*
|
|
311
|
+
* @returns True if already prompted, false otherwise.
|
|
312
|
+
*/
|
|
313
|
+
export declare function hasShownFirstRunPrompt(): boolean;
|
|
314
|
+
/**
|
|
315
|
+
* Check if user has registered (either via postinstall or programmatically).
|
|
316
|
+
*
|
|
317
|
+
* @returns True if registered, false otherwise.
|
|
318
|
+
*/
|
|
319
|
+
export declare function hasRegistration(): boolean;
|
|
320
|
+
/**
|
|
321
|
+
* Prompt the user to register their project (interactive, optional).
|
|
322
|
+
*
|
|
323
|
+
* @param options - Optional context about the environment.
|
|
324
|
+
* @returns True if registration was completed, false otherwise.
|
|
325
|
+
*/
|
|
326
|
+
export declare function promptForRegistration(options?: {
|
|
327
|
+
environment?: string;
|
|
328
|
+
force?: boolean;
|
|
329
|
+
silent?: boolean;
|
|
330
|
+
}): Promise<boolean>;
|
|
331
|
+
/**
|
|
332
|
+
* Show first-run registration prompt if needed.
|
|
333
|
+
*
|
|
334
|
+
* This logs a one-time message suggesting the user run `npx monora init`
|
|
335
|
+
* to register their project for best practices updates. The message is
|
|
336
|
+
* only shown once per installation.
|
|
337
|
+
*
|
|
338
|
+
* @param options - Optional context about the environment.
|
|
339
|
+
* @returns True if prompt was shown, false if skipped.
|
|
340
|
+
*/
|
|
341
|
+
export declare function showFirstRunPromptIfNeeded(options?: {
|
|
342
|
+
environment?: string;
|
|
343
|
+
silent?: boolean;
|
|
344
|
+
}): boolean;
|
|
345
|
+
/**
|
|
346
|
+
* Reset the first-run prompt state (for testing).
|
|
347
|
+
*/
|
|
348
|
+
export declare function resetFirstRunPrompt(): void;
|
|
308
349
|
//# sourceMappingURL=attribution.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attribution.d.ts","sourceRoot":"","sources":["../src/attribution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;
|
|
1
|
+
{"version":3,"file":"attribution.d.ts","sourceRoot":"","sources":["../src/attribution.ts"],"names":[],"mappings":"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"}
|
package/dist/attribution.js
CHANGED
|
@@ -74,28 +74,35 @@ exports.configureHttp = configureHttp;
|
|
|
74
74
|
exports.sendTelemetryEvent = sendTelemetryEvent;
|
|
75
75
|
exports.setAuditMetadata = setAuditMetadata;
|
|
76
76
|
exports.getAuditMetadata = getAuditMetadata;
|
|
77
|
+
exports.hasShownFirstRunPrompt = hasShownFirstRunPrompt;
|
|
78
|
+
exports.hasRegistration = hasRegistration;
|
|
79
|
+
exports.promptForRegistration = promptForRegistration;
|
|
80
|
+
exports.showFirstRunPromptIfNeeded = showFirstRunPromptIfNeeded;
|
|
81
|
+
exports.resetFirstRunPrompt = resetFirstRunPrompt;
|
|
77
82
|
const crypto = __importStar(require("crypto"));
|
|
78
83
|
const fs = __importStar(require("fs"));
|
|
79
84
|
const http = __importStar(require("http"));
|
|
80
85
|
const https = __importStar(require("https"));
|
|
81
86
|
const os = __importStar(require("os"));
|
|
82
87
|
const path = __importStar(require("path"));
|
|
88
|
+
const readline = __importStar(require("readline"));
|
|
83
89
|
// HTTP configuration (can be overridden via config or environment)
|
|
90
|
+
// Note: Uses seconds (not milliseconds) for cross-SDK parity with Python
|
|
84
91
|
const HTTP_CONFIG = {
|
|
85
92
|
endpoints: {
|
|
86
93
|
us: process.env.MONORA_ATTRIBUTION_ENDPOINT_US || null,
|
|
87
94
|
eu: process.env.MONORA_ATTRIBUTION_ENDPOINT_EU || null,
|
|
88
95
|
},
|
|
89
96
|
apiKeyEnv: 'MONORA_ATTRIBUTION_KEY',
|
|
90
|
-
|
|
97
|
+
timeoutSec: 5,
|
|
91
98
|
retryAttempts: 2,
|
|
92
|
-
|
|
99
|
+
backoffBaseSec: 0.5,
|
|
93
100
|
};
|
|
94
101
|
const retryQueue = [];
|
|
95
102
|
const MAX_RETRY_QUEUE_SIZE = 100;
|
|
96
103
|
let retryTimer = null;
|
|
97
104
|
// Get version from package.json
|
|
98
|
-
let SDK_VERSION = '1.
|
|
105
|
+
let SDK_VERSION = '2.1.4';
|
|
99
106
|
try {
|
|
100
107
|
const pkgPath = path.join(__dirname, '..', 'package.json');
|
|
101
108
|
if (fs.existsSync(pkgPath)) {
|
|
@@ -111,6 +118,8 @@ const INSTALL_ID_PATH = path.join(os.homedir(), '.monora', 'install_id');
|
|
|
111
118
|
const ATTRIBUTION_STATE_PATH = path.join(os.homedir(), '.monora', 'attribution.json');
|
|
112
119
|
// Registration from postinstall script (collected during npm install)
|
|
113
120
|
const POSTINSTALL_REGISTRATION_PATH = path.join(os.homedir(), '.monora', 'registration.json');
|
|
121
|
+
// First-run prompt state
|
|
122
|
+
const FIRST_RUN_PROMPT_PATH = path.join(os.homedir(), '.monora', 'first_run_prompt.json');
|
|
114
123
|
// Callback registry
|
|
115
124
|
const attributionCallbacks = [];
|
|
116
125
|
// Global state
|
|
@@ -547,12 +556,12 @@ function configureHttp(config) {
|
|
|
547
556
|
}
|
|
548
557
|
if (config.apiKeyEnv)
|
|
549
558
|
HTTP_CONFIG.apiKeyEnv = config.apiKeyEnv;
|
|
550
|
-
if (config.
|
|
551
|
-
HTTP_CONFIG.
|
|
559
|
+
if (config.timeoutSec)
|
|
560
|
+
HTTP_CONFIG.timeoutSec = config.timeoutSec;
|
|
552
561
|
if (config.retryAttempts)
|
|
553
562
|
HTTP_CONFIG.retryAttempts = config.retryAttempts;
|
|
554
|
-
if (config.
|
|
555
|
-
HTTP_CONFIG.
|
|
563
|
+
if (config.backoffBaseSec)
|
|
564
|
+
HTTP_CONFIG.backoffBaseSec = config.backoffBaseSec;
|
|
556
565
|
}
|
|
557
566
|
function getEndpoint(endpointType) {
|
|
558
567
|
ensureStateLoaded();
|
|
@@ -571,7 +580,8 @@ async function makeRequest(url, data, timeout, retries) {
|
|
|
571
580
|
const apiKey = getApiKey();
|
|
572
581
|
if (!apiKey)
|
|
573
582
|
return false;
|
|
574
|
-
|
|
583
|
+
// Convert seconds to milliseconds for setTimeout
|
|
584
|
+
const effectiveTimeout = (timeout ?? HTTP_CONFIG.timeoutSec) * 1000;
|
|
575
585
|
const effectiveRetries = retries ?? HTTP_CONFIG.retryAttempts;
|
|
576
586
|
const payload = JSON.stringify({
|
|
577
587
|
...data,
|
|
@@ -628,13 +638,15 @@ async function makeRequest(url, data, timeout, retries) {
|
|
|
628
638
|
if (success)
|
|
629
639
|
return true;
|
|
630
640
|
if (attempt < effectiveRetries) {
|
|
631
|
-
|
|
641
|
+
// Convert seconds to milliseconds for setTimeout
|
|
642
|
+
const delay = HTTP_CONFIG.backoffBaseSec * 1000 * Math.pow(2, attempt) + Math.random() * 100;
|
|
632
643
|
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
633
644
|
}
|
|
634
645
|
}
|
|
635
646
|
catch {
|
|
636
647
|
if (attempt < effectiveRetries) {
|
|
637
|
-
|
|
648
|
+
// Convert seconds to milliseconds for setTimeout
|
|
649
|
+
const delay = HTTP_CONFIG.backoffBaseSec * 1000 * Math.pow(2, attempt) + Math.random() * 100;
|
|
638
650
|
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
639
651
|
}
|
|
640
652
|
}
|
|
@@ -699,6 +711,7 @@ async function processRetryQueue() {
|
|
|
699
711
|
}
|
|
700
712
|
/**
|
|
701
713
|
* Send registration to Monora API (internal).
|
|
714
|
+
* Includes optional email if provided.
|
|
702
715
|
*/
|
|
703
716
|
function sendRegistration(registration) {
|
|
704
717
|
if (!sendDataEnabled)
|
|
@@ -798,3 +811,177 @@ function getAuditMetadata() {
|
|
|
798
811
|
ensureStateLoaded();
|
|
799
812
|
return auditMetadata;
|
|
800
813
|
}
|
|
814
|
+
/**
|
|
815
|
+
* Load the first-run prompt state from disk.
|
|
816
|
+
*/
|
|
817
|
+
function loadFirstRunPromptState() {
|
|
818
|
+
try {
|
|
819
|
+
if (!fs.existsSync(FIRST_RUN_PROMPT_PATH)) {
|
|
820
|
+
return null;
|
|
821
|
+
}
|
|
822
|
+
const raw = fs.readFileSync(FIRST_RUN_PROMPT_PATH, 'utf8');
|
|
823
|
+
return JSON.parse(raw);
|
|
824
|
+
}
|
|
825
|
+
catch {
|
|
826
|
+
return null;
|
|
827
|
+
}
|
|
828
|
+
}
|
|
829
|
+
/**
|
|
830
|
+
* Save the first-run prompt state to disk.
|
|
831
|
+
*/
|
|
832
|
+
function saveFirstRunPromptState(state) {
|
|
833
|
+
try {
|
|
834
|
+
const dir = path.dirname(FIRST_RUN_PROMPT_PATH);
|
|
835
|
+
if (!fs.existsSync(dir)) {
|
|
836
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
837
|
+
}
|
|
838
|
+
fs.writeFileSync(FIRST_RUN_PROMPT_PATH, JSON.stringify(state, null, 2));
|
|
839
|
+
}
|
|
840
|
+
catch {
|
|
841
|
+
// Silent fail - don't break user's app
|
|
842
|
+
}
|
|
843
|
+
}
|
|
844
|
+
/**
|
|
845
|
+
* Check if first-run registration prompt has been shown.
|
|
846
|
+
*
|
|
847
|
+
* @returns True if already prompted, false otherwise.
|
|
848
|
+
*/
|
|
849
|
+
function hasShownFirstRunPrompt() {
|
|
850
|
+
const state = loadFirstRunPromptState();
|
|
851
|
+
return state !== null && !!state.promptedAt;
|
|
852
|
+
}
|
|
853
|
+
/**
|
|
854
|
+
* Check if user has registered (either via postinstall or programmatically).
|
|
855
|
+
*
|
|
856
|
+
* @returns True if registered, false otherwise.
|
|
857
|
+
*/
|
|
858
|
+
function hasRegistration() {
|
|
859
|
+
ensureStateLoaded();
|
|
860
|
+
return currentRegistration !== null;
|
|
861
|
+
}
|
|
862
|
+
/**
|
|
863
|
+
* Prompt the user to register their project (interactive, optional).
|
|
864
|
+
*
|
|
865
|
+
* @param options - Optional context about the environment.
|
|
866
|
+
* @returns True if registration was completed, false otherwise.
|
|
867
|
+
*/
|
|
868
|
+
async function promptForRegistration(options) {
|
|
869
|
+
try {
|
|
870
|
+
if (!process.stdin.isTTY || !process.stdout.isTTY) {
|
|
871
|
+
return false;
|
|
872
|
+
}
|
|
873
|
+
if (!options?.force) {
|
|
874
|
+
if (options?.environment === 'production') {
|
|
875
|
+
return false;
|
|
876
|
+
}
|
|
877
|
+
if (process.env.CI ||
|
|
878
|
+
process.env.GITHUB_ACTIONS ||
|
|
879
|
+
process.env.GITLAB_CI ||
|
|
880
|
+
process.env.MONORA_SKIP_PROMPT) {
|
|
881
|
+
return false;
|
|
882
|
+
}
|
|
883
|
+
if (hasRegistration()) {
|
|
884
|
+
return false;
|
|
885
|
+
}
|
|
886
|
+
}
|
|
887
|
+
if (options?.silent) {
|
|
888
|
+
return false;
|
|
889
|
+
}
|
|
890
|
+
console.log('');
|
|
891
|
+
console.log('Monora SDK optional project registration');
|
|
892
|
+
console.log('This helps us improve the SDK and share best practices.');
|
|
893
|
+
console.log('Email is stored locally and only sent if telemetry is enabled.');
|
|
894
|
+
console.log('');
|
|
895
|
+
const rl = readline.createInterface({
|
|
896
|
+
input: process.stdin,
|
|
897
|
+
output: process.stdout,
|
|
898
|
+
});
|
|
899
|
+
const ask = (question) => new Promise((resolve) => rl.question(question, (answer) => resolve(answer)));
|
|
900
|
+
try {
|
|
901
|
+
const confirm = (await ask('Register this project now? [y/N]: ')).trim().toLowerCase();
|
|
902
|
+
if (confirm !== 'y' && confirm !== 'yes') {
|
|
903
|
+
return false;
|
|
904
|
+
}
|
|
905
|
+
const company = (await ask('Company (optional): ')).trim() || undefined;
|
|
906
|
+
const role = (await ask('Role (optional): ')).trim() || undefined;
|
|
907
|
+
const email = (await ask('Work email (optional): ')).trim() || undefined;
|
|
908
|
+
const source = (await ask('How did you find Monora? (optional): ')).trim() || undefined;
|
|
909
|
+
const useCase = (await ask('Primary use case (optional): ')).trim() || undefined;
|
|
910
|
+
registerProject({
|
|
911
|
+
company,
|
|
912
|
+
role,
|
|
913
|
+
email,
|
|
914
|
+
source,
|
|
915
|
+
useCase,
|
|
916
|
+
});
|
|
917
|
+
return true;
|
|
918
|
+
}
|
|
919
|
+
finally {
|
|
920
|
+
rl.close();
|
|
921
|
+
}
|
|
922
|
+
}
|
|
923
|
+
catch {
|
|
924
|
+
return false;
|
|
925
|
+
}
|
|
926
|
+
}
|
|
927
|
+
/**
|
|
928
|
+
* Show first-run registration prompt if needed.
|
|
929
|
+
*
|
|
930
|
+
* This logs a one-time message suggesting the user run `npx monora init`
|
|
931
|
+
* to register their project for best practices updates. The message is
|
|
932
|
+
* only shown once per installation.
|
|
933
|
+
*
|
|
934
|
+
* @param options - Optional context about the environment.
|
|
935
|
+
* @returns True if prompt was shown, false if skipped.
|
|
936
|
+
*/
|
|
937
|
+
function showFirstRunPromptIfNeeded(options) {
|
|
938
|
+
// Skip in CI environments
|
|
939
|
+
if (process.env.CI ||
|
|
940
|
+
process.env.GITHUB_ACTIONS ||
|
|
941
|
+
process.env.GITLAB_CI ||
|
|
942
|
+
process.env.MONORA_SKIP_PROMPT) {
|
|
943
|
+
return false;
|
|
944
|
+
}
|
|
945
|
+
// Skip if already prompted
|
|
946
|
+
if (hasShownFirstRunPrompt()) {
|
|
947
|
+
return false;
|
|
948
|
+
}
|
|
949
|
+
// Skip if already registered
|
|
950
|
+
if (hasRegistration()) {
|
|
951
|
+
// Mark as prompted so we don't check again
|
|
952
|
+
saveFirstRunPromptState({
|
|
953
|
+
promptedAt: new Date().toISOString(),
|
|
954
|
+
sdkVersion: SDK_VERSION,
|
|
955
|
+
environment: options?.environment,
|
|
956
|
+
});
|
|
957
|
+
return false;
|
|
958
|
+
}
|
|
959
|
+
// Save state first to avoid showing multiple times in parallel inits
|
|
960
|
+
saveFirstRunPromptState({
|
|
961
|
+
promptedAt: new Date().toISOString(),
|
|
962
|
+
sdkVersion: SDK_VERSION,
|
|
963
|
+
environment: options?.environment,
|
|
964
|
+
});
|
|
965
|
+
// Show the prompt (unless silent mode)
|
|
966
|
+
if (!options?.silent) {
|
|
967
|
+
console.log('');
|
|
968
|
+
console.log('\x1b[36m[Monora]\x1b[0m Register your project for best practices updates:');
|
|
969
|
+
console.log(' Run: \x1b[33mnpx monora init\x1b[0m');
|
|
970
|
+
console.log(' Or skip this message by setting MONORA_SKIP_PROMPT=1');
|
|
971
|
+
console.log('');
|
|
972
|
+
}
|
|
973
|
+
return true;
|
|
974
|
+
}
|
|
975
|
+
/**
|
|
976
|
+
* Reset the first-run prompt state (for testing).
|
|
977
|
+
*/
|
|
978
|
+
function resetFirstRunPrompt() {
|
|
979
|
+
try {
|
|
980
|
+
if (fs.existsSync(FIRST_RUN_PROMPT_PATH)) {
|
|
981
|
+
fs.unlinkSync(FIRST_RUN_PROMPT_PATH);
|
|
982
|
+
}
|
|
983
|
+
}
|
|
984
|
+
catch {
|
|
985
|
+
// Silent fail
|
|
986
|
+
}
|
|
987
|
+
}
|
package/dist/autodetect.d.ts
CHANGED
|
@@ -1,6 +1,53 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Auto-detection utilities for zero-config initialization.
|
|
3
|
+
*
|
|
4
|
+
* Provides intelligent project analysis for streamlined setup:
|
|
5
|
+
* - Framework detection (Next.js, Express, FastAPI, etc.)
|
|
6
|
+
* - Cloud platform detection (Vercel, AWS, GCP, etc.)
|
|
7
|
+
* - AI SDK detection with model suggestions
|
|
8
|
+
* - Optional AI-powered analysis using Claude/GPT
|
|
3
9
|
*/
|
|
10
|
+
/**
|
|
11
|
+
* Result of framework and project detection.
|
|
12
|
+
*/
|
|
13
|
+
export interface FrameworkDetection {
|
|
14
|
+
/** Detected framework (next, express, fastify, koa, nest, etc.) */
|
|
15
|
+
framework: string | null;
|
|
16
|
+
/** Project type (web-app, api, cli, library, monorepo) */
|
|
17
|
+
projectType: string;
|
|
18
|
+
/** Detected cloud platform (vercel, aws, gcp, azure, heroku, etc.) */
|
|
19
|
+
cloudPlatform: string | null;
|
|
20
|
+
/** Detected AI SDKs with versions */
|
|
21
|
+
aiSdks: Array<{
|
|
22
|
+
name: string;
|
|
23
|
+
version?: string;
|
|
24
|
+
}>;
|
|
25
|
+
/** Suggested models based on detected SDKs */
|
|
26
|
+
suggestedModels: string[];
|
|
27
|
+
/** Detected language/runtime */
|
|
28
|
+
runtime: 'node' | 'python' | 'mixed';
|
|
29
|
+
/** Entry point file if detected */
|
|
30
|
+
entryPoint: string | null;
|
|
31
|
+
/** Whether TypeScript is used */
|
|
32
|
+
typescript: boolean;
|
|
33
|
+
/** Package manager (npm, yarn, pnpm) */
|
|
34
|
+
packageManager: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Result of AI-powered project analysis.
|
|
38
|
+
*/
|
|
39
|
+
export interface AIAnalysisResult {
|
|
40
|
+
/** Suggested preset based on analysis */
|
|
41
|
+
suggestedPreset: string;
|
|
42
|
+
/** Suggested configuration overrides */
|
|
43
|
+
suggestedConfig: Record<string, any>;
|
|
44
|
+
/** Reasoning for suggestions */
|
|
45
|
+
reasoning: string;
|
|
46
|
+
/** Confidence level (0-1) */
|
|
47
|
+
confidence: number;
|
|
48
|
+
/** Detected compliance requirements */
|
|
49
|
+
complianceHints: string[];
|
|
50
|
+
}
|
|
4
51
|
/**
|
|
5
52
|
* Detect which LLM SDKs are installed.
|
|
6
53
|
*/
|
|
@@ -21,4 +68,25 @@ export declare function autoDetectConfig(): Record<string, any>;
|
|
|
21
68
|
* Select the appropriate preset based on environment.
|
|
22
69
|
*/
|
|
23
70
|
export declare function selectPresetForEnvironment(env: string): string;
|
|
71
|
+
/**
|
|
72
|
+
* Detect framework, cloud platform, and AI SDKs from project files.
|
|
73
|
+
*
|
|
74
|
+
* This performs comprehensive project analysis without requiring user input.
|
|
75
|
+
*/
|
|
76
|
+
export declare function detectFramework(): FrameworkDetection;
|
|
77
|
+
/**
|
|
78
|
+
* Analyze project using AI (Claude or GPT) for intelligent configuration suggestions.
|
|
79
|
+
*
|
|
80
|
+
* This is optional and requires an API key to be available.
|
|
81
|
+
* Returns null if no AI API key is found or analysis fails.
|
|
82
|
+
*/
|
|
83
|
+
export declare function analyzeProjectWithAI(): Promise<AIAnalysisResult | null>;
|
|
84
|
+
/**
|
|
85
|
+
* Build a smart configuration based on all detection results.
|
|
86
|
+
*/
|
|
87
|
+
export declare function buildSmartConfig(detection: FrameworkDetection, aiAnalysis: AIAnalysisResult | null, attribution: {
|
|
88
|
+
email?: string;
|
|
89
|
+
company?: string;
|
|
90
|
+
role?: string;
|
|
91
|
+
}): Record<string, any>;
|
|
24
92
|
//# sourceMappingURL=autodetect.d.ts.map
|
package/dist/autodetect.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autodetect.d.ts","sourceRoot":"","sources":["../src/autodetect.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"autodetect.d.ts","sourceRoot":"","sources":["../src/autodetect.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,mEAAmE;IACnE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,qCAAqC;IACrC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,8CAA8C;IAC9C,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,gCAAgC;IAChC,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrC,mCAAmC;IACnC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iCAAiC;IACjC,UAAU,EAAE,OAAO,CAAC;IACpB,wCAAwC;IACxC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yCAAyC;IACzC,eAAe,EAAE,MAAM,CAAC;IACxB,wCAAwC;IACxC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAuKD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAmB9C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CA6D1C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CA2CtD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAwBtD;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAc9D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,kBAAkB,CA+NpD;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAuF7E;AAsID;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,kBAAkB,EAC7B,UAAU,EAAE,gBAAgB,GAAG,IAAI,EACnC,WAAW,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/D,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAmErB"}
|