monty-autonomous-fullstack-dev-multillm 1.0.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/LICENSE +81 -0
- package/README.md +608 -0
- package/bin/cli.js +448 -0
- package/dist/agents/coding.d.ts +15 -0
- package/dist/agents/coding.d.ts.map +1 -0
- package/dist/agents/coding.js +189 -0
- package/dist/agents/coding.js.map +1 -0
- package/dist/agents/initializer.d.ts +15 -0
- package/dist/agents/initializer.d.ts.map +1 -0
- package/dist/agents/initializer.js +87 -0
- package/dist/agents/initializer.js.map +1 -0
- package/dist/agents/prompts/arbitrator.md +143 -0
- package/dist/agents/prompts/coding.md +247 -0
- package/dist/agents/prompts/initializer.md +98 -0
- package/dist/config/agent-config.d.ts +103 -0
- package/dist/config/agent-config.d.ts.map +1 -0
- package/dist/config/agent-config.js +138 -0
- package/dist/config/agent-config.js.map +1 -0
- package/dist/config/auth-config.d.ts +152 -0
- package/dist/config/auth-config.d.ts.map +1 -0
- package/dist/config/auth-config.js +139 -0
- package/dist/config/auth-config.js.map +1 -0
- package/dist/config/mcp-config.d.ts +109 -0
- package/dist/config/mcp-config.d.ts.map +1 -0
- package/dist/config/mcp-config.js +234 -0
- package/dist/config/mcp-config.js.map +1 -0
- package/dist/config/provider-config.d.ts +139 -0
- package/dist/config/provider-config.d.ts.map +1 -0
- package/dist/config/provider-config.js +344 -0
- package/dist/config/provider-config.js.map +1 -0
- package/dist/config/subagents-config.d.ts +85 -0
- package/dist/config/subagents-config.d.ts.map +1 -0
- package/dist/config/subagents-config.js +430 -0
- package/dist/config/subagents-config.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +385 -0
- package/dist/index.js.map +1 -0
- package/dist/orchestrator/arbitrator.d.ts +93 -0
- package/dist/orchestrator/arbitrator.d.ts.map +1 -0
- package/dist/orchestrator/arbitrator.js +330 -0
- package/dist/orchestrator/arbitrator.js.map +1 -0
- package/dist/orchestrator/index.d.ts +113 -0
- package/dist/orchestrator/index.d.ts.map +1 -0
- package/dist/orchestrator/index.js +217 -0
- package/dist/orchestrator/index.js.map +1 -0
- package/dist/orchestrator/review-coordinator.d.ts +143 -0
- package/dist/orchestrator/review-coordinator.d.ts.map +1 -0
- package/dist/orchestrator/review-coordinator.js +401 -0
- package/dist/orchestrator/review-coordinator.js.map +1 -0
- package/dist/orchestrator/task-classifier.d.ts +87 -0
- package/dist/orchestrator/task-classifier.d.ts.map +1 -0
- package/dist/orchestrator/task-classifier.js +250 -0
- package/dist/orchestrator/task-classifier.js.map +1 -0
- package/dist/providers/anthropic-provider.d.ts +64 -0
- package/dist/providers/anthropic-provider.d.ts.map +1 -0
- package/dist/providers/anthropic-provider.js +264 -0
- package/dist/providers/anthropic-provider.js.map +1 -0
- package/dist/providers/base-provider.d.ts +219 -0
- package/dist/providers/base-provider.d.ts.map +1 -0
- package/dist/providers/base-provider.js +143 -0
- package/dist/providers/base-provider.js.map +1 -0
- package/dist/providers/cursor-provider.d.ts +82 -0
- package/dist/providers/cursor-provider.d.ts.map +1 -0
- package/dist/providers/cursor-provider.js +321 -0
- package/dist/providers/cursor-provider.js.map +1 -0
- package/dist/providers/google-provider.d.ts +75 -0
- package/dist/providers/google-provider.d.ts.map +1 -0
- package/dist/providers/google-provider.js +274 -0
- package/dist/providers/google-provider.js.map +1 -0
- package/dist/providers/index.d.ts +92 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +233 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/openai-provider.d.ts +83 -0
- package/dist/providers/openai-provider.d.ts.map +1 -0
- package/dist/providers/openai-provider.js +295 -0
- package/dist/providers/openai-provider.js.map +1 -0
- package/dist/templates/feature_list.template.json +66 -0
- package/dist/templates/progress.template.txt +51 -0
- package/dist/utils/auth-manager.d.ts +121 -0
- package/dist/utils/auth-manager.d.ts.map +1 -0
- package/dist/utils/auth-manager.js +560 -0
- package/dist/utils/auth-manager.js.map +1 -0
- package/dist/utils/budget-enforcer.d.ts +181 -0
- package/dist/utils/budget-enforcer.d.ts.map +1 -0
- package/dist/utils/budget-enforcer.js +386 -0
- package/dist/utils/budget-enforcer.js.map +1 -0
- package/dist/utils/chatgpt-detector.d.ts +51 -0
- package/dist/utils/chatgpt-detector.d.ts.map +1 -0
- package/dist/utils/chatgpt-detector.js +274 -0
- package/dist/utils/chatgpt-detector.js.map +1 -0
- package/dist/utils/claude-code-detector.d.ts +39 -0
- package/dist/utils/claude-code-detector.d.ts.map +1 -0
- package/dist/utils/claude-code-detector.js +153 -0
- package/dist/utils/claude-code-detector.js.map +1 -0
- package/dist/utils/code-quality.d.ts +58 -0
- package/dist/utils/code-quality.d.ts.map +1 -0
- package/dist/utils/code-quality.js +258 -0
- package/dist/utils/code-quality.js.map +1 -0
- package/dist/utils/context-primer.d.ts +50 -0
- package/dist/utils/context-primer.d.ts.map +1 -0
- package/dist/utils/context-primer.js +429 -0
- package/dist/utils/context-primer.js.map +1 -0
- package/dist/utils/dependency-management.d.ts +40 -0
- package/dist/utils/dependency-management.d.ts.map +1 -0
- package/dist/utils/dependency-management.js +123 -0
- package/dist/utils/dependency-management.js.map +1 -0
- package/dist/utils/environment-validation.d.ts +33 -0
- package/dist/utils/environment-validation.d.ts.map +1 -0
- package/dist/utils/environment-validation.js +136 -0
- package/dist/utils/environment-validation.js.map +1 -0
- package/dist/utils/error-recovery.d.ts +60 -0
- package/dist/utils/error-recovery.d.ts.map +1 -0
- package/dist/utils/error-recovery.js +183 -0
- package/dist/utils/error-recovery.js.map +1 -0
- package/dist/utils/feature-list.d.ts +102 -0
- package/dist/utils/feature-list.d.ts.map +1 -0
- package/dist/utils/feature-list.js +191 -0
- package/dist/utils/feature-list.js.map +1 -0
- package/dist/utils/gemini-detector.d.ts +65 -0
- package/dist/utils/gemini-detector.d.ts.map +1 -0
- package/dist/utils/gemini-detector.js +340 -0
- package/dist/utils/gemini-detector.js.map +1 -0
- package/dist/utils/git-utils.d.ts +48 -0
- package/dist/utils/git-utils.d.ts.map +1 -0
- package/dist/utils/git-utils.js +110 -0
- package/dist/utils/git-utils.js.map +1 -0
- package/dist/utils/health-check.d.ts +32 -0
- package/dist/utils/health-check.d.ts.map +1 -0
- package/dist/utils/health-check.js +152 -0
- package/dist/utils/health-check.js.map +1 -0
- package/dist/utils/hooks-manager.d.ts +154 -0
- package/dist/utils/hooks-manager.d.ts.map +1 -0
- package/dist/utils/hooks-manager.js +359 -0
- package/dist/utils/hooks-manager.js.map +1 -0
- package/dist/utils/multi-auth-manager.d.ts +144 -0
- package/dist/utils/multi-auth-manager.d.ts.map +1 -0
- package/dist/utils/multi-auth-manager.js +588 -0
- package/dist/utils/multi-auth-manager.js.map +1 -0
- package/dist/utils/progress.d.ts +49 -0
- package/dist/utils/progress.d.ts.map +1 -0
- package/dist/utils/progress.js +209 -0
- package/dist/utils/progress.js.map +1 -0
- package/dist/utils/project-detection.d.ts +40 -0
- package/dist/utils/project-detection.d.ts.map +1 -0
- package/dist/utils/project-detection.js +230 -0
- package/dist/utils/project-detection.js.map +1 -0
- package/dist/utils/session-manager.d.ts +119 -0
- package/dist/utils/session-manager.d.ts.map +1 -0
- package/dist/utils/session-manager.js +389 -0
- package/dist/utils/session-manager.js.map +1 -0
- package/dist/utils/skills-manager.d.ts +113 -0
- package/dist/utils/skills-manager.d.ts.map +1 -0
- package/dist/utils/skills-manager.js +332 -0
- package/dist/utils/skills-manager.js.map +1 -0
- package/dist/utils/structured-output.d.ts +117 -0
- package/dist/utils/structured-output.d.ts.map +1 -0
- package/dist/utils/structured-output.js +191 -0
- package/dist/utils/structured-output.js.map +1 -0
- package/dist/utils/subagent-manager.d.ts +143 -0
- package/dist/utils/subagent-manager.d.ts.map +1 -0
- package/dist/utils/subagent-manager.js +326 -0
- package/dist/utils/subagent-manager.js.map +1 -0
- package/dist/utils/supabase-setup.d.ts +50 -0
- package/dist/utils/supabase-setup.d.ts.map +1 -0
- package/dist/utils/supabase-setup.js +151 -0
- package/dist/utils/supabase-setup.js.map +1 -0
- package/dist/utils/token-refresh.d.ts +21 -0
- package/dist/utils/token-refresh.d.ts.map +1 -0
- package/dist/utils/token-refresh.js +77 -0
- package/dist/utils/token-refresh.js.map +1 -0
- package/dist/utils/tos-warning.d.ts +115 -0
- package/dist/utils/tos-warning.d.ts.map +1 -0
- package/dist/utils/tos-warning.js +304 -0
- package/dist/utils/tos-warning.js.map +1 -0
- package/dist/utils/usage-monitor.d.ts +156 -0
- package/dist/utils/usage-monitor.d.ts.map +1 -0
- package/dist/utils/usage-monitor.js +296 -0
- package/dist/utils/usage-monitor.js.map +1 -0
- package/package.json +105 -0
- package/scripts/init.ps1 +73 -0
- package/scripts/init.sh +86 -0
- package/scripts/test-auth.sh +90 -0
- package/templates/feature_list.template.json +66 -0
- package/templates/progress.template.txt +51 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supabase-setup.js","sourceRoot":"","sources":["../../src/utils/supabase-setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token Refresh Utility
|
|
3
|
+
* Handles token expiration checking and refresh for subscription-based authentication
|
|
4
|
+
*/
|
|
5
|
+
import type { UserCredentials } from '../config/auth-config.js';
|
|
6
|
+
/**
|
|
7
|
+
* Check if a token is expired (with 5-minute grace period)
|
|
8
|
+
*/
|
|
9
|
+
export declare function isTokenExpired(expiresAt: number | undefined): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Refresh an expired subscription token using Claude CLI
|
|
12
|
+
*
|
|
13
|
+
* This uses the Claude CLI's built-in token refresh capability.
|
|
14
|
+
* The Claude CLI handles the OAuth refresh flow with Anthropic's servers.
|
|
15
|
+
*/
|
|
16
|
+
export declare function refreshSubscriptionToken(refreshToken: string): Promise<UserCredentials | null>;
|
|
17
|
+
/**
|
|
18
|
+
* Get human-readable time until token expiration
|
|
19
|
+
*/
|
|
20
|
+
export declare function getTimeUntilExpiration(expiresAt: number | undefined): string;
|
|
21
|
+
//# sourceMappingURL=token-refresh.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-refresh.d.ts","sourceRoot":"","sources":["../../src/utils/token-refresh.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAOhE;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAUrE;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CA2BjC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAyB5E"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token Refresh Utility
|
|
3
|
+
* Handles token expiration checking and refresh for subscription-based authentication
|
|
4
|
+
*/
|
|
5
|
+
import { exec } from 'child_process';
|
|
6
|
+
import { promisify } from 'util';
|
|
7
|
+
const execAsync = promisify(exec);
|
|
8
|
+
// 5 minute grace period before token expiration
|
|
9
|
+
const FIVE_MINUTES_MS = 5 * 60 * 1000;
|
|
10
|
+
/**
|
|
11
|
+
* Check if a token is expired (with 5-minute grace period)
|
|
12
|
+
*/
|
|
13
|
+
export function isTokenExpired(expiresAt) {
|
|
14
|
+
if (!expiresAt) {
|
|
15
|
+
return false; // No expiration = never expires
|
|
16
|
+
}
|
|
17
|
+
// Normalize timestamp to milliseconds if it's in seconds
|
|
18
|
+
const expiresAtMs = expiresAt > 1e12 ? expiresAt : expiresAt * 1000;
|
|
19
|
+
// Check if expired (with 5-minute buffer)
|
|
20
|
+
return Date.now() > (expiresAtMs - FIVE_MINUTES_MS);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Refresh an expired subscription token using Claude CLI
|
|
24
|
+
*
|
|
25
|
+
* This uses the Claude CLI's built-in token refresh capability.
|
|
26
|
+
* The Claude CLI handles the OAuth refresh flow with Anthropic's servers.
|
|
27
|
+
*/
|
|
28
|
+
export async function refreshSubscriptionToken(refreshToken) {
|
|
29
|
+
try {
|
|
30
|
+
// Use Claude CLI to refresh the token
|
|
31
|
+
// The CLI handles OAuth token exchange with Anthropic
|
|
32
|
+
const { stdout } = await execAsync('claude auth refresh', {
|
|
33
|
+
timeout: 10000, // 10 second timeout
|
|
34
|
+
});
|
|
35
|
+
const config = JSON.parse(stdout);
|
|
36
|
+
if (config.accessToken || config.access_token) {
|
|
37
|
+
return {
|
|
38
|
+
method: 'subscription',
|
|
39
|
+
source: 'auto-detect',
|
|
40
|
+
subscriptionKey: config.accessToken || config.access_token,
|
|
41
|
+
refreshToken: config.refreshToken || config.refresh_token,
|
|
42
|
+
expiresAt: config.expiresAt || config.expires_at,
|
|
43
|
+
tier: config.tier || config.subscription_tier || 'pro',
|
|
44
|
+
userId: config.userId || config.user_id || `user_${Date.now()}`,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
console.error('Failed to refresh token:', error instanceof Error ? error.message : error);
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get human-readable time until token expiration
|
|
56
|
+
*/
|
|
57
|
+
export function getTimeUntilExpiration(expiresAt) {
|
|
58
|
+
if (!expiresAt) {
|
|
59
|
+
return 'Never';
|
|
60
|
+
}
|
|
61
|
+
const expiresAtMs = expiresAt > 1e12 ? expiresAt : expiresAt * 1000;
|
|
62
|
+
const msRemaining = expiresAtMs - Date.now();
|
|
63
|
+
if (msRemaining <= 0) {
|
|
64
|
+
return 'Expired';
|
|
65
|
+
}
|
|
66
|
+
const daysRemaining = Math.floor(msRemaining / (1000 * 60 * 60 * 24));
|
|
67
|
+
const hoursRemaining = Math.floor((msRemaining % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
|
|
68
|
+
if (daysRemaining > 0) {
|
|
69
|
+
return `${daysRemaining} day${daysRemaining > 1 ? 's' : ''}`;
|
|
70
|
+
}
|
|
71
|
+
if (hoursRemaining > 0) {
|
|
72
|
+
return `${hoursRemaining} hour${hoursRemaining > 1 ? 's' : ''}`;
|
|
73
|
+
}
|
|
74
|
+
const minutesRemaining = Math.floor((msRemaining % (1000 * 60 * 60)) / (1000 * 60));
|
|
75
|
+
return `${minutesRemaining} minute${minutesRemaining > 1 ? 's' : ''}`;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=token-refresh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-refresh.js","sourceRoot":"","sources":["../../src/utils/token-refresh.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terms of Service Warning System
|
|
3
|
+
* Warns users about potential ToS violations when using subscription credentials
|
|
4
|
+
* for automated or commercial purposes.
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) 2025 Dobeu Tech Solutions LLC
|
|
7
|
+
* Licensed under CC BY-NC 4.0
|
|
8
|
+
*/
|
|
9
|
+
import { type ProviderName } from '../config/provider-config.js';
|
|
10
|
+
import { type AuthMethod, type AuthSource } from '../config/auth-config.js';
|
|
11
|
+
/**
|
|
12
|
+
* ToS compliance status
|
|
13
|
+
*/
|
|
14
|
+
export interface TosComplianceStatus {
|
|
15
|
+
isCompliant: boolean;
|
|
16
|
+
warnings: TosWarning[];
|
|
17
|
+
recommendations: string[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Individual ToS warning
|
|
21
|
+
*/
|
|
22
|
+
export interface TosWarning {
|
|
23
|
+
provider: ProviderName;
|
|
24
|
+
severity: 'info' | 'warning' | 'critical';
|
|
25
|
+
code: string;
|
|
26
|
+
message: string;
|
|
27
|
+
link?: string;
|
|
28
|
+
action?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Provider ToS policies
|
|
32
|
+
*/
|
|
33
|
+
export interface ProviderTosPolicy {
|
|
34
|
+
name: string;
|
|
35
|
+
allowsAutomation: boolean;
|
|
36
|
+
requiresApiKey: boolean;
|
|
37
|
+
subscriptionRestrictions: string[];
|
|
38
|
+
tosUrl: string;
|
|
39
|
+
apiKeyUrl: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Provider ToS policies
|
|
43
|
+
*/
|
|
44
|
+
export declare const PROVIDER_TOS_POLICIES: Record<ProviderName, ProviderTosPolicy>;
|
|
45
|
+
/**
|
|
46
|
+
* Check if running in automation context
|
|
47
|
+
*/
|
|
48
|
+
export declare function isAutomationContext(): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Check ToS compliance for a specific provider
|
|
51
|
+
*/
|
|
52
|
+
export declare function checkProviderCompliance(provider: ProviderName, authMethod: AuthMethod, authSource?: AuthSource): TosComplianceStatus;
|
|
53
|
+
/**
|
|
54
|
+
* Format warnings for display
|
|
55
|
+
*/
|
|
56
|
+
export declare function formatWarnings(status: TosComplianceStatus): string;
|
|
57
|
+
/**
|
|
58
|
+
* TOS Warning Manager class
|
|
59
|
+
*/
|
|
60
|
+
export declare class TosWarningManager {
|
|
61
|
+
private acknowledgedWarnings;
|
|
62
|
+
private lastCheckTime;
|
|
63
|
+
private checkIntervalMs;
|
|
64
|
+
private warningCallbacks;
|
|
65
|
+
/**
|
|
66
|
+
* Check compliance for all active providers
|
|
67
|
+
*/
|
|
68
|
+
checkAllProviders(activeProviders: Array<{
|
|
69
|
+
provider: ProviderName;
|
|
70
|
+
authMethod: AuthMethod;
|
|
71
|
+
authSource?: AuthSource;
|
|
72
|
+
}>): TosComplianceStatus;
|
|
73
|
+
/**
|
|
74
|
+
* Display warnings if not recently checked
|
|
75
|
+
*/
|
|
76
|
+
displayWarningsIfNeeded(providers: Array<{
|
|
77
|
+
provider: ProviderName;
|
|
78
|
+
authMethod: AuthMethod;
|
|
79
|
+
authSource?: AuthSource;
|
|
80
|
+
}>): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Acknowledge a warning (won't show again this session)
|
|
83
|
+
*/
|
|
84
|
+
acknowledgeWarning(provider: ProviderName, code: string): void;
|
|
85
|
+
/**
|
|
86
|
+
* Acknowledge all current warnings
|
|
87
|
+
*/
|
|
88
|
+
acknowledgeAll(warnings: TosWarning[]): void;
|
|
89
|
+
/**
|
|
90
|
+
* Register warning callback
|
|
91
|
+
*/
|
|
92
|
+
onWarning(callback: (warnings: TosWarning[]) => void): void;
|
|
93
|
+
/**
|
|
94
|
+
* Set check interval
|
|
95
|
+
*/
|
|
96
|
+
setCheckInterval(intervalMs: number): void;
|
|
97
|
+
/**
|
|
98
|
+
* Force next check
|
|
99
|
+
*/
|
|
100
|
+
forceNextCheck(): void;
|
|
101
|
+
/**
|
|
102
|
+
* Get policy for a provider
|
|
103
|
+
*/
|
|
104
|
+
getPolicy(provider: ProviderName): ProviderTosPolicy;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Create a ToS warning manager
|
|
108
|
+
*/
|
|
109
|
+
export declare function createTosWarningManager(): TosWarningManager;
|
|
110
|
+
/**
|
|
111
|
+
* Quick check for subscription compliance
|
|
112
|
+
*/
|
|
113
|
+
export declare function warnIfSubscriptionInAutomation(provider: ProviderName, authMethod: AuthMethod): void;
|
|
114
|
+
export default TosWarningManager;
|
|
115
|
+
//# sourceMappingURL=tos-warning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tos-warning.d.ts","sourceRoot":"","sources":["../../src/utils/tos-warning.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE5E;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,OAAO,CAAC;IAC1B,cAAc,EAAE,OAAO,CAAC;IACxB,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,YAAY,EAAE,iBAAiB,CAkDzE,CAAC;AAEF;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CA+B7C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,YAAY,EACtB,UAAU,EAAE,UAAU,EACtB,UAAU,CAAC,EAAE,UAAU,GACtB,mBAAmB,CA0DrB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAwClE;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,oBAAoB,CAA0B;IACtD,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,gBAAgB,CAA+C;IAEvE;;OAEG;IACH,iBAAiB,CACf,eAAe,EAAE,KAAK,CAAC;QACrB,QAAQ,EAAE,YAAY,CAAC;QACvB,UAAU,EAAE,UAAU,CAAC;QACvB,UAAU,CAAC,EAAE,UAAU,CAAC;KACzB,CAAC,GACD,mBAAmB;IAoBtB;;OAEG;IACH,uBAAuB,CACrB,SAAS,EAAE,KAAK,CAAC;QACf,QAAQ,EAAE,YAAY,CAAC;QACvB,UAAU,EAAE,UAAU,CAAC;QACvB,UAAU,CAAC,EAAE,UAAU,CAAC;KACzB,CAAC,GACD,OAAO;IAiCV;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9D;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI;IAM5C;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,IAAI,GAAG,IAAI;IAI3D;;OAEG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAI1C;;OAEG;IACH,cAAc,IAAI,IAAI;IAItB;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,YAAY,GAAG,iBAAiB;CAGrD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,iBAAiB,CAE3D;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,YAAY,EACtB,UAAU,EAAE,UAAU,GACrB,IAAI,CA8BN;AAED,eAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terms of Service Warning System
|
|
3
|
+
* Warns users about potential ToS violations when using subscription credentials
|
|
4
|
+
* for automated or commercial purposes.
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) 2025 Dobeu Tech Solutions LLC
|
|
7
|
+
* Licensed under CC BY-NC 4.0
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Provider ToS policies
|
|
11
|
+
*/
|
|
12
|
+
export const PROVIDER_TOS_POLICIES = {
|
|
13
|
+
anthropic: {
|
|
14
|
+
name: 'Anthropic',
|
|
15
|
+
allowsAutomation: false, // Subscription is for interactive Claude use
|
|
16
|
+
requiresApiKey: true,
|
|
17
|
+
subscriptionRestrictions: [
|
|
18
|
+
'Claude Pro/Team subscriptions are for interactive use via claude.ai',
|
|
19
|
+
'Automated or programmatic use requires an API key',
|
|
20
|
+
'SDK usage should use API keys, not subscription tokens',
|
|
21
|
+
],
|
|
22
|
+
tosUrl: 'https://www.anthropic.com/legal/consumer-terms',
|
|
23
|
+
apiKeyUrl: 'https://console.anthropic.com/settings/keys',
|
|
24
|
+
},
|
|
25
|
+
openai: {
|
|
26
|
+
name: 'OpenAI',
|
|
27
|
+
allowsAutomation: false, // ChatGPT Plus is for interactive use
|
|
28
|
+
requiresApiKey: true,
|
|
29
|
+
subscriptionRestrictions: [
|
|
30
|
+
'ChatGPT Plus is for personal, interactive use via chatgpt.com',
|
|
31
|
+
'API access requires a separate API key',
|
|
32
|
+
'Commercial or automated use needs API billing',
|
|
33
|
+
],
|
|
34
|
+
tosUrl: 'https://openai.com/policies/terms-of-use',
|
|
35
|
+
apiKeyUrl: 'https://platform.openai.com/api-keys',
|
|
36
|
+
},
|
|
37
|
+
google: {
|
|
38
|
+
name: 'Google',
|
|
39
|
+
allowsAutomation: true, // Gemini Code Assist allows programmatic use
|
|
40
|
+
requiresApiKey: false, // gcloud auth is acceptable
|
|
41
|
+
subscriptionRestrictions: [
|
|
42
|
+
'Free tier has usage quotas',
|
|
43
|
+
'Commercial use may require paid tier',
|
|
44
|
+
],
|
|
45
|
+
tosUrl: 'https://ai.google.dev/terms',
|
|
46
|
+
apiKeyUrl: 'https://aistudio.google.com/app/apikey',
|
|
47
|
+
},
|
|
48
|
+
cursor: {
|
|
49
|
+
name: 'Cursor',
|
|
50
|
+
allowsAutomation: true, // Cursor is designed for developer automation
|
|
51
|
+
requiresApiKey: false,
|
|
52
|
+
subscriptionRestrictions: [
|
|
53
|
+
'Cursor Pro subscription includes automation features',
|
|
54
|
+
'Usage within Cursor editor is expected',
|
|
55
|
+
],
|
|
56
|
+
tosUrl: 'https://www.cursor.com/terms',
|
|
57
|
+
apiKeyUrl: 'https://www.cursor.com/settings',
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Check if running in automation context
|
|
62
|
+
*/
|
|
63
|
+
export function isAutomationContext() {
|
|
64
|
+
// Check common CI/CD environment variables
|
|
65
|
+
const ciEnvVars = [
|
|
66
|
+
'CI',
|
|
67
|
+
'CONTINUOUS_INTEGRATION',
|
|
68
|
+
'BUILD_NUMBER',
|
|
69
|
+
'JENKINS_URL',
|
|
70
|
+
'GITHUB_ACTIONS',
|
|
71
|
+
'GITLAB_CI',
|
|
72
|
+
'CIRCLECI',
|
|
73
|
+
'TRAVIS',
|
|
74
|
+
'AZURE_PIPELINES',
|
|
75
|
+
];
|
|
76
|
+
for (const envVar of ciEnvVars) {
|
|
77
|
+
if (process.env[envVar]) {
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// Check for automation-specific flag
|
|
82
|
+
if (process.env.MONTY_AUTOMATION_MODE === 'true') {
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
// Check if running non-interactively
|
|
86
|
+
if (!process.stdin.isTTY && !process.env.TERM) {
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Check ToS compliance for a specific provider
|
|
93
|
+
*/
|
|
94
|
+
export function checkProviderCompliance(provider, authMethod, authSource) {
|
|
95
|
+
const policy = PROVIDER_TOS_POLICIES[provider];
|
|
96
|
+
const warnings = [];
|
|
97
|
+
const recommendations = [];
|
|
98
|
+
const isAutomation = isAutomationContext();
|
|
99
|
+
// Check subscription use in automation
|
|
100
|
+
if (authMethod === 'subscription' && isAutomation && !policy.allowsAutomation) {
|
|
101
|
+
warnings.push({
|
|
102
|
+
provider,
|
|
103
|
+
severity: 'critical',
|
|
104
|
+
code: 'SUBSCRIPTION_IN_AUTOMATION',
|
|
105
|
+
message: `Using ${policy.name} subscription in automation may violate Terms of Service`,
|
|
106
|
+
link: policy.tosUrl,
|
|
107
|
+
action: `Consider using an API key instead: ${policy.apiKeyUrl}`,
|
|
108
|
+
});
|
|
109
|
+
recommendations.push(`Switch to API key authentication for ${policy.name}`, `Get an API key at: ${policy.apiKeyUrl}`);
|
|
110
|
+
}
|
|
111
|
+
// Warn about subscription use for programmatic access
|
|
112
|
+
if (authMethod === 'subscription' && policy.requiresApiKey) {
|
|
113
|
+
warnings.push({
|
|
114
|
+
provider,
|
|
115
|
+
severity: 'warning',
|
|
116
|
+
code: 'SUBSCRIPTION_FOR_API',
|
|
117
|
+
message: `${policy.name} subscriptions are intended for interactive use, not API access`,
|
|
118
|
+
link: policy.tosUrl,
|
|
119
|
+
});
|
|
120
|
+
for (const restriction of policy.subscriptionRestrictions) {
|
|
121
|
+
recommendations.push(restriction);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Warn about auto-detected credentials in automation
|
|
125
|
+
if (authSource === 'auto-detect' && isAutomation) {
|
|
126
|
+
warnings.push({
|
|
127
|
+
provider,
|
|
128
|
+
severity: 'warning',
|
|
129
|
+
code: 'AUTO_DETECT_IN_AUTOMATION',
|
|
130
|
+
message: 'Auto-detected credentials being used in automation context',
|
|
131
|
+
action: 'Set explicit API key via environment variable',
|
|
132
|
+
});
|
|
133
|
+
recommendations.push(`Set ${provider.toUpperCase()}_API_KEY environment variable for CI/CD`);
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
isCompliant: warnings.filter(w => w.severity === 'critical').length === 0,
|
|
137
|
+
warnings,
|
|
138
|
+
recommendations,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Format warnings for display
|
|
143
|
+
*/
|
|
144
|
+
export function formatWarnings(status) {
|
|
145
|
+
if (status.warnings.length === 0) {
|
|
146
|
+
return '';
|
|
147
|
+
}
|
|
148
|
+
const lines = [];
|
|
149
|
+
lines.push('');
|
|
150
|
+
lines.push('╔══════════════════════════════════════════════════════════════════════════════╗');
|
|
151
|
+
lines.push('║ TERMS OF SERVICE NOTICE ║');
|
|
152
|
+
lines.push('╚══════════════════════════════════════════════════════════════════════════════╝');
|
|
153
|
+
lines.push('');
|
|
154
|
+
for (const warning of status.warnings) {
|
|
155
|
+
const icon = warning.severity === 'critical' ? '🚫' :
|
|
156
|
+
warning.severity === 'warning' ? '⚠️' : 'ℹ️';
|
|
157
|
+
lines.push(`${icon} [${warning.code}] ${warning.message}`);
|
|
158
|
+
if (warning.action) {
|
|
159
|
+
lines.push(` Action: ${warning.action}`);
|
|
160
|
+
}
|
|
161
|
+
if (warning.link) {
|
|
162
|
+
lines.push(` More info: ${warning.link}`);
|
|
163
|
+
}
|
|
164
|
+
lines.push('');
|
|
165
|
+
}
|
|
166
|
+
if (status.recommendations.length > 0) {
|
|
167
|
+
lines.push('Recommendations:');
|
|
168
|
+
for (const rec of status.recommendations) {
|
|
169
|
+
lines.push(` • ${rec}`);
|
|
170
|
+
}
|
|
171
|
+
lines.push('');
|
|
172
|
+
}
|
|
173
|
+
return lines.join('\n');
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* TOS Warning Manager class
|
|
177
|
+
*/
|
|
178
|
+
export class TosWarningManager {
|
|
179
|
+
acknowledgedWarnings = new Set();
|
|
180
|
+
lastCheckTime = 0;
|
|
181
|
+
checkIntervalMs = 60 * 60 * 1000; // 1 hour
|
|
182
|
+
warningCallbacks = [];
|
|
183
|
+
/**
|
|
184
|
+
* Check compliance for all active providers
|
|
185
|
+
*/
|
|
186
|
+
checkAllProviders(activeProviders) {
|
|
187
|
+
const allWarnings = [];
|
|
188
|
+
const allRecommendations = [];
|
|
189
|
+
for (const { provider, authMethod, authSource } of activeProviders) {
|
|
190
|
+
const status = checkProviderCompliance(provider, authMethod, authSource);
|
|
191
|
+
allWarnings.push(...status.warnings);
|
|
192
|
+
allRecommendations.push(...status.recommendations);
|
|
193
|
+
}
|
|
194
|
+
// Dedupe recommendations
|
|
195
|
+
const uniqueRecommendations = [...new Set(allRecommendations)];
|
|
196
|
+
return {
|
|
197
|
+
isCompliant: allWarnings.filter(w => w.severity === 'critical').length === 0,
|
|
198
|
+
warnings: allWarnings,
|
|
199
|
+
recommendations: uniqueRecommendations,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Display warnings if not recently checked
|
|
204
|
+
*/
|
|
205
|
+
displayWarningsIfNeeded(providers) {
|
|
206
|
+
const now = Date.now();
|
|
207
|
+
// Skip if recently checked
|
|
208
|
+
if (now - this.lastCheckTime < this.checkIntervalMs) {
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
this.lastCheckTime = now;
|
|
212
|
+
const status = this.checkAllProviders(providers);
|
|
213
|
+
// Filter out acknowledged warnings
|
|
214
|
+
const newWarnings = status.warnings.filter(w => !this.acknowledgedWarnings.has(`${w.provider}-${w.code}`));
|
|
215
|
+
if (newWarnings.length === 0) {
|
|
216
|
+
return false;
|
|
217
|
+
}
|
|
218
|
+
// Display warnings
|
|
219
|
+
const formatted = formatWarnings({ ...status, warnings: newWarnings });
|
|
220
|
+
if (formatted) {
|
|
221
|
+
console.log(formatted);
|
|
222
|
+
}
|
|
223
|
+
// Trigger callbacks
|
|
224
|
+
this.warningCallbacks.forEach(cb => cb(newWarnings));
|
|
225
|
+
return newWarnings.length > 0;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Acknowledge a warning (won't show again this session)
|
|
229
|
+
*/
|
|
230
|
+
acknowledgeWarning(provider, code) {
|
|
231
|
+
this.acknowledgedWarnings.add(`${provider}-${code}`);
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Acknowledge all current warnings
|
|
235
|
+
*/
|
|
236
|
+
acknowledgeAll(warnings) {
|
|
237
|
+
for (const warning of warnings) {
|
|
238
|
+
this.acknowledgedWarnings.add(`${warning.provider}-${warning.code}`);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Register warning callback
|
|
243
|
+
*/
|
|
244
|
+
onWarning(callback) {
|
|
245
|
+
this.warningCallbacks.push(callback);
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Set check interval
|
|
249
|
+
*/
|
|
250
|
+
setCheckInterval(intervalMs) {
|
|
251
|
+
this.checkIntervalMs = intervalMs;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Force next check
|
|
255
|
+
*/
|
|
256
|
+
forceNextCheck() {
|
|
257
|
+
this.lastCheckTime = 0;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Get policy for a provider
|
|
261
|
+
*/
|
|
262
|
+
getPolicy(provider) {
|
|
263
|
+
return PROVIDER_TOS_POLICIES[provider];
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Create a ToS warning manager
|
|
268
|
+
*/
|
|
269
|
+
export function createTosWarningManager() {
|
|
270
|
+
return new TosWarningManager();
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Quick check for subscription compliance
|
|
274
|
+
*/
|
|
275
|
+
export function warnIfSubscriptionInAutomation(provider, authMethod) {
|
|
276
|
+
if (authMethod !== 'subscription') {
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
if (!isAutomationContext()) {
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
const policy = PROVIDER_TOS_POLICIES[provider];
|
|
283
|
+
if (policy.allowsAutomation) {
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
console.warn(`
|
|
287
|
+
╔══════════════════════════════════════════════════════════════════════════════╗
|
|
288
|
+
║ ⚠️ WARNING ║
|
|
289
|
+
╚══════════════════════════════════════════════════════════════════════════════╝
|
|
290
|
+
|
|
291
|
+
You are using a ${policy.name} subscription in an automation context.
|
|
292
|
+
This may violate the Terms of Service.
|
|
293
|
+
|
|
294
|
+
Subscription credentials are typically intended for interactive use.
|
|
295
|
+
For automated or programmatic use, please use an API key.
|
|
296
|
+
|
|
297
|
+
Get an API key at: ${policy.apiKeyUrl}
|
|
298
|
+
Terms of Service: ${policy.tosUrl}
|
|
299
|
+
|
|
300
|
+
To suppress this warning, set ${provider.toUpperCase()}_API_KEY environment variable.
|
|
301
|
+
`);
|
|
302
|
+
}
|
|
303
|
+
export default TosWarningManager;
|
|
304
|
+
//# sourceMappingURL=tos-warning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tos-warning.js","sourceRoot":"","sources":["../../src/utils/tos-warning.ts"],"names":[],"mappings":"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"}
|