groundswell 0.0.2 → 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 (554) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +26 -9
  3. package/dist/cache/cache-key.d.ts +86 -0
  4. package/dist/cache/cache-key.d.ts.map +1 -0
  5. package/dist/cache/cache-key.js +204 -0
  6. package/dist/cache/cache-key.js.map +1 -0
  7. package/dist/cache/cache.d.ts +104 -0
  8. package/dist/cache/cache.d.ts.map +1 -0
  9. package/dist/cache/cache.js +179 -0
  10. package/dist/cache/cache.js.map +1 -0
  11. package/{src/cache/index.ts → dist/cache/index.d.ts} +1 -1
  12. package/dist/cache/index.d.ts.map +1 -0
  13. package/dist/cache/index.js +6 -0
  14. package/dist/cache/index.js.map +1 -0
  15. package/dist/core/agent.d.ts +203 -0
  16. package/dist/core/agent.d.ts.map +1 -0
  17. package/dist/core/agent.js +833 -0
  18. package/dist/core/agent.js.map +1 -0
  19. package/{src/core/context.ts → dist/core/context.d.ts} +16 -67
  20. package/dist/core/context.d.ts.map +1 -0
  21. package/dist/core/context.js +80 -0
  22. package/dist/core/context.js.map +1 -0
  23. package/dist/core/event-tree.d.ts +72 -0
  24. package/dist/core/event-tree.d.ts.map +1 -0
  25. package/dist/core/event-tree.js +211 -0
  26. package/dist/core/event-tree.js.map +1 -0
  27. package/{src/core/factory.ts → dist/core/factory.d.ts} +6 -27
  28. package/dist/core/factory.d.ts.map +1 -0
  29. package/dist/core/factory.js +110 -0
  30. package/dist/core/factory.js.map +1 -0
  31. package/{src/core/index.ts → dist/core/index.d.ts} +2 -10
  32. package/dist/core/index.d.ts.map +1 -0
  33. package/dist/core/index.js +9 -0
  34. package/dist/core/index.js.map +1 -0
  35. package/dist/core/logger.d.ts +50 -0
  36. package/dist/core/logger.d.ts.map +1 -0
  37. package/dist/core/logger.js +91 -0
  38. package/dist/core/logger.js.map +1 -0
  39. package/dist/core/mcp-handler.d.ts +127 -0
  40. package/dist/core/mcp-handler.d.ts.map +1 -0
  41. package/dist/core/mcp-handler.js +323 -0
  42. package/dist/core/mcp-handler.js.map +1 -0
  43. package/dist/core/prompt.d.ts +80 -0
  44. package/dist/core/prompt.d.ts.map +1 -0
  45. package/dist/core/prompt.js +120 -0
  46. package/dist/core/prompt.js.map +1 -0
  47. package/dist/core/workflow-context.d.ts +61 -0
  48. package/dist/core/workflow-context.d.ts.map +1 -0
  49. package/dist/core/workflow-context.js +358 -0
  50. package/dist/core/workflow-context.js.map +1 -0
  51. package/dist/core/workflow.d.ts +543 -0
  52. package/dist/core/workflow.d.ts.map +1 -0
  53. package/dist/core/workflow.js +986 -0
  54. package/dist/core/workflow.js.map +1 -0
  55. package/dist/debugger/event-replayer.d.ts +422 -0
  56. package/dist/debugger/event-replayer.d.ts.map +1 -0
  57. package/dist/debugger/event-replayer.js +639 -0
  58. package/dist/debugger/event-replayer.js.map +1 -0
  59. package/dist/debugger/index.d.ts +2 -0
  60. package/dist/debugger/index.d.ts.map +1 -0
  61. package/{src/debugger/index.ts → dist/debugger/index.js} +1 -0
  62. package/dist/debugger/index.js.map +1 -0
  63. package/dist/debugger/tree-debugger.d.ts +240 -0
  64. package/dist/debugger/tree-debugger.d.ts.map +1 -0
  65. package/dist/debugger/tree-debugger.js +620 -0
  66. package/dist/debugger/tree-debugger.js.map +1 -0
  67. package/dist/decorators/index.d.ts +4 -0
  68. package/dist/decorators/index.d.ts.map +1 -0
  69. package/{src/decorators/index.ts → dist/decorators/index.js} +1 -0
  70. package/dist/decorators/index.js.map +1 -0
  71. package/dist/decorators/observed-state.d.ts +32 -0
  72. package/dist/decorators/observed-state.d.ts.map +1 -0
  73. package/dist/decorators/observed-state.js +79 -0
  74. package/dist/decorators/observed-state.js.map +1 -0
  75. package/dist/decorators/step.d.ts +15 -0
  76. package/dist/decorators/step.d.ts.map +1 -0
  77. package/dist/decorators/step.js +192 -0
  78. package/dist/decorators/step.js.map +1 -0
  79. package/dist/decorators/task.d.ts +50 -0
  80. package/dist/decorators/task.d.ts.map +1 -0
  81. package/dist/decorators/task.js +118 -0
  82. package/dist/decorators/task.js.map +1 -0
  83. package/dist/examples/index.d.ts +3 -0
  84. package/dist/examples/index.d.ts.map +1 -0
  85. package/{src/examples/index.ts → dist/examples/index.js} +1 -0
  86. package/dist/examples/index.js.map +1 -0
  87. package/dist/examples/tdd-orchestrator.d.ts +15 -0
  88. package/dist/examples/tdd-orchestrator.d.ts.map +1 -0
  89. package/dist/examples/tdd-orchestrator.js +121 -0
  90. package/dist/examples/tdd-orchestrator.js.map +1 -0
  91. package/dist/examples/test-cycle-workflow.d.ts +14 -0
  92. package/dist/examples/test-cycle-workflow.d.ts.map +1 -0
  93. package/dist/examples/test-cycle-workflow.js +116 -0
  94. package/dist/examples/test-cycle-workflow.js.map +1 -0
  95. package/dist/harnesses/claude-code-harness.d.ts +391 -0
  96. package/dist/harnesses/claude-code-harness.d.ts.map +1 -0
  97. package/dist/harnesses/claude-code-harness.js +1076 -0
  98. package/dist/harnesses/claude-code-harness.js.map +1 -0
  99. package/dist/harnesses/harness-registry.d.ts +440 -0
  100. package/dist/harnesses/harness-registry.d.ts.map +1 -0
  101. package/dist/harnesses/harness-registry.js +543 -0
  102. package/dist/harnesses/harness-registry.js.map +1 -0
  103. package/dist/harnesses/index.d.ts +12 -0
  104. package/dist/harnesses/index.d.ts.map +1 -0
  105. package/dist/harnesses/index.js +11 -0
  106. package/dist/harnesses/index.js.map +1 -0
  107. package/dist/harnesses/pi-harness.d.ts +219 -0
  108. package/dist/harnesses/pi-harness.d.ts.map +1 -0
  109. package/dist/harnesses/pi-harness.js +676 -0
  110. package/dist/harnesses/pi-harness.js.map +1 -0
  111. package/dist/harnesses/pi-schema-converter.d.ts +24 -0
  112. package/dist/harnesses/pi-schema-converter.d.ts.map +1 -0
  113. package/dist/harnesses/pi-schema-converter.js +81 -0
  114. package/dist/harnesses/pi-schema-converter.js.map +1 -0
  115. package/dist/harnesses/register-defaults.d.ts +24 -0
  116. package/dist/harnesses/register-defaults.d.ts.map +1 -0
  117. package/dist/harnesses/register-defaults.js +40 -0
  118. package/dist/harnesses/register-defaults.js.map +1 -0
  119. package/dist/harnesses/session-store.d.ts +201 -0
  120. package/dist/harnesses/session-store.d.ts.map +1 -0
  121. package/dist/harnesses/session-store.js +254 -0
  122. package/dist/harnesses/session-store.js.map +1 -0
  123. package/dist/index.d.ts +37 -0
  124. package/dist/index.d.ts.map +1 -0
  125. package/dist/index.js +57 -0
  126. package/dist/index.js.map +1 -0
  127. package/dist/reflection/index.d.ts +5 -0
  128. package/dist/reflection/index.d.ts.map +1 -0
  129. package/{src/reflection/index.ts → dist/reflection/index.js} +1 -1
  130. package/dist/reflection/index.js.map +1 -0
  131. package/dist/reflection/reflection.d.ts +84 -0
  132. package/dist/reflection/reflection.d.ts.map +1 -0
  133. package/dist/reflection/reflection.js +344 -0
  134. package/dist/reflection/reflection.js.map +1 -0
  135. package/dist/tools/index.d.ts +6 -0
  136. package/dist/tools/index.d.ts.map +1 -0
  137. package/dist/tools/index.js +11 -0
  138. package/dist/tools/index.js.map +1 -0
  139. package/dist/tools/introspection.d.ts +165 -0
  140. package/dist/tools/introspection.d.ts.map +1 -0
  141. package/dist/tools/introspection.js +324 -0
  142. package/dist/tools/introspection.js.map +1 -0
  143. package/dist/types/agent.d.ts +1317 -0
  144. package/dist/types/agent.d.ts.map +1 -0
  145. package/dist/types/agent.js +423 -0
  146. package/dist/types/agent.js.map +1 -0
  147. package/dist/types/decorators.d.ts +40 -0
  148. package/dist/types/decorators.d.ts.map +1 -0
  149. package/dist/types/decorators.js +2 -0
  150. package/dist/types/decorators.js.map +1 -0
  151. package/dist/types/error-strategy.d.ts +13 -0
  152. package/dist/types/error-strategy.d.ts.map +1 -0
  153. package/dist/types/error-strategy.js +2 -0
  154. package/dist/types/error-strategy.js.map +1 -0
  155. package/dist/types/error.d.ts +20 -0
  156. package/dist/types/error.d.ts.map +1 -0
  157. package/dist/types/error.js +2 -0
  158. package/dist/types/error.js.map +1 -0
  159. package/dist/types/events.d.ts +113 -0
  160. package/dist/types/events.d.ts.map +1 -0
  161. package/dist/types/events.js +2 -0
  162. package/dist/types/events.js.map +1 -0
  163. package/dist/types/harnesses.d.ts +474 -0
  164. package/dist/types/harnesses.d.ts.map +1 -0
  165. package/dist/types/harnesses.js +2 -0
  166. package/dist/types/harnesses.js.map +1 -0
  167. package/dist/types/index.d.ts +23 -0
  168. package/dist/types/index.d.ts.map +1 -0
  169. package/dist/types/index.js +8 -0
  170. package/dist/types/index.js.map +1 -0
  171. package/dist/types/logging.d.ts +24 -0
  172. package/dist/types/logging.d.ts.map +1 -0
  173. package/dist/types/logging.js +2 -0
  174. package/dist/types/logging.js.map +1 -0
  175. package/dist/types/observer.d.ts +18 -0
  176. package/dist/types/observer.d.ts.map +1 -0
  177. package/dist/types/observer.js +2 -0
  178. package/dist/types/observer.js.map +1 -0
  179. package/dist/types/prompt.d.ts +31 -0
  180. package/dist/types/prompt.d.ts.map +1 -0
  181. package/dist/types/prompt.js +6 -0
  182. package/dist/types/prompt.js.map +1 -0
  183. package/dist/types/providers.d.ts +691 -0
  184. package/dist/types/providers.d.ts.map +1 -0
  185. package/dist/types/providers.js +14 -0
  186. package/dist/types/providers.js.map +1 -0
  187. package/dist/types/reflection.d.ts +96 -0
  188. package/dist/types/reflection.d.ts.map +1 -0
  189. package/dist/types/reflection.js +24 -0
  190. package/dist/types/reflection.js.map +1 -0
  191. package/dist/types/restart.d.ts +132 -0
  192. package/dist/types/restart.d.ts.map +1 -0
  193. package/dist/types/restart.js +2 -0
  194. package/dist/types/restart.js.map +1 -0
  195. package/dist/types/sdk-primitives.d.ts +118 -0
  196. package/dist/types/sdk-primitives.d.ts.map +1 -0
  197. package/dist/types/sdk-primitives.js +6 -0
  198. package/dist/types/sdk-primitives.js.map +1 -0
  199. package/{src/types/snapshot.ts → dist/types/snapshot.d.ts} +5 -5
  200. package/dist/types/snapshot.d.ts.map +1 -0
  201. package/dist/types/snapshot.js +2 -0
  202. package/dist/types/snapshot.js.map +1 -0
  203. package/dist/types/streaming.d.ts +194 -0
  204. package/dist/types/streaming.d.ts.map +1 -0
  205. package/dist/types/streaming.js +67 -0
  206. package/dist/types/streaming.js.map +1 -0
  207. package/dist/types/workflow-context.d.ts +275 -0
  208. package/dist/types/workflow-context.d.ts.map +1 -0
  209. package/dist/types/workflow-context.js +8 -0
  210. package/dist/types/workflow-context.js.map +1 -0
  211. package/dist/types/workflow.d.ts +30 -0
  212. package/dist/types/workflow.d.ts.map +1 -0
  213. package/dist/types/workflow.js +2 -0
  214. package/dist/types/workflow.js.map +1 -0
  215. package/dist/utils/agent-validation.d.ts +88 -0
  216. package/dist/utils/agent-validation.d.ts.map +1 -0
  217. package/dist/utils/agent-validation.js +87 -0
  218. package/dist/utils/agent-validation.js.map +1 -0
  219. package/dist/utils/delay.d.ts +7 -0
  220. package/dist/utils/delay.d.ts.map +1 -0
  221. package/dist/utils/delay.js +9 -0
  222. package/dist/utils/delay.js.map +1 -0
  223. package/dist/utils/harness-config.d.ts +180 -0
  224. package/dist/utils/harness-config.d.ts.map +1 -0
  225. package/dist/utils/harness-config.js +311 -0
  226. package/dist/utils/harness-config.js.map +1 -0
  227. package/dist/utils/id.d.ts +6 -0
  228. package/dist/utils/id.d.ts.map +1 -0
  229. package/dist/utils/id.js +12 -0
  230. package/dist/utils/id.js.map +1 -0
  231. package/dist/utils/index.d.ts +13 -0
  232. package/dist/utils/index.d.ts.map +1 -0
  233. package/dist/utils/index.js +11 -0
  234. package/dist/utils/index.js.map +1 -0
  235. package/dist/utils/model-spec.d.ts +110 -0
  236. package/dist/utils/model-spec.d.ts.map +1 -0
  237. package/dist/utils/model-spec.js +149 -0
  238. package/dist/utils/model-spec.js.map +1 -0
  239. package/dist/utils/observable.d.ts +54 -0
  240. package/dist/utils/observable.d.ts.map +1 -0
  241. package/dist/utils/observable.js +82 -0
  242. package/dist/utils/observable.js.map +1 -0
  243. package/dist/utils/provider-config.d.ts +10 -0
  244. package/dist/utils/provider-config.d.ts.map +1 -0
  245. package/dist/utils/provider-config.js +10 -0
  246. package/dist/utils/provider-config.js.map +1 -0
  247. package/dist/utils/restart-analysis.d.ts +202 -0
  248. package/dist/utils/restart-analysis.d.ts.map +1 -0
  249. package/dist/utils/restart-analysis.js +426 -0
  250. package/dist/utils/restart-analysis.js.map +1 -0
  251. package/dist/utils/session-serialization.d.ts +118 -0
  252. package/dist/utils/session-serialization.d.ts.map +1 -0
  253. package/dist/utils/session-serialization.js +217 -0
  254. package/dist/utils/session-serialization.js.map +1 -0
  255. package/dist/utils/workflow-error-utils.d.ts +22 -0
  256. package/dist/utils/workflow-error-utils.d.ts.map +1 -0
  257. package/dist/utils/workflow-error-utils.js +45 -0
  258. package/dist/utils/workflow-error-utils.js.map +1 -0
  259. package/package.json +34 -5
  260. package/.claude/commands/subtask-planning/prp-base-create.md +0 -120
  261. package/.claude/commands/subtask-planning/prp-base-execute.md +0 -65
  262. package/.claude/commands/task-breakdown.md +0 -94
  263. package/.claude/settings.local.json +0 -9
  264. package/.claude/system_prompts/task-breakdown.md +0 -101
  265. package/CHANGELOG.md +0 -188
  266. package/PRD.md +0 -543
  267. package/PRPs/001-hierarchical-workflow-engine.md +0 -2438
  268. package/PRPs/PRDs/002-agent-prompt.md +0 -390
  269. package/PRPs/PRDs/003-agent-prompt.md +0 -943
  270. package/PRPs/PRDs/004-agent-prompt.md +0 -1136
  271. package/PRPs/PRDs/tasks-001.json +0 -492
  272. package/PRPs/README.md +0 -83
  273. package/PRPs/templates/prp_base.md +0 -222
  274. package/docs/agent.md +0 -422
  275. package/docs/prompt.md +0 -419
  276. package/docs/workflow.md +0 -600
  277. package/examples/README.md +0 -258
  278. package/examples/examples/01-basic-workflow.ts +0 -100
  279. package/examples/examples/02-decorator-options.ts +0 -217
  280. package/examples/examples/03-parent-child.ts +0 -241
  281. package/examples/examples/04-observers-debugger.ts +0 -340
  282. package/examples/examples/05-error-handling.ts +0 -387
  283. package/examples/examples/06-concurrent-tasks.ts +0 -352
  284. package/examples/examples/07-agent-loops.ts +0 -432
  285. package/examples/examples/08-sdk-features.ts +0 -667
  286. package/examples/examples/09-reflection.ts +0 -573
  287. package/examples/examples/10-introspection.ts +0 -550
  288. package/examples/examples/11-reparenting-workflows.ts +0 -269
  289. package/examples/index.ts +0 -147
  290. package/examples/utils/helpers.ts +0 -57
  291. package/package-lock.json +0 -2398
  292. package/plan/001_d3bb02af4886/TEST_RESULTS.md +0 -259
  293. package/plan/001_d3bb02af4886/backlog.json +0 -867
  294. package/plan/001_d3bb02af4886/bug_fix_tasks.json +0 -484
  295. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S1/PRP.md +0 -488
  296. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S2/PRP.md +0 -581
  297. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S3/PRP.md +0 -687
  298. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S1/PRP.md +0 -492
  299. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/PRP.md +0 -932
  300. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/concurrent_error_testing_patterns.md +0 -1109
  301. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/vitest_concurrent_testing.md +0 -802
  302. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/workflow_engine_test_references.md +0 -603
  303. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S1/PRP.md +0 -564
  304. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S3/PRP.md +0 -518
  305. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S4/PRP.md +0 -1252
  306. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/PRP.md +0 -364
  307. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/CODEBASE_INVENTORY.md +0 -114
  308. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/DECORATOR_DOCUMENTATION_PATTERNS.md +0 -205
  309. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/PRD_LOCATION_ANALYSIS.md +0 -199
  310. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/ULTRATHINK_PRP_PLAN.md +0 -134
  311. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S1/PRP.md +0 -495
  312. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S1/research/console_error_inventory.md +0 -435
  313. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S2/PRP.md +0 -506
  314. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S3/PRP.md +0 -612
  315. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T2S2/PRP.md +0 -558
  316. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T2S2/research/external_research.md +0 -788
  317. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T3S2/PRP.md +0 -460
  318. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T3S3/PRP.md +0 -454
  319. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/PRP.md +0 -520
  320. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/RECOMMENDATION.md +0 -417
  321. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/research/external_workflow_engines_research.md +0 -760
  322. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/research/security_implications_analysis.md +0 -245
  323. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S2/PRP.md +0 -792
  324. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S1/PRP.md +0 -535
  325. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S1/TEST_EXECUTION_REPORT.md +0 -190
  326. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/PRP.md +0 -654
  327. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/TEST_FIX_REPORT.md +0 -227
  328. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/KEY_FINDINGS.md +0 -345
  329. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/QUICK_REFERENCE.md +0 -193
  330. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/test_maintenance_research.md +0 -1323
  331. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S1/BREAKING_CHANGES_AUDIT.md +0 -1011
  332. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S1/PRP.md +0 -927
  333. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S2/PRP.md +0 -505
  334. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/architecture/logger_child_signature_analysis.md +0 -401
  335. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/child_implementation_research.md +0 -142
  336. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/test_patterns_research.md +0 -112
  337. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/vitest_patterns_research.md +0 -159
  338. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/PRP.md +0 -549
  339. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/VERIFICATION_REPORT.md +0 -368
  340. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/edge_case_analysis.md +0 -172
  341. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/usage_inventory.md +0 -175
  342. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T1S2/PRP.md +0 -696
  343. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T1S4/PRP.md +0 -860
  344. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/PRP.md +0 -1066
  345. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/01-testing-aggregated-errors.md +0 -1103
  346. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/01_typescript_error_aggregation_patterns.md +0 -789
  347. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/02-error-merge-strategy-testing-guide.md +0 -1098
  348. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/02_aggregate_error_patterns.md +0 -1037
  349. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/03-promise-allsettled-testing-patterns.md +0 -916
  350. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/03_error_merging_strategies.md +0 -1045
  351. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/04_github_stackoverflow_examples.md +0 -890
  352. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/05_comprehensive_summary.md +0 -822
  353. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/INDEX.md +0 -668
  354. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/QUICK_REFERENCE.md +0 -706
  355. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/README.md +0 -265
  356. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/RESEARCH_REPORT.md +0 -655
  357. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S4/research/vitest_testing_patterns.md +0 -1103
  358. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T3S2/PRP.md +0 -426
  359. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/PRP.md +0 -506
  360. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/QUICK_REFERENCE.md +0 -114
  361. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/RESEARCH_SUMMARY.md +0 -316
  362. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/vitest_observer_error_logging_best_practices.md +0 -754
  363. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S3/PRP.md +0 -612
  364. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/PRP.md +0 -719
  365. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/README.md +0 -215
  366. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/analysis.md +0 -765
  367. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S3/PRP.md +0 -718
  368. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/DECISION.md +0 -149
  369. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/PRP.md +0 -470
  370. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/ULTRATHINK_PLAN.md +0 -332
  371. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/codebase_workflow_name_analysis.md +0 -167
  372. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/external_best_practices.md +0 -265
  373. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/validation_patterns.md +0 -273
  374. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T4S1/workflow_engine_ancestry_api_research.md +0 -760
  375. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T4S3-PRP.md +0 -434
  376. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S1/PRP.md +0 -717
  377. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/PRP.md +0 -472
  378. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/VALIDATION_REPORT.md +0 -125
  379. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/research/ULTRATHINK_PRP_PLAN.md +0 -301
  380. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/error-logging-best-practices.md +0 -1170
  381. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/research_typescript_partial_and_overloads.md +0 -940
  382. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/vitest-quick-reference.md +0 -151
  383. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/vitest-research.md +0 -650
  384. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/prd_snapshot.md +0 -259
  385. package/plan/001_d3bb02af4886/bugfix/P1M1T1S1/PRP.md +0 -457
  386. package/plan/001_d3bb02af4886/bugfix/RESEARCH_SUMMARY.md +0 -346
  387. package/plan/001_d3bb02af4886/bugfix/architecture/codebase_structure.md +0 -311
  388. package/plan/001_d3bb02af4886/bugfix/architecture/concurrent_execution_best_practices.md +0 -1565
  389. package/plan/001_d3bb02af4886/bugfix/architecture/error_handling_patterns.md +0 -288
  390. package/plan/001_d3bb02af4886/bugfix/architecture/promise_all_analysis.md +0 -741
  391. package/plan/001_d3bb02af4886/docs/PRP/P1M1T1S4-functional-workflow-error-state-capture-test.md +0 -652
  392. package/plan/001_d3bb02af4886/docs/PRP/P1P2-PRP.md +0 -527
  393. package/plan/001_d3bb02af4886/docs/PRP/P3P4-PRP.md +0 -1388
  394. package/plan/001_d3bb02af4886/docs/PRP/P4P5-PRP.md +0 -1136
  395. package/plan/001_d3bb02af4886/docs/PRP/PRP.md +0 -527
  396. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S1-PRP.md +0 -415
  397. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S2-PRP.md +0 -378
  398. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S4-PRP.md +0 -713
  399. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M2T1S4-PRP.md +0 -370
  400. package/plan/001_d3bb02af4886/docs/PRP_P1M3T1S3.md +0 -499
  401. package/plan/001_d3bb02af4886/docs/TEST_RESULTS.md +0 -230
  402. package/plan/001_d3bb02af4886/docs/architecture/external_deps.md +0 -358
  403. package/plan/001_d3bb02af4886/docs/architecture/system_context.md +0 -242
  404. package/plan/001_d3bb02af4886/docs/bugfix/ANALYSIS_PRD_VS_IMPLEMENTATION.md +0 -1134
  405. package/plan/001_d3bb02af4886/docs/bugfix/GAP_ANALYSIS_SUMMARY.md +0 -179
  406. package/plan/001_d3bb02af4886/docs/bugfix/P1M4T2S1/PRP.md +0 -629
  407. package/plan/001_d3bb02af4886/docs/bugfix/P1M4T2S1/validation-report.md +0 -214
  408. package/plan/001_d3bb02af4886/docs/bugfix/PRP_P1M4T2S3.md +0 -629
  409. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_PRP.md +0 -529
  410. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_QUICK_REFERENCE.md +0 -142
  411. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_README.md +0 -304
  412. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_TEST_RESULTS.md +0 -558
  413. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_VALIDATION_SUMMARY.md +0 -256
  414. package/plan/001_d3bb02af4886/docs/bugfix/system_context.md +0 -346
  415. package/plan/001_d3bb02af4886/docs/bugfix-architecture/bug_analysis.md +0 -415
  416. package/plan/001_d3bb02af4886/docs/bugfix-architecture/implementation_patterns.md +0 -489
  417. package/plan/001_d3bb02af4886/docs/bugfix-architecture/system_context.md +0 -218
  418. package/plan/001_d3bb02af4886/docs/bugfix_INITIATION_SUMMARY.md +0 -380
  419. package/plan/001_d3bb02af4886/docs/research/CYCLE_DETECTION_PATTERNS.md +0 -1923
  420. package/plan/001_d3bb02af4886/docs/research/CYCLE_DETECTION_QUICK_REF.md +0 -319
  421. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/codebase-context.md +0 -115
  422. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/cycle-detection-algorithms.md +0 -134
  423. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/test-patterns.md +0 -153
  424. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/workflow-class.md +0 -132
  425. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/DECORATOR_DOCUMENTATION_BEST_PRACTICES.md +0 -716
  426. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/DECORATOR_DOCUMENTATION_QUICK_REF.md +0 -186
  427. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/GROUNDSWELL_DECORATOR_EXAMPLES.md +0 -604
  428. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/INDEX.md +0 -213
  429. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/codebase_structure.md +0 -30
  430. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/existing_test_pattern.md +0 -56
  431. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/getRootObservers_implementation.md +0 -53
  432. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/test_conventions.md +0 -49
  433. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/PRP.md +0 -958
  434. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/QUICK_REFERENCE.md +0 -339
  435. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/README.md +0 -305
  436. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/SUMMARY.md +0 -433
  437. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/bidirectional-tree-consistency-testing.md +0 -1574
  438. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/test-pattern-examples.md +0 -1014
  439. package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_BEST_PRACTICES.md +0 -1929
  440. package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_CODE_PATTERNS.md +0 -857
  441. package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_INTEGRATION_GUIDE.md +0 -738
  442. package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_RESEARCH_INDEX.md +0 -424
  443. package/plan/001_d3bb02af4886/docs/research/P1P2/REFLECTION_INDEX.md +0 -291
  444. package/plan/001_d3bb02af4886/docs/research/P1P2/REFLECTION_RESEARCH_REPORT.md +0 -1342
  445. package/plan/001_d3bb02af4886/docs/research/P1P2/RESEARCH_SUMMARY.md +0 -342
  446. package/plan/001_d3bb02af4886/docs/research/P1P2/anthropic-sdk.md +0 -174
  447. package/plan/001_d3bb02af4886/docs/research/P1P2/async-local-storage.md +0 -200
  448. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-code-patterns.md +0 -1205
  449. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-decision-matrix.md +0 -421
  450. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-implementation-guide.md +0 -1341
  451. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-integration-guide.md +0 -834
  452. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-patterns.md +0 -1468
  453. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-quick-reference.md +0 -558
  454. package/plan/001_d3bb02af4886/docs/research/P1P2/zod-schema.md +0 -152
  455. package/plan/001_d3bb02af4886/docs/research/P3P4/caching-lru.md +0 -116
  456. package/plan/001_d3bb02af4886/docs/research/P3P4/introspection-tools.md +0 -177
  457. package/plan/001_d3bb02af4886/docs/research/P3P4/reflection-patterns.md +0 -117
  458. package/plan/001_d3bb02af4886/docs/research/P4P5/RESEARCH_SUMMARY.md +0 -151
  459. package/plan/001_d3bb02af4886/docs/research/PROMISE_ALLSETTLED_QUICK_REF.md +0 -376
  460. package/plan/001_d3bb02af4886/docs/research/PROMISE_ALLSETTLED_RESEARCH.md +0 -1507
  461. package/plan/001_d3bb02af4886/docs/research/bugfix_typescript_patterns.md +0 -949
  462. package/plan/001_d3bb02af4886/docs/research/error-testing-research.md +0 -619
  463. package/plan/001_d3bb02af4886/docs/research/error_handling_patterns.md +0 -723
  464. package/plan/001_d3bb02af4886/docs/research/general/INTROSPECTION_RESEARCH_SUMMARY.md +0 -378
  465. package/plan/001_d3bb02af4886/docs/research/general/README-INTROSPECTION.md +0 -352
  466. package/plan/001_d3bb02af4886/docs/research/general/agent-introspection-patterns.md +0 -1085
  467. package/plan/001_d3bb02af4886/docs/research/general/introspection-security-guide.md +0 -984
  468. package/plan/001_d3bb02af4886/docs/research/general/introspection-tool-examples.md +0 -875
  469. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/PRP_TEMPLATE.md +0 -460
  470. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/QUICK_REFERENCE.md +0 -324
  471. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/README.md +0 -175
  472. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/RESEARCH_REPORT.md +0 -499
  473. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/SUMMARY.md +0 -163
  474. package/plan/001_d3bb02af4886/prd_snapshot.md +0 -543
  475. package/plan/bugfix/BUG_FIX_SUMMARY.md +0 -961
  476. package/scripts/generate-llms-full.ts +0 -206
  477. package/src/__tests__/adversarial/attachChild-performance.test.ts +0 -216
  478. package/src/__tests__/adversarial/circular-reference.test.ts +0 -101
  479. package/src/__tests__/adversarial/complex-circular-reference.test.ts +0 -139
  480. package/src/__tests__/adversarial/concurrent-task-failures.test.ts +0 -571
  481. package/src/__tests__/adversarial/deep-analysis.test.ts +0 -729
  482. package/src/__tests__/adversarial/deep-hierarchy-stress.test.ts +0 -213
  483. package/src/__tests__/adversarial/e2e-prd-validation.test.ts +0 -448
  484. package/src/__tests__/adversarial/edge-case.test.ts +0 -703
  485. package/src/__tests__/adversarial/error-merge-strategy.test.ts +0 -760
  486. package/src/__tests__/adversarial/incremental-performance.test.ts +0 -140
  487. package/src/__tests__/adversarial/node-map-update-benchmarks.test.ts +0 -457
  488. package/src/__tests__/adversarial/observer-propagation.test.ts +0 -487
  489. package/src/__tests__/adversarial/parent-validation.test.ts +0 -143
  490. package/src/__tests__/adversarial/prd-12-2-compliance.test.ts +0 -611
  491. package/src/__tests__/adversarial/prd-compliance.test.ts +0 -731
  492. package/src/__tests__/compatibility/backward-compatibility.test.ts +0 -1572
  493. package/src/__tests__/helpers/index.ts +0 -18
  494. package/src/__tests__/helpers/tree-verification.ts +0 -257
  495. package/src/__tests__/integration/agent-workflow.test.ts +0 -256
  496. package/src/__tests__/integration/bidirectional-consistency.test.ts +0 -847
  497. package/src/__tests__/integration/observer-logging.test.ts +0 -643
  498. package/src/__tests__/integration/tree-mirroring.test.ts +0 -151
  499. package/src/__tests__/integration/workflow-reparenting.test.ts +0 -303
  500. package/src/__tests__/unit/agent.test.ts +0 -169
  501. package/src/__tests__/unit/cache-key.test.ts +0 -182
  502. package/src/__tests__/unit/cache.test.ts +0 -172
  503. package/src/__tests__/unit/context.test.ts +0 -217
  504. package/src/__tests__/unit/decorators.test.ts +0 -100
  505. package/src/__tests__/unit/introspection-tools.test.ts +0 -277
  506. package/src/__tests__/unit/logger.test.ts +0 -293
  507. package/src/__tests__/unit/observable.test.ts +0 -321
  508. package/src/__tests__/unit/prompt.test.ts +0 -135
  509. package/src/__tests__/unit/reflection.test.ts +0 -210
  510. package/src/__tests__/unit/tree-debugger-incremental.test.ts +0 -170
  511. package/src/__tests__/unit/tree-debugger.test.ts +0 -85
  512. package/src/__tests__/unit/utils/workflow-error-utils.test.ts +0 -209
  513. package/src/__tests__/unit/workflow-detachChild.test.ts +0 -100
  514. package/src/__tests__/unit/workflow-emitEvent-childDetached.test.ts +0 -153
  515. package/src/__tests__/unit/workflow-isDescendantOf.test.ts +0 -180
  516. package/src/__tests__/unit/workflow.test.ts +0 -357
  517. package/src/cache/cache-key.ts +0 -244
  518. package/src/cache/cache.ts +0 -236
  519. package/src/core/agent.ts +0 -593
  520. package/src/core/event-tree.ts +0 -260
  521. package/src/core/logger.ts +0 -112
  522. package/src/core/mcp-handler.ts +0 -184
  523. package/src/core/prompt.ts +0 -150
  524. package/src/core/workflow-context.ts +0 -351
  525. package/src/core/workflow.ts +0 -540
  526. package/src/debugger/tree-debugger.ts +0 -255
  527. package/src/decorators/observed-state.ts +0 -95
  528. package/src/decorators/step.ts +0 -139
  529. package/src/decorators/task.ts +0 -159
  530. package/src/examples/tdd-orchestrator.ts +0 -65
  531. package/src/examples/test-cycle-workflow.ts +0 -64
  532. package/src/index.ts +0 -142
  533. package/src/reflection/reflection.ts +0 -407
  534. package/src/tools/index.ts +0 -36
  535. package/src/tools/introspection.ts +0 -464
  536. package/src/types/agent.ts +0 -90
  537. package/src/types/decorators.ts +0 -32
  538. package/src/types/error-strategy.ts +0 -13
  539. package/src/types/error.ts +0 -20
  540. package/src/types/events.ts +0 -75
  541. package/src/types/index.ts +0 -55
  542. package/src/types/logging.ts +0 -24
  543. package/src/types/observer.ts +0 -18
  544. package/src/types/prompt.ts +0 -40
  545. package/src/types/reflection.ts +0 -117
  546. package/src/types/sdk-primitives.ts +0 -128
  547. package/src/types/workflow-context.ts +0 -163
  548. package/src/types/workflow.ts +0 -37
  549. package/src/utils/id.ts +0 -11
  550. package/src/utils/index.ts +0 -4
  551. package/src/utils/observable.ts +0 -106
  552. package/src/utils/workflow-error-utils.ts +0 -56
  553. package/tsconfig.json +0 -22
  554. package/vitest.config.ts +0 -16
@@ -1,723 +0,0 @@
1
- # TypeScript Error Handling Best Practices Research
2
-
3
- ## Executive Summary
4
-
5
- This document compiles research findings on TypeScript error handling best practices, with specific focus on:
6
- 1. Error state capture patterns in async/try-catch contexts
7
- 2. Proper object state capture in error handlers
8
- 3. Error enrichment patterns in TypeScript
9
- 4. Common gotchas when using 'this' in catch blocks
10
- 5. WeakMap-based state capture considerations
11
-
12
- ---
13
-
14
- ## 1. Error State Capture Patterns in Async/Try-Catch Contexts
15
-
16
- ### Key Resources
17
-
18
- 1. **[A guide to async/await in TypeScript](https://blog.logrocket.com/async-await-typescript/)** - LogRocket Blog (Updated January 2025)
19
- - **Section: Error handling with try/catch**
20
- - **Section: Error handling using higher-order functions**
21
- - Comprehensive coverage of async/await error handling patterns
22
-
23
- 2. **[TypeScript Error Handling: Tips and Best Practices](https://hupp.tech/blog/typescript/typescript-error-handling-tips-and-best-practices/)** - Hupp Technologies (April 7, 2025)
24
- - **Section: Use try…catch Blocks Wisely**
25
- - Modern TypeScript error handling approaches
26
-
27
- 3. **[Control flow and error handling - JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Control_flow_and_error_handling)** - MDN Web Docs
28
- - **Section: try...catch statements**
29
- - Official documentation on error handling constructs
30
-
31
- ### Best Practices for State Capture in Async Contexts
32
-
33
- #### 1.1 Local Error Handling Pattern
34
-
35
- ```typescript
36
- async function fetchData(url: string): Promise<void> {
37
- try {
38
- const response = await fetch(url);
39
- if (!response.ok) {
40
- throw new Error(`HTTP Error: ${response.status}`);
41
- }
42
- const data = await response.json();
43
- console.log(data);
44
- } catch (error) {
45
- console.error('Error fetching data:', error);
46
- // State is captured locally in the error handler
47
- }
48
- }
49
- ```
50
-
51
- **Key Principles:**
52
- - Handle errors locally within the function where they occur
53
- - Allow functions to fail gracefully without crashing the application
54
- - Capture context-specific state in the catch block
55
-
56
- #### 1.2 Higher-Order Function Pattern for State Capture
57
-
58
- ```typescript
59
- // Wrapper function that preserves state context
60
- function handleAsyncErrors<T extends (...args: any[]) => Promise<any>>(
61
- asyncFn: T,
62
- ...args: Parameters<T>
63
- ): Promise<ReturnType<T> | null> {
64
- try {
65
- return await asyncFn(...args);
66
- } catch (error) {
67
- console.error(`Error in ${asyncFn.name}:`, error);
68
- return null;
69
- }
70
- }
71
-
72
- // Usage preserves state context
73
- const safeFetchEmployees = (url: string) => handleAsyncErrors(fetchEmployees, url);
74
- ```
75
-
76
- **Benefits:**
77
- - Centralizes error handling logic
78
- - Preserves state context through closure
79
- - Reduces code duplication
80
- - Maintains type safety
81
-
82
- #### 1.3 State Preservation in Sequential Operations
83
-
84
- ```typescript
85
- const runAsyncFunctions = async () => {
86
- try {
87
- const employees = await fetchAllEmployees(baseApi);
88
- // State is preserved between operations
89
- Promise.all(
90
- employees.map(async user => {
91
- const userName = await fetchEmployee(userApi, user.id);
92
- const emails = generateEmail(userName.name);
93
- return emails;
94
- })
95
- );
96
- } catch (error) {
97
- console.log(error);
98
- // Error has access to all state in the try block's scope
99
- }
100
- };
101
- ```
102
-
103
- ---
104
-
105
- ## 2. Object State Capture in Error Handlers
106
-
107
- ### Key Resources
108
-
109
- 1. **[Custom errors, extending Error](https://javascript.info/custom-errors)** - JavaScript.info
110
- - **Section: Extending Error**
111
- - **Section: Further inheritance**
112
- - Comprehensive guide on custom error classes with state
113
-
114
- 2. **[Error - JavaScript | MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error)** - MDN Web Docs
115
- - **Section: Custom error types**
116
- - **Section: Differentiate between similar errors**
117
- - Official documentation on error object patterns
118
-
119
- ### Best Practices for Capturing Object State
120
-
121
- #### 2.1 Custom Error Classes with State
122
-
123
- ```typescript
124
- class ValidationError extends Error {
125
- constructor(message: string) {
126
- super(message);
127
- this.name = 'ValidationError';
128
- }
129
- }
130
-
131
- class PropertyRequiredError extends ValidationError {
132
- constructor(property: string) {
133
- super("No property: " + property);
134
- this.name = 'PropertyRequiredError';
135
- this.property = property; // State captured in error object
136
- }
137
- }
138
-
139
- // Usage
140
- try {
141
- if (!user.age) {
142
- throw new PropertyRequiredError("age"); // State captured at throw site
143
- }
144
- } catch (err) {
145
- if (err instanceof PropertyRequiredError) {
146
- console.error("Invalid data:", err.message);
147
- console.error("Missing property:", err.property); // Access captured state
148
- }
149
- }
150
- ```
151
-
152
- #### 2.2 Error Enrichment with Context
153
-
154
- ```typescript
155
- class ContextualError extends Error {
156
- public context: Record<string, any>;
157
-
158
- constructor(message: string, context: Record<string, any>) {
159
- super(message);
160
- this.name = 'ContextualError';
161
- this.context = context; // Capture arbitrary state
162
- }
163
- }
164
-
165
- // Usage
166
- try {
167
- performOperation();
168
- } catch (error) {
169
- throw new ContextualError('Operation failed', {
170
- originalError: error,
171
- userId: user.id,
172
- timestamp: Date.now(),
173
- operationState: { /* ... */ }
174
- });
175
- }
176
- ```
177
-
178
- #### 2.3 Using the 'cause' Property (Modern Approach)
179
-
180
- ```typescript
181
- // Error cause chain
182
- try {
183
- doFailSomeWay();
184
- } catch (err) {
185
- throw new Error("Failed in some way", { cause: err });
186
- }
187
-
188
- try {
189
- doFailAnotherWay();
190
- } catch (err) {
191
- throw new Error("Failed in another way", { cause: err });
192
- }
193
-
194
- // Accessing the cause chain
195
- try {
196
- doWork();
197
- } catch (err) {
198
- switch (err.message) {
199
- case "Failed in some way":
200
- handleFailSomeWay(err.cause);
201
- break;
202
- case "Failed in another way":
203
- handleFailAnotherWay(err.cause);
204
- break;
205
- }
206
- }
207
- ```
208
-
209
- ---
210
-
211
- ## 3. Error Enrichment Patterns in TypeScript
212
-
213
- ### Key Resources
214
-
215
- 1. **[Handling errors like a pro in TypeScript](https://engineering.udacity.com/handling-errors-like-a-pro-in-typescript-d7a314ad4991)** - Udacity Engineering
216
- - Focus on functional error handling with Result Pattern
217
- - Transform error handling from exceptions to predictable patterns
218
-
219
- 2. **[Error Handling in TypeScript: Best Practices](https://medium.com/@arreyetta/error-handling-in-typescript-best-practices-80cdfe6d06db)** - Medium
220
- - Custom error types and type-safe error objects
221
- - Safe and predictable error handling approaches
222
-
223
- 3. **[The 5 Commandments of Clean Error Handling in TypeScript](https://backstage.orus.eu/the-5-commandments-of-clean-error-handling-in-typescript/)**
224
- - Make sure Errors are Errors (extend Error class)
225
- - Don't lose your stack trace
226
- - Use constant error messages
227
- - Provide the right amount of context
228
-
229
- ### Error Enrichment Techniques
230
-
231
- #### 3.1 Base Error Class Pattern
232
-
233
- ```typescript
234
- class MyError extends Error {
235
- constructor(message: string) {
236
- super(message);
237
- this.name = this.constructor.name; // Automatic name assignment
238
- }
239
- }
240
-
241
- class ValidationError extends MyError {
242
- constructor(message: string) {
243
- super(message);
244
- // Name automatically set to 'ValidationError'
245
- }
246
- }
247
- ```
248
-
249
- #### 3.2 Wrapper Exception Pattern
250
-
251
- ```typescript
252
- class ReadError extends Error {
253
- constructor(message: string, cause: Error) {
254
- super(message);
255
- this.cause = cause;
256
- this.name = 'ReadError';
257
- }
258
- }
259
-
260
- function readUser(json: string) {
261
- let user;
262
-
263
- try {
264
- user = JSON.parse(json);
265
- } catch (err) {
266
- if (err instanceof SyntaxError) {
267
- throw new ReadError("Syntax Error", err); // Wrap low-level error
268
- } else {
269
- throw err;
270
- }
271
- }
272
-
273
- try {
274
- validateUser(user);
275
- } catch (err) {
276
- if (err instanceof ValidationError) {
277
- throw new ReadError("Validation Error", err); // Wrap and enrich
278
- } else {
279
- throw err;
280
- }
281
- }
282
- }
283
- ```
284
-
285
- #### 3.3 Result Type Pattern (Functional Approach)
286
-
287
- ```typescript
288
- type Result<T, E = Error> =
289
- | { success: true; data: T }
290
- | { success: false; error: E };
291
-
292
- function performTask(): Result<number, string> {
293
- if (Math.random() > 0.5) {
294
- return { success: true, data: 42 };
295
- } else {
296
- return { success: false, error: 'Task failed' };
297
- }
298
- }
299
-
300
- // Usage
301
- const result = performTask();
302
- if (result.success) {
303
- console.log('Data:', result.data);
304
- } else {
305
- console.error('Error:', result.error);
306
- }
307
- ```
308
-
309
- #### 3.4 Union Types for Error Responses
310
-
311
- ```typescript
312
- type Result<T> = { success: true; data: T } | { success: false; error: string };
313
-
314
- function performTask(): Result<number> {
315
- if (Math.random() > 0.5) {
316
- return { success: true, data: 42 };
317
- } else {
318
- return { success: false, error: 'Task failed' };
319
- }
320
- }
321
-
322
- const result = performTask();
323
- if (result.success) {
324
- console.log('Data:', result.data);
325
- } else {
326
- console.error('Error:', result.error);
327
- }
328
- ```
329
-
330
- ---
331
-
332
- ## 4. Common Gotchas with 'this' in Catch Blocks
333
-
334
- ### Key Resources
335
-
336
- 1. **[Can you bind 'this' in an arrow function?](https://stackoverflow.com/questions/33308121/can-you-bind-this-in-an-arrow-function)** - Stack Overflow
337
- - Cannot rebind `this` in an arrow function
338
- - Always defined as the context in which it was defined
339
-
340
- 2. **[Arrow function expressions - JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions)** - MDN Web Docs
341
- - **Section: Lexical this**
342
- - Arrow functions have semantic differences and deliberate limitations
343
-
344
- 3. **[Access "this" in a Promise's Catch Block](https://www.pluralsight.com/resources/blog/guides/access-this-in-a-promises-catch-block)** - Pluralsight
345
- - Using arrow functions to access `this` in catch blocks
346
- - Context preservation patterns
347
-
348
- ### Common Pitfalls and Solutions
349
-
350
- #### 4.1 Traditional Function in Catch Block (Problematic)
351
-
352
- ```typescript
353
- class MyClass {
354
- private value: number = 42;
355
-
356
- async methodWithError() {
357
- try {
358
- await someAsyncOperation();
359
- } catch (error) {
360
- // PROBLEM: 'this' may not be what you expect
361
- function handleError() {
362
- console.log(this.value); // undefined or wrong context
363
- }
364
- handleError();
365
- }
366
- }
367
- }
368
- ```
369
-
370
- #### 4.2 Arrow Function Solution (Lexical this)
371
-
372
- ```typescript
373
- class MyClass {
374
- private value: number = 42;
375
-
376
- async methodWithError() {
377
- try {
378
- await someAsyncOperation();
379
- } catch (error) {
380
- // SOLUTION: Arrow function preserves lexical 'this'
381
- const handleError = () => {
382
- console.log(this.value); // 42 - correct context
383
- };
384
- handleError();
385
- }
386
- }
387
- }
388
- ```
389
-
390
- #### 4.3 Promise Catch with Arrow Function
391
-
392
- ```typescript
393
- class MyClass {
394
- private data: string = "important";
395
-
396
- methodWithPromise() {
397
- Promise.resolve()
398
- .then(() => {
399
- console.log(this.data); // Works - arrow function preserves 'this'
400
- })
401
- .catch((error) => {
402
- console.error(error); // 'this' is still preserved
403
- console.log(this.data); // Works - arrow function in catch
404
- });
405
- }
406
- }
407
- ```
408
-
409
- #### 4.4 Manual Binding Alternative
410
-
411
- ```typescript
412
- class MyClass {
413
- private value: number = 42;
414
-
415
- async methodWithError() {
416
- try {
417
- await someAsyncOperation();
418
- } catch (error) {
419
- // ALTERNATIVE: Manually bind 'this'
420
- function handleError(this: MyClass) {
421
- console.log(this.value); // 42 - explicit binding
422
- }
423
- handleError.call(this);
424
- }
425
- }
426
- }
427
- ```
428
-
429
- #### 4.5 Async Method Context Preservation
430
-
431
- ```typescript
432
- class Service {
433
- private serviceName: string = "MyService";
434
-
435
- async execute() {
436
- try {
437
- await this riskyOperation();
438
- } catch (error) {
439
- // 'this' is preserved in async method catch blocks
440
- console.error(`Error in ${this.serviceName}:`, error);
441
- this.logError(error); // 'this' works correctly
442
- }
443
- }
444
-
445
- private async riskyOperation() {
446
- // ...
447
- }
448
-
449
- private logError(error: any) {
450
- // ...
451
- }
452
- }
453
- ```
454
-
455
- ### Key Takeaways for 'this' in Error Handlers
456
-
457
- 1. **Arrow functions preserve lexical `this`** - They inherit `this` from their surrounding scope
458
- 2. **Traditional functions create new `this` context** - They have their own dynamic `this` binding
459
- 3. **Async methods preserve `this`** - The async/await pattern maintains class instance context
460
- 4. **Arrow functions cannot be rebound** - Using `.bind()`, `.call()`, or `.apply()` has no effect
461
- 5. **Prefer arrow functions in catch blocks** - When you need access to class instance state
462
-
463
- ---
464
-
465
- ## 5. WeakMap-Based State Capture Considerations
466
-
467
- ### Key Resources
468
-
469
- 1. **[WeakMap - JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap)** - MDN Web Docs
470
- - **Section: Description**
471
- - Keys must be objects (not primitives)
472
- - Holds weak references to keys
473
- - Allows garbage collection when keys are no longer referenced
474
-
475
- 2. **Gradual typing research papers** - WeakMap mentioned as primitive for ES6
476
- - Helps "sidestep problems" in gradual typing scenarios
477
- - Useful for handling type system limitations
478
-
479
- ### WeakMap Characteristics for State Capture
480
-
481
- ```typescript
482
- // WeakMap for state capture
483
- const observedState = new WeakMap<object, any>();
484
-
485
- function captureState(obj: object, state: any) {
486
- observedState.set(obj, state);
487
- }
488
-
489
- function getObservedState(obj: object): any | undefined {
490
- return observedState.get(obj);
491
- }
492
- ```
493
-
494
- ### Benefits of WeakMap for Error State Capture
495
-
496
- 1. **Automatic Memory Management**
497
- - Objects can be garbage collected when no longer referenced
498
- - Prevents memory leaks in long-running applications
499
- - Ideal for temporary error state associations
500
-
501
- 2. **Privacy**
502
- - WeakMap entries are not enumerable
503
- - Provides true private data storage
504
- - Cannot be accessed through reflection
505
-
506
- 3. **No Memory Leak Risk**
507
- - Unlike regular Map, WeakMap doesn't prevent garbage collection
508
- - Safe to use for associating error metadata with objects
509
-
510
- ### Common Use Cases
511
-
512
- ```typescript
513
- // 1. Caching computed error state
514
- const errorCache = new WeakMap<object, ErrorState>();
515
-
516
- function getErrorState(obj: object): ErrorState {
517
- let state = errorCache.get(obj);
518
- if (!state) {
519
- state = computeErrorState(obj);
520
- errorCache.set(obj, state);
521
- }
522
- return state;
523
- }
524
-
525
- // 2. DOM node metadata storage
526
- const nodeErrors = new WeakMap<Element, ErrorInfo>();
527
-
528
- function trackNodeError(element: Element, error: Error) {
529
- nodeErrors.set(element, {
530
- message: error.message,
531
- timestamp: Date.now(),
532
- stack: error.stack
533
- });
534
- }
535
-
536
- // 3. Instance-private error data
537
- class MyClass {
538
- private errors = new WeakMap<object, ErrorDetails>();
539
-
540
- addError(target: object, details: ErrorDetails) {
541
- this.errors.set(target, details);
542
- }
543
- }
544
- ```
545
-
546
- ### Potential Gotchas
547
-
548
- 1. **Keys must be objects** - Primitives cannot be used as WeakMap keys
549
- 2. **No size property** - Cannot determine how many entries exist
550
- 3. **Not iterable** - Cannot use for...of or spread operator
551
- 4. **No clear() method** - Must manually remove entries
552
- 5. **Weak references** - Entries can disappear unexpectedly during garbage collection
553
-
554
- ### Best Practices for WeakMap in Error Handling
555
-
556
- ```typescript
557
- // GOOD: WeakMap for temporary error state
558
- class ErrorTracker {
559
- private state = new WeakMap<object, ErrorContext>();
560
-
561
- capture(obj: object, context: ErrorContext) {
562
- this.state.set(obj, context);
563
- }
564
-
565
- getError(obj: object): ErrorContext | undefined {
566
- return this.state.get(obj);
567
- }
568
- }
569
-
570
- // GOOD: Automatic cleanup when objects are garbage collected
571
- const errorMetadata = new WeakMap<object, ErrorMetadata>();
572
-
573
- function attachErrorMetadata(obj: object, metadata: ErrorMetadata) {
574
- // Metadata automatically cleaned up when obj is garbage collected
575
- errorMetadata.set(obj, metadata);
576
- }
577
-
578
- // AVOID: Using WeakMap when you need persistent state
579
- // Use regular Map instead if state must persist
580
- ```
581
-
582
- ---
583
-
584
- ## 6. Production-Ready Error Handling Patterns
585
-
586
- ### Key Resources
587
-
588
- 1. **[TypeScript Error Handling: Tips and Best Practices](https://hupp.tech/blog/typescript/typescript-error-handling-tips-and-best-practices/)** - Hupp Technologies
589
- - **Section: Implement Centralized Error Handling**
590
- - **Section: Integrate Error Monitoring Tools**
591
-
592
- ### Centralized Error Handling
593
-
594
- ```typescript
595
- // Express middleware example
596
- import express, { Request, Response, NextFunction } from 'express';
597
-
598
- const app = express();
599
-
600
- app.use((err: Error, req: Request, res: Response, next: NextFunction) => {
601
- console.error('Error:', err.message);
602
- res.status(500).json({ error: err.message });
603
- });
604
- ```
605
-
606
- ### Error Monitoring Integration
607
-
608
- ```typescript
609
- import * as Sentry from '@sentry/node';
610
-
611
- Sentry.init({ dsn: 'your-dsn' });
612
-
613
- try {
614
- // Risky operation
615
- } catch (error) {
616
- Sentry.captureException(error);
617
- console.error('Error captured:', error);
618
- }
619
- ```
620
-
621
- ### Exhaustive Error Handling with 'never'
622
-
623
- ```typescript
624
- type AppError = ValidationError | SyntaxError;
625
-
626
- function handleAppError(error: AppError): void {
627
- switch (error.name) {
628
- case 'ValidationError':
629
- console.error('Validation error:', error.message);
630
- break;
631
- case 'SyntaxError':
632
- console.error('Syntax error:', error.message);
633
- break;
634
- default:
635
- const exhaustiveCheck: never = error;
636
- throw new Error(`Unhandled error: ${exhaustiveCheck}`);
637
- }
638
- }
639
- ```
640
-
641
- ---
642
-
643
- ## 7. Summary of Key Findings
644
-
645
- ### Error State Capture Patterns
646
- - **Local error handling** in async functions preserves state context
647
- - **Higher-order functions** provide centralized state preservation
648
- - **Sequential operations** maintain state through try-catch scope
649
- - **WeakMap** offers automatic cleanup for temporary error state
650
-
651
- ### Object State Capture Best Practices
652
- - **Custom error classes** capture state at throw site
653
- - **Error enrichment** via context properties and cause chains
654
- - **Wrapper exceptions** transform low-level errors into high-level ones
655
- - **Result types** provide functional alternative to exceptions
656
-
657
- ### 'this' Context in Catch Blocks
658
- - **Arrow functions** preserve lexical `this` binding
659
- - **Traditional functions** create new `this` context (gotcha!)
660
- - **Async methods** maintain class instance context
661
- - **Manual binding** available via `.call()` or `.apply()`
662
-
663
- ### WeakMap Considerations
664
- - **Automatic garbage collection** prevents memory leaks
665
- - **Object-only keys** restrict usage patterns
666
- - **Non-enumerable** entries provide privacy
667
- - **No iteration methods** limit debugging capabilities
668
- - **Ideal for temporary error metadata** associations
669
-
670
- ### Modern TypeScript Patterns (2025)
671
- - **Result/Either pattern** gaining popularity as alternative to try-catch
672
- - **Union types** for explicit error handling
673
- - **never type** for exhaustive error checking
674
- - **Error cause property** for error chaining
675
- - **Functional error handling** complementing traditional exceptions
676
-
677
- ---
678
-
679
- ## 8. Actionable Recommendations
680
-
681
- 1. **Use arrow functions in catch blocks** when you need access to class instance state
682
- 2. **Implement custom error classes** to capture context-specific state
683
- 3. **Consider WeakMap** for temporary error state that should be garbage collected
684
- 4. **Use the cause property** for error enrichment and chaining
685
- 5. **Implement centralized error handling** to reduce code duplication
686
- 6. **Integrate error monitoring** tools for production debugging
687
- 7. **Consider Result types** for functional error handling patterns
688
- 8. **Use never type** to ensure exhaustive error handling
689
-
690
- ---
691
-
692
- ## Sources
693
-
694
- ### Primary Documentation
695
- - [Error - JavaScript | MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error)
696
- - [Control flow and error handling - JavaScript | MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Control_flow_and_error_handling)
697
- - [Custom errors, extending Error - JavaScript.info](https://javascript.info/custom-errors)
698
- - [Arrow function expressions - JavaScript | MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions)
699
-
700
- ### TypeScript-Specific Resources
701
- - [TypeScript Error Handling: Tips and Best Practices - Hupp Technologies](https://hupp.tech/blog/typescript/typescript-error-handling-tips-and-best-practices/)
702
- - [A guide to async/await in TypeScript - LogRocket Blog](https://blog.logrocket.com/async-await-typescript/)
703
- - [How to use a try-catch block in TypeScript - Convex](https://www.convex.dev/typescript/best-practices/error-handling-debugging/typescript-try-catch)
704
-
705
- ### Error Enrichment Patterns
706
- - [Handling errors like a pro in TypeScript - Udacity Engineering](https://engineering.udacity.com/handling-errors-like-a-pro-in-typescript-d7a314ad4991)
707
- - [Error Handling in TypeScript: Best Practices - Medium](https://medium.com/@arreyetta/error-handling-in-typescript-best-practices-80cdfe6d06db)
708
- - [The 5 Commandments of Clean Error Handling in TypeScript](https://backstage.orus.eu/the-5-commandments-of-clean-error-handling-in-typescript/)
709
-
710
- ### 'this' Context Resources
711
- - [Can you bind 'this' in an arrow function? - Stack Overflow](https://stackoverflow.com/questions/33308121/can-you-bind-this-in-an-arrow-function)
712
- - [Access "this" in a Promise's Catch Block - Pluralsight](https://www.pluralsight.com/resources/blog/guides/access-this-in-a-promises-catch-block)
713
- - [this - JavaScript | MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this)
714
-
715
- ### Modern Patterns (2024-2025)
716
- - [I Stopped Using Try-Catch in TypeScript and You Should Too - UserJot](https://userjot.com/blog/typescript-error-handling-return-vs-throw)
717
- - [No more Try/Catch: a better way to handle errors in TypeScript - Dev.to](https://dev.to/noah-00/no-more-trycatch-a-better-way-to-handle-errors-in-typescript-5hbd)
718
- - [Async/Await and Error Handling - JavaScript Plain English](https://javascript.plainenglish.io/should-you-use-try-catch-with-async-await-let-me-clear-this-up-78a13aa10568)
719
-
720
- ---
721
-
722
- *Research compiled on January 10, 2026*
723
- *Focus: TypeScript error handling best practices for async contexts, state capture, and WeakMap usage*