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.
Files changed (186) hide show
  1. package/LICENSE +81 -0
  2. package/README.md +608 -0
  3. package/bin/cli.js +448 -0
  4. package/dist/agents/coding.d.ts +15 -0
  5. package/dist/agents/coding.d.ts.map +1 -0
  6. package/dist/agents/coding.js +189 -0
  7. package/dist/agents/coding.js.map +1 -0
  8. package/dist/agents/initializer.d.ts +15 -0
  9. package/dist/agents/initializer.d.ts.map +1 -0
  10. package/dist/agents/initializer.js +87 -0
  11. package/dist/agents/initializer.js.map +1 -0
  12. package/dist/agents/prompts/arbitrator.md +143 -0
  13. package/dist/agents/prompts/coding.md +247 -0
  14. package/dist/agents/prompts/initializer.md +98 -0
  15. package/dist/config/agent-config.d.ts +103 -0
  16. package/dist/config/agent-config.d.ts.map +1 -0
  17. package/dist/config/agent-config.js +138 -0
  18. package/dist/config/agent-config.js.map +1 -0
  19. package/dist/config/auth-config.d.ts +152 -0
  20. package/dist/config/auth-config.d.ts.map +1 -0
  21. package/dist/config/auth-config.js +139 -0
  22. package/dist/config/auth-config.js.map +1 -0
  23. package/dist/config/mcp-config.d.ts +109 -0
  24. package/dist/config/mcp-config.d.ts.map +1 -0
  25. package/dist/config/mcp-config.js +234 -0
  26. package/dist/config/mcp-config.js.map +1 -0
  27. package/dist/config/provider-config.d.ts +139 -0
  28. package/dist/config/provider-config.d.ts.map +1 -0
  29. package/dist/config/provider-config.js +344 -0
  30. package/dist/config/provider-config.js.map +1 -0
  31. package/dist/config/subagents-config.d.ts +85 -0
  32. package/dist/config/subagents-config.d.ts.map +1 -0
  33. package/dist/config/subagents-config.js +430 -0
  34. package/dist/config/subagents-config.js.map +1 -0
  35. package/dist/index.d.ts +14 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +385 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/orchestrator/arbitrator.d.ts +93 -0
  40. package/dist/orchestrator/arbitrator.d.ts.map +1 -0
  41. package/dist/orchestrator/arbitrator.js +330 -0
  42. package/dist/orchestrator/arbitrator.js.map +1 -0
  43. package/dist/orchestrator/index.d.ts +113 -0
  44. package/dist/orchestrator/index.d.ts.map +1 -0
  45. package/dist/orchestrator/index.js +217 -0
  46. package/dist/orchestrator/index.js.map +1 -0
  47. package/dist/orchestrator/review-coordinator.d.ts +143 -0
  48. package/dist/orchestrator/review-coordinator.d.ts.map +1 -0
  49. package/dist/orchestrator/review-coordinator.js +401 -0
  50. package/dist/orchestrator/review-coordinator.js.map +1 -0
  51. package/dist/orchestrator/task-classifier.d.ts +87 -0
  52. package/dist/orchestrator/task-classifier.d.ts.map +1 -0
  53. package/dist/orchestrator/task-classifier.js +250 -0
  54. package/dist/orchestrator/task-classifier.js.map +1 -0
  55. package/dist/providers/anthropic-provider.d.ts +64 -0
  56. package/dist/providers/anthropic-provider.d.ts.map +1 -0
  57. package/dist/providers/anthropic-provider.js +264 -0
  58. package/dist/providers/anthropic-provider.js.map +1 -0
  59. package/dist/providers/base-provider.d.ts +219 -0
  60. package/dist/providers/base-provider.d.ts.map +1 -0
  61. package/dist/providers/base-provider.js +143 -0
  62. package/dist/providers/base-provider.js.map +1 -0
  63. package/dist/providers/cursor-provider.d.ts +82 -0
  64. package/dist/providers/cursor-provider.d.ts.map +1 -0
  65. package/dist/providers/cursor-provider.js +321 -0
  66. package/dist/providers/cursor-provider.js.map +1 -0
  67. package/dist/providers/google-provider.d.ts +75 -0
  68. package/dist/providers/google-provider.d.ts.map +1 -0
  69. package/dist/providers/google-provider.js +274 -0
  70. package/dist/providers/google-provider.js.map +1 -0
  71. package/dist/providers/index.d.ts +92 -0
  72. package/dist/providers/index.d.ts.map +1 -0
  73. package/dist/providers/index.js +233 -0
  74. package/dist/providers/index.js.map +1 -0
  75. package/dist/providers/openai-provider.d.ts +83 -0
  76. package/dist/providers/openai-provider.d.ts.map +1 -0
  77. package/dist/providers/openai-provider.js +295 -0
  78. package/dist/providers/openai-provider.js.map +1 -0
  79. package/dist/templates/feature_list.template.json +66 -0
  80. package/dist/templates/progress.template.txt +51 -0
  81. package/dist/utils/auth-manager.d.ts +121 -0
  82. package/dist/utils/auth-manager.d.ts.map +1 -0
  83. package/dist/utils/auth-manager.js +560 -0
  84. package/dist/utils/auth-manager.js.map +1 -0
  85. package/dist/utils/budget-enforcer.d.ts +181 -0
  86. package/dist/utils/budget-enforcer.d.ts.map +1 -0
  87. package/dist/utils/budget-enforcer.js +386 -0
  88. package/dist/utils/budget-enforcer.js.map +1 -0
  89. package/dist/utils/chatgpt-detector.d.ts +51 -0
  90. package/dist/utils/chatgpt-detector.d.ts.map +1 -0
  91. package/dist/utils/chatgpt-detector.js +274 -0
  92. package/dist/utils/chatgpt-detector.js.map +1 -0
  93. package/dist/utils/claude-code-detector.d.ts +39 -0
  94. package/dist/utils/claude-code-detector.d.ts.map +1 -0
  95. package/dist/utils/claude-code-detector.js +153 -0
  96. package/dist/utils/claude-code-detector.js.map +1 -0
  97. package/dist/utils/code-quality.d.ts +58 -0
  98. package/dist/utils/code-quality.d.ts.map +1 -0
  99. package/dist/utils/code-quality.js +258 -0
  100. package/dist/utils/code-quality.js.map +1 -0
  101. package/dist/utils/context-primer.d.ts +50 -0
  102. package/dist/utils/context-primer.d.ts.map +1 -0
  103. package/dist/utils/context-primer.js +429 -0
  104. package/dist/utils/context-primer.js.map +1 -0
  105. package/dist/utils/dependency-management.d.ts +40 -0
  106. package/dist/utils/dependency-management.d.ts.map +1 -0
  107. package/dist/utils/dependency-management.js +123 -0
  108. package/dist/utils/dependency-management.js.map +1 -0
  109. package/dist/utils/environment-validation.d.ts +33 -0
  110. package/dist/utils/environment-validation.d.ts.map +1 -0
  111. package/dist/utils/environment-validation.js +136 -0
  112. package/dist/utils/environment-validation.js.map +1 -0
  113. package/dist/utils/error-recovery.d.ts +60 -0
  114. package/dist/utils/error-recovery.d.ts.map +1 -0
  115. package/dist/utils/error-recovery.js +183 -0
  116. package/dist/utils/error-recovery.js.map +1 -0
  117. package/dist/utils/feature-list.d.ts +102 -0
  118. package/dist/utils/feature-list.d.ts.map +1 -0
  119. package/dist/utils/feature-list.js +191 -0
  120. package/dist/utils/feature-list.js.map +1 -0
  121. package/dist/utils/gemini-detector.d.ts +65 -0
  122. package/dist/utils/gemini-detector.d.ts.map +1 -0
  123. package/dist/utils/gemini-detector.js +340 -0
  124. package/dist/utils/gemini-detector.js.map +1 -0
  125. package/dist/utils/git-utils.d.ts +48 -0
  126. package/dist/utils/git-utils.d.ts.map +1 -0
  127. package/dist/utils/git-utils.js +110 -0
  128. package/dist/utils/git-utils.js.map +1 -0
  129. package/dist/utils/health-check.d.ts +32 -0
  130. package/dist/utils/health-check.d.ts.map +1 -0
  131. package/dist/utils/health-check.js +152 -0
  132. package/dist/utils/health-check.js.map +1 -0
  133. package/dist/utils/hooks-manager.d.ts +154 -0
  134. package/dist/utils/hooks-manager.d.ts.map +1 -0
  135. package/dist/utils/hooks-manager.js +359 -0
  136. package/dist/utils/hooks-manager.js.map +1 -0
  137. package/dist/utils/multi-auth-manager.d.ts +144 -0
  138. package/dist/utils/multi-auth-manager.d.ts.map +1 -0
  139. package/dist/utils/multi-auth-manager.js +588 -0
  140. package/dist/utils/multi-auth-manager.js.map +1 -0
  141. package/dist/utils/progress.d.ts +49 -0
  142. package/dist/utils/progress.d.ts.map +1 -0
  143. package/dist/utils/progress.js +209 -0
  144. package/dist/utils/progress.js.map +1 -0
  145. package/dist/utils/project-detection.d.ts +40 -0
  146. package/dist/utils/project-detection.d.ts.map +1 -0
  147. package/dist/utils/project-detection.js +230 -0
  148. package/dist/utils/project-detection.js.map +1 -0
  149. package/dist/utils/session-manager.d.ts +119 -0
  150. package/dist/utils/session-manager.d.ts.map +1 -0
  151. package/dist/utils/session-manager.js +389 -0
  152. package/dist/utils/session-manager.js.map +1 -0
  153. package/dist/utils/skills-manager.d.ts +113 -0
  154. package/dist/utils/skills-manager.d.ts.map +1 -0
  155. package/dist/utils/skills-manager.js +332 -0
  156. package/dist/utils/skills-manager.js.map +1 -0
  157. package/dist/utils/structured-output.d.ts +117 -0
  158. package/dist/utils/structured-output.d.ts.map +1 -0
  159. package/dist/utils/structured-output.js +191 -0
  160. package/dist/utils/structured-output.js.map +1 -0
  161. package/dist/utils/subagent-manager.d.ts +143 -0
  162. package/dist/utils/subagent-manager.d.ts.map +1 -0
  163. package/dist/utils/subagent-manager.js +326 -0
  164. package/dist/utils/subagent-manager.js.map +1 -0
  165. package/dist/utils/supabase-setup.d.ts +50 -0
  166. package/dist/utils/supabase-setup.d.ts.map +1 -0
  167. package/dist/utils/supabase-setup.js +151 -0
  168. package/dist/utils/supabase-setup.js.map +1 -0
  169. package/dist/utils/token-refresh.d.ts +21 -0
  170. package/dist/utils/token-refresh.d.ts.map +1 -0
  171. package/dist/utils/token-refresh.js +77 -0
  172. package/dist/utils/token-refresh.js.map +1 -0
  173. package/dist/utils/tos-warning.d.ts +115 -0
  174. package/dist/utils/tos-warning.d.ts.map +1 -0
  175. package/dist/utils/tos-warning.js +304 -0
  176. package/dist/utils/tos-warning.js.map +1 -0
  177. package/dist/utils/usage-monitor.d.ts +156 -0
  178. package/dist/utils/usage-monitor.d.ts.map +1 -0
  179. package/dist/utils/usage-monitor.js +296 -0
  180. package/dist/utils/usage-monitor.js.map +1 -0
  181. package/package.json +105 -0
  182. package/scripts/init.ps1 +73 -0
  183. package/scripts/init.sh +86 -0
  184. package/scripts/test-auth.sh +90 -0
  185. package/templates/feature_list.template.json +66 -0
  186. 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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"}