@dragonflymcp/plugin 1.0.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 (666) hide show
  1. package/.claude-plugin/plugin.json +26 -0
  2. package/LICENSE +21 -0
  3. package/README.md +126 -0
  4. package/dist/core/annotations.d.ts +71 -0
  5. package/dist/core/annotations.d.ts.map +1 -0
  6. package/dist/core/annotations.js +61 -0
  7. package/dist/core/annotations.js.map +1 -0
  8. package/dist/core/config.d.ts +66 -0
  9. package/dist/core/config.d.ts.map +1 -0
  10. package/dist/core/config.js +131 -0
  11. package/dist/core/config.js.map +1 -0
  12. package/dist/core/dispatcher.d.ts +77 -0
  13. package/dist/core/dispatcher.d.ts.map +1 -0
  14. package/dist/core/dispatcher.js +132 -0
  15. package/dist/core/dispatcher.js.map +1 -0
  16. package/dist/core/server.d.ts +24 -0
  17. package/dist/core/server.d.ts.map +1 -0
  18. package/dist/core/server.js +41 -0
  19. package/dist/core/server.js.map +1 -0
  20. package/dist/core/store.d.ts +91 -0
  21. package/dist/core/store.d.ts.map +1 -0
  22. package/dist/core/store.js +157 -0
  23. package/dist/core/store.js.map +1 -0
  24. package/dist/core/types.d.ts +128 -0
  25. package/dist/core/types.d.ts.map +1 -0
  26. package/dist/core/types.js +5 -0
  27. package/dist/core/types.js.map +1 -0
  28. package/dist/index.d.ts +22 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +81 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/test-utils/store-harness.d.ts +41 -0
  33. package/dist/test-utils/store-harness.d.ts.map +1 -0
  34. package/dist/test-utils/store-harness.js +61 -0
  35. package/dist/test-utils/store-harness.js.map +1 -0
  36. package/dist/tools/analytics/aggregators.d.ts +18 -0
  37. package/dist/tools/analytics/aggregators.d.ts.map +1 -0
  38. package/dist/tools/analytics/aggregators.js +260 -0
  39. package/dist/tools/analytics/aggregators.js.map +1 -0
  40. package/dist/tools/analytics/aggregators.test.d.ts +2 -0
  41. package/dist/tools/analytics/aggregators.test.d.ts.map +1 -0
  42. package/dist/tools/analytics/aggregators.test.js +177 -0
  43. package/dist/tools/analytics/aggregators.test.js.map +1 -0
  44. package/dist/tools/analytics/drift.d.ts +15 -0
  45. package/dist/tools/analytics/drift.d.ts.map +1 -0
  46. package/dist/tools/analytics/drift.js +135 -0
  47. package/dist/tools/analytics/drift.js.map +1 -0
  48. package/dist/tools/analytics/drift.test.d.ts +2 -0
  49. package/dist/tools/analytics/drift.test.d.ts.map +1 -0
  50. package/dist/tools/analytics/drift.test.js +99 -0
  51. package/dist/tools/analytics/drift.test.js.map +1 -0
  52. package/dist/tools/analytics/index.d.ts +10 -0
  53. package/dist/tools/analytics/index.d.ts.map +1 -0
  54. package/dist/tools/analytics/index.js +192 -0
  55. package/dist/tools/analytics/index.js.map +1 -0
  56. package/dist/tools/analytics/learner.d.ts +29 -0
  57. package/dist/tools/analytics/learner.d.ts.map +1 -0
  58. package/dist/tools/analytics/learner.js +135 -0
  59. package/dist/tools/analytics/learner.js.map +1 -0
  60. package/dist/tools/analytics/learner.test.d.ts +2 -0
  61. package/dist/tools/analytics/learner.test.d.ts.map +1 -0
  62. package/dist/tools/analytics/learner.test.js +118 -0
  63. package/dist/tools/analytics/learner.test.js.map +1 -0
  64. package/dist/tools/analytics/observe.d.ts +22 -0
  65. package/dist/tools/analytics/observe.d.ts.map +1 -0
  66. package/dist/tools/analytics/observe.js +143 -0
  67. package/dist/tools/analytics/observe.js.map +1 -0
  68. package/dist/tools/analytics/observe.test.d.ts +2 -0
  69. package/dist/tools/analytics/observe.test.d.ts.map +1 -0
  70. package/dist/tools/analytics/observe.test.js +95 -0
  71. package/dist/tools/analytics/observe.test.js.map +1 -0
  72. package/dist/tools/analytics/store.d.ts +29 -0
  73. package/dist/tools/analytics/store.d.ts.map +1 -0
  74. package/dist/tools/analytics/store.js +192 -0
  75. package/dist/tools/analytics/store.js.map +1 -0
  76. package/dist/tools/analytics/types.d.ts +290 -0
  77. package/dist/tools/analytics/types.d.ts.map +1 -0
  78. package/dist/tools/analytics/types.js +7 -0
  79. package/dist/tools/analytics/types.js.map +1 -0
  80. package/dist/tools/ast/index.d.ts +8 -0
  81. package/dist/tools/ast/index.d.ts.map +1 -0
  82. package/dist/tools/ast/index.js +242 -0
  83. package/dist/tools/ast/index.js.map +1 -0
  84. package/dist/tools/ast/indexer.d.ts +41 -0
  85. package/dist/tools/ast/indexer.d.ts.map +1 -0
  86. package/dist/tools/ast/indexer.js +617 -0
  87. package/dist/tools/ast/indexer.js.map +1 -0
  88. package/dist/tools/ast/store.d.ts +87 -0
  89. package/dist/tools/ast/store.d.ts.map +1 -0
  90. package/dist/tools/ast/store.js +280 -0
  91. package/dist/tools/ast/store.js.map +1 -0
  92. package/dist/tools/ast/store.test.d.ts +6 -0
  93. package/dist/tools/ast/store.test.d.ts.map +1 -0
  94. package/dist/tools/ast/store.test.js +257 -0
  95. package/dist/tools/ast/store.test.js.map +1 -0
  96. package/dist/tools/bridge/bridge.d.ts +37 -0
  97. package/dist/tools/bridge/bridge.d.ts.map +1 -0
  98. package/dist/tools/bridge/bridge.js +82 -0
  99. package/dist/tools/bridge/bridge.js.map +1 -0
  100. package/dist/tools/bridge/bridge.test.d.ts +2 -0
  101. package/dist/tools/bridge/bridge.test.d.ts.map +1 -0
  102. package/dist/tools/bridge/bridge.test.js +119 -0
  103. package/dist/tools/bridge/bridge.test.js.map +1 -0
  104. package/dist/tools/bridge/index.d.ts +8 -0
  105. package/dist/tools/bridge/index.d.ts.map +1 -0
  106. package/dist/tools/bridge/index.js +153 -0
  107. package/dist/tools/bridge/index.js.map +1 -0
  108. package/dist/tools/bridge/store.d.ts +45 -0
  109. package/dist/tools/bridge/store.d.ts.map +1 -0
  110. package/dist/tools/bridge/store.js +307 -0
  111. package/dist/tools/bridge/store.js.map +1 -0
  112. package/dist/tools/bridge/store.test.d.ts +2 -0
  113. package/dist/tools/bridge/store.test.d.ts.map +1 -0
  114. package/dist/tools/bridge/store.test.js +180 -0
  115. package/dist/tools/bridge/store.test.js.map +1 -0
  116. package/dist/tools/bridge/types.d.ts +44 -0
  117. package/dist/tools/bridge/types.d.ts.map +1 -0
  118. package/dist/tools/bridge/types.js +6 -0
  119. package/dist/tools/bridge/types.js.map +1 -0
  120. package/dist/tools/evolve/algorithm.d.ts +33 -0
  121. package/dist/tools/evolve/algorithm.d.ts.map +1 -0
  122. package/dist/tools/evolve/algorithm.js +64 -0
  123. package/dist/tools/evolve/algorithm.js.map +1 -0
  124. package/dist/tools/evolve/algorithm.test.d.ts +6 -0
  125. package/dist/tools/evolve/algorithm.test.d.ts.map +1 -0
  126. package/dist/tools/evolve/algorithm.test.js +138 -0
  127. package/dist/tools/evolve/algorithm.test.js.map +1 -0
  128. package/dist/tools/evolve/index.d.ts +11 -0
  129. package/dist/tools/evolve/index.d.ts.map +1 -0
  130. package/dist/tools/evolve/index.js +300 -0
  131. package/dist/tools/evolve/index.js.map +1 -0
  132. package/dist/tools/evolve/store.d.ts +27 -0
  133. package/dist/tools/evolve/store.d.ts.map +1 -0
  134. package/dist/tools/evolve/store.js +147 -0
  135. package/dist/tools/evolve/store.js.map +1 -0
  136. package/dist/tools/evolve/store.test.d.ts +6 -0
  137. package/dist/tools/evolve/store.test.d.ts.map +1 -0
  138. package/dist/tools/evolve/store.test.js +162 -0
  139. package/dist/tools/evolve/store.test.js.map +1 -0
  140. package/dist/tools/evolve/types.d.ts +38 -0
  141. package/dist/tools/evolve/types.d.ts.map +1 -0
  142. package/dist/tools/evolve/types.js +6 -0
  143. package/dist/tools/evolve/types.js.map +1 -0
  144. package/dist/tools/framework/content-loader.d.ts +45 -0
  145. package/dist/tools/framework/content-loader.d.ts.map +1 -0
  146. package/dist/tools/framework/content-loader.js +258 -0
  147. package/dist/tools/framework/content-loader.js.map +1 -0
  148. package/dist/tools/framework/content-loader.test.d.ts +5 -0
  149. package/dist/tools/framework/content-loader.test.d.ts.map +1 -0
  150. package/dist/tools/framework/content-loader.test.js +262 -0
  151. package/dist/tools/framework/content-loader.test.js.map +1 -0
  152. package/dist/tools/framework/index.d.ts +30 -0
  153. package/dist/tools/framework/index.d.ts.map +1 -0
  154. package/dist/tools/framework/index.js +517 -0
  155. package/dist/tools/framework/index.js.map +1 -0
  156. package/dist/tools/framework/session.d.ts +85 -0
  157. package/dist/tools/framework/session.d.ts.map +1 -0
  158. package/dist/tools/framework/session.js +311 -0
  159. package/dist/tools/framework/session.js.map +1 -0
  160. package/dist/tools/framework/session.test.d.ts +5 -0
  161. package/dist/tools/framework/session.test.d.ts.map +1 -0
  162. package/dist/tools/framework/session.test.js +291 -0
  163. package/dist/tools/framework/session.test.js.map +1 -0
  164. package/dist/tools/framework/sync-evaluator.d.ts +41 -0
  165. package/dist/tools/framework/sync-evaluator.d.ts.map +1 -0
  166. package/dist/tools/framework/sync-evaluator.js +298 -0
  167. package/dist/tools/framework/sync-evaluator.js.map +1 -0
  168. package/dist/tools/framework/sync-evaluator.test.d.ts +5 -0
  169. package/dist/tools/framework/sync-evaluator.test.d.ts.map +1 -0
  170. package/dist/tools/framework/sync-evaluator.test.js +288 -0
  171. package/dist/tools/framework/sync-evaluator.test.js.map +1 -0
  172. package/dist/tools/framework/types.d.ts +279 -0
  173. package/dist/tools/framework/types.d.ts.map +1 -0
  174. package/dist/tools/framework/types.js +6 -0
  175. package/dist/tools/framework/types.js.map +1 -0
  176. package/dist/tools/framework/workflow-intelligence.d.ts +55 -0
  177. package/dist/tools/framework/workflow-intelligence.d.ts.map +1 -0
  178. package/dist/tools/framework/workflow-intelligence.js +199 -0
  179. package/dist/tools/framework/workflow-intelligence.js.map +1 -0
  180. package/dist/tools/framework/workflow-intelligence.test.d.ts +6 -0
  181. package/dist/tools/framework/workflow-intelligence.test.d.ts.map +1 -0
  182. package/dist/tools/framework/workflow-intelligence.test.js +257 -0
  183. package/dist/tools/framework/workflow-intelligence.test.js.map +1 -0
  184. package/dist/tools/framework/workflow-planner.d.ts +10 -0
  185. package/dist/tools/framework/workflow-planner.d.ts.map +1 -0
  186. package/dist/tools/framework/workflow-planner.js +214 -0
  187. package/dist/tools/framework/workflow-planner.js.map +1 -0
  188. package/dist/tools/framework/workflow-planner.test.d.ts +5 -0
  189. package/dist/tools/framework/workflow-planner.test.d.ts.map +1 -0
  190. package/dist/tools/framework/workflow-planner.test.js +137 -0
  191. package/dist/tools/framework/workflow-planner.test.js.map +1 -0
  192. package/dist/tools/knowledge/bridge.d.ts +34 -0
  193. package/dist/tools/knowledge/bridge.d.ts.map +1 -0
  194. package/dist/tools/knowledge/bridge.js +249 -0
  195. package/dist/tools/knowledge/bridge.js.map +1 -0
  196. package/dist/tools/knowledge/bridge.test.d.ts +5 -0
  197. package/dist/tools/knowledge/bridge.test.d.ts.map +1 -0
  198. package/dist/tools/knowledge/bridge.test.js +221 -0
  199. package/dist/tools/knowledge/bridge.test.js.map +1 -0
  200. package/dist/tools/knowledge/extractor.d.ts +22 -0
  201. package/dist/tools/knowledge/extractor.d.ts.map +1 -0
  202. package/dist/tools/knowledge/extractor.js +154 -0
  203. package/dist/tools/knowledge/extractor.js.map +1 -0
  204. package/dist/tools/knowledge/index.d.ts +12 -0
  205. package/dist/tools/knowledge/index.d.ts.map +1 -0
  206. package/dist/tools/knowledge/index.js +505 -0
  207. package/dist/tools/knowledge/index.js.map +1 -0
  208. package/dist/tools/knowledge/retrieval.d.ts +28 -0
  209. package/dist/tools/knowledge/retrieval.d.ts.map +1 -0
  210. package/dist/tools/knowledge/retrieval.js +164 -0
  211. package/dist/tools/knowledge/retrieval.js.map +1 -0
  212. package/dist/tools/knowledge/store.d.ts +96 -0
  213. package/dist/tools/knowledge/store.d.ts.map +1 -0
  214. package/dist/tools/knowledge/store.js +562 -0
  215. package/dist/tools/knowledge/store.js.map +1 -0
  216. package/dist/tools/knowledge/store.test.d.ts +6 -0
  217. package/dist/tools/knowledge/store.test.d.ts.map +1 -0
  218. package/dist/tools/knowledge/store.test.js +385 -0
  219. package/dist/tools/knowledge/store.test.js.map +1 -0
  220. package/dist/tools/knowledge/types.d.ts +168 -0
  221. package/dist/tools/knowledge/types.d.ts.map +1 -0
  222. package/dist/tools/knowledge/types.js +6 -0
  223. package/dist/tools/knowledge/types.js.map +1 -0
  224. package/dist/tools/memory/evolution.d.ts +31 -0
  225. package/dist/tools/memory/evolution.d.ts.map +1 -0
  226. package/dist/tools/memory/evolution.js +130 -0
  227. package/dist/tools/memory/evolution.js.map +1 -0
  228. package/dist/tools/memory/index.d.ts +11 -0
  229. package/dist/tools/memory/index.d.ts.map +1 -0
  230. package/dist/tools/memory/index.js +239 -0
  231. package/dist/tools/memory/index.js.map +1 -0
  232. package/dist/tools/memory/store.d.ts +75 -0
  233. package/dist/tools/memory/store.d.ts.map +1 -0
  234. package/dist/tools/memory/store.js +398 -0
  235. package/dist/tools/memory/store.js.map +1 -0
  236. package/dist/tools/memory/store.test.d.ts +6 -0
  237. package/dist/tools/memory/store.test.d.ts.map +1 -0
  238. package/dist/tools/memory/store.test.js +429 -0
  239. package/dist/tools/memory/store.test.js.map +1 -0
  240. package/dist/tools/memory/types.d.ts +171 -0
  241. package/dist/tools/memory/types.d.ts.map +1 -0
  242. package/dist/tools/memory/types.js +6 -0
  243. package/dist/tools/memory/types.js.map +1 -0
  244. package/dist/tools/pipeline/composer.d.ts +29 -0
  245. package/dist/tools/pipeline/composer.d.ts.map +1 -0
  246. package/dist/tools/pipeline/composer.js +225 -0
  247. package/dist/tools/pipeline/composer.js.map +1 -0
  248. package/dist/tools/pipeline/composer.test.d.ts +2 -0
  249. package/dist/tools/pipeline/composer.test.d.ts.map +1 -0
  250. package/dist/tools/pipeline/composer.test.js +162 -0
  251. package/dist/tools/pipeline/composer.test.js.map +1 -0
  252. package/dist/tools/pipeline/index.d.ts +8 -0
  253. package/dist/tools/pipeline/index.d.ts.map +1 -0
  254. package/dist/tools/pipeline/index.js +102 -0
  255. package/dist/tools/pipeline/index.js.map +1 -0
  256. package/dist/tools/pipeline/planner.d.ts +10 -0
  257. package/dist/tools/pipeline/planner.d.ts.map +1 -0
  258. package/dist/tools/pipeline/planner.js +147 -0
  259. package/dist/tools/pipeline/planner.js.map +1 -0
  260. package/dist/tools/pipeline/planner.test.d.ts +2 -0
  261. package/dist/tools/pipeline/planner.test.d.ts.map +1 -0
  262. package/dist/tools/pipeline/planner.test.js +96 -0
  263. package/dist/tools/pipeline/planner.test.js.map +1 -0
  264. package/dist/tools/pipeline/preconditions.d.ts +14 -0
  265. package/dist/tools/pipeline/preconditions.d.ts.map +1 -0
  266. package/dist/tools/pipeline/preconditions.js +65 -0
  267. package/dist/tools/pipeline/preconditions.js.map +1 -0
  268. package/dist/tools/pipeline/preconditions.test.d.ts +2 -0
  269. package/dist/tools/pipeline/preconditions.test.d.ts.map +1 -0
  270. package/dist/tools/pipeline/preconditions.test.js +74 -0
  271. package/dist/tools/pipeline/preconditions.test.js.map +1 -0
  272. package/dist/tools/pipeline/types.d.ts +105 -0
  273. package/dist/tools/pipeline/types.d.ts.map +1 -0
  274. package/dist/tools/pipeline/types.js +6 -0
  275. package/dist/tools/pipeline/types.js.map +1 -0
  276. package/dist/tools/repair/index.d.ts +8 -0
  277. package/dist/tools/repair/index.d.ts.map +1 -0
  278. package/dist/tools/repair/index.js +384 -0
  279. package/dist/tools/repair/index.js.map +1 -0
  280. package/dist/tools/repair/repairer.d.ts +67 -0
  281. package/dist/tools/repair/repairer.d.ts.map +1 -0
  282. package/dist/tools/repair/repairer.js +257 -0
  283. package/dist/tools/repair/repairer.js.map +1 -0
  284. package/dist/tools/repair/repairer.test.d.ts +6 -0
  285. package/dist/tools/repair/repairer.test.d.ts.map +1 -0
  286. package/dist/tools/repair/repairer.test.js +159 -0
  287. package/dist/tools/repair/repairer.test.js.map +1 -0
  288. package/dist/tools/semantic/chunker.d.ts +23 -0
  289. package/dist/tools/semantic/chunker.d.ts.map +1 -0
  290. package/dist/tools/semantic/chunker.js +244 -0
  291. package/dist/tools/semantic/chunker.js.map +1 -0
  292. package/dist/tools/semantic/embedder.d.ts +16 -0
  293. package/dist/tools/semantic/embedder.d.ts.map +1 -0
  294. package/dist/tools/semantic/embedder.js +88 -0
  295. package/dist/tools/semantic/embedder.js.map +1 -0
  296. package/dist/tools/semantic/index.d.ts +8 -0
  297. package/dist/tools/semantic/index.d.ts.map +1 -0
  298. package/dist/tools/semantic/index.js +144 -0
  299. package/dist/tools/semantic/index.js.map +1 -0
  300. package/dist/tools/semantic/store.d.ts +31 -0
  301. package/dist/tools/semantic/store.d.ts.map +1 -0
  302. package/dist/tools/semantic/store.js +168 -0
  303. package/dist/tools/semantic/store.js.map +1 -0
  304. package/dist/tools/semantic/store.test.d.ts +6 -0
  305. package/dist/tools/semantic/store.test.d.ts.map +1 -0
  306. package/dist/tools/semantic/store.test.js +240 -0
  307. package/dist/tools/semantic/store.test.js.map +1 -0
  308. package/dist/tools/spec/generator.d.ts +32 -0
  309. package/dist/tools/spec/generator.d.ts.map +1 -0
  310. package/dist/tools/spec/generator.js +278 -0
  311. package/dist/tools/spec/generator.js.map +1 -0
  312. package/dist/tools/spec/generator.test.d.ts +6 -0
  313. package/dist/tools/spec/generator.test.d.ts.map +1 -0
  314. package/dist/tools/spec/generator.test.js +208 -0
  315. package/dist/tools/spec/generator.test.js.map +1 -0
  316. package/dist/tools/spec/index.d.ts +11 -0
  317. package/dist/tools/spec/index.d.ts.map +1 -0
  318. package/dist/tools/spec/index.js +426 -0
  319. package/dist/tools/spec/index.js.map +1 -0
  320. package/dist/tools/spec/store.d.ts +24 -0
  321. package/dist/tools/spec/store.d.ts.map +1 -0
  322. package/dist/tools/spec/store.js +104 -0
  323. package/dist/tools/spec/store.js.map +1 -0
  324. package/dist/tools/spec/store.test.d.ts +6 -0
  325. package/dist/tools/spec/store.test.d.ts.map +1 -0
  326. package/dist/tools/spec/store.test.js +173 -0
  327. package/dist/tools/spec/store.test.js.map +1 -0
  328. package/dist/tools/spec/types.d.ts +61 -0
  329. package/dist/tools/spec/types.d.ts.map +1 -0
  330. package/dist/tools/spec/types.js +6 -0
  331. package/dist/tools/spec/types.js.map +1 -0
  332. package/dist/tools/state/index.d.ts +11 -0
  333. package/dist/tools/state/index.d.ts.map +1 -0
  334. package/dist/tools/state/index.js +386 -0
  335. package/dist/tools/state/index.js.map +1 -0
  336. package/dist/tools/state/migrate.d.ts +39 -0
  337. package/dist/tools/state/migrate.d.ts.map +1 -0
  338. package/dist/tools/state/migrate.js +242 -0
  339. package/dist/tools/state/migrate.js.map +1 -0
  340. package/dist/tools/state/migrate.test.d.ts +2 -0
  341. package/dist/tools/state/migrate.test.d.ts.map +1 -0
  342. package/dist/tools/state/migrate.test.js +265 -0
  343. package/dist/tools/state/migrate.test.js.map +1 -0
  344. package/dist/tools/state/store.d.ts +107 -0
  345. package/dist/tools/state/store.d.ts.map +1 -0
  346. package/dist/tools/state/store.js +365 -0
  347. package/dist/tools/state/store.js.map +1 -0
  348. package/dist/tools/state/store.test.d.ts +5 -0
  349. package/dist/tools/state/store.test.d.ts.map +1 -0
  350. package/dist/tools/state/store.test.js +293 -0
  351. package/dist/tools/state/store.test.js.map +1 -0
  352. package/dist/tools/state/types.d.ts +90 -0
  353. package/dist/tools/state/types.d.ts.map +1 -0
  354. package/dist/tools/state/types.js +6 -0
  355. package/dist/tools/state/types.js.map +1 -0
  356. package/dist/tools/testing/analyzer.d.ts +44 -0
  357. package/dist/tools/testing/analyzer.d.ts.map +1 -0
  358. package/dist/tools/testing/analyzer.js +280 -0
  359. package/dist/tools/testing/analyzer.js.map +1 -0
  360. package/dist/tools/testing/generator.d.ts +57 -0
  361. package/dist/tools/testing/generator.d.ts.map +1 -0
  362. package/dist/tools/testing/generator.js +478 -0
  363. package/dist/tools/testing/generator.js.map +1 -0
  364. package/dist/tools/testing/generator.test.d.ts +6 -0
  365. package/dist/tools/testing/generator.test.d.ts.map +1 -0
  366. package/dist/tools/testing/generator.test.js +285 -0
  367. package/dist/tools/testing/generator.test.js.map +1 -0
  368. package/dist/tools/testing/index.d.ts +8 -0
  369. package/dist/tools/testing/index.d.ts.map +1 -0
  370. package/dist/tools/testing/index.js +373 -0
  371. package/dist/tools/testing/index.js.map +1 -0
  372. package/dist/utils/embedder.d.ts +7 -0
  373. package/dist/utils/embedder.d.ts.map +1 -0
  374. package/dist/utils/embedder.js +13 -0
  375. package/dist/utils/embedder.js.map +1 -0
  376. package/dist/utils/execution.d.ts +68 -0
  377. package/dist/utils/execution.d.ts.map +1 -0
  378. package/dist/utils/execution.js +467 -0
  379. package/dist/utils/execution.js.map +1 -0
  380. package/dist/utils/graph.d.ts +26 -0
  381. package/dist/utils/graph.d.ts.map +1 -0
  382. package/dist/utils/graph.js +32 -0
  383. package/dist/utils/graph.js.map +1 -0
  384. package/dist/utils/guards.d.ts +32 -0
  385. package/dist/utils/guards.d.ts.map +1 -0
  386. package/dist/utils/guards.js +40 -0
  387. package/dist/utils/guards.js.map +1 -0
  388. package/dist/utils/ids.d.ts +5 -0
  389. package/dist/utils/ids.d.ts.map +1 -0
  390. package/dist/utils/ids.js +7 -0
  391. package/dist/utils/ids.js.map +1 -0
  392. package/dist/utils/languages.d.ts +34 -0
  393. package/dist/utils/languages.d.ts.map +1 -0
  394. package/dist/utils/languages.js +153 -0
  395. package/dist/utils/languages.js.map +1 -0
  396. package/dist/utils/lazy.d.ts +17 -0
  397. package/dist/utils/lazy.d.ts.map +1 -0
  398. package/dist/utils/lazy.js +35 -0
  399. package/dist/utils/lazy.js.map +1 -0
  400. package/dist/utils/project.d.ts +41 -0
  401. package/dist/utils/project.d.ts.map +1 -0
  402. package/dist/utils/project.js +82 -0
  403. package/dist/utils/project.js.map +1 -0
  404. package/dist/utils/responses.d.ts +27 -0
  405. package/dist/utils/responses.d.ts.map +1 -0
  406. package/dist/utils/responses.js +72 -0
  407. package/dist/utils/responses.js.map +1 -0
  408. package/dist/utils/vectors.d.ts +33 -0
  409. package/dist/utils/vectors.d.ts.map +1 -0
  410. package/dist/utils/vectors.js +80 -0
  411. package/dist/utils/vectors.js.map +1 -0
  412. package/dist/utils/vectors.test.d.ts +6 -0
  413. package/dist/utils/vectors.test.d.ts.map +1 -0
  414. package/dist/utils/vectors.test.js +96 -0
  415. package/dist/utils/vectors.test.js.map +1 -0
  416. package/package.json +69 -0
  417. package/scripts/init.js +142 -0
  418. package/templates/CLAUDE.md.template +96 -0
  419. package/templates/agents/architecture-concept.md +237 -0
  420. package/templates/agents/checkpoint-concept.md +218 -0
  421. package/templates/agents/code-analysis-concept.md +171 -0
  422. package/templates/agents/compete-control.md +44 -0
  423. package/templates/agents/compete-evaluator.md +87 -0
  424. package/templates/agents/compete-treatment.md +55 -0
  425. package/templates/agents/context-concept.md +254 -0
  426. package/templates/agents/debate-advocate.md +127 -0
  427. package/templates/agents/debate-critic.md +119 -0
  428. package/templates/agents/debate-synthesis.md +160 -0
  429. package/templates/agents/documentation-concept.md +294 -0
  430. package/templates/agents/implementation-concept.md +165 -0
  431. package/templates/agents/quality-concept.md +299 -0
  432. package/templates/agents/research-concept.md +169 -0
  433. package/templates/agents/security-concept.md +255 -0
  434. package/templates/agents/story-concept.md +207 -0
  435. package/templates/agents/verification-concept.md +456 -0
  436. package/templates/agents/version-concept.md +163 -0
  437. package/templates/anchors/directory.anchor.yaml.template +53 -0
  438. package/templates/anchors/rules.anchor.yaml.template +70 -0
  439. package/templates/anchors/safety.anchor.yaml.template +96 -0
  440. package/templates/claude-md-managed.template +105 -0
  441. package/templates/commands/cache.md.template +439 -0
  442. package/templates/commands/checkpoint.md.template +121 -0
  443. package/templates/commands/classify.md.template +138 -0
  444. package/templates/commands/compete.md.template +90 -0
  445. package/templates/commands/costs.md.template +111 -0
  446. package/templates/commands/estimate.md.template +196 -0
  447. package/templates/commands/explore.md.template +186 -0
  448. package/templates/commands/feature.md.template +216 -0
  449. package/templates/commands/forget.md.template +104 -0
  450. package/templates/commands/global-recall.md.template +250 -0
  451. package/templates/commands/global-remember.md.template +187 -0
  452. package/templates/commands/health.md.template +107 -0
  453. package/templates/commands/help.md.template +253 -0
  454. package/templates/commands/observe.md.template +211 -0
  455. package/templates/commands/pr-review.md.template +164 -0
  456. package/templates/commands/predict-cost.md.template +251 -0
  457. package/templates/commands/profile.md.template +142 -0
  458. package/templates/commands/reasoning.md.template +228 -0
  459. package/templates/commands/recall.md.template +197 -0
  460. package/templates/commands/remember.md.template +148 -0
  461. package/templates/commands/replay.md.template +449 -0
  462. package/templates/commands/restore.md.template +87 -0
  463. package/templates/commands/retrospective.md.template +47 -0
  464. package/templates/commands/slo.md.template +286 -0
  465. package/templates/commands/spec.md.template +164 -0
  466. package/templates/commands/status.md.template +53 -0
  467. package/templates/commands/sync.md.template +321 -0
  468. package/templates/commands/task.md.template +86 -0
  469. package/templates/commands/trace.md.template +86 -0
  470. package/templates/commands/visualize.md.template +216 -0
  471. package/templates/commands/workflow.md.template +375 -0
  472. package/templates/concepts/README.md +329 -0
  473. package/templates/concepts/architecture.md.template +74 -0
  474. package/templates/concepts/code-analysis.md.template +186 -0
  475. package/templates/concepts/context-compactor.md.template +393 -0
  476. package/templates/concepts/context.md.template +62 -0
  477. package/templates/concepts/documentation.md.template +452 -0
  478. package/templates/concepts/estimator.md.template +214 -0
  479. package/templates/concepts/exploration.md.template +257 -0
  480. package/templates/concepts/global-memory.md.template +222 -0
  481. package/templates/concepts/implementation.md.template +62 -0
  482. package/templates/concepts/pr-review.md.template +277 -0
  483. package/templates/concepts/project-profile.md.template +358 -0
  484. package/templates/concepts/quality.md.template +63 -0
  485. package/templates/concepts/react-fallback.md.template +286 -0
  486. package/templates/concepts/research.md.template +221 -0
  487. package/templates/concepts/retrospective.md.template +93 -0
  488. package/templates/concepts/security.md.template +442 -0
  489. package/templates/concepts/slo.md.template +274 -0
  490. package/templates/concepts/spec.md.template +71 -0
  491. package/templates/concepts/story.md.template +50 -0
  492. package/templates/concepts/tool-router.md.template +289 -0
  493. package/templates/concepts/verification-synthesizer.md.template +279 -0
  494. package/templates/concepts/version.md.template +61 -0
  495. package/templates/config.yaml.template +347 -0
  496. package/templates/examples/README.md +77 -0
  497. package/templates/examples/architecture/api-design.yaml.template +286 -0
  498. package/templates/examples/architecture/oauth-authentication.yaml.template +305 -0
  499. package/templates/health/status.yaml.template +120 -0
  500. package/templates/hooks/concept-complete.sh.template +45 -0
  501. package/templates/hooks/lib/common.sh.template +160 -0
  502. package/templates/hooks/post-commit.sh.template +37 -0
  503. package/templates/hooks/post-concept-action.template +39 -0
  504. package/templates/hooks/post-tool-structure-check.sh.template +138 -0
  505. package/templates/hooks/post-tool-use.sh.template +51 -0
  506. package/templates/hooks/pre-compact.sh.template +48 -0
  507. package/templates/hooks/pre-tool-grounding.template +148 -0
  508. package/templates/hooks/session-exit-checkpoint.sh.template +35 -0
  509. package/templates/hooks/session-start.sh.template +67 -0
  510. package/templates/hooks/statusline.sh.template +148 -0
  511. package/templates/hooks/stop.sh.template +45 -0
  512. package/templates/hooks/subagent-stop.sh.template +40 -0
  513. package/templates/hooks/sync-blocked.sh.template +45 -0
  514. package/templates/hooks/timeout.sh.template +48 -0
  515. package/templates/hooks/user-prompt-submit.sh.template +68 -0
  516. package/templates/koan/README.md +58 -0
  517. package/templates/memory/index.yaml.template +48 -0
  518. package/templates/memory/procedural/debugging.yaml.template +24 -0
  519. package/templates/memory/procedural/workflows.yaml.template +22 -0
  520. package/templates/memory/semantic/architecture.yaml.template +21 -0
  521. package/templates/memory/semantic/conventions.yaml.template +18 -0
  522. package/templates/memory/semantic/patterns.yaml.template +21 -0
  523. package/templates/memory/semantic/preferences.yaml.template +18 -0
  524. package/templates/prompts/architecture.yaml.template +349 -0
  525. package/templates/prompts/context.yaml.template +384 -0
  526. package/templates/prompts/implementation.yaml.template +365 -0
  527. package/templates/prompts/planning.yaml.template +303 -0
  528. package/templates/prompts/quality.yaml.template +345 -0
  529. package/templates/prompts/retrospective.yaml.template +231 -0
  530. package/templates/prompts/slo.yaml.template +360 -0
  531. package/templates/prompts/story.yaml.template +236 -0
  532. package/templates/prompts/tree-of-thoughts.yaml.template +299 -0
  533. package/templates/prompts/verification.yaml.template +286 -0
  534. package/templates/prompts/version.yaml.template +279 -0
  535. package/templates/schemas/agent-schema.json +98 -0
  536. package/templates/schemas/architecture.schema.json +69 -0
  537. package/templates/schemas/config-schema.json +165 -0
  538. package/templates/schemas/implementation.schema.json +75 -0
  539. package/templates/schemas/planning.schema.json +243 -0
  540. package/templates/schemas/provenance.schema.json +111 -0
  541. package/templates/schemas/retrospective.schema.json +174 -0
  542. package/templates/schemas/review.schema.json +284 -0
  543. package/templates/schemas/slo.schema.json +443 -0
  544. package/templates/schemas/story.schema.json +68 -0
  545. package/templates/schemas/sync-schema.json +196 -0
  546. package/templates/schemas/task.schema.json +127 -0
  547. package/templates/schemas/tree-of-thoughts.schema.json +175 -0
  548. package/templates/schemas/verification.schema.json +106 -0
  549. package/templates/settings.full.json.template +135 -0
  550. package/templates/settings.minimal.json.template +68 -0
  551. package/templates/settings.standard.json.template +135 -0
  552. package/templates/skills/acceptance-criteria-generation.md.template +330 -0
  553. package/templates/skills/accessibility-checking.md.template +341 -0
  554. package/templates/skills/api-design-patterns.md.template +395 -0
  555. package/templates/skills/batch-processing.md.template +605 -0
  556. package/templates/skills/branch-strategy.md.template +362 -0
  557. package/templates/skills/changelog-generation.md.template +403 -0
  558. package/templates/skills/code-coverage-analysis.md.template +362 -0
  559. package/templates/skills/code-style-enforcement.md.template +294 -0
  560. package/templates/skills/code-template-patterns.md.template +419 -0
  561. package/templates/skills/concept-development.md.template +159 -0
  562. package/templates/skills/context-prioritization.md.template +306 -0
  563. package/templates/skills/cost-optimization.md.template +482 -0
  564. package/templates/skills/cross-project-knowledge.md.template +316 -0
  565. package/templates/skills/dependency-impact-analysis.md.template +263 -0
  566. package/templates/skills/documentation-generation.md.template +409 -0
  567. package/templates/skills/effort-estimation.md.template +350 -0
  568. package/templates/skills/error-classification.md.template +709 -0
  569. package/templates/skills/error-messages.md.template +339 -0
  570. package/templates/skills/ide-diagnostics.md.template +480 -0
  571. package/templates/skills/incremental-loading.md.template +574 -0
  572. package/templates/skills/output-caching.md.template +524 -0
  573. package/templates/skills/performance-estimation.md.template +325 -0
  574. package/templates/skills/performance-testing-patterns.md.template +341 -0
  575. package/templates/skills/phase2-optimizations-summary.md.template +458 -0
  576. package/templates/skills/progressive-disclosure-pattern.md.template +190 -0
  577. package/templates/skills/project-structure.md.template +372 -0
  578. package/templates/skills/provenance-analysis.md.template +609 -0
  579. package/templates/skills/react-executor.md.template +366 -0
  580. package/templates/skills/refactoring-patterns.md.template +422 -0
  581. package/templates/skills/release-management.md.template +373 -0
  582. package/templates/skills/requirement-prioritization.md.template +357 -0
  583. package/templates/skills/schema-validation.md.template +321 -0
  584. package/templates/skills/security-design-patterns.md.template +692 -0
  585. package/templates/skills/security-vulnerability-scanning.md.template +663 -0
  586. package/templates/skills/semantic-memory.md.template +266 -0
  587. package/templates/skills/semantic-versioning.md.template +371 -0
  588. package/templates/skills/smart-retry.md.template +676 -0
  589. package/templates/skills/smart-summarization.md.template +358 -0
  590. package/templates/skills/story-decomposition.md.template +278 -0
  591. package/templates/skills/synchronization-patterns.md.template +303 -0
  592. package/templates/skills/test-generation-strategy.md.template +247 -0
  593. package/templates/skills/workflow-replay.md.template +478 -0
  594. package/templates/skills/wysiwid-principles.md.template +364 -0
  595. package/templates/skills-manifest.yaml.template +526 -0
  596. package/templates/stubs/agents/architecture-concept.md +20 -0
  597. package/templates/stubs/agents/checkpoint-concept.md +19 -0
  598. package/templates/stubs/agents/code-analysis-concept.md +36 -0
  599. package/templates/stubs/agents/context-concept.md +37 -0
  600. package/templates/stubs/agents/debate-advocate.md +12 -0
  601. package/templates/stubs/agents/debate-critic.md +12 -0
  602. package/templates/stubs/agents/debate-synthesis.md +12 -0
  603. package/templates/stubs/agents/documentation-concept.md +39 -0
  604. package/templates/stubs/agents/implementation-concept.md +41 -0
  605. package/templates/stubs/agents/quality-concept.md +41 -0
  606. package/templates/stubs/agents/research-concept.md +35 -0
  607. package/templates/stubs/agents/security-concept.md +40 -0
  608. package/templates/stubs/agents/spec-concept.md +35 -0
  609. package/templates/stubs/agents/story-concept.md +36 -0
  610. package/templates/stubs/agents/verification-concept.md +39 -0
  611. package/templates/stubs/agents/version-concept.md +37 -0
  612. package/templates/stubs/commands/cache.md.template +2 -0
  613. package/templates/stubs/commands/checkpoint.md.template +2 -0
  614. package/templates/stubs/commands/classify.md.template +2 -0
  615. package/templates/stubs/commands/compete.md.template +2 -0
  616. package/templates/stubs/commands/costs.md.template +2 -0
  617. package/templates/stubs/commands/estimate.md.template +2 -0
  618. package/templates/stubs/commands/explore.md.template +2 -0
  619. package/templates/stubs/commands/feature.md.template +2 -0
  620. package/templates/stubs/commands/forget.md.template +2 -0
  621. package/templates/stubs/commands/global-recall.md.template +2 -0
  622. package/templates/stubs/commands/global-remember.md.template +2 -0
  623. package/templates/stubs/commands/health.md.template +2 -0
  624. package/templates/stubs/commands/help.md.template +2 -0
  625. package/templates/stubs/commands/observe.md.template +2 -0
  626. package/templates/stubs/commands/pr-review.md.template +2 -0
  627. package/templates/stubs/commands/predict-cost.md.template +2 -0
  628. package/templates/stubs/commands/profile.md.template +2 -0
  629. package/templates/stubs/commands/reasoning.md.template +2 -0
  630. package/templates/stubs/commands/recall.md.template +2 -0
  631. package/templates/stubs/commands/remember.md.template +2 -0
  632. package/templates/stubs/commands/replay.md.template +2 -0
  633. package/templates/stubs/commands/restore.md.template +2 -0
  634. package/templates/stubs/commands/retrospective.md.template +2 -0
  635. package/templates/stubs/commands/slo.md.template +2 -0
  636. package/templates/stubs/commands/spec.md.template +2 -0
  637. package/templates/stubs/commands/sync.md.template +2 -0
  638. package/templates/stubs/commands/task.md.template +2 -0
  639. package/templates/stubs/commands/trace.md.template +2 -0
  640. package/templates/stubs/commands/visualize.md.template +2 -0
  641. package/templates/stubs/commands/workflow.md.template +2 -0
  642. package/templates/synchronizations/archive/adaptive-learning.yaml.template +595 -0
  643. package/templates/synchronizations/archive/code-understanding-flow.yaml.template +533 -0
  644. package/templates/synchronizations/archive/collaboration-flow.yaml.template +521 -0
  645. package/templates/synchronizations/archive/context-folding.yaml.template +353 -0
  646. package/templates/synchronizations/archive/dead-letter-queue.yaml.template +530 -0
  647. package/templates/synchronizations/archive/documentation-flow.yaml.template +560 -0
  648. package/templates/synchronizations/archive/error-recovery-flow.yaml.template +1031 -0
  649. package/templates/synchronizations/archive/execution-loop.yaml.template +336 -0
  650. package/templates/synchronizations/archive/exploration-flow.yaml.template +369 -0
  651. package/templates/synchronizations/archive/feature-development.yaml.template +2145 -0
  652. package/templates/synchronizations/archive/learning-loop.yaml.template +657 -0
  653. package/templates/synchronizations/archive/multi-verify.yaml.template +346 -0
  654. package/templates/synchronizations/archive/planning-flow.yaml.template +312 -0
  655. package/templates/synchronizations/archive/retrospective-flow.yaml.template +277 -0
  656. package/templates/synchronizations/archive/security-flow.yaml.template +477 -0
  657. package/templates/synchronizations/archive/slo-monitoring.yaml.template +209 -0
  658. package/templates/synchronizations/archive/task-routing.yaml.template +489 -0
  659. package/templates/synchronizations/archive/test-driven.yaml.template +291 -0
  660. package/templates/synchronizations/archive/tool-routing.yaml.template +326 -0
  661. package/templates/synchronizations/archive/verification-flow.yaml.template +407 -0
  662. package/templates/synchronizations/error-policy.yaml.template +188 -0
  663. package/templates/synchronizations/main.sync.template +319 -0
  664. package/templates/synchronizations/slo-registry.yaml.template +229 -0
  665. package/templates/tasks/task.yaml.template +67 -0
  666. package/templates/zen-profile.yaml.template +14 -0
@@ -0,0 +1,676 @@
1
+ ---
2
+ name: Smart Retry Logic
3
+ description: Automatically retry failed operations with intelligent backoff for 80% retry cost reduction
4
+ version: 1.0.0
5
+ trigger_keywords: [retry, failure, transient, backoff, resilience, error]
6
+ author: Zen Architecture
7
+ ---
8
+
9
+ # Smart Retry Logic - Expert Skill
10
+
11
+ Automatically retry failed operations with intelligent backoff, reducing manual retry costs by 80%.
12
+
13
+ ## Purpose
14
+
15
+ Smart retry provides:
16
+ - **80% retry cost reduction**: Automatic vs manual retry
17
+ - **Transient failure recovery**: Handle temporary issues automatically
18
+ - **Exponential backoff**: Avoid overwhelming failed services
19
+ - **Better success rates**: More resilient workflows
20
+
21
+ ## When to Use
22
+
23
+ Use smart retry:
24
+ - ✅ Transient failures (network, rate limits, timeouts)
25
+ - ✅ LLM API errors (rate limits, temporary unavailability)
26
+ - ✅ File I/O errors (locks, permissions)
27
+ - ✅ External service failures (temporary outages)
28
+
29
+ Don't retry:
30
+ - ❌ Invalid inputs (won't fix on retry)
31
+ - ❌ Schema validation failures (need code fix)
32
+ - ❌ Logic errors (need implementation fix)
33
+ - ❌ User errors (need user correction)
34
+
35
+ ## Retry Patterns
36
+
37
+ ### Pattern 1: Exponential Backoff
38
+
39
+ **Problem**: Service temporarily unavailable
40
+
41
+ **Strategy**: Wait increasingly longer between retries
42
+
43
+ ```python
44
+ def exponential_backoff(
45
+ operation,
46
+ max_attempts=3,
47
+ initial_delay=1.0,
48
+ multiplier=2.0
49
+ ):
50
+ """
51
+ Retry with exponential backoff.
52
+
53
+ Delays: 1s, 2s, 4s, 8s, ...
54
+ """
55
+ attempt = 0
56
+ delay = initial_delay
57
+
58
+ while attempt < max_attempts:
59
+ try:
60
+ return operation()
61
+ except TransientError as e:
62
+ attempt += 1
63
+ if attempt >= max_attempts:
64
+ raise
65
+
66
+ print(f"Attempt {attempt} failed: {e}")
67
+ print(f"Retrying in {delay}s...")
68
+ time.sleep(delay)
69
+ delay *= multiplier
70
+
71
+ raise MaxRetriesExceeded()
72
+ ```
73
+
74
+ **Example**:
75
+ ```python
76
+ # LLM API call with rate limit
77
+ result = exponential_backoff(
78
+ lambda: call_llm_api(prompt),
79
+ max_attempts=3,
80
+ initial_delay=1.0
81
+ )
82
+
83
+ # Timeline:
84
+ # Attempt 1: Fail (rate limit)
85
+ # Wait 1s
86
+ # Attempt 2: Fail (rate limit)
87
+ # Wait 2s
88
+ # Attempt 3: Success
89
+ # Total: 3s delay vs infinite manual retry
90
+ ```
91
+
92
+ ### Pattern 2: Jittered Backoff
93
+
94
+ **Problem**: Multiple failures cause synchronized retries
95
+
96
+ **Strategy**: Add randomness to avoid thundering herd
97
+
98
+ ```python
99
+ import random
100
+
101
+ def jittered_backoff(
102
+ operation,
103
+ max_attempts=3,
104
+ base_delay=1.0,
105
+ max_delay=60.0
106
+ ):
107
+ """
108
+ Retry with jittered exponential backoff.
109
+
110
+ Adds randomness to prevent synchronized retries.
111
+ """
112
+ attempt = 0
113
+
114
+ while attempt < max_attempts:
115
+ try:
116
+ return operation()
117
+ except TransientError as e:
118
+ attempt += 1
119
+ if attempt >= max_attempts:
120
+ raise
121
+
122
+ # Calculate delay with jitter
123
+ exponential = base_delay * (2 ** attempt)
124
+ jittered = exponential * (0.5 + random.random())
125
+ delay = min(jittered, max_delay)
126
+
127
+ print(f"Retrying in {delay:.1f}s...")
128
+ time.sleep(delay)
129
+
130
+ raise MaxRetriesExceeded()
131
+ ```
132
+
133
+ ### Pattern 3: Circuit Breaker
134
+
135
+ **Problem**: Persistent failures waste resources
136
+
137
+ **Strategy**: Stop retrying after repeated failures, try again later
138
+
139
+ ```python
140
+ class CircuitBreaker:
141
+ """
142
+ Circuit breaker pattern for persistent failures.
143
+
144
+ States:
145
+ - CLOSED: Normal operation
146
+ - OPEN: Failing, reject immediately
147
+ - HALF_OPEN: Testing if recovered
148
+ """
149
+
150
+ def __init__(
151
+ self,
152
+ failure_threshold=5,
153
+ timeout=60.0
154
+ ):
155
+ self.failure_threshold = failure_threshold
156
+ self.timeout = timeout
157
+ self.failures = 0
158
+ self.last_failure_time = None
159
+ self.state = "CLOSED"
160
+
161
+ def call(self, operation):
162
+ if self.state == "OPEN":
163
+ # Check if timeout expired
164
+ if time.time() - self.last_failure_time > self.timeout:
165
+ self.state = "HALF_OPEN"
166
+ else:
167
+ raise CircuitOpenError("Circuit breaker is open")
168
+
169
+ try:
170
+ result = operation()
171
+ # Success - reset
172
+ self.failures = 0
173
+ self.state = "CLOSED"
174
+ return result
175
+ except Exception as e:
176
+ self.failures += 1
177
+ self.last_failure_time = time.time()
178
+
179
+ if self.failures >= self.failure_threshold:
180
+ self.state = "OPEN"
181
+
182
+ raise
183
+ ```
184
+
185
+ **Example**:
186
+ ```python
187
+ # Protect against persistent API failures
188
+ breaker = CircuitBreaker(failure_threshold=5, timeout=60)
189
+
190
+ try:
191
+ result = breaker.call(lambda: call_external_api())
192
+ except CircuitOpenError:
193
+ # API is down, don't waste time retrying
194
+ print("Service unavailable, skipping")
195
+ ```
196
+
197
+ ### Pattern 4: Selective Retry
198
+
199
+ **Problem**: Not all errors are retryable
200
+
201
+ **Strategy**: Retry only transient failures
202
+
203
+ ```python
204
+ def is_retryable(error):
205
+ """
206
+ Determine if error is worth retrying.
207
+ """
208
+ retryable_errors = [
209
+ "rate_limit_exceeded",
210
+ "timeout",
211
+ "connection_error",
212
+ "service_unavailable",
213
+ "internal_server_error",
214
+ ]
215
+
216
+ non_retryable_errors = [
217
+ "invalid_input",
218
+ "authentication_failed",
219
+ "not_found",
220
+ "validation_error",
221
+ "schema_error",
222
+ ]
223
+
224
+ error_type = error.__class__.__name__.lower()
225
+ error_message = str(error).lower()
226
+
227
+ # Check non-retryable first
228
+ for pattern in non_retryable_errors:
229
+ if pattern in error_type or pattern in error_message:
230
+ return False
231
+
232
+ # Check retryable
233
+ for pattern in retryable_errors:
234
+ if pattern in error_type or pattern in error_message:
235
+ return True
236
+
237
+ # Default: don't retry unknown errors
238
+ return False
239
+
240
+ def selective_retry(operation, max_attempts=3):
241
+ """
242
+ Retry only transient failures.
243
+ """
244
+ for attempt in range(max_attempts):
245
+ try:
246
+ return operation()
247
+ except Exception as e:
248
+ if not is_retryable(e):
249
+ # Don't retry, fail immediately
250
+ raise
251
+
252
+ if attempt >= max_attempts - 1:
253
+ raise
254
+
255
+ print(f"Transient error: {e}")
256
+ print(f"Retrying (attempt {attempt + 2}/{max_attempts})...")
257
+ time.sleep(2 ** attempt)
258
+ ```
259
+
260
+ ## Integration with Concepts
261
+
262
+ ### Story Concept
263
+
264
+ **Retry LLM API calls**:
265
+ ```yaml
266
+ # In story.create action
267
+ try:
268
+ response = call_llm(prompt)
269
+ except RateLimitError as e:
270
+ # Automatic retry with backoff
271
+ response = exponential_backoff(
272
+ lambda: call_llm(prompt),
273
+ max_attempts=3,
274
+ initial_delay=1.0
275
+ )
276
+ ```
277
+
278
+ ### Architecture Concept
279
+
280
+ **Retry with circuit breaker** (expensive operation):
281
+ ```yaml
282
+ # Protect expensive Sonnet calls
283
+ sonnet_breaker = CircuitBreaker(
284
+ failure_threshold=3,
285
+ timeout=300 # 5 minutes
286
+ )
287
+
288
+ try:
289
+ architecture = sonnet_breaker.call(
290
+ lambda: generate_architecture(story)
291
+ )
292
+ except CircuitOpenError:
293
+ # Sonnet API down, fallback or notify
294
+ print("Architecture service unavailable")
295
+ raise
296
+ ```
297
+
298
+ ### Implementation Concept
299
+
300
+ **Retry file operations**:
301
+ ```yaml
302
+ # Retry file writes (may have locks)
303
+ def write_with_retry(file_path, content):
304
+ return exponential_backoff(
305
+ lambda: write_file(file_path, content),
306
+ max_attempts=3,
307
+ initial_delay=0.5
308
+ )
309
+
310
+ # Use in implementation
311
+ write_with_retry("src/auth.ts", code)
312
+ ```
313
+
314
+ ### /sync Command
315
+
316
+ **Retry sync evaluation**:
317
+ ```yaml
318
+ # Sync may fail due to file locks
319
+ def evaluate_sync_with_retry():
320
+ return jittered_backoff(
321
+ lambda: evaluate_sync_rules(),
322
+ max_attempts=3,
323
+ base_delay=0.5
324
+ )
325
+
326
+ rules = evaluate_sync_with_retry()
327
+ ```
328
+
329
+ ## Retry Strategies
330
+
331
+ ### Strategy 1: Immediate Retry
332
+
333
+ **When**: Quick transient errors (locks, cache misses)
334
+
335
+ **Delays**: 0s, 0s, 0s
336
+
337
+ ```python
338
+ # No delay between attempts
339
+ for attempt in range(3):
340
+ try:
341
+ return operation()
342
+ except TransientError:
343
+ if attempt >= 2:
344
+ raise
345
+ ```
346
+
347
+ **Use Cases**:
348
+ - File locks (usually release quickly)
349
+ - Cache misses (rebuild immediately)
350
+ - Memory pressure (GC runs quickly)
351
+
352
+ ### Strategy 2: Fixed Delay
353
+
354
+ **When**: Predictable recovery time
355
+
356
+ **Delays**: 1s, 1s, 1s
357
+
358
+ ```python
359
+ # Fixed 1 second delay
360
+ for attempt in range(3):
361
+ try:
362
+ return operation()
363
+ except TransientError:
364
+ if attempt >= 2:
365
+ raise
366
+ time.sleep(1.0)
367
+ ```
368
+
369
+ **Use Cases**:
370
+ - Known service restart time
371
+ - Scheduled maintenance windows
372
+ - Fixed rate limits
373
+
374
+ ### Strategy 3: Exponential Backoff
375
+
376
+ **When**: Unknown recovery time, avoid overwhelming
377
+
378
+ **Delays**: 1s, 2s, 4s, 8s
379
+
380
+ ```python
381
+ # Exponentially increasing delay
382
+ delay = 1.0
383
+ for attempt in range(4):
384
+ try:
385
+ return operation()
386
+ except TransientError:
387
+ if attempt >= 3:
388
+ raise
389
+ time.sleep(delay)
390
+ delay *= 2
391
+ ```
392
+
393
+ **Use Cases**:
394
+ - LLM API rate limits (most common)
395
+ - External service failures
396
+ - Network timeouts
397
+
398
+ ### Strategy 4: Adaptive Retry
399
+
400
+ **When**: Learn from error responses
401
+
402
+ **Delays**: Based on server hints
403
+
404
+ ```python
405
+ def adaptive_retry(operation):
406
+ """
407
+ Use server retry hints if available.
408
+ """
409
+ for attempt in range(3):
410
+ try:
411
+ return operation()
412
+ except RateLimitError as e:
413
+ if attempt >= 2:
414
+ raise
415
+
416
+ # Check for Retry-After header
417
+ retry_after = e.response.headers.get("Retry-After")
418
+ if retry_after:
419
+ delay = float(retry_after)
420
+ else:
421
+ delay = 2 ** attempt
422
+
423
+ print(f"Rate limited. Retrying in {delay}s...")
424
+ time.sleep(delay)
425
+ ```
426
+
427
+ **Use Cases**:
428
+ - APIs with Retry-After headers
429
+ - Rate limits with reset times
430
+ - Server-suggested backoff
431
+
432
+ ## Cost Analysis
433
+
434
+ ### Manual Retry Cost
435
+
436
+ **Without automatic retry**:
437
+ ```yaml
438
+ Workflow fails at step 3 of 6
439
+ Developer investigates: 15 minutes
440
+ Developer retries: 5 minutes (re-run steps 1-3)
441
+ Total: 20 minutes
442
+
443
+ If Sonnet was used:
444
+ Step 1: $0.002
445
+ Step 2: $0.015 (architecture)
446
+ Step 3: $0.003
447
+ Retry: $0.020 (repeat steps 1-3)
448
+ Total: $0.040
449
+
450
+ Manual cost: $0.020 + 20 minutes
451
+ ```
452
+
453
+ ### Automatic Retry Cost
454
+
455
+ **With smart retry**:
456
+ ```yaml
457
+ Workflow fails at step 3 of 6
458
+ Automatic retry (3 attempts): 6 seconds
459
+ Success on attempt 2
460
+ Total: 6 seconds
461
+
462
+ Cost:
463
+ Step 1: $0.002
464
+ Step 2: $0.015
465
+ Step 3 attempt 1: $0.003 (fail)
466
+ Step 3 attempt 2: $0.003 (success)
467
+ Total: $0.023
468
+
469
+ Automatic cost: $0.003 + 6 seconds
470
+ Savings: $0.017 + 20 minutes (80% cost reduction)
471
+ ```
472
+
473
+ ### Retry Cost Breakdown
474
+
475
+ | Scenario | Manual | Automatic | Savings |
476
+ |----------|--------|-----------|---------|
477
+ | Single retry | $0.020 + 20min | $0.003 + 6s | 80% |
478
+ | 3 transient failures | $0.060 + 60min | $0.009 + 18s | 85% |
479
+ | Circuit breaker saves | $0.100 + 100min | $0 + 0s | 100% |
480
+
481
+ ## Performance Impact
482
+
483
+ ### Success Rate Improvement
484
+
485
+ | Failure Type | Without Retry | With Retry | Improvement |
486
+ |--------------|---------------|------------|-------------|
487
+ | Rate limits | 30% success | 95% success | 65% higher |
488
+ | Network timeouts | 60% success | 90% success | 30% higher |
489
+ | File locks | 80% success | 99% success | 19% higher |
490
+ | Combined | 57% success | 95% success | 38% higher |
491
+
492
+ ### Time to Recovery
493
+
494
+ | Failure Type | Manual | Automatic | Speedup |
495
+ |--------------|--------|-----------|---------|
496
+ | Rate limit | 20 min | 6 sec | 200x faster |
497
+ | Timeout | 15 min | 4 sec | 225x faster |
498
+ | File lock | 10 min | 1 sec | 600x faster |
499
+
500
+ ## Best Practices
501
+
502
+ ### 1. Log Retry Attempts
503
+
504
+ ```python
505
+ def logged_retry(operation, name="operation"):
506
+ """
507
+ Retry with detailed logging.
508
+ """
509
+ for attempt in range(3):
510
+ try:
511
+ result = operation()
512
+ if attempt > 0:
513
+ print(f"✓ {name} succeeded on attempt {attempt + 1}")
514
+ return result
515
+ except Exception as e:
516
+ print(f"✗ {name} attempt {attempt + 1} failed: {e}")
517
+ if attempt >= 2:
518
+ print(f"✗ {name} failed after 3 attempts")
519
+ raise
520
+ time.sleep(2 ** attempt)
521
+ ```
522
+
523
+ ### 2. Set Reasonable Limits
524
+
525
+ ```python
526
+ # Don't retry forever
527
+ max_attempts = 3 # Usually enough
528
+
529
+ # Don't wait forever
530
+ max_delay = 60.0 # Cap at 1 minute
531
+
532
+ # Don't retry non-transient errors
533
+ if not is_retryable(error):
534
+ raise
535
+ ```
536
+
537
+ ### 3. Track Retry Metrics
538
+
539
+ ```python
540
+ class RetryMetrics:
541
+ def __init__(self):
542
+ self.total_attempts = 0
543
+ self.successful_retries = 0
544
+ self.failed_retries = 0
545
+
546
+ def record_attempt(self, attempt, success):
547
+ self.total_attempts += 1
548
+ if success and attempt > 0:
549
+ self.successful_retries += 1
550
+ elif not success and attempt >= 2:
551
+ self.failed_retries += 1
552
+
553
+ def success_rate(self):
554
+ if self.total_attempts == 0:
555
+ return 0.0
556
+ return self.successful_retries / self.total_attempts
557
+
558
+ metrics = RetryMetrics()
559
+ ```
560
+
561
+ ### 4. Provide Fallbacks
562
+
563
+ ```python
564
+ def retry_with_fallback(
565
+ operation,
566
+ fallback,
567
+ max_attempts=3
568
+ ):
569
+ """
570
+ Retry, then fallback if still failing.
571
+ """
572
+ try:
573
+ return exponential_backoff(operation, max_attempts)
574
+ except Exception as e:
575
+ print(f"Operation failed after {max_attempts} attempts")
576
+ print(f"Using fallback: {e}")
577
+ return fallback()
578
+
579
+ # Example
580
+ result = retry_with_fallback(
581
+ lambda: call_sonnet(prompt), # Expensive, may fail
582
+ lambda: call_sonnet(prompt) # Cheaper fallback
583
+ )
584
+ ```
585
+
586
+ ### 5. Respect Rate Limits
587
+
588
+ ```python
589
+ class RateLimiter:
590
+ """
591
+ Prevent hitting rate limits in first place.
592
+ """
593
+ def __init__(self, max_requests=10, window=60):
594
+ self.max_requests = max_requests
595
+ self.window = window
596
+ self.requests = []
597
+
598
+ def allow(self):
599
+ now = time.time()
600
+ # Remove old requests
601
+ self.requests = [
602
+ t for t in self.requests
603
+ if now - t < self.window
604
+ ]
605
+
606
+ if len(self.requests) < self.max_requests:
607
+ self.requests.append(now)
608
+ return True
609
+
610
+ return False
611
+
612
+ def wait_if_needed(self):
613
+ while not self.allow():
614
+ time.sleep(1)
615
+
616
+ # Use before expensive calls
617
+ limiter = RateLimiter(max_requests=10, window=60)
618
+ limiter.wait_if_needed()
619
+ result = call_expensive_api()
620
+ ```
621
+
622
+ ## Troubleshooting
623
+
624
+ ### Issue: Too Many Retries
625
+
626
+ **Problem**: Retrying operations that won't succeed
627
+
628
+ **Solution**:
629
+ ```python
630
+ # Check if error is retryable first
631
+ if not is_retryable(error):
632
+ raise # Don't waste time
633
+
634
+ # Reduce max attempts for obviously failing operations
635
+ max_attempts = 1 if is_definitely_failing(error) else 3
636
+ ```
637
+
638
+ ### Issue: Retry Storm
639
+
640
+ **Problem**: Many failures cause synchronized retries
641
+
642
+ **Solution**:
643
+ ```python
644
+ # Use jittered backoff to spread out retries
645
+ delay = base_delay * (2 ** attempt) * (0.5 + random.random())
646
+ ```
647
+
648
+ ### Issue: Circuit Never Closes
649
+
650
+ **Problem**: Circuit breaker stuck open
651
+
652
+ **Solution**:
653
+ ```python
654
+ # Implement health checks
655
+ def health_check():
656
+ try:
657
+ ping_service()
658
+ return True
659
+ except:
660
+ return False
661
+
662
+ # Half-open state tries health check
663
+ if state == "HALF_OPEN":
664
+ if health_check():
665
+ state = "CLOSED"
666
+ ```
667
+
668
+ ## Related Documents
669
+
670
+ - **/replay Command** (Phase 1 Day 8-9) - Debugging failed workflows
671
+ - **Batch Operations** (Phase 2 Day 6-7) - Batch retry strategies
672
+ - **ZEN_PHASE2_PROGRESS.md** - Week 2 Day 8-10 tracking
673
+
674
+ ---
675
+
676
+ **Use this skill when**: Implementing concepts that call external services, LLM APIs, or perform I/O operations. Always wrap potentially transient operations in retry logic for better resilience.