stelo 1.0.1

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 (141) hide show
  1. package/LICENSE +184 -0
  2. package/README.md +853 -0
  3. package/dist/accessibility.d.ts +227 -0
  4. package/dist/accessibility.d.ts.map +1 -0
  5. package/dist/accessibility.js +602 -0
  6. package/dist/accessibility.js.map +1 -0
  7. package/dist/agent.d.ts +870 -0
  8. package/dist/agent.d.ts.map +1 -0
  9. package/dist/agent.js +1107 -0
  10. package/dist/agent.js.map +1 -0
  11. package/dist/audio-stream.d.ts +114 -0
  12. package/dist/audio-stream.d.ts.map +1 -0
  13. package/dist/audio-stream.js +167 -0
  14. package/dist/audio-stream.js.map +1 -0
  15. package/dist/clipboard.d.ts +99 -0
  16. package/dist/clipboard.d.ts.map +1 -0
  17. package/dist/clipboard.js +352 -0
  18. package/dist/clipboard.js.map +1 -0
  19. package/dist/config.d.ts +183 -0
  20. package/dist/config.d.ts.map +1 -0
  21. package/dist/config.js +477 -0
  22. package/dist/config.js.map +1 -0
  23. package/dist/context.d.ts +213 -0
  24. package/dist/context.d.ts.map +1 -0
  25. package/dist/context.js +387 -0
  26. package/dist/context.js.map +1 -0
  27. package/dist/cortex.d.ts +548 -0
  28. package/dist/cortex.d.ts.map +1 -0
  29. package/dist/cortex.js +1479 -0
  30. package/dist/cortex.js.map +1 -0
  31. package/dist/errors.d.ts +133 -0
  32. package/dist/errors.d.ts.map +1 -0
  33. package/dist/errors.js +278 -0
  34. package/dist/errors.js.map +1 -0
  35. package/dist/events.d.ts +227 -0
  36. package/dist/events.d.ts.map +1 -0
  37. package/dist/events.js +429 -0
  38. package/dist/events.js.map +1 -0
  39. package/dist/executor.d.ts +212 -0
  40. package/dist/executor.d.ts.map +1 -0
  41. package/dist/executor.js +545 -0
  42. package/dist/executor.js.map +1 -0
  43. package/dist/index.d.ts +69 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +167 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/integration.d.ts +159 -0
  48. package/dist/integration.d.ts.map +1 -0
  49. package/dist/integration.js +533 -0
  50. package/dist/integration.js.map +1 -0
  51. package/dist/keyboard.d.ts +276 -0
  52. package/dist/keyboard.d.ts.map +1 -0
  53. package/dist/keyboard.js +404 -0
  54. package/dist/keyboard.js.map +1 -0
  55. package/dist/logger.d.ts +198 -0
  56. package/dist/logger.d.ts.map +1 -0
  57. package/dist/logger.js +516 -0
  58. package/dist/logger.js.map +1 -0
  59. package/dist/middleware.d.ts +183 -0
  60. package/dist/middleware.d.ts.map +1 -0
  61. package/dist/middleware.js +493 -0
  62. package/dist/middleware.js.map +1 -0
  63. package/dist/monitor.d.ts +136 -0
  64. package/dist/monitor.d.ts.map +1 -0
  65. package/dist/monitor.js +341 -0
  66. package/dist/monitor.js.map +1 -0
  67. package/dist/mouse.d.ts +290 -0
  68. package/dist/mouse.d.ts.map +1 -0
  69. package/dist/mouse.js +466 -0
  70. package/dist/mouse.js.map +1 -0
  71. package/dist/plugin.d.ts +157 -0
  72. package/dist/plugin.d.ts.map +1 -0
  73. package/dist/plugin.js +409 -0
  74. package/dist/plugin.js.map +1 -0
  75. package/dist/process.d.ts +106 -0
  76. package/dist/process.d.ts.map +1 -0
  77. package/dist/process.js +326 -0
  78. package/dist/process.js.map +1 -0
  79. package/dist/recorder.d.ts +100 -0
  80. package/dist/recorder.d.ts.map +1 -0
  81. package/dist/recorder.js +258 -0
  82. package/dist/recorder.js.map +1 -0
  83. package/dist/safety.d.ts +59 -0
  84. package/dist/safety.d.ts.map +1 -0
  85. package/dist/safety.js +98 -0
  86. package/dist/safety.js.map +1 -0
  87. package/dist/scheduler.d.ts +152 -0
  88. package/dist/scheduler.d.ts.map +1 -0
  89. package/dist/scheduler.js +615 -0
  90. package/dist/scheduler.js.map +1 -0
  91. package/dist/screen.d.ts +96 -0
  92. package/dist/screen.d.ts.map +1 -0
  93. package/dist/screen.js +154 -0
  94. package/dist/screen.js.map +1 -0
  95. package/dist/session.d.ts +209 -0
  96. package/dist/session.d.ts.map +1 -0
  97. package/dist/session.js +479 -0
  98. package/dist/session.js.map +1 -0
  99. package/dist/stream.d.ts +168 -0
  100. package/dist/stream.d.ts.map +1 -0
  101. package/dist/stream.js +298 -0
  102. package/dist/stream.js.map +1 -0
  103. package/dist/telemetry.d.ts +223 -0
  104. package/dist/telemetry.d.ts.map +1 -0
  105. package/dist/telemetry.js +433 -0
  106. package/dist/telemetry.js.map +1 -0
  107. package/dist/types.d.ts +165 -0
  108. package/dist/types.d.ts.map +1 -0
  109. package/dist/types.js +8 -0
  110. package/dist/types.js.map +1 -0
  111. package/dist/utils/bezier.d.ts +51 -0
  112. package/dist/utils/bezier.d.ts.map +1 -0
  113. package/dist/utils/bezier.js +117 -0
  114. package/dist/utils/bezier.js.map +1 -0
  115. package/dist/utils/helpers.d.ts +90 -0
  116. package/dist/utils/helpers.d.ts.map +1 -0
  117. package/dist/utils/helpers.js +143 -0
  118. package/dist/utils/helpers.js.map +1 -0
  119. package/dist/utils/index.d.ts +4 -0
  120. package/dist/utils/index.d.ts.map +1 -0
  121. package/dist/utils/index.js +18 -0
  122. package/dist/utils/index.js.map +1 -0
  123. package/dist/validation.d.ts +254 -0
  124. package/dist/validation.d.ts.map +1 -0
  125. package/dist/validation.js +478 -0
  126. package/dist/validation.js.map +1 -0
  127. package/dist/vision.d.ts +719 -0
  128. package/dist/vision.d.ts.map +1 -0
  129. package/dist/vision.js +1197 -0
  130. package/dist/vision.js.map +1 -0
  131. package/dist/window.d.ts +80 -0
  132. package/dist/window.d.ts.map +1 -0
  133. package/dist/window.js +170 -0
  134. package/dist/window.js.map +1 -0
  135. package/dist/workflow.d.ts +224 -0
  136. package/dist/workflow.d.ts.map +1 -0
  137. package/dist/workflow.js +578 -0
  138. package/dist/workflow.js.map +1 -0
  139. package/index.d.ts +840 -0
  140. package/index.js +495 -0
  141. package/package.json +91 -0
@@ -0,0 +1,352 @@
1
+ "use strict";
2
+ // ============================================================================
3
+ // Stelo — Clipboard Module
4
+ // ============================================================================
5
+ // Read/write clipboard text and images, clipboard monitoring, content type
6
+ // detection, and clipboard history tracking.
7
+ // ============================================================================
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.clipboard = void 0;
10
+ const events_1 = require("./events");
11
+ const logger_1 = require("./logger");
12
+ // ── Internal State ───────────────────────────────────────────────────────────
13
+ const _history = [];
14
+ let _maxHistory = 100;
15
+ let _watchInterval = null;
16
+ let _lastHash = '';
17
+ const _log = logger_1.logger.child('clipboard');
18
+ function simpleHash(str) {
19
+ let hash = 0;
20
+ for (let i = 0; i < str.length; i++) {
21
+ const char = str.charCodeAt(i);
22
+ hash = ((hash << 5) - hash) + char;
23
+ hash |= 0;
24
+ }
25
+ return hash.toString(36);
26
+ }
27
+ function getNative() {
28
+ try {
29
+ return require('../index.js');
30
+ }
31
+ catch {
32
+ return null;
33
+ }
34
+ }
35
+ // ── Clipboard Operations ─────────────────────────────────────────────────────
36
+ exports.clipboard = {
37
+ /**
38
+ * Read text from the clipboard.
39
+ *
40
+ * Uses keyboard shortcut approach if no native clipboard API is available.
41
+ * For best results, ensure the active window supports Ctrl+V pasting.
42
+ */
43
+ async readText() {
44
+ try {
45
+ // Try using PowerShell to read clipboard (Windows)
46
+ if (process.platform === 'win32') {
47
+ const { execSync } = require('child_process');
48
+ const result = execSync('powershell -command "Get-Clipboard"', {
49
+ encoding: 'utf-8',
50
+ timeout: 5000,
51
+ windowsHide: true,
52
+ });
53
+ return result.trimEnd();
54
+ }
55
+ // macOS
56
+ if (process.platform === 'darwin') {
57
+ const { execSync } = require('child_process');
58
+ return execSync('pbpaste', { encoding: 'utf-8', timeout: 5000 });
59
+ }
60
+ // Linux
61
+ if (process.platform === 'linux') {
62
+ const { execSync } = require('child_process');
63
+ try {
64
+ return execSync('xclip -selection clipboard -o', { encoding: 'utf-8', timeout: 5000 });
65
+ }
66
+ catch {
67
+ return execSync('xsel --clipboard --output', { encoding: 'utf-8', timeout: 5000 });
68
+ }
69
+ }
70
+ return '';
71
+ }
72
+ catch (err) {
73
+ _log.error('Failed to read clipboard', err);
74
+ return '';
75
+ }
76
+ },
77
+ /**
78
+ * Write text to the clipboard.
79
+ */
80
+ async writeText(text) {
81
+ try {
82
+ if (process.platform === 'win32') {
83
+ const { execSync } = require('child_process');
84
+ // Pipe text via stdin to avoid command injection
85
+ execSync('powershell -NoProfile -NonInteractive -Command "$input | Set-Clipboard"', {
86
+ input: text,
87
+ timeout: 5000,
88
+ windowsHide: true,
89
+ });
90
+ }
91
+ else if (process.platform === 'darwin') {
92
+ const { execSync } = require('child_process');
93
+ execSync('pbcopy', { input: text, timeout: 5000 });
94
+ }
95
+ else if (process.platform === 'linux') {
96
+ const { execSync } = require('child_process');
97
+ try {
98
+ execSync('xclip -selection clipboard', { input: text, timeout: 5000 });
99
+ }
100
+ catch {
101
+ execSync('xsel --clipboard --input', { input: text, timeout: 5000 });
102
+ }
103
+ }
104
+ const entry = {
105
+ type: 'text',
106
+ text,
107
+ timestamp: new Date().toISOString(),
108
+ source: 'stelo',
109
+ hash: simpleHash(text),
110
+ };
111
+ _addToHistory(entry);
112
+ _lastHash = entry.hash;
113
+ events_1.events.emit('clipboard.write', 'clipboard', { type: 'text', length: text.length }, { source: 'clipboard' });
114
+ }
115
+ catch (err) {
116
+ _log.error('Failed to write clipboard', err);
117
+ throw err;
118
+ }
119
+ },
120
+ /**
121
+ * Read HTML from the clipboard (Windows only).
122
+ */
123
+ async readHtml() {
124
+ if (process.platform === 'win32') {
125
+ try {
126
+ const { execSync } = require('child_process');
127
+ return execSync('powershell -command "Get-Clipboard -Format Html"', { encoding: 'utf-8', timeout: 5000, windowsHide: true }).trimEnd();
128
+ }
129
+ catch {
130
+ return '';
131
+ }
132
+ }
133
+ return '';
134
+ },
135
+ /**
136
+ * Clear the clipboard.
137
+ */
138
+ async clear() {
139
+ try {
140
+ if (process.platform === 'win32') {
141
+ const { execSync } = require('child_process');
142
+ execSync('powershell -command "Set-Clipboard -Value $null"', {
143
+ timeout: 5000,
144
+ windowsHide: true,
145
+ });
146
+ }
147
+ else if (process.platform === 'darwin') {
148
+ const { execSync } = require('child_process');
149
+ execSync('pbcopy < /dev/null', { timeout: 5000 });
150
+ }
151
+ events_1.events.emit('clipboard.clear', 'clipboard', undefined, { source: 'clipboard' });
152
+ }
153
+ catch (err) {
154
+ _log.error('Failed to clear clipboard', err);
155
+ }
156
+ },
157
+ /**
158
+ * Copy text using keyboard shortcut (Ctrl+C / Cmd+C).
159
+ * Copies whatever is currently selected in the active window.
160
+ */
161
+ copy() {
162
+ const native = getNative();
163
+ if (native) {
164
+ const mod = process.platform === 'darwin' ? 'cmd' : 'ctrl';
165
+ native.keyboardHotkey([mod, 'c']);
166
+ }
167
+ },
168
+ /**
169
+ * Paste from clipboard using keyboard shortcut (Ctrl+V / Cmd+V).
170
+ */
171
+ paste() {
172
+ const native = getNative();
173
+ if (native) {
174
+ const mod = process.platform === 'darwin' ? 'cmd' : 'ctrl';
175
+ native.keyboardHotkey([mod, 'v']);
176
+ }
177
+ },
178
+ /**
179
+ * Cut using keyboard shortcut (Ctrl+X / Cmd+X).
180
+ */
181
+ cut() {
182
+ const native = getNative();
183
+ if (native) {
184
+ const mod = process.platform === 'darwin' ? 'cmd' : 'ctrl';
185
+ native.keyboardHotkey([mod, 'x']);
186
+ }
187
+ },
188
+ /**
189
+ * Select all text (Ctrl+A / Cmd+A), then copy.
190
+ * Returns the copied text.
191
+ */
192
+ async selectAllAndCopy() {
193
+ const native = getNative();
194
+ if (native) {
195
+ const mod = process.platform === 'darwin' ? 'cmd' : 'ctrl';
196
+ native.keyboardHotkey([mod, 'a']);
197
+ native.delay(50);
198
+ native.keyboardHotkey([mod, 'c']);
199
+ native.delay(100);
200
+ }
201
+ return exports.clipboard.readText();
202
+ },
203
+ /**
204
+ * Write text to clipboard and paste it into the active window.
205
+ * This is a common pattern for typing text that includes special characters.
206
+ */
207
+ async typeViaClipboard(text) {
208
+ // Save current clipboard
209
+ const saved = await exports.clipboard.readText();
210
+ // Write and paste
211
+ await exports.clipboard.writeText(text);
212
+ exports.clipboard.paste();
213
+ // Small delay to let paste complete
214
+ const native = getNative();
215
+ if (native)
216
+ native.delay(100);
217
+ // Restore clipboard (optional — disable if not needed)
218
+ await exports.clipboard.writeText(saved);
219
+ },
220
+ // ── Monitoring ───────────────────────────────────────────────────────────
221
+ /**
222
+ * Start watching the clipboard for changes.
223
+ * Emits 'clipboard.change' events when content changes.
224
+ */
225
+ startWatching(options) {
226
+ if (_watchInterval)
227
+ return;
228
+ const intervalMs = options?.intervalMs ?? 500;
229
+ _maxHistory = options?.maxHistory ?? 100;
230
+ _log.info('Clipboard watcher started', { intervalMs });
231
+ _watchInterval = setInterval(async () => {
232
+ try {
233
+ const text = await exports.clipboard.readText();
234
+ const hash = simpleHash(text || '');
235
+ if (hash !== _lastHash && text) {
236
+ _lastHash = hash;
237
+ const entry = {
238
+ type: text ? 'text' : 'empty',
239
+ text,
240
+ timestamp: new Date().toISOString(),
241
+ source: 'external',
242
+ hash,
243
+ };
244
+ if (options?.trackHistory !== false) {
245
+ _addToHistory(entry);
246
+ }
247
+ events_1.events.emit('clipboard.change', 'clipboard', {
248
+ type: entry.type,
249
+ length: text?.length ?? 0,
250
+ hash,
251
+ }, { source: 'clipboard' });
252
+ }
253
+ }
254
+ catch {
255
+ // Silently ignore clipboard read errors during monitoring
256
+ }
257
+ }, intervalMs);
258
+ },
259
+ /**
260
+ * Stop watching the clipboard.
261
+ */
262
+ stopWatching() {
263
+ if (_watchInterval) {
264
+ clearInterval(_watchInterval);
265
+ _watchInterval = null;
266
+ _log.info('Clipboard watcher stopped');
267
+ }
268
+ },
269
+ /** Is the clipboard watcher running? */
270
+ isWatching() {
271
+ return _watchInterval !== null;
272
+ },
273
+ // ── History ──────────────────────────────────────────────────────────────
274
+ /**
275
+ * Get clipboard history.
276
+ */
277
+ getHistory(limit) {
278
+ const entries = [..._history];
279
+ if (limit)
280
+ return entries.slice(-limit);
281
+ return entries;
282
+ },
283
+ /**
284
+ * Search clipboard history.
285
+ */
286
+ searchHistory(query) {
287
+ const lower = query.toLowerCase();
288
+ return _history.filter((e) => e.text?.toLowerCase().includes(lower) ||
289
+ e.html?.toLowerCase().includes(lower));
290
+ },
291
+ /** Clear clipboard history */
292
+ clearHistory() {
293
+ _history.length = 0;
294
+ },
295
+ // ── Utility ──────────────────────────────────────────────────────────────
296
+ /**
297
+ * Wait for the clipboard to contain specific text.
298
+ */
299
+ async waitForText(match, timeoutMs = 10000, pollIntervalMs = 200) {
300
+ const start = Date.now();
301
+ while (Date.now() - start < timeoutMs) {
302
+ const text = await exports.clipboard.readText();
303
+ if (typeof match === 'string') {
304
+ if (text.includes(match))
305
+ return text;
306
+ }
307
+ else {
308
+ if (match.test(text))
309
+ return text;
310
+ }
311
+ await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));
312
+ }
313
+ return null;
314
+ },
315
+ /**
316
+ * Detect the current clipboard content type.
317
+ */
318
+ async detectContentType() {
319
+ const text = await exports.clipboard.readText();
320
+ if (!text)
321
+ return 'empty';
322
+ // Check for HTML
323
+ if (text.startsWith('<!DOCTYPE') || text.startsWith('<html') || text.startsWith('<')) {
324
+ return 'html';
325
+ }
326
+ // Check for file paths
327
+ const lines = text.split('\n');
328
+ const pathPattern = /^[A-Z]:\\|^\/|^\\/;
329
+ if (lines.length > 0 && lines.every((l) => pathPattern.test(l.trim()))) {
330
+ return 'files';
331
+ }
332
+ return 'text';
333
+ },
334
+ /** Reset the clipboard module */
335
+ reset() {
336
+ exports.clipboard.stopWatching();
337
+ _history.length = 0;
338
+ _lastHash = '';
339
+ },
340
+ };
341
+ // ── Internal Helpers ─────────────────────────────────────────────────────────
342
+ function _addToHistory(entry) {
343
+ // Dedup
344
+ if (_history.length > 0 && _history[_history.length - 1].hash === entry.hash) {
345
+ return;
346
+ }
347
+ _history.push(entry);
348
+ while (_history.length > _maxHistory) {
349
+ _history.shift();
350
+ }
351
+ }
352
+ //# sourceMappingURL=clipboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../ts/clipboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,183 @@
1
+ export interface SteloConfig {
2
+ [key: string]: unknown;
3
+ /** Mouse automation defaults */
4
+ mouse?: {
5
+ defaultDurationMs?: number;
6
+ defaultCurve?: string;
7
+ humanize?: boolean;
8
+ jitter?: number;
9
+ overshoot?: boolean;
10
+ stepsPerSecond?: number;
11
+ };
12
+ /** Keyboard automation defaults */
13
+ keyboard?: {
14
+ defaultDelayMs?: number;
15
+ humanize?: boolean;
16
+ minDelayMs?: number;
17
+ maxDelayMs?: number;
18
+ };
19
+ /** Screen capture defaults */
20
+ screen?: {
21
+ captureFormat?: 'rgba' | 'bgra';
22
+ defaultRegion?: {
23
+ x: number;
24
+ y: number;
25
+ width: number;
26
+ height: number;
27
+ };
28
+ };
29
+ /** Safety configuration */
30
+ safety?: {
31
+ failsafe?: boolean;
32
+ failsafeThresholdPx?: number;
33
+ rateLimitPerSecond?: number;
34
+ boundaryRegion?: {
35
+ x: number;
36
+ y: number;
37
+ width: number;
38
+ height: number;
39
+ } | null;
40
+ maxConcurrentActions?: number;
41
+ emergencyStopKey?: string;
42
+ };
43
+ /** Vision defaults */
44
+ vision?: {
45
+ defaultTolerance?: number;
46
+ defaultSampleRate?: number;
47
+ gridCols?: number;
48
+ gridRows?: number;
49
+ waitTimeoutMs?: number;
50
+ waitPollIntervalMs?: number;
51
+ };
52
+ /** Stream defaults */
53
+ stream?: {
54
+ fps?: number;
55
+ scale?: number;
56
+ bufferSize?: number;
57
+ rawBgra?: boolean;
58
+ };
59
+ /** Audio stream defaults */
60
+ audio?: {
61
+ bufferSize?: number;
62
+ };
63
+ /** Executor defaults */
64
+ executor?: {
65
+ maxConcurrency?: number;
66
+ defaultTimeoutMs?: number;
67
+ defaultPriority?: number;
68
+ maxQueueSize?: number;
69
+ retryAttempts?: number;
70
+ retryDelayMs?: number;
71
+ };
72
+ /** Logging configuration */
73
+ logging?: {
74
+ level?: string;
75
+ json?: boolean;
76
+ emitEvents?: boolean;
77
+ redactSensitive?: boolean;
78
+ };
79
+ /** Telemetry configuration */
80
+ telemetry?: {
81
+ enabled?: boolean;
82
+ metricsEnabled?: boolean;
83
+ healthCheckIntervalMs?: number;
84
+ };
85
+ /** Plugin configuration */
86
+ plugins?: {
87
+ autoDiscover?: boolean;
88
+ directories?: string[];
89
+ enabled?: string[];
90
+ disabled?: string[];
91
+ config?: Record<string, Record<string, unknown>>;
92
+ };
93
+ /** Custom data */
94
+ custom?: Record<string, unknown>;
95
+ }
96
+ export interface ConfigProfile {
97
+ name: string;
98
+ description?: string;
99
+ config: Partial<SteloConfig>;
100
+ }
101
+ export interface ConfigSource {
102
+ name: string;
103
+ priority: number;
104
+ config: Partial<SteloConfig>;
105
+ }
106
+ export declare const config: {
107
+ /**
108
+ * Get the fully resolved configuration.
109
+ */
110
+ get(): SteloConfig;
111
+ /**
112
+ * Get a specific config section.
113
+ * @example config.section('mouse') → { defaultDurationMs: 500, ... }
114
+ */
115
+ section<K extends keyof SteloConfig>(key: K): SteloConfig[K];
116
+ /**
117
+ * Get a specific config value by dot-notation path.
118
+ * @example config.value('mouse.defaultDurationMs') → 500
119
+ */
120
+ value(path: string): unknown;
121
+ /**
122
+ * Set configuration values (merged with existing).
123
+ * Triggers watchers & events.
124
+ */
125
+ set(overrides: Partial<SteloConfig>): void;
126
+ /**
127
+ * Add a named configuration source with a priority.
128
+ * Higher priority sources override lower ones.
129
+ */
130
+ addSource(name: string, config: Partial<SteloConfig>, priority?: number): void;
131
+ /**
132
+ * Remove a configuration source by name.
133
+ */
134
+ removeSource(name: string): void;
135
+ /**
136
+ * List all config sources (ordered by priority).
137
+ */
138
+ getSources(): {
139
+ name: string;
140
+ priority: number;
141
+ }[];
142
+ /**
143
+ * Apply a named profile.
144
+ * @example config.useProfile('production');
145
+ */
146
+ useProfile(name: string): void;
147
+ /** Get the active profile name */
148
+ getActiveProfile(): string | undefined;
149
+ /** Register a custom profile */
150
+ registerProfile(profile: ConfigProfile): void;
151
+ /** List available profile names */
152
+ listProfiles(): string[];
153
+ /** Get a profile by name */
154
+ getProfile(name: string): ConfigProfile | undefined;
155
+ /**
156
+ * Load configuration from environment variables.
157
+ * Env vars have priority 90 (override most other sources).
158
+ */
159
+ loadEnvironment(): void;
160
+ /**
161
+ * Watch for configuration changes.
162
+ * @returns Unsubscribe function
163
+ */
164
+ onChange(handler: (config: SteloConfig) => void): () => void;
165
+ /** Freeze configuration — prevents further changes */
166
+ freeze(): void;
167
+ /** Unfreeze configuration — allows changes again */
168
+ unfreeze(): void;
169
+ /** Check if configuration is frozen */
170
+ isFrozen(): boolean;
171
+ /**
172
+ * Validate a configuration object against known schema constraints.
173
+ * Returns an array of validation errors (empty = valid).
174
+ */
175
+ validate(cfg: Partial<SteloConfig>): string[];
176
+ /** Export the resolved configuration as JSON */
177
+ toJSON(): string;
178
+ /** Import configuration from JSON */
179
+ fromJSON(json: string): void;
180
+ /** Reset to defaults */
181
+ reset(): void;
182
+ };
183
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../ts/config.ts"],"names":[],"mappings":"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"}