0xkobold 0.7.2 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/HEARTBEAT.md +239 -0
- package/IDENTITY.md +12 -0
- package/README.md +138 -4
- package/SOUL.md +21 -0
- package/dist/package.json +10 -5
- package/dist/src/agent/bootstrap-loader.js +295 -66
- package/dist/src/agent/bootstrap-loader.js.map +1 -1
- package/dist/src/agent/context-pruning.js +10 -5
- package/dist/src/agent/context-pruning.js.map +1 -1
- package/dist/src/agent/embedded-runner.js +29 -15
- package/dist/src/agent/embedded-runner.js.map +1 -1
- package/dist/src/agent/index.js +5 -2
- package/dist/src/agent/index.js.map +1 -1
- package/dist/src/agent/system-prompt.js +167 -20
- package/dist/src/agent/system-prompt.js.map +1 -1
- package/dist/src/agent/tools/spawn-agent.js +72 -5
- package/dist/src/agent/tools/spawn-agent.js.map +1 -1
- package/dist/src/channels/slack/webhook.js +2 -2
- package/dist/src/channels/slack/webhook.js.map +1 -1
- package/dist/src/channels/telegram/bot.js +4 -4
- package/dist/src/channels/telegram/bot.js.map +1 -1
- package/dist/src/channels/whatsapp/integration.js +4 -4
- package/dist/src/channels/whatsapp/integration.js.map +1 -1
- package/dist/src/cli/commands/gateway.js +9 -10
- package/dist/src/cli/commands/gateway.js.map +1 -1
- package/dist/src/cli/commands/init.js +90 -0
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/setup.js +53 -0
- package/dist/src/cli/commands/setup.js.map +1 -1
- package/dist/src/cli/index.js +0 -0
- package/dist/src/config/unified-config.js +5 -0
- package/dist/src/config/unified-config.js.map +1 -1
- package/dist/src/cron/index.js +2 -0
- package/dist/src/cron/index.js.map +1 -1
- package/dist/src/cron/nl-parser.js +522 -0
- package/dist/src/cron/nl-parser.js.map +1 -0
- package/dist/src/cron/runner.js +6 -31
- package/dist/src/cron/runner.js.map +1 -1
- package/dist/src/event-bus/index.js.map +1 -1
- package/dist/src/extensions/core/agent-orchestrator-extension.js +200 -148
- package/dist/src/extensions/core/agent-orchestrator-extension.js.map +1 -1
- package/dist/src/extensions/core/diagnostics-extension.js +93 -56
- package/dist/src/extensions/core/diagnostics-extension.js.map +1 -1
- package/dist/src/extensions/core/draconic-safety-extension.js +256 -3
- package/dist/src/extensions/core/draconic-safety-extension.js.map +1 -1
- package/dist/src/extensions/core/heartbeat-extension.js +416 -150
- package/dist/src/extensions/core/heartbeat-extension.js.map +1 -1
- package/dist/src/extensions/core/{generative-agents-extension.js → learning-extension.js} +90 -128
- package/dist/src/extensions/core/learning-extension.js.map +1 -0
- package/dist/src/extensions/core/perennial-memory-extension.js +884 -87
- package/dist/src/extensions/core/perennial-memory-extension.js.map +1 -1
- package/dist/src/extensions/core/routed-ollama-extension.js +345 -0
- package/dist/src/extensions/core/routed-ollama-extension.js.map +1 -0
- package/dist/src/extensions/core/task-manager-extension.js +25 -2
- package/dist/src/extensions/core/task-manager-extension.js.map +1 -1
- package/dist/src/extensions/core/websearch-enhanced-extension.js +81 -23
- package/dist/src/extensions/core/websearch-enhanced-extension.js.map +1 -1
- package/dist/src/extensions/core/workspace-footer-extension.js +40 -63
- package/dist/src/extensions/core/workspace-footer-extension.js.map +1 -1
- package/dist/src/extensions/loader.js +5 -1
- package/dist/src/extensions/loader.js.map +1 -1
- package/dist/src/gateway/gateway-server.js +74 -3
- package/dist/src/gateway/gateway-server.js.map +1 -1
- package/dist/src/gateway/index.js +2 -2
- package/dist/src/gateway/index.js.map +1 -1
- package/dist/src/gateway/methods/agent.js +1 -1
- package/dist/src/gateway/methods/agent.js.map +1 -1
- package/dist/src/gateway/methods/index.js +4 -0
- package/dist/src/gateway/methods/index.js.map +1 -1
- package/dist/src/gateway/methods/node.js +261 -0
- package/dist/src/gateway/methods/node.js.map +1 -0
- package/dist/src/gateway/queue-modes.js +356 -0
- package/dist/src/gateway/queue-modes.js.map +1 -0
- package/dist/src/index.js +47 -6
- package/dist/src/index.js.map +1 -1
- package/dist/src/llm/community-analytics.js +569 -0
- package/dist/src/llm/community-analytics.js.map +1 -0
- package/dist/src/llm/index.js +28 -4
- package/dist/src/llm/index.js.map +1 -1
- package/dist/src/llm/model-discovery.js +335 -0
- package/dist/src/llm/model-discovery.js.map +1 -0
- package/dist/src/llm/model-popularity.js +566 -0
- package/dist/src/llm/model-popularity.js.map +1 -0
- package/dist/src/llm/model-scoring-db.js +553 -0
- package/dist/src/llm/model-scoring-db.js.map +1 -0
- package/dist/src/llm/multi-provider.js +258 -0
- package/dist/src/llm/multi-provider.js.map +1 -0
- package/dist/src/llm/ollama.js +133 -187
- package/dist/src/llm/ollama.js.map +1 -1
- package/dist/src/llm/router-commands.js +773 -0
- package/dist/src/llm/router-commands.js.map +1 -0
- package/dist/src/llm/router-core.js +600 -0
- package/dist/src/llm/router-core.js.map +1 -0
- package/dist/src/memory/checkpoint-manager.js +278 -0
- package/dist/src/memory/checkpoint-manager.js.map +1 -0
- package/dist/src/memory/conflict-detector.js +279 -0
- package/dist/src/memory/conflict-detector.js.map +1 -0
- package/dist/src/memory/context-graph.js +360 -0
- package/dist/src/memory/context-graph.js.map +1 -0
- package/dist/src/memory/dialectic/benchmark-cli.js +200 -0
- package/dist/src/memory/dialectic/benchmark-cli.js.map +1 -0
- package/dist/src/memory/dialectic/debug-reasoning.js +37 -0
- package/dist/src/memory/dialectic/debug-reasoning.js.map +1 -0
- package/dist/src/memory/dialectic/index.js +135 -0
- package/dist/src/memory/dialectic/index.js.map +1 -0
- package/dist/src/memory/dialectic/nudges.js +380 -0
- package/dist/src/memory/dialectic/nudges.js.map +1 -0
- package/dist/src/memory/dialectic/reasoning-engine.js +607 -0
- package/dist/src/memory/dialectic/reasoning-engine.js.map +1 -0
- package/dist/src/memory/dialectic/reasoning.js +390 -0
- package/dist/src/memory/dialectic/reasoning.js.map +1 -0
- package/dist/src/memory/dialectic/skill-creation.js +481 -0
- package/dist/src/memory/dialectic/skill-creation.js.map +1 -0
- package/dist/src/memory/dialectic/store.js +663 -0
- package/dist/src/memory/dialectic/store.js.map +1 -0
- package/dist/src/memory/dialectic/types.js +11 -0
- package/dist/src/memory/dialectic/types.js.map +1 -0
- package/dist/src/memory/index.js +24 -2
- package/dist/src/memory/index.js.map +1 -1
- package/dist/src/memory/memory-decay.js +350 -0
- package/dist/src/memory/memory-decay.js.map +1 -0
- package/dist/src/memory/memory-integration.js +5 -5
- package/dist/src/memory/memory-integration.js.map +1 -1
- package/dist/src/memory/migrate-memory-stream.js +97 -0
- package/dist/src/memory/migrate-memory-stream.js.map +1 -0
- package/dist/src/memory/session-memory-bridge.js +49 -5
- package/dist/src/memory/session-memory-bridge.js.map +1 -1
- package/dist/src/memory/session-store.js +123 -0
- package/dist/src/memory/session-store.js.map +1 -1
- package/dist/src/memory/smart-write-rules.js +164 -0
- package/dist/src/memory/smart-write-rules.js.map +1 -0
- package/dist/src/memory/tiered-memory.js +436 -0
- package/dist/src/memory/tiered-memory.js.map +1 -0
- package/dist/src/memory/types.js +6 -0
- package/dist/src/memory/types.js.map +1 -0
- package/dist/src/memory/verify-migration.js +99 -0
- package/dist/src/memory/verify-migration.js.map +1 -0
- package/dist/src/pi-config.js +11 -9
- package/dist/src/pi-config.js.map +1 -1
- package/dist/src/skills/conditional-skills.js +464 -0
- package/dist/src/skills/conditional-skills.js.map +1 -0
- package/dist/src/skills/index.js +5 -0
- package/dist/src/skills/index.js.map +1 -1
- package/dist/src/skills/loader.js +56 -0
- package/dist/src/skills/loader.js.map +1 -1
- package/dist/src/skills/skill-manage.js +417 -0
- package/dist/src/skills/skill-manage.js.map +1 -0
- package/dist/src/tui/commands/orchestration-commands.js +62 -0
- package/dist/src/tui/commands/orchestration-commands.js.map +1 -1
- package/package.json +10 -5
- package/skills/model-router-test.ts +65 -0
- package/dist/src/extensions/core/auto-security-scan-extension.js +0 -41
- package/dist/src/extensions/core/auto-security-scan-extension.js.map +0 -1
- package/dist/src/extensions/core/cloudflare-browser-extension.js +0 -389
- package/dist/src/extensions/core/cloudflare-browser-extension.js.map +0 -1
- package/dist/src/extensions/core/compaction-safeguard.js +0 -223
- package/dist/src/extensions/core/compaction-safeguard.js.map +0 -1
- package/dist/src/extensions/core/generative-agents-extension.js.map +0 -1
- package/dist/src/extensions/core/obsidian-bridge-extension.js +0 -488
- package/dist/src/extensions/core/obsidian-bridge-extension.js.map +0 -1
- package/dist/src/llm/router.js +0 -145
- package/dist/src/llm/router.js.map +0 -1
- package/skills/kobold-scan-skill/node_modules/.package-lock.json +0 -172
- package/skills/kobold-scan-skill/node_modules/ansi-styles/index.d.ts +0 -345
- package/skills/kobold-scan-skill/node_modules/ansi-styles/index.js +0 -163
- package/skills/kobold-scan-skill/node_modules/ansi-styles/license +0 -9
- package/skills/kobold-scan-skill/node_modules/ansi-styles/package.json +0 -56
- package/skills/kobold-scan-skill/node_modules/ansi-styles/readme.md +0 -152
- package/skills/kobold-scan-skill/node_modules/balanced-match/.github/FUNDING.yml +0 -2
- package/skills/kobold-scan-skill/node_modules/balanced-match/LICENSE.md +0 -21
- package/skills/kobold-scan-skill/node_modules/balanced-match/README.md +0 -97
- package/skills/kobold-scan-skill/node_modules/balanced-match/index.js +0 -62
- package/skills/kobold-scan-skill/node_modules/balanced-match/package.json +0 -48
- package/skills/kobold-scan-skill/node_modules/brace-expansion/.github/FUNDING.yml +0 -2
- package/skills/kobold-scan-skill/node_modules/brace-expansion/LICENSE +0 -21
- package/skills/kobold-scan-skill/node_modules/brace-expansion/README.md +0 -135
- package/skills/kobold-scan-skill/node_modules/brace-expansion/index.js +0 -203
- package/skills/kobold-scan-skill/node_modules/brace-expansion/package.json +0 -49
- package/skills/kobold-scan-skill/node_modules/chalk/index.d.ts +0 -415
- package/skills/kobold-scan-skill/node_modules/chalk/license +0 -9
- package/skills/kobold-scan-skill/node_modules/chalk/package.json +0 -68
- package/skills/kobold-scan-skill/node_modules/chalk/readme.md +0 -341
- package/skills/kobold-scan-skill/node_modules/chalk/source/index.js +0 -229
- package/skills/kobold-scan-skill/node_modules/chalk/source/templates.js +0 -134
- package/skills/kobold-scan-skill/node_modules/chalk/source/util.js +0 -39
- package/skills/kobold-scan-skill/node_modules/color-convert/CHANGELOG.md +0 -54
- package/skills/kobold-scan-skill/node_modules/color-convert/LICENSE +0 -21
- package/skills/kobold-scan-skill/node_modules/color-convert/README.md +0 -68
- package/skills/kobold-scan-skill/node_modules/color-convert/conversions.js +0 -839
- package/skills/kobold-scan-skill/node_modules/color-convert/index.js +0 -81
- package/skills/kobold-scan-skill/node_modules/color-convert/package.json +0 -48
- package/skills/kobold-scan-skill/node_modules/color-convert/route.js +0 -97
- package/skills/kobold-scan-skill/node_modules/color-name/LICENSE +0 -8
- package/skills/kobold-scan-skill/node_modules/color-name/README.md +0 -11
- package/skills/kobold-scan-skill/node_modules/color-name/index.js +0 -152
- package/skills/kobold-scan-skill/node_modules/color-name/package.json +0 -28
- package/skills/kobold-scan-skill/node_modules/commander/LICENSE +0 -22
- package/skills/kobold-scan-skill/node_modules/commander/Readme.md +0 -1129
- package/skills/kobold-scan-skill/node_modules/commander/esm.mjs +0 -16
- package/skills/kobold-scan-skill/node_modules/commander/index.js +0 -27
- package/skills/kobold-scan-skill/node_modules/commander/lib/argument.js +0 -147
- package/skills/kobold-scan-skill/node_modules/commander/lib/command.js +0 -2179
- package/skills/kobold-scan-skill/node_modules/commander/lib/error.js +0 -45
- package/skills/kobold-scan-skill/node_modules/commander/lib/help.js +0 -461
- package/skills/kobold-scan-skill/node_modules/commander/lib/option.js +0 -326
- package/skills/kobold-scan-skill/node_modules/commander/lib/suggestSimilar.js +0 -100
- package/skills/kobold-scan-skill/node_modules/commander/package-support.json +0 -16
- package/skills/kobold-scan-skill/node_modules/commander/package.json +0 -80
- package/skills/kobold-scan-skill/node_modules/commander/typings/index.d.ts +0 -891
- package/skills/kobold-scan-skill/node_modules/fs.realpath/LICENSE +0 -43
- package/skills/kobold-scan-skill/node_modules/fs.realpath/README.md +0 -33
- package/skills/kobold-scan-skill/node_modules/fs.realpath/index.js +0 -66
- package/skills/kobold-scan-skill/node_modules/fs.realpath/old.js +0 -303
- package/skills/kobold-scan-skill/node_modules/fs.realpath/package.json +0 -26
- package/skills/kobold-scan-skill/node_modules/glob/LICENSE +0 -15
- package/skills/kobold-scan-skill/node_modules/glob/README.md +0 -399
- package/skills/kobold-scan-skill/node_modules/glob/common.js +0 -244
- package/skills/kobold-scan-skill/node_modules/glob/glob.js +0 -790
- package/skills/kobold-scan-skill/node_modules/glob/package.json +0 -55
- package/skills/kobold-scan-skill/node_modules/glob/sync.js +0 -486
- package/skills/kobold-scan-skill/node_modules/has-flag/index.d.ts +0 -39
- package/skills/kobold-scan-skill/node_modules/has-flag/index.js +0 -8
- package/skills/kobold-scan-skill/node_modules/has-flag/license +0 -9
- package/skills/kobold-scan-skill/node_modules/has-flag/package.json +0 -46
- package/skills/kobold-scan-skill/node_modules/has-flag/readme.md +0 -89
- package/skills/kobold-scan-skill/node_modules/inflight/LICENSE +0 -15
- package/skills/kobold-scan-skill/node_modules/inflight/README.md +0 -37
- package/skills/kobold-scan-skill/node_modules/inflight/inflight.js +0 -54
- package/skills/kobold-scan-skill/node_modules/inflight/package.json +0 -29
- package/skills/kobold-scan-skill/node_modules/inherits/LICENSE +0 -16
- package/skills/kobold-scan-skill/node_modules/inherits/README.md +0 -42
- package/skills/kobold-scan-skill/node_modules/inherits/inherits.js +0 -9
- package/skills/kobold-scan-skill/node_modules/inherits/inherits_browser.js +0 -27
- package/skills/kobold-scan-skill/node_modules/inherits/package.json +0 -29
- package/skills/kobold-scan-skill/node_modules/minimatch/LICENSE +0 -15
- package/skills/kobold-scan-skill/node_modules/minimatch/README.md +0 -259
- package/skills/kobold-scan-skill/node_modules/minimatch/lib/path.js +0 -4
- package/skills/kobold-scan-skill/node_modules/minimatch/minimatch.js +0 -944
- package/skills/kobold-scan-skill/node_modules/minimatch/package.json +0 -35
- package/skills/kobold-scan-skill/node_modules/once/LICENSE +0 -15
- package/skills/kobold-scan-skill/node_modules/once/README.md +0 -79
- package/skills/kobold-scan-skill/node_modules/once/once.js +0 -42
- package/skills/kobold-scan-skill/node_modules/once/package.json +0 -33
- package/skills/kobold-scan-skill/node_modules/supports-color/browser.js +0 -5
- package/skills/kobold-scan-skill/node_modules/supports-color/index.js +0 -135
- package/skills/kobold-scan-skill/node_modules/supports-color/license +0 -9
- package/skills/kobold-scan-skill/node_modules/supports-color/package.json +0 -53
- package/skills/kobold-scan-skill/node_modules/supports-color/readme.md +0 -76
- package/skills/kobold-scan-skill/node_modules/wrappy/LICENSE +0 -15
- package/skills/kobold-scan-skill/node_modules/wrappy/README.md +0 -36
- package/skills/kobold-scan-skill/node_modules/wrappy/package.json +0 -29
- package/skills/kobold-scan-skill/node_modules/wrappy/wrappy.js +0 -33
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router-core.js","sourceRoot":"","sources":["../../../src/llm/router-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,wBAAwB,EAAwB,MAAM,mBAAmB,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAkB,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAuC/D,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E,MAAM,OAAO,mBAAmB;IACtB,SAAS,GAAG,wBAAwB,EAAE,CAAC;IACvC,SAAS,GAAG,iBAAiB,EAAE,CAAC;IAChC,UAAU,GAAG,yBAAyB,EAAE,CAAC;IACzC,QAAQ,CAAc;IACtB,YAAY,CAAS;IACrB,WAAW,GAAG,KAAK,CAAC;IAE5B,uDAAuD;IAC/C,kBAAkB,GAAuB,EAAE,CAAC;IAC5C,WAAW,GAA4B,IAAI,GAAG,EAAE,CAAC;IACxC,UAAU,GAAG,IAAI,CAAC;IAC3B,eAAe,GAAG,IAAI,CAAC;IACvB,cAAc,GAAa,EAAE,CAAC;IAEtC,4BAA4B;IACpB,OAAO,GAAG;QAChB,eAAe,EAAE,EAAE;QACnB,cAAc,EAAE,EAAE;QAClB,OAAO,EAAE,CAAC;QACV,KAAK,EAAE,CAAC;QACR,WAAW,EAAE,EAAE;QACf,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,CAAC;QACX,UAAU,EAAE,CAAC,EAAQ,yDAAyD;QAC9E,cAAc,EAAE,CAAC,EAAI,qCAAqC;KAC3D,CAAC;IAEF,YAAY,QAAqB,EAAE,YAAqB;QACtD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,YAAY,IAAI,iBAAiB,CAAC;QACtD,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED,+EAA+E;IAC/E,iBAAiB;IACjB,+EAA+E;IAE/E,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAE7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,MAAM,UAAU,CAAC,CAAC;QAC5D,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC;iBACxC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;iBACpB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;iBAChC,IAAI,CAAC,EAAE,CAAC,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,WAAW,UAAU,IAAI,GAAG,CAAC,CAAC;QAChF,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,+EAA+E;IAC/E,kBAAkB;IAClB,+EAA+E;IAE/E,KAAK,CAAC,WAAW,CACf,OAAgB,EAChB,UAAiF,EAAE;QAEnF,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE/B,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;QAErD,kCAAkC;QAClC,IAAI,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YACjC,IAAI,YAAY,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC1E,IAAI,YAAY,CAAC,oBAAoB,EAAE,CAAC;gBACtC,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,oBAAoB,EAAE,CAAC;oBACpD,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,GAAkC,CAAC;wBAAE,OAAO,KAAK,CAAC;gBACxE,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,iBAAiB;QACjB,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;QACjE,CAAC;QAED,gCAAgC;QAChC,IAAI,MAAc,CAAC;QACnB,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC;gBACvD,MAAM,GAAG,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;YAChC,CAAC;iBAAM,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAClD,MAAM,GAAI,OAAe,CAAC,IAAI,IAAI,EAAE,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,OAAO,CAAC;QACnB,CAAC;QAED,iBAAiB;QACjB,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAClC,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC;SACxD,CAAC,CAAC,CAAC;QAEJ,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAEzC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,KAAK,CAAC,IAAI,YAAY,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,MAAM,EAAE,CAAC,CAAC;YAClG,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACzB,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAY;QAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAKhB;QACC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,+EAA+E;IAC/E,uBAAuB;IACvB,+EAA+E;IAE/E,aAAa,CACX,SAAiB,EACjB,QAAsB,EACtB,SAAiB,EACjB,QAAgB,EAChB,UAAkB,EAClB,SAAkB;QAElB,MAAM,IAAI,GAAqB;YAC7B,SAAS;YACT,QAAQ;YACR,UAAU;YACV,SAAS;YACT,WAAW,EAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC;YAC7C,YAAY,EAAE,QAAQ,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC;YAC/C,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,OAAO,EAAE,IAAI;YACb,SAAS;SACV,CAAC;QAEF,2BAA2B;QAC3B,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEnC,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACrD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5E,CAAC;QAED,sBAAsB;QACtB,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;QAEH,mCAAmC;QACnC,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAE1D,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED,WAAW,CAAC,SAAiB,EAAE,QAAgB,EAAE,MAAc,EAAE,OAAgB;QAC/E,2BAA2B;QAC3B,MAAM,IAAI,GAAqB;YAC7B,SAAS;YACT,QAAQ;YACR,UAAU,EAAE,SAAS;YACrB,SAAS,EAAE,CAAC;YACZ,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,CAAC;YACf,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,UAAU,EAAE,MAAM;YAClB,OAAO,EAAE,MAAM,IAAI,CAAC;SACrB,CAAC;QAEF,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEnC,sBAAsB;QACtB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,OAAO,CAAC,GAAG,CAAC,+BAA+B,SAAS,UAAU,MAAM,IAAI,CAAC,CAAC;IAC5E,CAAC;IAED,aAAa,CAAC,SAAiB;QAC7B,8BAA8B;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAE1B,wBAAwB;QACxB,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;IAC9D,CAAC;IAED,gBAAgB;QACd,+BAA+B;QAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;IACvC,CAAC;IAED,mBAAmB,CAAC,QAAgB;QAClC,yCAAyC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACxD,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC,SAAS,CAAC;QAEhC,iCAAiC;QACjC,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CACpD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAClE,CAAC;QAEF,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAEnD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC9C,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACnD,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,SAA6B,CAAC;QAClC,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC;YACzC,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;gBACtB,SAAS,GAAG,KAAK,CAAC;gBAClB,SAAS,GAAG,KAAK,CAAC;YACpB,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,+EAA+E;IAC/E,mBAAmB;IACnB,+EAA+E;IAE/E,kBAAkB,CAAC,OAAgB;QACjC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,oBAAoB;QAClB,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IACjD,CAAC;IAED,+EAA+E;IAC/E,YAAY;IACZ,+EAA+E;IAE/E,iBAAiB,CAAC,UAAoB;QACpC,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,uBAAuB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,gBAAgB,CAAC,SAAiB;QAChC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,4BAA4B,SAAS,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,mBAAmB,CAAC,SAAiB;QACnC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,8BAA8B,SAAS,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,iBAAiB;QACf,OAAO,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;IAClC,CAAC;IAED,+EAA+E;IAC/E,gBAAgB;IAChB,+EAA+E;IAE/E,qBAAqB;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC;IAED,qBAAqB,CAAC,IAKrB;QACC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QACtE,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IACpD,CAAC;IAED,+EAA+E;IAC/E,uBAAuB;IACvB,+EAA+E;IAE/E,gBAAgB,CAAC,SAA2C,KAAK;QAC/D,OAAO,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC;IAC5C,CAAC;IAED,qBAAqB,CAAC,QAAgB,GAAG;QACvC,OAAO,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,iBAAiB,CAAC,QAAgB,EAAE;QAMlC,OAAO,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;IAEO,gBAAgB;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;QAC7C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,MAAM,6BAA6B,CAAC,CAAC;IAC7E,CAAC;IAED,+EAA+E;IAC/E,kBAAkB;IAClB,+EAA+E;IAEvE,KAAK,CAAC,iBAAiB;QAC7B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAEO,iBAAiB,CACvB,OAAgB,EAChB,OAAyB;QAEzB,mCAAmC;QACnC,IAAI,GAAW,CAAC;QAChB,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC;gBACvD,GAAG,GAAG,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;YAC7B,CAAC;iBAAM,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAClD,GAAG,GAAI,OAAe,CAAC,IAAI,IAAI,EAAE,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,GAAG,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,GAAG,GAAG,OAAO,CAAC;QAChB,CAAC;QAED,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAEhC,sBAAsB;QACtB,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,kDAAkD,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1F,IAAI,GAAG,MAAM,CAAC;YAChB,CAAC;iBAAM,IAAI,4CAA4C,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpE,IAAI,GAAG,QAAQ,CAAC;YAClB,CAAC;iBAAM,IAAI,qDAAqD,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7E,IAAI,GAAG,WAAW,CAAC;YACrB,CAAC;iBAAM,IAAI,yCAAyC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjE,IAAI,GAAG,WAAW,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAED,uBAAuB;QACvB,IAAI,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,KAAK,GAAG,CAAC;gBAAE,UAAU,GAAG,KAAK,CAAC;iBAC7B,IAAI,KAAK,GAAG,CAAC;gBAAE,UAAU,GAAG,QAAQ,CAAC;;gBACrC,UAAU,GAAG,MAAM,CAAC;QAC3B,CAAC;QAED,OAAO;YACL,IAAI;YACJ,UAAU;YACV,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,KAAK;YACzC,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,KAAK;YAC7C,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,IAAI,EAAE;SACzD,CAAC;IACJ,CAAC;IAEO,gBAAgB,CAAC,OAAe;QACtC,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG;YAAE,KAAK,IAAI,CAAC,CAAC;QACrC,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI;YAAE,KAAK,IAAI,CAAC,CAAC;QACtC,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI;YAAE,KAAK,IAAI,CAAC,CAAC;QAEtC,MAAM,eAAe,GAAG;YACtB,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU;YAC1D,mBAAmB,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS;YAC3D,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU;YACzD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa;YACjD,WAAW,EAAE,8BAA8B,EAAE,eAAe;SAC7D,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;YACtC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5C,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;QACH,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACpD,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACxC,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACjF,IAAI,eAAe,GAAG,GAAG;gBAAE,KAAK,IAAI,CAAC,CAAC;QACxC,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,IAAI,CAAC,CAAC;QAElD,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC7B,CAAC;IAEO,kBAAkB,CACxB,KAAsB,EACtB,YAAwC,EACxC,OAAe;QAEf,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC;QAE7C,yBAAyB;QACzB,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;QAC3C,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;YACzB,IAAI,UAAU,IAAI,CAAC;gBAAE,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;iBACtD,IAAI,UAAU,IAAI,EAAE;gBAAE,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,GAAG,CAAC;iBAClE,IAAI,UAAU,GAAG,EAAE;gBAAE,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,GAAG,CAAC;QACxE,CAAC;aAAM,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;YACnC,IAAI,UAAU,IAAI,CAAC,IAAI,UAAU,IAAI,EAAE;gBAAE,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;iBAC1E,IAAI,UAAU,GAAG,EAAE;gBAAE,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,GAAG,CAAC;QACxE,CAAC;aAAM,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;YACjC,IAAI,UAAU,IAAI,EAAE;gBAAE,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;iBACvD,IAAI,UAAU,IAAI,CAAC;gBAAE,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,GAAG,CAAC;QACxE,CAAC;QAED,0BAA0B;QAC1B,IAAI,YAAY,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7E,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;QACvC,CAAC;QACD,IAAI,YAAY,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/E,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;QACvC,CAAC;QACD,IAAI,YAAY,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;YACtE,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;QACvC,CAAC;QAED,kBAAkB;QAClB,MAAM,aAAa,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;QAC1D,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAEjE,sBAAsB;QACtB,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC;YAC7B,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACtD,KAAK,IAAI,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAC7D,CAAC;QAED,4BAA4B;QAC5B,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;YAC1E,KAAK,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;QAChD,CAAC;QAED,0BAA0B;QAC1B,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QACjC,CAAC;QAED,6BAA6B;QAC7B,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3C,IAAI,KAAK,CAAC,aAAa,GAAG,eAAe,GAAG,CAAC,EAAE,CAAC;YAC9C,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;aAAM,IAAI,KAAK,CAAC,aAAa,GAAG,eAAe,EAAE,CAAC;YACjD,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;aAAM,CAAC;YACN,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;QAED,6BAA6B;QAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACnB,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;QAED,mEAAmE;QACnE,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7E,KAAK,IAAI,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QAEnD,kDAAkD;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,GAAG,IAAI,GAAG,CAAC,mBAAmB,GAAG,CAAC,EAAE,CAAC;YACvC,KAAK,IAAI,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;QAC5D,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,iBAAiB,CACvB,MAAyB,EACzB,IAAa;QAEb,IAAI,UAA6B,CAAC;QAElC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAClF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YAChC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,UAAU,GAAG,MAAM,CAAC;QACtB,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAEO,kBAAkB,CACxB,KAAsB,EACtB,YAAwC;QAExC,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,IAAI,YAAY,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7E,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,YAAY,CAAC,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,YAAY,CAAC,UAAU,KAAK,MAAM,IAAI,KAAK,CAAC,WAAW,KAAK,WAAW,EAAE,CAAC;YAC5E,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;YAC1F,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC;IACrE,CAAC;IAEO,mBAAmB,CAAC,SAAiB,EAAE,QAAgB;QAC7D,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CACpD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,MAAM,CAAC,CACnF,CAAC;QAEF,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC;QAE7C,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9C,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,UAAU,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;gBAClC,KAAK,EAAE,CAAC;YACV,CAAC;iBAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACxB,UAAU,IAAI,GAAG,CAAC;gBAClB,KAAK,EAAE,CAAC;YACV,CAAC;QACH,CAAC;QAED,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;IAC9C,CAAC;IAEO,iBAAiB;QACvB,MAAM,UAAU,GAAG,IAAI,GAAG,EAGvB,CAAC;QAEJ,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI;gBAC9C,SAAS,EAAE,EAAE;gBACb,OAAO,EAAE,EAAE;gBACX,SAAS,EAAE,CAAC;gBACZ,KAAK,EAAE,CAAC;aACT,CAAC;YAEF,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC;gBAAE,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7D,IAAI,IAAI,CAAC,UAAU;gBAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACzD,IAAI,IAAI,CAAC,OAAO;gBAAE,KAAK,CAAC,SAAS,EAAE,CAAC;YACpC,KAAK,CAAC,KAAK,EAAE,CAAC;YAEd,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACxC,CAAC;QAED,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,UAAU,EAAE,CAAC;YAC5C,MAAM,UAAU,GACd,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;gBACxB,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM;gBACrE,CAAC,CAAC,CAAC,CAAC;YAER,MAAM,UAAU,GACd,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;gBACtB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM;gBACjE,CAAC,CAAC,CAAC,CAAC;YAER,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;YAE1E,MAAM,KAAK,GACT,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG;gBACnC,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,GAAG;gBACtB,WAAW,GAAG,GAAG,CAAC;YAEpB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE;gBAC9B,SAAS;gBACT,UAAU;gBACV,UAAU;gBACV,UAAU,EAAE,KAAK,CAAC,KAAK;gBACvB,WAAW;gBACX,KAAK;aACN,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,mBAAmB;QACzB,+DAA+D;QAC/D,uDAAuD;IACzD,CAAC;IAEO,mBAAmB;QACzB,sEAAsE;QACtE,uDAAuD;QACvD,8CAA8C;QAC9C,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;IAC/B,CAAC;CACF;AAED,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAAqB,EACrB,YAAqB;IAErB,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC/D,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;IAC1B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,eAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Checkpoint System
|
|
3
|
+
*
|
|
4
|
+
* Atomic session snapshots for recovery, debugging, and resumption
|
|
5
|
+
* Determinism: Replay any conversation
|
|
6
|
+
* Recoverability: Resume where you left off
|
|
7
|
+
* Debuggability: Inspect agent "thoughts"
|
|
8
|
+
*/
|
|
9
|
+
const DEFAULT_CHECKPOINT_CONFIG = {
|
|
10
|
+
autoCheckpointEvery: 10,
|
|
11
|
+
checkpointBeforeTools: true,
|
|
12
|
+
checkpointAfterTools: true,
|
|
13
|
+
maxCheckpointsPerSession: 50,
|
|
14
|
+
autoPruneAge: 7,
|
|
15
|
+
allowForking: true,
|
|
16
|
+
};
|
|
17
|
+
export class CheckpointManager {
|
|
18
|
+
db;
|
|
19
|
+
config;
|
|
20
|
+
constructor(db, config) {
|
|
21
|
+
this.db = db;
|
|
22
|
+
this.config = { ...DEFAULT_CHECKPOINT_CONFIG, ...config };
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Initialize checkpoint tables
|
|
26
|
+
*/
|
|
27
|
+
initSchema() {
|
|
28
|
+
this.db.run(`
|
|
29
|
+
CREATE TABLE IF NOT EXISTS memory_checkpoints (
|
|
30
|
+
id TEXT PRIMARY KEY,
|
|
31
|
+
session_id TEXT NOT NULL,
|
|
32
|
+
parent_checkpoint_id TEXT,
|
|
33
|
+
message_count INTEGER NOT NULL,
|
|
34
|
+
conversation_data TEXT NOT NULL, -- JSON
|
|
35
|
+
tool_call_state TEXT, -- JSON
|
|
36
|
+
memory_thread_id TEXT NOT NULL,
|
|
37
|
+
conversation_summary TEXT,
|
|
38
|
+
context_window TEXT, -- JSON
|
|
39
|
+
created_at TEXT NOT NULL,
|
|
40
|
+
reason TEXT NOT NULL,
|
|
41
|
+
tags TEXT, -- JSON array
|
|
42
|
+
restored_count INTEGER DEFAULT 0,
|
|
43
|
+
last_restored_at TEXT,
|
|
44
|
+
FOREIGN KEY (parent_checkpoint_id) REFERENCES memory_checkpoints(id)
|
|
45
|
+
)
|
|
46
|
+
`);
|
|
47
|
+
// Migration: Add columns if they don't exist (for existing databases)
|
|
48
|
+
const columnsToAdd = [
|
|
49
|
+
{ name: 'parent_checkpoint_id', type: 'TEXT' },
|
|
50
|
+
{ name: 'conversation_data', type: 'TEXT' },
|
|
51
|
+
{ name: 'tool_call_state', type: 'TEXT' },
|
|
52
|
+
{ name: 'context_window', type: 'TEXT' },
|
|
53
|
+
{ name: 'reason', type: 'TEXT' },
|
|
54
|
+
{ name: 'tags', type: 'TEXT' },
|
|
55
|
+
{ name: 'restored_count', type: 'INTEGER DEFAULT 0' },
|
|
56
|
+
{ name: 'last_restored_at', type: 'TEXT' },
|
|
57
|
+
];
|
|
58
|
+
for (const col of columnsToAdd) {
|
|
59
|
+
try {
|
|
60
|
+
this.db.run(`ALTER TABLE memory_checkpoints ADD COLUMN ${col.name} ${col.type}`);
|
|
61
|
+
}
|
|
62
|
+
catch (e) {
|
|
63
|
+
// Column already exists, ignore
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Indexes
|
|
67
|
+
this.db.run(`CREATE INDEX IF NOT EXISTS idx_checkpoints_session ON memory_checkpoints(session_id)`);
|
|
68
|
+
this.db.run(`CREATE INDEX IF NOT EXISTS idx_checkpoints_created ON memory_checkpoints(created_at)`);
|
|
69
|
+
// Parent checkpoint index - may fail if column doesn't exist yet (migration pending)
|
|
70
|
+
try {
|
|
71
|
+
this.db.run(`CREATE INDEX IF NOT EXISTS idx_checkpoints_parent ON memory_checkpoints(parent_checkpoint_id)`);
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
// Index will be created after migration
|
|
75
|
+
}
|
|
76
|
+
console.log("[CheckpointManager] Schema initialized");
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Create a checkpoint
|
|
80
|
+
*/
|
|
81
|
+
create(sessionId, state, reason, tags = [], parentCheckpointId) {
|
|
82
|
+
const id = `ckpt_${Date.now()}_${Math.random().toString(36).slice(2, 6)}`;
|
|
83
|
+
// Prune old checkpoints if needed
|
|
84
|
+
this.pruneCheckpoints(sessionId);
|
|
85
|
+
this.db.query(`
|
|
86
|
+
INSERT INTO memory_checkpoints (
|
|
87
|
+
id, session_id, parent_checkpoint_id, message_count,
|
|
88
|
+
conversation_data, tool_call_state, memory_thread_id,
|
|
89
|
+
conversation_summary, context_window, created_at, reason, tags
|
|
90
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
91
|
+
`).run(id, sessionId, parentCheckpointId || null, state.messages.length, JSON.stringify(state.messages), state.toolCalls ? JSON.stringify(state.toolCalls) : null, state.memoryThreadId, state.summary || null, JSON.stringify(state.messages.slice(-5)), // Last 5 messages as context
|
|
92
|
+
new Date().toISOString(), reason, JSON.stringify(tags));
|
|
93
|
+
return id;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Restore from checkpoint
|
|
97
|
+
*/
|
|
98
|
+
restore(checkpointId) {
|
|
99
|
+
const row = this.db.query(`SELECT * FROM memory_checkpoints WHERE id = ?`).get(checkpointId);
|
|
100
|
+
if (!row)
|
|
101
|
+
return null;
|
|
102
|
+
// Update restore count
|
|
103
|
+
this.db.query(`
|
|
104
|
+
UPDATE memory_checkpoints
|
|
105
|
+
SET restored_count = restored_count + 1, last_restored_at = ?
|
|
106
|
+
WHERE id = ?
|
|
107
|
+
`).run(new Date().toISOString(), checkpointId);
|
|
108
|
+
return {
|
|
109
|
+
id: row.id,
|
|
110
|
+
sessionId: row.session_id,
|
|
111
|
+
parentCheckpointId: row.parent_checkpoint_id,
|
|
112
|
+
messageCount: row.message_count,
|
|
113
|
+
conversationData: row.conversation_data,
|
|
114
|
+
toolCallState: row.tool_call_state,
|
|
115
|
+
memoryThreadId: row.memory_thread_id,
|
|
116
|
+
conversationSummary: row.conversation_summary,
|
|
117
|
+
contextWindow: row.context_window,
|
|
118
|
+
createdAt: row.created_at,
|
|
119
|
+
reason: row.reason,
|
|
120
|
+
tags: JSON.parse(row.tags || "[]"),
|
|
121
|
+
restoredCount: row.restored_count + 1,
|
|
122
|
+
lastRestoredAt: new Date().toISOString(),
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Fork session from checkpoint
|
|
127
|
+
*/
|
|
128
|
+
fork(checkpointId, newSessionId, reason) {
|
|
129
|
+
if (!this.config.allowForking) {
|
|
130
|
+
console.warn("[CheckpointManager] Forking disabled");
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
const original = this.restore(checkpointId);
|
|
134
|
+
if (!original)
|
|
135
|
+
return null;
|
|
136
|
+
const newId = this.create(newSessionId, {
|
|
137
|
+
messages: JSON.parse(original.conversationData),
|
|
138
|
+
toolCalls: original.toolCallState ? JSON.parse(original.toolCallState) : undefined,
|
|
139
|
+
memoryThreadId: original.memoryThreadId,
|
|
140
|
+
summary: original.conversationSummary,
|
|
141
|
+
}, "manual", [...original.tags, "fork", reason], checkpointId);
|
|
142
|
+
console.log(`[CheckpointManager] Forked ${checkpointId} → ${newId} for session ${newSessionId}`);
|
|
143
|
+
return newId;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Get checkpoints for session
|
|
147
|
+
*/
|
|
148
|
+
getSessionCheckpoints(sessionId, limit = 20) {
|
|
149
|
+
const rows = this.db.query(`
|
|
150
|
+
SELECT * FROM memory_checkpoints
|
|
151
|
+
WHERE session_id = ?
|
|
152
|
+
ORDER BY created_at DESC
|
|
153
|
+
LIMIT ?
|
|
154
|
+
`).all(sessionId, limit);
|
|
155
|
+
return rows.map(r => ({
|
|
156
|
+
id: r.id,
|
|
157
|
+
messageCount: r.message_count,
|
|
158
|
+
createdAt: r.created_at,
|
|
159
|
+
reason: r.reason,
|
|
160
|
+
tags: JSON.parse(r.tags || "[]"),
|
|
161
|
+
restoredCount: r.restored_count,
|
|
162
|
+
summary: r.conversation_summary,
|
|
163
|
+
}));
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Get checkpoint chain (for tree visualization)
|
|
167
|
+
*/
|
|
168
|
+
getCheckpointChain(checkpointId) {
|
|
169
|
+
const chain = [];
|
|
170
|
+
let current = checkpointId;
|
|
171
|
+
while (current) {
|
|
172
|
+
const row = this.db.query(`SELECT * FROM memory_checkpoints WHERE id = ?`).get(current);
|
|
173
|
+
if (!row)
|
|
174
|
+
break;
|
|
175
|
+
chain.push({
|
|
176
|
+
id: row.id,
|
|
177
|
+
sessionId: row.session_id,
|
|
178
|
+
parentCheckpointId: row.parent_checkpoint_id,
|
|
179
|
+
messageCount: row.message_count,
|
|
180
|
+
conversationData: row.conversation_data,
|
|
181
|
+
toolCallState: row.tool_call_state,
|
|
182
|
+
memoryThreadId: row.memory_thread_id,
|
|
183
|
+
conversationSummary: row.conversation_summary,
|
|
184
|
+
contextWindow: row.context_window,
|
|
185
|
+
createdAt: row.created_at,
|
|
186
|
+
reason: row.reason,
|
|
187
|
+
tags: JSON.parse(row.tags || "[]"),
|
|
188
|
+
restoredCount: row.restored_count,
|
|
189
|
+
lastRestoredAt: row.last_restored_at,
|
|
190
|
+
});
|
|
191
|
+
current = row.parent_checkpoint_id;
|
|
192
|
+
}
|
|
193
|
+
return chain.reverse();
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Delete checkpoint
|
|
197
|
+
*/
|
|
198
|
+
delete(checkpointId) {
|
|
199
|
+
// Check for children
|
|
200
|
+
const children = this.db.query(`SELECT COUNT(*) as n FROM memory_checkpoints WHERE parent_checkpoint_id = ?`).get(checkpointId);
|
|
201
|
+
if (children.n > 0) {
|
|
202
|
+
throw new Error(`Checkpoint ${checkpointId} has ${children.n} child checkpoint(s). Delete children first.`);
|
|
203
|
+
}
|
|
204
|
+
this.db.query(`DELETE FROM memory_checkpoints WHERE id = ?`).run(checkpointId);
|
|
205
|
+
return true;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Prune old checkpoints
|
|
209
|
+
*/
|
|
210
|
+
pruneCheckpoints(sessionId) {
|
|
211
|
+
// Count current
|
|
212
|
+
const count = this.db.query(`SELECT COUNT(*) as n FROM memory_checkpoints WHERE session_id = ?`).get(sessionId);
|
|
213
|
+
if (count.n >= this.config.maxCheckpointsPerSession) {
|
|
214
|
+
// Delete oldest
|
|
215
|
+
const toDelete = count.n - this.config.maxCheckpointsPerSession + 1;
|
|
216
|
+
this.db.query(`
|
|
217
|
+
DELETE FROM memory_checkpoints
|
|
218
|
+
WHERE session_id = ?
|
|
219
|
+
AND id IN (
|
|
220
|
+
SELECT id FROM memory_checkpoints
|
|
221
|
+
WHERE session_id = ?
|
|
222
|
+
ORDER BY created_at ASC
|
|
223
|
+
LIMIT ?
|
|
224
|
+
)
|
|
225
|
+
`).run(sessionId, sessionId, toDelete);
|
|
226
|
+
}
|
|
227
|
+
// Delete by age
|
|
228
|
+
const ageCutoff = new Date(Date.now() - this.config.autoPruneAge * 24 * 60 * 60 * 1000).toISOString();
|
|
229
|
+
this.db.query(`
|
|
230
|
+
DELETE FROM memory_checkpoints
|
|
231
|
+
WHERE session_id = ? AND created_at < ?
|
|
232
|
+
`).run(sessionId, ageCutoff);
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Auto-checkpoint based on message count
|
|
236
|
+
*/
|
|
237
|
+
shouldAutoCheckpoint(sessionId, messageCount) {
|
|
238
|
+
if (messageCount % this.config.autoCheckpointEvery === 0) {
|
|
239
|
+
return true;
|
|
240
|
+
}
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Replay checkpoint (for debugging)
|
|
245
|
+
*/
|
|
246
|
+
replay(checkpointId) {
|
|
247
|
+
const checkpoint = this.restore(checkpointId);
|
|
248
|
+
if (!checkpoint)
|
|
249
|
+
return null;
|
|
250
|
+
return {
|
|
251
|
+
messages: JSON.parse(checkpoint.conversationData),
|
|
252
|
+
toolCalls: checkpoint.toolCallState ? JSON.parse(checkpoint.toolCallState) : undefined,
|
|
253
|
+
summary: checkpoint.conversationSummary,
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Get statistics
|
|
258
|
+
*/
|
|
259
|
+
getStats() {
|
|
260
|
+
const total = this.db.query(`SELECT COUNT(*) as n FROM memory_checkpoints`).get()?.n || 0;
|
|
261
|
+
const sessions = this.db.query(`SELECT COUNT(DISTINCT session_id) as n FROM memory_checkpoints`).get()?.n || 0;
|
|
262
|
+
const mostRestored = this.db.query(`
|
|
263
|
+
SELECT id, restored_count
|
|
264
|
+
FROM memory_checkpoints
|
|
265
|
+
WHERE restored_count > 0
|
|
266
|
+
ORDER BY restored_count DESC
|
|
267
|
+
LIMIT 1
|
|
268
|
+
`).get();
|
|
269
|
+
return {
|
|
270
|
+
totalCheckpoints: total,
|
|
271
|
+
totalSessions: sessions,
|
|
272
|
+
avgPerSession: sessions > 0 ? Math.round(total / sessions) : 0,
|
|
273
|
+
mostRestored: mostRestored ? { id: mostRestored.id, count: mostRestored.restored_count } : null,
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
export { DEFAULT_CHECKPOINT_CONFIG };
|
|
278
|
+
//# sourceMappingURL=checkpoint-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint-manager.js","sourceRoot":"","sources":["../../../src/memory/checkpoint-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Conflict Detection
|
|
3
|
+
*
|
|
4
|
+
* Detect contradictions in user preferences and handle resolution
|
|
5
|
+
* "I love my job" vs "I hate my job" - embeddings close, truth different
|
|
6
|
+
*/
|
|
7
|
+
const DEFAULT_CONFLICT_CONFIG = {
|
|
8
|
+
similarityThreshold: 0.85,
|
|
9
|
+
minConfidence: 0.8,
|
|
10
|
+
preferRecent: true,
|
|
11
|
+
archiveOld: true,
|
|
12
|
+
notifyUserOnConflict: true,
|
|
13
|
+
notifyThreshold: 0.7,
|
|
14
|
+
};
|
|
15
|
+
export class ConflictDetector {
|
|
16
|
+
db;
|
|
17
|
+
config;
|
|
18
|
+
constructor(db, config) {
|
|
19
|
+
this.db = db;
|
|
20
|
+
this.config = { ...DEFAULT_CONFLICT_CONFIG, ...config };
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Initialize conflict tables
|
|
24
|
+
*/
|
|
25
|
+
initSchema() {
|
|
26
|
+
this.db.run(`
|
|
27
|
+
CREATE TABLE IF NOT EXISTS memory_conflicts (
|
|
28
|
+
id TEXT PRIMARY KEY,
|
|
29
|
+
item_a_id TEXT NOT NULL,
|
|
30
|
+
item_b_id TEXT NOT NULL,
|
|
31
|
+
item_a_content TEXT NOT NULL,
|
|
32
|
+
item_b_content TEXT NOT NULL,
|
|
33
|
+
similarity_score REAL NOT NULL,
|
|
34
|
+
conflict_type TEXT NOT NULL, -- contradiction, update, duplicate
|
|
35
|
+
detected_at TEXT NOT NULL,
|
|
36
|
+
detected_by TEXT NOT NULL, -- llm, embedding, rule
|
|
37
|
+
|
|
38
|
+
-- Resolution
|
|
39
|
+
resolved_at TEXT,
|
|
40
|
+
resolution TEXT, -- keep_a, keep_b, merge, archive_both, user_decided
|
|
41
|
+
resolution_note TEXT,
|
|
42
|
+
resolved_by TEXT,
|
|
43
|
+
confidence REAL -- LLM confidence in resolution
|
|
44
|
+
)
|
|
45
|
+
`);
|
|
46
|
+
// Index for performance
|
|
47
|
+
this.db.run(`CREATE INDEX IF NOT EXISTS idx_conflicts_unresolved ON memory_conflicts(resolved_at IS NULL)`);
|
|
48
|
+
this.db.run(`CREATE INDEX IF NOT EXISTS idx_conflicts_items ON memory_conflicts(item_a_id, item_b_id)`);
|
|
49
|
+
console.log("[ConflictDetector] Schema initialized");
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Check if new item conflicts with existing memories
|
|
53
|
+
*/
|
|
54
|
+
async checkConflict(newItemId, newContent, embeddings) {
|
|
55
|
+
const conflicts = [];
|
|
56
|
+
// Get all active items (not the new one, not archived)
|
|
57
|
+
const existing = this.db.query(`
|
|
58
|
+
SELECT id, content FROM memory_items
|
|
59
|
+
WHERE id != ? AND archived = FALSE
|
|
60
|
+
`).all(newItemId);
|
|
61
|
+
// Get new item embedding
|
|
62
|
+
const newEmbedding = embeddings.get(newItemId);
|
|
63
|
+
for (const item of existing) {
|
|
64
|
+
const itemEmbedding = embeddings.get(item.id);
|
|
65
|
+
if (newEmbedding && itemEmbedding) {
|
|
66
|
+
const similarity = this.cosineSimilarity(newEmbedding, itemEmbedding);
|
|
67
|
+
// High similarity = potential conflict
|
|
68
|
+
if (similarity >= this.config.similarityThreshold) {
|
|
69
|
+
// Use LLM to determine conflict type
|
|
70
|
+
const analysis = await this.analyzeConflict(newContent, item.content);
|
|
71
|
+
if (analysis.conflictType !== "none") {
|
|
72
|
+
conflicts.push({
|
|
73
|
+
itemId: item.id,
|
|
74
|
+
content: item.content,
|
|
75
|
+
similarity,
|
|
76
|
+
conflictType: analysis.conflictType,
|
|
77
|
+
suggestedResolution: analysis.resolution,
|
|
78
|
+
confidence: analysis.confidence,
|
|
79
|
+
});
|
|
80
|
+
// Record in database
|
|
81
|
+
this.recordConflict(newItemId, item.id, newContent, item.content, similarity, analysis);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return conflicts;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Use LLM to analyze conflict
|
|
90
|
+
*/
|
|
91
|
+
async analyzeConflict(contentA, contentB) {
|
|
92
|
+
const prompt = `Analyze these two memory items for conflicts:
|
|
93
|
+
|
|
94
|
+
Item A: "${contentA}"
|
|
95
|
+
Item B: "${contentB}"
|
|
96
|
+
|
|
97
|
+
Determine:
|
|
98
|
+
1. CONTRADICTION: They cannot both be true ("I love" vs "I hate")
|
|
99
|
+
2. UPDATE: Item B is newer information about same thing ("I had coffee" → "I had tea")
|
|
100
|
+
3. DUPLICATE: Same information, keep only one
|
|
101
|
+
4. NONE: No conflict, both can coexist
|
|
102
|
+
|
|
103
|
+
Return JSON:
|
|
104
|
+
{
|
|
105
|
+
"type": "contradiction|update|duplicate|none",
|
|
106
|
+
"reasoning": "brief explanation",
|
|
107
|
+
"suggested_action": "keep_a|keep_b|merge|archive_both",
|
|
108
|
+
"confidence": 0.0-1.0
|
|
109
|
+
}`;
|
|
110
|
+
try {
|
|
111
|
+
// This would call Ollama - using stub for now
|
|
112
|
+
// const response = await fetch(...)
|
|
113
|
+
// Stub implementation based on heuristics
|
|
114
|
+
const lowerA = contentA.toLowerCase();
|
|
115
|
+
const lowerB = contentB.toLowerCase();
|
|
116
|
+
// Check for negation flips
|
|
117
|
+
const negations = ["not", "never", "hate", "dislike", "quit", "left"];
|
|
118
|
+
const affirmations = ["love", "like", "enjoy", "have", "work", "at"];
|
|
119
|
+
const aHasNeg = negations.some(n => lowerA.includes(n));
|
|
120
|
+
const bHasNeg = negations.some(n => lowerB.includes(n));
|
|
121
|
+
const aHasAff = affirmations.some(a => lowerA.includes(a));
|
|
122
|
+
const bHasAff = affirmations.some(a => lowerB.includes(a));
|
|
123
|
+
if ((aHasNeg !== bHasNeg) && (aHasAff || bHasAff)) {
|
|
124
|
+
return {
|
|
125
|
+
conflictType: "contradiction",
|
|
126
|
+
resolution: "keep_b", // Prefer newer
|
|
127
|
+
confidence: 0.75,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
// Check for time-based updates
|
|
131
|
+
const timeWords = ["now", "currently", "just", "recently", "today", "new"];
|
|
132
|
+
if (timeWords.some(w => lowerB.includes(w))) {
|
|
133
|
+
return {
|
|
134
|
+
conflictType: "update",
|
|
135
|
+
resolution: "keep_b",
|
|
136
|
+
confidence: 0.7,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
// High similarity, likely duplicate
|
|
140
|
+
return {
|
|
141
|
+
conflictType: "duplicate",
|
|
142
|
+
resolution: "keep_a",
|
|
143
|
+
confidence: 0.8,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
catch (err) {
|
|
147
|
+
return {
|
|
148
|
+
conflictType: "none",
|
|
149
|
+
resolution: "keep_both",
|
|
150
|
+
confidence: 0.5,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Resolve conflict
|
|
156
|
+
*/
|
|
157
|
+
async resolveConflict(conflictId, resolution, note, userId) {
|
|
158
|
+
const conflict = this.db.query(`SELECT * FROM memory_conflicts WHERE id = ?`).get(conflictId);
|
|
159
|
+
if (!conflict)
|
|
160
|
+
return false;
|
|
161
|
+
// Apply resolution
|
|
162
|
+
const now = new Date().toISOString();
|
|
163
|
+
switch (resolution) {
|
|
164
|
+
case "keep_a":
|
|
165
|
+
this.db.query(`UPDATE memory_items SET archived = TRUE WHERE id = ?`).run(conflict.item_b_id);
|
|
166
|
+
break;
|
|
167
|
+
case "keep_b":
|
|
168
|
+
this.db.query(`UPDATE memory_items SET archived = TRUE WHERE id = ?`).run(conflict.item_a_id);
|
|
169
|
+
break;
|
|
170
|
+
case "archive_both":
|
|
171
|
+
this.db.query(`UPDATE memory_items SET archived = TRUE WHERE id IN (?, ?)`)
|
|
172
|
+
.run(conflict.item_a_id, conflict.item_b_id);
|
|
173
|
+
break;
|
|
174
|
+
case "merge":
|
|
175
|
+
// Keep A, update with B's info
|
|
176
|
+
// In practice, might want to do something more sophisticated
|
|
177
|
+
this.db.query(`UPDATE memory_items SET archived = TRUE WHERE id = ?`).run(conflict.item_b_id);
|
|
178
|
+
break;
|
|
179
|
+
case "user_decided":
|
|
180
|
+
// Just mark resolved, user will handle manually
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
// Update conflict record
|
|
184
|
+
this.db.query(`
|
|
185
|
+
UPDATE memory_conflicts
|
|
186
|
+
SET resolved_at = ?, resolution = ?, resolution_note = ?, resolved_by = ?
|
|
187
|
+
WHERE id = ?
|
|
188
|
+
`).run(now, resolution, note || null, userId || "system", conflictId);
|
|
189
|
+
return true;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Auto-resolve conflicts above confidence threshold
|
|
193
|
+
*/
|
|
194
|
+
async autoResolve(sessionId) {
|
|
195
|
+
const pending = this.db.query(`
|
|
196
|
+
SELECT * FROM memory_conflicts
|
|
197
|
+
WHERE resolved_at IS NULL AND confidence >= ?
|
|
198
|
+
`).all(this.config.minConfidence);
|
|
199
|
+
const result = { resolved: 0, flaggedForUser: 0, failed: 0 };
|
|
200
|
+
for (const conflict of pending) {
|
|
201
|
+
try {
|
|
202
|
+
// Prefer recent if configured
|
|
203
|
+
let resolution = "keep_b";
|
|
204
|
+
if (!this.config.preferRecent) {
|
|
205
|
+
resolution = "keep_a";
|
|
206
|
+
}
|
|
207
|
+
// Archive old if configured
|
|
208
|
+
if (this.config.archiveOld) {
|
|
209
|
+
await this.resolveConflict(conflict.id, resolution, "Auto-resolved by system", "system");
|
|
210
|
+
}
|
|
211
|
+
result.resolved++;
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
result.failed++;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// Flag conflicts needing user attention
|
|
218
|
+
const needsUser = this.db.query(`
|
|
219
|
+
SELECT * FROM memory_conflicts
|
|
220
|
+
WHERE resolved_at IS NULL
|
|
221
|
+
AND confidence < ?
|
|
222
|
+
AND confidence >= ?
|
|
223
|
+
`).all(this.config.minConfidence, this.config.notifyThreshold);
|
|
224
|
+
if (this.config.notifyUserOnConflict) {
|
|
225
|
+
for (const conflict of needsUser) {
|
|
226
|
+
// Emit notification event
|
|
227
|
+
// eventBus.emit("memory.needs_resolution", { conflict, sessionId });
|
|
228
|
+
result.flaggedForUser++;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return result;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Record conflict in database
|
|
235
|
+
*/
|
|
236
|
+
recordConflict(itemAId, itemBId, contentA, contentB, similarity, analysis) {
|
|
237
|
+
const id = `conflict_${Date.now()}_${Math.random().toString(36).slice(2, 6)}`;
|
|
238
|
+
this.db.query(`
|
|
239
|
+
INSERT INTO memory_conflicts (
|
|
240
|
+
id, item_a_id, item_b_id, item_a_content, item_b_content,
|
|
241
|
+
similarity_score, conflict_type, detected_at, detected_by, confidence
|
|
242
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
243
|
+
`).run(id, itemAId, itemBId, contentA, contentB, similarity, analysis.conflictType, new Date().toISOString(), "llm", analysis.confidence);
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Get pending conflicts
|
|
247
|
+
*/
|
|
248
|
+
getPendingConflicts() {
|
|
249
|
+
const rows = this.db.query(`
|
|
250
|
+
SELECT * FROM memory_conflicts
|
|
251
|
+
WHERE resolved_at IS NULL
|
|
252
|
+
ORDER BY detected_at DESC
|
|
253
|
+
`).all();
|
|
254
|
+
return rows.map(r => ({
|
|
255
|
+
id: r.id,
|
|
256
|
+
itemA: { id: r.item_a_id, content: r.item_a_content },
|
|
257
|
+
itemB: { id: r.item_b_id, content: r.item_b_content },
|
|
258
|
+
type: r.conflict_type,
|
|
259
|
+
similarity: r.similarity_score,
|
|
260
|
+
detectedAt: r.detected_at,
|
|
261
|
+
}));
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Cosine similarity calculation
|
|
265
|
+
*/
|
|
266
|
+
cosineSimilarity(a, b) {
|
|
267
|
+
let dotProduct = 0;
|
|
268
|
+
let normA = 0;
|
|
269
|
+
let normB = 0;
|
|
270
|
+
for (let i = 0; i < a.length; i++) {
|
|
271
|
+
dotProduct += a[i] * b[i];
|
|
272
|
+
normA += a[i] * a[i];
|
|
273
|
+
normB += b[i] * b[i];
|
|
274
|
+
}
|
|
275
|
+
return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
export { DEFAULT_CONFLICT_CONFIG };
|
|
279
|
+
//# sourceMappingURL=conflict-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conflict-detector.js","sourceRoot":"","sources":["../../../src/memory/conflict-detector.ts"],"names":[],"mappings":"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"}
|