@ginkoai/cli 1.6.2 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/dist/commands/agent/agent-client.d.ts +150 -0
  2. package/dist/commands/agent/agent-client.d.ts.map +1 -0
  3. package/dist/commands/agent/agent-client.js +170 -0
  4. package/dist/commands/agent/agent-client.js.map +1 -0
  5. package/dist/commands/agent/index.d.ts +22 -0
  6. package/dist/commands/agent/index.d.ts.map +1 -0
  7. package/dist/commands/agent/index.js +121 -0
  8. package/dist/commands/agent/index.js.map +1 -0
  9. package/dist/commands/agent/list.d.ts +22 -0
  10. package/dist/commands/agent/list.d.ts.map +1 -0
  11. package/dist/commands/agent/list.js +119 -0
  12. package/dist/commands/agent/list.js.map +1 -0
  13. package/dist/commands/agent/register.d.ts +21 -0
  14. package/dist/commands/agent/register.d.ts.map +1 -0
  15. package/dist/commands/agent/register.js +97 -0
  16. package/dist/commands/agent/register.js.map +1 -0
  17. package/dist/commands/agent/status.d.ts +19 -0
  18. package/dist/commands/agent/status.d.ts.map +1 -0
  19. package/dist/commands/agent/status.js +271 -0
  20. package/dist/commands/agent/status.js.map +1 -0
  21. package/dist/commands/agent/work.d.ts +22 -0
  22. package/dist/commands/agent/work.d.ts.map +1 -0
  23. package/dist/commands/agent/work.js +459 -0
  24. package/dist/commands/agent/work.js.map +1 -0
  25. package/dist/commands/checkpoint/create.d.ts +27 -0
  26. package/dist/commands/checkpoint/create.d.ts.map +1 -0
  27. package/dist/commands/checkpoint/create.js +82 -0
  28. package/dist/commands/checkpoint/create.js.map +1 -0
  29. package/dist/commands/checkpoint/index.d.ts +23 -0
  30. package/dist/commands/checkpoint/index.d.ts.map +1 -0
  31. package/dist/commands/checkpoint/index.js +91 -0
  32. package/dist/commands/checkpoint/index.js.map +1 -0
  33. package/dist/commands/checkpoint/list.d.ts +27 -0
  34. package/dist/commands/checkpoint/list.d.ts.map +1 -0
  35. package/dist/commands/checkpoint/list.js +115 -0
  36. package/dist/commands/checkpoint/list.js.map +1 -0
  37. package/dist/commands/checkpoint/show.d.ts +23 -0
  38. package/dist/commands/checkpoint/show.d.ts.map +1 -0
  39. package/dist/commands/checkpoint/show.js +102 -0
  40. package/dist/commands/checkpoint/show.js.map +1 -0
  41. package/dist/commands/dlq.d.ts +24 -0
  42. package/dist/commands/dlq.d.ts.map +1 -0
  43. package/dist/commands/dlq.js +172 -0
  44. package/dist/commands/dlq.js.map +1 -0
  45. package/dist/commands/escalation/create.d.ts +22 -0
  46. package/dist/commands/escalation/create.d.ts.map +1 -0
  47. package/dist/commands/escalation/create.js +122 -0
  48. package/dist/commands/escalation/create.js.map +1 -0
  49. package/dist/commands/escalation/escalation-client.d.ts +101 -0
  50. package/dist/commands/escalation/escalation-client.d.ts.map +1 -0
  51. package/dist/commands/escalation/escalation-client.js +129 -0
  52. package/dist/commands/escalation/escalation-client.js.map +1 -0
  53. package/dist/commands/escalation/index.d.ts +22 -0
  54. package/dist/commands/escalation/index.d.ts.map +1 -0
  55. package/dist/commands/escalation/index.js +94 -0
  56. package/dist/commands/escalation/index.js.map +1 -0
  57. package/dist/commands/escalation/list.d.ts +24 -0
  58. package/dist/commands/escalation/list.d.ts.map +1 -0
  59. package/dist/commands/escalation/list.js +170 -0
  60. package/dist/commands/escalation/list.js.map +1 -0
  61. package/dist/commands/escalation/resolve.d.ts +20 -0
  62. package/dist/commands/escalation/resolve.d.ts.map +1 -0
  63. package/dist/commands/escalation/resolve.js +102 -0
  64. package/dist/commands/escalation/resolve.js.map +1 -0
  65. package/dist/commands/graph/api-client.d.ts +21 -1
  66. package/dist/commands/graph/api-client.d.ts.map +1 -1
  67. package/dist/commands/graph/api-client.js +23 -0
  68. package/dist/commands/graph/api-client.js.map +1 -1
  69. package/dist/commands/handoff.d.ts.map +1 -1
  70. package/dist/commands/handoff.js +9 -1
  71. package/dist/commands/handoff.js.map +1 -1
  72. package/dist/commands/log.d.ts +3 -0
  73. package/dist/commands/log.d.ts.map +1 -1
  74. package/dist/commands/log.js +73 -14
  75. package/dist/commands/log.js.map +1 -1
  76. package/dist/commands/notifications/history.d.ts +21 -0
  77. package/dist/commands/notifications/history.d.ts.map +1 -0
  78. package/dist/commands/notifications/history.js +160 -0
  79. package/dist/commands/notifications/history.js.map +1 -0
  80. package/dist/commands/notifications/index.d.ts +22 -0
  81. package/dist/commands/notifications/index.d.ts.map +1 -0
  82. package/dist/commands/notifications/index.js +87 -0
  83. package/dist/commands/notifications/index.js.map +1 -0
  84. package/dist/commands/notifications/list.d.ts +19 -0
  85. package/dist/commands/notifications/list.d.ts.map +1 -0
  86. package/dist/commands/notifications/list.js +132 -0
  87. package/dist/commands/notifications/list.js.map +1 -0
  88. package/dist/commands/notifications/test.d.ts +19 -0
  89. package/dist/commands/notifications/test.d.ts.map +1 -0
  90. package/dist/commands/notifications/test.js +217 -0
  91. package/dist/commands/notifications/test.js.map +1 -0
  92. package/dist/commands/orchestrate.d.ts +25 -0
  93. package/dist/commands/orchestrate.d.ts.map +1 -0
  94. package/dist/commands/orchestrate.js +858 -0
  95. package/dist/commands/orchestrate.js.map +1 -0
  96. package/dist/commands/sprint/deps.d.ts +29 -0
  97. package/dist/commands/sprint/deps.d.ts.map +1 -0
  98. package/dist/commands/sprint/deps.js +269 -0
  99. package/dist/commands/sprint/deps.js.map +1 -0
  100. package/dist/commands/sprint/index.d.ts +10 -5
  101. package/dist/commands/sprint/index.d.ts.map +1 -1
  102. package/dist/commands/sprint/index.js +26 -5
  103. package/dist/commands/sprint/index.js.map +1 -1
  104. package/dist/commands/start/index.d.ts.map +1 -1
  105. package/dist/commands/start/index.js +6 -0
  106. package/dist/commands/start/index.js.map +1 -1
  107. package/dist/commands/start/start-reflection.d.ts.map +1 -1
  108. package/dist/commands/start/start-reflection.js +8 -0
  109. package/dist/commands/start/start-reflection.js.map +1 -1
  110. package/dist/commands/verify.d.ts +17 -0
  111. package/dist/commands/verify.d.ts.map +1 -0
  112. package/dist/commands/verify.js +232 -0
  113. package/dist/commands/verify.js.map +1 -0
  114. package/dist/core/session-log-manager.d.ts +1 -1
  115. package/dist/core/session-log-manager.d.ts.map +1 -1
  116. package/dist/index.js +78 -1
  117. package/dist/index.js.map +1 -1
  118. package/dist/lib/__tests__/task-timeout.test.d.ts +12 -0
  119. package/dist/lib/__tests__/task-timeout.test.d.ts.map +1 -0
  120. package/dist/lib/__tests__/task-timeout.test.js +278 -0
  121. package/dist/lib/__tests__/task-timeout.test.js.map +1 -0
  122. package/dist/lib/agent-heartbeat.d.ts +68 -0
  123. package/dist/lib/agent-heartbeat.d.ts.map +1 -0
  124. package/dist/lib/agent-heartbeat.js +117 -0
  125. package/dist/lib/agent-heartbeat.js.map +1 -0
  126. package/dist/lib/checkpoint.d.ts +85 -0
  127. package/dist/lib/checkpoint.d.ts.map +1 -0
  128. package/dist/lib/checkpoint.js +323 -0
  129. package/dist/lib/checkpoint.js.map +1 -0
  130. package/dist/lib/context-metrics.d.ts +230 -0
  131. package/dist/lib/context-metrics.d.ts.map +1 -0
  132. package/dist/lib/context-metrics.js +372 -0
  133. package/dist/lib/context-metrics.js.map +1 -0
  134. package/dist/lib/dead-letter-queue.d.ts +108 -0
  135. package/dist/lib/dead-letter-queue.d.ts.map +1 -0
  136. package/dist/lib/dead-letter-queue.js +378 -0
  137. package/dist/lib/dead-letter-queue.js.map +1 -0
  138. package/dist/lib/event-logger.d.ts +9 -1
  139. package/dist/lib/event-logger.d.ts.map +1 -1
  140. package/dist/lib/event-logger.js +45 -3
  141. package/dist/lib/event-logger.js.map +1 -1
  142. package/dist/lib/event-queue.d.ts.map +1 -1
  143. package/dist/lib/event-queue.js +13 -2
  144. package/dist/lib/event-queue.js.map +1 -1
  145. package/dist/lib/examples/timeout-demo.d.ts +13 -0
  146. package/dist/lib/examples/timeout-demo.d.ts.map +1 -0
  147. package/dist/lib/examples/timeout-demo.js +102 -0
  148. package/dist/lib/examples/timeout-demo.js.map +1 -0
  149. package/dist/lib/examples/timeout-integration-example.d.ts +17 -0
  150. package/dist/lib/examples/timeout-integration-example.d.ts.map +1 -0
  151. package/dist/lib/examples/timeout-integration-example.js +223 -0
  152. package/dist/lib/examples/timeout-integration-example.js.map +1 -0
  153. package/dist/lib/notification-hooks.d.ts +103 -0
  154. package/dist/lib/notification-hooks.d.ts.map +1 -0
  155. package/dist/lib/notification-hooks.js +223 -0
  156. package/dist/lib/notification-hooks.js.map +1 -0
  157. package/dist/lib/notifications/discord.d.ts +20 -0
  158. package/dist/lib/notifications/discord.d.ts.map +1 -0
  159. package/dist/lib/notifications/discord.js +140 -0
  160. package/dist/lib/notifications/discord.js.map +1 -0
  161. package/dist/lib/notifications/index.d.ts +66 -0
  162. package/dist/lib/notifications/index.d.ts.map +1 -0
  163. package/dist/lib/notifications/index.js +120 -0
  164. package/dist/lib/notifications/index.js.map +1 -0
  165. package/dist/lib/notifications/slack.d.ts +20 -0
  166. package/dist/lib/notifications/slack.d.ts.map +1 -0
  167. package/dist/lib/notifications/slack.js +186 -0
  168. package/dist/lib/notifications/slack.js.map +1 -0
  169. package/dist/lib/notifications/teams.d.ts +20 -0
  170. package/dist/lib/notifications/teams.d.ts.map +1 -0
  171. package/dist/lib/notifications/teams.js +146 -0
  172. package/dist/lib/notifications/teams.js.map +1 -0
  173. package/dist/lib/notifications/webhook.d.ts +23 -0
  174. package/dist/lib/notifications/webhook.d.ts.map +1 -0
  175. package/dist/lib/notifications/webhook.js +65 -0
  176. package/dist/lib/notifications/webhook.js.map +1 -0
  177. package/dist/lib/orchestrator-state.d.ts +194 -0
  178. package/dist/lib/orchestrator-state.d.ts.map +1 -0
  179. package/dist/lib/orchestrator-state.js +332 -0
  180. package/dist/lib/orchestrator-state.js.map +1 -0
  181. package/dist/lib/realtime-cursor.d.ts +107 -0
  182. package/dist/lib/realtime-cursor.d.ts.map +1 -0
  183. package/dist/lib/realtime-cursor.js +260 -0
  184. package/dist/lib/realtime-cursor.js.map +1 -0
  185. package/dist/lib/rollback.d.ts +86 -0
  186. package/dist/lib/rollback.d.ts.map +1 -0
  187. package/dist/lib/rollback.js +405 -0
  188. package/dist/lib/rollback.js.map +1 -0
  189. package/dist/lib/sprint-loader.d.ts +39 -2
  190. package/dist/lib/sprint-loader.d.ts.map +1 -1
  191. package/dist/lib/sprint-loader.js +255 -4
  192. package/dist/lib/sprint-loader.js.map +1 -1
  193. package/dist/lib/stale-agent-detector.d.ts +102 -0
  194. package/dist/lib/stale-agent-detector.d.ts.map +1 -0
  195. package/dist/lib/stale-agent-detector.js +156 -0
  196. package/dist/lib/stale-agent-detector.js.map +1 -0
  197. package/dist/lib/task-dependencies.d.ts +143 -0
  198. package/dist/lib/task-dependencies.d.ts.map +1 -0
  199. package/dist/lib/task-dependencies.js +357 -0
  200. package/dist/lib/task-dependencies.js.map +1 -0
  201. package/dist/lib/task-timeout.d.ts +153 -0
  202. package/dist/lib/task-timeout.d.ts.map +1 -0
  203. package/dist/lib/task-timeout.js +505 -0
  204. package/dist/lib/task-timeout.js.map +1 -0
  205. package/dist/lib/verification/build-check.d.ts +55 -0
  206. package/dist/lib/verification/build-check.d.ts.map +1 -0
  207. package/dist/lib/verification/build-check.js +111 -0
  208. package/dist/lib/verification/build-check.js.map +1 -0
  209. package/dist/lib/verification/index.d.ts +19 -0
  210. package/dist/lib/verification/index.d.ts.map +1 -0
  211. package/dist/lib/verification/index.js +17 -0
  212. package/dist/lib/verification/index.js.map +1 -0
  213. package/dist/lib/verification/lint-check.d.ts +34 -0
  214. package/dist/lib/verification/lint-check.d.ts.map +1 -0
  215. package/dist/lib/verification/lint-check.js +215 -0
  216. package/dist/lib/verification/lint-check.js.map +1 -0
  217. package/dist/lib/verification/test-runner.d.ts +50 -0
  218. package/dist/lib/verification/test-runner.d.ts.map +1 -0
  219. package/dist/lib/verification/test-runner.js +225 -0
  220. package/dist/lib/verification/test-runner.js.map +1 -0
  221. package/dist/utils/command-helpers.d.ts.map +1 -1
  222. package/dist/utils/command-helpers.js +7 -0
  223. package/dist/utils/command-helpers.js.map +1 -1
  224. package/package.json +1 -1
@@ -0,0 +1,372 @@
1
+ /**
2
+ * @fileType: utility
3
+ * @status: current
4
+ * @updated: 2025-12-07
5
+ * @tags: [context-metrics, token-estimation, pressure-monitoring, epic-004, sprint-4]
6
+ * @related: [orchestrate.ts, event-logger.ts, agent-heartbeat.ts]
7
+ * @priority: high
8
+ * @complexity: medium
9
+ * @dependencies: []
10
+ */
11
+ /**
12
+ * Model context limits configuration
13
+ * Values are approximate and based on model documentation
14
+ */
15
+ export const MODEL_LIMITS = {
16
+ // Claude models
17
+ 'claude-opus-4-5-20251101': 200000,
18
+ 'claude-sonnet-4-20250514': 200000,
19
+ 'claude-3-5-sonnet-20241022': 200000,
20
+ 'claude-3-opus-20240229': 200000,
21
+ 'claude-3-sonnet-20240229': 200000,
22
+ 'claude-3-haiku-20240307': 200000,
23
+ // OpenAI models
24
+ 'gpt-4-turbo': 128000,
25
+ 'gpt-4-turbo-preview': 128000,
26
+ 'gpt-4o': 128000,
27
+ 'gpt-4o-mini': 128000,
28
+ 'gpt-4': 8192,
29
+ 'gpt-3.5-turbo': 16385,
30
+ // Google models
31
+ 'gemini-pro': 1000000,
32
+ 'gemini-1.5-pro': 1000000,
33
+ 'gemini-1.5-flash': 1000000,
34
+ // Default fallback
35
+ default: 128000,
36
+ };
37
+ /**
38
+ * Default pressure thresholds
39
+ */
40
+ export const DEFAULT_THRESHOLDS = {
41
+ optimal: 0.5,
42
+ elevated: 0.7,
43
+ warning: 0.85,
44
+ };
45
+ // ============================================================
46
+ // Token Estimation
47
+ // ============================================================
48
+ /**
49
+ * Estimate token count from text using character-based heuristic.
50
+ *
51
+ * Heuristic: ~4 characters per token for English text.
52
+ * This is a rough approximation that works well for typical code/prose.
53
+ *
54
+ * More accurate methods:
55
+ * - tiktoken (OpenAI's tokenizer)
56
+ * - Anthropic SDK count_tokens
57
+ *
58
+ * We use character heuristic for:
59
+ * - Zero dependencies
60
+ * - Fast calculation
61
+ * - Good enough for pressure monitoring (within ~10%)
62
+ *
63
+ * @param text - Text to estimate tokens for
64
+ * @returns Estimated token count
65
+ */
66
+ export function estimateTokens(text) {
67
+ if (!text)
68
+ return 0;
69
+ // Heuristic: ~4 characters per token for English/code
70
+ // This aligns with typical tokenizer behavior for mixed content
71
+ const charCount = text.length;
72
+ const estimated = Math.ceil(charCount / 4);
73
+ return estimated;
74
+ }
75
+ /**
76
+ * Estimate tokens for structured content (messages, tool calls, etc.)
77
+ *
78
+ * @param content - Structured content to estimate
79
+ * @returns Estimated token count with breakdown
80
+ */
81
+ export function estimateStructuredTokens(content) {
82
+ const breakdown = {};
83
+ let total = 0;
84
+ // System prompt
85
+ if (content.systemPrompt) {
86
+ breakdown.systemPrompt = estimateTokens(content.systemPrompt);
87
+ total += breakdown.systemPrompt;
88
+ }
89
+ // Context/preamble
90
+ if (content.context) {
91
+ breakdown.context = estimateTokens(content.context);
92
+ total += breakdown.context;
93
+ }
94
+ // Messages
95
+ if (content.messages && content.messages.length > 0) {
96
+ let messageTokens = 0;
97
+ for (const msg of content.messages) {
98
+ // Role tokens (~3-5 tokens per message for formatting)
99
+ messageTokens += 4;
100
+ messageTokens += estimateTokens(msg.content);
101
+ }
102
+ breakdown.messages = messageTokens;
103
+ total += messageTokens;
104
+ }
105
+ // Tool calls
106
+ if (content.toolCalls && content.toolCalls.length > 0) {
107
+ let toolTokens = 0;
108
+ for (const call of content.toolCalls) {
109
+ // Tool name and structure (~10 tokens overhead per call)
110
+ toolTokens += 10;
111
+ toolTokens += estimateTokens(call.name);
112
+ toolTokens += estimateTokens(JSON.stringify(call.input));
113
+ if (call.output) {
114
+ toolTokens += estimateTokens(JSON.stringify(call.output));
115
+ }
116
+ }
117
+ breakdown.toolCalls = toolTokens;
118
+ total += toolTokens;
119
+ }
120
+ return { total, breakdown };
121
+ }
122
+ // ============================================================
123
+ // Pressure Calculation
124
+ // ============================================================
125
+ /**
126
+ * Get context limit for a model
127
+ *
128
+ * @param model - Model identifier
129
+ * @returns Context limit in tokens
130
+ */
131
+ export function getContextLimit(model) {
132
+ // Check for exact match
133
+ if (MODEL_LIMITS[model]) {
134
+ return MODEL_LIMITS[model];
135
+ }
136
+ // Check for partial match (e.g., "claude-3" matches "claude-3-opus")
137
+ for (const [key, value] of Object.entries(MODEL_LIMITS)) {
138
+ if (model.includes(key) || key.includes(model)) {
139
+ return value;
140
+ }
141
+ }
142
+ // Default fallback
143
+ return MODEL_LIMITS.default;
144
+ }
145
+ /**
146
+ * Calculate pressure ratio
147
+ *
148
+ * @param estimatedTokens - Current estimated token usage
149
+ * @param contextLimit - Model's context limit
150
+ * @returns Pressure ratio (0.0 - 1.0, clamped)
151
+ */
152
+ export function calculatePressure(estimatedTokens, contextLimit) {
153
+ if (contextLimit <= 0)
154
+ return 1.0;
155
+ const pressure = estimatedTokens / contextLimit;
156
+ return Math.min(1.0, Math.max(0.0, pressure));
157
+ }
158
+ /**
159
+ * Classify pressure into zones
160
+ *
161
+ * @param pressure - Pressure ratio (0.0 - 1.0)
162
+ * @param thresholds - Optional custom thresholds
163
+ * @returns Pressure zone classification
164
+ */
165
+ export function getPressureZone(pressure, thresholds = DEFAULT_THRESHOLDS) {
166
+ if (pressure < thresholds.optimal)
167
+ return 'optimal';
168
+ if (pressure < thresholds.elevated)
169
+ return 'elevated';
170
+ if (pressure < thresholds.warning)
171
+ return 'warning';
172
+ return 'critical';
173
+ }
174
+ /**
175
+ * Get pressure zone color for display
176
+ *
177
+ * @param zone - Pressure zone
178
+ * @returns Chalk color name
179
+ */
180
+ export function getPressureColor(zone) {
181
+ switch (zone) {
182
+ case 'optimal':
183
+ return 'green';
184
+ case 'elevated':
185
+ return 'yellow';
186
+ case 'warning':
187
+ return 'red';
188
+ case 'critical':
189
+ return 'magenta';
190
+ }
191
+ }
192
+ // ============================================================
193
+ // Context Monitor Class
194
+ // ============================================================
195
+ /**
196
+ * Context pressure monitor for orchestrator agents.
197
+ *
198
+ * Tracks metrics over time and provides pressure monitoring.
199
+ * Designed to be updated each orchestration cycle.
200
+ */
201
+ export class ContextMonitor {
202
+ model;
203
+ contextLimit;
204
+ thresholds;
205
+ // Tracked metrics
206
+ messageCount = 0;
207
+ toolCallCount = 0;
208
+ eventsSinceStart = 0;
209
+ accumulatedTokens = 0;
210
+ // History for trend analysis
211
+ pressureHistory = [];
212
+ maxHistorySize = 100;
213
+ constructor(options = {}) {
214
+ this.model = options.model || 'claude-opus-4-5-20251101';
215
+ this.contextLimit = options.contextLimit || getContextLimit(this.model);
216
+ this.thresholds = { ...DEFAULT_THRESHOLDS, ...options.thresholds };
217
+ }
218
+ /**
219
+ * Record a message (increments counter and estimates tokens)
220
+ */
221
+ recordMessage(content) {
222
+ this.messageCount++;
223
+ this.accumulatedTokens += estimateTokens(content);
224
+ this.recordPressure();
225
+ }
226
+ /**
227
+ * Record a tool call (increments counter and estimates tokens)
228
+ */
229
+ recordToolCall(name, input, output) {
230
+ this.toolCallCount++;
231
+ this.accumulatedTokens += 10; // Overhead
232
+ this.accumulatedTokens += estimateTokens(name);
233
+ this.accumulatedTokens += estimateTokens(JSON.stringify(input));
234
+ if (output) {
235
+ this.accumulatedTokens += estimateTokens(JSON.stringify(output));
236
+ }
237
+ this.recordPressure();
238
+ }
239
+ /**
240
+ * Record an event (session activity)
241
+ */
242
+ recordEvent() {
243
+ this.eventsSinceStart++;
244
+ }
245
+ /**
246
+ * Add tokens directly (for bulk updates)
247
+ */
248
+ addTokens(count) {
249
+ this.accumulatedTokens += count;
250
+ this.recordPressure();
251
+ }
252
+ /**
253
+ * Get current metrics snapshot
254
+ */
255
+ getMetrics() {
256
+ const pressure = calculatePressure(this.accumulatedTokens, this.contextLimit);
257
+ return {
258
+ estimatedTokens: this.accumulatedTokens,
259
+ contextLimit: this.contextLimit,
260
+ pressure,
261
+ messageCount: this.messageCount,
262
+ toolCallCount: this.toolCallCount,
263
+ eventsSinceStart: this.eventsSinceStart,
264
+ model: this.model,
265
+ measuredAt: new Date(),
266
+ };
267
+ }
268
+ /**
269
+ * Get current pressure ratio
270
+ */
271
+ getPressure() {
272
+ return calculatePressure(this.accumulatedTokens, this.contextLimit);
273
+ }
274
+ /**
275
+ * Get current pressure zone
276
+ */
277
+ getZone() {
278
+ return getPressureZone(this.getPressure(), this.thresholds);
279
+ }
280
+ /**
281
+ * Check if pressure exceeds a threshold
282
+ */
283
+ isAboveThreshold(threshold) {
284
+ return this.getPressure() >= threshold;
285
+ }
286
+ /**
287
+ * Check if respawn is recommended (pressure > 80%)
288
+ */
289
+ shouldRespawn() {
290
+ return this.isAboveThreshold(0.8);
291
+ }
292
+ /**
293
+ * Check if warning should be logged (pressure > 70%)
294
+ */
295
+ shouldWarn() {
296
+ return this.isAboveThreshold(0.7);
297
+ }
298
+ /**
299
+ * Get pressure trend (increasing, stable, decreasing)
300
+ */
301
+ getTrend() {
302
+ if (this.pressureHistory.length < 5)
303
+ return 'stable';
304
+ const recent = this.pressureHistory.slice(-5);
305
+ const first = recent[0].pressure;
306
+ const last = recent[recent.length - 1].pressure;
307
+ const delta = last - first;
308
+ if (delta > 0.05)
309
+ return 'increasing';
310
+ if (delta < -0.05)
311
+ return 'decreasing';
312
+ return 'stable';
313
+ }
314
+ /**
315
+ * Reset metrics (for new session)
316
+ */
317
+ reset() {
318
+ this.messageCount = 0;
319
+ this.toolCallCount = 0;
320
+ this.eventsSinceStart = 0;
321
+ this.accumulatedTokens = 0;
322
+ this.pressureHistory = [];
323
+ }
324
+ /**
325
+ * Record pressure snapshot for history
326
+ */
327
+ recordPressure() {
328
+ const pressure = this.getPressure();
329
+ this.pressureHistory.push({ timestamp: new Date(), pressure });
330
+ // Trim history if too large
331
+ if (this.pressureHistory.length > this.maxHistorySize) {
332
+ this.pressureHistory = this.pressureHistory.slice(-this.maxHistorySize);
333
+ }
334
+ }
335
+ /**
336
+ * Format metrics for display
337
+ */
338
+ formatMetrics() {
339
+ const metrics = this.getMetrics();
340
+ const zone = this.getZone();
341
+ const trend = this.getTrend();
342
+ const pressurePercent = (metrics.pressure * 100).toFixed(1);
343
+ const tokenK = (metrics.estimatedTokens / 1000).toFixed(1);
344
+ const limitK = (metrics.contextLimit / 1000).toFixed(0);
345
+ const trendIcon = trend === 'increasing' ? '↑' : trend === 'decreasing' ? '↓' : '→';
346
+ return `${tokenK}K/${limitK}K tokens (${pressurePercent}% ${trendIcon}) [${zone}]`;
347
+ }
348
+ }
349
+ // ============================================================
350
+ // Singleton Instance
351
+ // ============================================================
352
+ let globalMonitor = null;
353
+ /**
354
+ * Get or create the global context monitor
355
+ */
356
+ export function getContextMonitor(options) {
357
+ if (!globalMonitor) {
358
+ globalMonitor = new ContextMonitor(options);
359
+ }
360
+ return globalMonitor;
361
+ }
362
+ /**
363
+ * Reset the global context monitor (for testing or session restart)
364
+ */
365
+ export function resetContextMonitor() {
366
+ if (globalMonitor) {
367
+ globalMonitor.reset();
368
+ }
369
+ globalMonitor = null;
370
+ }
371
+ export default ContextMonitor;
372
+ //# sourceMappingURL=context-metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-metrics.js","sourceRoot":"","sources":["../../src/lib/context-metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * @fileType: utility
3
+ * @status: current
4
+ * @updated: 2025-12-07
5
+ * @tags: [dead-letter-queue, dlq, resilience, event-retry, epic-004]
6
+ * @related: [event-queue.ts, event-logger.ts, api-client.ts]
7
+ * @priority: high
8
+ * @complexity: medium
9
+ * @dependencies: [fs-extra, uuid]
10
+ */
11
+ import { Event } from './event-logger.js';
12
+ /**
13
+ * Dead Letter Queue Entry
14
+ *
15
+ * Captures failed sync attempts for later retry
16
+ */
17
+ export interface DeadLetterEntry {
18
+ id: string;
19
+ originalEvent: Event;
20
+ failureReason: string;
21
+ failedAt: Date;
22
+ retryCount: number;
23
+ lastRetryAt?: Date;
24
+ status: 'pending' | 'retrying' | 'resolved' | 'abandoned';
25
+ }
26
+ /**
27
+ * DLQ Configuration
28
+ */
29
+ interface DLQConfig {
30
+ maxRetries: number;
31
+ retryDelays: number[];
32
+ abandonedThreshold: number;
33
+ }
34
+ /**
35
+ * Add event to Dead Letter Queue
36
+ *
37
+ * Called when event sync fails after all retries in event-queue.ts
38
+ *
39
+ * @param event - Original event that failed to sync
40
+ * @param reason - Failure reason description
41
+ * @returns DLQ entry ID
42
+ */
43
+ export declare function addToDeadLetter(event: Event, reason: string): Promise<string>;
44
+ /**
45
+ * Get all DLQ entries, optionally filtered by status
46
+ *
47
+ * @param status - Optional status filter
48
+ * @returns Array of DLQ entries
49
+ */
50
+ export declare function getDeadLetterEntries(status?: 'pending' | 'retrying' | 'resolved' | 'abandoned'): Promise<DeadLetterEntry[]>;
51
+ /**
52
+ * Get a specific DLQ entry by ID
53
+ *
54
+ * @param entryId - DLQ entry ID
55
+ * @returns DLQ entry or null if not found
56
+ */
57
+ export declare function getDeadLetterEntry(entryId: string): Promise<DeadLetterEntry | null>;
58
+ /**
59
+ * Retry a specific DLQ entry
60
+ *
61
+ * Attempts to sync the event again, respecting retry count and delays
62
+ *
63
+ * @param entryId - DLQ entry ID to retry
64
+ * @param config - Optional DLQ configuration
65
+ * @returns Success status and updated entry
66
+ */
67
+ export declare function retryDeadLetter(entryId: string, config?: Partial<DLQConfig>): Promise<{
68
+ success: boolean;
69
+ entry: DeadLetterEntry;
70
+ error?: string;
71
+ }>;
72
+ /**
73
+ * Auto-retry eligible DLQ entries
74
+ *
75
+ * Called periodically to retry pending entries that meet delay requirements
76
+ *
77
+ * @param config - Optional DLQ configuration
78
+ * @returns Number of entries retried
79
+ */
80
+ export declare function autoRetryDeadLetters(config?: Partial<DLQConfig>): Promise<number>;
81
+ /**
82
+ * Delete a resolved or abandoned DLQ entry
83
+ *
84
+ * @param entryId - DLQ entry ID to delete
85
+ */
86
+ export declare function deleteDeadLetterEntry(entryId: string): Promise<void>;
87
+ /**
88
+ * Clean up old resolved/abandoned entries
89
+ *
90
+ * @param olderThanDays - Delete entries older than N days (default 30)
91
+ * @returns Number of entries deleted
92
+ */
93
+ export declare function cleanupDeadLetters(olderThanDays?: number): Promise<number>;
94
+ /**
95
+ * Get DLQ statistics
96
+ *
97
+ * @returns Summary of DLQ state
98
+ */
99
+ export declare function getDeadLetterStats(): Promise<{
100
+ pending: number;
101
+ retrying: number;
102
+ resolved: number;
103
+ abandoned: number;
104
+ total: number;
105
+ oldestPending?: Date;
106
+ }>;
107
+ export {};
108
+ //# sourceMappingURL=dead-letter-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dead-letter-queue.d.ts","sourceRoot":"","sources":["../../src/lib/dead-letter-queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,KAAK,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,IAAI,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;CAC3D;AAED;;GAEG;AACH,UAAU,SAAS;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAuCD;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAsBjB;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,GACzD,OAAO,CAAC,eAAe,EAAE,CAAC,CAqC5B;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAqBzF;AAuBD;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,OAAO,CAAC,SAAS,CAAM,GAC9B,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,eAAe,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA+GvE;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,GAAE,OAAO,CAAC,SAAS,CAAM,GAC9B,OAAO,CAAC,MAAM,CAAC,CA4CjB;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAe1E;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,aAAa,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CA0BpF;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,IAAI,CAAC;CACtB,CAAC,CAwBD"}