claude-flow-novice 2.0.3 → 2.0.4
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.
- package/dist/src/cli/commands/guidance.js +487 -668
- package/dist/src/cli/commands/index-validate.js +18 -29
- package/dist/src/cli/commands/mcp-troubleshoot.js +230 -282
- package/dist/src/cli/commands/neural-goal-init.js +92 -125
- package/dist/src/cli/commands/swarm-exec.js +317 -393
- package/dist/src/cli/commands/swarm.js +1 -1
- package/dist/src/cli/commands/validate-framework.js +983 -1100
- package/dist/src/cli/commands/validate.js +144 -223
- package/dist/src/cli/simple-commands/__tests__/agent.test.js +265 -277
- package/dist/src/cli/simple-commands/__tests__/memory.test.js +6 -7
- package/dist/src/cli/simple-commands/__tests__/swarm.test.js +373 -356
- package/dist/src/cli/simple-commands/__tests__/task.test.js +6 -7
- package/dist/src/cli/simple-commands/agent.js +157 -193
- package/dist/src/cli/simple-commands/analysis.js +336 -446
- package/dist/src/cli/simple-commands/automation-executor.js +1095 -1339
- package/dist/src/cli/simple-commands/automation.js +481 -469
- package/dist/src/cli/simple-commands/batch-manager.js +261 -313
- package/dist/src/cli/simple-commands/claude-telemetry.js +241 -267
- package/dist/src/cli/simple-commands/claude-track.js +68 -90
- package/dist/src/cli/simple-commands/concurrent-display.js +266 -320
- package/dist/src/cli/simple-commands/config.js +245 -290
- package/dist/src/cli/simple-commands/coordination.js +182 -234
- package/dist/src/cli/simple-commands/enhanced-ui-views.js +812 -615
- package/dist/src/cli/simple-commands/enhanced-webui-complete.js +922 -981
- package/dist/src/cli/simple-commands/fix-hook-variables.js +274 -294
- package/dist/src/cli/simple-commands/github/gh-coordinator.js +378 -457
- package/dist/src/cli/simple-commands/github/github-api.js +535 -574
- package/dist/src/cli/simple-commands/github/init.js +276 -303
- package/dist/src/cli/simple-commands/github.js +222 -247
- package/dist/src/cli/simple-commands/goal.js +51 -63
- package/dist/src/cli/simple-commands/hive-mind/auto-save-middleware.js +208 -278
- package/dist/src/cli/simple-commands/hive-mind/communication.js +601 -696
- package/dist/src/cli/simple-commands/hive-mind/core.js +907 -979
- package/dist/src/cli/simple-commands/hive-mind/db-optimizer.js +406 -655
- package/dist/src/cli/simple-commands/hive-mind/mcp-wrapper.js +1125 -1245
- package/dist/src/cli/simple-commands/hive-mind/memory.js +854 -1090
- package/dist/src/cli/simple-commands/hive-mind/performance-optimizer.js +459 -574
- package/dist/src/cli/simple-commands/hive-mind/performance-test.js +263 -347
- package/dist/src/cli/simple-commands/hive-mind/queen.js +727 -768
- package/dist/src/cli/simple-commands/hive-mind/session-manager.js +745 -1049
- package/dist/src/cli/simple-commands/hive-mind-optimize.js +227 -283
- package/dist/src/cli/simple-commands/hive-mind-wizard.js +174 -217
- package/dist/src/cli/simple-commands/hive-mind.js +1842 -2283
- package/dist/src/cli/simple-commands/hive.js +90 -79
- package/dist/src/cli/simple-commands/hook-safety.js +431 -521
- package/dist/src/cli/simple-commands/hooks/session-start-soul.js +203 -254
- package/dist/src/cli/simple-commands/hooks.js +1064 -1204
- package/dist/src/cli/simple-commands/init/agent-copier.js +294 -319
- package/dist/src/cli/simple-commands/init/batch-init.js +496 -562
- package/dist/src/cli/simple-commands/init/claude-commands/claude-flow-commands.js +13 -19
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-claude-flow-commands.js +13 -19
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-slash-commands.js +61 -88
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-sparc-commands.js +125 -150
- package/dist/src/cli/simple-commands/init/claude-commands/slash-commands.js +42 -49
- package/dist/src/cli/simple-commands/init/claude-commands/sparc-commands.js +43 -61
- package/dist/src/cli/simple-commands/init/copy-revised-templates.js +141 -147
- package/dist/src/cli/simple-commands/init/executable-wrapper.js +31 -44
- package/dist/src/cli/simple-commands/init/gitignore-updater.js +64 -90
- package/dist/src/cli/simple-commands/init/help.js +104 -107
- package/dist/src/cli/simple-commands/init/hive-mind-init.js +509 -528
- package/dist/src/cli/simple-commands/init/index.js +1510 -1759
- package/dist/src/cli/simple-commands/init/performance-monitor.js +234 -317
- package/dist/src/cli/simple-commands/init/rollback/backup-manager.js +441 -504
- package/dist/src/cli/simple-commands/init/rollback/index.js +289 -364
- package/dist/src/cli/simple-commands/init/rollback/recovery-manager.js +652 -728
- package/dist/src/cli/simple-commands/init/rollback/rollback-executor.js +416 -481
- package/dist/src/cli/simple-commands/init/rollback/state-tracker.js +369 -448
- package/dist/src/cli/simple-commands/init/sparc/roo-readme.js +1 -2
- package/dist/src/cli/simple-commands/init/sparc/roomodes-config.js +122 -99
- package/dist/src/cli/simple-commands/init/sparc/workflows.js +32 -37
- package/dist/src/cli/simple-commands/init/sparc-structure.js +55 -62
- package/dist/src/cli/simple-commands/init/template-copier.js +421 -533
- package/dist/src/cli/simple-commands/init/templates/coordination-md.js +3 -6
- package/dist/src/cli/simple-commands/init/templates/enhanced-templates.js +344 -318
- package/dist/src/cli/simple-commands/init/templates/github-safe-enhanced.js +173 -218
- package/dist/src/cli/simple-commands/init/templates/github-safe.js +65 -75
- package/dist/src/cli/simple-commands/init/templates/memory-bank-md.js +3 -6
- package/dist/src/cli/simple-commands/init/templates/readme-files.js +2 -4
- package/dist/src/cli/simple-commands/init/templates/safe-hook-patterns.js +187 -230
- package/dist/src/cli/simple-commands/init/templates/sparc-modes.js +53 -80
- package/dist/src/cli/simple-commands/init/templates/verification-claude-md.js +101 -85
- package/dist/src/cli/simple-commands/init/validation/config-validator.js +283 -330
- package/dist/src/cli/simple-commands/init/validation/health-checker.js +495 -561
- package/dist/src/cli/simple-commands/init/validation/index.js +302 -358
- package/dist/src/cli/simple-commands/init/validation/mode-validator.js +308 -359
- package/dist/src/cli/simple-commands/init/validation/post-init-validator.js +389 -366
- package/dist/src/cli/simple-commands/init/validation/pre-init-validator.js +270 -268
- package/dist/src/cli/simple-commands/init/validation/test-runner.js +427 -447
- package/dist/src/cli/simple-commands/init.js +1 -2
- package/dist/src/cli/simple-commands/mcp-health.js +131 -158
- package/dist/src/cli/simple-commands/mcp-integration-layer.js +533 -634
- package/dist/src/cli/simple-commands/mcp.js +345 -400
- package/dist/src/cli/simple-commands/memory-consolidation.js +426 -537
- package/dist/src/cli/simple-commands/memory.js +247 -311
- package/dist/src/cli/simple-commands/migrate-hooks.js +39 -46
- package/dist/src/cli/simple-commands/monitor.js +294 -363
- package/dist/src/cli/simple-commands/neural.js +51 -65
- package/dist/src/cli/simple-commands/pair-autofix-only.js +538 -662
- package/dist/src/cli/simple-commands/pair-basic.js +528 -656
- package/dist/src/cli/simple-commands/pair-old.js +430 -543
- package/dist/src/cli/simple-commands/pair-working.js +615 -751
- package/dist/src/cli/simple-commands/pair.js +615 -751
- package/dist/src/cli/simple-commands/performance-hooks.js +83 -111
- package/dist/src/cli/simple-commands/performance-metrics.js +348 -433
- package/dist/src/cli/simple-commands/process-ui-enhanced.js +708 -787
- package/dist/src/cli/simple-commands/process-ui.js +230 -254
- package/dist/src/cli/simple-commands/realtime-update-system.js +525 -611
- package/dist/src/cli/simple-commands/sparc/architecture.js +1704 -1530
- package/dist/src/cli/simple-commands/sparc/commands.js +438 -516
- package/dist/src/cli/simple-commands/sparc/completion.js +1224 -1481
- package/dist/src/cli/simple-commands/sparc/coordinator.js +913 -978
- package/dist/src/cli/simple-commands/sparc/index.js +241 -298
- package/dist/src/cli/simple-commands/sparc/phase-base.js +314 -390
- package/dist/src/cli/simple-commands/sparc/pseudocode.js +965 -869
- package/dist/src/cli/simple-commands/sparc/refinement.js +980 -1273
- package/dist/src/cli/simple-commands/sparc/specification.js +559 -645
- package/dist/src/cli/simple-commands/sparc-modes/architect.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/ask.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/code.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/debug.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/devops.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/docs-writer.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/generic.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/index.js +47 -55
- package/dist/src/cli/simple-commands/sparc-modes/integration.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/mcp.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/monitoring.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/optimization.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/security-review.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/sparc-orchestrator.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/spec-pseudocode.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/supabase-admin.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/swarm.js +101 -87
- package/dist/src/cli/simple-commands/sparc-modes/tdd.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/tutorial.js +1 -1
- package/dist/src/cli/simple-commands/sparc.js +465 -493
- package/dist/src/cli/simple-commands/start-ui.js +108 -132
- package/dist/src/cli/simple-commands/start-wrapper.js +240 -268
- package/dist/src/cli/simple-commands/start.js +1 -1
- package/dist/src/cli/simple-commands/status.js +254 -275
- package/dist/src/cli/simple-commands/stream-chain-clean.js +128 -171
- package/dist/src/cli/simple-commands/stream-chain-fixed.js +61 -82
- package/dist/src/cli/simple-commands/stream-chain-real.js +267 -331
- package/dist/src/cli/simple-commands/stream-chain-working.js +211 -263
- package/dist/src/cli/simple-commands/stream-chain.js +260 -318
- package/dist/src/cli/simple-commands/stream-processor.js +290 -315
- package/dist/src/cli/simple-commands/swarm-executor.js +189 -222
- package/dist/src/cli/simple-commands/swarm-metrics-integration.js +208 -300
- package/dist/src/cli/simple-commands/swarm-ui.js +623 -703
- package/dist/src/cli/simple-commands/swarm-webui-integration.js +258 -286
- package/dist/src/cli/simple-commands/swarm.js +887 -1082
- package/dist/src/cli/simple-commands/task.js +161 -206
- package/dist/src/cli/simple-commands/timestamp-fix.js +59 -89
- package/dist/src/cli/simple-commands/token-tracker.js +258 -316
- package/dist/src/cli/simple-commands/tool-execution-framework.js +433 -519
- package/dist/src/cli/simple-commands/train-and-stream.js +275 -331
- package/dist/src/cli/simple-commands/training-pipeline.js +619 -725
- package/dist/src/cli/simple-commands/training.js +170 -227
- package/dist/src/cli/simple-commands/verification-hooks.js +261 -284
- package/dist/src/cli/simple-commands/verification-integration.js +389 -417
- package/dist/src/cli/simple-commands/verification-training-integration.js +486 -606
- package/dist/src/cli/simple-commands/verification.js +493 -513
- package/dist/src/cli/simple-commands/web-server.js +766 -836
- package/dist/src/cli/simple-commands/webui-validator.js +106 -124
- package/dist/src/coordination/event-bus/demo-wasm-integration.js +212 -251
- package/dist/src/coordination/event-bus/qe-event-bus.js +608 -748
- package/dist/src/coordination/event-bus/qe-event-bus.test.js +379 -454
- package/dist/src/coordination/iteration-tracker.js +363 -454
- package/dist/src/enterprise/analytics-manager.js +1135 -0
- package/dist/src/enterprise/audit-manager.js +1115 -0
- package/dist/src/enterprise/cloud-manager.js +891 -0
- package/dist/src/enterprise/deployment-manager.js +966 -0
- package/dist/src/enterprise/index.js +6 -0
- package/dist/src/enterprise/project-manager.js +584 -0
- package/dist/src/enterprise/security-manager.js +991 -0
- package/dist/src/index.js +1 -1
- package/dist/src/mcp/DEPRECATED.js +46 -60
- package/dist/src/mcp/fixes/mcp-error-fixes.js +115 -134
- package/dist/src/mcp/implementations/agent-tracker.js +114 -128
- package/dist/src/mcp/implementations/daa-tools.js +292 -350
- package/dist/src/mcp/implementations/workflow-tools.js +329 -361
- package/dist/src/mcp/mcp-config-manager.js +1183 -1331
- package/dist/src/mcp/mcp-server-novice-simplified.js +11 -17
- package/dist/src/mcp/mcp-server-novice.js +11 -17
- package/dist/src/mcp/mcp-server-sdk.js +11 -17
- package/dist/src/mcp/mcp-server.js +1620 -1484
- package/dist/src/mcp/ruv-swarm-wrapper.js +209 -239
- package/dist/src/memory/advanced-serializer.js +609 -589
- package/dist/src/memory/enhanced-examples.js +220 -305
- package/dist/src/memory/enhanced-memory.js +295 -336
- package/dist/src/memory/enhanced-session-serializer.js +408 -492
- package/dist/src/memory/fallback-memory-system.js +900 -1021
- package/dist/src/memory/fallback-store.js +93 -131
- package/dist/src/memory/high-performance-serialization.js +592 -730
- package/dist/src/memory/in-memory-store.js +161 -213
- package/dist/src/memory/index.js +123 -157
- package/dist/src/memory/lock-free-structures.js +578 -764
- package/dist/src/memory/memory-mapped-persistence.js +585 -766
- package/dist/src/memory/memory-pressure-manager.js +569 -707
- package/dist/src/memory/migration.js +358 -445
- package/dist/src/memory/shared-memory.js +641 -768
- package/dist/src/memory/sqlite-store.js +245 -325
- package/dist/src/memory/sqlite-wrapper.js +122 -151
- package/dist/src/memory/swarm-memory.js +470 -603
- package/dist/src/memory/test-example.js +126 -134
- package/dist/src/memory/ultra-fast-memory-store.js +622 -821
- package/dist/src/memory/unified-memory-manager.js +356 -437
- package/dist/src/migration/index.js +92 -0
- package/dist/src/migration/logger.js +121 -0
- package/dist/src/migration/migration-analyzer.js +268 -0
- package/dist/src/migration/migration-runner.js +522 -0
- package/dist/src/migration/migration-validator.js +285 -0
- package/dist/src/migration/progress-reporter.js +150 -0
- package/dist/src/migration/rollback-manager.js +321 -0
- package/dist/src/migration/tests/migration-system.test.js +7 -0
- package/dist/src/migration/types.js +3 -0
- package/dist/src/swarm/CodeRefactoringSwarm.js +777 -952
- package/dist/src/swarm/__tests__/integration.test.js +227 -0
- package/dist/src/swarm/__tests__/prompt-copier.test.js +344 -0
- package/dist/src/swarm/advanced-orchestrator.js +1095 -0
- package/dist/src/swarm/claude-code-interface.js +961 -0
- package/dist/src/swarm/claude-flow-executor.js +229 -0
- package/dist/src/swarm/consensus-coordinator.js +475 -0
- package/dist/src/swarm/coordinator.js +2993 -0
- package/dist/src/swarm/direct-executor.js +1180 -0
- package/dist/src/swarm/error-recovery/advanced-error-detection.js +691 -0
- package/dist/src/swarm/error-recovery/automated-recovery-workflows.js +998 -0
- package/dist/src/swarm/error-recovery/error-recovery-coordinator.js +1197 -0
- package/dist/src/swarm/error-recovery/recovery-monitoring.js +772 -0
- package/dist/src/swarm/error-recovery/resilience-architecture.js +714 -0
- package/dist/src/swarm/error-recovery/self-healing-mechanisms.js +1319 -0
- package/dist/src/swarm/error-recovery/test-error-recovery-effectiveness.js +808 -0
- package/dist/src/swarm/executor-v2.js +322 -0
- package/dist/src/swarm/executor.js +815 -0
- package/dist/src/swarm/hive-mind-integration.js +703 -0
- package/dist/src/swarm/index.js +41 -0
- package/dist/src/swarm/json-output-aggregator.js +267 -0
- package/dist/src/swarm/large-scale-coordinator.js +542 -0
- package/dist/src/swarm/mcp-integration-wrapper.js +628 -0
- package/dist/src/swarm/memory.js +1117 -0
- package/dist/src/swarm/optimizations/__tests__/optimization.test.js +348 -0
- package/dist/src/swarm/optimizations/async-file-manager.js +285 -0
- package/dist/src/swarm/optimizations/circular-buffer.js +162 -0
- package/dist/src/swarm/optimizations/connection-pool.js +244 -0
- package/dist/src/swarm/optimizations/index.js +28 -0
- package/dist/src/swarm/optimizations/optimized-executor.js +320 -0
- package/dist/src/swarm/optimizations/ttl-map.js +234 -0
- package/dist/src/swarm/prompt-cli.js +200 -0
- package/dist/src/swarm/prompt-copier-enhanced.js +202 -0
- package/dist/src/swarm/prompt-copier.js +381 -0
- package/dist/src/swarm/prompt-manager.js +295 -0
- package/dist/src/swarm/prompt-utils.js +310 -0
- package/dist/src/swarm/result-aggregator.js +718 -0
- package/dist/src/swarm/sparc-executor.js +1568 -0
- package/dist/src/swarm/strategies/auto.js +758 -0
- package/dist/src/swarm/strategies/base.js +128 -0
- package/dist/src/swarm/strategies/research.js +914 -0
- package/dist/src/swarm/strategies/strategy-metrics-patch.js +2 -0
- package/dist/src/swarm/types.js +52 -0
- package/dist/src/swarm/workers/copy-worker.js +56 -0
- package/dist/src/utils/__tests__/github-cli-safety-wrapper.test.js +332 -400
- package/dist/src/utils/github-cli-safe.js +56 -64
- package/dist/src/utils/github-cli-safety-wrapper.js +451 -546
- package/dist/src/utils/npx-isolated-cache.js +104 -119
- package/dist/src/utils/preference-manager.js +622 -652
- package/dist/src/utils/timezone-utils.js +86 -105
- package/dist/src/validators/epic-config-schema.js +214 -0
- package/dist/src/validators/index.js +10 -0
- package/dist/src/validators/swarm-init-validator.js +259 -0
- package/dist/src/validators/todowrite-batching-validator.js +215 -0
- package/dist/src/validators/todowrite-integration.js +187 -0
- package/package.json +2 -2
|
@@ -1,523 +1,439 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Enhanced session serializer that extends the HiveMindSessionManager
|
|
3
3
|
* with advanced TypeScript-compatible serialization capabilities
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import {
|
|
7
|
-
AdvancedSerializer,
|
|
8
|
-
createSessionSerializer,
|
|
9
|
-
SerializationError,
|
|
10
|
-
DeserializationError
|
|
11
|
-
} from './advanced-serializer.js';
|
|
12
|
-
|
|
4
|
+
*/ import { createSessionSerializer, SerializationError, DeserializationError } from "./advanced-serializer.js";
|
|
13
5
|
/**
|
|
14
6
|
* Session-specific serialization utilities
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
constructor(options = {}) {
|
|
18
|
-
this.serializer = createSessionSerializer({
|
|
19
|
-
preserveUndefined: true,
|
|
20
|
-
preserveFunctions: false, // Security: never serialize functions in sessions
|
|
21
|
-
preserveSymbols: true,
|
|
22
|
-
enableCompression: options.enableCompression !== false,
|
|
23
|
-
maxDepth: options.maxDepth || 50,
|
|
24
|
-
...options
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
this.compressionThreshold = options.compressionThreshold || 1024; // 1KB
|
|
28
|
-
this.enableValidation = options.enableValidation !== false;
|
|
29
|
-
this.enableMigration = options.enableMigration !== false;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
7
|
+
*/ export class SessionSerializer {
|
|
8
|
+
/**
|
|
33
9
|
* Serialize session data with enhanced TypeScript support
|
|
34
|
-
*/
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
10
|
+
*/ serializeSessionData(sessionData) {
|
|
11
|
+
try {
|
|
12
|
+
// Pre-process session data for better serialization
|
|
13
|
+
const processedData = this._preprocessSessionData(sessionData);
|
|
14
|
+
// Add session metadata for validation and migration
|
|
15
|
+
const enhancedData = {
|
|
16
|
+
...processedData,
|
|
17
|
+
__session_meta__: {
|
|
18
|
+
version: '2.0.0',
|
|
19
|
+
timestamp: new Date().toISOString(),
|
|
20
|
+
serializer: 'SessionSerializer',
|
|
21
|
+
nodeVersion: process.version,
|
|
22
|
+
platform: process.platform,
|
|
23
|
+
compressionEnabled: this.serializer.options.enableCompression
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
return this.serializer.serializeSessionData(enhancedData);
|
|
27
|
+
} catch (error) {
|
|
28
|
+
throw new SerializationError(`Session serialization failed: ${error.message}`, {
|
|
29
|
+
sessionId: sessionData?.id,
|
|
30
|
+
originalError: error
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
63
35
|
* Deserialize session data with validation and migration support
|
|
64
|
-
*/
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
throw new DeserializationError(`Session deserialization failed: ${error.message}`, {
|
|
97
|
-
originalError: error
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
36
|
+
*/ deserializeSessionData(serializedData, options = {}) {
|
|
37
|
+
try {
|
|
38
|
+
const data = this.serializer.deserializeSessionData(serializedData);
|
|
39
|
+
// Handle metadata and validation
|
|
40
|
+
if (data.__session_meta__) {
|
|
41
|
+
const meta = data.__session_meta__;
|
|
42
|
+
// Version migration if needed
|
|
43
|
+
if (this.enableMigration && meta.version !== '2.0.0') {
|
|
44
|
+
console.log(`[SessionSerializer] Migrating session data from v${meta.version} to v2.0.0`);
|
|
45
|
+
this._migrateSessionData(data, meta.version);
|
|
46
|
+
}
|
|
47
|
+
// Remove metadata
|
|
48
|
+
delete data.__session_meta__;
|
|
49
|
+
}
|
|
50
|
+
// Post-process to restore complex types
|
|
51
|
+
return this._postprocessSessionData(data, options);
|
|
52
|
+
} catch (error) {
|
|
53
|
+
// Attempt fallback deserialization for older formats
|
|
54
|
+
if (options.allowFallback !== false) {
|
|
55
|
+
try {
|
|
56
|
+
console.warn('[SessionSerializer] Attempting fallback deserialization for legacy format');
|
|
57
|
+
return this._deserializeLegacySession(serializedData);
|
|
58
|
+
} catch (fallbackError) {
|
|
59
|
+
console.error('[SessionSerializer] Fallback deserialization also failed:', fallbackError.message);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
throw new DeserializationError(`Session deserialization failed: ${error.message}`, {
|
|
63
|
+
originalError: error
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
103
68
|
* Serialize checkpoint data with type preservation
|
|
104
|
-
*/
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
/**
|
|
69
|
+
*/ serializeCheckpointData(checkpointData) {
|
|
70
|
+
try {
|
|
71
|
+
// Enhanced checkpoint with additional metadata
|
|
72
|
+
const enhancedCheckpoint = {
|
|
73
|
+
...checkpointData,
|
|
74
|
+
__checkpoint_meta__: {
|
|
75
|
+
serializedAt: new Date().toISOString(),
|
|
76
|
+
version: '2.0.0',
|
|
77
|
+
type: 'checkpoint'
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
return this.serializer.serialize(enhancedCheckpoint);
|
|
81
|
+
} catch (error) {
|
|
82
|
+
throw new SerializationError(`Checkpoint serialization failed: ${error.message}`, {
|
|
83
|
+
checkpointName: checkpointData?.name,
|
|
84
|
+
originalError: error
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
127
89
|
* Deserialize checkpoint data with type restoration
|
|
128
|
-
*/
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/**
|
|
90
|
+
*/ deserializeCheckpointData(serializedData) {
|
|
91
|
+
try {
|
|
92
|
+
const data = this.serializer.deserialize(serializedData);
|
|
93
|
+
// Remove checkpoint metadata
|
|
94
|
+
if (data.__checkpoint_meta__) {
|
|
95
|
+
delete data.__checkpoint_meta__;
|
|
96
|
+
}
|
|
97
|
+
return data;
|
|
98
|
+
} catch (error) {
|
|
99
|
+
// Fallback to basic JSON parsing for legacy checkpoints
|
|
100
|
+
try {
|
|
101
|
+
return JSON.parse(serializedData);
|
|
102
|
+
} catch (fallbackError) {
|
|
103
|
+
throw new DeserializationError(`Checkpoint deserialization failed: ${error.message}`, {
|
|
104
|
+
originalError: error,
|
|
105
|
+
fallbackError: fallbackError.message
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
153
111
|
* Serialize session metadata with complex type support
|
|
154
|
-
*/
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
/**
|
|
112
|
+
*/ serializeMetadata(metadata) {
|
|
113
|
+
try {
|
|
114
|
+
if (!metadata || typeof metadata !== 'object') {
|
|
115
|
+
return JSON.stringify(metadata);
|
|
116
|
+
}
|
|
117
|
+
// Use advanced serializer for complex metadata
|
|
118
|
+
return this.serializer.serialize(metadata);
|
|
119
|
+
} catch (error) {
|
|
120
|
+
console.warn('[SessionSerializer] Metadata serialization failed, using fallback:', error.message);
|
|
121
|
+
return JSON.stringify(this._simplifyMetadata(metadata));
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
170
125
|
* Deserialize session metadata with type restoration
|
|
171
|
-
*/
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
/**
|
|
126
|
+
*/ deserializeMetadata(serializedMetadata) {
|
|
127
|
+
if (!serializedMetadata) return {};
|
|
128
|
+
try {
|
|
129
|
+
// Try advanced deserialization first
|
|
130
|
+
return this.serializer.deserialize(serializedMetadata);
|
|
131
|
+
} catch (error) {
|
|
132
|
+
try {
|
|
133
|
+
// Fallback to basic JSON parsing
|
|
134
|
+
return JSON.parse(serializedMetadata);
|
|
135
|
+
} catch (fallbackError) {
|
|
136
|
+
console.warn('[SessionSerializer] Metadata deserialization failed:', error.message);
|
|
137
|
+
return {};
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
190
142
|
* Serialize log data with structured formatting
|
|
191
|
-
*/
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
/**
|
|
143
|
+
*/ serializeLogData(logData) {
|
|
144
|
+
if (!logData) return null;
|
|
145
|
+
try {
|
|
146
|
+
// Handle different log data types
|
|
147
|
+
if (typeof logData === 'string') {
|
|
148
|
+
return logData;
|
|
149
|
+
}
|
|
150
|
+
// Use advanced serializer for complex log data
|
|
151
|
+
return this.serializer.serialize(logData);
|
|
152
|
+
} catch (error) {
|
|
153
|
+
console.warn('[SessionSerializer] Log data serialization failed:', error.message);
|
|
154
|
+
return JSON.stringify(this._sanitizeLogData(logData));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
210
158
|
* Deserialize log data with error recovery
|
|
211
|
-
*/
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
/**
|
|
159
|
+
*/ deserializeLogData(serializedLogData) {
|
|
160
|
+
if (!serializedLogData) return null;
|
|
161
|
+
try {
|
|
162
|
+
// Try advanced deserialization
|
|
163
|
+
return this.serializer.deserialize(serializedLogData);
|
|
164
|
+
} catch (error) {
|
|
165
|
+
try {
|
|
166
|
+
// Fallback to JSON parsing
|
|
167
|
+
return JSON.parse(serializedLogData);
|
|
168
|
+
} catch (fallbackError) {
|
|
169
|
+
// Return as-is if all parsing fails
|
|
170
|
+
return serializedLogData;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
230
175
|
* Pre-process session data before serialization
|
|
231
|
-
*/
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
if (processed.checkpoints && Array.isArray(processed.checkpoints)) {
|
|
266
|
-
processed.checkpoints = processed.checkpoints.map(checkpoint => this._preprocessCheckpoint(checkpoint));
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
return processed;
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
/**
|
|
176
|
+
*/ _preprocessSessionData(sessionData) {
|
|
177
|
+
if (!sessionData || typeof sessionData !== 'object') {
|
|
178
|
+
return sessionData;
|
|
179
|
+
}
|
|
180
|
+
const processed = {
|
|
181
|
+
...sessionData
|
|
182
|
+
};
|
|
183
|
+
// Handle special session fields
|
|
184
|
+
if (processed.created_at && !(processed.created_at instanceof Date)) {
|
|
185
|
+
processed.created_at = new Date(processed.created_at);
|
|
186
|
+
}
|
|
187
|
+
if (processed.updated_at && !(processed.updated_at instanceof Date)) {
|
|
188
|
+
processed.updated_at = new Date(processed.updated_at);
|
|
189
|
+
}
|
|
190
|
+
if (processed.paused_at && !(processed.paused_at instanceof Date)) {
|
|
191
|
+
processed.paused_at = new Date(processed.paused_at);
|
|
192
|
+
}
|
|
193
|
+
if (processed.resumed_at && !(processed.resumed_at instanceof Date)) {
|
|
194
|
+
processed.resumed_at = new Date(processed.resumed_at);
|
|
195
|
+
}
|
|
196
|
+
// Handle arrays and complex nested structures
|
|
197
|
+
if (processed.agents && Array.isArray(processed.agents)) {
|
|
198
|
+
processed.agents = processed.agents.map((agent)=>this._preprocessAgent(agent));
|
|
199
|
+
}
|
|
200
|
+
if (processed.tasks && Array.isArray(processed.tasks)) {
|
|
201
|
+
processed.tasks = processed.tasks.map((task)=>this._preprocessTask(task));
|
|
202
|
+
}
|
|
203
|
+
if (processed.checkpoints && Array.isArray(processed.checkpoints)) {
|
|
204
|
+
processed.checkpoints = processed.checkpoints.map((checkpoint)=>this._preprocessCheckpoint(checkpoint));
|
|
205
|
+
}
|
|
206
|
+
return processed;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
273
209
|
* Post-process session data after deserialization
|
|
274
|
-
*/
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
/**
|
|
210
|
+
*/ _postprocessSessionData(sessionData, options = {}) {
|
|
211
|
+
if (!sessionData || typeof sessionData !== 'object') {
|
|
212
|
+
return sessionData;
|
|
213
|
+
}
|
|
214
|
+
const processed = {
|
|
215
|
+
...sessionData
|
|
216
|
+
};
|
|
217
|
+
// Restore date objects
|
|
218
|
+
const dateFields = [
|
|
219
|
+
'created_at',
|
|
220
|
+
'updated_at',
|
|
221
|
+
'paused_at',
|
|
222
|
+
'resumed_at'
|
|
223
|
+
];
|
|
224
|
+
for (const field of dateFields){
|
|
225
|
+
if (processed[field] && !(processed[field] instanceof Date)) {
|
|
226
|
+
processed[field] = new Date(processed[field]);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
// Post-process nested structures
|
|
230
|
+
if (processed.agents && Array.isArray(processed.agents)) {
|
|
231
|
+
processed.agents = processed.agents.map((agent)=>this._postprocessAgent(agent));
|
|
232
|
+
}
|
|
233
|
+
if (processed.tasks && Array.isArray(processed.tasks)) {
|
|
234
|
+
processed.tasks = processed.tasks.map((task)=>this._postprocessTask(task));
|
|
235
|
+
}
|
|
236
|
+
if (processed.checkpoints && Array.isArray(processed.checkpoints)) {
|
|
237
|
+
processed.checkpoints = processed.checkpoints.map((checkpoint)=>this._postprocessCheckpoint(checkpoint));
|
|
238
|
+
}
|
|
239
|
+
return processed;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
307
242
|
* Agent-specific preprocessing
|
|
308
|
-
*/
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
/**
|
|
243
|
+
*/ _preprocessAgent(agent) {
|
|
244
|
+
if (!agent || typeof agent !== 'object') return agent;
|
|
245
|
+
const processed = {
|
|
246
|
+
...agent
|
|
247
|
+
};
|
|
248
|
+
// Handle agent timestamps
|
|
249
|
+
if (processed.created_at) processed.created_at = new Date(processed.created_at);
|
|
250
|
+
if (processed.updated_at) processed.updated_at = new Date(processed.updated_at);
|
|
251
|
+
if (processed.last_active) processed.last_active = new Date(processed.last_active);
|
|
252
|
+
// Handle agent configuration
|
|
253
|
+
if (processed.config && typeof processed.config === 'object') {
|
|
254
|
+
processed.config = {
|
|
255
|
+
...processed.config
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
return processed;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
328
261
|
* Task-specific preprocessing
|
|
329
|
-
*/
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
/**
|
|
262
|
+
*/ _preprocessTask(task) {
|
|
263
|
+
if (!task || typeof task !== 'object') return task;
|
|
264
|
+
const processed = {
|
|
265
|
+
...task
|
|
266
|
+
};
|
|
267
|
+
// Handle task timestamps
|
|
268
|
+
if (processed.created_at) processed.created_at = new Date(processed.created_at);
|
|
269
|
+
if (processed.updated_at) processed.updated_at = new Date(processed.updated_at);
|
|
270
|
+
if (processed.started_at) processed.started_at = new Date(processed.started_at);
|
|
271
|
+
if (processed.completed_at) processed.completed_at = new Date(processed.completed_at);
|
|
272
|
+
return processed;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
345
275
|
* Checkpoint-specific preprocessing
|
|
346
|
-
*/
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
/**
|
|
276
|
+
*/ _preprocessCheckpoint(checkpoint) {
|
|
277
|
+
if (!checkpoint || typeof checkpoint !== 'object') return checkpoint;
|
|
278
|
+
const processed = {
|
|
279
|
+
...checkpoint
|
|
280
|
+
};
|
|
281
|
+
// Handle checkpoint timestamps
|
|
282
|
+
if (processed.created_at) processed.created_at = new Date(processed.created_at);
|
|
283
|
+
return processed;
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
359
286
|
* Agent-specific postprocessing
|
|
360
|
-
*/
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
/**
|
|
287
|
+
*/ _postprocessAgent(agent) {
|
|
288
|
+
return this._preprocessAgent(agent); // Same logic for now
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
366
291
|
* Task-specific postprocessing
|
|
367
|
-
*/
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
/**
|
|
292
|
+
*/ _postprocessTask(task) {
|
|
293
|
+
return this._preprocessTask(task); // Same logic for now
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
373
296
|
* Checkpoint-specific postprocessing
|
|
374
|
-
*/
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
/**
|
|
297
|
+
*/ _postprocessCheckpoint(checkpoint) {
|
|
298
|
+
return this._preprocessCheckpoint(checkpoint); // Same logic for now
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
380
301
|
* Migrate session data between versions
|
|
381
|
-
*/
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
/**
|
|
302
|
+
*/ _migrateSessionData(data, fromVersion) {
|
|
303
|
+
switch(fromVersion){
|
|
304
|
+
case '1.0.0':
|
|
305
|
+
// Add new fields introduced in v2.0.0
|
|
306
|
+
if (!data.version) data.version = '2.0.0';
|
|
307
|
+
if (!data.capabilities) data.capabilities = [];
|
|
308
|
+
break;
|
|
309
|
+
default:
|
|
310
|
+
console.warn(`[SessionSerializer] Unknown session version: ${fromVersion}`);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
396
314
|
* Fallback deserialization for legacy session formats
|
|
397
|
-
*/
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
/**
|
|
315
|
+
*/ _deserializeLegacySession(serializedData) {
|
|
316
|
+
try {
|
|
317
|
+
const data = JSON.parse(serializedData);
|
|
318
|
+
// Basic cleanup for common legacy issues
|
|
319
|
+
return this._cleanupLegacyData(data);
|
|
320
|
+
} catch (error) {
|
|
321
|
+
throw new DeserializationError(`Legacy session deserialization failed: ${error.message}`);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
410
325
|
* Clean up legacy data structures
|
|
411
|
-
*/
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
326
|
+
*/ _cleanupLegacyData(data) {
|
|
327
|
+
if (!data || typeof data !== 'object') return data;
|
|
328
|
+
const cleaned = {
|
|
329
|
+
...data
|
|
330
|
+
};
|
|
331
|
+
// Convert string dates to Date objects
|
|
332
|
+
const dateFields = [
|
|
333
|
+
'created_at',
|
|
334
|
+
'updated_at',
|
|
335
|
+
'paused_at',
|
|
336
|
+
'resumed_at'
|
|
337
|
+
];
|
|
338
|
+
for (const field of dateFields){
|
|
339
|
+
if (cleaned[field] && typeof cleaned[field] === 'string') {
|
|
340
|
+
try {
|
|
341
|
+
cleaned[field] = new Date(cleaned[field]);
|
|
342
|
+
} catch (error) {
|
|
343
|
+
console.warn(`[SessionSerializer] Failed to parse date field ${field}:`, error.message);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
// Handle stringified JSON fields
|
|
348
|
+
const jsonFields = [
|
|
349
|
+
'metadata',
|
|
350
|
+
'checkpoint_data'
|
|
351
|
+
];
|
|
352
|
+
for (const field of jsonFields){
|
|
353
|
+
if (cleaned[field] && typeof cleaned[field] === 'string') {
|
|
354
|
+
try {
|
|
355
|
+
cleaned[field] = JSON.parse(cleaned[field]);
|
|
356
|
+
} catch (error) {
|
|
357
|
+
console.warn(`[SessionSerializer] Failed to parse JSON field ${field}:`, error.message);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
return cleaned;
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
445
364
|
* Simplify metadata for fallback serialization
|
|
446
|
-
*/
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
simplified
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
return simplified;
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
/**
|
|
365
|
+
*/ _simplifyMetadata(metadata) {
|
|
366
|
+
if (!metadata || typeof metadata !== 'object') return metadata;
|
|
367
|
+
const simplified = {};
|
|
368
|
+
for (const [key, value] of Object.entries(metadata)){
|
|
369
|
+
try {
|
|
370
|
+
// Only include JSON-serializable values
|
|
371
|
+
JSON.stringify(value);
|
|
372
|
+
simplified[key] = value;
|
|
373
|
+
} catch (error) {
|
|
374
|
+
simplified[key] = `[Non-serializable: ${typeof value}]`;
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
return simplified;
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
466
380
|
* Sanitize log data for safe serialization
|
|
467
|
-
*/
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
return sanitized;
|
|
495
|
-
}
|
|
496
|
-
|
|
497
|
-
/**
|
|
381
|
+
*/ _sanitizeLogData(logData) {
|
|
382
|
+
if (!logData || typeof logData !== 'object') return logData;
|
|
383
|
+
const sanitized = {};
|
|
384
|
+
for (const [key, value] of Object.entries(logData)){
|
|
385
|
+
if (typeof value === 'function') {
|
|
386
|
+
sanitized[key] = '[Function]';
|
|
387
|
+
} else if (typeof value === 'symbol') {
|
|
388
|
+
sanitized[key] = `[Symbol: ${value.toString()}]`;
|
|
389
|
+
} else if (value instanceof Error) {
|
|
390
|
+
sanitized[key] = {
|
|
391
|
+
name: value.name,
|
|
392
|
+
message: value.message,
|
|
393
|
+
stack: value.stack
|
|
394
|
+
};
|
|
395
|
+
} else {
|
|
396
|
+
try {
|
|
397
|
+
JSON.stringify(value);
|
|
398
|
+
sanitized[key] = value;
|
|
399
|
+
} catch (error) {
|
|
400
|
+
sanitized[key] = `[Non-serializable: ${typeof value}]`;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
return sanitized;
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
498
407
|
* Get serialization statistics
|
|
499
|
-
*/
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
}
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
408
|
+
*/ getStats() {
|
|
409
|
+
return {
|
|
410
|
+
compressionEnabled: this.serializer.options.enableCompression,
|
|
411
|
+
compressionThreshold: this.compressionThreshold,
|
|
412
|
+
maxDepth: this.serializer.options.maxDepth,
|
|
413
|
+
validationEnabled: this.enableValidation,
|
|
414
|
+
migrationEnabled: this.enableMigration
|
|
415
|
+
};
|
|
416
|
+
}
|
|
417
|
+
constructor(options = {}){
|
|
418
|
+
this.serializer = createSessionSerializer({
|
|
419
|
+
preserveUndefined: true,
|
|
420
|
+
preserveFunctions: false,
|
|
421
|
+
preserveSymbols: true,
|
|
422
|
+
enableCompression: options.enableCompression !== false,
|
|
423
|
+
maxDepth: options.maxDepth || 50,
|
|
424
|
+
...options
|
|
425
|
+
});
|
|
426
|
+
this.compressionThreshold = options.compressionThreshold || 1024; // 1KB
|
|
427
|
+
this.enableValidation = options.enableValidation !== false;
|
|
428
|
+
this.enableMigration = options.enableMigration !== false;
|
|
429
|
+
}
|
|
430
|
+
}
|
|
511
431
|
/**
|
|
512
432
|
* Factory function for creating session serializers
|
|
513
|
-
*/
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
}
|
|
517
|
-
|
|
433
|
+
*/ export function createEnhancedSessionSerializer(options = {}) {
|
|
434
|
+
return new SessionSerializer(options);
|
|
435
|
+
}
|
|
518
436
|
/**
|
|
519
437
|
* Global session serializer instance
|
|
520
|
-
*/
|
|
521
|
-
export
|
|
522
|
-
|
|
523
|
-
export default SessionSerializer;
|
|
438
|
+
*/ export const sessionSerializer = new SessionSerializer();
|
|
439
|
+
export default SessionSerializer;
|