@specforge/mcp 2.6.0 → 3.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 (240) hide show
  1. package/README.md +73 -0
  2. package/bin/{specforge-mcp → specforge} +0 -5
  3. package/dist/ai-provider/circuit-breaker.d.ts +63 -0
  4. package/dist/ai-provider/circuit-breaker.d.ts.map +1 -0
  5. package/dist/ai-provider/circuit-breaker.js +160 -0
  6. package/dist/ai-provider/circuit-breaker.js.map +1 -0
  7. package/dist/ai-provider/cli-version.d.ts +50 -0
  8. package/dist/ai-provider/cli-version.d.ts.map +1 -0
  9. package/dist/ai-provider/cli-version.js +141 -0
  10. package/dist/ai-provider/cli-version.js.map +1 -0
  11. package/dist/ai-provider/config-loader.d.ts +45 -0
  12. package/dist/ai-provider/config-loader.d.ts.map +1 -0
  13. package/dist/ai-provider/config-loader.js +106 -0
  14. package/dist/ai-provider/config-loader.js.map +1 -0
  15. package/dist/ai-provider/errors.d.ts +48 -0
  16. package/dist/ai-provider/errors.d.ts.map +1 -0
  17. package/dist/ai-provider/errors.js +102 -0
  18. package/dist/ai-provider/errors.js.map +1 -0
  19. package/dist/ai-provider/events.d.ts +73 -0
  20. package/dist/ai-provider/events.d.ts.map +1 -0
  21. package/dist/ai-provider/events.js +75 -0
  22. package/dist/ai-provider/events.js.map +1 -0
  23. package/dist/ai-provider/factory.d.ts +31 -0
  24. package/dist/ai-provider/factory.d.ts.map +1 -0
  25. package/dist/ai-provider/factory.js +100 -0
  26. package/dist/ai-provider/factory.js.map +1 -0
  27. package/dist/ai-provider/index.d.ts +24 -0
  28. package/dist/ai-provider/index.d.ts.map +1 -0
  29. package/dist/ai-provider/index.js +46 -0
  30. package/dist/ai-provider/index.js.map +1 -0
  31. package/dist/ai-provider/instance-coordinator.d.ts +54 -0
  32. package/dist/ai-provider/instance-coordinator.d.ts.map +1 -0
  33. package/dist/ai-provider/instance-coordinator.js +199 -0
  34. package/dist/ai-provider/instance-coordinator.js.map +1 -0
  35. package/dist/ai-provider/jsonl-parser.d.ts +43 -0
  36. package/dist/ai-provider/jsonl-parser.d.ts.map +1 -0
  37. package/dist/ai-provider/jsonl-parser.js +107 -0
  38. package/dist/ai-provider/jsonl-parser.js.map +1 -0
  39. package/dist/ai-provider/lifecycle.d.ts +50 -0
  40. package/dist/ai-provider/lifecycle.d.ts.map +1 -0
  41. package/dist/ai-provider/lifecycle.js +145 -0
  42. package/dist/ai-provider/lifecycle.js.map +1 -0
  43. package/dist/ai-provider/logger.d.ts +69 -0
  44. package/dist/ai-provider/logger.d.ts.map +1 -0
  45. package/dist/ai-provider/logger.js +161 -0
  46. package/dist/ai-provider/logger.js.map +1 -0
  47. package/dist/ai-provider/metrics.d.ts +91 -0
  48. package/dist/ai-provider/metrics.d.ts.map +1 -0
  49. package/dist/ai-provider/metrics.js +187 -0
  50. package/dist/ai-provider/metrics.js.map +1 -0
  51. package/dist/ai-provider/process-manager.d.ts +97 -0
  52. package/dist/ai-provider/process-manager.d.ts.map +1 -0
  53. package/dist/ai-provider/process-manager.js +477 -0
  54. package/dist/ai-provider/process-manager.js.map +1 -0
  55. package/dist/ai-provider/providers/claude-code.d.ts +64 -0
  56. package/dist/ai-provider/providers/claude-code.d.ts.map +1 -0
  57. package/dist/ai-provider/providers/claude-code.js +205 -0
  58. package/dist/ai-provider/providers/claude-code.js.map +1 -0
  59. package/dist/ai-provider/retry-executor.d.ts +52 -0
  60. package/dist/ai-provider/retry-executor.d.ts.map +1 -0
  61. package/dist/ai-provider/retry-executor.js +138 -0
  62. package/dist/ai-provider/retry-executor.js.map +1 -0
  63. package/dist/ai-provider/safe-args.d.ts +58 -0
  64. package/dist/ai-provider/safe-args.d.ts.map +1 -0
  65. package/dist/ai-provider/safe-args.js +176 -0
  66. package/dist/ai-provider/safe-args.js.map +1 -0
  67. package/dist/ai-provider/semaphore.d.ts +50 -0
  68. package/dist/ai-provider/semaphore.d.ts.map +1 -0
  69. package/dist/ai-provider/semaphore.js +97 -0
  70. package/dist/ai-provider/semaphore.js.map +1 -0
  71. package/dist/ai-provider/tracer.d.ts +67 -0
  72. package/dist/ai-provider/tracer.d.ts.map +1 -0
  73. package/dist/ai-provider/tracer.js +209 -0
  74. package/dist/ai-provider/tracer.js.map +1 -0
  75. package/dist/ai-provider/types.d.ts +181 -0
  76. package/dist/ai-provider/types.d.ts.map +1 -0
  77. package/dist/ai-provider/types.js +8 -0
  78. package/dist/ai-provider/types.js.map +1 -0
  79. package/dist/autopilot/agents/agent-runner.d.ts +109 -0
  80. package/dist/autopilot/agents/agent-runner.d.ts.map +1 -0
  81. package/dist/autopilot/agents/agent-runner.js +731 -0
  82. package/dist/autopilot/agents/agent-runner.js.map +1 -0
  83. package/dist/autopilot/agents/agent-selector.d.ts +59 -0
  84. package/dist/autopilot/agents/agent-selector.d.ts.map +1 -0
  85. package/dist/autopilot/agents/agent-selector.js +234 -0
  86. package/dist/autopilot/agents/agent-selector.js.map +1 -0
  87. package/dist/autopilot/agents/model-selector.d.ts +49 -0
  88. package/dist/autopilot/agents/model-selector.d.ts.map +1 -0
  89. package/dist/autopilot/agents/model-selector.js +62 -0
  90. package/dist/autopilot/agents/model-selector.js.map +1 -0
  91. package/dist/autopilot/agents/profiles/builtin.d.ts +55 -0
  92. package/dist/autopilot/agents/profiles/builtin.d.ts.map +1 -0
  93. package/dist/autopilot/agents/profiles/builtin.js +323 -0
  94. package/dist/autopilot/agents/profiles/builtin.js.map +1 -0
  95. package/dist/autopilot/agents/profiles/types.d.ts +98 -0
  96. package/dist/autopilot/agents/profiles/types.d.ts.map +1 -0
  97. package/dist/autopilot/agents/profiles/types.js +17 -0
  98. package/dist/autopilot/agents/profiles/types.js.map +1 -0
  99. package/dist/autopilot/api/autopilot-api-client.d.ts +217 -0
  100. package/dist/autopilot/api/autopilot-api-client.d.ts.map +1 -0
  101. package/dist/autopilot/api/autopilot-api-client.js +402 -0
  102. package/dist/autopilot/api/autopilot-api-client.js.map +1 -0
  103. package/dist/autopilot/cli/abort.d.ts +20 -0
  104. package/dist/autopilot/cli/abort.d.ts.map +1 -0
  105. package/dist/autopilot/cli/abort.js +201 -0
  106. package/dist/autopilot/cli/abort.js.map +1 -0
  107. package/dist/autopilot/cli/display.d.ts +63 -0
  108. package/dist/autopilot/cli/display.d.ts.map +1 -0
  109. package/dist/autopilot/cli/display.js +260 -0
  110. package/dist/autopilot/cli/display.js.map +1 -0
  111. package/dist/autopilot/cli/index.d.ts +24 -0
  112. package/dist/autopilot/cli/index.d.ts.map +1 -0
  113. package/dist/autopilot/cli/index.js +79 -0
  114. package/dist/autopilot/cli/index.js.map +1 -0
  115. package/dist/autopilot/cli/pause.d.ts +18 -0
  116. package/dist/autopilot/cli/pause.d.ts.map +1 -0
  117. package/dist/autopilot/cli/pause.js +110 -0
  118. package/dist/autopilot/cli/pause.js.map +1 -0
  119. package/dist/autopilot/cli/resume.d.ts +22 -0
  120. package/dist/autopilot/cli/resume.d.ts.map +1 -0
  121. package/dist/autopilot/cli/resume.js +172 -0
  122. package/dist/autopilot/cli/resume.js.map +1 -0
  123. package/dist/autopilot/cli/run.d.ts +25 -0
  124. package/dist/autopilot/cli/run.d.ts.map +1 -0
  125. package/dist/autopilot/cli/run.js +220 -0
  126. package/dist/autopilot/cli/run.js.map +1 -0
  127. package/dist/autopilot/cli/status.d.ts +20 -0
  128. package/dist/autopilot/cli/status.d.ts.map +1 -0
  129. package/dist/autopilot/cli/status.js +217 -0
  130. package/dist/autopilot/cli/status.js.map +1 -0
  131. package/dist/autopilot/config.d.ts +45 -0
  132. package/dist/autopilot/config.d.ts.map +1 -0
  133. package/dist/autopilot/config.js +269 -0
  134. package/dist/autopilot/config.js.map +1 -0
  135. package/dist/autopilot/core/dependency-resolver.d.ts +108 -0
  136. package/dist/autopilot/core/dependency-resolver.d.ts.map +1 -0
  137. package/dist/autopilot/core/dependency-resolver.js +394 -0
  138. package/dist/autopilot/core/dependency-resolver.js.map +1 -0
  139. package/dist/autopilot/core/dispatcher.d.ts +215 -0
  140. package/dist/autopilot/core/dispatcher.d.ts.map +1 -0
  141. package/dist/autopilot/core/dispatcher.js +594 -0
  142. package/dist/autopilot/core/dispatcher.js.map +1 -0
  143. package/dist/autopilot/core/failure-handler.d.ts +145 -0
  144. package/dist/autopilot/core/failure-handler.d.ts.map +1 -0
  145. package/dist/autopilot/core/failure-handler.js +308 -0
  146. package/dist/autopilot/core/failure-handler.js.map +1 -0
  147. package/dist/autopilot/core/rate-limit-handler.d.ts +108 -0
  148. package/dist/autopilot/core/rate-limit-handler.d.ts.map +1 -0
  149. package/dist/autopilot/core/rate-limit-handler.js +195 -0
  150. package/dist/autopilot/core/rate-limit-handler.js.map +1 -0
  151. package/dist/autopilot/core/state-manager.d.ts +160 -0
  152. package/dist/autopilot/core/state-manager.d.ts.map +1 -0
  153. package/dist/autopilot/core/state-manager.js +393 -0
  154. package/dist/autopilot/core/state-manager.js.map +1 -0
  155. package/dist/autopilot/core/timeout-manager.d.ts +95 -0
  156. package/dist/autopilot/core/timeout-manager.d.ts.map +1 -0
  157. package/dist/autopilot/core/timeout-manager.js +188 -0
  158. package/dist/autopilot/core/timeout-manager.js.map +1 -0
  159. package/dist/autopilot/git/branch-manager.d.ts +117 -0
  160. package/dist/autopilot/git/branch-manager.d.ts.map +1 -0
  161. package/dist/autopilot/git/branch-manager.js +238 -0
  162. package/dist/autopilot/git/branch-manager.js.map +1 -0
  163. package/dist/autopilot/git/index.d.ts +9 -0
  164. package/dist/autopilot/git/index.d.ts.map +1 -0
  165. package/dist/autopilot/git/index.js +9 -0
  166. package/dist/autopilot/git/index.js.map +1 -0
  167. package/dist/autopilot/git/merge-manager.d.ts +118 -0
  168. package/dist/autopilot/git/merge-manager.d.ts.map +1 -0
  169. package/dist/autopilot/git/merge-manager.js +304 -0
  170. package/dist/autopilot/git/merge-manager.js.map +1 -0
  171. package/dist/autopilot/git/worktree-manager.d.ts +128 -0
  172. package/dist/autopilot/git/worktree-manager.d.ts.map +1 -0
  173. package/dist/autopilot/git/worktree-manager.js +298 -0
  174. package/dist/autopilot/git/worktree-manager.js.map +1 -0
  175. package/dist/autopilot/index.d.ts +30 -0
  176. package/dist/autopilot/index.d.ts.map +1 -0
  177. package/dist/autopilot/index.js +55 -0
  178. package/dist/autopilot/index.js.map +1 -0
  179. package/dist/autopilot/sync/index.d.ts +7 -0
  180. package/dist/autopilot/sync/index.d.ts.map +1 -0
  181. package/dist/autopilot/sync/index.js +7 -0
  182. package/dist/autopilot/sync/index.js.map +1 -0
  183. package/dist/autopilot/sync/sync-manager.d.ts +168 -0
  184. package/dist/autopilot/sync/sync-manager.d.ts.map +1 -0
  185. package/dist/autopilot/sync/sync-manager.js +303 -0
  186. package/dist/autopilot/sync/sync-manager.js.map +1 -0
  187. package/dist/autopilot/types.d.ts +454 -0
  188. package/dist/autopilot/types.d.ts.map +1 -0
  189. package/dist/autopilot/types.js +26 -0
  190. package/dist/autopilot/types.js.map +1 -0
  191. package/dist/autopilot/utils/audit-logger.d.ts +176 -0
  192. package/dist/autopilot/utils/audit-logger.d.ts.map +1 -0
  193. package/dist/autopilot/utils/audit-logger.js +308 -0
  194. package/dist/autopilot/utils/audit-logger.js.map +1 -0
  195. package/dist/autopilot/utils/cost-tracker.d.ts +162 -0
  196. package/dist/autopilot/utils/cost-tracker.d.ts.map +1 -0
  197. package/dist/autopilot/utils/cost-tracker.js +269 -0
  198. package/dist/autopilot/utils/cost-tracker.js.map +1 -0
  199. package/dist/autopilot/utils/index.d.ts +9 -0
  200. package/dist/autopilot/utils/index.d.ts.map +1 -0
  201. package/dist/autopilot/utils/index.js +9 -0
  202. package/dist/autopilot/utils/index.js.map +1 -0
  203. package/dist/autopilot/utils/progress-reporter.d.ts +132 -0
  204. package/dist/autopilot/utils/progress-reporter.d.ts.map +1 -0
  205. package/dist/autopilot/utils/progress-reporter.js +290 -0
  206. package/dist/autopilot/utils/progress-reporter.js.map +1 -0
  207. package/dist/autopilot/worker/worker-pool.d.ts +179 -0
  208. package/dist/autopilot/worker/worker-pool.d.ts.map +1 -0
  209. package/dist/autopilot/worker/worker-pool.js +331 -0
  210. package/dist/autopilot/worker/worker-pool.js.map +1 -0
  211. package/dist/autopilot/worker/worker-session.d.ts +171 -0
  212. package/dist/autopilot/worker/worker-session.d.ts.map +1 -0
  213. package/dist/autopilot/worker/worker-session.js +295 -0
  214. package/dist/autopilot/worker/worker-session.js.map +1 -0
  215. package/dist/cli/commands/debug/call.d.ts.map +1 -1
  216. package/dist/cli/commands/debug/call.js +5 -1
  217. package/dist/cli/commands/debug/call.js.map +1 -1
  218. package/dist/cli/index.d.ts +1 -1
  219. package/dist/cli/index.d.ts.map +1 -1
  220. package/dist/cli/index.js +4 -1
  221. package/dist/cli/index.js.map +1 -1
  222. package/dist/index.js +0 -1
  223. package/dist/index.js.map +1 -1
  224. package/dist/tools/core/epic.js +1 -1
  225. package/dist/tools/core/epic.js.map +1 -1
  226. package/dist/tools/core/lookup.d.ts.map +1 -1
  227. package/dist/tools/core/lookup.js +3 -2
  228. package/dist/tools/core/lookup.js.map +1 -1
  229. package/dist/tools/core/specification.js +1 -1
  230. package/dist/tools/core/specification.js.map +1 -1
  231. package/dist/tools/core/ticket.d.ts.map +1 -1
  232. package/dist/tools/core/ticket.js +4 -6
  233. package/dist/tools/core/ticket.js.map +1 -1
  234. package/dist/tools/index.d.ts.map +1 -1
  235. package/dist/tools/index.js +60 -0
  236. package/dist/tools/index.js.map +1 -1
  237. package/dist/validation/index.d.ts.map +1 -1
  238. package/dist/validation/index.js +4 -1
  239. package/dist/validation/index.js.map +1 -1
  240. package/package.json +8 -4
@@ -0,0 +1,308 @@
1
+ /**
2
+ * Audit Logger
3
+ *
4
+ * JSONL logging for autopilot runs.
5
+ */
6
+ import * as fs from 'fs/promises';
7
+ import * as path from 'path';
8
+ /**
9
+ * Audit Logger
10
+ *
11
+ * Writes structured JSONL logs for autopilot runs.
12
+ */
13
+ export class AuditLogger {
14
+ runId;
15
+ logFilePath;
16
+ writeQueue = [];
17
+ isWriting = false;
18
+ initialized = false;
19
+ constructor(options) {
20
+ this.runId = options.runId;
21
+ const logDir = options.logDir || path.join(options.workingDirectory, '.specforge', 'logs');
22
+ this.logFilePath = path.join(logDir, `autopilot-${options.runId}.jsonl`);
23
+ }
24
+ /**
25
+ * Initialize the logger
26
+ */
27
+ async initialize() {
28
+ if (this.initialized)
29
+ return;
30
+ // Ensure log directory exists
31
+ const logDir = path.dirname(this.logFilePath);
32
+ await fs.mkdir(logDir, { recursive: true });
33
+ this.initialized = true;
34
+ }
35
+ /**
36
+ * Log an entry
37
+ */
38
+ async log(type, data = {}) {
39
+ const entry = {
40
+ timestamp: new Date().toISOString(),
41
+ runId: this.runId,
42
+ type,
43
+ data,
44
+ };
45
+ this.writeQueue.push(entry);
46
+ await this.processQueue();
47
+ }
48
+ /**
49
+ * Process the write queue
50
+ */
51
+ async processQueue() {
52
+ if (this.isWriting || this.writeQueue.length === 0) {
53
+ return;
54
+ }
55
+ this.isWriting = true;
56
+ try {
57
+ // Ensure initialized
58
+ if (!this.initialized) {
59
+ await this.initialize();
60
+ }
61
+ // Take all entries from queue
62
+ const entries = [...this.writeQueue];
63
+ this.writeQueue = [];
64
+ // Write entries to file
65
+ const lines = entries.map(e => JSON.stringify(e)).join('\n') + '\n';
66
+ await fs.appendFile(this.logFilePath, lines);
67
+ }
68
+ catch (error) {
69
+ // Re-add entries to queue on error
70
+ // But don't let the queue grow unbounded
71
+ if (this.writeQueue.length < 1000) {
72
+ this.writeQueue.unshift(...this.writeQueue);
73
+ }
74
+ }
75
+ finally {
76
+ this.isWriting = false;
77
+ // Process remaining entries
78
+ if (this.writeQueue.length > 0) {
79
+ await this.processQueue();
80
+ }
81
+ }
82
+ }
83
+ /**
84
+ * Log run started
85
+ */
86
+ async logRunStarted(data) {
87
+ await this.log('run:started', data);
88
+ }
89
+ /**
90
+ * Log run completed
91
+ */
92
+ async logRunCompleted(data) {
93
+ await this.log('run:completed', data);
94
+ }
95
+ /**
96
+ * Log run paused
97
+ */
98
+ async logRunPaused(reason) {
99
+ await this.log('run:paused', { reason });
100
+ }
101
+ /**
102
+ * Log run resumed
103
+ */
104
+ async logRunResumed() {
105
+ await this.log('run:resumed', {});
106
+ }
107
+ /**
108
+ * Log run aborted
109
+ */
110
+ async logRunAborted(reason) {
111
+ await this.log('run:aborted', { reason });
112
+ }
113
+ /**
114
+ * Log epic started
115
+ */
116
+ async logEpicStarted(epicId, epicTitle) {
117
+ await this.log('epic:started', { epicId, epicTitle });
118
+ }
119
+ /**
120
+ * Log epic completed
121
+ */
122
+ async logEpicCompleted(epicId, ticketsCompleted, ticketsFailed) {
123
+ await this.log('epic:completed', {
124
+ epicId,
125
+ ticketsCompleted,
126
+ ticketsFailed,
127
+ });
128
+ }
129
+ /**
130
+ * Log epic failed
131
+ */
132
+ async logEpicFailed(epicId, error) {
133
+ await this.log('epic:failed', { epicId, error });
134
+ }
135
+ /**
136
+ * Log ticket started
137
+ */
138
+ async logTicketStarted(ticketId, ticketTitle, workerId) {
139
+ await this.log('ticket:started', {
140
+ ticketId,
141
+ ticketTitle,
142
+ workerId,
143
+ });
144
+ }
145
+ /**
146
+ * Log ticket completed
147
+ */
148
+ async logTicketCompleted(ticketId, workerId, costUsd, tokens, filesModified) {
149
+ await this.log('ticket:completed', {
150
+ ticketId,
151
+ workerId,
152
+ costUsd,
153
+ tokens,
154
+ filesModified,
155
+ });
156
+ }
157
+ /**
158
+ * Log ticket failed
159
+ */
160
+ async logTicketFailed(ticketId, workerId, error, retryCount) {
161
+ await this.log('ticket:failed', {
162
+ ticketId,
163
+ workerId,
164
+ error,
165
+ retryCount,
166
+ });
167
+ }
168
+ /**
169
+ * Log ticket retried
170
+ */
171
+ async logTicketRetried(ticketId, workerId, retryCount) {
172
+ await this.log('ticket:retried', {
173
+ ticketId,
174
+ workerId,
175
+ retryCount,
176
+ });
177
+ }
178
+ /**
179
+ * Log worker created
180
+ */
181
+ async logWorkerCreated(workerId, worktreePath) {
182
+ await this.log('worker:created', { workerId, worktreePath });
183
+ }
184
+ /**
185
+ * Log worker status change
186
+ */
187
+ async logWorkerStatus(workerId, status, ticketId) {
188
+ await this.log(`worker:${status === 'idle' ? 'idle' : 'started'}`, {
189
+ workerId,
190
+ status,
191
+ ticketId,
192
+ });
193
+ }
194
+ /**
195
+ * Log cost threshold
196
+ */
197
+ async logCostThreshold(threshold, currentCost, percentUsed) {
198
+ await this.log('cost:threshold', {
199
+ threshold,
200
+ currentCost,
201
+ percentUsed,
202
+ });
203
+ }
204
+ /**
205
+ * Log cost limit reached
206
+ */
207
+ async logCostLimitReached(limit, currentCost) {
208
+ await this.log('cost:limit_reached', { limit, currentCost });
209
+ }
210
+ /**
211
+ * Log rate limit hit
212
+ */
213
+ async logRateLimitHit(retryAfterMs, provider) {
214
+ await this.log('rate_limit:hit', { retryAfterMs, provider });
215
+ }
216
+ /**
217
+ * Log rate limit cleared
218
+ */
219
+ async logRateLimitCleared() {
220
+ await this.log('rate_limit:cleared', {});
221
+ }
222
+ /**
223
+ * Log systemic error
224
+ */
225
+ async logSystemicError(errorType, errorCount, message) {
226
+ await this.log('error:systemic', {
227
+ errorType,
228
+ errorCount,
229
+ message,
230
+ });
231
+ }
232
+ /**
233
+ * Log git commit
234
+ */
235
+ async logGitCommit(ticketId, commitHash, branch) {
236
+ await this.log('git:commit', { ticketId, commitHash, branch });
237
+ }
238
+ /**
239
+ * Log git merge
240
+ */
241
+ async logGitMerge(sourceBranch, targetBranch, success, commitHash) {
242
+ await this.log('git:merge', {
243
+ sourceBranch,
244
+ targetBranch,
245
+ success,
246
+ commitHash,
247
+ });
248
+ }
249
+ /**
250
+ * Log git conflict
251
+ */
252
+ async logGitConflict(sourceBranch, targetBranch, files) {
253
+ await this.log('git:conflict', {
254
+ sourceBranch,
255
+ targetBranch,
256
+ files,
257
+ });
258
+ }
259
+ /**
260
+ * Flush pending writes
261
+ */
262
+ async flush() {
263
+ while (this.writeQueue.length > 0 || this.isWriting) {
264
+ await new Promise(resolve => setTimeout(resolve, 10));
265
+ }
266
+ }
267
+ /**
268
+ * Get log file path
269
+ */
270
+ getLogFilePath() {
271
+ return this.logFilePath;
272
+ }
273
+ /**
274
+ * Get run ID
275
+ */
276
+ getRunId() {
277
+ return this.runId;
278
+ }
279
+ /**
280
+ * Read log entries
281
+ */
282
+ async readEntries() {
283
+ try {
284
+ const content = await fs.readFile(this.logFilePath, 'utf-8');
285
+ return content
286
+ .split('\n')
287
+ .filter(line => line.trim().length > 0)
288
+ .map(line => JSON.parse(line));
289
+ }
290
+ catch {
291
+ return [];
292
+ }
293
+ }
294
+ /**
295
+ * Get entries by type
296
+ */
297
+ async getEntriesByType(type) {
298
+ const entries = await this.readEntries();
299
+ return entries.filter(e => e.type === type);
300
+ }
301
+ }
302
+ /**
303
+ * Create an audit logger
304
+ */
305
+ export function createAuditLogger(options) {
306
+ return new AuditLogger(options);
307
+ }
308
+ //# sourceMappingURL=audit-logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-logger.js","sourceRoot":"","sources":["../../../src/autopilot/utils/audit-logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Cost Tracker
3
+ *
4
+ * Tracks and estimates token usage costs for autopilot runs.
5
+ */
6
+ import { EventEmitter } from 'events';
7
+ import type { TokenUsage } from '../types.js';
8
+ /**
9
+ * Model pricing (per million tokens)
10
+ */
11
+ export interface ModelPricing {
12
+ inputCostPer1M: number;
13
+ outputCostPer1M: number;
14
+ }
15
+ /**
16
+ * Built-in model pricing
17
+ */
18
+ export declare const MODEL_PRICING: Record<string, ModelPricing>;
19
+ /**
20
+ * Cost threshold warning
21
+ */
22
+ export interface CostThresholdWarning {
23
+ threshold: number;
24
+ currentCost: number;
25
+ percentUsed: number;
26
+ message: string;
27
+ }
28
+ /**
29
+ * Cost snapshot
30
+ */
31
+ export interface CostSnapshot {
32
+ totalCostUsd: number;
33
+ totalInputTokens: number;
34
+ totalOutputTokens: number;
35
+ ticketCount: number;
36
+ averageCostPerTicket: number;
37
+ timestamp: Date;
38
+ }
39
+ /**
40
+ * Cost Tracker Events
41
+ */
42
+ export interface CostTrackerEvents {
43
+ 'cost:updated': {
44
+ totalCost: number;
45
+ lastCost: number;
46
+ };
47
+ 'cost:threshold': CostThresholdWarning;
48
+ 'cost:limit_reached': {
49
+ limit: number;
50
+ currentCost: number;
51
+ };
52
+ }
53
+ /**
54
+ * Cost Tracker Options
55
+ */
56
+ export interface CostTrackerOptions {
57
+ maxTotalCostUsd?: number;
58
+ warningThresholds?: number[];
59
+ modelPricing?: Record<string, ModelPricing>;
60
+ }
61
+ /**
62
+ * Cost Tracker
63
+ *
64
+ * Tracks token usage and estimates costs, emitting warnings at thresholds.
65
+ */
66
+ export declare class CostTracker extends EventEmitter {
67
+ private totalCostUsd;
68
+ private totalInputTokens;
69
+ private totalOutputTokens;
70
+ private ticketCount;
71
+ private maxTotalCostUsd;
72
+ private warningThresholds;
73
+ private triggeredThresholds;
74
+ private modelPricing;
75
+ private costHistory;
76
+ constructor(options?: CostTrackerOptions);
77
+ /**
78
+ * Estimate cost from token usage
79
+ */
80
+ estimateCost(tokens: TokenUsage, model?: string): number;
81
+ /**
82
+ * Add token usage and update cost
83
+ */
84
+ addTokenUsage(tokens: TokenUsage, model?: string): number;
85
+ /**
86
+ * Add direct cost (when tokens aren't available)
87
+ */
88
+ addDirectCost(costUsd: number): void;
89
+ /**
90
+ * Check and emit threshold warnings
91
+ */
92
+ private checkThresholds;
93
+ /**
94
+ * Get threshold warning message
95
+ */
96
+ private getThresholdMessage;
97
+ /**
98
+ * Check if cost limit is reached
99
+ */
100
+ isLimitReached(): boolean;
101
+ /**
102
+ * Get remaining budget
103
+ */
104
+ getRemainingBudget(): number;
105
+ /**
106
+ * Get budget utilization percentage
107
+ */
108
+ getBudgetUtilization(): number;
109
+ /**
110
+ * Get total cost
111
+ */
112
+ getTotalCost(): number;
113
+ /**
114
+ * Get total tokens
115
+ */
116
+ getTotalTokens(): TokenUsage;
117
+ /**
118
+ * Get average cost per ticket
119
+ */
120
+ getAverageCostPerTicket(): number;
121
+ /**
122
+ * Get ticket count
123
+ */
124
+ getTicketCount(): number;
125
+ /**
126
+ * Get cost snapshot
127
+ */
128
+ getSnapshot(): CostSnapshot;
129
+ /**
130
+ * Get cost history
131
+ */
132
+ getCostHistory(): CostSnapshot[];
133
+ /**
134
+ * Estimate remaining tickets based on average cost
135
+ */
136
+ estimateRemainingTickets(): number;
137
+ /**
138
+ * Format cost as currency string
139
+ */
140
+ formatCost(cost: number): string;
141
+ /**
142
+ * Get cost summary string
143
+ */
144
+ getSummary(): string;
145
+ /**
146
+ * Reset tracker
147
+ */
148
+ reset(): void;
149
+ /**
150
+ * Update max cost limit
151
+ */
152
+ setMaxCost(maxCostUsd: number): void;
153
+ /**
154
+ * Get max cost limit
155
+ */
156
+ getMaxCost(): number;
157
+ }
158
+ /**
159
+ * Create a cost tracker
160
+ */
161
+ export declare function createCostTracker(options?: CostTrackerOptions): CostTracker;
162
+ //# sourceMappingURL=cost-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-tracker.d.ts","sourceRoot":"","sources":["../../../src/autopilot/utils/cost-tracker.ts"],"names":[],"mappings":"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"}