@mainwp/control 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 (204) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +583 -0
  3. package/bin/_exit.js +12 -0
  4. package/bin/dev.js +7 -0
  5. package/bin/run.js +7 -0
  6. package/dist/chat/chat-engine.d.ts +213 -0
  7. package/dist/chat/chat-engine.d.ts.map +1 -0
  8. package/dist/chat/chat-engine.js +636 -0
  9. package/dist/chat/chat-engine.js.map +1 -0
  10. package/dist/chat/index.d.ts +10 -0
  11. package/dist/chat/index.d.ts.map +1 -0
  12. package/dist/chat/index.js +14 -0
  13. package/dist/chat/index.js.map +1 -0
  14. package/dist/chat/providers/anthropic.d.ts +52 -0
  15. package/dist/chat/providers/anthropic.d.ts.map +1 -0
  16. package/dist/chat/providers/anthropic.js +292 -0
  17. package/dist/chat/providers/anthropic.js.map +1 -0
  18. package/dist/chat/providers/gemini.d.ts +52 -0
  19. package/dist/chat/providers/gemini.d.ts.map +1 -0
  20. package/dist/chat/providers/gemini.js +284 -0
  21. package/dist/chat/providers/gemini.js.map +1 -0
  22. package/dist/chat/providers/index.d.ts +19 -0
  23. package/dist/chat/providers/index.d.ts.map +1 -0
  24. package/dist/chat/providers/index.js +23 -0
  25. package/dist/chat/providers/index.js.map +1 -0
  26. package/dist/chat/providers/local.d.ts +37 -0
  27. package/dist/chat/providers/local.d.ts.map +1 -0
  28. package/dist/chat/providers/local.js +130 -0
  29. package/dist/chat/providers/local.js.map +1 -0
  30. package/dist/chat/providers/openai-compatible.d.ts +155 -0
  31. package/dist/chat/providers/openai-compatible.d.ts.map +1 -0
  32. package/dist/chat/providers/openai-compatible.js +264 -0
  33. package/dist/chat/providers/openai-compatible.js.map +1 -0
  34. package/dist/chat/providers/openai.d.ts +24 -0
  35. package/dist/chat/providers/openai.d.ts.map +1 -0
  36. package/dist/chat/providers/openai.js +62 -0
  37. package/dist/chat/providers/openai.js.map +1 -0
  38. package/dist/chat/providers/openrouter.d.ts +26 -0
  39. package/dist/chat/providers/openrouter.d.ts.map +1 -0
  40. package/dist/chat/providers/openrouter.js +65 -0
  41. package/dist/chat/providers/openrouter.js.map +1 -0
  42. package/dist/chat/providers/provider-fetch.d.ts +15 -0
  43. package/dist/chat/providers/provider-fetch.d.ts.map +1 -0
  44. package/dist/chat/providers/provider-fetch.js +35 -0
  45. package/dist/chat/providers/provider-fetch.js.map +1 -0
  46. package/dist/chat/providers/provider.d.ts +214 -0
  47. package/dist/chat/providers/provider.d.ts.map +1 -0
  48. package/dist/chat/providers/provider.js +166 -0
  49. package/dist/chat/providers/provider.js.map +1 -0
  50. package/dist/chat/providers/sse-reader.d.ts +21 -0
  51. package/dist/chat/providers/sse-reader.d.ts.map +1 -0
  52. package/dist/chat/providers/sse-reader.js +48 -0
  53. package/dist/chat/providers/sse-reader.js.map +1 -0
  54. package/dist/chat/system-prompt.d.ts +33 -0
  55. package/dist/chat/system-prompt.d.ts.map +1 -0
  56. package/dist/chat/system-prompt.js +166 -0
  57. package/dist/chat/system-prompt.js.map +1 -0
  58. package/dist/chat/tool-envelope.d.ts +72 -0
  59. package/dist/chat/tool-envelope.d.ts.map +1 -0
  60. package/dist/chat/tool-envelope.js +263 -0
  61. package/dist/chat/tool-envelope.js.map +1 -0
  62. package/dist/commands/abilities/info.d.ts +21 -0
  63. package/dist/commands/abilities/info.d.ts.map +1 -0
  64. package/dist/commands/abilities/info.js +80 -0
  65. package/dist/commands/abilities/info.js.map +1 -0
  66. package/dist/commands/abilities/list.d.ts +19 -0
  67. package/dist/commands/abilities/list.d.ts.map +1 -0
  68. package/dist/commands/abilities/list.js +98 -0
  69. package/dist/commands/abilities/list.js.map +1 -0
  70. package/dist/commands/abilities/run.d.ts +75 -0
  71. package/dist/commands/abilities/run.d.ts.map +1 -0
  72. package/dist/commands/abilities/run.js +468 -0
  73. package/dist/commands/abilities/run.js.map +1 -0
  74. package/dist/commands/chat.d.ts +54 -0
  75. package/dist/commands/chat.d.ts.map +1 -0
  76. package/dist/commands/chat.js +384 -0
  77. package/dist/commands/chat.js.map +1 -0
  78. package/dist/commands/config/show.d.ts +54 -0
  79. package/dist/commands/config/show.d.ts.map +1 -0
  80. package/dist/commands/config/show.js +324 -0
  81. package/dist/commands/config/show.js.map +1 -0
  82. package/dist/commands/doctor.d.ts +77 -0
  83. package/dist/commands/doctor.d.ts.map +1 -0
  84. package/dist/commands/doctor.js +412 -0
  85. package/dist/commands/doctor.js.map +1 -0
  86. package/dist/commands/jobs/watch.d.ts +50 -0
  87. package/dist/commands/jobs/watch.d.ts.map +1 -0
  88. package/dist/commands/jobs/watch.js +269 -0
  89. package/dist/commands/jobs/watch.js.map +1 -0
  90. package/dist/commands/login.d.ts +25 -0
  91. package/dist/commands/login.d.ts.map +1 -0
  92. package/dist/commands/login.js +165 -0
  93. package/dist/commands/login.js.map +1 -0
  94. package/dist/commands/profile/delete.d.ts +22 -0
  95. package/dist/commands/profile/delete.d.ts.map +1 -0
  96. package/dist/commands/profile/delete.js +57 -0
  97. package/dist/commands/profile/delete.js.map +1 -0
  98. package/dist/commands/profile/list.d.ts +19 -0
  99. package/dist/commands/profile/list.d.ts.map +1 -0
  100. package/dist/commands/profile/list.js +53 -0
  101. package/dist/commands/profile/list.js.map +1 -0
  102. package/dist/commands/profile/use.d.ts +22 -0
  103. package/dist/commands/profile/use.d.ts.map +1 -0
  104. package/dist/commands/profile/use.js +46 -0
  105. package/dist/commands/profile/use.js.map +1 -0
  106. package/dist/config/fs-utils.d.ts +14 -0
  107. package/dist/config/fs-utils.d.ts.map +1 -0
  108. package/dist/config/fs-utils.js +31 -0
  109. package/dist/config/fs-utils.js.map +1 -0
  110. package/dist/config/keychain.d.ts +53 -0
  111. package/dist/config/keychain.d.ts.map +1 -0
  112. package/dist/config/keychain.js +175 -0
  113. package/dist/config/keychain.js.map +1 -0
  114. package/dist/config/profile-store.d.ts +85 -0
  115. package/dist/config/profile-store.d.ts.map +1 -0
  116. package/dist/config/profile-store.js +228 -0
  117. package/dist/config/profile-store.js.map +1 -0
  118. package/dist/config/settings.d.ts +71 -0
  119. package/dist/config/settings.d.ts.map +1 -0
  120. package/dist/config/settings.js +151 -0
  121. package/dist/config/settings.js.map +1 -0
  122. package/dist/core/abilities-executor.d.ts +126 -0
  123. package/dist/core/abilities-executor.d.ts.map +1 -0
  124. package/dist/core/abilities-executor.js +264 -0
  125. package/dist/core/abilities-executor.js.map +1 -0
  126. package/dist/core/batch-manager.d.ts +113 -0
  127. package/dist/core/batch-manager.d.ts.map +1 -0
  128. package/dist/core/batch-manager.js +244 -0
  129. package/dist/core/batch-manager.js.map +1 -0
  130. package/dist/core/http-client.d.ts +111 -0
  131. package/dist/core/http-client.d.ts.map +1 -0
  132. package/dist/core/http-client.js +329 -0
  133. package/dist/core/http-client.js.map +1 -0
  134. package/dist/core/safety-controller.d.ts +114 -0
  135. package/dist/core/safety-controller.d.ts.map +1 -0
  136. package/dist/core/safety-controller.js +229 -0
  137. package/dist/core/safety-controller.js.map +1 -0
  138. package/dist/hooks/command-not-found.d.ts +12 -0
  139. package/dist/hooks/command-not-found.d.ts.map +1 -0
  140. package/dist/hooks/command-not-found.js +58 -0
  141. package/dist/hooks/command-not-found.js.map +1 -0
  142. package/dist/index.d.ts +7 -0
  143. package/dist/index.d.ts.map +1 -0
  144. package/dist/index.js +7 -0
  145. package/dist/index.js.map +1 -0
  146. package/dist/lib/base-command.d.ts +123 -0
  147. package/dist/lib/base-command.d.ts.map +1 -0
  148. package/dist/lib/base-command.js +285 -0
  149. package/dist/lib/base-command.js.map +1 -0
  150. package/dist/output/formatter.d.ts +48 -0
  151. package/dist/output/formatter.d.ts.map +1 -0
  152. package/dist/output/formatter.js +138 -0
  153. package/dist/output/formatter.js.map +1 -0
  154. package/dist/output/json-envelope.d.ts +43 -0
  155. package/dist/output/json-envelope.d.ts.map +1 -0
  156. package/dist/output/json-envelope.js +73 -0
  157. package/dist/output/json-envelope.js.map +1 -0
  158. package/dist/utils/audit-logger.d.ts +97 -0
  159. package/dist/utils/audit-logger.d.ts.map +1 -0
  160. package/dist/utils/audit-logger.js +169 -0
  161. package/dist/utils/audit-logger.js.map +1 -0
  162. package/dist/utils/colors.d.ts +29 -0
  163. package/dist/utils/colors.d.ts.map +1 -0
  164. package/dist/utils/colors.js +36 -0
  165. package/dist/utils/colors.js.map +1 -0
  166. package/dist/utils/errors.d.ts +107 -0
  167. package/dist/utils/errors.d.ts.map +1 -0
  168. package/dist/utils/errors.js +149 -0
  169. package/dist/utils/errors.js.map +1 -0
  170. package/dist/utils/exit-codes.d.ts +21 -0
  171. package/dist/utils/exit-codes.d.ts.map +1 -0
  172. package/dist/utils/exit-codes.js +20 -0
  173. package/dist/utils/exit-codes.js.map +1 -0
  174. package/dist/utils/format.d.ts +64 -0
  175. package/dist/utils/format.d.ts.map +1 -0
  176. package/dist/utils/format.js +69 -0
  177. package/dist/utils/format.js.map +1 -0
  178. package/dist/utils/prompt.d.ts +34 -0
  179. package/dist/utils/prompt.d.ts.map +1 -0
  180. package/dist/utils/prompt.js +132 -0
  181. package/dist/utils/prompt.js.map +1 -0
  182. package/dist/utils/retry.d.ts +59 -0
  183. package/dist/utils/retry.d.ts.map +1 -0
  184. package/dist/utils/retry.js +96 -0
  185. package/dist/utils/retry.js.map +1 -0
  186. package/dist/utils/terminal-sanitizer.d.ts +60 -0
  187. package/dist/utils/terminal-sanitizer.d.ts.map +1 -0
  188. package/dist/utils/terminal-sanitizer.js +166 -0
  189. package/dist/utils/terminal-sanitizer.js.map +1 -0
  190. package/dist/validation/input-sanitizer.d.ts +76 -0
  191. package/dist/validation/input-sanitizer.d.ts.map +1 -0
  192. package/dist/validation/input-sanitizer.js +199 -0
  193. package/dist/validation/input-sanitizer.js.map +1 -0
  194. package/dist/validation/schema-validator.d.ts +75 -0
  195. package/dist/validation/schema-validator.d.ts.map +1 -0
  196. package/dist/validation/schema-validator.js +147 -0
  197. package/dist/validation/schema-validator.js.map +1 -0
  198. package/oclif.manifest.json +857 -0
  199. package/package.json +101 -0
  200. package/scripts/completions/README.md +221 -0
  201. package/scripts/completions/mainwpcontrol.bash +193 -0
  202. package/scripts/completions/mainwpcontrol.zsh +267 -0
  203. package/scripts/completions/profile-completer.sh +35 -0
  204. package/scripts/completions/regenerate.sh +78 -0
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Schema Validator for mainwpcontrol
3
+ *
4
+ * AJV-based input validation against ability JSON schemas.
5
+ * Caches compiled schemas for performance.
6
+ */
7
+ import AjvModule from 'ajv';
8
+ import { SchemaValidationError } from '../utils/errors.js';
9
+ // Handle ESM default export
10
+ const Ajv = AjvModule.default ?? AjvModule;
11
+ /**
12
+ * Schema Validator class
13
+ */
14
+ export class SchemaValidator {
15
+ ajv;
16
+ schemaCache = new Map();
17
+ constructor() {
18
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
19
+ this.ajv = new Ajv({
20
+ allErrors: true, // Collect all errors, not just first
21
+ strict: false, // Allow unknown keywords (for ability schema extensions)
22
+ coerceTypes: true, // Coerce strings to numbers, etc.
23
+ useDefaults: true, // Apply default values from schema
24
+ });
25
+ }
26
+ /**
27
+ * Validate input against a JSON schema
28
+ *
29
+ * @param input - The input data to validate
30
+ * @param schema - The JSON schema to validate against
31
+ * @param schemaId - Optional ID for caching compiled schema
32
+ * @returns Validation result with any errors
33
+ */
34
+ validate(input, schema, schemaId) {
35
+ const validate = this.getCompiledSchema(schema, schemaId);
36
+ // Clone input so AJV coerceTypes/useDefaults mutates the clone, not the caller's object
37
+ const coerced = structuredClone(input);
38
+ const valid = validate(coerced);
39
+ if (valid) {
40
+ return { valid: true, coerced };
41
+ }
42
+ const errors = this.formatErrors(validate.errors ?? []);
43
+ return { valid: false, errors, coerced };
44
+ }
45
+ /**
46
+ * Validate input and throw if invalid
47
+ *
48
+ * @param input - The input data to validate
49
+ * @param schema - The JSON schema to validate against
50
+ * @param abilityName - Name of the ability (for error message)
51
+ * @throws SchemaValidationError if validation fails
52
+ */
53
+ validateOrThrow(input, schema, abilityName) {
54
+ const result = this.validate(input, schema, abilityName);
55
+ if (!result.valid && result.errors) {
56
+ const errorMessages = result.errors.map((e) => `${e.path}: ${e.message}`).join('; ');
57
+ throw new SchemaValidationError(`Invalid input for ability "${abilityName}": ${errorMessages}`, result.errors, `Check the ability schema with \`mainwpcontrol abilities info ${abilityName}\` for required fields and types`);
58
+ }
59
+ return result;
60
+ }
61
+ /**
62
+ * Check if input would be valid (without detailed errors)
63
+ */
64
+ isValid(input, schema, schemaId) {
65
+ const validate = this.getCompiledSchema(schema, schemaId);
66
+ return validate(structuredClone(input));
67
+ }
68
+ /**
69
+ * Get or compile schema
70
+ */
71
+ getCompiledSchema(schema, schemaId) {
72
+ // Try cache if ID provided
73
+ if (schemaId) {
74
+ const cached = this.schemaCache.get(schemaId);
75
+ if (cached) {
76
+ return cached;
77
+ }
78
+ }
79
+ // Compile schema
80
+ const compiled = this.ajv.compile(schema);
81
+ // Cache if ID provided
82
+ if (schemaId) {
83
+ this.schemaCache.set(schemaId, compiled);
84
+ }
85
+ return compiled;
86
+ }
87
+ /**
88
+ * Format AJV errors into structured errors
89
+ */
90
+ formatErrors(ajvErrors) {
91
+ return ajvErrors.map((error) => ({
92
+ path: error.instancePath || '/',
93
+ message: this.formatErrorMessage(error),
94
+ keyword: error.keyword,
95
+ params: error.params,
96
+ }));
97
+ }
98
+ /**
99
+ * Format a single error into a human-readable message
100
+ */
101
+ formatErrorMessage(error) {
102
+ switch (error.keyword) {
103
+ case 'required':
104
+ return `Missing required property: ${error.params['missingProperty']}`;
105
+ case 'type':
106
+ return `Expected ${error.params['type']}, got ${typeof error.data}`;
107
+ case 'enum':
108
+ return `Must be one of: ${error.params['allowedValues'].join(', ')}`;
109
+ case 'minLength':
110
+ return `Must be at least ${error.params['limit']} characters`;
111
+ case 'maxLength':
112
+ return `Must be at most ${error.params['limit']} characters`;
113
+ case 'minimum':
114
+ return `Must be >= ${error.params['limit']}`;
115
+ case 'maximum':
116
+ return `Must be <= ${error.params['limit']}`;
117
+ case 'pattern':
118
+ return `Must match pattern: ${error.params['pattern']}`;
119
+ case 'format':
120
+ return `Must be a valid ${error.params['format']}`;
121
+ case 'additionalProperties':
122
+ return `Unknown property: ${error.params['additionalProperty']}`;
123
+ default:
124
+ return error.message ?? 'Validation failed';
125
+ }
126
+ }
127
+ /**
128
+ * Clear the schema cache
129
+ */
130
+ clearCache() {
131
+ this.schemaCache.clear();
132
+ }
133
+ }
134
+ /**
135
+ * Singleton instance
136
+ */
137
+ let instance = null;
138
+ /**
139
+ * Get the schema validator singleton
140
+ */
141
+ export function getSchemaValidator() {
142
+ if (!instance) {
143
+ instance = new SchemaValidator();
144
+ }
145
+ return instance;
146
+ }
147
+ //# sourceMappingURL=schema-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-validator.js","sourceRoot":"","sources":["../../src/validation/schema-validator.ts"],"names":[],"mappings":"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"}