@neomei/agent-soul-framework 4.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/.env.example +39 -0
  2. package/.opencode/config.json.example +17 -0
  3. package/.opencode/opencode.json.example +36 -0
  4. package/.opencode/prompt.md.example +12 -0
  5. package/.opencode/tools/read-plugin.js +185 -0
  6. package/AGENTS.md.example +43 -0
  7. package/README.md +466 -0
  8. package/SECURITY.md +117 -0
  9. package/TOOLS.md.example +27 -0
  10. package/bin/hunqi +2 -0
  11. package/bin/hunqi-knowledge +2 -0
  12. package/connectors/feishu/background.sh +124 -0
  13. package/connectors/feishu/core-start.sh +35 -0
  14. package/connectors/feishu/hooks/on-session-created.sh +97 -0
  15. package/connectors/feishu/hooks/on-session-idle.sh +59 -0
  16. package/connectors/feishu/model-failover.sh +82 -0
  17. package/connectors/feishu/restart-all.sh +63 -0
  18. package/connectors/feishu/restart-feishu.sh +101 -0
  19. package/connectors/feishu/restart-serve.sh +62 -0
  20. package/connectors/feishu/scripts/session-cleanup.sh +72 -0
  21. package/connectors/feishu/start.sh +91 -0
  22. package/connectors/feishu/stop.sh +78 -0
  23. package/connectors/feishu/systemd/channel-feishu@.service +63 -0
  24. package/connectors/feishu/systemd/hunqi-core@.service +50 -0
  25. package/connectors/feishu/systemd/install-systemd.sh +316 -0
  26. package/connectors/feishu/systemd/sleep-hooks/99-hunqi-resume.sh +14 -0
  27. package/connectors/feishu/thinking-icon.gif +0 -0
  28. package/connectors/feishu/thinking.gif +0 -0
  29. package/connectors/feishu/watchdog.sh +104 -0
  30. package/dist/bin/hunqi-knowledge.d.ts +1 -0
  31. package/dist/bin/hunqi-knowledge.js +12 -0
  32. package/dist/bin/hunqi-knowledge.js.map +1 -0
  33. package/dist/cli/hunqi.d.ts +6 -0
  34. package/dist/cli/hunqi.js +830 -0
  35. package/dist/cli/hunqi.js.map +1 -0
  36. package/dist/heartbeat/runner.d.ts +10 -0
  37. package/dist/heartbeat/runner.js +58 -0
  38. package/dist/heartbeat/runner.js.map +1 -0
  39. package/dist/index.d.ts +6 -0
  40. package/dist/index.js +7 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/knowledge/daily.d.ts +5 -0
  43. package/dist/knowledge/daily.js +65 -0
  44. package/dist/knowledge/daily.js.map +1 -0
  45. package/dist/knowledge/index.d.ts +5 -0
  46. package/dist/knowledge/index.js +34 -0
  47. package/dist/knowledge/index.js.map +1 -0
  48. package/dist/memory/manager.d.ts +20 -0
  49. package/dist/memory/manager.js +110 -0
  50. package/dist/memory/manager.js.map +1 -0
  51. package/dist/memory/search.d.ts +11 -0
  52. package/dist/memory/search.js +79 -0
  53. package/dist/memory/search.js.map +1 -0
  54. package/dist/memory/structured.d.ts +21 -0
  55. package/dist/memory/structured.js +88 -0
  56. package/dist/memory/structured.js.map +1 -0
  57. package/dist/opencode/api.d.ts +7 -0
  58. package/dist/opencode/api.js +26 -0
  59. package/dist/opencode/api.js.map +1 -0
  60. package/dist/plugin/index.d.ts +38 -0
  61. package/dist/plugin/index.js +143 -0
  62. package/dist/plugin/index.js.map +1 -0
  63. package/docs/bugs/opencode-feishu-permission-race.md +168 -0
  64. package/heartbeat/heartbeat_tasks.json +272 -0
  65. package/heartbeat_wrapper.sh +21 -0
  66. package/hunqi.sh +68 -0
  67. package/install.sh +301 -0
  68. package/knowledge/body/INDEX.md.example +6 -0
  69. package/knowledge/emotion/INDEX.md.example +6 -0
  70. package/knowledge/evolution/INDEX.md.example +6 -0
  71. package/knowledge/growth/INDEX.md.example +6 -0
  72. package/knowledge/intimacy/INDEX.md.example +6 -0
  73. package/knowledge/methodology/INDEX.md.example +6 -0
  74. package/knowledge/philosophy/INDEX.md.example +6 -0
  75. package/knowledge/system/INDEX.md.example +6 -0
  76. package/memory/MEMORY.md.example +6 -0
  77. package/package.json +79 -0
  78. package/plugin/README.md +21 -0
  79. package/plugin/index.js +154 -0
  80. package/plugin/manifest.json +37 -0
  81. package/plugin/package.json +19 -0
  82. package/scripts/content-filter.js +173 -0
  83. package/scripts/health-check.sh +153 -0
  84. package/scripts/session-cleanup.sh +85 -0
  85. package/setup-wizard.sh +420 -0
  86. package/setup.sh +128 -0
  87. package/soul/HEARTBEAT.md.example +13 -0
  88. package/soul/IDENTITY.md.example +7 -0
  89. package/soul/SOUL.md.example +19 -0
  90. package/soul/USER.md.example +7 -0
  91. package/start-feishu-daemon.sh +127 -0
  92. package/start.sh +36 -0
  93. package/test.sh +51 -0
  94. package/uninstall.sh +144 -0
  95. package/verify.sh +29 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hunqi.js","sourceRoot":"","sources":["../../src/cli/hunqi.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACxG,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAE3D,SAAS,QAAQ,CAAC,QAAgB;IAChC,IAAI,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC;IAAC,CAAC;AAClF,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,mBAAmB,CAAC;QAC7C,IAAI,CAAC,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,mBAAmB,CAAC;QAClE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC;KAC5D,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IACpG,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,0DAA0D;AAE1D,KAAK,UAAU,SAAS;IACtB,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,CAAyB,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,kCAAkC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAEnC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,eAAe,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,CAAC;IAElH,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,CAAC;YACH,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YACrD,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,kBAAkB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACvG,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC,GAAG,EAA+B,CAAC;YACrG,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAC1B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,yBAAyB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,KAAK,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,YAAY;IACzB,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;AACzE,CAAC;AAQD,KAAK,UAAU,SAAS,CAAC,KAAa;IACpC,IAAI,CAAC,KAAK,EAAE,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IAC9D,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAmB,CAAC;QACnD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAC3D,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAAC,OAAM,CAAM,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;AACxD,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,IAAc;IACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAI,EAAU,CAAC,gBAAgB,CAAC;QAC9C,MAAM,GAAG,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE3B,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,GAAG,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,0BAA0B,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;QACvH,CAAC;aAAM,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;YAAC,CAAC;iBAAM,CAAC;gBAChE,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;YAAC,CAAC;iBAAM,CAAC;gBACpE,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;gBAC3C,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;oBACrB,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBACvE,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACtD,CAAC;QACD,GAAG,CAAC,KAAK,EAAE,CAAC;IACd,CAAC;IAAC,OAAM,CAAM,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;AAC1D,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,IAAc;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,CAAC;QACH,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YACpB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;YAClE,MAAM,eAAe,EAAE,CAAC;QAC1B,CAAC;aAAM,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YAC3B,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;YAChE,aAAa,EAAE,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAAC,OAAM,CAAM,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;AAC1D,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,IAAc;IAC1C,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;IACvC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAClG,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACxD,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,kBAAkB,CAAC,GAAG,GAAG,GAAG,IAAI,EAAE;YAC7G,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM;SACtD,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAAC,CAAC;AACtE,CAAC;AAED,KAAK,UAAU,cAAc;IAC3B,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAC9C,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,QAAQ,CAAC,OAAO,GAAG,MAAM,GAAG,cAAc,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YACtF,OAAO;QACT,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;AAChF,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,OAAe;IACpC,IAAI,CAAC,OAAO,EAAE,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IAChE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;IAE/C,MAAM,IAAI,GAAG;QACX,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE,kBAAkB;QACtE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,mBAAmB,EAAE,qBAAqB;QACnF,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,oBAAoB,EAAE,eAAe,EAAE,eAAe;QACrF,QAAQ;KACT,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,IAAI;QAAE,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzE,MAAM,SAAS,GAAuB;QACpC,CAAC,sBAAsB,EAAE,cAAc,CAAC;QACxC,CAAC,0BAA0B,EAAE,kBAAkB,CAAC;QAChD,CAAC,sBAAsB,EAAE,cAAc,CAAC;QACxC,CAAC,2BAA2B,EAAE,mBAAmB,CAAC;QAClD,CAAC,iCAAiC,EAAE,yBAAyB,CAAC;QAC9D,CAAC,6BAA6B,EAAE,qBAAqB,CAAC;QACtD,CAAC,gCAAgC,EAAE,gCAAgC,CAAC;QACpE,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;QACtC,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;QAChD,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;QAC9C,CAAC,0BAA0B,EAAE,kBAAkB,CAAC;QAChD,CAAC,mBAAmB,EAAE,WAAW,CAAC;QAClC,CAAC,kBAAkB,EAAE,UAAU,CAAC;QAChC,CAAC,gCAAgC,EAAE,gCAAgC,CAAC;KACrE,CAAC;IACF,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,SAAS,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QACrC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACjD,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;IACvC,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC7C,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBACxC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;oBAAE,SAAS;gBACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAClD,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzC,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC5D,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;oBACrB,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;wBACf,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC/D,CAAC;yBAAM,IAAI,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;wBACnD,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;wBACvD,KAAK,MAAM,EAAE,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;4BAC9E,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC;gCAChB,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;4BACjF,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IACrD,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YACzC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC3D,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC3E,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;QAC3G,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;YACvC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,SAAS;YAClC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAClE,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;oBACnC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;oBAChF,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,EACnC,YAAY;QACZ,0BAA0B;QAC1B,sBAAsB;QACtB,kBAAkB;QAClB,sBAAsB;QACtB,qBAAqB;QACrB,kBAAkB;QAClB,sBAAsB;QACtB,mBAAmB,CACpB,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC;IAE9C,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YACxD,MAAM,QAAQ,GAAG,kBAAkB,GAAG,SAAS,GAAG,4BAA4B,CAAC;YAC/E,MAAM,QAAQ,GAAG,QAAQ,CAAC,mCAAmC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;YACtF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;gBAC/C,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC;gBAClF,QAAQ,CAAC,8BAA8B,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;gBACvG,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACxD,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC;YAC3E,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE;gBACnE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO;aAClE,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACrG,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IAEvD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,kBAAkB,GAAG,SAAS,GAAG,4BAA4B,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,OAAO,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,IAAI,QAAQ,GAAG,GAAG,CAAC;IACnB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;QACnD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3D,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;YACpD,QAAQ,GAAG,UAAU,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAElD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,OAAO,GAAG,KAAK,CAAC,CAAC;IAElD,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,yBAAyB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/F,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IAAC,CAAC;IAE9E,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,+BAA+B,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;IAAC,CAAC;IAEnF,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACxD,MAAM,EAAE,GAAG,QAAQ,CAAC,gCAAgC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACnG,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAAC,CAAC;IAErD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IACzF,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAuB,CAAC;YAClF,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;QAC/E,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAAC,CAAC;IAEvE,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;IACzF,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;IACvC,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;IACpE,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACrF,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,QAAQ,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,cAAc,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,kBAAkB,CAAC,CAAC;IAEvH,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,CAAC;YACH,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YACrD,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,kBAAkB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5G,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC,GAAG,EAA+B,CAAC;YACrG,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAC1B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAAC,CAAC;IAC/C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,QAAQ,CAAC,mCAAmC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACjG,IAAI,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAAC,CAAC;IAE7C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACvC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACjH,OAAO,CAAC,GAAG,CAAC,2BAA2B,GAAG,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;IACpE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,QAAQ;IACrB,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACxB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;QAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3D,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;YACpD,GAAG,GAAG,UAAU,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAElD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;QACxE,OAAO;IACT,CAAC;IAED,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IAC9D,SAAS,YAAY,CAAC,GAAW;QAC/B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO;QAC7B,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;gBAAC,YAAY,CAAC,EAAE,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YAC/D,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;gBAC1C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBAAC,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;oBAAC,MAAM,EAAE,CAAC;gBAAC,CAAC;YAClE,CAAC;QACH,CAAC;IACH,CAAC;IACD,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;IAChC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;IACrC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;IACrC,IAAI,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;QAC/F,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,mBAAmB,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;QAAC,MAAM,EAAE,CAAC;IAC1F,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;QAC7F,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,kBAAkB,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;QAAC,MAAM,EAAE,CAAC;IACxF,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC;IAEpD,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACxD,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC;YACrE,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7H,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1F,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAAC,CAAC;IAEzC,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,kBAAkB,GAAG,GAAG,GAAG,4BAA4B,CAAC;QACzE,MAAM,QAAQ,GAAG,QAAQ,CAAC,mCAAmC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACtF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;YAC/C,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC;YAClF,QAAQ,CAAC,8BAA8B,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;YACvG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAAC,CAAC;IAEzC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IACzF,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YACxD,QAAQ,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YACxD,MAAM,MAAM,GAAG,QAAQ,CAAC,sDAAsD,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7H,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;gBACjE,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;gBAClC,QAAQ,CAAC,gCAAgC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;gBAChF,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAAC,CAAC;IAC7E,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;IACvF,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YACxD,MAAM,OAAO,GAAG,QAAQ,CAAC,qDAAqD,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7H,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;gBACnE,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;gBAClC,QAAQ,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;gBACtE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QAAC,CAAC;IACnE,CAAC;IAED,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,+BAA+B,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtB,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACvC,IAAI,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAC1C,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,MAAc;IACjC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;IAC1D,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,OAAO,CAAC,EAAE;QACjD,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,KAAK,CAAC;AAC7D,CAAC;AAED,KAAK,UAAU,sBAAsB;IACnC,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACxD,QAAQ,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IAAC,CAAC;AACvE,CAAC;AAED,KAAK,UAAU,qBAAqB;IAClC,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACxD,QAAQ,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IAAC,CAAC;AACtE,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,YAAoB;IAC7C,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO;IACtC,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,QAAQ,CAAC,sDAAsD,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7H,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;YACjC,QAAQ,CAAC,gCAAgC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAChF,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAAC,CAAC;AAC7C,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,WAAmB;IAC3C,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO;IACrC,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACxD,MAAM,EAAE,GAAG,QAAQ,CAAC,qDAAqD,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACxH,IAAI,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACzD,QAAQ,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;AAC5B,CAAC;AAED,KAAK,UAAU,QAAQ;IACrB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IAEzD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACpC,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACtC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;YAC3E,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACzB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC7C,CAAC;YACD,SAAS,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,+BAA+B,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpF,YAAY,GAAG,IAAI,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YACrD,KAAK,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YAClG,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC5C,MAAM,KAAK,CAAC,+BAA+B,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpF,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IACzF,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;IACvF,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAEzC,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,WAAW,CAAC,YAAY,CAAC,CAAC;QAChC,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;IAChC,CAAC;SAAM,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QAC1D,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7E,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,OAAO,CAAC,EAAE;YACjD,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvF,CAAC,CAAC,CAAC;QAEH,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,GAAG;gBAAE,MAAM,sBAAsB,EAAE,CAAC;gBAAC,MAAM;YAChD,KAAK,GAAG;gBAAE,MAAM,qBAAqB,EAAE,CAAC;gBAAC,MAAM;YAC/C,KAAK,GAAG;gBAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBAAC,MAAM;YAC/C,KAAK,GAAG;gBAAE,MAAM,sBAAsB,EAAE,CAAC;gBAAC,MAAM,qBAAqB,EAAE,CAAC;gBAAC,MAAM;YAC/E,OAAO,CAAC,CAAC,MAAM,sBAAsB,EAAE,CAAC;QAC1C,CAAC;IACH,CAAC;SAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC5B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC/C,IAAI,MAAM;YAAE,MAAM,sBAAsB,EAAE,CAAC;IAC7C,CAAC;SAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC5B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC/C,IAAI,MAAM;YAAE,MAAM,qBAAqB,EAAE,CAAC;IAC5C,CAAC;IAED,IAAI,UAAU,CAAC,YAAY,CAAC;QAAE,MAAM,WAAW,CAAC,YAAY,CAAC,CAAC;IAC9D,IAAI,UAAU,CAAC,WAAW,CAAC;QAAE,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;IAE3D,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACxD,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC;YACrE,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5H,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC5B,IAAI,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;AAC9C,CAAC;AAED,2DAA2D;AAE3D,MAAM,UAAU,GAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,CAA0B,CAAC,OAAO,IAAI,OAAO,CAAC;AAC7G,MAAM,IAAI,GAAG,kCAAkC,GAAG,UAAU,GAAG,MAAM;IACnE,qCAAqC;IACrC,WAAW;IACX,6CAA6C;IAC7C,iCAAiC;IACjC,4CAA4C;IAC5C,gDAAgD;IAChD,qDAAqD;IACrD,+BAA+B;IAC/B,2CAA2C;IAC3C,iCAAiC;IACjC,uCAAuC;IACvC,+BAA+B;IAC/B,kCAAkC;IAClC,sCAAsC;IACtC,qEAAqE;IACrE,6CAA6C;IAC7C,kCAAkC;IAClC,0CAA0C;IAC1C,iDAAiD;IACjD,SAAS;IACT,oBAAoB;IACpB,yBAAyB;IACzB,2BAA2B;IAC3B,6BAA6B;IAC7B,uBAAuB,CAAC;AAE1B,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAEpB,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,SAAS,CAAC;QAAC,KAAK,MAAM,CAAC;QAAC,KAAK,QAAQ,CAAC;QAAC,KAAK,IAAI;YACnD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAAC,MAAM;QAC3B,KAAK,OAAO;YAAS,MAAM,QAAQ,EAAE,CAAC;YAAC,MAAM;QAC7C,KAAK,MAAM;YAAU,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,MAAM;QACnD,KAAK,QAAQ;YAAQ,MAAM,SAAS,EAAE,CAAC;YAAC,MAAM;QAC9C,KAAK,WAAW;YAAK,MAAM,YAAY,EAAE,CAAC;YAAC,MAAM;QACjD,KAAK,QAAQ;YAAQ,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,MAAM;QACrD,KAAK,QAAQ;YAAQ,MAAM,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,MAAM;QAC3D,KAAK,WAAW;YAAK,MAAM,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,MAAM;QAC9D,KAAK,cAAc;YAAE,MAAM,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,MAAM;QAChE,KAAK,aAAa;YAAG,MAAM,cAAc,EAAE,CAAC;YAAC,MAAM;QACnD,KAAK,QAAQ;YAAQ,MAAM,SAAS,EAAE,CAAC;YAAC,MAAM;QAC9C,KAAK,QAAQ;YAAQ,MAAM,SAAS,EAAE,CAAC;YAAC,MAAM;QAC9C,KAAK,OAAO;YAAS,MAAM,QAAQ,EAAE,CAAC;YAAC,MAAM;QAC7C;YACE,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,GAAG,kBAAkB,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * 魂器心跳 Runner — TypeScript 版
3
+ * 替代 Python heartbeat/runner_v2.py
4
+ *
5
+ * 每30分钟由 crontab 触发,执行:
6
+ * 1. 记忆同步 + FTS5 索引
7
+ * 2. 锚点任务 (固定时间)
8
+ * 3. 动态任务 (条件触发)
9
+ */
10
+ export {};
@@ -0,0 +1,58 @@
1
+ /**
2
+ * 魂器心跳 Runner — TypeScript 版
3
+ * 替代 Python heartbeat/runner_v2.py
4
+ *
5
+ * 每30分钟由 crontab 触发,执行:
6
+ * 1. 记忆同步 + FTS5 索引
7
+ * 2. 锚点任务 (固定时间)
8
+ * 3. 动态任务 (条件触发)
9
+ */
10
+ import { MemoryManager } from '../memory/manager.js';
11
+ import { StructuredMemory } from '../memory/structured.js';
12
+ import { existsSync, readFileSync } from 'node:fs';
13
+ import { join } from 'node:path';
14
+ const PROJECT_DIR = process.cwd();
15
+ const TASKS_FILE = join(PROJECT_DIR, 'heartbeat', 'heartbeat_tasks.json');
16
+ function now() { return new Date(); }
17
+ function hhmm(d = now()) { return d.getHours() * 60 + d.getMinutes(); }
18
+ function today() { return now().toISOString().split('T')[0]; }
19
+ function loadTasks() {
20
+ if (!existsSync(TASKS_FILE))
21
+ return { anchors: [], dynamic: [], history: [] };
22
+ return JSON.parse(readFileSync(TASKS_FILE, 'utf-8'));
23
+ }
24
+ async function main() {
25
+ console.log(`\n=== 魂器心跳 v3 | ${now().toISOString().slice(0, 16)} ===`);
26
+ // 同步 + 索引
27
+ try {
28
+ const mm = new MemoryManager();
29
+ mm.syncFromOpenCode();
30
+ mm.close();
31
+ const sm = new StructuredMemory();
32
+ sm.indexSessions(20);
33
+ sm.close();
34
+ }
35
+ catch (e) {
36
+ console.error('[sync] 失败:', e);
37
+ }
38
+ // 任务调度
39
+ const tasks = loadTasks();
40
+ const curMin = hhmm();
41
+ for (const anchor of tasks.anchors || []) {
42
+ if (!anchor.enabled && anchor.enabled !== undefined)
43
+ continue;
44
+ const [h, m] = anchor.time.split(':').map(Number);
45
+ if (Math.abs(curMin - (h * 60 + m)) > 15)
46
+ continue;
47
+ // 今天已执行?
48
+ const done = (tasks.history || []).some((h) => h.task_id === anchor.id && h.date === today());
49
+ if (done)
50
+ continue;
51
+ console.log(`[EXEC] ${anchor.id}: ${anchor.principle?.slice(0, 60)}`);
52
+ tasks.history = tasks.history || [];
53
+ tasks.history.push({ task_id: anchor.id, date: today(), time: now().toISOString(), result: 'ok' });
54
+ }
55
+ console.log('[DONE] 心跳完成\n');
56
+ }
57
+ main().catch(console.error);
58
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/heartbeat/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { MemoryManager } from './memory/manager.js';
2
+ export { StructuredMemory } from './memory/structured.js';
3
+ export { searchAll } from './memory/search.js';
4
+ export { OpenCodeAPI } from './opencode/api.js';
5
+ export { runDailyExtract } from './knowledge/daily.js';
6
+ export { generateIndex } from './knowledge/index.js';
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ export { MemoryManager } from './memory/manager.js';
2
+ export { StructuredMemory } from './memory/structured.js';
3
+ export { searchAll } from './memory/search.js';
4
+ export { OpenCodeAPI } from './opencode/api.js';
5
+ export { runDailyExtract } from './knowledge/daily.js';
6
+ export { generateIndex } from './knowledge/index.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * 每日知识提取
3
+ * 从对话中提取有价值知识点,归档到 knowledge/
4
+ */
5
+ export declare function runDailyExtract(): Promise<void>;
@@ -0,0 +1,65 @@
1
+ /**
2
+ * 每日知识提取
3
+ * 从对话中提取有价值知识点,归档到 knowledge/
4
+ */
5
+ import { MemoryManager } from '../memory/manager.js';
6
+ import { OpenCodeAPI } from '../opencode/api.js';
7
+ import { readFileSync, mkdirSync, existsSync, appendFileSync } from 'node:fs';
8
+ import { join, dirname } from 'node:path';
9
+ const PROJECT_DIR = process.cwd();
10
+ const KNOWLEDGE_DIR = join(PROJECT_DIR, 'knowledge');
11
+ const api = new OpenCodeAPI();
12
+ function getKnowledgeIndex() {
13
+ const cats = ['body', 'emotion', 'evolution', 'growth', 'intimacy', 'methodology', 'philosophy', 'system'];
14
+ return cats.map(cat => {
15
+ const f = join(KNOWLEDGE_DIR, cat, 'INDEX.md');
16
+ if (existsSync(f))
17
+ return `## ${cat}\n${readFileSync(f, 'utf-8').slice(0, 1500)}`;
18
+ return `## ${cat}\n(空)`;
19
+ }).join('\n\n');
20
+ }
21
+ export async function runDailyExtract() {
22
+ const mm = new MemoryManager();
23
+ const cutoff = Date.now() / 1000 - 86400; // 24 hours ago
24
+ const rows = mm.db.prepare('SELECT role, content FROM conversations WHERE timestamp > ? ORDER BY timestamp').all(cutoff);
25
+ const dialog = rows
26
+ .filter(r => ['user', 'assistant'].includes(r.role) && r.content.length > 5)
27
+ .map(r => `${r.role}: ${r.content.slice(0, 500)}`)
28
+ .join('\n');
29
+ if (!dialog.trim()) {
30
+ console.log('过去24小时无对话');
31
+ mm.close();
32
+ return;
33
+ }
34
+ const prompt = `你是Agent。从对话中提取值得长期保存的知识。无价值则回复"无"。
35
+ 知识库索引:${getKnowledgeIndex().slice(0, 8000)}
36
+ 对话: ${dialog.slice(0, 8000)}
37
+ 格式: ### [分类] 文件名 | 标题\n- 核心内容\n- 详细说明`;
38
+ const result = await api.callLLM(prompt);
39
+ if (!result || result.includes('无')) {
40
+ console.log('无新知识点');
41
+ mm.close();
42
+ return;
43
+ }
44
+ // Parse and save cards
45
+ for (const block of result.split('### ').filter(Boolean)) {
46
+ const lines = block.split('\n').filter(Boolean);
47
+ const header = lines[0] || '';
48
+ const m = header.match(/\[(\w+)\]\s+(.+?)\s*\|\s*(.+)/);
49
+ if (!m)
50
+ continue;
51
+ const [, cat, file, title] = m;
52
+ const content = lines.join('\n');
53
+ const fpath = join(KNOWLEDGE_DIR, cat, file.endsWith('.md') ? file : file + '.md');
54
+ mkdirSync(dirname(fpath), { recursive: true });
55
+ appendFileSync(fpath, `\n## ${new Date().toISOString().split('T')[0]}\n\n${content}\n\n---\n`);
56
+ console.log(` → ${cat}/${file}`);
57
+ }
58
+ mm.close();
59
+ console.log('知识提取完成');
60
+ }
61
+ // CLI
62
+ if (import.meta.url === `file://${process.argv[1]}`) {
63
+ runDailyExtract().catch(console.error);
64
+ }
65
+ //# sourceMappingURL=daily.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daily.js","sourceRoot":"","sources":["../../src/knowledge/daily.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * 知识库索引生成器
3
+ * 替代 Python generate-knowledge-index.py
4
+ */
5
+ export declare function generateIndex(): void;
@@ -0,0 +1,34 @@
1
+ /**
2
+ * 知识库索引生成器
3
+ * 替代 Python generate-knowledge-index.py
4
+ */
5
+ import { existsSync, writeFileSync, readdirSync } from 'node:fs';
6
+ import { join } from 'node:path';
7
+ const PROJECT_DIR = process.cwd();
8
+ const KNOWLEDGE_DIR = join(PROJECT_DIR, 'knowledge');
9
+ const CATEGORIES = ['body', 'emotion', 'evolution', 'growth', 'intimacy', 'methodology', 'philosophy', 'system'];
10
+ export function generateIndex() {
11
+ const lines = ['# Agent知识库总索引\n', '> 快速定位知识卡片\n'];
12
+ for (const cat of CATEGORIES) {
13
+ const dir = join(KNOWLEDGE_DIR, cat);
14
+ if (!existsSync(dir))
15
+ continue;
16
+ const files = readdirSync(dir).filter(f => f.endsWith('.md') && f !== 'INDEX.md');
17
+ if (files.length === 0)
18
+ continue;
19
+ lines.push(`\n## ${cat}`);
20
+ for (const f of files.sort()) {
21
+ const name = f.replace('.md', '');
22
+ lines.push(`- [${name}](${cat}/${f})`);
23
+ }
24
+ // 生成分类 INDEX.md
25
+ const idxContent = `# ${cat} - 知识索引\n\n> Agent${cat}类知识导航\n\n## 文件列表\n\n${files.map(f => `- [${f.replace('.md', '')}](${f})`).join('\n')}\n`;
26
+ writeFileSync(join(dir, 'INDEX.md'), idxContent);
27
+ }
28
+ writeFileSync(join(KNOWLEDGE_DIR, 'INDEX.md'), lines.join('\n'));
29
+ console.log('[index] 知识库索引已更新');
30
+ }
31
+ if (import.meta.url === `file://${process.argv[1]}`) {
32
+ generateIndex();
33
+ }
34
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/knowledge/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAgB,aAAa,EAAE,WAAW,EAAa,MAAM,SAAS,CAAC;AAC1F,OAAO,EAAE,IAAI,EAAY,MAAM,WAAW,CAAC;AAG3C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAClC,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAErD,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;AAEjH,MAAM,UAAU,aAAa;IAC3B,MAAM,KAAK,GAAG,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;IAElD,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAE/B,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,CAAC;QAClF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAEjC,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;QAC1B,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACzC,CAAC;QAED,gBAAgB;QAChB,MAAM,UAAU,GAAG,KAAK,GAAG,qBAAqB,GAAG,uBAAuB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7I,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;IACnD,CAAC;IAED,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACpD,aAAa,EAAE,CAAC;AAClB,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * 魂器记忆管理器 — TypeScript 版
3
+ * 使用 Node.js 24 内置 node:sqlite 模块
4
+ */
5
+ import { DatabaseSync } from 'node:sqlite';
6
+ export declare class MemoryManager {
7
+ db: DatabaseSync;
8
+ constructor();
9
+ private init;
10
+ save(sessionId: string, role: string, content: string): void;
11
+ private saveToFile;
12
+ syncFromOpenCode(): number;
13
+ search(query: string, limit?: number): unknown[];
14
+ recent(n?: number): unknown[];
15
+ stats(): {
16
+ conversations: any;
17
+ sessions: unknown[];
18
+ };
19
+ close(): void;
20
+ }
@@ -0,0 +1,110 @@
1
+ /**
2
+ * 魂器记忆管理器 — TypeScript 版
3
+ * 使用 Node.js 24 内置 node:sqlite 模块
4
+ */
5
+ import { DatabaseSync } from 'node:sqlite';
6
+ import { existsSync, mkdirSync, appendFileSync } from 'node:fs';
7
+ import { join } from 'node:path';
8
+ import { homedir } from 'node:os';
9
+ const PROJECT_DIR = process.cwd();
10
+ const MEMORY_DIR = join(PROJECT_DIR, 'memory');
11
+ const DB_PATH = join(MEMORY_DIR, 'short-term', 'conversations.db');
12
+ const OPENCODE_DB = join(homedir(), '.local', 'share', 'opencode', 'opencode.db');
13
+ export class MemoryManager {
14
+ db;
15
+ constructor() {
16
+ mkdirSync(join(MEMORY_DIR, 'short-term'), { recursive: true });
17
+ mkdirSync(join(MEMORY_DIR, 'long-term'), { recursive: true });
18
+ this.db = new DatabaseSync(DB_PATH);
19
+ this.db.exec('PRAGMA journal_mode=WAL');
20
+ this.init();
21
+ }
22
+ init() {
23
+ this.db.exec(`
24
+ CREATE TABLE IF NOT EXISTS conversations (
25
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
26
+ session_id TEXT, role TEXT, content TEXT,
27
+ timestamp REAL,
28
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
29
+ );
30
+ CREATE INDEX IF NOT EXISTS idx_conv_session ON conversations(session_id);
31
+ CREATE INDEX IF NOT EXISTS idx_conv_time ON conversations(timestamp);
32
+ `);
33
+ }
34
+ save(sessionId, role, content) {
35
+ const ts = Date.now() / 1000;
36
+ this.db.prepare('INSERT INTO conversations (session_id, role, content, timestamp) VALUES (?, ?, ?, ?)').run(sessionId, role, content, ts);
37
+ this.saveToFile(sessionId, role, content, ts);
38
+ }
39
+ saveToFile(sessionId, role, content, ts) {
40
+ const d = new Date(ts * 1000);
41
+ const date = d.toISOString().split('T')[0];
42
+ const time = d.toISOString().split('T')[1].split('.')[0];
43
+ const file = join(MEMORY_DIR, 'long-term', `${date}.md`);
44
+ appendFileSync(file, `\n## ${time} | ${role}\n\n${content.slice(0, 300)}\n\n---\n`);
45
+ }
46
+ syncFromOpenCode() {
47
+ if (!existsSync(OPENCODE_DB)) {
48
+ console.log('[sync] OpenCode DB 不存在');
49
+ return 0;
50
+ }
51
+ const src = new DatabaseSync(OPENCODE_DB, { open: true, readOnly: true });
52
+ let count = 0;
53
+ try {
54
+ const sessions = src.prepare('SELECT id FROM session ORDER BY time_updated DESC LIMIT 50').all();
55
+ for (const { id: sessId } of sessions) {
56
+ const rows = src.prepare(`
57
+ SELECT m.data AS msg, GROUP_CONCAT(p.data, '|||') AS parts
58
+ FROM message m LEFT JOIN part p ON p.message_id = m.id
59
+ WHERE m.session_id = ? GROUP BY m.id ORDER BY m.time_created
60
+ `).all(sessId);
61
+ for (const { msg: msgJson, parts: partsJson } of rows) {
62
+ try {
63
+ const msg = JSON.parse(msgJson || '{}');
64
+ const role = msg.role;
65
+ if (!['user', 'assistant'].includes(role))
66
+ continue;
67
+ const text = (partsJson || '').split('|||')
68
+ .map(p => { try {
69
+ return JSON.parse(p);
70
+ }
71
+ catch {
72
+ return null;
73
+ } })
74
+ .filter((p) => p?.type === 'text' && p.text)
75
+ .map((p) => p.text).join(' ').trim();
76
+ if (!text || text.length < 5)
77
+ continue;
78
+ const exists = this.db.prepare('SELECT COUNT(*) as c FROM conversations WHERE session_id=? AND role=? AND content=?').get(sessId, role, text);
79
+ if (exists.c === 0) {
80
+ this.save(sessId, role, text);
81
+ count++;
82
+ }
83
+ }
84
+ catch { }
85
+ }
86
+ }
87
+ }
88
+ finally {
89
+ src.close();
90
+ }
91
+ console.log(`[sync] 从 OpenCode 同步了 ${count} 条对话`);
92
+ return count;
93
+ }
94
+ search(query, limit = 15) {
95
+ return this.db.prepare('SELECT * FROM conversations WHERE content LIKE ? ORDER BY timestamp DESC LIMIT ?').all(`%${query}%`, limit);
96
+ }
97
+ recent(n = 10) {
98
+ return this.db.prepare('SELECT * FROM conversations ORDER BY timestamp DESC LIMIT ?').all(n);
99
+ }
100
+ stats() {
101
+ const count = this.db.prepare('SELECT COUNT(*) as c FROM conversations').get().c;
102
+ const sessions = this.db.prepare(`
103
+ SELECT session_id, COUNT(*) as cnt, MIN(timestamp) as first
104
+ FROM conversations GROUP BY session_id ORDER BY first DESC LIMIT 10
105
+ `).all();
106
+ return { conversations: count, sessions };
107
+ }
108
+ close() { this.db.close(); }
109
+ }
110
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/memory/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * 统一记忆搜索
3
+ * 替代 Python memory_search.py
4
+ */
5
+ export interface SearchResult {
6
+ source: string;
7
+ snippet: string;
8
+ file?: string;
9
+ date?: string;
10
+ }
11
+ export declare function searchAll(query: string): SearchResult[];
@@ -0,0 +1,79 @@
1
+ /**
2
+ * 统一记忆搜索
3
+ * 替代 Python memory_search.py
4
+ */
5
+ import { execSync } from 'node:child_process';
6
+ import { existsSync, readFileSync } from 'node:fs';
7
+ import { join } from 'node:path';
8
+ import { MemoryManager } from './manager.js';
9
+ import { StructuredMemory } from './structured.js';
10
+ const PROJECT_DIR = process.cwd();
11
+ export function searchAll(query) {
12
+ const results = [];
13
+ // 1. FTS5 会话搜索
14
+ try {
15
+ const sm = new StructuredMemory();
16
+ const hits = sm.search(query, 10);
17
+ for (const h of hits) {
18
+ results.push({
19
+ source: '会话',
20
+ snippet: (h.summary || '').slice(0, 200),
21
+ date: h.date,
22
+ });
23
+ }
24
+ sm.close();
25
+ }
26
+ catch { }
27
+ // 2. conversations.db 搜索
28
+ try {
29
+ const mm = new MemoryManager();
30
+ const hits = mm.search(query, 10);
31
+ for (const h of hits) {
32
+ results.push({
33
+ source: '对话',
34
+ snippet: h.content?.slice(0, 200),
35
+ });
36
+ }
37
+ mm.close();
38
+ }
39
+ catch { }
40
+ // 3. 文件搜索
41
+ const dirs = ['soul', 'knowledge', 'skills', 'memory', 'docs'];
42
+ for (const dir of dirs) {
43
+ const dirPath = join(PROJECT_DIR, dir);
44
+ if (!existsSync(dirPath))
45
+ continue;
46
+ try {
47
+ const output = execSync(`grep -ri --include="*.md" -l "${query}" "${dirPath}" 2>/dev/null || true`, { encoding: 'utf-8', timeout: 5000 });
48
+ for (const file of output.split('\n').filter(Boolean).slice(0, 5)) {
49
+ results.push({ source: '文件', snippet: file, file });
50
+ }
51
+ }
52
+ catch { }
53
+ }
54
+ // 4. MEMORY.md 搜索
55
+ const memFile = join(PROJECT_DIR, 'memory', 'MEMORY.md');
56
+ if (existsSync(memFile)) {
57
+ const content = readFileSync(memFile, 'utf-8');
58
+ for (const line of content.split('\n')) {
59
+ if (line.toLowerCase().includes(query.toLowerCase())) {
60
+ results.push({ source: 'MEMORY.md', snippet: line.slice(0, 200) });
61
+ }
62
+ }
63
+ }
64
+ return results;
65
+ }
66
+ // CLI
67
+ if (import.meta.url === `file://${process.argv[1]}`) {
68
+ const query = process.argv[2] || '';
69
+ if (!query) {
70
+ console.log('用法: node search.js <关键词>');
71
+ process.exit(1);
72
+ }
73
+ const results = searchAll(query);
74
+ console.log(`\n🔍 "${query}" — ${results.length} 条结果\n`);
75
+ results.forEach((r, i) => {
76
+ console.log(`[${i + 1}] [${r.source}] ${r.snippet.slice(0, 150)}`);
77
+ });
78
+ }
79
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/memory/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * 结构化记忆 — FTS5 索引 + MEMORY.md 管理
3
+ * 替代 Python memory_structured.py
4
+ */
5
+ export declare class StructuredMemory {
6
+ private db;
7
+ constructor();
8
+ private init;
9
+ /** 从 conversations.db 重建 FTS5 索引 */
10
+ indexSessions(limit?: number): number;
11
+ /** FTS5 搜索 */
12
+ search(query: string, limit?: number): unknown[];
13
+ /** MEMORY.md 管理 */
14
+ getMemoryStats(): {
15
+ used: number;
16
+ pct: number;
17
+ entries: string[];
18
+ };
19
+ addMemory(text: string): string;
20
+ close(): void;
21
+ }