@defai.digital/ax-cli 4.1.11 → 4.1.15

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 (86) hide show
  1. package/.ax-cli/settings.json +1 -0
  2. package/README.md +140 -589
  3. package/bin/ax-cli +6 -0
  4. package/dist/agent/dependency-resolver.d.ts +7 -0
  5. package/dist/agent/dependency-resolver.js +46 -18
  6. package/dist/agent/dependency-resolver.js.map +1 -1
  7. package/dist/agent/execution/tool-executor.d.ts +4 -0
  8. package/dist/agent/execution/tool-executor.js +76 -52
  9. package/dist/agent/execution/tool-executor.js.map +1 -1
  10. package/dist/agent/parallel-tools.d.ts +4 -0
  11. package/dist/agent/parallel-tools.js +65 -24
  12. package/dist/agent/parallel-tools.js.map +1 -1
  13. package/dist/agent/planning/plan-executor.d.ts +0 -5
  14. package/dist/agent/planning/plan-executor.js +23 -6
  15. package/dist/agent/planning/plan-executor.js.map +1 -1
  16. package/dist/agent/streaming/stream-handler.js +7 -4
  17. package/dist/agent/streaming/stream-handler.js.map +1 -1
  18. package/dist/agent/subagent-orchestrator.d.ts +35 -2
  19. package/dist/agent/subagent-orchestrator.js +188 -146
  20. package/dist/agent/subagent-orchestrator.js.map +1 -1
  21. package/dist/agent/subagent-types.js +3 -1
  22. package/dist/agent/subagent-types.js.map +1 -1
  23. package/dist/agent/subagent.d.ts +15 -4
  24. package/dist/agent/subagent.js +91 -72
  25. package/dist/agent/subagent.js.map +1 -1
  26. package/dist/design/figma-alias.d.ts +77 -0
  27. package/dist/design/figma-alias.js +246 -0
  28. package/dist/design/figma-alias.js.map +1 -1
  29. package/dist/design/figma-client.d.ts +4 -0
  30. package/dist/design/figma-client.js +24 -4
  31. package/dist/design/figma-client.js.map +1 -1
  32. package/dist/design/figma-map.js +78 -6
  33. package/dist/design/figma-map.js.map +1 -1
  34. package/dist/design/figma-tokens.js +6 -2
  35. package/dist/design/figma-tokens.js.map +1 -1
  36. package/dist/design/index.d.ts +1 -1
  37. package/dist/design/index.js +3 -1
  38. package/dist/design/index.js.map +1 -1
  39. package/dist/design/types.d.ts +9 -0
  40. package/dist/index.js +1 -0
  41. package/dist/index.js.map +1 -1
  42. package/dist/mcp/client-v2.js +4 -0
  43. package/dist/mcp/client-v2.js.map +1 -1
  44. package/dist/mcp/config-detector.js +3 -4
  45. package/dist/mcp/config-detector.js.map +1 -1
  46. package/dist/mcp/debug.d.ts +207 -0
  47. package/dist/mcp/debug.js +398 -0
  48. package/dist/mcp/debug.js.map +1 -0
  49. package/dist/mcp/index.d.ts +1 -0
  50. package/dist/mcp/index.js +4 -0
  51. package/dist/mcp/index.js.map +1 -1
  52. package/dist/mcp/reconnection.js +6 -3
  53. package/dist/mcp/reconnection.js.map +1 -1
  54. package/dist/mcp/validation.js +15 -6
  55. package/dist/mcp/validation.js.map +1 -1
  56. package/dist/memory/index.d.ts +1 -0
  57. package/dist/memory/index.js +2 -0
  58. package/dist/memory/index.js.map +1 -1
  59. package/dist/memory/provider-context-store.d.ts +127 -0
  60. package/dist/memory/provider-context-store.js +385 -0
  61. package/dist/memory/provider-context-store.js.map +1 -0
  62. package/dist/sdk/errors.d.ts +2 -0
  63. package/dist/sdk/errors.js +2 -0
  64. package/dist/sdk/errors.js.map +1 -1
  65. package/dist/sdk/index.d.ts +633 -62
  66. package/dist/sdk/index.js +854 -116
  67. package/dist/sdk/index.js.map +1 -1
  68. package/dist/sdk/testing.d.ts +46 -4
  69. package/dist/sdk/testing.js +58 -6
  70. package/dist/sdk/testing.js.map +1 -1
  71. package/dist/sdk/version.d.ts +13 -9
  72. package/dist/sdk/version.js +13 -9
  73. package/dist/sdk/version.js.map +1 -1
  74. package/dist/utils/file-lock.d.ts +141 -0
  75. package/dist/utils/file-lock.js +559 -0
  76. package/dist/utils/file-lock.js.map +1 -0
  77. package/dist/utils/provider-context.d.ts +243 -0
  78. package/dist/utils/provider-context.js +421 -0
  79. package/dist/utils/provider-context.js.map +1 -0
  80. package/dist/utils/provider-file-cache.d.ts +91 -0
  81. package/dist/utils/provider-file-cache.js +165 -0
  82. package/dist/utils/provider-file-cache.js.map +1 -0
  83. package/dist/utils/provider-settings.d.ts +181 -0
  84. package/dist/utils/provider-settings.js +450 -0
  85. package/dist/utils/provider-settings.js.map +1 -0
  86. package/package.json +4 -3
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Provider-Aware File Cache
3
+ *
4
+ * This module extends FileCache to support provider-specific cache isolation.
5
+ * When running ax-glm and ax-grok in parallel, each has its own cache directory:
6
+ * - ~/.ax-glm/cache/
7
+ * - ~/.ax-grok/cache/
8
+ *
9
+ * Benefits:
10
+ * - No cache collisions between providers
11
+ * - Independent cache eviction per provider
12
+ * - Clear cache separation for debugging
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * // Get cache for current provider context
17
+ * const cache = await getProviderFileCache<AnalysisResult>('analysis');
18
+ *
19
+ * // Get cache for specific provider
20
+ * const glmCache = await getProviderFileCache<AnalysisResult>('analysis', 'glm');
21
+ * const grokCache = await getProviderFileCache<AnalysisResult>('analysis', 'grok');
22
+ * ```
23
+ */
24
+ import { FileCache } from './file-cache.js';
25
+ import { ProviderType } from './provider-context.js';
26
+ /**
27
+ * Provider-aware file cache configuration
28
+ */
29
+ export interface ProviderFileCacheConfig {
30
+ /** Entry time-to-live in milliseconds (default: 7 days) */
31
+ ttl?: number;
32
+ /** Max cache entries (default: 10000) */
33
+ maxEntries?: number;
34
+ /** Max cache size in bytes (default: 100MB) */
35
+ maxSize?: number;
36
+ /** Enable git-based change detection (default: true) */
37
+ useGit?: boolean;
38
+ /** Tool version for cache invalidation */
39
+ toolVersion?: string;
40
+ }
41
+ /**
42
+ * Get or create a provider-aware file cache
43
+ *
44
+ * @param namespace - Cache namespace (e.g., 'analysis', 'dependency', 'security')
45
+ * @param provider - Provider type (default: current context)
46
+ * @param config - Cache configuration
47
+ * @returns Initialized file cache
48
+ */
49
+ export declare function getProviderFileCache<T = unknown>(namespace: string, provider?: ProviderType, config?: ProviderFileCacheConfig): Promise<FileCache<T>>;
50
+ /**
51
+ * Get provider-aware file cache synchronously (without init)
52
+ *
53
+ * Use this when you need immediate access and will call init() later
54
+ */
55
+ export declare function getProviderFileCacheSync<T = unknown>(namespace: string, provider?: ProviderType, config?: ProviderFileCacheConfig): FileCache<T>;
56
+ /**
57
+ * Save all provider cache instances
58
+ */
59
+ export declare function saveAllProviderCaches(): Promise<void>;
60
+ /**
61
+ * Clear cache for a specific provider
62
+ */
63
+ export declare function clearProviderCache(provider: ProviderType): Promise<void>;
64
+ /**
65
+ * Clear all provider caches
66
+ */
67
+ export declare function clearAllProviderCaches(): Promise<void>;
68
+ /**
69
+ * Get cache statistics for a provider
70
+ */
71
+ export declare function getProviderCacheStats(provider: ProviderType): {
72
+ namespaces: string[];
73
+ totalEntries: number;
74
+ totalHits: number;
75
+ totalMisses: number;
76
+ hitRate: number;
77
+ };
78
+ /**
79
+ * Get cache statistics for all providers
80
+ */
81
+ export declare function getAllProviderCacheStats(): Map<ProviderType, {
82
+ namespaces: string[];
83
+ totalEntries: number;
84
+ totalHits: number;
85
+ totalMisses: number;
86
+ hitRate: number;
87
+ }>;
88
+ /**
89
+ * Reset all provider cache instances (for testing)
90
+ */
91
+ export declare function resetProviderCaches(): void;
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Provider-Aware File Cache
3
+ *
4
+ * This module extends FileCache to support provider-specific cache isolation.
5
+ * When running ax-glm and ax-grok in parallel, each has its own cache directory:
6
+ * - ~/.ax-glm/cache/
7
+ * - ~/.ax-grok/cache/
8
+ *
9
+ * Benefits:
10
+ * - No cache collisions between providers
11
+ * - Independent cache eviction per provider
12
+ * - Clear cache separation for debugging
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * // Get cache for current provider context
17
+ * const cache = await getProviderFileCache<AnalysisResult>('analysis');
18
+ *
19
+ * // Get cache for specific provider
20
+ * const glmCache = await getProviderFileCache<AnalysisResult>('analysis', 'glm');
21
+ * const grokCache = await getProviderFileCache<AnalysisResult>('analysis', 'grok');
22
+ * ```
23
+ */
24
+ import { createFileCache } from './file-cache.js';
25
+ import { ProviderContext, getProviderContext, } from './provider-context.js';
26
+ /**
27
+ * Cache instances keyed by provider:namespace
28
+ */
29
+ const providerCacheInstances = new Map();
30
+ /**
31
+ * Get or create a provider-aware file cache
32
+ *
33
+ * @param namespace - Cache namespace (e.g., 'analysis', 'dependency', 'security')
34
+ * @param provider - Provider type (default: current context)
35
+ * @param config - Cache configuration
36
+ * @returns Initialized file cache
37
+ */
38
+ export async function getProviderFileCache(namespace, provider, config) {
39
+ // Get provider context
40
+ const ctx = provider
41
+ ? ProviderContext.create(provider)
42
+ : getProviderContext();
43
+ // Create unique key for this provider:namespace combination
44
+ const key = `${ctx.provider}:${namespace}`;
45
+ // Return existing instance if available
46
+ if (providerCacheInstances.has(key)) {
47
+ const cache = providerCacheInstances.get(key);
48
+ await cache.init();
49
+ return cache;
50
+ }
51
+ // Create new cache with provider-specific directory
52
+ const cache = createFileCache({
53
+ cacheDir: ctx.userCacheDir,
54
+ namespace: ctx.getCacheNamespace(namespace),
55
+ ttl: config?.ttl,
56
+ maxEntries: config?.maxEntries,
57
+ maxSize: config?.maxSize,
58
+ useGit: config?.useGit,
59
+ toolVersion: config?.toolVersion,
60
+ });
61
+ // Initialize and store
62
+ await cache.init();
63
+ providerCacheInstances.set(key, cache);
64
+ return cache;
65
+ }
66
+ /**
67
+ * Get provider-aware file cache synchronously (without init)
68
+ *
69
+ * Use this when you need immediate access and will call init() later
70
+ */
71
+ export function getProviderFileCacheSync(namespace, provider, config) {
72
+ const ctx = provider
73
+ ? ProviderContext.create(provider)
74
+ : getProviderContext();
75
+ const key = `${ctx.provider}:${namespace}`;
76
+ if (providerCacheInstances.has(key)) {
77
+ return providerCacheInstances.get(key);
78
+ }
79
+ const cache = createFileCache({
80
+ cacheDir: ctx.userCacheDir,
81
+ namespace: ctx.getCacheNamespace(namespace),
82
+ ttl: config?.ttl,
83
+ maxEntries: config?.maxEntries,
84
+ maxSize: config?.maxSize,
85
+ useGit: config?.useGit,
86
+ toolVersion: config?.toolVersion,
87
+ });
88
+ providerCacheInstances.set(key, cache);
89
+ return cache;
90
+ }
91
+ /**
92
+ * Save all provider cache instances
93
+ */
94
+ export async function saveAllProviderCaches() {
95
+ await Promise.all(Array.from(providerCacheInstances.values()).map((cache) => cache.save()));
96
+ }
97
+ /**
98
+ * Clear cache for a specific provider
99
+ */
100
+ export async function clearProviderCache(provider) {
101
+ const keysToDelete = [];
102
+ for (const [key, cache] of providerCacheInstances.entries()) {
103
+ if (key.startsWith(`${provider}:`)) {
104
+ await cache.clear();
105
+ keysToDelete.push(key);
106
+ }
107
+ }
108
+ keysToDelete.forEach((key) => providerCacheInstances.delete(key));
109
+ }
110
+ /**
111
+ * Clear all provider caches
112
+ */
113
+ export async function clearAllProviderCaches() {
114
+ await Promise.all(Array.from(providerCacheInstances.values()).map((cache) => cache.clear()));
115
+ providerCacheInstances.clear();
116
+ }
117
+ /**
118
+ * Get cache statistics for a provider
119
+ */
120
+ export function getProviderCacheStats(provider) {
121
+ const namespaces = [];
122
+ let totalEntries = 0;
123
+ let totalHits = 0;
124
+ let totalMisses = 0;
125
+ for (const [key, cache] of providerCacheInstances.entries()) {
126
+ if (key.startsWith(`${provider}:`)) {
127
+ const namespace = key.substring(provider.length + 1);
128
+ namespaces.push(namespace);
129
+ const stats = cache.getStats();
130
+ totalEntries += stats.totalEntries;
131
+ totalHits += stats.hits;
132
+ totalMisses += stats.misses;
133
+ }
134
+ }
135
+ const totalRequests = totalHits + totalMisses;
136
+ const hitRate = totalRequests > 0 ? totalHits / totalRequests : 0;
137
+ return {
138
+ namespaces,
139
+ totalEntries,
140
+ totalHits,
141
+ totalMisses,
142
+ hitRate,
143
+ };
144
+ }
145
+ /**
146
+ * Get cache statistics for all providers
147
+ */
148
+ export function getAllProviderCacheStats() {
149
+ const providers = ['glm', 'grok', 'generic'];
150
+ const stats = new Map();
151
+ for (const provider of providers) {
152
+ const providerStats = getProviderCacheStats(provider);
153
+ if (providerStats.namespaces.length > 0) {
154
+ stats.set(provider, providerStats);
155
+ }
156
+ }
157
+ return stats;
158
+ }
159
+ /**
160
+ * Reset all provider cache instances (for testing)
161
+ */
162
+ export function resetProviderCaches() {
163
+ providerCacheInstances.clear();
164
+ }
165
+ //# sourceMappingURL=provider-file-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-file-cache.js","sourceRoot":"","sources":["../../src/utils/provider-file-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAa,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EACL,eAAe,EAEf,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAkB/B;;GAEG;AACH,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAA8B,CAAC;AAErE;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,SAAiB,EACjB,QAAuB,EACvB,MAAgC;IAEhC,uBAAuB;IACvB,MAAM,GAAG,GAAG,QAAQ;QAClB,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC;QAClC,CAAC,CAAC,kBAAkB,EAAE,CAAC;IAEzB,4DAA4D;IAC5D,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC;IAE3C,wCAAwC;IACxC,IAAI,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAiB,CAAC;QAC9D,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,oDAAoD;IACpD,MAAM,KAAK,GAAG,eAAe,CAAI;QAC/B,QAAQ,EAAE,GAAG,CAAC,YAAY;QAC1B,SAAS,EAAE,GAAG,CAAC,iBAAiB,CAAC,SAAS,CAAC;QAC3C,GAAG,EAAE,MAAM,EAAE,GAAG;QAChB,UAAU,EAAE,MAAM,EAAE,UAAU;QAC9B,OAAO,EAAE,MAAM,EAAE,OAAO;QACxB,MAAM,EAAE,MAAM,EAAE,MAAM;QACtB,WAAW,EAAE,MAAM,EAAE,WAAW;KACjC,CAAC,CAAC;IAEH,uBAAuB;IACvB,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;IACnB,sBAAsB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAEvC,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CACtC,SAAiB,EACjB,QAAuB,EACvB,MAAgC;IAEhC,MAAM,GAAG,GAAG,QAAQ;QAClB,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC;QAClC,CAAC,CAAC,kBAAkB,EAAE,CAAC;IAEzB,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC;IAE3C,IAAI,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAiB,CAAC;IACzD,CAAC;IAED,MAAM,KAAK,GAAG,eAAe,CAAI;QAC/B,QAAQ,EAAE,GAAG,CAAC,YAAY;QAC1B,SAAS,EAAE,GAAG,CAAC,iBAAiB,CAAC,SAAS,CAAC;QAC3C,GAAG,EAAE,MAAM,EAAE,GAAG;QAChB,UAAU,EAAE,MAAM,EAAE,UAAU;QAC9B,OAAO,EAAE,MAAM,EAAE,OAAO;QACxB,MAAM,EAAE,MAAM,EAAE,MAAM;QACtB,WAAW,EAAE,MAAM,EAAE,WAAW;KACjC,CAAC,CAAC;IAEH,sBAAsB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACvC,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CACzE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,QAAsB;IAC7D,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,sBAAsB,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5D,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;YACpB,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAC1E,CAAC;IACF,sBAAsB,CAAC,KAAK,EAAE,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAsB;IAO1D,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,sBAAsB,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5D,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACrD,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAE3B,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC/B,YAAY,IAAI,KAAK,CAAC,YAAY,CAAC;YACnC,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC;YACxB,WAAW,IAAI,KAAK,CAAC,MAAM,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,CAAC;IAC9C,MAAM,OAAO,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAElE,OAAO;QACL,UAAU;QACV,YAAY;QACZ,SAAS;QACT,WAAW;QACX,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB;IAUtC,MAAM,SAAS,GAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,IAAI,GAAG,EASlB,CAAC;IAEJ,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,aAAa,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,aAAa,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,sBAAsB,CAAC,KAAK,EAAE,CAAC;AACjC,CAAC"}
@@ -0,0 +1,181 @@
1
+ /**
2
+ * Provider-Aware Settings Manager
3
+ *
4
+ * This module wraps the SettingsManager to provide provider-specific settings
5
+ * when running ax-glm and ax-grok in parallel.
6
+ *
7
+ * Key differences from base SettingsManager:
8
+ * - Uses provider-specific config directories (~/.ax-glm/ vs ~/.ax-grok/)
9
+ * - Supports instance-based configuration (no global singleton)
10
+ * - Integrates with ProviderContext for path resolution
11
+ * - Uses file locking for concurrent access
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * // Get settings for current provider context
16
+ * const settings = getProviderSettings();
17
+ * const apiKey = settings.getApiKey();
18
+ *
19
+ * // Get settings for specific provider
20
+ * const glmSettings = getProviderSettings('glm');
21
+ * const grokSettings = getProviderSettings('grok');
22
+ * ```
23
+ */
24
+ import { z } from 'zod';
25
+ import { ProviderContext, ProviderType } from './provider-context.js';
26
+ /**
27
+ * Provider-specific user settings schema
28
+ */
29
+ declare const ProviderUserSettingsSchema: z.ZodObject<{
30
+ apiKey: z.ZodOptional<z.ZodString>;
31
+ apiKeyEncrypted: z.ZodOptional<z.ZodObject<{
32
+ encrypted: z.ZodString;
33
+ iv: z.ZodString;
34
+ salt: z.ZodString;
35
+ tag: z.ZodString;
36
+ version: z.ZodNumber;
37
+ }, z.core.$strip>>;
38
+ baseURL: z.ZodOptional<z.ZodString>;
39
+ defaultModel: z.ZodOptional<z.ZodString>;
40
+ models: z.ZodOptional<z.ZodArray<z.ZodString>>;
41
+ temperature: z.ZodOptional<z.ZodNumber>;
42
+ maxTokens: z.ZodOptional<z.ZodNumber>;
43
+ grok: z.ZodOptional<z.ZodObject<{
44
+ thinkingMode: z.ZodOptional<z.ZodEnum<{
45
+ off: "off";
46
+ low: "low";
47
+ high: "high";
48
+ }>>;
49
+ liveSearch: z.ZodOptional<z.ZodBoolean>;
50
+ seed: z.ZodOptional<z.ZodNumber>;
51
+ }, z.core.$strip>>;
52
+ glm: z.ZodOptional<z.ZodObject<{
53
+ thinkingEnabled: z.ZodOptional<z.ZodBoolean>;
54
+ }, z.core.$strip>>;
55
+ thinking: z.ZodOptional<z.ZodObject<{
56
+ enabled: z.ZodOptional<z.ZodBoolean>;
57
+ }, z.core.$strip>>;
58
+ sampling: z.ZodOptional<z.ZodObject<{
59
+ doSample: z.ZodOptional<z.ZodBoolean>;
60
+ seed: z.ZodOptional<z.ZodNumber>;
61
+ topP: z.ZodOptional<z.ZodNumber>;
62
+ }, z.core.$strip>>;
63
+ }, z.core.$loose>;
64
+ type ProviderUserSettings = z.infer<typeof ProviderUserSettingsSchema>;
65
+ /**
66
+ * Provider-aware settings manager
67
+ * Unlike the base SettingsManager, this is instance-based to support
68
+ * multiple concurrent provider contexts.
69
+ */
70
+ export declare class ProviderSettingsManager {
71
+ private static instances;
72
+ readonly context: ProviderContext;
73
+ private userSettingsCache;
74
+ private cacheTimestamp;
75
+ private readonly cacheTTL;
76
+ private constructor();
77
+ /**
78
+ * Get or create a settings manager for a provider context
79
+ */
80
+ static forContext(context: ProviderContext): ProviderSettingsManager;
81
+ /**
82
+ * Get settings manager for a specific provider
83
+ */
84
+ static forProvider(provider: ProviderType): ProviderSettingsManager;
85
+ /**
86
+ * Get settings manager for current context
87
+ */
88
+ static current(): ProviderSettingsManager;
89
+ /**
90
+ * Clear all cached instances (for testing)
91
+ */
92
+ static clearInstances(): void;
93
+ /**
94
+ * Invalidate cache for this instance
95
+ */
96
+ invalidateCache(): void;
97
+ /**
98
+ * Get the config file path for this provider
99
+ */
100
+ get configPath(): string;
101
+ /**
102
+ * Ensure config directory exists with proper permissions
103
+ */
104
+ private ensureConfigDir;
105
+ /**
106
+ * Load user settings with caching and file locking
107
+ */
108
+ loadUserSettings(): ProviderUserSettings;
109
+ /**
110
+ * Migrate plain-text API key to encrypted format
111
+ */
112
+ private migrateToEncrypted;
113
+ /**
114
+ * Save user settings with file locking
115
+ * Uses atomic read-modify-write to prevent race conditions
116
+ */
117
+ saveUserSettings(settings: Partial<ProviderUserSettings>): void;
118
+ /**
119
+ * Get API key with fallback to environment variable
120
+ */
121
+ getApiKey(): string | undefined;
122
+ /**
123
+ * Get base URL with fallback
124
+ * Returns undefined if no valid URL is configured (empty string is treated as unconfigured)
125
+ */
126
+ getBaseURL(): string | undefined;
127
+ /**
128
+ * Get current model with fallback
129
+ * Returns undefined if no valid model is configured (empty string is treated as unconfigured)
130
+ */
131
+ getCurrentModel(): string | undefined;
132
+ /**
133
+ * Get available models
134
+ */
135
+ getAvailableModels(): string[];
136
+ /**
137
+ * Get thinking settings
138
+ */
139
+ getThinkingSettings(): {
140
+ enabled?: boolean;
141
+ } | undefined;
142
+ /**
143
+ * Get Grok-specific settings
144
+ */
145
+ getGrokSettings(): {
146
+ thinkingMode: 'off' | 'low' | 'high';
147
+ liveSearch: boolean;
148
+ seed?: number;
149
+ } | undefined;
150
+ /**
151
+ * Get GLM-specific settings
152
+ */
153
+ getGLMSettings(): {
154
+ thinkingEnabled: boolean;
155
+ } | undefined;
156
+ /**
157
+ * Check if provider is configured
158
+ */
159
+ isConfigured(): boolean;
160
+ /**
161
+ * Update a specific setting
162
+ */
163
+ updateSetting<K extends keyof ProviderUserSettings>(key: K, value: ProviderUserSettings[K]): void;
164
+ }
165
+ /**
166
+ * Get provider settings for current context or specific provider
167
+ */
168
+ export declare function getProviderSettings(provider?: ProviderType): ProviderSettingsManager;
169
+ /**
170
+ * Check if a provider is configured
171
+ */
172
+ export declare function isProviderConfigured(provider: ProviderType): boolean;
173
+ /**
174
+ * Get the best available provider (configured with API key)
175
+ */
176
+ export declare function getBestAvailableProvider(): ProviderType | null;
177
+ /**
178
+ * Get all configured providers
179
+ */
180
+ export declare function getConfiguredProviders(): ProviderType[];
181
+ export {};