@iworkforces/tracelattice 2.3.1 → 2.3.6

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 (32) hide show
  1. package/README.md +13 -0
  2. package/dist/cli.js +94 -15
  3. package/dist/cli.js.map +1 -1
  4. package/dist/config/CliTransportConfig.d.ts +22 -0
  5. package/dist/config/CliTransportConfig.d.ts.map +1 -0
  6. package/dist/config/CliTransportConfig.js +52 -0
  7. package/dist/config/CliTransportConfig.js.map +1 -0
  8. package/dist/config/ConfigLoader.d.ts +0 -1
  9. package/dist/config/ConfigLoader.d.ts.map +1 -1
  10. package/dist/config/ConfigLoader.js +9 -14
  11. package/dist/config/ConfigLoader.js.map +1 -1
  12. package/dist/config/EnvironmentInteger.d.ts +2 -0
  13. package/dist/config/EnvironmentInteger.d.ts.map +1 -0
  14. package/dist/config/EnvironmentInteger.js +10 -0
  15. package/dist/config/EnvironmentInteger.js.map +1 -0
  16. package/dist/lib.d.ts +12 -2
  17. package/dist/lib.d.ts.map +1 -1
  18. package/dist/lib.js +9 -4
  19. package/dist/lib.js.map +1 -1
  20. package/dist/persistence/BunSqliteDriver.d.ts +11 -0
  21. package/dist/persistence/BunSqliteDriver.d.ts.map +1 -0
  22. package/dist/persistence/BunSqliteDriver.js +36 -0
  23. package/dist/persistence/BunSqliteDriver.js.map +1 -0
  24. package/dist/persistence/SqliteDriverLoader.d.ts +11 -0
  25. package/dist/persistence/SqliteDriverLoader.d.ts.map +1 -0
  26. package/dist/persistence/SqliteDriverLoader.js +19 -0
  27. package/dist/persistence/SqliteDriverLoader.js.map +1 -0
  28. package/dist/persistence/SqlitePersistence.d.ts +2 -1
  29. package/dist/persistence/SqlitePersistence.d.ts.map +1 -1
  30. package/dist/persistence/SqlitePersistence.js +4 -9
  31. package/dist/persistence/SqlitePersistence.js.map +1 -1
  32. package/package.json +16 -16
package/dist/lib.d.ts CHANGED
@@ -1,7 +1,9 @@
1
1
  import { EventEmitter } from 'node:events';
2
2
  import type * as v from 'valibot';
3
3
  import type { ThoughtData } from './core/thought.js';
4
- import { type BranchId } from './contracts/ids.js';
4
+ import type { BranchId, SessionId, ThoughtId } from './contracts/ids.js';
5
+ import type { Edge } from './core/graph/Edge.js';
6
+ import type { Summary } from './core/compression/Summary.js';
5
7
  import type { SequentialThinkingSchema } from './schema.js';
6
8
  import type { IDisposable } from './types/disposable.js';
7
9
  import type { ConfigFileOptions } from './config/ConfigLoader.js';
@@ -9,6 +11,7 @@ import { HistoryManager } from './core/HistoryManager.js';
9
11
  import { type CallToolResult } from './core/ThoughtProcessor.js';
10
12
  import { Container } from './di/Container.js';
11
13
  import { StructuredLogger } from './logger/StructuredLogger.js';
14
+ import type { PersistenceBackend } from './contracts/PersistenceBackend.js';
12
15
  import { SkillRegistry } from './registry/SkillRegistry.js';
13
16
  import { ToolRegistry } from './registry/ToolRegistry.js';
14
17
  import { ServerConfig } from './ServerConfig.js';
@@ -17,7 +20,7 @@ import type { HttpTransportOptions } from './transport/HttpTransport.js';
17
20
  import type { TransportOptions } from './transport/BaseTransport.js';
18
21
  import type { ITransport, TransportKind } from './contracts/transport.js';
19
22
  export { HttpTransport, createHttpTransport };
20
- export type { HttpTransportOptions, TransportOptions, ITransport, TransportKind };
23
+ export type { HttpTransportOptions, TransportOptions, ITransport, TransportKind, PersistenceBackend, ThoughtData, Edge, Summary, SessionId, ThoughtId, BranchId, };
21
24
  export interface ServerOptions {
22
25
  maxHistorySize?: number;
23
26
  maxBranches?: number;
@@ -27,6 +30,12 @@ export interface ServerOptions {
27
30
  config?: ServerConfig;
28
31
  fileConfig?: ConfigFileOptions;
29
32
  container?: Container;
33
+ /**
34
+ * Use this backend instead of the configured persistence factory.
35
+ * The caller owns and closes it; the server only drains its buffered writes.
36
+ * @default undefined
37
+ */
38
+ persistenceBackend?: PersistenceBackend;
30
39
  /**
31
40
  * Enable automatic tool and skill discovery on server startup.
32
41
  * @default true
@@ -139,6 +148,7 @@ export declare class ToolAwareSequentialThinkingServer extends EventEmitter impl
139
148
  emit<K extends keyof ServerEvents>(event: K, payload: ServerEvents[K]): boolean;
140
149
  on<K extends keyof ServerEvents>(event: K, listener: (payload: ServerEvents[K]) => void): this;
141
150
  private _container;
151
+ private readonly _borrowedPersistence;
142
152
  private _logger;
143
153
  private _historyManager;
144
154
  private _thoughtProcessor;
package/dist/lib.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"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"}
package/dist/lib.js CHANGED
@@ -28,6 +28,9 @@ import { ToolRegistry } from "./registry/ToolRegistry.js";
28
28
  import { ServerConfig } from "./ServerConfig.js";
29
29
  import { SkillWatcher } from "./watchers/SkillWatcher.js";
30
30
  import { ToolWatcher } from "./watchers/ToolWatcher.js";
31
+ async function closeOwnedPersistence(persistence, borrowed) {
32
+ if (null !== persistence && persistence !== borrowed) await persistence.close();
33
+ }
31
34
  function appendCleanupFailure(failures, failure) {
32
35
  if (failure instanceof AggregateError) return void failures.push(...failure.errors);
33
36
  failures.push(failure);
@@ -68,7 +71,7 @@ class ToolAwareSequentialThinkingServer extends EventEmitter {
68
71
  ()=>{
69
72
  if (container.has('suspensionStore')) container.resolve('suspensionStore').stop();
70
73
  },
71
- ()=>container.resolve('Persistence')?.close(),
74
+ ()=>closeOwnedPersistence(container.resolve('Persistence'), options.persistenceBackend ?? null),
72
75
  ()=>container.dispose()
73
76
  ]);
74
77
  if (cleanupFailures.length > 0) throw new AggregateError([
@@ -87,6 +90,7 @@ class ToolAwareSequentialThinkingServer extends EventEmitter {
87
90
  return super.on(event, listener);
88
91
  }
89
92
  _container;
93
+ _borrowedPersistence;
90
94
  _logger;
91
95
  _historyManager;
92
96
  _thoughtProcessor;
@@ -106,6 +110,7 @@ class ToolAwareSequentialThinkingServer extends EventEmitter {
106
110
  super();
107
111
  if (!options.container) throw new Error('Container is required. Use createServer() or provide a container.');
108
112
  this._container = options.container;
113
+ this._borrowedPersistence = options.persistenceBackend ?? null;
109
114
  this._logger = this._container.resolve('Logger');
110
115
  this._historyManager = this._container.resolve('HistoryManager');
111
116
  this._historyManager.bindShutdownOwner(()=>this.stop());
@@ -270,7 +275,7 @@ class ToolAwareSequentialThinkingServer extends EventEmitter {
270
275
  }
271
276
  let persistence = null;
272
277
  try {
273
- persistence = await createPersistenceBackend(config.persistence);
278
+ persistence = options.persistenceBackend ?? await createPersistenceBackend(config.persistence);
274
279
  return ToolAwareSequentialThinkingServer._createContainerCore({
275
280
  ...options,
276
281
  config
@@ -278,7 +283,7 @@ class ToolAwareSequentialThinkingServer extends EventEmitter {
278
283
  } catch (error) {
279
284
  const acquiredPersistence = persistence;
280
285
  const cleanupFailures = null === acquiredPersistence ? [] : await collectCleanupFailures([
281
- ()=>acquiredPersistence.close()
286
+ ()=>closeOwnedPersistence(acquiredPersistence, options.persistenceBackend ?? null)
282
287
  ]);
283
288
  if (cleanupFailures.length > 0) throw new AggregateError([
284
289
  error,
@@ -392,7 +397,7 @@ class ToolAwareSequentialThinkingServer extends EventEmitter {
392
397
  });
393
398
  }
394
399
  const persistence = this._container.resolve('Persistence');
395
- if (persistence) try {
400
+ if (persistence && persistence !== this._borrowedPersistence) try {
396
401
  await persistence.close();
397
402
  this._logger.info('Persistence backend closed');
398
403
  } catch (error) {
package/dist/lib.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"lib.js","sources":["../src/lib.ts"],"sourcesContent":["// Library exports for tracelattice\n// This module contains all public API exports with NO CLI side effects.\n// For the CLI entry point, see cli.ts.\n\nimport { EventEmitter } from 'node:events';\nimport type * as v from 'valibot';\nimport type { ThoughtData } from './core/thought.js';\nimport { asSessionId, type BranchId } from './contracts/ids.js';\nimport type { SequentialThinkingSchema } from './schema.js';\nimport { SEQUENTIAL_THINKING_TOOL } from './schema.js';\nimport type { IDisposable } from './types/disposable.js';\nimport { getErrorMessage } from './errors.js';\nimport { assertNever } from './utils.js';\n\n// New component imports\nimport { DiscoveryCache } from './cache/DiscoveryCache.js';\nimport type { ConfigFileOptions } from './config/ConfigLoader.js';\nimport { ConfigLoader } from './config/ConfigLoader.js';\nimport { ABSOLUTE_MAX_HISTORY_SIZE, HistoryManager } from './core/HistoryManager.js';\nimport { EdgeStore } from './core/graph/EdgeStore.js';\nimport { InMemorySummaryStore } from './core/compression/InMemorySummaryStore.js';\nimport { CompressionService } from './core/compression/CompressionService.js';\nimport { InMemorySuspensionStore } from './core/tools/InMemorySuspensionStore.js';\nimport { ThoughtEvaluator } from './core/ThoughtEvaluator.js';\nimport { Calibrator } from './core/evaluator/Calibrator.js';\nimport { OutcomeRecorder } from './core/reasoning/OutcomeRecorder.js';\nimport { createReasoningStrategy } from './core/reasoning/strategies/StrategyFactory.js';\nimport { ThoughtFormatter } from './core/ThoughtFormatter.js';\nimport { ThoughtProcessor, type CallToolResult } from './core/ThoughtProcessor.js';\nimport { SessionLock } from './core/SessionLock.js';\nimport { SessionLifecycleClosedError } from './core/SessionErrors.js';\nimport { SessionLifecycleCoordinator } from './core/SessionLifecycleCoordinator.js';\nimport { Container } from './di/Container.js';\nimport { StructuredLogger } from './logger/StructuredLogger.js';\nimport { Metrics } from './metrics/metrics.impl.js';\nimport type { PersistenceBackend } from './contracts/PersistenceBackend.js';\nimport { createPersistenceBackend } from './persistence/PersistenceFactory.js';\nimport { SkillRegistry } from './registry/SkillRegistry.js';\nimport { ToolRegistry } from './registry/ToolRegistry.js';\nimport { ServerConfig } from './ServerConfig.js';\nimport { SkillWatcher } from './watchers/SkillWatcher.js';\nimport { ToolWatcher } from './watchers/ToolWatcher.js';\nimport { HttpTransport, createHttpTransport } from './transport/HttpTransport.js';\nimport type { HttpTransportOptions } from './transport/HttpTransport.js';\nimport type { TransportOptions } from './transport/BaseTransport.js';\nimport type { ITransport, TransportKind } from './contracts/transport.js';\n\nexport { HttpTransport, createHttpTransport };\nexport type { HttpTransportOptions, TransportOptions, ITransport, TransportKind };\n\nexport interface ServerOptions {\n\tmaxHistorySize?: number;\n\tmaxBranches?: number;\n\tmaxBranchSize?: number;\n\tlogger?: StructuredLogger;\n\tenableWatcher?: boolean;\n\tconfig?: ServerConfig;\n\tfileConfig?: ConfigFileOptions;\n\tcontainer?: Container;\n\t/**\n\t * Enable automatic tool and skill discovery on server startup.\n\t * @default true\n\t */\n\tautoDiscover?: boolean;\n\t/**\n\t * Suppress startup discovery so callers can discover through registry APIs explicitly.\n\t * @default false\n\t */\n\tlazyDiscovery?: boolean;\n\t/**\n\t * Load history from persistence on initialization\n\t * @default true\n\t */\n\tloadFromPersistence?: boolean;\n}\n\n/**\n * Server error events for event-driven error handling\n */\ninterface ServerEvents {\n\tpersistenceError: { operation: string; error: Error };\n\tdiscoveryError: { directory: string; error: Error };\n\ttransportError: { transport: string; error: Error };\n\tthoughtProcessed: { thoughtNumber: number; duration: number };\n}\n\ntype CleanupOperation = () => void | Promise<void>;\n\nfunction appendCleanupFailure(failures: unknown[], failure: unknown): void {\n\tif (failure instanceof AggregateError) {\n\t\tfailures.push(...failure.errors);\n\t\treturn;\n\t}\n\tfailures.push(failure);\n}\n\nasync function collectCleanupFailures(operations: readonly CleanupOperation[]): Promise<unknown[]> {\n\tconst failures: unknown[] = [];\n\tfor (const operation of operations) {\n\t\ttry {\n\t\t\tawait operation();\n\t\t} catch (error) {\n\t\t\tappendCleanupFailure(failures, error);\n\t\t}\n\t}\n\treturn failures;\n}\n\n/**\n * Public API contract for the tool-aware sequential thinking server.\n *\n * Extends {@link IDisposable} for resource cleanup. Concrete implementations\n * are expected to also extend Node's `EventEmitter` to support the typed\n * `emit`/`on` overloads.\n */\nexport interface IToolAwareSequentialThinkingServer extends IDisposable {\n\t/** Direct access to the history manager. */\n\treadonly history: HistoryManager;\n\n\t/** Direct access to the tool registry. */\n\treadonly tools: ToolRegistry;\n\n\t/** Direct access to the skill registry. */\n\treadonly skills: SkillRegistry;\n\n\t/** Server configuration. */\n\treadonly config: ServerConfig;\n\n\t/**\n\t * Discover skills asynchronously without blocking server startup.\n\t *\n\t * @returns The number of skills discovered\n\t */\n\tdiscoverSkillsAsync(): Promise<number>;\n\n\t/** Rescan configured tool and skill directories. */\n\trefreshDiscovery(): Promise<{ tools: number; skills: number }>;\n\n\t/**\n\t * Get all branches for one explicit thought session.\n\t *\n\t * @param sessionId - Valid thought-session identifier\n\t * @returns Map of branch IDs to thought arrays\n\t */\n\tgetBranches(sessionId: string): Record<string, ThoughtData[]>;\n\n\t/**\n\t * Process a thought through the configured pipeline.\n\t *\n\t * @param input - Validated thought input matching the schema\n\t * @returns The processing result\n\t */\n\tprocessThought(input: v.InferInput<typeof SequentialThinkingSchema>): Promise<CallToolResult>;\n\n\t/**\n\t * Export the current Prometheus metrics snapshot.\n\t */\n\tgetMetricsSnapshot(): string;\n\n\t/**\n\t * Get the DI container used by this server.\n\t * Useful for testing and advanced customizations.\n\t */\n\tgetContainer(): Container;\n\n\t/**\n\t * Stop the server and clean up watchers, suspension stores, and persistence.\n\t */\n\tstop(): Promise<void>;\n\n\t/** Awaitably reset one session and all matching auxiliary state. */\n\tresetSession(sessionId: string): Promise<void>;\n\n\t/** Awaitably reset all state from a trusted ownerless context. */\n\tresetAll(): Promise<void>;\n\n\t/**\n\t * Dispose of the server and all container services.\n\t */\n\tdispose(): Promise<void>;\n}\n\nexport class ToolAwareSequentialThinkingServer\n\textends EventEmitter\n\timplements IToolAwareSequentialThinkingServer\n{\n\t/**\n\t * Factory method to create a new server instance with async initialization.\n\t * This is the recommended way to create server instances.\n\t *\n\t * @param options - Server configuration options\n\t * @returns A Promise that resolves to a configured server instance\n\t */\n\tstatic async create(options: ServerOptions = {}): Promise<ToolAwareSequentialThinkingServer> {\n\t\tconst container = await ToolAwareSequentialThinkingServer._createContainerAsyncStatic(options);\n\t\tlet server: ToolAwareSequentialThinkingServer | undefined;\n\t\ttry {\n\t\t\tserver = new ToolAwareSequentialThinkingServer({\n\t\t\t\t...options,\n\t\t\t\tcontainer,\n\t\t\t});\n\t\t\tawait Promise.all([\n\t\t\t\tserver._skillWatcher?.ready() ?? Promise.resolve(),\n\t\t\t\tserver._toolWatcher?.ready() ?? Promise.resolve(),\n\t\t\t]);\n\n\t\t\tif (options.loadFromPersistence !== false) {\n\t\t\t\tawait server.history.loadFromPersistence();\n\t\t\t}\n\n\t\t\tif (options.autoDiscover !== false && options.lazyDiscovery !== true) {\n\t\t\t\tawait Promise.all([server.tools.discoverAsync(), server.discoverSkillsAsync()]);\n\t\t\t}\n\n\t\t\treturn server;\n\t\t} catch (error) {\n\t\t\tconst startedServer = server;\n\t\t\tconst cleanupFailures = await collectCleanupFailures(\n\t\t\t\tstartedServer\n\t\t\t\t\t? [() => startedServer.dispose()]\n\t\t\t\t\t: [\n\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\tif (container.has('suspensionStore')) {\n\t\t\t\t\t\t\t\t\tcontainer.resolve('suspensionStore').stop();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t() => container.resolve('Persistence')?.close(),\n\t\t\t\t\t\t\t() => container.dispose(),\n\t\t\t\t\t\t]\n\t\t\t);\n\t\t\tif (cleanupFailures.length > 0) {\n\t\t\t\tthrow new AggregateError(\n\t\t\t\t\t[error, ...cleanupFailures],\n\t\t\t\t\t'Server startup failed and cleanup also failed',\n\t\t\t\t\t{ cause: error }\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t// Type-safe event emission\n\toverride emit<K extends keyof ServerEvents>(event: K, payload: ServerEvents[K]): boolean {\n\t\treturn super.emit(event, payload);\n\t}\n\n\toverride on<K extends keyof ServerEvents>(\n\t\tevent: K,\n\t\tlistener: (payload: ServerEvents[K]) => void\n\t): this {\n\t\treturn super.on(event, listener);\n\t}\n\n\t// DI Container for managing dependencies\n\tprivate _container: Container;\n\n\t// Component instances (private)\n\tprivate _logger: StructuredLogger;\n\tprivate _historyManager: HistoryManager;\n\tprivate _thoughtProcessor: ThoughtProcessor;\n\tprivate _metrics: Metrics;\n\tprivate _skillWatcher: SkillWatcher | null = null;\n\tprivate _toolWatcher: ToolWatcher | null = null;\n\tprivate _config: ServerConfig;\n\tprivate _acceptingDiscoveryRefreshes = true;\n\tprivate _refreshPromise: Promise<{ tools: number; skills: number }> | null = null;\n\tprivate _stopPromise: Promise<void> | null = null;\n\tprivate _disposePromise: Promise<void> | null = null;\n\n\t// Public manager properties (recommended API)\n\t/**\n\t * Direct access to the history manager\n\t * @example\n\t * ```typescript\n\t * server.history.getHistory('analysis-session');\n\t * await server.resetAll();\n\t * ```\n\t */\n\tpublic readonly history: HistoryManager;\n\n\t/**\n\t * Direct access to the tool registry\n\t * @example\n\t * ```typescript\n\t * server.tools.add(tool);\n\t * server.tools.get('my-tool');\n\t * ```\n\t */\n\tpublic readonly tools: ToolRegistry;\n\n\t/**\n\t * Direct access to the skill registry\n\t * @example\n\t * ```typescript\n\t * server.skills.add(skill);\n\t * server.skills.get('my-skill');\n\t * ```\n\t */\n\tpublic readonly skills: SkillRegistry;\n\n\t/**\n\t * Server configuration\n\t * @example\n\t * ```typescript\n\t * console.log(server.config.maxHistorySize);\n\t * ```\n\t */\n\tpublic readonly config: ServerConfig;\n\n\tconstructor(options: ServerOptions = {}) {\n\t\t// Use provided container or create a new one\n\t\tsuper();\n\t\tif (!options.container) {\n\t\t\tthrow new Error('Container is required. Use createServer() or provide a container.');\n\t\t}\n\t\tthis._container = options.container;\n\n\t\t// Resolve dependencies from container\n\t\tthis._logger = this._container.resolve('Logger');\n\t\tthis._historyManager = this._container.resolve('HistoryManager');\n\t\tthis._historyManager.bindShutdownOwner(() => this.stop());\n\t\tthis._thoughtProcessor = this._container.resolve('ThoughtProcessor');\n\t\tthis._metrics = this._container.resolve('Metrics');\n\t\tthis._config = this._container.resolve('Config');\n\n\t\t// Expose managers as public properties (recommended API)\n\t\tthis.history = this._historyManager;\n\n\t\t// Wire up persistence error event emitter\n\t\tthis._historyManager.setEventEmitter(this);\n\t\tthis.tools = this._container.resolve('ToolRegistry');\n\t\tthis.skills = this._container.resolve('SkillRegistry');\n\t\tthis.config = this._config;\n\n\t\t// Always include the sequential thinking tool\n\t\tthis.tools.add(SEQUENTIAL_THINKING_TOOL);\n\n\t\t// Initialize watchers if enabled\n\t\tif (options.enableWatcher) {\n\t\t\tthis._skillWatcher = new SkillWatcher(this.skills, this._logger, this.config.skillDirs);\n\t\t\tthis._toolWatcher = new ToolWatcher(this.tools, this._logger, this.config.toolDirs);\n\t\t}\n\t}\n\n\t/**\n\t * Shared core logic for container creation.\n\t * This method contains all common initialization logic between sync and async paths.\n\t */\n\tprivate static _createContainerCore(\n\t\toptions: ServerOptions,\n\t\tfileConfig: ConfigFileOptions | null,\n\t\tpersistence: PersistenceBackend | null\n\t): Container {\n\t\tconst container = new Container();\n\t\tconst metrics = new Metrics({\n\t\t\tprefix: 'sequentialthinking',\n\t\t});\n\n\t\tconst config = ToolAwareSequentialThinkingServer._resolveEffectiveConfig(options, fileConfig);\n\n\t\t// Initialize logger\n\t\tconst logger =\n\t\t\toptions.logger ??\n\t\t\tnew StructuredLogger({\n\t\t\t\tlevel: fileConfig?.logLevel ?? 'info',\n\t\t\t\tcontext: 'SequentialThinking',\n\t\t\t\tpretty: fileConfig?.prettyLog ?? true,\n\t\t\t});\n\n\t\t// Register all services in the container\n\t\tcontainer.registerInstance('Logger', logger);\n\t\tcontainer.registerInstance('Config', config);\n\t\tcontainer.registerInstance('FileConfig', fileConfig || {});\n\t\tcontainer.registerInstance('Persistence', persistence);\n\t\tcontainer.registerInstance('Metrics', metrics);\n\t\tToolAwareSequentialThinkingServer._registerDiscoveryRegistries(\n\t\t\tcontainer,\n\t\t\toptions.lazyDiscovery\n\t\t);\n\n\t\t// Register EdgeStore as a lazy singleton (always registered; flag gates writes)\n\t\tcontainer.register('EdgeStore', () => new EdgeStore());\n\n\t\t// Register SummaryStore as a lazy singleton (always registered; flag gates writes)\n\t\tcontainer.register('summaryStore', () => new InMemorySummaryStore());\n\n\t\t// Register SuspensionStore as a lazy singleton (only when toolInterleave flag is on)\n\t\tif (config.features.toolInterleave) {\n\t\t\tcontainer.register('suspensionStore', () => {\n\t\t\t\tconst store = new InMemorySuspensionStore({\n\t\t\t\t\tttlMs: config.toolInterleaveTtlMs,\n\t\t\t\t\tsweepIntervalMs: config.toolInterleaveSweepMs,\n\t\t\t\t\tlogger,\n\t\t\t\t});\n\t\t\t\tstore.start();\n\t\t\t\treturn store;\n\t\t\t});\n\t\t}\n\n\t\t// Register CompressionService as a lazy singleton (always registered; flag gates invocation)\n\t\tcontainer.register('compressionService', () => {\n\t\t\tconst historyManager = container.resolve('HistoryManager');\n\t\t\tconst edgeStore = container.resolve('EdgeStore');\n\t\t\tconst summaryStore = container.resolve('summaryStore');\n\t\t\tconst log = container.resolve('Logger');\n\t\t\treturn new CompressionService({\n\t\t\t\thistoryManager,\n\t\t\t\tedgeStore,\n\t\t\t\tsummaryStore,\n\t\t\t\tonSummaryCreated: (summary) => {\n\t\t\t\t\thistoryManager.bufferSummaries(\n\t\t\t\t\t\tsummary.sessionId,\n\t\t\t\t\t\tsummaryStore.forSession(summary.sessionId)\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tlogger: log,\n\t\t\t});\n\t\t});\n\n\t\t// Register ReasoningStrategy as a lazy singleton (selected via feature flag)\n\t\tcontainer.register('reasoningStrategy', () =>\n\t\t\tcreateReasoningStrategy(config.features.reasoningStrategy)\n\t\t);\n\n\t\t// Register SessionLock as a lazy singleton (always registered;\n\t\t// serializes ThoughtProcessor.process() per-session).\n\t\tcontainer.register('sessionLock', () => new SessionLock());\n\t\tcontainer.register('sessionLifecycle', () => new SessionLifecycleCoordinator());\n\n\t\tToolAwareSequentialThinkingServer._registerHistoryManager(container);\n\t\tToolAwareSequentialThinkingServer._registerThoughtPipeline(container, config);\n\n\t\treturn container;\n\t}\n\n\tprivate static _resolveEffectiveConfig(\n\t\toptions: ServerOptions,\n\t\tfileConfig: ConfigFileOptions | null\n\t): ServerConfig {\n\t\tif (options.config) return options.config;\n\t\tconst loadedOptions = new ConfigLoader().toServerConfigOptions(fileConfig ?? {});\n\t\treturn new ServerConfig({\n\t\t\t...loadedOptions,\n\t\t\tmaxHistorySize: options.maxHistorySize ?? loadedOptions.maxHistorySize,\n\t\t\tmaxBranches: options.maxBranches ?? loadedOptions.maxBranches,\n\t\t\tmaxBranchSize: options.maxBranchSize ?? loadedOptions.maxBranchSize,\n\t\t});\n\t}\n\n\tprivate static _registerDiscoveryRegistries(\n\t\tcontainer: Container,\n\t\tlazyDiscovery: ServerOptions['lazyDiscovery']\n\t): void {\n\t\tconst logger = container.resolve('Logger');\n\t\tconst config = container.resolve('Config');\n\t\tconst metrics = container.resolve('Metrics');\n\n\t\tcontainer.register(\n\t\t\t'ToolRegistry',\n\t\t\t() =>\n\t\t\t\tnew ToolRegistry({\n\t\t\t\t\tlogger,\n\t\t\t\t\tcache: config.discoveryCache\n\t\t\t\t\t\t? new DiscoveryCache({ ...config.discoveryCache, metrics })\n\t\t\t\t\t\t: undefined,\n\t\t\t\t\ttoolDirs: config.toolDirs,\n\t\t\t\t\tlazyDiscovery,\n\t\t\t\t})\n\t\t);\n\t\tcontainer.register(\n\t\t\t'SkillRegistry',\n\t\t\t() =>\n\t\t\t\tnew SkillRegistry({\n\t\t\t\t\tlogger,\n\t\t\t\t\tcache: config.discoveryCache\n\t\t\t\t\t\t? new DiscoveryCache({ ...config.discoveryCache, metrics })\n\t\t\t\t\t\t: undefined,\n\t\t\t\t\tskillDirs: config.skillDirs,\n\t\t\t\t\tlazyDiscovery,\n\t\t\t\t})\n\t\t);\n\t}\n\n\tprivate static _registerHistoryManager(container: Container): void {\n\t\t// Register HistoryManager with lazy initialization\n\t\tcontainer.register('HistoryManager', () => {\n\t\t\tconst cfg = container.resolve('Config');\n\t\t\tconst log = container.resolve('Logger');\n\t\t\tconst pers = container.resolve('Persistence');\n\t\t\tconst componentMetrics = container.resolve('Metrics');\n\t\t\tconst edgeStore = container.resolve('EdgeStore');\n\t\t\tconst summaryStore = container.resolve('summaryStore');\n\t\t\treturn new HistoryManager({\n\t\t\t\tmaxHistorySize: cfg.maxHistorySize,\n\t\t\t\tmaxBranches: cfg.maxBranches,\n\t\t\t\tmaxBranchSize: cfg.maxBranchSize,\n\t\t\t\tlogger: log,\n\t\t\t\tpersistence: pers,\n\t\t\t\tmetrics: componentMetrics,\n\t\t\t\tpersistenceBufferSize: cfg.persistenceBufferSize,\n\t\t\t\tpersistenceFlushInterval: cfg.persistenceFlushInterval,\n\t\t\t\tpersistenceMaxRetries: cfg.persistenceMaxRetries,\n\t\t\t\tpersistenceHistorySize:\n\t\t\t\t\tcfg.persistence.options?.maxHistorySize ?? ABSOLUTE_MAX_HISTORY_SIZE,\n\t\t\t\tpersistBranches: cfg.persistence.options?.persistBranches ?? true,\n\t\t\t\tedgeStore,\n\t\t\t\tsummaryStore,\n\t\t\t\tdagEdges: cfg.features.dagEdges,\n\t\t\t\tmaxSessionsPerOwner: cfg.maxSessionsPerOwner,\n\t\t\t\tsessionLock: container.resolve('sessionLock'),\n\t\t\t\tlifecycleCoordinator: container.resolve('sessionLifecycle'),\n\t\t\t\tclearSessionAuxiliaryState: (sessionId) =>\n\t\t\t\t\tcontainer.resolve('ThoughtProcessor').clearSessionAuxiliaryState(sessionId),\n\t\t\t\tclearAllAuxiliaryState: () =>\n\t\t\t\t\tcontainer.resolve('ThoughtProcessor').clearAllAuxiliaryState(),\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate static _registerThoughtPipeline(container: Container, config: ServerConfig): void {\n\t\t// Register ThoughtFormatter (can be transient)\n\t\tcontainer.registerFactory('ThoughtFormatter', () => new ThoughtFormatter());\n\n\t\t// Register OutcomeRecorder as a lazy singleton (gated by feature flag)\n\t\tcontainer.register(\n\t\t\t'outcomeRecorder',\n\t\t\t() => new OutcomeRecorder({ enabled: config.features.outcomeRecording ?? false })\n\t\t);\n\n\t\t// Register Calibrator as a lazy singleton (gated by feature flag)\n\t\tcontainer.register(\n\t\t\t'calibrator',\n\t\t\t() =>\n\t\t\t\tnew Calibrator(container.resolve('outcomeRecorder'), config.features.calibration ?? false)\n\t\t);\n\n\t\t// Register ThoughtEvaluator (stateless, transient) with injected calibrator\n\t\tcontainer.registerFactory(\n\t\t\t'ThoughtEvaluator',\n\t\t\t() => new ThoughtEvaluator(container.resolve('calibrator'))\n\t\t);\n\n\t\t// Register ThoughtProcessor\n\t\tcontainer.register('ThoughtProcessor', () => {\n\t\t\tconst history = container.resolve('HistoryManager');\n\t\t\tconst formatter = container.resolve('ThoughtFormatter');\n\t\t\tconst evaluator = container.resolve('ThoughtEvaluator');\n\t\t\tconst log = container.resolve('Logger');\n\t\t\tconst strategy = container.resolve('reasoningStrategy');\n\t\t\tconst compressionService = config.features.compression\n\t\t\t\t? container.resolve('compressionService')\n\t\t\t\t: undefined;\n\t\t\tconst suspensionStore = config.features.toolInterleave\n\t\t\t\t? container.resolve('suspensionStore')\n\t\t\t\t: undefined;\n\t\t\tconst toolRegistry = container.resolve('ToolRegistry');\n\t\t\tconst sessionLock = container.resolve('sessionLock');\n\t\t\treturn new ThoughtProcessor(\n\t\t\t\thistory,\n\t\t\t\tformatter,\n\t\t\t\tevaluator,\n\t\t\t\tlog,\n\t\t\t\tstrategy,\n\t\t\t\tcompressionService,\n\t\t\t\tsuspensionStore,\n\t\t\t\ttoolRegistry,\n\t\t\t\tconfig.features,\n\t\t\t\tsessionLock,\n\t\t\t\tcontainer.resolve('outcomeRecorder'),\n\t\t\t\tcontainer.resolve('sessionLifecycle'),\n\t\t\t\tcontainer.resolve('calibrator')\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * Create and configure the DI container with async persistence initialization.\n\t * This is used internally by the static create() factory.\n\t */\n\tprivate static async _createContainerAsyncStatic(options: ServerOptions): Promise<Container> {\n\t\tlet fileConfig: ConfigFileOptions | null;\n\t\tlet config: ServerConfig;\n\t\tif (options.config) {\n\t\t\tfileConfig = options.fileConfig ?? null;\n\t\t\tconfig = options.config;\n\t\t} else {\n\t\t\tconst configLoader = new ConfigLoader();\n\t\t\tfileConfig =\n\t\t\t\toptions.fileConfig === undefined\n\t\t\t\t\t? configLoader.load()\n\t\t\t\t\t: configLoader.applyEnvironmentOverrides(options.fileConfig);\n\t\t\tconfig = ToolAwareSequentialThinkingServer._resolveEffectiveConfig(options, fileConfig);\n\t\t}\n\n\t\tlet persistence: PersistenceBackend | null = null;\n\t\ttry {\n\t\t\tpersistence = await createPersistenceBackend(config.persistence);\n\t\t\treturn ToolAwareSequentialThinkingServer._createContainerCore(\n\t\t\t\t{ ...options, config },\n\t\t\t\tfileConfig,\n\t\t\t\tpersistence\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tconst acquiredPersistence = persistence;\n\t\t\tconst cleanupFailures =\n\t\t\t\tacquiredPersistence === null\n\t\t\t\t\t? []\n\t\t\t\t\t: await collectCleanupFailures([() => acquiredPersistence.close()]);\n\t\t\tif (cleanupFailures.length > 0) {\n\t\t\t\tthrow new AggregateError(\n\t\t\t\t\t[error, ...cleanupFailures],\n\t\t\t\t\t'Container construction failed and cleanup also failed',\n\t\t\t\t\t{ cause: error }\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t/**\n\t * Get the DI container used by this server\n\t * Useful for testing and advanced customizations\n\t */\n\tpublic getContainer(): Container {\n\t\treturn this._container;\n\t}\n\n\t/**\n\t * Discover skills asynchronously without blocking server startup.\n\t * This is the recommended method for skill discovery.\n\t * @returns Promise<number> - The number of skills discovered\n\t */\n\tpublic async discoverSkillsAsync(): Promise<number> {\n\t\tconst discovered = await this.skills.discoverAsync();\n\t\treturn discovered;\n\t}\n\n\t/** Rescan configured tool and skill directories. */\n\tpublic refreshDiscovery(): Promise<{ tools: number; skills: number }> {\n\t\tif (!this._acceptingDiscoveryRefreshes) {\n\t\t\treturn Promise.reject(new SessionLifecycleClosedError(undefined, 'shutting_down'));\n\t\t}\n\t\tif (this._refreshPromise !== null) return this._refreshPromise;\n\n\t\tconst refreshPromise = Promise.allSettled([\n\t\t\tthis.tools.refreshAsync(),\n\t\t\tthis.skills.refreshAsync(),\n\t\t]).then(([toolResult, skillResult]) => {\n\t\t\tif (toolResult.status === 'rejected') {\n\t\t\t\tif (skillResult.status === 'rejected') {\n\t\t\t\t\tthrow new AggregateError(\n\t\t\t\t\t\t[toolResult.reason, skillResult.reason],\n\t\t\t\t\t\t'Failed to refresh tool and skill discovery'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthrow toolResult.reason;\n\t\t\t}\n\t\t\tif (skillResult.status === 'rejected') throw skillResult.reason;\n\t\t\treturn { tools: toolResult.value, skills: skillResult.value };\n\t\t});\n\t\tthis._refreshPromise = refreshPromise;\n\t\tconst clearRefreshPromise = (): void => {\n\t\t\tif (this._refreshPromise === refreshPromise) this._refreshPromise = null;\n\t\t};\n\t\tvoid refreshPromise.then(clearRefreshPromise, clearRefreshPromise);\n\t\treturn refreshPromise;\n\t}\n\n\t/**\n\t * Get all branches for one explicit thought session.\n\t * @param sessionId - Valid thought-session identifier\n\t * @returns Record<string, ThoughtData[]> - Map of branch IDs to thought arrays\n\t */\n\tpublic getBranches(sessionId: string): Record<BranchId, ThoughtData[]> {\n\t\treturn this._historyManager.getBranches(asSessionId(sessionId));\n\t}\n\n\t// Main processing method - delegate to ThoughtProcessor\n\tpublic async processThought(input: v.InferInput<typeof SequentialThinkingSchema>) {\n\t\tconst startTime = Date.now();\n\t\tconst result = await this._thoughtProcessor.process(input as ThoughtData);\n\t\tconst durationSeconds = (Date.now() - startTime) / 1000;\n\t\tthis._metrics.histogram('thought_processing_duration_seconds', durationSeconds, {});\n\t\treturn result;\n\t}\n\n\tpublic getMetricsSnapshot(): string {\n\t\treturn this._metrics.export();\n\t}\n\n\t/**\n\t * Stop the server and clean up watchers.\n\t * Closes persistence backend gracefully to ensure data is flushed.\n\t */\n\tpublic stop(): Promise<void> {\n\t\tthis._acceptingDiscoveryRefreshes = false;\n\t\tif (this._stopPromise) return this._stopPromise;\n\t\tconst acceptedRefresh = this._refreshPromise;\n\t\tthis._stopPromise = this._container.resolve('sessionLifecycle').shutdown(async () => {\n\t\t\tconst failures: unknown[] = [];\n\t\t\tconst [skillWatcherResult, toolWatcherResult, refreshResult] = await Promise.allSettled([\n\t\t\t\tthis._skillWatcher?.stop() ?? Promise.resolve(),\n\t\t\t\tthis._toolWatcher?.stop() ?? Promise.resolve(),\n\t\t\t\tacceptedRefresh ?? Promise.resolve(),\n\t\t\t]);\n\t\t\tfor (const result of [skillWatcherResult, toolWatcherResult]) {\n\t\t\t\tswitch (result.status) {\n\t\t\t\t\tcase 'fulfilled':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'rejected':\n\t\t\t\t\t\tappendCleanupFailure(failures, result.reason);\n\t\t\t\t\t\tthis._logger.error('Error stopping watcher', {\n\t\t\t\t\t\t\terror: getErrorMessage(result.reason),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tassertNever(result);\n\t\t\t\t}\n\t\t\t}\n\t\t\tswitch (refreshResult.status) {\n\t\t\t\tcase 'fulfilled':\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'rejected':\n\t\t\t\t\tappendCleanupFailure(failures, refreshResult.reason);\n\t\t\t\t\tthis._logger.error('Error refreshing discovery during shutdown', {\n\t\t\t\t\t\terror: getErrorMessage(refreshResult.reason),\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tassertNever(refreshResult);\n\t\t\t}\n\n\t\t\t// Stop suspension store sweeper if registered\n\t\t\tif (this._config.features.toolInterleave && this._container.has('suspensionStore')) {\n\t\t\t\ttry {\n\t\t\t\t\tconst suspensionStore = this._container.resolve('suspensionStore');\n\t\t\t\t\tsuspensionStore.stop();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tappendCleanupFailure(failures, error);\n\t\t\t\t\tthis._logger.error('Error stopping suspension store', {\n\t\t\t\t\t\terror: getErrorMessage(error),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Flush any buffered writes before closing persistence\n\t\t\ttry {\n\t\t\t\tawait this._historyManager.shutdownWithinLifecycle();\n\t\t\t} catch (error) {\n\t\t\t\tappendCleanupFailure(failures, error);\n\t\t\t\tthis._logger.error('Error flushing write buffer during shutdown', {\n\t\t\t\t\terror: getErrorMessage(error),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Close persistence backend if available\n\t\t\tconst persistence = this._container.resolve('Persistence');\n\t\t\tif (persistence) {\n\t\t\t\ttry {\n\t\t\t\t\tawait persistence.close();\n\t\t\t\t\tthis._logger.info('Persistence backend closed');\n\t\t\t\t} catch (error) {\n\t\t\t\t\tappendCleanupFailure(failures, error);\n\t\t\t\t\tthis._logger.error('Error closing persistence backend', {\n\t\t\t\t\t\terror: getErrorMessage(error),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (failures.length > 0) {\n\t\t\t\tthrow new AggregateError(failures, 'Failed to stop server cleanly');\n\t\t\t}\n\t\t\tthis._historyManager.clearLiveStateAfterShutdown();\n\t\t\tthis._logger.info('Server stopped, watchers cleaned up');\n\t\t});\n\t\treturn this._stopPromise;\n\t}\n\n\t/** Awaitably resets one session and matching processor-owned state. */\n\tpublic async resetSession(sessionId: string): Promise<void> {\n\t\tawait this._thoughtProcessor.resetSession(sessionId);\n\t\tthis._logger.info('Server session reset', { sessionId });\n\t}\n\n\t/** Awaitably resets all server state from a trusted ownerless context. */\n\tpublic async resetAll(): Promise<void> {\n\t\tawait this._thoughtProcessor.resetAll();\n\t\tthis._logger.info('All server sessions reset');\n\t}\n\n\t/**\n\t * Dispose of the server and all container services.\n\t * Implements the IDisposable interface.\n\t * Calls stop() for existing cleanup, then disposes the DI container.\n\t */\n\tpublic dispose(): Promise<void> {\n\t\tif (this._disposePromise) return this._disposePromise;\n\t\tthis._disposePromise = (async () => {\n\t\t\tconst failures = await collectCleanupFailures([\n\t\t\t\t() => this.stop(),\n\t\t\t\t() => this._container.dispose(),\n\t\t\t]);\n\t\t\tif (failures.length > 0) {\n\t\t\t\tthrow new AggregateError(failures, 'Failed to dispose server cleanly');\n\t\t\t}\n\t\t\tthis._logger.info('Server disposed, all resources released');\n\t\t})();\n\t\treturn this._disposePromise;\n\t}\n}\n\n/**\n * Factory function to create a new server instance with async initialization.\n *\n * This is the recommended way to create server instances, especially for testing,\n * as it allows for proper async initialization, dependency injection, and persistence.\n *\n * @param options - Server configuration options\n * @returns A Promise that resolves to a configured server instance\n *\n * @example\n * ```typescript\n * import { createServer } from '@iworkforces/tracelattice';\n *\n * // Basic usage (with async discovery and persistence)\n * const server = await createServer();\n *\n * // With custom options\n * const server = await createServer({\n * autoDiscover: false,\n * lazyDiscovery: true,\n * maxHistorySize: 500,\n * loadFromPersistence: true\n * });\n * ```\n */\nexport async function createServer(\n\toptions: ServerOptions = {}\n): Promise<ToolAwareSequentialThinkingServer> {\n\treturn ToolAwareSequentialThinkingServer.create(options);\n}\n\n// Initialize server\nexport async function initializeServer(): Promise<ToolAwareSequentialThinkingServer> {\n\t// Create logger for initialization\n\tconst configLoader = new ConfigLoader();\n\tconst fileConfig = configLoader.load() ?? {};\n\tconst config = new ServerConfig(configLoader.toServerConfigOptions(fileConfig));\n\n\tconst logger = new StructuredLogger({\n\t\tlevel: fileConfig.logLevel ?? 'info',\n\t\tcontext: 'SequentialThinking',\n\t\tpretty: fileConfig.prettyLog ?? true,\n\t});\n\n\t// Create server instance\n\tconst thinkingServer = await createServer({\n\t\tlogger,\n\t\tenableWatcher: true,\n\t\tconfig,\n\t\tfileConfig,\n\t});\n\n\tlogger.info('Server initialized successfully');\n\treturn thinkingServer;\n}\n"],"names":["appendCleanupFailure","failures","failure","AggregateError","collectCleanupFailures","operations","operation","error","ToolAwareSequentialThinkingServer","EventEmitter","options","container","server","Promise","startedServer","cleanupFailures","event","payload","listener","Error","SEQUENTIAL_THINKING_TOOL","SkillWatcher","ToolWatcher","fileConfig","persistence","Container","metrics","Metrics","config","logger","StructuredLogger","EdgeStore","InMemorySummaryStore","store","InMemorySuspensionStore","historyManager","edgeStore","summaryStore","log","CompressionService","summary","createReasoningStrategy","SessionLock","SessionLifecycleCoordinator","loadedOptions","ConfigLoader","ServerConfig","lazyDiscovery","ToolRegistry","DiscoveryCache","undefined","SkillRegistry","cfg","pers","componentMetrics","HistoryManager","ABSOLUTE_MAX_HISTORY_SIZE","sessionId","ThoughtFormatter","OutcomeRecorder","Calibrator","ThoughtEvaluator","history","formatter","evaluator","strategy","compressionService","suspensionStore","toolRegistry","sessionLock","ThoughtProcessor","configLoader","createPersistenceBackend","acquiredPersistence","discovered","SessionLifecycleClosedError","refreshPromise","toolResult","skillResult","clearRefreshPromise","asSessionId","input","startTime","Date","result","durationSeconds","acceptedRefresh","skillWatcherResult","toolWatcherResult","refreshResult","getErrorMessage","assertNever","createServer","initializeServer","thinkingServer"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwFA,SAASA,qBAAqBC,QAAmB,EAAEC,OAAgB;IAClE,IAAIA,mBAAmBC,gBAAgB,YACtCF,SAAS,IAAI,IAAIC,QAAQ,MAAM;IAGhCD,SAAS,IAAI,CAACC;AACf;AAEA,eAAeE,uBAAuBC,UAAuC;IAC5E,MAAMJ,WAAsB,EAAE;IAC9B,KAAK,MAAMK,aAAaD,WACvB,IAAI;QACH,MAAMC;IACP,EAAE,OAAOC,OAAO;QACfP,qBAAqBC,UAAUM;IAChC;IAED,OAAON;AACR;AA4EO,MAAMO,0CACJC;IAUR,aAAa,OAAOC,UAAyB,CAAC,CAAC,EAA8C;QAC5F,MAAMC,YAAY,MAAMH,kCAAkC,2BAA2B,CAACE;QACtF,IAAIE;QACJ,IAAI;YACHA,SAAS,IAAIJ,kCAAkC;gBAC9C,GAAGE,OAAO;gBACVC;YACD;YACA,MAAME,QAAQ,GAAG,CAAC;gBACjBD,OAAO,aAAa,EAAE,WAAWC,QAAQ,OAAO;gBAChDD,OAAO,YAAY,EAAE,WAAWC,QAAQ,OAAO;aAC/C;YAED,IAAIH,AAAgC,UAAhCA,QAAQ,mBAAmB,EAC9B,MAAME,OAAO,OAAO,CAAC,mBAAmB;YAGzC,IAAIF,AAAyB,UAAzBA,QAAQ,YAAY,IAAcA,AAA0B,SAA1BA,QAAQ,aAAa,EAC1D,MAAMG,QAAQ,GAAG,CAAC;gBAACD,OAAO,KAAK,CAAC,aAAa;gBAAIA,OAAO,mBAAmB;aAAG;YAG/E,OAAOA;QACR,EAAE,OAAOL,OAAO;YACf,MAAMO,gBAAgBF;YACtB,MAAMG,kBAAkB,MAAMX,uBAC7BU,gBACG;gBAAC,IAAMA,cAAc,OAAO;aAAG,GAC/B;gBACA;oBACC,IAAIH,UAAU,GAAG,CAAC,oBACjBA,UAAU,OAAO,CAAC,mBAAmB,IAAI;gBAE3C;gBACA,IAAMA,UAAU,OAAO,CAAC,gBAAgB;gBACxC,IAAMA,UAAU,OAAO;aACvB;YAEJ,IAAII,gBAAgB,MAAM,GAAG,GAC5B,MAAM,IAAIZ,eACT;gBAACI;mBAAUQ;aAAgB,EAC3B,iDACA;gBAAE,OAAOR;YAAM;YAGjB,MAAMA;QACP;IACD;IAGS,KAAmCS,KAAQ,EAAEC,OAAwB,EAAW;QACxF,OAAO,KAAK,CAAC,KAAKD,OAAOC;IAC1B;IAES,GACRD,KAAQ,EACRE,QAA4C,EACrC;QACP,OAAO,KAAK,CAAC,GAAGF,OAAOE;IACxB;IAGQ,WAAsB;IAGtB,QAA0B;IAC1B,gBAAgC;IAChC,kBAAoC;IACpC,SAAkB;IAClB,gBAAqC,KAAK;IAC1C,eAAmC,KAAK;IACxC,QAAsB;IACtB,+BAA+B,KAAK;IACpC,kBAAqE,KAAK;IAC1E,eAAqC,KAAK;IAC1C,kBAAwC,KAAK;IAWrC,QAAwB;IAUxB,MAAoB;IAUpB,OAAsB;IAStB,OAAqB;IAErC,YAAYR,UAAyB,CAAC,CAAC,CAAE;QAExC,KAAK;QACL,IAAI,CAACA,QAAQ,SAAS,EACrB,MAAM,IAAIS,MAAM;QAEjB,IAAI,CAAC,UAAU,GAAGT,QAAQ,SAAS;QAGnC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QACvC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAC/C,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,IAAM,IAAI,CAAC,IAAI;QACtD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QACjD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAGvC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe;QAGnC,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,IAAI;QACzC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QACrC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO;QAG1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAACU;QAGf,IAAIV,QAAQ,aAAa,EAAE;YAC1B,IAAI,CAAC,aAAa,GAAG,IAAIW,aAAa,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;YACtF,IAAI,CAAC,YAAY,GAAG,IAAIC,YAAY,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;QACnF;IACD;IAMA,OAAe,qBACdZ,OAAsB,EACtBa,UAAoC,EACpCC,WAAsC,EAC1B;QACZ,MAAMb,YAAY,IAAIc;QACtB,MAAMC,UAAU,IAAIC,QAAQ;YAC3B,QAAQ;QACT;QAEA,MAAMC,SAASpB,kCAAkC,uBAAuB,CAACE,SAASa;QAGlF,MAAMM,SACLnB,QAAQ,MAAM,IACd,IAAIoB,iBAAiB;YACpB,OAAOP,YAAY,YAAY;YAC/B,SAAS;YACT,QAAQA,YAAY,aAAa;QAClC;QAGDZ,UAAU,gBAAgB,CAAC,UAAUkB;QACrClB,UAAU,gBAAgB,CAAC,UAAUiB;QACrCjB,UAAU,gBAAgB,CAAC,cAAcY,cAAc,CAAC;QACxDZ,UAAU,gBAAgB,CAAC,eAAea;QAC1Cb,UAAU,gBAAgB,CAAC,WAAWe;QACtClB,kCAAkC,4BAA4B,CAC7DG,WACAD,QAAQ,aAAa;QAItBC,UAAU,QAAQ,CAAC,aAAa,IAAM,IAAIoB;QAG1CpB,UAAU,QAAQ,CAAC,gBAAgB,IAAM,IAAIqB;QAG7C,IAAIJ,OAAO,QAAQ,CAAC,cAAc,EACjCjB,UAAU,QAAQ,CAAC,mBAAmB;YACrC,MAAMsB,QAAQ,IAAIC,wBAAwB;gBACzC,OAAON,OAAO,mBAAmB;gBACjC,iBAAiBA,OAAO,qBAAqB;gBAC7CC;YACD;YACAI,MAAM,KAAK;YACX,OAAOA;QACR;QAIDtB,UAAU,QAAQ,CAAC,sBAAsB;YACxC,MAAMwB,iBAAiBxB,UAAU,OAAO,CAAC;YACzC,MAAMyB,YAAYzB,UAAU,OAAO,CAAC;YACpC,MAAM0B,eAAe1B,UAAU,OAAO,CAAC;YACvC,MAAM2B,MAAM3B,UAAU,OAAO,CAAC;YAC9B,OAAO,IAAI4B,mBAAmB;gBAC7BJ;gBACAC;gBACAC;gBACA,kBAAkB,CAACG;oBAClBL,eAAe,eAAe,CAC7BK,QAAQ,SAAS,EACjBH,aAAa,UAAU,CAACG,QAAQ,SAAS;gBAE3C;gBACA,QAAQF;YACT;QACD;QAGA3B,UAAU,QAAQ,CAAC,qBAAqB,IACvC8B,wBAAwBb,OAAO,QAAQ,CAAC,iBAAiB;QAK1DjB,UAAU,QAAQ,CAAC,eAAe,IAAM,IAAI+B;QAC5C/B,UAAU,QAAQ,CAAC,oBAAoB,IAAM,IAAIgC;QAEjDnC,kCAAkC,uBAAuB,CAACG;QAC1DH,kCAAkC,wBAAwB,CAACG,WAAWiB;QAEtE,OAAOjB;IACR;IAEA,OAAe,wBACdD,OAAsB,EACtBa,UAAoC,EACrB;QACf,IAAIb,QAAQ,MAAM,EAAE,OAAOA,QAAQ,MAAM;QACzC,MAAMkC,gBAAgB,IAAIC,eAAe,qBAAqB,CAACtB,cAAc,CAAC;QAC9E,OAAO,IAAIuB,aAAa;YACvB,GAAGF,aAAa;YAChB,gBAAgBlC,QAAQ,cAAc,IAAIkC,cAAc,cAAc;YACtE,aAAalC,QAAQ,WAAW,IAAIkC,cAAc,WAAW;YAC7D,eAAelC,QAAQ,aAAa,IAAIkC,cAAc,aAAa;QACpE;IACD;IAEA,OAAe,6BACdjC,SAAoB,EACpBoC,aAA6C,EACtC;QACP,MAAMlB,SAASlB,UAAU,OAAO,CAAC;QACjC,MAAMiB,SAASjB,UAAU,OAAO,CAAC;QACjC,MAAMe,UAAUf,UAAU,OAAO,CAAC;QAElCA,UAAU,QAAQ,CACjB,gBACA,IACC,IAAIqC,aAAa;gBAChBnB;gBACA,OAAOD,OAAO,cAAc,GACzB,IAAIqB,eAAe;oBAAE,GAAGrB,OAAO,cAAc;oBAAEF;gBAAQ,KACvDwB;gBACH,UAAUtB,OAAO,QAAQ;gBACzBmB;YACD;QAEFpC,UAAU,QAAQ,CACjB,iBACA,IACC,IAAIwC,cAAc;gBACjBtB;gBACA,OAAOD,OAAO,cAAc,GACzB,IAAIqB,eAAe;oBAAE,GAAGrB,OAAO,cAAc;oBAAEF;gBAAQ,KACvDwB;gBACH,WAAWtB,OAAO,SAAS;gBAC3BmB;YACD;IAEH;IAEA,OAAe,wBAAwBpC,SAAoB,EAAQ;QAElEA,UAAU,QAAQ,CAAC,kBAAkB;YACpC,MAAMyC,MAAMzC,UAAU,OAAO,CAAC;YAC9B,MAAM2B,MAAM3B,UAAU,OAAO,CAAC;YAC9B,MAAM0C,OAAO1C,UAAU,OAAO,CAAC;YAC/B,MAAM2C,mBAAmB3C,UAAU,OAAO,CAAC;YAC3C,MAAMyB,YAAYzB,UAAU,OAAO,CAAC;YACpC,MAAM0B,eAAe1B,UAAU,OAAO,CAAC;YACvC,OAAO,IAAI4C,eAAe;gBACzB,gBAAgBH,IAAI,cAAc;gBAClC,aAAaA,IAAI,WAAW;gBAC5B,eAAeA,IAAI,aAAa;gBAChC,QAAQd;gBACR,aAAae;gBACb,SAASC;gBACT,uBAAuBF,IAAI,qBAAqB;gBAChD,0BAA0BA,IAAI,wBAAwB;gBACtD,uBAAuBA,IAAI,qBAAqB;gBAChD,wBACCA,IAAI,WAAW,CAAC,OAAO,EAAE,kBAAkBI;gBAC5C,iBAAiBJ,IAAI,WAAW,CAAC,OAAO,EAAE,mBAAmB;gBAC7DhB;gBACAC;gBACA,UAAUe,IAAI,QAAQ,CAAC,QAAQ;gBAC/B,qBAAqBA,IAAI,mBAAmB;gBAC5C,aAAazC,UAAU,OAAO,CAAC;gBAC/B,sBAAsBA,UAAU,OAAO,CAAC;gBACxC,4BAA4B,CAAC8C,YAC5B9C,UAAU,OAAO,CAAC,oBAAoB,0BAA0B,CAAC8C;gBAClE,wBAAwB,IACvB9C,UAAU,OAAO,CAAC,oBAAoB,sBAAsB;YAC9D;QACD;IACD;IAEA,OAAe,yBAAyBA,SAAoB,EAAEiB,MAAoB,EAAQ;QAEzFjB,UAAU,eAAe,CAAC,oBAAoB,IAAM,IAAI+C;QAGxD/C,UAAU,QAAQ,CACjB,mBACA,IAAM,IAAIgD,gBAAgB;gBAAE,SAAS/B,OAAO,QAAQ,CAAC,gBAAgB,IAAI;YAAM;QAIhFjB,UAAU,QAAQ,CACjB,cACA,IACC,IAAIiD,WAAWjD,UAAU,OAAO,CAAC,oBAAoBiB,OAAO,QAAQ,CAAC,WAAW,IAAI;QAItFjB,UAAU,eAAe,CACxB,oBACA,IAAM,IAAIkD,iBAAiBlD,UAAU,OAAO,CAAC;QAI9CA,UAAU,QAAQ,CAAC,oBAAoB;YACtC,MAAMmD,UAAUnD,UAAU,OAAO,CAAC;YAClC,MAAMoD,YAAYpD,UAAU,OAAO,CAAC;YACpC,MAAMqD,YAAYrD,UAAU,OAAO,CAAC;YACpC,MAAM2B,MAAM3B,UAAU,OAAO,CAAC;YAC9B,MAAMsD,WAAWtD,UAAU,OAAO,CAAC;YACnC,MAAMuD,qBAAqBtC,OAAO,QAAQ,CAAC,WAAW,GACnDjB,UAAU,OAAO,CAAC,wBAClBuC;YACH,MAAMiB,kBAAkBvC,OAAO,QAAQ,CAAC,cAAc,GACnDjB,UAAU,OAAO,CAAC,qBAClBuC;YACH,MAAMkB,eAAezD,UAAU,OAAO,CAAC;YACvC,MAAM0D,cAAc1D,UAAU,OAAO,CAAC;YACtC,OAAO,IAAI2D,iBACVR,SACAC,WACAC,WACA1B,KACA2B,UACAC,oBACAC,iBACAC,cACAxC,OAAO,QAAQ,EACfyC,aACA1D,UAAU,OAAO,CAAC,oBAClBA,UAAU,OAAO,CAAC,qBAClBA,UAAU,OAAO,CAAC;QAEpB;IACD;IAMA,aAAqB,4BAA4BD,OAAsB,EAAsB;QAC5F,IAAIa;QACJ,IAAIK;QACJ,IAAIlB,QAAQ,MAAM,EAAE;YACnBa,aAAab,QAAQ,UAAU,IAAI;YACnCkB,SAASlB,QAAQ,MAAM;QACxB,OAAO;YACN,MAAM6D,eAAe,IAAI1B;YACzBtB,aACCb,AAAuBwC,WAAvBxC,QAAQ,UAAU,GACf6D,aAAa,IAAI,KACjBA,aAAa,yBAAyB,CAAC7D,QAAQ,UAAU;YAC7DkB,SAASpB,kCAAkC,uBAAuB,CAACE,SAASa;QAC7E;QAEA,IAAIC,cAAyC;QAC7C,IAAI;YACHA,cAAc,MAAMgD,yBAAyB5C,OAAO,WAAW;YAC/D,OAAOpB,kCAAkC,oBAAoB,CAC5D;gBAAE,GAAGE,OAAO;gBAAEkB;YAAO,GACrBL,YACAC;QAEF,EAAE,OAAOjB,OAAO;YACf,MAAMkE,sBAAsBjD;YAC5B,MAAMT,kBACL0D,AAAwB,SAAxBA,sBACG,EAAE,GACF,MAAMrE,uBAAuB;gBAAC,IAAMqE,oBAAoB,KAAK;aAAG;YACpE,IAAI1D,gBAAgB,MAAM,GAAG,GAC5B,MAAM,IAAIZ,eACT;gBAACI;mBAAUQ;aAAgB,EAC3B,yDACA;gBAAE,OAAOR;YAAM;YAGjB,MAAMA;QACP;IACD;IAMO,eAA0B;QAChC,OAAO,IAAI,CAAC,UAAU;IACvB;IAOA,MAAa,sBAAuC;QACnD,MAAMmE,aAAa,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa;QAClD,OAAOA;IACR;IAGO,mBAA+D;QACrE,IAAI,CAAC,IAAI,CAAC,4BAA4B,EACrC,OAAO7D,QAAQ,MAAM,CAAC,IAAI8D,4BAA4BzB,QAAW;QAElE,IAAI,AAAyB,SAAzB,IAAI,CAAC,eAAe,EAAW,OAAO,IAAI,CAAC,eAAe;QAE9D,MAAM0B,iBAAiB/D,QAAQ,UAAU,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,YAAY;YACvB,IAAI,CAAC,MAAM,CAAC,YAAY;SACxB,EAAE,IAAI,CAAC,CAAC,CAACgE,YAAYC,YAAY;YACjC,IAAID,AAAsB,eAAtBA,WAAW,MAAM,EAAiB;gBACrC,IAAIC,AAAuB,eAAvBA,YAAY,MAAM,EACrB,MAAM,IAAI3E,eACT;oBAAC0E,WAAW,MAAM;oBAAEC,YAAY,MAAM;iBAAC,EACvC;gBAGF,MAAMD,WAAW,MAAM;YACxB;YACA,IAAIC,AAAuB,eAAvBA,YAAY,MAAM,EAAiB,MAAMA,YAAY,MAAM;YAC/D,OAAO;gBAAE,OAAOD,WAAW,KAAK;gBAAE,QAAQC,YAAY,KAAK;YAAC;QAC7D;QACA,IAAI,CAAC,eAAe,GAAGF;QACvB,MAAMG,sBAAsB;YAC3B,IAAI,IAAI,CAAC,eAAe,KAAKH,gBAAgB,IAAI,CAAC,eAAe,GAAG;QACrE;QACKA,eAAe,IAAI,CAACG,qBAAqBA;QAC9C,OAAOH;IACR;IAOO,YAAYnB,SAAiB,EAAmC;QACtE,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,CAACuB,YAAYvB;IACrD;IAGA,MAAa,eAAewB,KAAoD,EAAE;QACjF,MAAMC,YAAYC,KAAK,GAAG;QAC1B,MAAMC,SAAS,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAACH;QACpD,MAAMI,kBAAmBF,AAAAA,CAAAA,KAAK,GAAG,KAAKD,SAAQ,IAAK;QACnD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,uCAAuCG,iBAAiB,CAAC;QACjF,OAAOD;IACR;IAEO,qBAA6B;QACnC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM;IAC5B;IAMO,OAAsB;QAC5B,IAAI,CAAC,4BAA4B,GAAG;QACpC,IAAI,IAAI,CAAC,YAAY,EAAE,OAAO,IAAI,CAAC,YAAY;QAC/C,MAAME,kBAAkB,IAAI,CAAC,eAAe;QAC5C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,oBAAoB,QAAQ,CAAC;YACxE,MAAMrF,WAAsB,EAAE;YAC9B,MAAM,CAACsF,oBAAoBC,mBAAmBC,cAAc,GAAG,MAAM5E,QAAQ,UAAU,CAAC;gBACvF,IAAI,CAAC,aAAa,EAAE,UAAUA,QAAQ,OAAO;gBAC7C,IAAI,CAAC,YAAY,EAAE,UAAUA,QAAQ,OAAO;gBAC5CyE,mBAAmBzE,QAAQ,OAAO;aAClC;YACD,KAAK,MAAMuE,UAAU;gBAACG;gBAAoBC;aAAkB,CAC3D,OAAQJ,OAAO,MAAM;gBACpB,KAAK;oBACJ;gBACD,KAAK;oBACJpF,qBAAqBC,UAAUmF,OAAO,MAAM;oBAC5C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,0BAA0B;wBAC5C,OAAOM,gBAAgBN,OAAO,MAAM;oBACrC;oBACA;gBACD;oBACCO,YAAYP;YACd;YAED,OAAQK,cAAc,MAAM;gBAC3B,KAAK;oBACJ;gBACD,KAAK;oBACJzF,qBAAqBC,UAAUwF,cAAc,MAAM;oBACnD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,8CAA8C;wBAChE,OAAOC,gBAAgBD,cAAc,MAAM;oBAC5C;oBACA;gBACD;oBACCE,YAAYF;YACd;YAGA,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,oBAC/D,IAAI;gBACH,MAAMtB,kBAAkB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBAChDA,gBAAgB,IAAI;YACrB,EAAE,OAAO5D,OAAO;gBACfP,qBAAqBC,UAAUM;gBAC/B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,mCAAmC;oBACrD,OAAOmF,gBAAgBnF;gBACxB;YACD;YAID,IAAI;gBACH,MAAM,IAAI,CAAC,eAAe,CAAC,uBAAuB;YACnD,EAAE,OAAOA,OAAO;gBACfP,qBAAqBC,UAAUM;gBAC/B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,+CAA+C;oBACjE,OAAOmF,gBAAgBnF;gBACxB;YACD;YAGA,MAAMiB,cAAc,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAC5C,IAAIA,aACH,IAAI;gBACH,MAAMA,YAAY,KAAK;gBACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YACnB,EAAE,OAAOjB,OAAO;gBACfP,qBAAqBC,UAAUM;gBAC/B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,qCAAqC;oBACvD,OAAOmF,gBAAgBnF;gBACxB;YACD;YAGD,IAAIN,SAAS,MAAM,GAAG,GACrB,MAAM,IAAIE,eAAeF,UAAU;YAEpC,IAAI,CAAC,eAAe,CAAC,2BAA2B;YAChD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QACnB;QACA,OAAO,IAAI,CAAC,YAAY;IACzB;IAGA,MAAa,aAAawD,SAAiB,EAAiB;QAC3D,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAACA;QAC1C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB;YAAEA;QAAU;IACvD;IAGA,MAAa,WAA0B;QACtC,MAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ;QACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IACnB;IAOO,UAAyB;QAC/B,IAAI,IAAI,CAAC,eAAe,EAAE,OAAO,IAAI,CAAC,eAAe;QACrD,IAAI,CAAC,eAAe,GAAI;YACvB,MAAMxD,WAAW,MAAMG,uBAAuB;gBAC7C,IAAM,IAAI,CAAC,IAAI;gBACf,IAAM,IAAI,CAAC,UAAU,CAAC,OAAO;aAC7B;YACD,IAAIH,SAAS,MAAM,GAAG,GACrB,MAAM,IAAIE,eAAeF,UAAU;YAEpC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QACnB;QACA,OAAO,IAAI,CAAC,eAAe;IAC5B;AACD;AA2BO,eAAe2F,aACrBlF,UAAyB,CAAC,CAAC;IAE3B,OAAOF,kCAAkC,MAAM,CAACE;AACjD;AAGO,eAAemF;IAErB,MAAMtB,eAAe,IAAI1B;IACzB,MAAMtB,aAAagD,aAAa,IAAI,MAAM,CAAC;IAC3C,MAAM3C,SAAS,IAAIkB,aAAayB,aAAa,qBAAqB,CAAChD;IAEnE,MAAMM,SAAS,IAAIC,iBAAiB;QACnC,OAAOP,WAAW,QAAQ,IAAI;QAC9B,SAAS;QACT,QAAQA,WAAW,SAAS,IAAI;IACjC;IAGA,MAAMuE,iBAAiB,MAAMF,aAAa;QACzC/D;QACA,eAAe;QACfD;QACAL;IACD;IAEAM,OAAO,IAAI,CAAC;IACZ,OAAOiE;AACR"}
1
+ {"version":3,"file":"lib.js","sources":["../src/lib.ts"],"sourcesContent":["// Library exports for tracelattice\n// This module contains all public API exports with NO CLI side effects.\n// For the CLI entry point, see cli.ts.\n\nimport { EventEmitter } from 'node:events';\nimport type * as v from 'valibot';\nimport type { ThoughtData } from './core/thought.js';\nimport { asSessionId } from './contracts/ids.js';\nimport type { BranchId, SessionId, ThoughtId } from './contracts/ids.js';\nimport type { Edge } from './core/graph/Edge.js';\nimport type { Summary } from './core/compression/Summary.js';\nimport type { SequentialThinkingSchema } from './schema.js';\nimport { SEQUENTIAL_THINKING_TOOL } from './schema.js';\nimport type { IDisposable } from './types/disposable.js';\nimport { getErrorMessage } from './errors.js';\nimport { assertNever } from './utils.js';\n\n// New component imports\nimport { DiscoveryCache } from './cache/DiscoveryCache.js';\nimport type { ConfigFileOptions } from './config/ConfigLoader.js';\nimport { ConfigLoader } from './config/ConfigLoader.js';\nimport { ABSOLUTE_MAX_HISTORY_SIZE, HistoryManager } from './core/HistoryManager.js';\nimport { EdgeStore } from './core/graph/EdgeStore.js';\nimport { InMemorySummaryStore } from './core/compression/InMemorySummaryStore.js';\nimport { CompressionService } from './core/compression/CompressionService.js';\nimport { InMemorySuspensionStore } from './core/tools/InMemorySuspensionStore.js';\nimport { ThoughtEvaluator } from './core/ThoughtEvaluator.js';\nimport { Calibrator } from './core/evaluator/Calibrator.js';\nimport { OutcomeRecorder } from './core/reasoning/OutcomeRecorder.js';\nimport { createReasoningStrategy } from './core/reasoning/strategies/StrategyFactory.js';\nimport { ThoughtFormatter } from './core/ThoughtFormatter.js';\nimport { ThoughtProcessor, type CallToolResult } from './core/ThoughtProcessor.js';\nimport { SessionLock } from './core/SessionLock.js';\nimport { SessionLifecycleClosedError } from './core/SessionErrors.js';\nimport { SessionLifecycleCoordinator } from './core/SessionLifecycleCoordinator.js';\nimport { Container } from './di/Container.js';\nimport { StructuredLogger } from './logger/StructuredLogger.js';\nimport { Metrics } from './metrics/metrics.impl.js';\nimport type { PersistenceBackend } from './contracts/PersistenceBackend.js';\nimport { createPersistenceBackend } from './persistence/PersistenceFactory.js';\nimport { SkillRegistry } from './registry/SkillRegistry.js';\nimport { ToolRegistry } from './registry/ToolRegistry.js';\nimport { ServerConfig } from './ServerConfig.js';\nimport { SkillWatcher } from './watchers/SkillWatcher.js';\nimport { ToolWatcher } from './watchers/ToolWatcher.js';\nimport { HttpTransport, createHttpTransport } from './transport/HttpTransport.js';\nimport type { HttpTransportOptions } from './transport/HttpTransport.js';\nimport type { TransportOptions } from './transport/BaseTransport.js';\nimport type { ITransport, TransportKind } from './contracts/transport.js';\n\nexport { HttpTransport, createHttpTransport };\nexport type {\n\tHttpTransportOptions,\n\tTransportOptions,\n\tITransport,\n\tTransportKind,\n\tPersistenceBackend,\n\tThoughtData,\n\tEdge,\n\tSummary,\n\tSessionId,\n\tThoughtId,\n\tBranchId,\n};\n\nexport interface ServerOptions {\n\tmaxHistorySize?: number;\n\tmaxBranches?: number;\n\tmaxBranchSize?: number;\n\tlogger?: StructuredLogger;\n\tenableWatcher?: boolean;\n\tconfig?: ServerConfig;\n\tfileConfig?: ConfigFileOptions;\n\tcontainer?: Container;\n\t/**\n\t * Use this backend instead of the configured persistence factory.\n\t * The caller owns and closes it; the server only drains its buffered writes.\n\t * @default undefined\n\t */\n\tpersistenceBackend?: PersistenceBackend;\n\t/**\n\t * Enable automatic tool and skill discovery on server startup.\n\t * @default true\n\t */\n\tautoDiscover?: boolean;\n\t/**\n\t * Suppress startup discovery so callers can discover through registry APIs explicitly.\n\t * @default false\n\t */\n\tlazyDiscovery?: boolean;\n\t/**\n\t * Load history from persistence on initialization\n\t * @default true\n\t */\n\tloadFromPersistence?: boolean;\n}\n\n/**\n * Server error events for event-driven error handling\n */\ninterface ServerEvents {\n\tpersistenceError: { operation: string; error: Error };\n\tdiscoveryError: { directory: string; error: Error };\n\ttransportError: { transport: string; error: Error };\n\tthoughtProcessed: { thoughtNumber: number; duration: number };\n}\n\ntype CleanupOperation = () => void | Promise<void>;\n\nasync function closeOwnedPersistence(\n\tpersistence: PersistenceBackend | null,\n\tborrowed: PersistenceBackend | null\n): Promise<void> {\n\tif (persistence !== null && persistence !== borrowed) await persistence.close();\n}\n\nfunction appendCleanupFailure(failures: unknown[], failure: unknown): void {\n\tif (failure instanceof AggregateError) {\n\t\tfailures.push(...failure.errors);\n\t\treturn;\n\t}\n\tfailures.push(failure);\n}\n\nasync function collectCleanupFailures(operations: readonly CleanupOperation[]): Promise<unknown[]> {\n\tconst failures: unknown[] = [];\n\tfor (const operation of operations) {\n\t\ttry {\n\t\t\tawait operation();\n\t\t} catch (error) {\n\t\t\tappendCleanupFailure(failures, error);\n\t\t}\n\t}\n\treturn failures;\n}\n\n/**\n * Public API contract for the tool-aware sequential thinking server.\n *\n * Extends {@link IDisposable} for resource cleanup. Concrete implementations\n * are expected to also extend Node's `EventEmitter` to support the typed\n * `emit`/`on` overloads.\n */\nexport interface IToolAwareSequentialThinkingServer extends IDisposable {\n\t/** Direct access to the history manager. */\n\treadonly history: HistoryManager;\n\n\t/** Direct access to the tool registry. */\n\treadonly tools: ToolRegistry;\n\n\t/** Direct access to the skill registry. */\n\treadonly skills: SkillRegistry;\n\n\t/** Server configuration. */\n\treadonly config: ServerConfig;\n\n\t/**\n\t * Discover skills asynchronously without blocking server startup.\n\t *\n\t * @returns The number of skills discovered\n\t */\n\tdiscoverSkillsAsync(): Promise<number>;\n\n\t/** Rescan configured tool and skill directories. */\n\trefreshDiscovery(): Promise<{ tools: number; skills: number }>;\n\n\t/**\n\t * Get all branches for one explicit thought session.\n\t *\n\t * @param sessionId - Valid thought-session identifier\n\t * @returns Map of branch IDs to thought arrays\n\t */\n\tgetBranches(sessionId: string): Record<string, ThoughtData[]>;\n\n\t/**\n\t * Process a thought through the configured pipeline.\n\t *\n\t * @param input - Validated thought input matching the schema\n\t * @returns The processing result\n\t */\n\tprocessThought(input: v.InferInput<typeof SequentialThinkingSchema>): Promise<CallToolResult>;\n\n\t/**\n\t * Export the current Prometheus metrics snapshot.\n\t */\n\tgetMetricsSnapshot(): string;\n\n\t/**\n\t * Get the DI container used by this server.\n\t * Useful for testing and advanced customizations.\n\t */\n\tgetContainer(): Container;\n\n\t/**\n\t * Stop the server and clean up watchers, suspension stores, and persistence.\n\t */\n\tstop(): Promise<void>;\n\n\t/** Awaitably reset one session and all matching auxiliary state. */\n\tresetSession(sessionId: string): Promise<void>;\n\n\t/** Awaitably reset all state from a trusted ownerless context. */\n\tresetAll(): Promise<void>;\n\n\t/**\n\t * Dispose of the server and all container services.\n\t */\n\tdispose(): Promise<void>;\n}\n\nexport class ToolAwareSequentialThinkingServer\n\textends EventEmitter\n\timplements IToolAwareSequentialThinkingServer\n{\n\t/**\n\t * Factory method to create a new server instance with async initialization.\n\t * This is the recommended way to create server instances.\n\t *\n\t * @param options - Server configuration options\n\t * @returns A Promise that resolves to a configured server instance\n\t */\n\tstatic async create(options: ServerOptions = {}): Promise<ToolAwareSequentialThinkingServer> {\n\t\tconst container = await ToolAwareSequentialThinkingServer._createContainerAsyncStatic(options);\n\t\tlet server: ToolAwareSequentialThinkingServer | undefined;\n\t\ttry {\n\t\t\tserver = new ToolAwareSequentialThinkingServer({\n\t\t\t\t...options,\n\t\t\t\tcontainer,\n\t\t\t});\n\t\t\tawait Promise.all([\n\t\t\t\tserver._skillWatcher?.ready() ?? Promise.resolve(),\n\t\t\t\tserver._toolWatcher?.ready() ?? Promise.resolve(),\n\t\t\t]);\n\n\t\t\tif (options.loadFromPersistence !== false) {\n\t\t\t\tawait server.history.loadFromPersistence();\n\t\t\t}\n\n\t\t\tif (options.autoDiscover !== false && options.lazyDiscovery !== true) {\n\t\t\t\tawait Promise.all([server.tools.discoverAsync(), server.discoverSkillsAsync()]);\n\t\t\t}\n\n\t\t\treturn server;\n\t\t} catch (error) {\n\t\t\tconst startedServer = server;\n\t\t\tconst cleanupFailures = await collectCleanupFailures(\n\t\t\t\tstartedServer\n\t\t\t\t\t? [() => startedServer.dispose()]\n\t\t\t\t\t: [\n\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\tif (container.has('suspensionStore')) {\n\t\t\t\t\t\t\t\t\tcontainer.resolve('suspensionStore').stop();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\t\tcloseOwnedPersistence(\n\t\t\t\t\t\t\t\t\tcontainer.resolve('Persistence'),\n\t\t\t\t\t\t\t\t\toptions.persistenceBackend ?? null\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t() => container.dispose(),\n\t\t\t\t\t\t]\n\t\t\t);\n\t\t\tif (cleanupFailures.length > 0) {\n\t\t\t\tthrow new AggregateError(\n\t\t\t\t\t[error, ...cleanupFailures],\n\t\t\t\t\t'Server startup failed and cleanup also failed',\n\t\t\t\t\t{ cause: error }\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t// Type-safe event emission\n\toverride emit<K extends keyof ServerEvents>(event: K, payload: ServerEvents[K]): boolean {\n\t\treturn super.emit(event, payload);\n\t}\n\n\toverride on<K extends keyof ServerEvents>(\n\t\tevent: K,\n\t\tlistener: (payload: ServerEvents[K]) => void\n\t): this {\n\t\treturn super.on(event, listener);\n\t}\n\n\t// DI Container for managing dependencies\n\tprivate _container: Container;\n\tprivate readonly _borrowedPersistence: PersistenceBackend | null;\n\n\t// Component instances (private)\n\tprivate _logger: StructuredLogger;\n\tprivate _historyManager: HistoryManager;\n\tprivate _thoughtProcessor: ThoughtProcessor;\n\tprivate _metrics: Metrics;\n\tprivate _skillWatcher: SkillWatcher | null = null;\n\tprivate _toolWatcher: ToolWatcher | null = null;\n\tprivate _config: ServerConfig;\n\tprivate _acceptingDiscoveryRefreshes = true;\n\tprivate _refreshPromise: Promise<{ tools: number; skills: number }> | null = null;\n\tprivate _stopPromise: Promise<void> | null = null;\n\tprivate _disposePromise: Promise<void> | null = null;\n\n\t// Public manager properties (recommended API)\n\t/**\n\t * Direct access to the history manager\n\t * @example\n\t * ```typescript\n\t * server.history.getHistory('analysis-session');\n\t * await server.resetAll();\n\t * ```\n\t */\n\tpublic readonly history: HistoryManager;\n\n\t/**\n\t * Direct access to the tool registry\n\t * @example\n\t * ```typescript\n\t * server.tools.add(tool);\n\t * server.tools.get('my-tool');\n\t * ```\n\t */\n\tpublic readonly tools: ToolRegistry;\n\n\t/**\n\t * Direct access to the skill registry\n\t * @example\n\t * ```typescript\n\t * server.skills.add(skill);\n\t * server.skills.get('my-skill');\n\t * ```\n\t */\n\tpublic readonly skills: SkillRegistry;\n\n\t/**\n\t * Server configuration\n\t * @example\n\t * ```typescript\n\t * console.log(server.config.maxHistorySize);\n\t * ```\n\t */\n\tpublic readonly config: ServerConfig;\n\n\tconstructor(options: ServerOptions = {}) {\n\t\t// Use provided container or create a new one\n\t\tsuper();\n\t\tif (!options.container) {\n\t\t\tthrow new Error('Container is required. Use createServer() or provide a container.');\n\t\t}\n\t\tthis._container = options.container;\n\t\tthis._borrowedPersistence = options.persistenceBackend ?? null;\n\n\t\t// Resolve dependencies from container\n\t\tthis._logger = this._container.resolve('Logger');\n\t\tthis._historyManager = this._container.resolve('HistoryManager');\n\t\tthis._historyManager.bindShutdownOwner(() => this.stop());\n\t\tthis._thoughtProcessor = this._container.resolve('ThoughtProcessor');\n\t\tthis._metrics = this._container.resolve('Metrics');\n\t\tthis._config = this._container.resolve('Config');\n\n\t\t// Expose managers as public properties (recommended API)\n\t\tthis.history = this._historyManager;\n\n\t\t// Wire up persistence error event emitter\n\t\tthis._historyManager.setEventEmitter(this);\n\t\tthis.tools = this._container.resolve('ToolRegistry');\n\t\tthis.skills = this._container.resolve('SkillRegistry');\n\t\tthis.config = this._config;\n\n\t\t// Always include the sequential thinking tool\n\t\tthis.tools.add(SEQUENTIAL_THINKING_TOOL);\n\n\t\t// Initialize watchers if enabled\n\t\tif (options.enableWatcher) {\n\t\t\tthis._skillWatcher = new SkillWatcher(this.skills, this._logger, this.config.skillDirs);\n\t\t\tthis._toolWatcher = new ToolWatcher(this.tools, this._logger, this.config.toolDirs);\n\t\t}\n\t}\n\n\t/**\n\t * Shared core logic for container creation.\n\t * This method contains all common initialization logic between sync and async paths.\n\t */\n\tprivate static _createContainerCore(\n\t\toptions: ServerOptions,\n\t\tfileConfig: ConfigFileOptions | null,\n\t\tpersistence: PersistenceBackend | null\n\t): Container {\n\t\tconst container = new Container();\n\t\tconst metrics = new Metrics({\n\t\t\tprefix: 'sequentialthinking',\n\t\t});\n\n\t\tconst config = ToolAwareSequentialThinkingServer._resolveEffectiveConfig(options, fileConfig);\n\n\t\t// Initialize logger\n\t\tconst logger =\n\t\t\toptions.logger ??\n\t\t\tnew StructuredLogger({\n\t\t\t\tlevel: fileConfig?.logLevel ?? 'info',\n\t\t\t\tcontext: 'SequentialThinking',\n\t\t\t\tpretty: fileConfig?.prettyLog ?? true,\n\t\t\t});\n\n\t\t// Register all services in the container\n\t\tcontainer.registerInstance('Logger', logger);\n\t\tcontainer.registerInstance('Config', config);\n\t\tcontainer.registerInstance('FileConfig', fileConfig || {});\n\t\tcontainer.registerInstance('Persistence', persistence);\n\t\tcontainer.registerInstance('Metrics', metrics);\n\t\tToolAwareSequentialThinkingServer._registerDiscoveryRegistries(\n\t\t\tcontainer,\n\t\t\toptions.lazyDiscovery\n\t\t);\n\n\t\t// Register EdgeStore as a lazy singleton (always registered; flag gates writes)\n\t\tcontainer.register('EdgeStore', () => new EdgeStore());\n\n\t\t// Register SummaryStore as a lazy singleton (always registered; flag gates writes)\n\t\tcontainer.register('summaryStore', () => new InMemorySummaryStore());\n\n\t\t// Register SuspensionStore as a lazy singleton (only when toolInterleave flag is on)\n\t\tif (config.features.toolInterleave) {\n\t\t\tcontainer.register('suspensionStore', () => {\n\t\t\t\tconst store = new InMemorySuspensionStore({\n\t\t\t\t\tttlMs: config.toolInterleaveTtlMs,\n\t\t\t\t\tsweepIntervalMs: config.toolInterleaveSweepMs,\n\t\t\t\t\tlogger,\n\t\t\t\t});\n\t\t\t\tstore.start();\n\t\t\t\treturn store;\n\t\t\t});\n\t\t}\n\n\t\t// Register CompressionService as a lazy singleton (always registered; flag gates invocation)\n\t\tcontainer.register('compressionService', () => {\n\t\t\tconst historyManager = container.resolve('HistoryManager');\n\t\t\tconst edgeStore = container.resolve('EdgeStore');\n\t\t\tconst summaryStore = container.resolve('summaryStore');\n\t\t\tconst log = container.resolve('Logger');\n\t\t\treturn new CompressionService({\n\t\t\t\thistoryManager,\n\t\t\t\tedgeStore,\n\t\t\t\tsummaryStore,\n\t\t\t\tonSummaryCreated: (summary) => {\n\t\t\t\t\thistoryManager.bufferSummaries(\n\t\t\t\t\t\tsummary.sessionId,\n\t\t\t\t\t\tsummaryStore.forSession(summary.sessionId)\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tlogger: log,\n\t\t\t});\n\t\t});\n\n\t\t// Register ReasoningStrategy as a lazy singleton (selected via feature flag)\n\t\tcontainer.register('reasoningStrategy', () =>\n\t\t\tcreateReasoningStrategy(config.features.reasoningStrategy)\n\t\t);\n\n\t\t// Register SessionLock as a lazy singleton (always registered;\n\t\t// serializes ThoughtProcessor.process() per-session).\n\t\tcontainer.register('sessionLock', () => new SessionLock());\n\t\tcontainer.register('sessionLifecycle', () => new SessionLifecycleCoordinator());\n\n\t\tToolAwareSequentialThinkingServer._registerHistoryManager(container);\n\t\tToolAwareSequentialThinkingServer._registerThoughtPipeline(container, config);\n\n\t\treturn container;\n\t}\n\n\tprivate static _resolveEffectiveConfig(\n\t\toptions: ServerOptions,\n\t\tfileConfig: ConfigFileOptions | null\n\t): ServerConfig {\n\t\tif (options.config) return options.config;\n\t\tconst loadedOptions = new ConfigLoader().toServerConfigOptions(fileConfig ?? {});\n\t\treturn new ServerConfig({\n\t\t\t...loadedOptions,\n\t\t\tmaxHistorySize: options.maxHistorySize ?? loadedOptions.maxHistorySize,\n\t\t\tmaxBranches: options.maxBranches ?? loadedOptions.maxBranches,\n\t\t\tmaxBranchSize: options.maxBranchSize ?? loadedOptions.maxBranchSize,\n\t\t});\n\t}\n\n\tprivate static _registerDiscoveryRegistries(\n\t\tcontainer: Container,\n\t\tlazyDiscovery: ServerOptions['lazyDiscovery']\n\t): void {\n\t\tconst logger = container.resolve('Logger');\n\t\tconst config = container.resolve('Config');\n\t\tconst metrics = container.resolve('Metrics');\n\n\t\tcontainer.register(\n\t\t\t'ToolRegistry',\n\t\t\t() =>\n\t\t\t\tnew ToolRegistry({\n\t\t\t\t\tlogger,\n\t\t\t\t\tcache: config.discoveryCache\n\t\t\t\t\t\t? new DiscoveryCache({ ...config.discoveryCache, metrics })\n\t\t\t\t\t\t: undefined,\n\t\t\t\t\ttoolDirs: config.toolDirs,\n\t\t\t\t\tlazyDiscovery,\n\t\t\t\t})\n\t\t);\n\t\tcontainer.register(\n\t\t\t'SkillRegistry',\n\t\t\t() =>\n\t\t\t\tnew SkillRegistry({\n\t\t\t\t\tlogger,\n\t\t\t\t\tcache: config.discoveryCache\n\t\t\t\t\t\t? new DiscoveryCache({ ...config.discoveryCache, metrics })\n\t\t\t\t\t\t: undefined,\n\t\t\t\t\tskillDirs: config.skillDirs,\n\t\t\t\t\tlazyDiscovery,\n\t\t\t\t})\n\t\t);\n\t}\n\n\tprivate static _registerHistoryManager(container: Container): void {\n\t\t// Register HistoryManager with lazy initialization\n\t\tcontainer.register('HistoryManager', () => {\n\t\t\tconst cfg = container.resolve('Config');\n\t\t\tconst log = container.resolve('Logger');\n\t\t\tconst pers = container.resolve('Persistence');\n\t\t\tconst componentMetrics = container.resolve('Metrics');\n\t\t\tconst edgeStore = container.resolve('EdgeStore');\n\t\t\tconst summaryStore = container.resolve('summaryStore');\n\t\t\treturn new HistoryManager({\n\t\t\t\tmaxHistorySize: cfg.maxHistorySize,\n\t\t\t\tmaxBranches: cfg.maxBranches,\n\t\t\t\tmaxBranchSize: cfg.maxBranchSize,\n\t\t\t\tlogger: log,\n\t\t\t\tpersistence: pers,\n\t\t\t\tmetrics: componentMetrics,\n\t\t\t\tpersistenceBufferSize: cfg.persistenceBufferSize,\n\t\t\t\tpersistenceFlushInterval: cfg.persistenceFlushInterval,\n\t\t\t\tpersistenceMaxRetries: cfg.persistenceMaxRetries,\n\t\t\t\tpersistenceHistorySize:\n\t\t\t\t\tcfg.persistence.options?.maxHistorySize ?? ABSOLUTE_MAX_HISTORY_SIZE,\n\t\t\t\tpersistBranches: cfg.persistence.options?.persistBranches ?? true,\n\t\t\t\tedgeStore,\n\t\t\t\tsummaryStore,\n\t\t\t\tdagEdges: cfg.features.dagEdges,\n\t\t\t\tmaxSessionsPerOwner: cfg.maxSessionsPerOwner,\n\t\t\t\tsessionLock: container.resolve('sessionLock'),\n\t\t\t\tlifecycleCoordinator: container.resolve('sessionLifecycle'),\n\t\t\t\tclearSessionAuxiliaryState: (sessionId) =>\n\t\t\t\t\tcontainer.resolve('ThoughtProcessor').clearSessionAuxiliaryState(sessionId),\n\t\t\t\tclearAllAuxiliaryState: () =>\n\t\t\t\t\tcontainer.resolve('ThoughtProcessor').clearAllAuxiliaryState(),\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate static _registerThoughtPipeline(container: Container, config: ServerConfig): void {\n\t\t// Register ThoughtFormatter (can be transient)\n\t\tcontainer.registerFactory('ThoughtFormatter', () => new ThoughtFormatter());\n\n\t\t// Register OutcomeRecorder as a lazy singleton (gated by feature flag)\n\t\tcontainer.register(\n\t\t\t'outcomeRecorder',\n\t\t\t() => new OutcomeRecorder({ enabled: config.features.outcomeRecording ?? false })\n\t\t);\n\n\t\t// Register Calibrator as a lazy singleton (gated by feature flag)\n\t\tcontainer.register(\n\t\t\t'calibrator',\n\t\t\t() =>\n\t\t\t\tnew Calibrator(container.resolve('outcomeRecorder'), config.features.calibration ?? false)\n\t\t);\n\n\t\t// Register ThoughtEvaluator (stateless, transient) with injected calibrator\n\t\tcontainer.registerFactory(\n\t\t\t'ThoughtEvaluator',\n\t\t\t() => new ThoughtEvaluator(container.resolve('calibrator'))\n\t\t);\n\n\t\t// Register ThoughtProcessor\n\t\tcontainer.register('ThoughtProcessor', () => {\n\t\t\tconst history = container.resolve('HistoryManager');\n\t\t\tconst formatter = container.resolve('ThoughtFormatter');\n\t\t\tconst evaluator = container.resolve('ThoughtEvaluator');\n\t\t\tconst log = container.resolve('Logger');\n\t\t\tconst strategy = container.resolve('reasoningStrategy');\n\t\t\tconst compressionService = config.features.compression\n\t\t\t\t? container.resolve('compressionService')\n\t\t\t\t: undefined;\n\t\t\tconst suspensionStore = config.features.toolInterleave\n\t\t\t\t? container.resolve('suspensionStore')\n\t\t\t\t: undefined;\n\t\t\tconst toolRegistry = container.resolve('ToolRegistry');\n\t\t\tconst sessionLock = container.resolve('sessionLock');\n\t\t\treturn new ThoughtProcessor(\n\t\t\t\thistory,\n\t\t\t\tformatter,\n\t\t\t\tevaluator,\n\t\t\t\tlog,\n\t\t\t\tstrategy,\n\t\t\t\tcompressionService,\n\t\t\t\tsuspensionStore,\n\t\t\t\ttoolRegistry,\n\t\t\t\tconfig.features,\n\t\t\t\tsessionLock,\n\t\t\t\tcontainer.resolve('outcomeRecorder'),\n\t\t\t\tcontainer.resolve('sessionLifecycle'),\n\t\t\t\tcontainer.resolve('calibrator')\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * Create and configure the DI container with async persistence initialization.\n\t * This is used internally by the static create() factory.\n\t */\n\tprivate static async _createContainerAsyncStatic(options: ServerOptions): Promise<Container> {\n\t\tlet fileConfig: ConfigFileOptions | null;\n\t\tlet config: ServerConfig;\n\t\tif (options.config) {\n\t\t\tfileConfig = options.fileConfig ?? null;\n\t\t\tconfig = options.config;\n\t\t} else {\n\t\t\tconst configLoader = new ConfigLoader();\n\t\t\tfileConfig =\n\t\t\t\toptions.fileConfig === undefined\n\t\t\t\t\t? configLoader.load()\n\t\t\t\t\t: configLoader.applyEnvironmentOverrides(options.fileConfig);\n\t\t\tconfig = ToolAwareSequentialThinkingServer._resolveEffectiveConfig(options, fileConfig);\n\t\t}\n\n\t\tlet persistence: PersistenceBackend | null = null;\n\t\ttry {\n\t\t\tpersistence =\n\t\t\t\toptions.persistenceBackend ?? (await createPersistenceBackend(config.persistence));\n\t\t\treturn ToolAwareSequentialThinkingServer._createContainerCore(\n\t\t\t\t{ ...options, config },\n\t\t\t\tfileConfig,\n\t\t\t\tpersistence\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tconst acquiredPersistence = persistence;\n\t\t\tconst cleanupFailures =\n\t\t\t\tacquiredPersistence === null\n\t\t\t\t\t? []\n\t\t\t\t\t: await collectCleanupFailures([\n\t\t\t\t\t\t\t() => closeOwnedPersistence(acquiredPersistence, options.persistenceBackend ?? null),\n\t\t\t\t\t\t]);\n\t\t\tif (cleanupFailures.length > 0) {\n\t\t\t\tthrow new AggregateError(\n\t\t\t\t\t[error, ...cleanupFailures],\n\t\t\t\t\t'Container construction failed and cleanup also failed',\n\t\t\t\t\t{ cause: error }\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t/**\n\t * Get the DI container used by this server\n\t * Useful for testing and advanced customizations\n\t */\n\tpublic getContainer(): Container {\n\t\treturn this._container;\n\t}\n\n\t/**\n\t * Discover skills asynchronously without blocking server startup.\n\t * This is the recommended method for skill discovery.\n\t * @returns Promise<number> - The number of skills discovered\n\t */\n\tpublic async discoverSkillsAsync(): Promise<number> {\n\t\tconst discovered = await this.skills.discoverAsync();\n\t\treturn discovered;\n\t}\n\n\t/** Rescan configured tool and skill directories. */\n\tpublic refreshDiscovery(): Promise<{ tools: number; skills: number }> {\n\t\tif (!this._acceptingDiscoveryRefreshes) {\n\t\t\treturn Promise.reject(new SessionLifecycleClosedError(undefined, 'shutting_down'));\n\t\t}\n\t\tif (this._refreshPromise !== null) return this._refreshPromise;\n\n\t\tconst refreshPromise = Promise.allSettled([\n\t\t\tthis.tools.refreshAsync(),\n\t\t\tthis.skills.refreshAsync(),\n\t\t]).then(([toolResult, skillResult]) => {\n\t\t\tif (toolResult.status === 'rejected') {\n\t\t\t\tif (skillResult.status === 'rejected') {\n\t\t\t\t\tthrow new AggregateError(\n\t\t\t\t\t\t[toolResult.reason, skillResult.reason],\n\t\t\t\t\t\t'Failed to refresh tool and skill discovery'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthrow toolResult.reason;\n\t\t\t}\n\t\t\tif (skillResult.status === 'rejected') throw skillResult.reason;\n\t\t\treturn { tools: toolResult.value, skills: skillResult.value };\n\t\t});\n\t\tthis._refreshPromise = refreshPromise;\n\t\tconst clearRefreshPromise = (): void => {\n\t\t\tif (this._refreshPromise === refreshPromise) this._refreshPromise = null;\n\t\t};\n\t\tvoid refreshPromise.then(clearRefreshPromise, clearRefreshPromise);\n\t\treturn refreshPromise;\n\t}\n\n\t/**\n\t * Get all branches for one explicit thought session.\n\t * @param sessionId - Valid thought-session identifier\n\t * @returns Record<string, ThoughtData[]> - Map of branch IDs to thought arrays\n\t */\n\tpublic getBranches(sessionId: string): Record<BranchId, ThoughtData[]> {\n\t\treturn this._historyManager.getBranches(asSessionId(sessionId));\n\t}\n\n\t// Main processing method - delegate to ThoughtProcessor\n\tpublic async processThought(input: v.InferInput<typeof SequentialThinkingSchema>) {\n\t\tconst startTime = Date.now();\n\t\tconst result = await this._thoughtProcessor.process(input as ThoughtData);\n\t\tconst durationSeconds = (Date.now() - startTime) / 1000;\n\t\tthis._metrics.histogram('thought_processing_duration_seconds', durationSeconds, {});\n\t\treturn result;\n\t}\n\n\tpublic getMetricsSnapshot(): string {\n\t\treturn this._metrics.export();\n\t}\n\n\t/**\n\t * Stop the server and clean up watchers.\n\t * Closes persistence backend gracefully to ensure data is flushed.\n\t */\n\tpublic stop(): Promise<void> {\n\t\tthis._acceptingDiscoveryRefreshes = false;\n\t\tif (this._stopPromise) return this._stopPromise;\n\t\tconst acceptedRefresh = this._refreshPromise;\n\t\tthis._stopPromise = this._container.resolve('sessionLifecycle').shutdown(async () => {\n\t\t\tconst failures: unknown[] = [];\n\t\t\tconst [skillWatcherResult, toolWatcherResult, refreshResult] = await Promise.allSettled([\n\t\t\t\tthis._skillWatcher?.stop() ?? Promise.resolve(),\n\t\t\t\tthis._toolWatcher?.stop() ?? Promise.resolve(),\n\t\t\t\tacceptedRefresh ?? Promise.resolve(),\n\t\t\t]);\n\t\t\tfor (const result of [skillWatcherResult, toolWatcherResult]) {\n\t\t\t\tswitch (result.status) {\n\t\t\t\t\tcase 'fulfilled':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'rejected':\n\t\t\t\t\t\tappendCleanupFailure(failures, result.reason);\n\t\t\t\t\t\tthis._logger.error('Error stopping watcher', {\n\t\t\t\t\t\t\terror: getErrorMessage(result.reason),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tassertNever(result);\n\t\t\t\t}\n\t\t\t}\n\t\t\tswitch (refreshResult.status) {\n\t\t\t\tcase 'fulfilled':\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'rejected':\n\t\t\t\t\tappendCleanupFailure(failures, refreshResult.reason);\n\t\t\t\t\tthis._logger.error('Error refreshing discovery during shutdown', {\n\t\t\t\t\t\terror: getErrorMessage(refreshResult.reason),\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tassertNever(refreshResult);\n\t\t\t}\n\n\t\t\t// Stop suspension store sweeper if registered\n\t\t\tif (this._config.features.toolInterleave && this._container.has('suspensionStore')) {\n\t\t\t\ttry {\n\t\t\t\t\tconst suspensionStore = this._container.resolve('suspensionStore');\n\t\t\t\t\tsuspensionStore.stop();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tappendCleanupFailure(failures, error);\n\t\t\t\t\tthis._logger.error('Error stopping suspension store', {\n\t\t\t\t\t\terror: getErrorMessage(error),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Flush any buffered writes before closing persistence\n\t\t\ttry {\n\t\t\t\tawait this._historyManager.shutdownWithinLifecycle();\n\t\t\t} catch (error) {\n\t\t\t\tappendCleanupFailure(failures, error);\n\t\t\t\tthis._logger.error('Error flushing write buffer during shutdown', {\n\t\t\t\t\terror: getErrorMessage(error),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Close persistence backend if available\n\t\t\tconst persistence = this._container.resolve('Persistence');\n\t\t\tif (persistence && persistence !== this._borrowedPersistence) {\n\t\t\t\ttry {\n\t\t\t\t\tawait persistence.close();\n\t\t\t\t\tthis._logger.info('Persistence backend closed');\n\t\t\t\t} catch (error) {\n\t\t\t\t\tappendCleanupFailure(failures, error);\n\t\t\t\t\tthis._logger.error('Error closing persistence backend', {\n\t\t\t\t\t\terror: getErrorMessage(error),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (failures.length > 0) {\n\t\t\t\tthrow new AggregateError(failures, 'Failed to stop server cleanly');\n\t\t\t}\n\t\t\tthis._historyManager.clearLiveStateAfterShutdown();\n\t\t\tthis._logger.info('Server stopped, watchers cleaned up');\n\t\t});\n\t\treturn this._stopPromise;\n\t}\n\n\t/** Awaitably resets one session and matching processor-owned state. */\n\tpublic async resetSession(sessionId: string): Promise<void> {\n\t\tawait this._thoughtProcessor.resetSession(sessionId);\n\t\tthis._logger.info('Server session reset', { sessionId });\n\t}\n\n\t/** Awaitably resets all server state from a trusted ownerless context. */\n\tpublic async resetAll(): Promise<void> {\n\t\tawait this._thoughtProcessor.resetAll();\n\t\tthis._logger.info('All server sessions reset');\n\t}\n\n\t/**\n\t * Dispose of the server and all container services.\n\t * Implements the IDisposable interface.\n\t * Calls stop() for existing cleanup, then disposes the DI container.\n\t */\n\tpublic dispose(): Promise<void> {\n\t\tif (this._disposePromise) return this._disposePromise;\n\t\tthis._disposePromise = (async () => {\n\t\t\tconst failures = await collectCleanupFailures([\n\t\t\t\t() => this.stop(),\n\t\t\t\t() => this._container.dispose(),\n\t\t\t]);\n\t\t\tif (failures.length > 0) {\n\t\t\t\tthrow new AggregateError(failures, 'Failed to dispose server cleanly');\n\t\t\t}\n\t\t\tthis._logger.info('Server disposed, all resources released');\n\t\t})();\n\t\treturn this._disposePromise;\n\t}\n}\n\n/**\n * Factory function to create a new server instance with async initialization.\n *\n * This is the recommended way to create server instances, especially for testing,\n * as it allows for proper async initialization, dependency injection, and persistence.\n *\n * @param options - Server configuration options\n * @returns A Promise that resolves to a configured server instance\n *\n * @example\n * ```typescript\n * import { createServer } from '@iworkforces/tracelattice';\n *\n * // Basic usage (with async discovery and persistence)\n * const server = await createServer();\n *\n * // With custom options\n * const server = await createServer({\n * autoDiscover: false,\n * lazyDiscovery: true,\n * maxHistorySize: 500,\n * loadFromPersistence: true\n * });\n * ```\n */\nexport async function createServer(\n\toptions: ServerOptions = {}\n): Promise<ToolAwareSequentialThinkingServer> {\n\treturn ToolAwareSequentialThinkingServer.create(options);\n}\n\n// Initialize server\nexport async function initializeServer(): Promise<ToolAwareSequentialThinkingServer> {\n\t// Create logger for initialization\n\tconst configLoader = new ConfigLoader();\n\tconst fileConfig = configLoader.load() ?? {};\n\tconst config = new ServerConfig(configLoader.toServerConfigOptions(fileConfig));\n\n\tconst logger = new StructuredLogger({\n\t\tlevel: fileConfig.logLevel ?? 'info',\n\t\tcontext: 'SequentialThinking',\n\t\tpretty: fileConfig.prettyLog ?? true,\n\t});\n\n\t// Create server instance\n\tconst thinkingServer = await createServer({\n\t\tlogger,\n\t\tenableWatcher: true,\n\t\tconfig,\n\t\tfileConfig,\n\t});\n\n\tlogger.info('Server initialized successfully');\n\treturn thinkingServer;\n}\n"],"names":["closeOwnedPersistence","persistence","borrowed","appendCleanupFailure","failures","failure","AggregateError","collectCleanupFailures","operations","operation","error","ToolAwareSequentialThinkingServer","EventEmitter","options","container","server","Promise","startedServer","cleanupFailures","event","payload","listener","Error","SEQUENTIAL_THINKING_TOOL","SkillWatcher","ToolWatcher","fileConfig","Container","metrics","Metrics","config","logger","StructuredLogger","EdgeStore","InMemorySummaryStore","store","InMemorySuspensionStore","historyManager","edgeStore","summaryStore","log","CompressionService","summary","createReasoningStrategy","SessionLock","SessionLifecycleCoordinator","loadedOptions","ConfigLoader","ServerConfig","lazyDiscovery","ToolRegistry","DiscoveryCache","undefined","SkillRegistry","cfg","pers","componentMetrics","HistoryManager","ABSOLUTE_MAX_HISTORY_SIZE","sessionId","ThoughtFormatter","OutcomeRecorder","Calibrator","ThoughtEvaluator","history","formatter","evaluator","strategy","compressionService","suspensionStore","toolRegistry","sessionLock","ThoughtProcessor","configLoader","createPersistenceBackend","acquiredPersistence","discovered","SessionLifecycleClosedError","refreshPromise","toolResult","skillResult","clearRefreshPromise","asSessionId","input","startTime","Date","result","durationSeconds","acceptedRefresh","skillWatcherResult","toolWatcherResult","refreshResult","getErrorMessage","assertNever","createServer","initializeServer","thinkingServer"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { SqliteDatabase, SqliteDatabaseConstructor } from './SqliteDriver.js';
2
+ export interface BunSqliteModule {
3
+ readonly Database: new (path: string, flags: number) => Omit<SqliteDatabase, 'pragma'>;
4
+ readonly constants: {
5
+ readonly SQLITE_OPEN_READONLY: number;
6
+ readonly SQLITE_OPEN_READWRITE: number;
7
+ readonly SQLITE_OPEN_CREATE: number;
8
+ };
9
+ }
10
+ export declare function createBunSqliteDatabaseConstructor(module: BunSqliteModule): SqliteDatabaseConstructor;
11
+ //# sourceMappingURL=BunSqliteDriver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BunSqliteDriver.d.ts","sourceRoot":"","sources":["../../src/persistence/BunSqliteDriver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,yBAAyB,EAAmB,MAAM,mBAAmB,CAAC;AAEpG,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IACvF,QAAQ,CAAC,SAAS,EAAE;QACnB,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;QACtC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;QACvC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;KACpC,CAAC;CACF;AAED,wBAAgB,kCAAkC,CACjD,MAAM,EAAE,eAAe,GACrB,yBAAyB,CAuC3B"}
@@ -0,0 +1,36 @@
1
+ function createBunSqliteDatabaseConstructor(module) {
2
+ return class {
3
+ _database;
4
+ constructor(path, options){
5
+ const { SQLITE_OPEN_READONLY, SQLITE_OPEN_READWRITE, SQLITE_OPEN_CREATE } = module.constants;
6
+ const flags = options?.readonly ? SQLITE_OPEN_READONLY : SQLITE_OPEN_READWRITE | (options?.fileMustExist ? 0 : SQLITE_OPEN_CREATE);
7
+ this._database = new module.Database(path, flags);
8
+ }
9
+ exec(sql) {
10
+ this._database.exec(sql);
11
+ }
12
+ prepare(sql) {
13
+ const statement = this._database.prepare(sql);
14
+ return {
15
+ run: (...params)=>{
16
+ const { changes, lastInsertRowid } = statement.run(...params);
17
+ return {
18
+ changes,
19
+ lastInsertRowid
20
+ };
21
+ },
22
+ get: (...params)=>statement.get(...params) ?? void 0,
23
+ all: (...params)=>statement.all(...params)
24
+ };
25
+ }
26
+ pragma(source) {
27
+ return this._database.prepare(`PRAGMA ${source}`).all();
28
+ }
29
+ close() {
30
+ this._database.close();
31
+ }
32
+ };
33
+ }
34
+ export { createBunSqliteDatabaseConstructor };
35
+
36
+ //# sourceMappingURL=BunSqliteDriver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence/BunSqliteDriver.js","sources":["../../src/persistence/BunSqliteDriver.ts"],"sourcesContent":["import type { SqliteDatabase, SqliteDatabaseConstructor, SqliteStatement } from './SqliteDriver.js';\n\nexport interface BunSqliteModule {\n\treadonly Database: new (path: string, flags: number) => Omit<SqliteDatabase, 'pragma'>;\n\treadonly constants: {\n\t\treadonly SQLITE_OPEN_READONLY: number;\n\t\treadonly SQLITE_OPEN_READWRITE: number;\n\t\treadonly SQLITE_OPEN_CREATE: number;\n\t};\n}\n\nexport function createBunSqliteDatabaseConstructor(\n\tmodule: BunSqliteModule\n): SqliteDatabaseConstructor {\n\treturn class BunSqliteDatabase implements SqliteDatabase {\n\t\tprivate readonly _database: Omit<SqliteDatabase, 'pragma'>;\n\n\t\tconstructor(\n\t\t\tpath: string,\n\t\t\toptions?: { readonly readonly?: boolean; readonly fileMustExist?: boolean }\n\t\t) {\n\t\t\tconst { SQLITE_OPEN_READONLY, SQLITE_OPEN_READWRITE, SQLITE_OPEN_CREATE } = module.constants;\n\t\t\tconst flags = options?.readonly\n\t\t\t\t? SQLITE_OPEN_READONLY\n\t\t\t\t: SQLITE_OPEN_READWRITE | (options?.fileMustExist ? 0 : SQLITE_OPEN_CREATE);\n\t\t\tthis._database = new module.Database(path, flags);\n\t\t}\n\n\t\texec(sql: string): void {\n\t\t\tthis._database.exec(sql);\n\t\t}\n\n\t\tprepare(sql: string): SqliteStatement {\n\t\t\tconst statement = this._database.prepare(sql);\n\t\t\treturn {\n\t\t\t\trun: (...params) => {\n\t\t\t\t\tconst { changes, lastInsertRowid } = statement.run(...params);\n\t\t\t\t\treturn { changes, lastInsertRowid };\n\t\t\t\t},\n\t\t\t\tget: (...params) => statement.get(...params) ?? undefined,\n\t\t\t\tall: (...params) => statement.all(...params),\n\t\t\t};\n\t\t}\n\n\t\tpragma(source: string): unknown {\n\t\t\treturn this._database.prepare(`PRAGMA ${source}`).all();\n\t\t}\n\n\t\tclose(): void {\n\t\t\tthis._database.close();\n\t\t}\n\t};\n}\n"],"names":["createBunSqliteDatabaseConstructor","module","path","options","SQLITE_OPEN_READONLY","SQLITE_OPEN_READWRITE","SQLITE_OPEN_CREATE","flags","sql","statement","params","changes","lastInsertRowid","undefined","source"],"mappings":"AAWO,SAASA,mCACfC,MAAuB;IAEvB,OAAO;QACW,UAA0C;QAE3D,YACCC,IAAY,EACZC,OAA2E,CAC1E;YACD,MAAM,EAAEC,oBAAoB,EAAEC,qBAAqB,EAAEC,kBAAkB,EAAE,GAAGL,OAAO,SAAS;YAC5F,MAAMM,QAAQJ,SAAS,WACpBC,uBACAC,wBAAyBF,CAAAA,SAAS,gBAAgB,IAAIG,kBAAiB;YAC1E,IAAI,CAAC,SAAS,GAAG,IAAIL,OAAO,QAAQ,CAACC,MAAMK;QAC5C;QAEA,KAAKC,GAAW,EAAQ;YACvB,IAAI,CAAC,SAAS,CAAC,IAAI,CAACA;QACrB;QAEA,QAAQA,GAAW,EAAmB;YACrC,MAAMC,YAAY,IAAI,CAAC,SAAS,CAAC,OAAO,CAACD;YACzC,OAAO;gBACN,KAAK,CAAC,GAAGE;oBACR,MAAM,EAAEC,OAAO,EAAEC,eAAe,EAAE,GAAGH,UAAU,GAAG,IAAIC;oBACtD,OAAO;wBAAEC;wBAASC;oBAAgB;gBACnC;gBACA,KAAK,CAAC,GAAGF,SAAWD,UAAU,GAAG,IAAIC,WAAWG;gBAChD,KAAK,CAAC,GAAGH,SAAWD,UAAU,GAAG,IAAIC;YACtC;QACD;QAEA,OAAOI,MAAc,EAAW;YAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,EAAEA,QAAQ,EAAE,GAAG;QACtD;QAEA,QAAc;YACb,IAAI,CAAC,SAAS,CAAC,KAAK;QACrB;IACD;AACD"}
@@ -0,0 +1,11 @@
1
+ import { type BunSqliteModule } from './BunSqliteDriver.js';
2
+ import type { SqliteDatabaseConstructor } from './SqliteDriver.js';
3
+ export interface SqliteDriverRuntime {
4
+ readonly isBun: () => boolean;
5
+ readonly importBunSqlite: () => Promise<BunSqliteModule>;
6
+ readonly importBetterSqlite3: () => Promise<{
7
+ readonly default: SqliteDatabaseConstructor;
8
+ }>;
9
+ }
10
+ export declare function loadSqliteDatabaseConstructor(dbPath: string, runtime?: SqliteDriverRuntime): Promise<SqliteDatabaseConstructor>;
11
+ //# sourceMappingURL=SqliteDriverLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SqliteDriverLoader.d.ts","sourceRoot":"","sources":["../../src/persistence/SqliteDriverLoader.ts"],"names":[],"mappings":"AACA,OAAO,EAAsC,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAChG,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;IACzD,QAAQ,CAAC,mBAAmB,EAAE,MAAM,OAAO,CAAC;QAAE,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAA;KAAE,CAAC,CAAC;CAC7F;AAQD,wBAAsB,6BAA6B,CAClD,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,mBAAoC,GAC3C,OAAO,CAAC,yBAAyB,CAAC,CAcpC"}
@@ -0,0 +1,19 @@
1
+ import { PersistenceCompatibilityError } from "../errors.js";
2
+ import { createBunSqliteDatabaseConstructor } from "./BunSqliteDriver.js";
3
+ const defaultRuntime = {
4
+ isBun: ()=>'bun' in process.versions && Boolean(process.versions.bun),
5
+ importBunSqlite: ()=>import("bun:sqlite"),
6
+ importBetterSqlite3: ()=>import("better-sqlite3")
7
+ };
8
+ async function loadSqliteDatabaseConstructor(dbPath, runtime = defaultRuntime) {
9
+ const isBun = runtime.isBun();
10
+ try {
11
+ if (isBun) return createBunSqliteDatabaseConstructor(await runtime.importBunSqlite());
12
+ return (await runtime.importBetterSqlite3()).default;
13
+ } catch (error) {
14
+ throw new PersistenceCompatibilityError(dbPath, isBun ? "SQLite persistence requires the Bun 'bun:sqlite' module" : "SQLite persistence requires the optional 'better-sqlite3' package", error);
15
+ }
16
+ }
17
+ export { loadSqliteDatabaseConstructor };
18
+
19
+ //# sourceMappingURL=SqliteDriverLoader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence/SqliteDriverLoader.js","sources":["../../src/persistence/SqliteDriverLoader.ts"],"sourcesContent":["import { PersistenceCompatibilityError } from '../errors.js';\nimport { createBunSqliteDatabaseConstructor, type BunSqliteModule } from './BunSqliteDriver.js';\nimport type { SqliteDatabaseConstructor } from './SqliteDriver.js';\n\nexport interface SqliteDriverRuntime {\n\treadonly isBun: () => boolean;\n\treadonly importBunSqlite: () => Promise<BunSqliteModule>;\n\treadonly importBetterSqlite3: () => Promise<{ readonly default: SqliteDatabaseConstructor }>;\n}\n\nconst defaultRuntime: SqliteDriverRuntime = {\n\tisBun: () => 'bun' in process.versions && Boolean(process.versions.bun),\n\timportBunSqlite: () => import('bun:sqlite'),\n\timportBetterSqlite3: () => import('better-sqlite3'),\n};\n\nexport async function loadSqliteDatabaseConstructor(\n\tdbPath: string,\n\truntime: SqliteDriverRuntime = defaultRuntime\n): Promise<SqliteDatabaseConstructor> {\n\tconst isBun = runtime.isBun();\n\ttry {\n\t\tif (isBun) return createBunSqliteDatabaseConstructor(await runtime.importBunSqlite());\n\t\treturn (await runtime.importBetterSqlite3()).default;\n\t} catch (error) {\n\t\tthrow new PersistenceCompatibilityError(\n\t\t\tdbPath,\n\t\t\tisBun\n\t\t\t\t? \"SQLite persistence requires the Bun 'bun:sqlite' module\"\n\t\t\t\t: \"SQLite persistence requires the optional 'better-sqlite3' package\",\n\t\t\terror\n\t\t);\n\t}\n}\n"],"names":["defaultRuntime","process","Boolean","loadSqliteDatabaseConstructor","dbPath","runtime","isBun","createBunSqliteDatabaseConstructor","error","PersistenceCompatibilityError"],"mappings":";;AAUA,MAAMA,iBAAsC;IAC3C,OAAO,IAAM,SAASC,QAAQ,QAAQ,IAAIC,QAAQD,QAAQ,QAAQ,CAAC,GAAG;IACtE,iBAAiB,IAAM,MAAM,CAAC;IAC9B,qBAAqB,IAAM,MAAM,CAAC;AACnC;AAEO,eAAeE,8BACrBC,MAAc,EACdC,UAA+BL,cAAc;IAE7C,MAAMM,QAAQD,QAAQ,KAAK;IAC3B,IAAI;QACH,IAAIC,OAAO,OAAOC,mCAAmC,MAAMF,QAAQ,eAAe;QAClF,OAAQ,OAAMA,QAAQ,mBAAmB,EAAC,EAAG,OAAO;IACrD,EAAE,OAAOG,OAAO;QACf,MAAM,IAAIC,8BACTL,QACAE,QACG,4DACA,qEACHE;IAEF;AACD"}
@@ -4,6 +4,7 @@ import type { Summary } from '../core/compression/Summary.js';
4
4
  import type { Edge } from '../core/graph/Edge.js';
5
5
  import type { ThoughtData } from '../core/thought.js';
6
6
  import type { SqliteDatabase } from './SqliteDriver.js';
7
+ import { type SqliteDriverRuntime } from './SqliteDriverLoader.js';
7
8
  type SqliteOptions = PersistenceConfig['options'];
8
9
  export declare class SqlitePersistence implements PersistenceBackend {
9
10
  private readonly _db;
@@ -12,7 +13,7 @@ export declare class SqlitePersistence implements PersistenceBackend {
12
13
  private readonly _persistBranches;
13
14
  private constructor();
14
15
  static createWithDatabase(database: SqliteDatabase, options?: SqliteOptions, sourcePath?: string): SqlitePersistence;
15
- static create(options?: SqliteOptions): Promise<SqlitePersistence>;
16
+ static create(options?: SqliteOptions, runtime?: SqliteDriverRuntime): Promise<SqlitePersistence>;
16
17
  saveThoughtForSession(sessionId: SessionId, thought: ThoughtData): Promise<void>;
17
18
  saveBacktrackForSession(sessionId: SessionId, thought: ThoughtData, targetThoughtId: ThoughtId): Promise<void>;
18
19
  private _saveThought;
@@ -1 +1 @@
1
- {"version":3,"file":"SqlitePersistence.d.ts","sourceRoot":"","sources":["../../src/persistence/SqlitePersistence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SqlitePersistence.d.ts","sourceRoot":"","sources":["../../src/persistence/SqlitePersistence.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,8 @@ import { existsSync } from "node:fs";
2
2
  import { homedir } from "node:os";
3
3
  import { join } from "node:path";
4
4
  import { asSessionId } from "../contracts/ids.js";
5
- import { PersistenceCompatibilityError, PersistenceCorruptionError } from "../errors.js";
5
+ import { PersistenceCorruptionError } from "../errors.js";
6
+ import { loadSqliteDatabaseConstructor } from "./SqliteDriverLoader.js";
6
7
  import { runSqliteReadTransaction, runSqliteTransaction } from "./SqliteDriver.js";
7
8
  import { decodeEdgeRow, decodeSummaryRow, decodeThoughtRow, numberField, stringField } from "./SqlitePayload.js";
8
9
  import { assertBranchScope, assertEdgeScopes, assertPersistableThoughtCollections, assertPersistableThoughts, assertSummaryScopes, assertThoughtScope, compareCodePoint, parsePersistenceBranchId } from "./PersistenceScope.js";
@@ -23,16 +24,10 @@ class SqlitePersistence {
23
24
  initializeOrValidateSqliteV2(database, sourcePath);
24
25
  return new SqlitePersistence(database, sourcePath, options?.maxHistorySize ?? 10000, options?.persistBranches ?? true);
25
26
  }
26
- static async create(options) {
27
+ static async create(options, runtime) {
27
28
  const defaultDataDir = existsSync('.claude/data') ? '.claude/data' : join(homedir(), '.claude/data');
28
29
  const dbPath = options?.dbPath ?? join(defaultDataDir, 'history.db');
29
- let Database;
30
- try {
31
- const module = await import("better-sqlite3");
32
- Database = module.default;
33
- } catch (error) {
34
- throw new PersistenceCompatibilityError(dbPath, "SQLite persistence requires the optional 'better-sqlite3' package", error);
35
- }
30
+ const Database = await loadSqliteDatabaseConstructor(dbPath, runtime);
36
31
  const database = new Database(dbPath);
37
32
  try {
38
33
  const persistence = SqlitePersistence.createWithDatabase(database, options, dbPath);