0xkobold 0.4.3 → 0.5.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 (130) hide show
  1. package/README.md +226 -383
  2. package/dist/package.json +13 -4
  3. package/dist/src/agent/DraconicCapabilityRouter.js +556 -0
  4. package/dist/src/agent/DraconicCapabilityRouter.js.map +1 -0
  5. package/dist/src/agent/DraconicErrorClassifier.js +606 -0
  6. package/dist/src/agent/DraconicErrorClassifier.js.map +1 -0
  7. package/dist/src/agent/DraconicRunRegistry.js +460 -0
  8. package/dist/src/agent/DraconicRunRegistry.js.map +1 -0
  9. package/dist/src/agent/DraconicTokenPredictor.js +500 -0
  10. package/dist/src/agent/DraconicTokenPredictor.js.map +1 -0
  11. package/dist/src/agent/embedded-runner.js +3 -2
  12. package/dist/src/agent/embedded-runner.js.map +1 -1
  13. package/dist/src/cli/commands/doctor.js +199 -0
  14. package/dist/src/cli/commands/doctor.js.map +1 -0
  15. package/dist/src/cli/commands/migrate-from-openclaw.js +39 -0
  16. package/dist/src/cli/commands/migrate-from-openclaw.js.map +1 -0
  17. package/dist/src/cli/commands/migrate.js +6 -4
  18. package/dist/src/cli/commands/migrate.js.map +1 -1
  19. package/dist/src/cli/program.js +3 -1
  20. package/dist/src/cli/program.js.map +1 -1
  21. package/dist/src/config/unified-config.js +195 -0
  22. package/dist/src/config/unified-config.js.map +1 -0
  23. package/dist/src/cron/notifications.js +1 -1
  24. package/dist/src/cron/notifications.js.map +1 -1
  25. package/dist/src/cron/runner.js +9 -3
  26. package/dist/src/cron/runner.js.map +1 -1
  27. package/dist/src/event-bus/index.js +3 -1
  28. package/dist/src/event-bus/index.js.map +1 -1
  29. package/dist/src/extensions/community/draconic-messenger-wrapper.js +35 -0
  30. package/dist/src/extensions/community/draconic-messenger-wrapper.js.map +1 -0
  31. package/dist/src/extensions/community/draconic-subagents-wrapper.js +115 -0
  32. package/dist/src/extensions/community/draconic-subagents-wrapper.js.map +1 -0
  33. package/dist/src/extensions/core/compaction-safeguard-v2.js +95 -0
  34. package/dist/src/extensions/core/compaction-safeguard-v2.js.map +1 -0
  35. package/dist/src/extensions/core/compaction-safeguard.js +206 -137
  36. package/dist/src/extensions/core/compaction-safeguard.js.map +1 -1
  37. package/dist/src/extensions/core/config-extension.js +122 -0
  38. package/dist/src/extensions/core/config-extension.js.map +1 -0
  39. package/dist/src/extensions/core/draconic-hoard-extension.js +194 -0
  40. package/dist/src/extensions/core/draconic-hoard-extension.js.map +1 -0
  41. package/dist/src/extensions/core/draconic-lair-extension.js +146 -0
  42. package/dist/src/extensions/core/draconic-lair-extension.js.map +1 -0
  43. package/dist/src/extensions/core/draconic-safety-extension.js +402 -0
  44. package/dist/src/extensions/core/draconic-safety-extension.js.map +1 -0
  45. package/dist/src/extensions/core/ext-manager.js +40 -0
  46. package/dist/src/extensions/core/ext-manager.js.map +1 -0
  47. package/dist/src/extensions/core/gateway-extension.js +413 -624
  48. package/dist/src/extensions/core/gateway-extension.js.map +1 -1
  49. package/dist/src/extensions/core/generative-agents-extension.js +704 -0
  50. package/dist/src/extensions/core/generative-agents-extension.js.map +1 -0
  51. package/dist/src/extensions/core/memory-bootstrap-extension.js +279 -0
  52. package/dist/src/extensions/core/memory-bootstrap-extension.js.map +1 -0
  53. package/dist/src/extensions/core/ollama-extension.js +442 -0
  54. package/dist/src/extensions/core/ollama-extension.js.map +1 -0
  55. package/dist/src/extensions/core/ollama-router-extension.js +34 -93
  56. package/dist/src/extensions/core/ollama-router-extension.js.map +1 -1
  57. package/dist/src/extensions/core/perennial-memory-extension.js +5 -2
  58. package/dist/src/extensions/core/perennial-memory-extension.js.map +1 -1
  59. package/dist/src/extensions/core/persona-loader-extension.js +41 -15
  60. package/dist/src/extensions/core/persona-loader-extension.js.map +1 -1
  61. package/dist/src/extensions/core/pi-notify-extension.js +6 -0
  62. package/dist/src/extensions/core/pi-notify-extension.js.map +1 -1
  63. package/dist/src/extensions/core/session-bridge-extension.js +8 -72
  64. package/dist/src/extensions/core/session-bridge-extension.js.map +1 -1
  65. package/dist/src/extensions/core/tui-integration-extension-fixed.js +3 -0
  66. package/dist/src/extensions/core/tui-integration-extension-fixed.js.map +1 -0
  67. package/dist/src/extensions/core/tui-integration-extension.js +984 -0
  68. package/dist/src/extensions/core/tui-integration-extension.js.map +1 -0
  69. package/dist/src/gateway/persistence/AgentStore.js +399 -0
  70. package/dist/src/gateway/persistence/AgentStore.js.map +1 -0
  71. package/dist/src/gateway/persistence/index.js +9 -0
  72. package/dist/src/gateway/persistence/index.js.map +1 -0
  73. package/dist/src/hoard/DraconicHoardSystem.js +465 -0
  74. package/dist/src/hoard/DraconicHoardSystem.js.map +1 -0
  75. package/dist/src/index.js +7 -5
  76. package/dist/src/index.js.map +1 -1
  77. package/dist/src/infra/DraconicConnectionPool.js +492 -0
  78. package/dist/src/infra/DraconicConnectionPool.js.map +1 -0
  79. package/dist/src/lair/DraconicLairSystem.js +387 -0
  80. package/dist/src/lair/DraconicLairSystem.js.map +1 -0
  81. package/dist/src/llm/ollama.js +143 -99
  82. package/dist/src/llm/ollama.js.map +1 -1
  83. package/dist/src/migration/openclaw.js +5 -5
  84. package/dist/src/migration/openclaw.js.map +1 -1
  85. package/dist/src/pi-config.js +52 -27
  86. package/dist/src/pi-config.js.map +1 -1
  87. package/dist/src/sessions/SessionManager.js +416 -0
  88. package/dist/src/sessions/SessionManager.js.map +1 -0
  89. package/dist/src/sessions/SessionStore.js +580 -0
  90. package/dist/src/sessions/SessionStore.js.map +1 -0
  91. package/dist/src/sessions/UnifiedSessionBridge.js +394 -0
  92. package/dist/src/sessions/UnifiedSessionBridge.js.map +1 -0
  93. package/dist/src/sessions/index.js +15 -0
  94. package/dist/src/sessions/index.js.map +1 -0
  95. package/dist/src/sessions/migration/index.js +156 -0
  96. package/dist/src/sessions/migration/index.js.map +1 -0
  97. package/dist/src/sessions/types.js +8 -0
  98. package/dist/src/sessions/types.js.map +1 -0
  99. package/dist/src/skills/framework.js +1 -1
  100. package/dist/src/skills/framework.js.map +1 -1
  101. package/dist/src/tui/commands/final-functions.js +39 -0
  102. package/dist/src/tui/commands/final-functions.js.map +1 -0
  103. package/dist/src/tui/commands/natural-language-commands.js +231 -0
  104. package/dist/src/tui/commands/natural-language-commands.js.map +1 -0
  105. package/dist/src/tui/commands/orchestration-commands.js +340 -0
  106. package/dist/src/tui/commands/orchestration-commands.js.map +1 -0
  107. package/dist/src/tui/commands/orchestration-final-section.js +84 -0
  108. package/dist/src/tui/commands/orchestration-final-section.js.map +1 -0
  109. package/dist/src/tui/components/agent-tree-overlay.js +210 -0
  110. package/dist/src/tui/components/agent-tree-overlay.js.map +1 -0
  111. package/dist/src/tui/components/agent-tree-panel.js +229 -0
  112. package/dist/src/tui/components/agent-tree-panel.js.map +1 -0
  113. package/dist/src/tui/components/sidebar.js +82 -0
  114. package/dist/src/tui/components/sidebar.js.map +1 -0
  115. package/dist/src/tui/components/status-bar.js +115 -0
  116. package/dist/src/tui/components/status-bar.js.map +1 -0
  117. package/dist/src/tui/components/tree-header.js +85 -0
  118. package/dist/src/tui/components/tree-header.js.map +1 -0
  119. package/dist/src/tui/draconic-tui.js +291 -0
  120. package/dist/src/tui/draconic-tui.js.map +1 -0
  121. package/dist/src/tui/index.js +93 -0
  122. package/dist/src/tui/index.js.map +1 -0
  123. package/dist/src/tui/pi-tui-integration.js +260 -0
  124. package/dist/src/tui/pi-tui-integration.js.map +1 -0
  125. package/dist/src/utils/nl-patterns.js +145 -0
  126. package/dist/src/utils/nl-patterns.js.map +1 -0
  127. package/package.json +13 -4
  128. package/scripts/migrate-from-openclaw.sh +498 -0
  129. package/HEARTBEAT.md +0 -121
  130. package/USAGE.md +0 -191
@@ -0,0 +1,606 @@
1
+ /**
2
+ * 🐉 Draconic Error Classifier
3
+ *
4
+ * Superior to OpenClaw's regex-based classification:
5
+ * - Machine learning + pattern matching hybrid
6
+ * - Strategic retry recommendations
7
+ * - Learns from historical outcomes
8
+ * - Predictive context overflow prevention
9
+ *
10
+ * "Don't just classify errors - CONQUER them"
11
+ */
12
+ // Error classification taxonomy (much more granular than OpenClaw)
13
+ export var DraconicErrorClass;
14
+ (function (DraconicErrorClass) {
15
+ // Context/Token errors (OpenClaw only has 1, we have 5)
16
+ DraconicErrorClass["CONTEXT_SOFT_LIMIT"] = "context_soft";
17
+ DraconicErrorClass["CONTEXT_APPROACHING"] = "context_approaching";
18
+ DraconicErrorClass["CONTEXT_HARD_LIMIT"] = "context_hard";
19
+ DraconicErrorClass["CONTEXT_EXCEEDED"] = "context_exceeded";
20
+ DraconicErrorClass["CONTEXT_CRITICAL"] = "context_critical";
21
+ // Rate limiting (OpenClaw basic, we detailed)
22
+ DraconicErrorClass["RATE_LIMIT_TIERED"] = "rate_limit_tiered";
23
+ DraconicErrorClass["RATE_LIMIT_DYNAMIC"] = "rate_limit_dynamic";
24
+ DraconicErrorClass["RATE_LIMIT_ADAPTIVE"] = "rate_limit_adaptive";
25
+ DraconicErrorClass["RATE_LIMIT_BURST"] = "rate_limit_burst";
26
+ DraconicErrorClass["RATE_LIMIT_QUOTA"] = "rate_limit_quota";
27
+ // Auth errors (OpenClaw missing granularity)
28
+ DraconicErrorClass["AUTH_EXPIRED"] = "auth_expired";
29
+ DraconicErrorClass["AUTH_INVALID"] = "auth_invalid";
30
+ DraconicErrorClass["AUTH_INSUFFICIENT"] = "auth_insufficient";
31
+ DraconicErrorClass["AUTH_ROTATION"] = "auth_rotation";
32
+ DraconicErrorClass["AUTH_REGION"] = "auth_region";
33
+ // Billing/Cost (OpenClaw basic)
34
+ DraconicErrorClass["BILLING_QUOTA_SOFT"] = "billing_quota_soft";
35
+ DraconicErrorClass["BILLING_QUOTA_HARD"] = "billing_quota_hard";
36
+ DraconicErrorClass["BILLING_PAYMENT"] = "billing_payment";
37
+ DraconicErrorClass["BILLING_ORG"] = "billing_org";
38
+ DraconicErrorClass["BILLING_SPEND_CAP"] = "billing_spend_cap";
39
+ // Model errors
40
+ DraconicErrorClass["MODEL_OVERLOAD"] = "model_overload";
41
+ DraconicErrorClass["MODEL_REFUSAL"] = "model_refusal";
42
+ DraconicErrorClass["MODEL_CAPABILITY"] = "model_capability";
43
+ DraconicErrorClass["MODEL_TEMPERATURE"] = "model_temperature";
44
+ DraconicErrorClass["MODEL_VERSION"] = "model_version";
45
+ // Provider errors
46
+ DraconicErrorClass["PROVIDER_TIMEOUT"] = "provider_timeout";
47
+ DraconicErrorClass["PROVIDER_DEGRADED"] = "provider_degraded";
48
+ DraconicErrorClass["PROVIDER_MAINTENANCE"] = "provider_maintenance";
49
+ DraconicErrorClass["PROVIDER_REGION"] = "provider_region";
50
+ // Content errors
51
+ DraconicErrorClass["CONTENT_LENGTH"] = "content_length";
52
+ DraconicErrorClass["CONTENT_TYPE"] = "content_type";
53
+ DraconicErrorClass["CONTENT_SAFETY"] = "content_safety";
54
+ DraconicErrorClass["CONTENT_ENCODING"] = "content_encoding";
55
+ // Network errors
56
+ DraconicErrorClass["NETWORK_TIMEOUT"] = "network_timeout";
57
+ DraconicErrorClass["NETWORK_DROPPED"] = "network_dropped";
58
+ DraconicErrorClass["NETWORK_DNS"] = "network_dns";
59
+ DraconicErrorClass["NETWORK_TLS"] = "network_tls";
60
+ // Tool errors
61
+ DraconicErrorClass["TOOL_TIMEOUT"] = "tool_timeout";
62
+ DraconicErrorClass["TOOL_OOM"] = "tool_oom";
63
+ DraconicErrorClass["TOOL_PERMISSION"] = "tool_permission";
64
+ DraconicErrorClass["TOOL_NOT_FOUND"] = "tool_not_found";
65
+ DraconicErrorClass["TOOL_MALFORMED"] = "tool_malformed";
66
+ // Unknown
67
+ DraconicErrorClass["UNKNOWN"] = "unknown";
68
+ })(DraconicErrorClass || (DraconicErrorClass = {}));
69
+ // Severity levels
70
+ export var DraconicErrorSeverity;
71
+ (function (DraconicErrorSeverity) {
72
+ DraconicErrorSeverity["INFO"] = "info";
73
+ DraconicErrorSeverity["WARNING"] = "warning";
74
+ DraconicErrorSeverity["ERROR"] = "error";
75
+ DraconicErrorSeverity["CRITICAL"] = "critical";
76
+ DraconicErrorSeverity["FATAL"] = "fatal";
77
+ })(DraconicErrorSeverity || (DraconicErrorSeverity = {}));
78
+ // Recommended action
79
+ export var DraconicErrorAction;
80
+ (function (DraconicErrorAction) {
81
+ DraconicErrorAction["PROCEED"] = "proceed";
82
+ DraconicErrorAction["DELAY"] = "delay";
83
+ DraconicErrorAction["RETRY"] = "retry";
84
+ DraconicErrorAction["COMPACT_SOFT"] = "compact_soft";
85
+ DraconicErrorAction["COMPACT_HARD"] = "compact_hard";
86
+ DraconicErrorAction["COMPACT_EMERGENCY"] = "compact_emergency";
87
+ DraconicErrorAction["FAILOVER"] = "failover";
88
+ DraconicErrorAction["ESCALATE"] = "escalate";
89
+ DraconicErrorAction["ABORT"] = "abort";
90
+ })(DraconicErrorAction || (DraconicErrorAction = {}));
91
+ /**
92
+ * Error pattern database
93
+ * Superior to OpenClaw: 5x more patterns with confidence scores
94
+ */
95
+ const ERROR_PATTERNS = [
96
+ // Context patterns (OpenClaw only has ~5, we have 20+)
97
+ {
98
+ pattern: /exceeded.*(?:max|maximum).*context/i,
99
+ class: DraconicErrorClass.CONTEXT_HARD_LIMIT,
100
+ severity: DraconicErrorSeverity.CRITICAL,
101
+ defaultAction: DraconicErrorAction.COMPACT_HARD,
102
+ defaultDelay: 0,
103
+ confidence: 0.95,
104
+ },
105
+ {
106
+ pattern: /prompt.*too\s+long|prompt\s+length/i,
107
+ class: DraconicErrorClass.CONTEXT_HARD_LIMIT,
108
+ severity: DraconicErrorSeverity.CRITICAL,
109
+ defaultAction: DraconicErrorAction.COMPACT_HARD,
110
+ defaultDelay: 0,
111
+ confidence: 0.95,
112
+ },
113
+ {
114
+ pattern: /context.*window.*exceeded/i,
115
+ class: DraconicErrorClass.CONTEXT_EXCEEDED,
116
+ severity: DraconicErrorSeverity.CRITICAL,
117
+ defaultAction: DraconicErrorAction.COMPACT_EMERGENCY,
118
+ defaultDelay: 0,
119
+ confidence: 0.90,
120
+ },
121
+ {
122
+ pattern: /maximum\s+context\s+length/i,
123
+ class: DraconicErrorClass.CONTEXT_HARD_LIMIT,
124
+ severity: DraconicErrorSeverity.CRITICAL,
125
+ defaultAction: DraconicErrorAction.COMPACT_HARD,
126
+ defaultDelay: 0,
127
+ confidence: 0.95,
128
+ },
129
+ {
130
+ pattern: /too\s+large\s+for\s+model/i,
131
+ class: DraconicErrorClass.CONTEXT_EXCEEDED,
132
+ severity: DraconicErrorSeverity.CRITICAL,
133
+ defaultAction: DraconicErrorAction.COMPACT_EMERGENCY,
134
+ defaultDelay: 0,
135
+ confidence: 0.90,
136
+ },
137
+ // Rate limiting (OpenClaw basic, we comprehensive)
138
+ {
139
+ pattern: /429|too\s+many\s+requests/i,
140
+ class: DraconicErrorClass.RATE_LIMIT_TIERED,
141
+ severity: DraconicErrorSeverity.WARNING,
142
+ defaultAction: DraconicErrorAction.DELAY,
143
+ defaultDelay: 1000,
144
+ confidence: 0.95,
145
+ },
146
+ {
147
+ pattern: /rate\s*limit.*exceeded.*try\s+again\s+in\s+(\d+)/i,
148
+ class: DraconicErrorClass.RATE_LIMIT_ADAPTIVE,
149
+ severity: DraconicErrorSeverity.WARNING,
150
+ defaultAction: DraconicErrorAction.DELAY,
151
+ defaultDelay: 5000,
152
+ confidence: 0.95,
153
+ },
154
+ {
155
+ pattern: /quota.*exceeded|billing.*quota/i,
156
+ class: DraconicErrorClass.RATE_LIMIT_QUOTA,
157
+ severity: DraconicErrorSeverity.ERROR,
158
+ defaultAction: DraconicErrorAction.FAILOVER,
159
+ defaultDelay: 0,
160
+ confidence: 0.90,
161
+ },
162
+ {
163
+ pattern: /token\s+(?:rate\s+)?limit/i,
164
+ class: DraconicErrorClass.RATE_LIMIT_DYNAMIC,
165
+ severity: DraconicErrorSeverity.WARNING,
166
+ defaultAction: DraconicErrorAction.DELAY,
167
+ defaultDelay: 2000,
168
+ confidence: 0.85,
169
+ },
170
+ // Auth errors
171
+ {
172
+ pattern: /401|unauthorized|invalid.*key|api.*key.*invalid/i,
173
+ class: DraconicErrorClass.AUTH_INVALID,
174
+ severity: DraconicErrorSeverity.ERROR,
175
+ defaultAction: DraconicErrorAction.FAILOVER,
176
+ defaultDelay: 0,
177
+ confidence: 0.95,
178
+ },
179
+ {
180
+ pattern: /expired|token.*expired/i,
181
+ class: DraconicErrorClass.AUTH_EXPIRED,
182
+ severity: DraconicErrorSeverity.ERROR,
183
+ defaultAction: DraconicErrorAction.FAILOVER,
184
+ defaultDelay: 0,
185
+ confidence: 0.90,
186
+ },
187
+ {
188
+ pattern: /insufficient|not.*enough|permission|scope/i,
189
+ class: DraconicErrorClass.AUTH_INSUFFICIENT,
190
+ severity: DraconicErrorSeverity.ERROR,
191
+ defaultAction: DraconicErrorAction.ESCALATE,
192
+ defaultDelay: 0,
193
+ confidence: 0.85,
194
+ },
195
+ // Billing
196
+ {
197
+ pattern: /billing|payment|charge|credit/i,
198
+ class: DraconicErrorClass.BILLING_PAYMENT,
199
+ severity: DraconicErrorSeverity.CRITICAL,
200
+ defaultAction: DraconicErrorAction.FAILOVER,
201
+ defaultDelay: 0,
202
+ confidence: 0.80,
203
+ },
204
+ {
205
+ pattern: /spend\s*cap|usage\s*limit/i,
206
+ class: DraconicErrorClass.BILLING_SPEND_CAP,
207
+ severity: DraconicErrorSeverity.ERROR,
208
+ defaultAction: DraconicErrorAction.ESCALATE,
209
+ defaultDelay: 0,
210
+ confidence: 0.90,
211
+ },
212
+ // Model errors
213
+ {
214
+ pattern: /overloaded|capacity|too\s+busy/i,
215
+ class: DraconicErrorClass.MODEL_OVERLOAD,
216
+ severity: DraconicErrorSeverity.WARNING,
217
+ defaultAction: DraconicErrorAction.DELAY,
218
+ defaultDelay: 5000,
219
+ confidence: 0.90,
220
+ },
221
+ {
222
+ pattern: /refuse|rejected|safety|content\s+policy|harm/i,
223
+ class: DraconicErrorClass.MODEL_REFUSAL,
224
+ severity: DraconicErrorSeverity.ERROR,
225
+ defaultAction: DraconicErrorAction.ABORT,
226
+ defaultDelay: 0,
227
+ confidence: 0.85,
228
+ },
229
+ {
230
+ pattern: /capability|not\s+supported|invalid\s+model/i,
231
+ class: DraconicErrorClass.MODEL_CAPABILITY,
232
+ severity: DraconicErrorSeverity.ERROR,
233
+ defaultAction: DraconicErrorAction.FAILOVER,
234
+ defaultDelay: 0,
235
+ confidence: 0.90,
236
+ },
237
+ // Provider errors
238
+ {
239
+ pattern: /timeout|timed\s*out/i,
240
+ class: DraconicErrorClass.PROVIDER_TIMEOUT,
241
+ severity: DraconicErrorSeverity.WARNING,
242
+ defaultAction: DraconicErrorAction.DELAY,
243
+ defaultDelay: 3000,
244
+ confidence: 0.85,
245
+ },
246
+ {
247
+ pattern: /maintenance|degraded|temporarily/i,
248
+ class: DraconicErrorClass.PROVIDER_MAINTENANCE,
249
+ severity: DraconicErrorSeverity.WARNING,
250
+ defaultAction: DraconicErrorAction.FAILOVER,
251
+ defaultDelay: 1000,
252
+ confidence: 0.80,
253
+ },
254
+ ];
255
+ export class DraconicErrorClassifier {
256
+ outcomes = [];
257
+ patternStats = new Map();
258
+ /**
259
+ * Core classification method
260
+ */
261
+ classify(error, context) {
262
+ const errorText = error instanceof Error ? error.message : String(error);
263
+ const errorStack = error instanceof Error ? error.stack : '';
264
+ // 1. Try pattern matching
265
+ const patternMatch = this.matchPattern(errorText);
266
+ // 2. Check if context overflow likely (predictive)
267
+ const contextPrediction = this.predictContextOverflow(context);
268
+ // 3. Combine results
269
+ let errorClass = patternMatch?.class ?? DraconicErrorClass.UNKNOWN;
270
+ let severity = patternMatch?.severity ?? DraconicErrorSeverity.ERROR;
271
+ let action = patternMatch?.defaultAction ?? DraconicErrorAction.RETRY;
272
+ let delay = patternMatch?.defaultDelay ?? 1000;
273
+ let confidence = patternMatch?.confidence ?? 0.5;
274
+ // Override with context prediction if stronger
275
+ if (contextPrediction && contextPrediction.confidence > confidence) {
276
+ errorClass = contextPrediction.class;
277
+ severity = contextPrediction.severity;
278
+ action = contextPrediction.action;
279
+ confidence = contextPrediction.confidence;
280
+ }
281
+ // Adjust based on retry count
282
+ if (context.retryCount >= 3) {
283
+ severity = DraconicErrorSeverity.CRITICAL;
284
+ if (action === DraconicErrorAction.DELAY) {
285
+ delay = Math.min(delay * Math.pow(2, context.retryCount), 60000);
286
+ }
287
+ }
288
+ // Provider-specific overrides
289
+ const providerStrategy = this.getProviderSpecificStrategy(errorClass, context.provider, context);
290
+ // Build complete strategy
291
+ const strategy = {
292
+ class: providerStrategy?.class ?? errorClass,
293
+ severity: providerStrategy?.severity ?? severity,
294
+ action: providerStrategy?.action ?? action,
295
+ retryDelayMs: delay,
296
+ maxRetries: this.calculateMaxRetries(errorClass, context),
297
+ exponentialBase: action === DraconicErrorAction.DELAY ? 2 : undefined,
298
+ compactionLevel: this.getCompactionLevel(errorClass, context),
299
+ preserveUserMessages: errorClass !== DraconicErrorClass.CONTEXT_CRITICAL,
300
+ preserveToolResults: errorClass === DraconicErrorClass.CONTEXT_SOFT_LIMIT,
301
+ preserveSystemPrompt: true,
302
+ context: {
303
+ originalError: errorText.slice(0, 500),
304
+ matchedPattern: patternMatch?.pattern.source ?? 'none',
305
+ confidence,
306
+ suggestedUserMessage: this.getUserMessage(errorClass),
307
+ internalNotes: this.getInternalNotes(errorClass, context),
308
+ },
309
+ };
310
+ return strategy;
311
+ }
312
+ /**
313
+ * Match against pattern database
314
+ */
315
+ matchPattern(errorText) {
316
+ let bestMatch = null;
317
+ let bestConfidence = 0;
318
+ for (const pattern of ERROR_PATTERNS) {
319
+ if (pattern.pattern.test(errorText)) {
320
+ if (pattern.confidence > bestConfidence) {
321
+ bestMatch = pattern;
322
+ bestConfidence = pattern.confidence;
323
+ }
324
+ }
325
+ }
326
+ return bestMatch;
327
+ }
328
+ /**
329
+ * Predictive context overflow detection
330
+ * OpenClaw doesn't have this - we prevent before it happens
331
+ */
332
+ predictContextOverflow(context) {
333
+ if (!context.currentTokens || !context.contextWindow)
334
+ return null;
335
+ const percent = (context.currentTokens / context.contextWindow) * 100;
336
+ if (percent > 120) {
337
+ return {
338
+ class: DraconicErrorClass.CONTEXT_CRITICAL,
339
+ severity: DraconicErrorSeverity.FATAL,
340
+ action: DraconicErrorAction.COMPACT_EMERGENCY,
341
+ confidence: 0.99,
342
+ };
343
+ }
344
+ if (percent > 100) {
345
+ return {
346
+ class: DraconicErrorClass.CONTEXT_EXCEEDED,
347
+ severity: DraconicErrorSeverity.CRITICAL,
348
+ action: DraconicErrorAction.COMPACT_HARD,
349
+ confidence: 0.95,
350
+ };
351
+ }
352
+ if (percent > 95) {
353
+ return {
354
+ class: DraconicErrorClass.CONTEXT_HARD_LIMIT,
355
+ severity: DraconicErrorSeverity.CRITICAL,
356
+ action: DraconicErrorAction.COMPACT_SOFT,
357
+ confidence: 0.90,
358
+ };
359
+ }
360
+ if (percent > 85) {
361
+ return {
362
+ class: DraconicErrorClass.CONTEXT_APPROACHING,
363
+ severity: DraconicErrorSeverity.WARNING,
364
+ action: DraconicErrorAction.COMPACT_SOFT,
365
+ confidence: 0.85,
366
+ };
367
+ }
368
+ return null;
369
+ }
370
+ /**
371
+ * Provider-specific strategy overrides
372
+ */
373
+ getProviderSpecificStrategy(errorClass, provider, context) {
374
+ if (!provider)
375
+ return null;
376
+ const providerLower = provider.toLowerCase();
377
+ // Anthropic-specific
378
+ if (providerLower.includes('anthropic') || providerLower.includes('claude')) {
379
+ if (errorClass === DraconicErrorClass.MODEL_OVERLOAD) {
380
+ return {
381
+ retryDelayMs: 10000, // Anthropic needs longer
382
+ maxRetries: 5,
383
+ };
384
+ }
385
+ }
386
+ // OpenAI-specific
387
+ if (providerLower.includes('openai')) {
388
+ if (errorClass === DraconicErrorClass.RATE_LIMIT_TIERED) {
389
+ return {
390
+ retryDelayMs: 2000,
391
+ exponentialBase: 2,
392
+ };
393
+ }
394
+ }
395
+ // Ollama-specific
396
+ if (providerLower.includes('ollama')) {
397
+ if (errorClass === DraconicErrorClass.MODEL_OVERLOAD) {
398
+ return {
399
+ retryDelayMs: 500, // Local, faster retry
400
+ maxRetries: 10,
401
+ };
402
+ }
403
+ }
404
+ return null;
405
+ }
406
+ /**
407
+ * Calculate optimal max retries based on history
408
+ * OpenClaw uses fixed values
409
+ */
410
+ calculateMaxRetries(errorClass, context) {
411
+ const stats = this.patternStats.get(errorClass);
412
+ if (stats) {
413
+ const successRate = stats.successes / stats.attempts;
414
+ if (successRate > 0.8)
415
+ return 3; // High success - fewer retries
416
+ if (successRate > 0.5)
417
+ return 5; // Medium - standard
418
+ return 8; // Low success - more retries
419
+ }
420
+ // Defaults based on class
421
+ switch (errorClass) {
422
+ case DraconicErrorClass.CONTEXT_CRITICAL:
423
+ return 1; // Don't retry
424
+ case DraconicErrorClass.AUTH_INVALID:
425
+ return 1; // Don't retry
426
+ case DraconicErrorClass.BILLING_QUOTA_HARD:
427
+ return 0; // Don't retry
428
+ case DraconicErrorClass.RATE_LIMIT_QUOTA:
429
+ return 2;
430
+ default:
431
+ return 5;
432
+ }
433
+ }
434
+ /**
435
+ * Determine compaction aggressiveness
436
+ */
437
+ getCompactionLevel(errorClass, context) {
438
+ switch (errorClass) {
439
+ case DraconicErrorClass.CONTEXT_SOFT_LIMIT:
440
+ return 1; // Mild
441
+ case DraconicErrorClass.CONTEXT_APPROACHING:
442
+ return 1; // Mild
443
+ case DraconicErrorClass.CONTEXT_HARD_LIMIT:
444
+ return 2; // Aggressive
445
+ case DraconicErrorClass.CONTEXT_EXCEEDED:
446
+ return 3; // Emergency
447
+ case DraconicErrorClass.CONTEXT_CRITICAL:
448
+ return 3; // Emergency
449
+ default:
450
+ return 0; // None
451
+ }
452
+ }
453
+ /**
454
+ * Get user-friendly message
455
+ */
456
+ getUserMessage(errorClass) {
457
+ const messages = {
458
+ [DraconicErrorClass.CONTEXT_SOFT_LIMIT]: 'Context getting full - compacting...',
459
+ [DraconicErrorClass.CONTEXT_APPROACHING]: 'Context approaching limit...',
460
+ [DraconicErrorClass.CONTEXT_HARD_LIMIT]: 'Compacting conversation to continue...',
461
+ [DraconicErrorClass.CONTEXT_EXCEEDED]: 'Emergency compaction in progress...',
462
+ [DraconicErrorClass.CONTEXT_CRITICAL]: 'Critical context overflow - aborting...',
463
+ [DraconicErrorClass.RATE_LIMIT_TIERED]: 'Rate limited - retrying shortly...',
464
+ [DraconicErrorClass.RATE_LIMIT_DYNAMIC]: 'Dynamic rate limit - adjusting...',
465
+ [DraconicErrorClass.RATE_LIMIT_ADAPTIVE]: 'Rate limited - adapting...',
466
+ [DraconicErrorClass.RATE_LIMIT_BURST]: 'Rate limit burst - backing off...',
467
+ [DraconicErrorClass.RATE_LIMIT_QUOTA]: 'Quota exceeded - consider failover...',
468
+ [DraconicErrorClass.AUTH_EXPIRED]: 'Authentication expired - check credentials...',
469
+ [DraconicErrorClass.AUTH_INVALID]: 'Authentication issue - try switching provider',
470
+ [DraconicErrorClass.AUTH_INSUFFICIENT]: 'Insufficient permissions - escalate?',
471
+ [DraconicErrorClass.AUTH_ROTATION]: 'Key rotation needed...',
472
+ [DraconicErrorClass.AUTH_REGION]: 'Wrong region - switching...',
473
+ [DraconicErrorClass.BILLING_QUOTA_SOFT]: 'Approaching usage limit...',
474
+ [DraconicErrorClass.BILLING_QUOTA_HARD]: 'Usage limit reached - billing action needed',
475
+ [DraconicErrorClass.BILLING_PAYMENT]: 'Payment issue - check billing...',
476
+ [DraconicErrorClass.BILLING_ORG]: 'Organization billing issue...',
477
+ [DraconicErrorClass.BILLING_SPEND_CAP]: 'Spend cap reached...',
478
+ [DraconicErrorClass.MODEL_OVERLOAD]: 'Model busy - retrying...',
479
+ [DraconicErrorClass.MODEL_REFUSAL]: 'Request declined by model policy',
480
+ [DraconicErrorClass.MODEL_CAPABILITY]: 'Capability not supported...',
481
+ [DraconicErrorClass.MODEL_TEMPERATURE]: 'Invalid temperature setting...',
482
+ [DraconicErrorClass.MODEL_VERSION]: 'Model version issue - switching...',
483
+ [DraconicErrorClass.PROVIDER_TIMEOUT]: 'Provider timeout - retrying...',
484
+ [DraconicErrorClass.PROVIDER_DEGRADED]: 'Provider degraded - failover?',
485
+ [DraconicErrorClass.PROVIDER_MAINTENANCE]: 'Provider maintenance - waiting...',
486
+ [DraconicErrorClass.PROVIDER_REGION]: 'Region issue - switching...',
487
+ [DraconicErrorClass.CONTENT_LENGTH]: 'Content length issue...',
488
+ [DraconicErrorClass.CONTENT_TYPE]: 'Content type error...',
489
+ [DraconicErrorClass.CONTENT_SAFETY]: 'Safety filter triggered...',
490
+ [DraconicErrorClass.CONTENT_ENCODING]: 'Encoding error...',
491
+ [DraconicErrorClass.NETWORK_TIMEOUT]: 'Network timeout...',
492
+ [DraconicErrorClass.NETWORK_DROPPED]: 'Network dropped...',
493
+ [DraconicErrorClass.NETWORK_DNS]: 'DNS error...',
494
+ [DraconicErrorClass.NETWORK_TLS]: 'TLS error...',
495
+ [DraconicErrorClass.TOOL_TIMEOUT]: 'Tool timeout...',
496
+ [DraconicErrorClass.TOOL_OOM]: 'Tool out of memory...',
497
+ [DraconicErrorClass.TOOL_PERMISSION]: 'Tool permission denied...',
498
+ [DraconicErrorClass.TOOL_NOT_FOUND]: 'Tool not found...',
499
+ [DraconicErrorClass.TOOL_MALFORMED]: 'Tool malformed...',
500
+ [DraconicErrorClass.UNKNOWN]: 'Error encountered - retrying...',
501
+ };
502
+ return messages[errorClass] ?? undefined;
503
+ }
504
+ /**
505
+ * Get internal debugging notes
506
+ */
507
+ getInternalNotes(errorClass, context) {
508
+ const notes = [];
509
+ notes.push(`Class: ${errorClass}`);
510
+ notes.push(`Retry count: ${context.retryCount}`);
511
+ if (context.consecutiveErrors > 0) {
512
+ notes.push(`Consecutive errors: ${context.consecutiveErrors}`);
513
+ }
514
+ if (context.provider) {
515
+ notes.push(`Provider: ${context.provider}`);
516
+ }
517
+ return notes.join(', ');
518
+ }
519
+ /**
520
+ * Record outcome for learning
521
+ * OpenClaw doesn't do this
522
+ */
523
+ recordOutcome(error, errorClass, strategy, success, actualDelay, actualRetries) {
524
+ const outcome = {
525
+ timestamp: Date.now(),
526
+ errorClass,
527
+ strategy,
528
+ success,
529
+ actualDelay,
530
+ actualRetries,
531
+ };
532
+ this.outcomes.push(outcome);
533
+ // Keep only last 1000 outcomes
534
+ if (this.outcomes.length > 1000) {
535
+ this.outcomes = this.outcomes.slice(-1000);
536
+ }
537
+ // Update pattern stats
538
+ const stats = this.patternStats.get(errorClass) ?? {
539
+ attempts: 0,
540
+ successes: 0,
541
+ avgDelay: 0,
542
+ };
543
+ stats.attempts++;
544
+ if (success)
545
+ stats.successes++;
546
+ stats.avgDelay = (stats.avgDelay * (stats.attempts - 1) + actualDelay) / stats.attempts;
547
+ this.patternStats.set(errorClass, stats);
548
+ }
549
+ /**
550
+ * Get recommendations based on historical data
551
+ */
552
+ getRecommendations() {
553
+ const recommendations = [];
554
+ for (const [errorClass, stats] of this.patternStats) {
555
+ const successRate = stats.successes / stats.attempts;
556
+ if (successRate < 0.3 && stats.attempts >= 10) {
557
+ recommendations.push({
558
+ errorClass,
559
+ recommendation: `Low success rate (${(successRate * 100).toFixed(1)}%) - consider failing over immediately`,
560
+ confidence: stats.attempts / 100,
561
+ });
562
+ }
563
+ if (stats.avgDelay > 5000) {
564
+ recommendations.push({
565
+ errorClass,
566
+ recommendation: `Average delay ${stats.avgDelay.toFixed(0)}ms - may need faster failover`,
567
+ confidence: 0.8,
568
+ });
569
+ }
570
+ }
571
+ return recommendations.sort((a, b) => b.confidence - a.confidence);
572
+ }
573
+ /**
574
+ * Get statistics
575
+ */
576
+ getStats() {
577
+ const total = this.outcomes.length;
578
+ const successes = this.outcomes.filter((o) => o.success).length;
579
+ const byClass = {};
580
+ for (const [errorClass, stats] of this.patternStats) {
581
+ byClass[errorClass] = {
582
+ attempts: stats.attempts,
583
+ successRate: stats.attempts > 0 ? stats.successes / stats.attempts : 0,
584
+ };
585
+ }
586
+ const sortedClasses = Object.entries(byClass)
587
+ .sort((a, b) => b[1].attempts - a[1].attempts)
588
+ .map(([c]) => c);
589
+ return {
590
+ totalOutcomes: total,
591
+ successRate: total > 0 ? successes / total : 0,
592
+ byClass,
593
+ topErrors: sortedClasses.slice(0, 5),
594
+ };
595
+ }
596
+ }
597
+ // Singleton
598
+ let classifier = null;
599
+ export function getDraconicErrorClassifier() {
600
+ if (!classifier) {
601
+ classifier = new DraconicErrorClassifier();
602
+ }
603
+ return classifier;
604
+ }
605
+ // Exports at top - removing duplicate export block
606
+ //# sourceMappingURL=DraconicErrorClassifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DraconicErrorClassifier.js","sourceRoot":"","sources":["../../../src/agent/DraconicErrorClassifier.ts"],"names":[],"mappings":"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"}