specweave 0.23.10 → 0.23.12

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 (102) hide show
  1. package/.claude-plugin/marketplace.json +7 -7
  2. package/CLAUDE.md +384 -1449
  3. package/dist/src/cli/commands/cleanup-cache.d.ts +14 -0
  4. package/dist/src/cli/commands/cleanup-cache.d.ts.map +1 -0
  5. package/dist/src/cli/commands/cleanup-cache.js +63 -0
  6. package/dist/src/cli/commands/cleanup-cache.js.map +1 -0
  7. package/dist/src/cli/commands/init.js +40 -0
  8. package/dist/src/cli/commands/init.js.map +1 -1
  9. package/dist/src/cli/helpers/async-project-loader.d.ts +148 -0
  10. package/dist/src/cli/helpers/async-project-loader.d.ts.map +1 -0
  11. package/dist/src/cli/helpers/async-project-loader.js +351 -0
  12. package/dist/src/cli/helpers/async-project-loader.js.map +1 -0
  13. package/dist/src/cli/helpers/cancelation-handler.d.ts +123 -0
  14. package/dist/src/cli/helpers/cancelation-handler.d.ts.map +1 -0
  15. package/dist/src/cli/helpers/cancelation-handler.js +187 -0
  16. package/dist/src/cli/helpers/cancelation-handler.js.map +1 -0
  17. package/dist/src/cli/helpers/import-strategy-prompter.d.ts +43 -0
  18. package/dist/src/cli/helpers/import-strategy-prompter.d.ts.map +1 -0
  19. package/dist/src/cli/helpers/import-strategy-prompter.js +136 -0
  20. package/dist/src/cli/helpers/import-strategy-prompter.js.map +1 -0
  21. package/dist/src/cli/helpers/issue-tracker/ado.d.ts +5 -2
  22. package/dist/src/cli/helpers/issue-tracker/ado.d.ts.map +1 -1
  23. package/dist/src/cli/helpers/issue-tracker/ado.js +90 -40
  24. package/dist/src/cli/helpers/issue-tracker/ado.js.map +1 -1
  25. package/dist/src/cli/helpers/issue-tracker/jira.d.ts +2 -1
  26. package/dist/src/cli/helpers/issue-tracker/jira.d.ts.map +1 -1
  27. package/dist/src/cli/helpers/issue-tracker/jira.js +120 -35
  28. package/dist/src/cli/helpers/issue-tracker/jira.js.map +1 -1
  29. package/dist/src/cli/helpers/progress-tracker.d.ts +121 -0
  30. package/dist/src/cli/helpers/progress-tracker.d.ts.map +1 -0
  31. package/dist/src/cli/helpers/progress-tracker.js +202 -0
  32. package/dist/src/cli/helpers/progress-tracker.js.map +1 -0
  33. package/dist/src/cli/helpers/project-count-fetcher.d.ts +69 -0
  34. package/dist/src/cli/helpers/project-count-fetcher.d.ts.map +1 -0
  35. package/dist/src/cli/helpers/project-count-fetcher.js +173 -0
  36. package/dist/src/cli/helpers/project-count-fetcher.js.map +1 -0
  37. package/dist/src/config/types.d.ts +14 -14
  38. package/dist/src/core/cache/cache-manager.d.ts +119 -0
  39. package/dist/src/core/cache/cache-manager.d.ts.map +1 -0
  40. package/dist/src/core/cache/cache-manager.js +304 -0
  41. package/dist/src/core/cache/cache-manager.js.map +1 -0
  42. package/dist/src/core/cache/rate-limit-checker.d.ts +92 -0
  43. package/dist/src/core/cache/rate-limit-checker.d.ts.map +1 -0
  44. package/dist/src/core/cache/rate-limit-checker.js +160 -0
  45. package/dist/src/core/cache/rate-limit-checker.js.map +1 -0
  46. package/dist/src/core/progress/cancelation-handler.d.ts +79 -0
  47. package/dist/src/core/progress/cancelation-handler.d.ts.map +1 -0
  48. package/dist/src/core/progress/cancelation-handler.js +111 -0
  49. package/dist/src/core/progress/cancelation-handler.js.map +1 -0
  50. package/dist/src/core/progress/import-state.d.ts +71 -0
  51. package/dist/src/core/progress/import-state.d.ts.map +1 -0
  52. package/dist/src/core/progress/import-state.js +96 -0
  53. package/dist/src/core/progress/import-state.js.map +1 -0
  54. package/dist/src/core/progress/progress-tracker.d.ts +139 -0
  55. package/dist/src/core/progress/progress-tracker.d.ts.map +1 -0
  56. package/dist/src/core/progress/progress-tracker.js +223 -0
  57. package/dist/src/core/progress/progress-tracker.js.map +1 -0
  58. package/dist/src/init/architecture/types.d.ts +6 -6
  59. package/dist/src/integrations/ado/ado-client.d.ts +25 -0
  60. package/dist/src/integrations/ado/ado-client.d.ts.map +1 -1
  61. package/dist/src/integrations/ado/ado-client.js +67 -0
  62. package/dist/src/integrations/ado/ado-client.js.map +1 -1
  63. package/dist/src/integrations/ado/ado-dependency-loader.d.ts +99 -0
  64. package/dist/src/integrations/ado/ado-dependency-loader.d.ts.map +1 -0
  65. package/dist/src/integrations/ado/ado-dependency-loader.js +207 -0
  66. package/dist/src/integrations/ado/ado-dependency-loader.js.map +1 -0
  67. package/dist/src/integrations/jira/jira-client.d.ts +32 -0
  68. package/dist/src/integrations/jira/jira-client.d.ts.map +1 -1
  69. package/dist/src/integrations/jira/jira-client.js +81 -0
  70. package/dist/src/integrations/jira/jira-client.js.map +1 -1
  71. package/dist/src/integrations/jira/jira-dependency-loader.d.ts +101 -0
  72. package/dist/src/integrations/jira/jira-dependency-loader.d.ts.map +1 -0
  73. package/dist/src/integrations/jira/jira-dependency-loader.js +200 -0
  74. package/dist/src/integrations/jira/jira-dependency-loader.js.map +1 -0
  75. package/package.json +1 -1
  76. package/plugins/specweave/.claude-plugin/plugin.json +20 -0
  77. package/plugins/specweave/agents/architect/AGENT.md +100 -602
  78. package/plugins/specweave/agents/pm/AGENT.md +96 -597
  79. package/plugins/specweave/agents/pm/AGENT.md.bak +1893 -0
  80. package/plugins/specweave/agents/pm/AGENT.md.bak2 +1754 -0
  81. package/plugins/specweave/commands/check-hooks.md +257 -0
  82. package/plugins/specweave/hooks/post-edit-spec.sh +202 -31
  83. package/plugins/specweave/hooks/post-task-completion.sh +225 -228
  84. package/plugins/specweave/hooks/post-write-spec.sh +207 -31
  85. package/plugins/specweave/hooks/pre-edit-spec.sh +151 -0
  86. package/plugins/specweave/hooks/pre-task-completion.sh +5 -7
  87. package/plugins/specweave/hooks/pre-write-spec.sh +151 -0
  88. package/plugins/specweave/hooks/test-pretooluse-env.sh +72 -0
  89. package/plugins/specweave/skills/compliance-architecture/SKILL.md +374 -0
  90. package/plugins/specweave/skills/external-sync-wizard/SKILL.md +610 -0
  91. package/plugins/specweave/skills/pm-closure-validation/SKILL.md +541 -0
  92. package/plugins/specweave/skills/roadmap-planner/SKILL.md +473 -0
  93. package/plugins/specweave-ado/commands/refresh-cache.js +25 -0
  94. package/plugins/specweave-ado/commands/refresh-cache.ts +40 -0
  95. package/plugins/specweave-ado/hooks/post-task-completion.sh +1 -1
  96. package/plugins/specweave-github/hooks/post-task-completion.sh +1 -1
  97. package/plugins/specweave-jira/commands/refresh-cache.js +25 -0
  98. package/plugins/specweave-jira/commands/refresh-cache.ts +40 -0
  99. package/plugins/specweave-jira/hooks/post-task-completion.sh +1 -1
  100. package/plugins/specweave-kafka-streams/commands/topology.md +437 -0
  101. package/plugins/specweave-n8n/commands/workflow-template.md +262 -0
  102. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +228 -6465
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-count-fetcher.d.ts","sourceRoot":"","sources":["../../../../src/cli/helpers/project-count-fetcher.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAiB,MAAM,uBAAuB,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,KAAK,CAAC;AAE7C;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,gBAAgB,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,eAAe,GAAG,cAAc,CAAC;IAC9C,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAmB7B"}
@@ -0,0 +1,173 @@
1
+ /**
2
+ * Project Count Fetcher
3
+ *
4
+ * Lightweight query to get project count without fetching full metadata.
5
+ * Optimized for < 1 second response time with retry logic.
6
+ *
7
+ * @module cli/helpers/project-count-fetcher
8
+ */
9
+ import { consoleLogger } from '../../utils/logger.js';
10
+ /**
11
+ * Get project count from issue tracker
12
+ *
13
+ * Performs lightweight count-only query (no metadata fetched).
14
+ * Target response time: < 1 second
15
+ *
16
+ * @param options - Project count options
17
+ * @returns Project count result
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * const result = await getProjectCount({
22
+ * credentials: { domain: 'example.atlassian.net', email: 'user@example.com', token: 'xyz', instanceType: 'cloud' },
23
+ * provider: 'jira'
24
+ * });
25
+ * console.log(`Found ${result.total} projects`);
26
+ * ```
27
+ */
28
+ export async function getProjectCount(options) {
29
+ const { provider, credentials, logger = consoleLogger } = options;
30
+ try {
31
+ if (provider === 'jira') {
32
+ return await getJiraProjectCount(credentials, logger);
33
+ }
34
+ else if (provider === 'ado') {
35
+ return await getAdoProjectCount(credentials, logger);
36
+ }
37
+ else {
38
+ throw new Error(`Unsupported provider: ${provider}`);
39
+ }
40
+ }
41
+ catch (error) {
42
+ logger.error('Error fetching project count:', error);
43
+ return {
44
+ total: 0,
45
+ accessible: 0,
46
+ error: error.message || 'Unknown error'
47
+ };
48
+ }
49
+ }
50
+ /**
51
+ * Get JIRA project count (Cloud or Server)
52
+ *
53
+ * API Endpoints:
54
+ * - Cloud: GET /rest/api/3/project/search?maxResults=0
55
+ * - Server: GET /rest/api/2/project?maxResults=0
56
+ *
57
+ * @param credentials - JIRA credentials
58
+ * @param logger - Logger instance
59
+ * @returns Project count result
60
+ */
61
+ async function getJiraProjectCount(credentials, logger) {
62
+ const { domain, email, token, instanceType } = credentials;
63
+ // Determine API endpoint based on instance type
64
+ const apiVersion = instanceType === 'cloud' ? '3' : '2';
65
+ const endpoint = instanceType === 'cloud'
66
+ ? `/rest/api/${apiVersion}/project/search?maxResults=0`
67
+ : `/rest/api/${apiVersion}/project?maxResults=0`;
68
+ const url = `https://${domain}${endpoint}`;
69
+ // Retry logic: 3 attempts with exponential backoff (1s, 2s, 4s)
70
+ const delays = [1000, 2000, 4000];
71
+ let lastError = null;
72
+ for (let attempt = 0; attempt < 3; attempt++) {
73
+ try {
74
+ const response = await fetch(url, {
75
+ method: 'GET',
76
+ headers: {
77
+ Authorization: `Basic ${Buffer.from(`${email}:${token}`).toString('base64')}`,
78
+ Accept: 'application/json',
79
+ 'Content-Type': 'application/json'
80
+ },
81
+ signal: AbortSignal.timeout(10000) // 10 second timeout
82
+ });
83
+ if (!response.ok) {
84
+ const errorBody = await response.text().catch(() => 'No error body');
85
+ throw new Error(`JIRA API error: ${response.status} ${response.statusText}. ${errorBody}`);
86
+ }
87
+ if (instanceType === 'cloud') {
88
+ // Cloud returns { total: N, values: [] }
89
+ const data = (await response.json());
90
+ return {
91
+ total: data.total,
92
+ accessible: data.total
93
+ };
94
+ }
95
+ else {
96
+ // Server returns [] with X-Total-Count header
97
+ const totalHeader = response.headers.get('X-Total-Count');
98
+ const total = totalHeader ? parseInt(totalHeader, 10) : 0;
99
+ return {
100
+ total,
101
+ accessible: total
102
+ };
103
+ }
104
+ }
105
+ catch (error) {
106
+ lastError = error;
107
+ // Don't retry on auth failures (4XX except 429)
108
+ const isAuthError = error.message && /\b40[0134]\b/.test(error.message);
109
+ if (isAuthError && !error.message.includes('429')) {
110
+ throw error;
111
+ }
112
+ // Retry on network errors or 5XX/429 errors
113
+ if (attempt < 2) {
114
+ logger.log(`Retry ${attempt + 1}/3 after ${delays[attempt]}ms...`);
115
+ await new Promise(resolve => setTimeout(resolve, delays[attempt]));
116
+ }
117
+ }
118
+ }
119
+ throw lastError || new Error('Failed to get project count after 3 attempts');
120
+ }
121
+ /**
122
+ * Get Azure DevOps project count
123
+ *
124
+ * API Endpoint:
125
+ * - GET https://dev.azure.com/{org}/_apis/projects?$top=0
126
+ *
127
+ * @param credentials - ADO credentials
128
+ * @param logger - Logger instance
129
+ * @returns Project count result
130
+ */
131
+ async function getAdoProjectCount(credentials, logger) {
132
+ const { organization, pat } = credentials;
133
+ const url = `https://dev.azure.com/${organization}/_apis/projects?$top=0&api-version=7.0`;
134
+ // Retry logic: 3 attempts with exponential backoff (1s, 2s, 4s)
135
+ const delays = [1000, 2000, 4000];
136
+ let lastError = null;
137
+ for (let attempt = 0; attempt < 3; attempt++) {
138
+ try {
139
+ const response = await fetch(url, {
140
+ method: 'GET',
141
+ headers: {
142
+ Authorization: `Basic ${Buffer.from(`:${pat}`).toString('base64')}`,
143
+ Accept: 'application/json'
144
+ },
145
+ signal: AbortSignal.timeout(10000) // 10 second timeout
146
+ });
147
+ if (!response.ok) {
148
+ const errorBody = await response.text().catch(() => 'No error body');
149
+ throw new Error(`Azure DevOps API error: ${response.status} ${response.statusText}. ${errorBody}`);
150
+ }
151
+ const data = (await response.json());
152
+ return {
153
+ total: data.count,
154
+ accessible: data.count
155
+ };
156
+ }
157
+ catch (error) {
158
+ lastError = error;
159
+ // Don't retry on auth failures (4XX except 429)
160
+ const isAuthError = error.message && /\b40[0134]\b/.test(error.message);
161
+ if (isAuthError && !error.message.includes('429')) {
162
+ throw error;
163
+ }
164
+ // Retry on network errors or 5XX/429 errors
165
+ if (attempt < 2) {
166
+ logger.log(`Retry ${attempt + 1}/3 after ${delays[attempt]}ms...`);
167
+ await new Promise(resolve => setTimeout(resolve, delays[attempt]));
168
+ }
169
+ }
170
+ }
171
+ throw lastError || new Error('Failed to get ADO project count after 3 attempts');
172
+ }
173
+ //# sourceMappingURL=project-count-fetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-count-fetcher.js","sourceRoot":"","sources":["../../../../src/cli/helpers/project-count-fetcher.ts"],"names":[],"mappings":"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"}
@@ -242,15 +242,15 @@ export declare const ResearchConfigSchema: z.ZodObject<{
242
242
  requirements: z.ZodOptional<z.ZodString>;
243
243
  url: z.ZodOptional<z.ZodString>;
244
244
  }, "strip", z.ZodTypeAny, {
245
+ provider?: string;
245
246
  url?: string;
246
247
  requirements?: string;
247
- provider?: string;
248
248
  amount?: string;
249
249
  duration?: string;
250
250
  }, {
251
+ provider?: string;
251
252
  url?: string;
252
253
  requirements?: string;
253
- provider?: string;
254
254
  amount?: string;
255
255
  duration?: string;
256
256
  }>, "many">;
@@ -302,9 +302,9 @@ export declare const ResearchConfigSchema: z.ZodObject<{
302
302
  at1M?: string;
303
303
  };
304
304
  cloudCredits?: {
305
+ provider?: string;
305
306
  url?: string;
306
307
  requirements?: string;
307
- provider?: string;
308
308
  amount?: string;
309
309
  duration?: string;
310
310
  }[];
@@ -330,9 +330,9 @@ export declare const ResearchConfigSchema: z.ZodObject<{
330
330
  at1M?: string;
331
331
  };
332
332
  cloudCredits?: {
333
+ provider?: string;
333
334
  url?: string;
334
335
  requirements?: string;
335
- provider?: string;
336
336
  amount?: string;
337
337
  duration?: string;
338
338
  }[];
@@ -385,9 +385,9 @@ export declare const ResearchConfigSchema: z.ZodObject<{
385
385
  at1M?: string;
386
386
  };
387
387
  cloudCredits?: {
388
+ provider?: string;
388
389
  url?: string;
389
390
  requirements?: string;
390
- provider?: string;
391
391
  amount?: string;
392
392
  duration?: string;
393
393
  }[];
@@ -476,9 +476,9 @@ export declare const ResearchConfigSchema: z.ZodObject<{
476
476
  at1M?: string;
477
477
  };
478
478
  cloudCredits?: {
479
+ provider?: string;
479
480
  url?: string;
480
481
  requirements?: string;
481
- provider?: string;
482
482
  amount?: string;
483
483
  duration?: string;
484
484
  }[];
@@ -814,15 +814,15 @@ export declare const SpecWeaveConfigSchema: z.ZodObject<{
814
814
  requirements: z.ZodOptional<z.ZodString>;
815
815
  url: z.ZodOptional<z.ZodString>;
816
816
  }, "strip", z.ZodTypeAny, {
817
+ provider?: string;
817
818
  url?: string;
818
819
  requirements?: string;
819
- provider?: string;
820
820
  amount?: string;
821
821
  duration?: string;
822
822
  }, {
823
+ provider?: string;
823
824
  url?: string;
824
825
  requirements?: string;
825
- provider?: string;
826
826
  amount?: string;
827
827
  duration?: string;
828
828
  }>, "many">;
@@ -874,9 +874,9 @@ export declare const SpecWeaveConfigSchema: z.ZodObject<{
874
874
  at1M?: string;
875
875
  };
876
876
  cloudCredits?: {
877
+ provider?: string;
877
878
  url?: string;
878
879
  requirements?: string;
879
- provider?: string;
880
880
  amount?: string;
881
881
  duration?: string;
882
882
  }[];
@@ -902,9 +902,9 @@ export declare const SpecWeaveConfigSchema: z.ZodObject<{
902
902
  at1M?: string;
903
903
  };
904
904
  cloudCredits?: {
905
+ provider?: string;
905
906
  url?: string;
906
907
  requirements?: string;
907
- provider?: string;
908
908
  amount?: string;
909
909
  duration?: string;
910
910
  }[];
@@ -957,9 +957,9 @@ export declare const SpecWeaveConfigSchema: z.ZodObject<{
957
957
  at1M?: string;
958
958
  };
959
959
  cloudCredits?: {
960
+ provider?: string;
960
961
  url?: string;
961
962
  requirements?: string;
962
- provider?: string;
963
963
  amount?: string;
964
964
  duration?: string;
965
965
  }[];
@@ -1048,9 +1048,9 @@ export declare const SpecWeaveConfigSchema: z.ZodObject<{
1048
1048
  at1M?: string;
1049
1049
  };
1050
1050
  cloudCredits?: {
1051
+ provider?: string;
1051
1052
  url?: string;
1052
1053
  requirements?: string;
1053
- provider?: string;
1054
1054
  amount?: string;
1055
1055
  duration?: string;
1056
1056
  }[];
@@ -1175,9 +1175,9 @@ export declare const SpecWeaveConfigSchema: z.ZodObject<{
1175
1175
  at1M?: string;
1176
1176
  };
1177
1177
  cloudCredits?: {
1178
+ provider?: string;
1178
1179
  url?: string;
1179
1180
  requirements?: string;
1180
- provider?: string;
1181
1181
  amount?: string;
1182
1182
  duration?: string;
1183
1183
  }[];
@@ -1277,9 +1277,9 @@ export declare const SpecWeaveConfigSchema: z.ZodObject<{
1277
1277
  at1M?: string;
1278
1278
  };
1279
1279
  cloudCredits?: {
1280
+ provider?: string;
1280
1281
  url?: string;
1281
1282
  requirements?: string;
1282
- provider?: string;
1283
1283
  amount?: string;
1284
1284
  duration?: string;
1285
1285
  }[];
@@ -0,0 +1,119 @@
1
+ import { Logger } from '../../utils/logger.js';
2
+ /**
3
+ * Cached data wrapper with TTL metadata
4
+ */
5
+ export interface CachedData<T> {
6
+ data: T;
7
+ timestamp: number;
8
+ ttl: number;
9
+ }
10
+ /**
11
+ * Cache statistics for monitoring and debugging
12
+ */
13
+ export interface CacheStats {
14
+ totalFiles: number;
15
+ totalSize: number;
16
+ oldestCache: string | null;
17
+ oldestCacheAge: number | null;
18
+ providers: {
19
+ [provider: string]: {
20
+ files: number;
21
+ size: number;
22
+ };
23
+ };
24
+ }
25
+ /**
26
+ * CacheManager - Manages file-based caching with TTL validation
27
+ *
28
+ * Features:
29
+ * - 24-hour TTL by default (configurable)
30
+ * - Atomic writes (temp file + rename)
31
+ * - Corruption detection and auto-recovery
32
+ * - Per-project cache separation
33
+ * - Thread-safe operations
34
+ *
35
+ * Cache file format:
36
+ * {
37
+ * "data": <T>,
38
+ * "timestamp": 1700000000000,
39
+ * "ttl": 86400000
40
+ * }
41
+ */
42
+ export declare class CacheManager {
43
+ private cacheDir;
44
+ private logger;
45
+ private defaultTTL;
46
+ constructor(projectRoot: string, options?: {
47
+ logger?: Logger;
48
+ ttl?: number;
49
+ });
50
+ /**
51
+ * Get cached data if valid (within TTL)
52
+ *
53
+ * @param key Cache key (e.g., "jira-projects", "jira-BACKEND-deps")
54
+ * @returns Cached data or null if cache miss/expired/corrupted
55
+ */
56
+ get<T>(key: string): Promise<T | null>;
57
+ /**
58
+ * Get cached data even if expired (stale cache fallback)
59
+ *
60
+ * Used for rate limit fallback: when API rate limit hit,
61
+ * use stale cache instead of failing
62
+ *
63
+ * @param key Cache key
64
+ * @returns Cached data or null if missing/corrupted (ignores TTL)
65
+ */
66
+ getStale<T>(key: string): Promise<T | null>;
67
+ /**
68
+ * Set cached data with current timestamp and TTL
69
+ *
70
+ * Uses atomic write pattern (temp file + rename) to prevent corruption
71
+ *
72
+ * @param key Cache key
73
+ * @param data Data to cache
74
+ * @param ttl Optional custom TTL (overrides default)
75
+ */
76
+ set<T>(key: string, data: T, ttl?: number): Promise<void>;
77
+ /**
78
+ * Delete cached data
79
+ *
80
+ * @param key Cache key
81
+ */
82
+ delete(key: string): Promise<void>;
83
+ /**
84
+ * Clear all cached data
85
+ */
86
+ clearAll(): Promise<void>;
87
+ /**
88
+ * Get cache statistics for monitoring
89
+ */
90
+ getStats(): Promise<CacheStats>;
91
+ /**
92
+ * Delete caches older than specified age
93
+ *
94
+ * @param maxAgeMs Maximum age in milliseconds
95
+ * @returns Count of deleted caches
96
+ */
97
+ deleteOlderThan(maxAgeMs: number): Promise<number>;
98
+ /**
99
+ * Check if cached data is still valid (within TTL)
100
+ */
101
+ private isValid;
102
+ /**
103
+ * Validate cache structure has required fields
104
+ */
105
+ private isValidCacheStructure;
106
+ /**
107
+ * Get full cache file path for a key
108
+ */
109
+ private getCachePath;
110
+ /**
111
+ * Ensure cache directory exists
112
+ */
113
+ private ensureCacheDir;
114
+ /**
115
+ * Log cache errors to dedicated error log
116
+ */
117
+ private logCacheError;
118
+ }
119
+ //# sourceMappingURL=cache-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-manager.d.ts","sourceRoot":"","sources":["../../../../src/core/cache/cache-manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAiB,MAAM,uBAAuB,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAC;IACR,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE;QACT,CAAC,QAAQ,EAAE,MAAM,GAAG;YAClB,KAAK,EAAE,MAAM,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;SACd,CAAC;KACH,CAAC;CACH;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAA+B;gBAG/C,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,GAAG,CAAC,EAAE,MAAM,CAAC;KACT;IASR;;;;;OAKG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IA0C5C;;;;;;;;OAQG;IACG,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAkCjD;;;;;;;;OAQG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgC/D;;;;OAIG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASxC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB/B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC;IAwDrC;;;;;OAKG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkCxD;;OAEG;IACH,OAAO,CAAC,OAAO;IAMf;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAY7B;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;OAEG;YACW,cAAc;IAM5B;;OAEG;YACW,aAAa;CAa5B"}