tracelattice 1.2.5

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 (294) hide show
  1. package/LICENSE +24 -0
  2. package/README.md +112 -0
  3. package/dist/ServerConfig.d.ts +229 -0
  4. package/dist/ServerConfig.d.ts.map +1 -0
  5. package/dist/ServerConfig.js +121 -0
  6. package/dist/ServerConfig.js.map +1 -0
  7. package/dist/__tests__/base-registry.test.d.ts +2 -0
  8. package/dist/__tests__/base-registry.test.d.ts.map +1 -0
  9. package/dist/__tests__/base-transport-cov.test.d.ts +2 -0
  10. package/dist/__tests__/base-transport-cov.test.d.ts.map +1 -0
  11. package/dist/__tests__/base-transport.test.d.ts +2 -0
  12. package/dist/__tests__/base-transport.test.d.ts.map +1 -0
  13. package/dist/__tests__/config-loader.test.d.ts +2 -0
  14. package/dist/__tests__/config-loader.test.d.ts.map +1 -0
  15. package/dist/__tests__/connection-pool-cov.test.d.ts +2 -0
  16. package/dist/__tests__/connection-pool-cov.test.d.ts.map +1 -0
  17. package/dist/__tests__/connection-pool.test.d.ts +2 -0
  18. package/dist/__tests__/connection-pool.test.d.ts.map +1 -0
  19. package/dist/__tests__/container.test.d.ts +2 -0
  20. package/dist/__tests__/container.test.d.ts.map +1 -0
  21. package/dist/__tests__/crud.test.d.ts +2 -0
  22. package/dist/__tests__/crud.test.d.ts.map +1 -0
  23. package/dist/__tests__/discovery-cache.test.d.ts +2 -0
  24. package/dist/__tests__/discovery-cache.test.d.ts.map +1 -0
  25. package/dist/__tests__/errors.test.d.ts +2 -0
  26. package/dist/__tests__/errors.test.d.ts.map +1 -0
  27. package/dist/__tests__/factories.test.d.ts +2 -0
  28. package/dist/__tests__/factories.test.d.ts.map +1 -0
  29. package/dist/__tests__/health-checker-cov.test.d.ts +2 -0
  30. package/dist/__tests__/health-checker-cov.test.d.ts.map +1 -0
  31. package/dist/__tests__/health-checker.test.d.ts +2 -0
  32. package/dist/__tests__/health-checker.test.d.ts.map +1 -0
  33. package/dist/__tests__/helpers/factories.d.ts +36 -0
  34. package/dist/__tests__/helpers/factories.d.ts.map +1 -0
  35. package/dist/__tests__/helpers/index.d.ts +3 -0
  36. package/dist/__tests__/helpers/index.d.ts.map +1 -0
  37. package/dist/__tests__/helpers/timers.d.ts +4 -0
  38. package/dist/__tests__/helpers/timers.d.ts.map +1 -0
  39. package/dist/__tests__/history-manager.test.d.ts +2 -0
  40. package/dist/__tests__/history-manager.test.d.ts.map +1 -0
  41. package/dist/__tests__/http-helpers-cov.test.d.ts +2 -0
  42. package/dist/__tests__/http-helpers-cov.test.d.ts.map +1 -0
  43. package/dist/__tests__/http-transport-cov.test.d.ts +2 -0
  44. package/dist/__tests__/http-transport-cov.test.d.ts.map +1 -0
  45. package/dist/__tests__/http-transport.test.d.ts +2 -0
  46. package/dist/__tests__/http-transport.test.d.ts.map +1 -0
  47. package/dist/__tests__/input-normalizer.test.d.ts +8 -0
  48. package/dist/__tests__/input-normalizer.test.d.ts.map +1 -0
  49. package/dist/__tests__/integration.test.d.ts +2 -0
  50. package/dist/__tests__/integration.test.d.ts.map +1 -0
  51. package/dist/__tests__/lib-server.test.d.ts +2 -0
  52. package/dist/__tests__/lib-server.test.d.ts.map +1 -0
  53. package/dist/__tests__/memory-persistence.test.d.ts +2 -0
  54. package/dist/__tests__/memory-persistence.test.d.ts.map +1 -0
  55. package/dist/__tests__/metrics-integration.test.d.ts +2 -0
  56. package/dist/__tests__/metrics-integration.test.d.ts.map +1 -0
  57. package/dist/__tests__/persistence.test.d.ts +2 -0
  58. package/dist/__tests__/persistence.test.d.ts.map +1 -0
  59. package/dist/__tests__/reasoning-integration.test.d.ts +11 -0
  60. package/dist/__tests__/reasoning-integration.test.d.ts.map +1 -0
  61. package/dist/__tests__/reasoning-types.test.d.ts +2 -0
  62. package/dist/__tests__/reasoning-types.test.d.ts.map +1 -0
  63. package/dist/__tests__/request-context.test.d.ts +2 -0
  64. package/dist/__tests__/request-context.test.d.ts.map +1 -0
  65. package/dist/__tests__/sanitize.test.d.ts +2 -0
  66. package/dist/__tests__/sanitize.test.d.ts.map +1 -0
  67. package/dist/__tests__/schema.test.d.ts +2 -0
  68. package/dist/__tests__/schema.test.d.ts.map +1 -0
  69. package/dist/__tests__/sequentialthinking-tools.test.d.ts +2 -0
  70. package/dist/__tests__/sequentialthinking-tools.test.d.ts.map +1 -0
  71. package/dist/__tests__/server-config.test.d.ts +2 -0
  72. package/dist/__tests__/server-config.test.d.ts.map +1 -0
  73. package/dist/__tests__/skill-discovery.test.d.ts +2 -0
  74. package/dist/__tests__/skill-discovery.test.d.ts.map +1 -0
  75. package/dist/__tests__/skill-registry.test.d.ts +2 -0
  76. package/dist/__tests__/skill-registry.test.d.ts.map +1 -0
  77. package/dist/__tests__/skill-watcher.test.d.ts +2 -0
  78. package/dist/__tests__/skill-watcher.test.d.ts.map +1 -0
  79. package/dist/__tests__/sqlite-persistence.test.d.ts +2 -0
  80. package/dist/__tests__/sqlite-persistence.test.d.ts.map +1 -0
  81. package/dist/__tests__/sse-transport-cov.test.d.ts +2 -0
  82. package/dist/__tests__/sse-transport-cov.test.d.ts.map +1 -0
  83. package/dist/__tests__/sse-transport.test.d.ts +2 -0
  84. package/dist/__tests__/sse-transport.test.d.ts.map +1 -0
  85. package/dist/__tests__/streamable-http-cov.test.d.ts +2 -0
  86. package/dist/__tests__/streamable-http-cov.test.d.ts.map +1 -0
  87. package/dist/__tests__/streamable-http-transport.test.d.ts +2 -0
  88. package/dist/__tests__/streamable-http-transport.test.d.ts.map +1 -0
  89. package/dist/__tests__/structured-logger.test.d.ts +2 -0
  90. package/dist/__tests__/structured-logger.test.d.ts.map +1 -0
  91. package/dist/__tests__/thought-evaluator.test.d.ts +2 -0
  92. package/dist/__tests__/thought-evaluator.test.d.ts.map +1 -0
  93. package/dist/__tests__/thought-formatter.test.d.ts +2 -0
  94. package/dist/__tests__/thought-formatter.test.d.ts.map +1 -0
  95. package/dist/__tests__/thought-processor.test.d.ts +8 -0
  96. package/dist/__tests__/thought-processor.test.d.ts.map +1 -0
  97. package/dist/__tests__/tool-registry-cov.test.d.ts +2 -0
  98. package/dist/__tests__/tool-registry-cov.test.d.ts.map +1 -0
  99. package/dist/__tests__/tool-registry.test.d.ts +2 -0
  100. package/dist/__tests__/tool-registry.test.d.ts.map +1 -0
  101. package/dist/__tests__/tool-watcher.test.d.ts +2 -0
  102. package/dist/__tests__/tool-watcher.test.d.ts.map +1 -0
  103. package/dist/__tests__/worker-manager-cov.test.d.ts +2 -0
  104. package/dist/__tests__/worker-manager-cov.test.d.ts.map +1 -0
  105. package/dist/__tests__/worker-manager.test.d.ts +2 -0
  106. package/dist/__tests__/worker-manager.test.d.ts.map +1 -0
  107. package/dist/cache/DiscoveryCache.d.ts +269 -0
  108. package/dist/cache/DiscoveryCache.d.ts.map +1 -0
  109. package/dist/cache/DiscoveryCache.js +100 -0
  110. package/dist/cache/DiscoveryCache.js.map +1 -0
  111. package/dist/cli.d.ts +3 -0
  112. package/dist/cli.d.ts.map +1 -0
  113. package/dist/cli.js +114 -0
  114. package/dist/cli.js.map +1 -0
  115. package/dist/cluster/WorkerManager.d.ts +166 -0
  116. package/dist/cluster/WorkerManager.d.ts.map +1 -0
  117. package/dist/cluster/WorkerManager.js +202 -0
  118. package/dist/cluster/WorkerManager.js.map +1 -0
  119. package/dist/cluster/worker.d.ts +11 -0
  120. package/dist/cluster/worker.d.ts.map +1 -0
  121. package/dist/cluster/worker.js +36 -0
  122. package/dist/cluster/worker.js.map +1 -0
  123. package/dist/config/ConfigLoader.d.ts +224 -0
  124. package/dist/config/ConfigLoader.d.ts.map +1 -0
  125. package/dist/config/ConfigLoader.js +85 -0
  126. package/dist/config/ConfigLoader.js.map +1 -0
  127. package/dist/context/RequestContext.d.ts +61 -0
  128. package/dist/context/RequestContext.d.ts.map +1 -0
  129. package/dist/context/RequestContext.js +17 -0
  130. package/dist/context/RequestContext.js.map +1 -0
  131. package/dist/contracts/index.d.ts +10 -0
  132. package/dist/contracts/index.d.ts.map +1 -0
  133. package/dist/contracts/index.js +1 -0
  134. package/dist/contracts/interfaces.d.ts +107 -0
  135. package/dist/contracts/interfaces.d.ts.map +1 -0
  136. package/dist/contracts/interfaces.js +1 -0
  137. package/dist/core/HistoryManager.d.ts +514 -0
  138. package/dist/core/HistoryManager.d.ts.map +1 -0
  139. package/dist/core/HistoryManager.js +331 -0
  140. package/dist/core/HistoryManager.js.map +1 -0
  141. package/dist/core/IHistoryManager.d.ts +100 -0
  142. package/dist/core/IHistoryManager.d.ts.map +1 -0
  143. package/dist/core/IHistoryManager.js +1 -0
  144. package/dist/core/InputNormalizer.d.ts +139 -0
  145. package/dist/core/InputNormalizer.d.ts.map +1 -0
  146. package/dist/core/InputNormalizer.js +101 -0
  147. package/dist/core/InputNormalizer.js.map +1 -0
  148. package/dist/core/ThoughtEvaluator.d.ts +127 -0
  149. package/dist/core/ThoughtEvaluator.d.ts.map +1 -0
  150. package/dist/core/ThoughtEvaluator.js +346 -0
  151. package/dist/core/ThoughtEvaluator.js.map +1 -0
  152. package/dist/core/ThoughtFormatter.d.ts +133 -0
  153. package/dist/core/ThoughtFormatter.d.ts.map +1 -0
  154. package/dist/core/ThoughtFormatter.js +70 -0
  155. package/dist/core/ThoughtFormatter.js.map +1 -0
  156. package/dist/core/ThoughtProcessor.d.ts +218 -0
  157. package/dist/core/ThoughtProcessor.d.ts.map +1 -0
  158. package/dist/core/ThoughtProcessor.js +205 -0
  159. package/dist/core/ThoughtProcessor.js.map +1 -0
  160. package/dist/core/reasoning.d.ts +169 -0
  161. package/dist/core/reasoning.d.ts.map +1 -0
  162. package/dist/core/reasoning.js +1 -0
  163. package/dist/core/step.d.ts +45 -0
  164. package/dist/core/step.d.ts.map +1 -0
  165. package/dist/core/step.js +1 -0
  166. package/dist/core/thought.d.ts +190 -0
  167. package/dist/core/thought.d.ts.map +1 -0
  168. package/dist/core/thought.js +1 -0
  169. package/dist/di/Container.d.ts +226 -0
  170. package/dist/di/Container.d.ts.map +1 -0
  171. package/dist/di/Container.js +96 -0
  172. package/dist/di/Container.js.map +1 -0
  173. package/dist/di/ServiceRegistry.d.ts +32 -0
  174. package/dist/di/ServiceRegistry.d.ts.map +1 -0
  175. package/dist/di/ServiceRegistry.js +1 -0
  176. package/dist/errors.d.ts +482 -0
  177. package/dist/errors.d.ts.map +1 -0
  178. package/dist/errors.js +108 -0
  179. package/dist/errors.js.map +1 -0
  180. package/dist/health/HealthChecker.d.ts +73 -0
  181. package/dist/health/HealthChecker.d.ts.map +1 -0
  182. package/dist/health/HealthChecker.js +69 -0
  183. package/dist/health/HealthChecker.js.map +1 -0
  184. package/dist/index.d.ts +2 -0
  185. package/dist/index.d.ts.map +1 -0
  186. package/dist/index.js +1 -0
  187. package/dist/lib.d.ts +205 -0
  188. package/dist/lib.d.ts.map +1 -0
  189. package/dist/lib.js +219 -0
  190. package/dist/lib.js.map +1 -0
  191. package/dist/logger/NullLogger.d.ts +154 -0
  192. package/dist/logger/NullLogger.d.ts.map +1 -0
  193. package/dist/logger/NullLogger.js +24 -0
  194. package/dist/logger/NullLogger.js.map +1 -0
  195. package/dist/logger/StructuredLogger.d.ts +327 -0
  196. package/dist/logger/StructuredLogger.d.ts.map +1 -0
  197. package/dist/logger/StructuredLogger.js +72 -0
  198. package/dist/logger/StructuredLogger.js.map +1 -0
  199. package/dist/metrics/__tests__/metrics.test.d.ts +2 -0
  200. package/dist/metrics/__tests__/metrics.test.d.ts.map +1 -0
  201. package/dist/metrics/metrics.impl.d.ts +252 -0
  202. package/dist/metrics/metrics.impl.d.ts.map +1 -0
  203. package/dist/metrics/metrics.impl.js +197 -0
  204. package/dist/metrics/metrics.impl.js.map +1 -0
  205. package/dist/persistence/FilePersistence.d.ts +66 -0
  206. package/dist/persistence/FilePersistence.d.ts.map +1 -0
  207. package/dist/persistence/FilePersistence.js +132 -0
  208. package/dist/persistence/FilePersistence.js.map +1 -0
  209. package/dist/persistence/MemoryPersistence.d.ts +68 -0
  210. package/dist/persistence/MemoryPersistence.d.ts.map +1 -0
  211. package/dist/persistence/MemoryPersistence.js +51 -0
  212. package/dist/persistence/MemoryPersistence.js.map +1 -0
  213. package/dist/persistence/PersistenceBackend.d.ts +69 -0
  214. package/dist/persistence/PersistenceBackend.d.ts.map +1 -0
  215. package/dist/persistence/PersistenceBackend.js +1 -0
  216. package/dist/persistence/PersistenceFactory.d.ts +21 -0
  217. package/dist/persistence/PersistenceFactory.d.ts.map +1 -0
  218. package/dist/persistence/PersistenceFactory.js +25 -0
  219. package/dist/persistence/PersistenceFactory.js.map +1 -0
  220. package/dist/persistence/SqlitePersistence.d.ts +60 -0
  221. package/dist/persistence/SqlitePersistence.d.ts.map +1 -0
  222. package/dist/persistence/SqlitePersistence.js +136 -0
  223. package/dist/persistence/SqlitePersistence.js.map +1 -0
  224. package/dist/pool/ConnectionPool.d.ts +215 -0
  225. package/dist/pool/ConnectionPool.d.ts.map +1 -0
  226. package/dist/pool/ConnectionPool.js +187 -0
  227. package/dist/pool/ConnectionPool.js.map +1 -0
  228. package/dist/registry/BaseRegistry.d.ts +203 -0
  229. package/dist/registry/BaseRegistry.d.ts.map +1 -0
  230. package/dist/registry/BaseRegistry.js +165 -0
  231. package/dist/registry/BaseRegistry.js.map +1 -0
  232. package/dist/registry/SkillRegistry.d.ts +69 -0
  233. package/dist/registry/SkillRegistry.d.ts.map +1 -0
  234. package/dist/registry/SkillRegistry.js +88 -0
  235. package/dist/registry/SkillRegistry.js.map +1 -0
  236. package/dist/registry/ToolRegistry.d.ts +69 -0
  237. package/dist/registry/ToolRegistry.d.ts.map +1 -0
  238. package/dist/registry/ToolRegistry.js +93 -0
  239. package/dist/registry/ToolRegistry.js.map +1 -0
  240. package/dist/sanitize.d.ts +63 -0
  241. package/dist/sanitize.d.ts.map +1 -0
  242. package/dist/sanitize.js +14 -0
  243. package/dist/sanitize.js.map +1 -0
  244. package/dist/schema.d.ts +531 -0
  245. package/dist/schema.d.ts.map +1 -0
  246. package/dist/schema.js +204 -0
  247. package/dist/schema.js.map +1 -0
  248. package/dist/telemetry/Telemetry.d.ts +36 -0
  249. package/dist/telemetry/Telemetry.d.ts.map +1 -0
  250. package/dist/telemetry/Telemetry.js +68 -0
  251. package/dist/telemetry/Telemetry.js.map +1 -0
  252. package/dist/telemetry/__tests__/Telemetry.test.d.ts +2 -0
  253. package/dist/telemetry/__tests__/Telemetry.test.d.ts.map +1 -0
  254. package/dist/transport/BaseTransport.d.ts +184 -0
  255. package/dist/transport/BaseTransport.d.ts.map +1 -0
  256. package/dist/transport/BaseTransport.js +200 -0
  257. package/dist/transport/BaseTransport.js.map +1 -0
  258. package/dist/transport/HttpHelpers.d.ts +60 -0
  259. package/dist/transport/HttpHelpers.d.ts.map +1 -0
  260. package/dist/transport/HttpHelpers.js +50 -0
  261. package/dist/transport/HttpHelpers.js.map +1 -0
  262. package/dist/transport/HttpTransport.d.ts +134 -0
  263. package/dist/transport/HttpTransport.d.ts.map +1 -0
  264. package/dist/transport/HttpTransport.js +175 -0
  265. package/dist/transport/HttpTransport.js.map +1 -0
  266. package/dist/transport/SseTransport.d.ts +133 -0
  267. package/dist/transport/SseTransport.d.ts.map +1 -0
  268. package/dist/transport/SseTransport.js +318 -0
  269. package/dist/transport/SseTransport.js.map +1 -0
  270. package/dist/transport/StreamableHttpTransport.d.ts +224 -0
  271. package/dist/transport/StreamableHttpTransport.d.ts.map +1 -0
  272. package/dist/transport/StreamableHttpTransport.js +407 -0
  273. package/dist/transport/StreamableHttpTransport.js.map +1 -0
  274. package/dist/types/disposable.d.ts +22 -0
  275. package/dist/types/disposable.d.ts.map +1 -0
  276. package/dist/types/disposable.js +1 -0
  277. package/dist/types/server-config.d.ts +32 -0
  278. package/dist/types/server-config.d.ts.map +1 -0
  279. package/dist/types/server-config.js +1 -0
  280. package/dist/types/skill.d.ts +69 -0
  281. package/dist/types/skill.d.ts.map +1 -0
  282. package/dist/types/skill.js +1 -0
  283. package/dist/types/tool.d.ts +68 -0
  284. package/dist/types/tool.d.ts.map +1 -0
  285. package/dist/types/tool.js +1 -0
  286. package/dist/watchers/SkillWatcher.d.ts +132 -0
  287. package/dist/watchers/SkillWatcher.d.ts.map +1 -0
  288. package/dist/watchers/SkillWatcher.js +73 -0
  289. package/dist/watchers/SkillWatcher.js.map +1 -0
  290. package/dist/watchers/ToolWatcher.d.ts +109 -0
  291. package/dist/watchers/ToolWatcher.d.ts.map +1 -0
  292. package/dist/watchers/ToolWatcher.js +71 -0
  293. package/dist/watchers/ToolWatcher.js.map +1 -0
  294. package/package.json +95 -0
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Step recommendation type for coordinated multi-step thought processes.
3
+ *
4
+ * @module types/step
5
+ */
6
+ import type { SkillRecommendation } from '../types/skill.js';
7
+ import type { ToolRecommendation } from '../types/tool.js';
8
+ /**
9
+ * Represents a coordinated step in a multi-step thought process.
10
+ *
11
+ * Step recommendations combine tool and skill recommendations to provide
12
+ * a comprehensive plan for completing a specific task, including expected
13
+ * outcomes and conditions for moving to the next step.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const step: StepRecommendation = {
18
+ * step_description: 'Search for TypeScript documentation',
19
+ * recommended_tools: [
20
+ * {
21
+ * tool_name: 'mcp__tavily-mcp__tavily-search',
22
+ * confidence: 0.9,
23
+ * rationale: 'Best for web search',
24
+ * priority: 1
25
+ * }
26
+ * ],
27
+ * recommended_skills: [],
28
+ * expected_outcome: 'Search results with TypeScript documentation links',
29
+ * next_step_conditions: ['If no results found, try broader search terms']
30
+ * };
31
+ * ```
32
+ */
33
+ export interface StepRecommendation {
34
+ /** Human-readable description of what needs to be done in this step. */
35
+ step_description: string;
36
+ /** Array of tools recommended for this step, ordered by priority. */
37
+ recommended_tools: ToolRecommendation[];
38
+ /** Optional array of skills recommended for this step. */
39
+ recommended_skills?: SkillRecommendation[];
40
+ /** Description of what to expect after completing this step. */
41
+ expected_outcome: string;
42
+ /** Optional conditions to consider when determining the next step. */
43
+ next_step_conditions?: string[];
44
+ }
45
+ //# sourceMappingURL=step.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../../src/core/step.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,kBAAkB;IAClC,wEAAwE;IACxE,gBAAgB,EAAE,MAAM,CAAC;IAEzB,qEAAqE;IACrE,iBAAiB,EAAE,kBAAkB,EAAE,CAAC;IAExC,0DAA0D;IAC1D,kBAAkB,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAE3C,gEAAgE;IAChE,gBAAgB,EAAE,MAAM,CAAC;IAEzB,sEAAsE;IACtE,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC"}
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,190 @@
1
+ /**
2
+ * Core data structure for a thought in the sequential thinking process.
3
+ *
4
+ * @module types/thought
5
+ */
6
+ import type { ThoughtType } from './reasoning.js';
7
+ import type { StepRecommendation } from './step.js';
8
+ /**
9
+ * Core data structure for a thought in the sequential thinking process.
10
+ *
11
+ * Thoughts represent individual reasoning steps that can be chained together
12
+ * to form complex reasoning chains. Each thought can reference previous thoughts,
13
+ * create branches, and include tool/skill recommendations.
14
+ *
15
+ * @remarks
16
+ * - Thoughts are numbered sequentially within a branch
17
+ * - Branching allows exploring alternative reasoning paths
18
+ * - Revisions allow correcting or updating previous thoughts
19
+ * - The `next_thought_needed` flag controls continuation
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const thought: ThoughtData = {
24
+ * available_mcp_tools: ['Read', 'Write', 'Bash'],
25
+ * available_skills: ['commit', 'pdf'],
26
+ * thought: 'I should read the package.json to understand dependencies',
27
+ * thought_number: 1,
28
+ * total_thoughts: 5,
29
+ * next_thought_needed: true,
30
+ * current_step: {
31
+ * step_description: 'Read package.json',
32
+ * recommended_tools: [{
33
+ * tool_name: 'Read',
34
+ * confidence: 1.0,
35
+ * rationale: 'Direct file reading',
36
+ * priority: 1
37
+ * }],
38
+ * expected_outcome: 'Contents of package.json'
39
+ * }
40
+ * };
41
+ * ```
42
+ */
43
+ export interface ThoughtData {
44
+ /** Array of MCP tool names available for recommendation. */
45
+ available_mcp_tools?: string[];
46
+ /** Array of skill names available for recommendation. */
47
+ available_skills?: string[];
48
+ /** The current thinking step or reasoning content. */
49
+ thought: string;
50
+ /** Current thought number in the sequence (1-indexed). */
51
+ thought_number: number;
52
+ /** Estimated total number of thoughts (can be adjusted during processing). */
53
+ total_thoughts: number;
54
+ /** Whether this thought revises a previous thought. */
55
+ is_revision?: boolean;
56
+ /** If revising, the thought number being revised. */
57
+ revises_thought?: number;
58
+ /** If branching, the thought number to branch from. */
59
+ branch_from_thought?: number;
60
+ /** Unique identifier for the branch this thought belongs to. */
61
+ branch_id?: string;
62
+ /** Whether more thoughts are needed beyond the current `total_thoughts`. */
63
+ needs_more_thoughts?: boolean;
64
+ /** Whether another thought should be generated (required field). */
65
+ next_thought_needed: boolean;
66
+ /** The current step recommendation being considered. */
67
+ current_step?: StepRecommendation;
68
+ /** Steps that have already been recommended in previous thoughts. */
69
+ previous_steps?: StepRecommendation[];
70
+ /** High-level descriptions of upcoming steps yet to be recommended. */
71
+ remaining_steps?: string[];
72
+ /**
73
+ * Classified purpose of this thought step.
74
+ * Enables type-specific formatting, evaluation, and analytics.
75
+ * Default: 'regular'.
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * const thought: ThoughtData = { ...base, thought_type: 'hypothesis' };
80
+ * ```
81
+ */
82
+ thought_type?: ThoughtType;
83
+ /**
84
+ * LLM's self-assessed quality score for this thought (0-1).
85
+ * Higher values indicate better quality.
86
+ *
87
+ * @example
88
+ * ```typescript
89
+ * const thought: ThoughtData = { ...base, quality_score: 0.85 };
90
+ * ```
91
+ */
92
+ quality_score?: number;
93
+ /**
94
+ * LLM's explicit confidence in this thought's correctness (0-1).
95
+ * Higher values indicate more certainty.
96
+ *
97
+ * @example
98
+ * ```typescript
99
+ * const thought: ThoughtData = { ...base, confidence: 0.9 };
100
+ * ```
101
+ */
102
+ confidence?: number;
103
+ /**
104
+ * Links this thought to a hypothesis for tracking verification chains.
105
+ * Format: alphanumeric, hyphens, underscores, 1-50 chars.
106
+ *
107
+ * @example
108
+ * ```typescript
109
+ * const thought: ThoughtData = { ...base, hypothesis_id: 'perf-bottleneck-1' };
110
+ * ```
111
+ */
112
+ hypothesis_id?: string;
113
+ /**
114
+ * If verification or critique, which thought_number is being evaluated.
115
+ *
116
+ * @example
117
+ * ```typescript
118
+ * const thought: ThoughtData = { ...base, thought_type: 'verification', verification_target: 3 };
119
+ * ```
120
+ */
121
+ verification_target?: number;
122
+ /**
123
+ * If synthesis, which thought_numbers are being combined.
124
+ *
125
+ * @example
126
+ * ```typescript
127
+ * const thought: ThoughtData = { ...base, thought_type: 'synthesis', synthesis_sources: [2, 5, 7] };
128
+ * ```
129
+ */
130
+ synthesis_sources?: number[];
131
+ /**
132
+ * For DAG merge: thought_numbers from other branches being merged into current context.
133
+ *
134
+ * @example
135
+ * ```typescript
136
+ * const thought: ThoughtData = { ...base, merge_from_thoughts: [4, 8] };
137
+ * ```
138
+ */
139
+ merge_from_thoughts?: number[];
140
+ /**
141
+ * For DAG merge: branch_ids being merged into current context.
142
+ *
143
+ * @example
144
+ * ```typescript
145
+ * const thought: ThoughtData = { ...base, merge_branch_ids: ['explore-a', 'explore-b'] };
146
+ * ```
147
+ */
148
+ merge_branch_ids?: string[];
149
+ /**
150
+ * Free-form metacognitive observation about the reasoning process itself.
151
+ *
152
+ * @example
153
+ * ```typescript
154
+ * const thought: ThoughtData = { ...base, meta_observation: 'I am over-exploring branches' };
155
+ * ```
156
+ */
157
+ meta_observation?: string;
158
+ /**
159
+ * Effort signal: how deep should reasoning go for this thought.
160
+ * Default: 'moderate'.
161
+ *
162
+ * @example
163
+ * ```typescript
164
+ * const thought: ThoughtData = { ...base, reasoning_depth: 'deep' };
165
+ * ```
166
+ */
167
+ reasoning_depth?: 'shallow' | 'moderate' | 'deep';
168
+ /**
169
+ * Optional session identifier for state isolation.
170
+ * When provided, thought history, branches, and statistics are scoped to this session.
171
+ * Format: alphanumeric, hyphens, underscores, 1-100 chars.
172
+ *
173
+ * @example
174
+ * ```typescript
175
+ * const thought: ThoughtData = { ...base, session_id: 'analysis-task-42' };
176
+ * ```
177
+ */
178
+ session_id?: string;
179
+ /**
180
+ * When true, clears all state for the target session before processing this thought.
181
+ * The thought is then processed as the first in a fresh session.
182
+ *
183
+ * @example
184
+ * ```typescript
185
+ * const thought: ThoughtData = { ...base, session_id: 'task-1', reset_state: true };
186
+ * ```
187
+ */
188
+ reset_state?: boolean;
189
+ }
190
+ //# sourceMappingURL=thought.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thought.d.ts","sourceRoot":"","sources":["../../src/core/thought.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,WAAW,WAAW;IAC3B,4DAA4D;IAC5D,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE/B,yDAAyD;IACzD,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE5B,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAEhB,0DAA0D;IAC1D,cAAc,EAAE,MAAM,CAAC;IAEvB,8EAA8E;IAC9E,cAAc,EAAE,MAAM,CAAC;IAEvB,uDAAuD;IACvD,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,qDAAqD;IACrD,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,uDAAuD;IACvD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,4EAA4E;IAC5E,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B,oEAAoE;IACpE,mBAAmB,EAAE,OAAO,CAAC;IAE7B,wDAAwD;IACxD,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAElC,qEAAqE;IACrE,cAAc,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAEtC,uEAAuE;IACvE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAE3B;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,WAAW,CAAC;IAE3B;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;;;;;OAOG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE7B;;;;;;;OAOG;IACH,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE/B;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE5B;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;;;;;OAQG;IACH,eAAe,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;IAElD;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB"}
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,226 @@
1
+ import type { IDisposable } from '../types/disposable.js';
2
+ import type { ServiceKey, ServiceRegistry } from './ServiceRegistry.js';
3
+ /**
4
+ * Lightweight dependency injection container for managing service dependencies.
5
+ *
6
+ * This container supports:
7
+ * - Instance registration (singleton-like behavior)
8
+ * - Factory registration (lazy instantiation with caching)
9
+ * - Transient factory registration (new instance each time)
10
+ *
11
+ * The container is type-safe when using ServiceKey from ServiceRegistry.
12
+ * For dynamic/unknown services, use string keys with generic type parameters.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const container = new Container();
17
+ *
18
+ * // Type-safe registration with ServiceKey (recommended)
19
+ * container.registerInstance('Logger', new StructuredLogger());
20
+ *
21
+ * // Type inference works automatically
22
+ * const logger = container.resolve('Logger'); // Type: StructuredLogger
23
+ *
24
+ * // Register a factory with caching (singleton per container)
25
+ * container.register('HistoryManager', () =>
26
+ * new HistoryManager({ logger: container.resolve('Logger') })
27
+ * );
28
+ *
29
+ * // Register a transient factory (new instance each time)
30
+ * container.registerFactory('RequestContext', () =>
31
+ * new RequestContext()
32
+ * );
33
+ *
34
+ * // For dynamic services not in ServiceRegistry
35
+ * container.registerInstance<MyService>('MyService', myService);
36
+ * const service = container.resolve<MyService>('MyService');
37
+ * ```
38
+ */
39
+ export declare class Container {
40
+ private _services;
41
+ private _factories;
42
+ private _transientFactories;
43
+ private _resolving;
44
+ private _disposables;
45
+ /**
46
+ * Register a singleton instance that will be returned for all resolutions.
47
+ *
48
+ * @param name - The unique name/identifier for the service
49
+ * @param instance - The instance to register
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * container.registerInstance('Config', new ServerConfig({ ... }));
54
+ * ```
55
+ */
56
+ registerInstance<K extends ServiceKey>(name: K, instance: ServiceRegistry[K]): void;
57
+ registerInstance<T>(name: string, instance: T): void;
58
+ /**
59
+ * Register a factory function that will be called once and cached.
60
+ * The first call to `resolve` will invoke the factory and cache the result.
61
+ * Subsequent calls will return the cached instance (singleton behavior).
62
+ *
63
+ * @param name - The unique name/identifier for the service
64
+ * @param factory - A factory function that creates the service
65
+ *
66
+ * @example
67
+ * ```typescript
68
+ * container.register('HistoryManager', () =>
69
+ * new HistoryManager({ logger: container.resolve('Logger') })
70
+ * );
71
+ * ```
72
+ */
73
+ register<K extends ServiceKey>(name: K, factory: () => ServiceRegistry[K]): void;
74
+ register<T>(name: string, factory: () => T): void;
75
+ /**
76
+ * Register a transient factory function that will be called on every resolution.
77
+ * Each call to `resolve` will invoke the factory and return a new instance.
78
+ *
79
+ * @param name - The unique name/identifier for the service
80
+ * @param factory - A factory function that creates the service
81
+ *
82
+ * @example
83
+ * ```typescript
84
+ * container.registerFactory('RequestContext', () =>
85
+ * new RequestContext()
86
+ * );
87
+ * ```
88
+ */
89
+ registerFactory<K extends ServiceKey>(name: K, factory: () => ServiceRegistry[K]): void;
90
+ registerFactory<T>(name: string, factory: () => T): void;
91
+ /**
92
+ * Resolve a service by name.
93
+ *
94
+ * Resolution order:
95
+ * 1. If a registered instance exists, return it
96
+ * 2. If a cached factory exists, return it
97
+ * 3. If a factory exists, invoke it, cache the result, and return it
98
+ * 4. If a transient factory exists, invoke it and return a new instance
99
+ * 5. Throw an error if the service is not found
100
+ *
101
+ * @param name - The name/identifier of service to resolve
102
+ * @returns The resolved service instance
103
+ * @throws {Error} If the service is not registered
104
+ *
105
+ * @example
106
+ * ```typescript
107
+ * // Type-safe: ServiceRegistry provides autocomplete
108
+ * const logger = container.resolve('Logger'); // Type: StructuredLogger
109
+ * const config = container.resolve('Config'); // Type: ServerConfig
110
+ *
111
+ * // Dynamic: For services not in ServiceRegistry
112
+ * const service = container.resolve<MyService>('MyService');
113
+ * ```
114
+ */
115
+ resolve<K extends ServiceKey>(name: K): ServiceRegistry[K];
116
+ resolve<T>(name: string): T;
117
+ /**
118
+ * Check if a service is registered (either as instance or factory).
119
+ *
120
+ * @param name - The name/identifier of the service to check
121
+ * @returns `true` if the service is registered, `false` otherwise
122
+ *
123
+ * @example
124
+ * ```typescript
125
+ * if (!container.has('Logger')) {
126
+ * container.registerInstance('Logger', new StructuredLogger());
127
+ * }
128
+ * ```
129
+ */
130
+ has(name: string): boolean;
131
+ /**
132
+ * Remove a registered service from the container.
133
+ *
134
+ * @param name - The name/identifier of the service to unregister
135
+ * @returns `true` if the service was found and removed, `false` otherwise
136
+ *
137
+ * @example
138
+ * ```typescript
139
+ * container.unregister('HistoryManager');
140
+ * ```
141
+ */
142
+ unregister(name: string): boolean;
143
+ /**
144
+ * Clear all registered services and factories from the container.
145
+ *
146
+ * @example
147
+ * ```typescript
148
+ * container.clear();
149
+ * ```
150
+ */
151
+ clear(): void;
152
+ /**
153
+ * Get the number of registered services (including instances, factories, and transient factories).
154
+ *
155
+ * @returns The total count of registered services
156
+ *
157
+ * @example
158
+ * ```typescript
159
+ * console.log(`Registered services: ${container.size}`);
160
+ * ```
161
+ */
162
+ get size(): number;
163
+ /**
164
+ * Get an array of all registered service names.
165
+ *
166
+ * @returns An array of service names
167
+ *
168
+ * @example
169
+ * ```typescript
170
+ * const names = container.registeredServices();
171
+ * console.log('Registered:', names.join(', '));
172
+ * ```
173
+ */
174
+ registeredServices(): string[];
175
+ /**
176
+ * Register an instance as disposable for lifecycle management.
177
+ * The instance will have its `dispose()` method called when the container is disposed.
178
+ *
179
+ * @param name - The service name (must already be registered)
180
+ * @param instance - The disposable instance to track
181
+ *
182
+ * @example
183
+ * ```typescript
184
+ * const pool = new ConnectionPool();
185
+ * container.registerInstance('ConnectionPool', pool);
186
+ * container.registerDisposable('ConnectionPool', pool);
187
+ * ```
188
+ */
189
+ registerDisposable(name: string, instance: IDisposable): void;
190
+ /**
191
+ * Dispose of all registered disposable services.
192
+ * Calls `dispose()` on each registered disposable in reverse registration order.
193
+ * Errors during individual disposal are caught and logged to prevent cascading failures.
194
+ *
195
+ * @example
196
+ * ```typescript
197
+ * await container.dispose();
198
+ * ```
199
+ */
200
+ dispose(): Promise<void>;
201
+ }
202
+ /**
203
+ * Create a pre-configured container with all default services registered.
204
+ *
205
+ * This factory function creates a container with all standard services
206
+ * for the ToolAwareSequentialThinkingServer.
207
+ *
208
+ * @param options - Configuration options for the container
209
+ * @returns A configured container ready to use
210
+ *
211
+ * @example
212
+ * ```typescript
213
+ * const container = createDefaultContainer({
214
+ * logger: customLogger,
215
+ * config: customConfig
216
+ * });
217
+ * const server = new ToolAwareSequentialThinkingServer({ container });
218
+ * ```
219
+ */
220
+ export interface CreateContainerOptions {
221
+ logger?: unknown;
222
+ config?: unknown;
223
+ fileConfig?: Record<string, unknown>;
224
+ }
225
+ export declare function createDefaultContainer(options?: CreateContainerOptions): Container;
226
+ //# sourceMappingURL=Container.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Container.d.ts","sourceRoot":"","sources":["../../src/di/Container.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAExE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,qBAAa,SAAS;IACrB,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,UAAU,CAAyC;IAC3D,OAAO,CAAC,mBAAmB,CAAyC;IACpE,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,YAAY,CAAuC;IAE3D;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,CAAC,SAAS,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI;IACnF,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI;IAYpD;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,CAAC,SAAS,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI;IAChF,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,IAAI;IAYjD;;;;;;;;;;;;;OAaG;IACH,eAAe,CAAC,CAAC,SAAS,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI;IACvF,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,IAAI;IAYxD;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,OAAO,CAAC,CAAC,SAAS,UAAU,EAAE,IAAI,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC;IAoC3B;;;;;;;;;;;;OAYG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAM1B;;;;;;;;;;OAUG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQjC;;;;;;;OAOG;IACH,KAAK,IAAI,IAAI;IAQb;;;;;;;;;OASG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;;;;;;;OAUG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAQ9B;;;;;;;;;;;;;OAaG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI;IAI7D;;;;;;;;;OASG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAqB9B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,sBAAsB;IACtC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,wBAAgB,sBAAsB,CAAC,OAAO,GAAE,sBAA2B,GAAG,SAAS,CActF"}
@@ -0,0 +1,96 @@
1
+ class Container {
2
+ _services = new Map();
3
+ _factories = new Map();
4
+ _transientFactories = new Map();
5
+ _resolving = new Set();
6
+ _disposables = new Map();
7
+ registerInstance(name, instance) {
8
+ if (this._services.has(name) || this._factories.has(name) || this._transientFactories.has(name)) throw new Error(`Service '${name}' is already registered`);
9
+ this._services.set(name, instance);
10
+ }
11
+ register(name, factory) {
12
+ if (this._services.has(name) || this._factories.has(name) || this._transientFactories.has(name)) throw new Error(`Service '${name}' is already registered`);
13
+ this._factories.set(name, factory);
14
+ }
15
+ registerFactory(name, factory) {
16
+ if (this._services.has(name) || this._factories.has(name) || this._transientFactories.has(name)) throw new Error(`Service '${name}' is already registered`);
17
+ this._transientFactories.set(name, factory);
18
+ }
19
+ resolve(name) {
20
+ if (this._resolving.has(name)) throw new Error(`Circular dependency detected while resolving service: ${name}`);
21
+ this._resolving.add(name);
22
+ try {
23
+ if (this._services.has(name)) return this._services.get(name);
24
+ if (this._factories.has(name)) {
25
+ const factory = this._factories.get(name);
26
+ const instance = factory();
27
+ this._services.set(name, instance);
28
+ this._factories.delete(name);
29
+ return instance;
30
+ }
31
+ if (this._transientFactories.has(name)) {
32
+ const factory = this._transientFactories.get(name);
33
+ return factory();
34
+ }
35
+ throw new Error(`Service not found: ${name}. Did you forget to register it?`);
36
+ } finally{
37
+ this._resolving.delete(name);
38
+ }
39
+ }
40
+ has(name) {
41
+ return this._services.has(name) || this._factories.has(name) || this._transientFactories.has(name);
42
+ }
43
+ unregister(name) {
44
+ const hadInstance = this._services.delete(name);
45
+ const hadFactory = this._factories.delete(name);
46
+ const hadTransient = this._transientFactories.delete(name);
47
+ this._disposables.delete(name);
48
+ return hadInstance || hadFactory || hadTransient;
49
+ }
50
+ clear() {
51
+ this._services.clear();
52
+ this._factories.clear();
53
+ this._transientFactories.clear();
54
+ this._resolving.clear();
55
+ this._disposables.clear();
56
+ }
57
+ get size() {
58
+ return this._services.size + this._factories.size + this._transientFactories.size;
59
+ }
60
+ registeredServices() {
61
+ const names = new Set();
62
+ for (const name of this._services.keys())names.add(name);
63
+ for (const name of this._factories.keys())names.add(name);
64
+ for (const name of this._transientFactories.keys())names.add(name);
65
+ return Array.from(names);
66
+ }
67
+ registerDisposable(name, instance) {
68
+ this._disposables.set(name, instance);
69
+ }
70
+ async dispose() {
71
+ const entries = Array.from(this._disposables.entries()).reverse();
72
+ const errors = [];
73
+ for (const [name, disposable] of entries)try {
74
+ await disposable.dispose();
75
+ } catch (error) {
76
+ errors.push({
77
+ name,
78
+ error
79
+ });
80
+ }
81
+ this._disposables.clear();
82
+ if (errors.length > 0) {
83
+ const messages = errors.map((e)=>`${e.name}: ${e.error instanceof Error ? e.error.message : String(e.error)}`);
84
+ throw new Error(`Failed to dispose services: ${messages.join(', ')}`);
85
+ }
86
+ }
87
+ }
88
+ function createDefaultContainer(options = {}) {
89
+ const container = new Container();
90
+ if (options.logger) container.registerInstance('Logger', options.logger);
91
+ if (options.config) container.registerInstance('Config', options.config);
92
+ return container;
93
+ }
94
+ export { Container, createDefaultContainer };
95
+
96
+ //# sourceMappingURL=Container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"di/Container.js","sources":["../../src/di/Container.ts"],"sourcesContent":["import type { IDisposable } from '../types/disposable.js';\nimport type { ServiceKey, ServiceRegistry } from './ServiceRegistry.js';\n\n/**\n * Lightweight dependency injection container for managing service dependencies.\n *\n * This container supports:\n * - Instance registration (singleton-like behavior)\n * - Factory registration (lazy instantiation with caching)\n * - Transient factory registration (new instance each time)\n *\n * The container is type-safe when using ServiceKey from ServiceRegistry.\n * For dynamic/unknown services, use string keys with generic type parameters.\n *\n * @example\n * ```typescript\n * const container = new Container();\n *\n * // Type-safe registration with ServiceKey (recommended)\n * container.registerInstance('Logger', new StructuredLogger());\n *\n * // Type inference works automatically\n * const logger = container.resolve('Logger'); // Type: StructuredLogger\n *\n * // Register a factory with caching (singleton per container)\n * container.register('HistoryManager', () =>\n * new HistoryManager({ logger: container.resolve('Logger') })\n * );\n *\n * // Register a transient factory (new instance each time)\n * container.registerFactory('RequestContext', () =>\n * new RequestContext()\n * );\n *\n * // For dynamic services not in ServiceRegistry\n * container.registerInstance<MyService>('MyService', myService);\n * const service = container.resolve<MyService>('MyService');\n * ```\n */\nexport class Container {\n\tprivate _services: Map<string, unknown> = new Map();\n\tprivate _factories: Map<string, () => unknown> = new Map();\n\tprivate _transientFactories: Map<string, () => unknown> = new Map();\n\tprivate _resolving: Set<string> = new Set();\n\tprivate _disposables: Map<string, IDisposable> = new Map();\n\n\t/**\n\t * Register a singleton instance that will be returned for all resolutions.\n\t *\n\t * @param name - The unique name/identifier for the service\n\t * @param instance - The instance to register\n\t *\n\t * @example\n\t * ```typescript\n\t * container.registerInstance('Config', new ServerConfig({ ... }));\n\t * ```\n\t */\n\tregisterInstance<K extends ServiceKey>(name: K, instance: ServiceRegistry[K]): void;\n\tregisterInstance<T>(name: string, instance: T): void;\n\tregisterInstance(name: string, instance: unknown): void {\n\t\tif (\n\t\t\tthis._services.has(name) ||\n\t\t\tthis._factories.has(name) ||\n\t\t\tthis._transientFactories.has(name)\n\t\t) {\n\t\t\tthrow new Error(`Service '${name}' is already registered`);\n\t\t}\n\t\tthis._services.set(name, instance);\n\t}\n\n\t/**\n\t * Register a factory function that will be called once and cached.\n\t * The first call to `resolve` will invoke the factory and cache the result.\n\t * Subsequent calls will return the cached instance (singleton behavior).\n\t *\n\t * @param name - The unique name/identifier for the service\n\t * @param factory - A factory function that creates the service\n\t *\n\t * @example\n\t * ```typescript\n\t * container.register('HistoryManager', () =>\n\t * new HistoryManager({ logger: container.resolve('Logger') })\n\t * );\n\t * ```\n\t */\n\tregister<K extends ServiceKey>(name: K, factory: () => ServiceRegistry[K]): void;\n\tregister<T>(name: string, factory: () => T): void;\n\tregister(name: string, factory: () => unknown): void {\n\t\tif (\n\t\t\tthis._services.has(name) ||\n\t\t\tthis._factories.has(name) ||\n\t\t\tthis._transientFactories.has(name)\n\t\t) {\n\t\t\tthrow new Error(`Service '${name}' is already registered`);\n\t\t}\n\t\tthis._factories.set(name, factory);\n\t}\n\n\t/**\n\t * Register a transient factory function that will be called on every resolution.\n\t * Each call to `resolve` will invoke the factory and return a new instance.\n\t *\n\t * @param name - The unique name/identifier for the service\n\t * @param factory - A factory function that creates the service\n\t *\n\t * @example\n\t * ```typescript\n\t * container.registerFactory('RequestContext', () =>\n\t * new RequestContext()\n\t * );\n\t * ```\n\t */\n\tregisterFactory<K extends ServiceKey>(name: K, factory: () => ServiceRegistry[K]): void;\n\tregisterFactory<T>(name: string, factory: () => T): void;\n\tregisterFactory(name: string, factory: () => unknown): void {\n\t\tif (\n\t\t\tthis._services.has(name) ||\n\t\t\tthis._factories.has(name) ||\n\t\t\tthis._transientFactories.has(name)\n\t\t) {\n\t\t\tthrow new Error(`Service '${name}' is already registered`);\n\t\t}\n\t\tthis._transientFactories.set(name, factory);\n\t}\n\n\t/**\n\t * Resolve a service by name.\n\t *\n\t * Resolution order:\n\t * 1. If a registered instance exists, return it\n\t * 2. If a cached factory exists, return it\n\t * 3. If a factory exists, invoke it, cache the result, and return it\n\t * 4. If a transient factory exists, invoke it and return a new instance\n\t * 5. Throw an error if the service is not found\n\t *\n\t * @param name - The name/identifier of service to resolve\n\t * @returns The resolved service instance\n\t * @throws {Error} If the service is not registered\n\t *\n\t * @example\n\t * ```typescript\n\t * // Type-safe: ServiceRegistry provides autocomplete\n\t * const logger = container.resolve('Logger'); // Type: StructuredLogger\n\t * const config = container.resolve('Config'); // Type: ServerConfig\n\t *\n\t * // Dynamic: For services not in ServiceRegistry\n\t * const service = container.resolve<MyService>('MyService');\n\t * ```\n\t */\n\tresolve<K extends ServiceKey>(name: K): ServiceRegistry[K];\n\tresolve<T>(name: string): T;\n\tresolve(name: string): unknown {\n\t\tif (this._resolving.has(name)) {\n\t\t\tthrow new Error(`Circular dependency detected while resolving service: ${name}`);\n\t\t}\n\n\t\tthis._resolving.add(name);\n\n\t\ttry {\n\t\t\t// Check for registered instance first\n\t\t\tif (this._services.has(name)) {\n\t\t\t\treturn this._services.get(name);\n\t\t\t}\n\n\t\t\t// Check for cached factory result\n\t\t\tif (this._factories.has(name)) {\n\t\t\t\tconst factory = this._factories.get(name)!;\n\t\t\t\tconst instance = factory();\n\t\t\t\t// Cache the result for future calls (singleton behavior)\n\t\t\t\tthis._services.set(name, instance);\n\t\t\t\tthis._factories.delete(name);\n\t\t\t\treturn instance;\n\t\t\t}\n\n\t\t\t// Check for transient factory (call every time)\n\t\t\tif (this._transientFactories.has(name)) {\n\t\t\t\tconst factory = this._transientFactories.get(name)!;\n\t\t\t\treturn factory();\n\t\t\t}\n\n\t\t\tthrow new Error(`Service not found: ${name}. Did you forget to register it?`);\n\t\t} finally {\n\t\t\tthis._resolving.delete(name);\n\t\t}\n\t}\n\n\t/**\n\t * Check if a service is registered (either as instance or factory).\n\t *\n\t * @param name - The name/identifier of the service to check\n\t * @returns `true` if the service is registered, `false` otherwise\n\t *\n\t * @example\n\t * ```typescript\n\t * if (!container.has('Logger')) {\n\t * container.registerInstance('Logger', new StructuredLogger());\n\t * }\n\t * ```\n\t */\n\thas(name: string): boolean {\n\t\treturn (\n\t\t\tthis._services.has(name) || this._factories.has(name) || this._transientFactories.has(name)\n\t\t);\n\t}\n\n\t/**\n\t * Remove a registered service from the container.\n\t *\n\t * @param name - The name/identifier of the service to unregister\n\t * @returns `true` if the service was found and removed, `false` otherwise\n\t *\n\t * @example\n\t * ```typescript\n\t * container.unregister('HistoryManager');\n\t * ```\n\t */\n\tunregister(name: string): boolean {\n\t\tconst hadInstance = this._services.delete(name);\n\t\tconst hadFactory = this._factories.delete(name);\n\t\tconst hadTransient = this._transientFactories.delete(name);\n\t\tthis._disposables.delete(name);\n\t\treturn hadInstance || hadFactory || hadTransient;\n\t}\n\n\t/**\n\t * Clear all registered services and factories from the container.\n\t *\n\t * @example\n\t * ```typescript\n\t * container.clear();\n\t * ```\n\t */\n\tclear(): void {\n\t\tthis._services.clear();\n\t\tthis._factories.clear();\n\t\tthis._transientFactories.clear();\n\t\tthis._resolving.clear();\n\t\tthis._disposables.clear();\n\t}\n\n\t/**\n\t * Get the number of registered services (including instances, factories, and transient factories).\n\t *\n\t * @returns The total count of registered services\n\t *\n\t * @example\n\t * ```typescript\n\t * console.log(`Registered services: ${container.size}`);\n\t * ```\n\t */\n\tget size(): number {\n\t\treturn this._services.size + this._factories.size + this._transientFactories.size;\n\t}\n\n\t/**\n\t * Get an array of all registered service names.\n\t *\n\t * @returns An array of service names\n\t *\n\t * @example\n\t * ```typescript\n\t * const names = container.registeredServices();\n\t * console.log('Registered:', names.join(', '));\n\t * ```\n\t */\n\tregisteredServices(): string[] {\n\t\tconst names = new Set<string>();\n\t\tfor (const name of this._services.keys()) names.add(name);\n\t\tfor (const name of this._factories.keys()) names.add(name);\n\t\tfor (const name of this._transientFactories.keys()) names.add(name);\n\t\treturn Array.from(names);\n\t}\n\n\t/**\n\t * Register an instance as disposable for lifecycle management.\n\t * The instance will have its `dispose()` method called when the container is disposed.\n\t *\n\t * @param name - The service name (must already be registered)\n\t * @param instance - The disposable instance to track\n\t *\n\t * @example\n\t * ```typescript\n\t * const pool = new ConnectionPool();\n\t * container.registerInstance('ConnectionPool', pool);\n\t * container.registerDisposable('ConnectionPool', pool);\n\t * ```\n\t */\n\tregisterDisposable(name: string, instance: IDisposable): void {\n\t\tthis._disposables.set(name, instance);\n\t}\n\n\t/**\n\t * Dispose of all registered disposable services.\n\t * Calls `dispose()` on each registered disposable in reverse registration order.\n\t * Errors during individual disposal are caught and logged to prevent cascading failures.\n\t *\n\t * @example\n\t * ```typescript\n\t * await container.dispose();\n\t * ```\n\t */\n\tasync dispose(): Promise<void> {\n\t\tconst entries = Array.from(this._disposables.entries()).reverse();\n\t\tconst errors: Array<{ name: string; error: unknown }> = [];\n\n\t\tfor (const [name, disposable] of entries) {\n\t\t\ttry {\n\t\t\t\tawait disposable.dispose();\n\t\t\t} catch (error) {\n\t\t\t\terrors.push({ name, error });\n\t\t\t}\n\t\t}\n\n\t\tthis._disposables.clear();\n\n\t\tif (errors.length > 0) {\n\t\t\tconst messages = errors.map(\n\t\t\t\t(e) => `${e.name}: ${e.error instanceof Error ? e.error.message : String(e.error)}`\n\t\t\t);\n\t\t\tthrow new Error(`Failed to dispose services: ${messages.join(', ')}`);\n\t\t}\n\t}\n}\n\n/**\n * Create a pre-configured container with all default services registered.\n *\n * This factory function creates a container with all standard services\n * for the ToolAwareSequentialThinkingServer.\n *\n * @param options - Configuration options for the container\n * @returns A configured container ready to use\n *\n * @example\n * ```typescript\n * const container = createDefaultContainer({\n * logger: customLogger,\n * config: customConfig\n * });\n * const server = new ToolAwareSequentialThinkingServer({ container });\n * ```\n */\nexport interface CreateContainerOptions {\n\tlogger?: unknown;\n\tconfig?: unknown;\n\tfileConfig?: Record<string, unknown>;\n}\n\nexport function createDefaultContainer(options: CreateContainerOptions = {}): Container {\n\tconst container = new Container();\n\n\t// Register logger if provided\n\tif (options.logger) {\n\t\tcontainer.registerInstance('Logger', options.logger);\n\t}\n\n\t// Register config if provided\n\tif (options.config) {\n\t\tcontainer.registerInstance('Config', options.config);\n\t}\n\n\treturn container;\n}\n"],"names":["Container","Map","Set","name","instance","Error","factory","hadInstance","hadFactory","hadTransient","names","Array","entries","errors","disposable","error","messages","e","String","createDefaultContainer","options","container"],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Service registry type definitions for the DI container.
3
+ *
4
+ * Maps service keys to their concrete types for type-safe resolution.
5
+ * Interface types are imported from contracts/ to reduce coupling.
6
+ * Concrete types are imported only where needed for DI resolution.
7
+ */
8
+ import type { PersistenceBackend } from '../persistence/PersistenceBackend.js';
9
+ import type { HistoryManager } from '../core/HistoryManager.js';
10
+ import type { ThoughtEvaluator } from '../core/ThoughtEvaluator.js';
11
+ import type { ThoughtFormatter } from '../core/ThoughtFormatter.js';
12
+ import type { ThoughtProcessor } from '../core/ThoughtProcessor.js';
13
+ import type { StructuredLogger } from '../logger/StructuredLogger.js';
14
+ import type { Metrics } from '../metrics/metrics.impl.js';
15
+ import type { SkillRegistry } from '../registry/SkillRegistry.js';
16
+ import type { ToolRegistry } from '../registry/ToolRegistry.js';
17
+ import type { ServerConfig } from '../ServerConfig.js';
18
+ export interface ServiceRegistry {
19
+ Logger: StructuredLogger;
20
+ Config: ServerConfig;
21
+ FileConfig: Record<string, unknown>;
22
+ HistoryManager: HistoryManager;
23
+ ThoughtProcessor: ThoughtProcessor;
24
+ ThoughtFormatter: ThoughtFormatter;
25
+ ThoughtEvaluator: ThoughtEvaluator;
26
+ Persistence: PersistenceBackend | null;
27
+ ToolRegistry: ToolRegistry;
28
+ SkillRegistry: SkillRegistry;
29
+ Metrics: Metrics;
30
+ }
31
+ export type ServiceKey = keyof ServiceRegistry;
32
+ //# sourceMappingURL=ServiceRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServiceRegistry.d.ts","sourceRoot":"","sources":["../../src/di/ServiceRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAE/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,eAAe;IAC/B,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,cAAc,EAAE,cAAc,CAAC;IAC/B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,WAAW,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACvC,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC"}
@@ -0,0 +1 @@
1
+ export { };