myagent-ai 1.23.80 → 1.23.82

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 (145) hide show
  1. package/core/agent_storage.py +0 -0
  2. package/data/novnc/lib/base64.js +0 -0
  3. package/data/novnc/lib/decoders/copyrect.js +0 -0
  4. package/data/novnc/lib/decoders/hextile.js +0 -0
  5. package/data/novnc/lib/decoders/jpeg.js +0 -0
  6. package/data/novnc/lib/decoders/raw.js +0 -0
  7. package/data/novnc/lib/decoders/rre.js +0 -0
  8. package/data/novnc/lib/decoders/tight.js +0 -0
  9. package/data/novnc/lib/decoders/tightpng.js +0 -0
  10. package/data/novnc/lib/decoders/zrle.js +0 -0
  11. package/data/novnc/lib/deflator.js +0 -0
  12. package/data/novnc/lib/des.js +0 -0
  13. package/data/novnc/lib/display.js +0 -0
  14. package/data/novnc/lib/encodings.js +0 -0
  15. package/data/novnc/lib/inflator.js +0 -0
  16. package/data/novnc/lib/input/domkeytable.js +0 -0
  17. package/data/novnc/lib/input/fixedkeys.js +0 -0
  18. package/data/novnc/lib/input/gesturehandler.js +0 -0
  19. package/data/novnc/lib/input/keyboard.js +0 -0
  20. package/data/novnc/lib/input/keysym.js +0 -0
  21. package/data/novnc/lib/input/keysymdef.js +0 -0
  22. package/data/novnc/lib/input/util.js +0 -0
  23. package/data/novnc/lib/input/vkeys.js +0 -0
  24. package/data/novnc/lib/input/xtscancodes.js +0 -0
  25. package/data/novnc/lib/ra2.js +0 -0
  26. package/data/novnc/lib/rfb.js +0 -0
  27. package/data/novnc/lib/util/browser.js +0 -0
  28. package/data/novnc/lib/util/cursor.js +0 -0
  29. package/data/novnc/lib/util/element.js +0 -0
  30. package/data/novnc/lib/util/events.js +0 -0
  31. package/data/novnc/lib/util/eventtarget.js +0 -0
  32. package/data/novnc/lib/util/int.js +0 -0
  33. package/data/novnc/lib/util/logging.js +0 -0
  34. package/data/novnc/lib/util/md5.js +0 -0
  35. package/data/novnc/lib/util/strings.js +0 -0
  36. package/data/novnc/lib/vendor/pako/lib/utils/common.js +0 -0
  37. package/data/novnc/lib/vendor/pako/lib/zlib/adler32.js +0 -0
  38. package/data/novnc/lib/vendor/pako/lib/zlib/constants.js +0 -0
  39. package/data/novnc/lib/vendor/pako/lib/zlib/crc32.js +0 -0
  40. package/data/novnc/lib/vendor/pako/lib/zlib/deflate.js +0 -0
  41. package/data/novnc/lib/vendor/pako/lib/zlib/gzheader.js +0 -0
  42. package/data/novnc/lib/vendor/pako/lib/zlib/inffast.js +0 -0
  43. package/data/novnc/lib/vendor/pako/lib/zlib/inflate.js +0 -0
  44. package/data/novnc/lib/vendor/pako/lib/zlib/inftrees.js +0 -0
  45. package/data/novnc/lib/vendor/pako/lib/zlib/messages.js +0 -0
  46. package/data/novnc/lib/vendor/pako/lib/zlib/trees.js +0 -0
  47. package/data/novnc/lib/vendor/pako/lib/zlib/zstream.js +0 -0
  48. package/data/novnc/lib/websock.js +0 -0
  49. package/groups/manager.py +66 -0
  50. package/myagent/core/agent_storage.py +0 -0
  51. package/myagent/data/novnc/lib/base64.js +0 -0
  52. package/myagent/data/novnc/lib/decoders/copyrect.js +0 -0
  53. package/myagent/data/novnc/lib/decoders/hextile.js +0 -0
  54. package/myagent/data/novnc/lib/decoders/jpeg.js +0 -0
  55. package/myagent/data/novnc/lib/decoders/raw.js +0 -0
  56. package/myagent/data/novnc/lib/decoders/rre.js +0 -0
  57. package/myagent/data/novnc/lib/decoders/tight.js +0 -0
  58. package/myagent/data/novnc/lib/decoders/tightpng.js +0 -0
  59. package/myagent/data/novnc/lib/decoders/zrle.js +0 -0
  60. package/myagent/data/novnc/lib/deflator.js +0 -0
  61. package/myagent/data/novnc/lib/des.js +0 -0
  62. package/myagent/data/novnc/lib/display.js +0 -0
  63. package/myagent/data/novnc/lib/encodings.js +0 -0
  64. package/myagent/data/novnc/lib/inflator.js +0 -0
  65. package/myagent/data/novnc/lib/input/domkeytable.js +0 -0
  66. package/myagent/data/novnc/lib/input/fixedkeys.js +0 -0
  67. package/myagent/data/novnc/lib/input/gesturehandler.js +0 -0
  68. package/myagent/data/novnc/lib/input/keyboard.js +0 -0
  69. package/myagent/data/novnc/lib/input/keysym.js +0 -0
  70. package/myagent/data/novnc/lib/input/keysymdef.js +0 -0
  71. package/myagent/data/novnc/lib/input/util.js +0 -0
  72. package/myagent/data/novnc/lib/input/vkeys.js +0 -0
  73. package/myagent/data/novnc/lib/input/xtscancodes.js +0 -0
  74. package/myagent/data/novnc/lib/ra2.js +0 -0
  75. package/myagent/data/novnc/lib/rfb.js +0 -0
  76. package/myagent/data/novnc/lib/util/browser.js +0 -0
  77. package/myagent/data/novnc/lib/util/cursor.js +0 -0
  78. package/myagent/data/novnc/lib/util/element.js +0 -0
  79. package/myagent/data/novnc/lib/util/events.js +0 -0
  80. package/myagent/data/novnc/lib/util/eventtarget.js +0 -0
  81. package/myagent/data/novnc/lib/util/int.js +0 -0
  82. package/myagent/data/novnc/lib/util/logging.js +0 -0
  83. package/myagent/data/novnc/lib/util/md5.js +0 -0
  84. package/myagent/data/novnc/lib/util/strings.js +0 -0
  85. package/myagent/data/novnc/lib/vendor/pako/lib/utils/common.js +0 -0
  86. package/myagent/data/novnc/lib/vendor/pako/lib/zlib/adler32.js +0 -0
  87. package/myagent/data/novnc/lib/vendor/pako/lib/zlib/constants.js +0 -0
  88. package/myagent/data/novnc/lib/vendor/pako/lib/zlib/crc32.js +0 -0
  89. package/myagent/data/novnc/lib/vendor/pako/lib/zlib/deflate.js +0 -0
  90. package/myagent/data/novnc/lib/vendor/pako/lib/zlib/gzheader.js +0 -0
  91. package/myagent/data/novnc/lib/vendor/pako/lib/zlib/inffast.js +0 -0
  92. package/myagent/data/novnc/lib/vendor/pako/lib/zlib/inflate.js +0 -0
  93. package/myagent/data/novnc/lib/vendor/pako/lib/zlib/inftrees.js +0 -0
  94. package/myagent/data/novnc/lib/vendor/pako/lib/zlib/messages.js +0 -0
  95. package/myagent/data/novnc/lib/vendor/pako/lib/zlib/trees.js +0 -0
  96. package/myagent/data/novnc/lib/vendor/pako/lib/zlib/zstream.js +0 -0
  97. package/myagent/data/novnc/lib/websock.js +0 -0
  98. package/myagent/groups/manager.py +66 -0
  99. package/myagent/package.json +1 -1
  100. package/myagent/web/api_server.py +336 -10
  101. package/myagent/web/ui/admin/admin-agentchat.js +0 -0
  102. package/myagent/web/ui/admin/admin-agents.js +0 -0
  103. package/myagent/web/ui/admin/admin-core.js +14 -6
  104. package/myagent/web/ui/admin/admin-dashboard.js +0 -0
  105. package/myagent/web/ui/admin/admin-executor.js +0 -0
  106. package/myagent/web/ui/admin/admin-files.js +0 -0
  107. package/myagent/web/ui/admin/admin-llm.js +0 -0
  108. package/myagent/web/ui/admin/admin-logs.js +0 -0
  109. package/myagent/web/ui/admin/admin-memory.js +0 -0
  110. package/myagent/web/ui/admin/admin-org.js +0 -0
  111. package/myagent/web/ui/admin/admin-permissions.js +0 -0
  112. package/myagent/web/ui/admin/admin-platforms.js +0 -0
  113. package/myagent/web/ui/admin/admin-sessions.js +0 -0
  114. package/myagent/web/ui/admin/admin-skills.js +0 -0
  115. package/myagent/web/ui/admin/admin-system.js +0 -0
  116. package/myagent/web/ui/admin/admin-tasks.js +0 -0
  117. package/myagent/web/ui/chat/chat.css +2 -1
  118. package/myagent/web/ui/chat/chat.js +1 -1
  119. package/myagent/web/ui/chat/chat_main.js +40 -28
  120. package/myagent/web/ui/chat/groupchat.js +123 -22
  121. package/package.json +1 -1
  122. package/skills/fullstack-dev/SKILL.md +120 -952
  123. package/skills/pdf/SKILL.md +1 -7
  124. package/web/api_server.py +335 -0
  125. package/web/ui/admin/admin-agentchat.js +0 -0
  126. package/web/ui/admin/admin-agents.js +0 -0
  127. package/web/ui/admin/admin-core.js +14 -6
  128. package/web/ui/admin/admin-dashboard.js +0 -0
  129. package/web/ui/admin/admin-executor.js +0 -0
  130. package/web/ui/admin/admin-files.js +0 -0
  131. package/web/ui/admin/admin-llm.js +0 -0
  132. package/web/ui/admin/admin-logs.js +0 -0
  133. package/web/ui/admin/admin-memory.js +0 -0
  134. package/web/ui/admin/admin-org.js +0 -0
  135. package/web/ui/admin/admin-permissions.js +0 -0
  136. package/web/ui/admin/admin-platforms.js +0 -0
  137. package/web/ui/admin/admin-sessions.js +0 -0
  138. package/web/ui/admin/admin-skills.js +0 -0
  139. package/web/ui/admin/admin-system.js +0 -0
  140. package/web/ui/admin/admin-tasks.js +0 -0
  141. package/web/ui/chat/chat.css +2 -1
  142. package/web/ui/chat/chat.js +1 -1
  143. package/web/ui/chat/chat_main.js +40 -28
  144. package/web/ui/chat/groupchat.js +123 -22
  145. package/worklog.md +42 -0
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
package/groups/manager.py CHANGED
@@ -258,6 +258,14 @@ class GroupManager:
258
258
  db_path = self._data_dir / "groups" / "messages.db"
259
259
  self._db_conn = sqlite3.connect(str(db_path), check_same_thread=False)
260
260
  self._db_conn.row_factory = sqlite3.Row
261
+ # [v1.23.81] 群聊 session 映射表(每个群一个纯数字 session ID)
262
+ self._db_conn.execute("""
263
+ CREATE TABLE IF NOT EXISTS group_sessions (
264
+ group_id TEXT PRIMARY KEY,
265
+ session_id TEXT NOT NULL UNIQUE,
266
+ created_at REAL NOT NULL
267
+ )
268
+ """)
261
269
  self._db_conn.execute("""
262
270
  CREATE TABLE IF NOT EXISTS group_messages (
263
271
  id TEXT PRIMARY KEY,
@@ -638,6 +646,64 @@ class GroupManager:
638
646
 
639
647
  return group
640
648
 
649
+ # ==================================================================
650
+ # [v1.23.81] 群聊 Session 管理(纯数字 ID,嵌入 URL 用于导航恢复)
651
+ # ==================================================================
652
+
653
+ def get_or_create_group_session(self, group_id: str) -> str:
654
+ """
655
+ 获取或创建群聊的 session ID。
656
+ 每个群有且仅有一个 session ID(纯数字,以 9 开头,递增)。
657
+ 此 session ID 用于前端 URL 参数,确保从后台管理返回时能正确恢复群聊视图。
658
+ """
659
+ if not self._db_conn:
660
+ return ""
661
+ # 查找已有 session
662
+ row = self._db_conn.execute(
663
+ "SELECT session_id FROM group_sessions WHERE group_id = ?", (group_id,)
664
+ ).fetchone()
665
+ if row:
666
+ return row["session_id"]
667
+ # 生成新的纯数字 session ID(9 开头,13 位数字,时间戳后 8 位 + 随机 4 位)
668
+ import random
669
+ ts_part = str(int(time.time()))[-8:]
670
+ rand_part = str(random.randint(1000, 9999))
671
+ new_sid = "9" + ts_part + rand_part # 共 13 位纯数字
672
+ # 确保唯一性
673
+ for _ in range(10):
674
+ existing = self._db_conn.execute(
675
+ "SELECT 1 FROM group_sessions WHERE session_id = ?", (new_sid,)
676
+ ).fetchone()
677
+ if not existing:
678
+ break
679
+ rand_part = str(random.randint(1000, 9999))
680
+ new_sid = "9" + ts_part + rand_part
681
+ self._db_conn.execute(
682
+ "INSERT INTO group_sessions (group_id, session_id, created_at) VALUES (?, ?, ?)",
683
+ (group_id, new_sid, time.time()),
684
+ )
685
+ self._db_conn.commit()
686
+ logger.info(f"群聊 session 创建: group={group_id}, session={new_sid}")
687
+ return new_sid
688
+
689
+ def get_group_id_by_session(self, session_id: str) -> Optional[str]:
690
+ """通过 session ID 查找 group_id(用于前端 URL 恢复)"""
691
+ if not self._db_conn:
692
+ return None
693
+ row = self._db_conn.execute(
694
+ "SELECT group_id FROM group_sessions WHERE session_id = ?", (session_id,)
695
+ ).fetchone()
696
+ return row["group_id"] if row else None
697
+
698
+ def get_session_by_group(self, group_id: str) -> Optional[str]:
699
+ """通过 group_id 查找 session_id"""
700
+ if not self._db_conn:
701
+ return None
702
+ row = self._db_conn.execute(
703
+ "SELECT session_id FROM group_sessions WHERE group_id = ?", (group_id,)
704
+ ).fetchone()
705
+ return row["session_id"] if row else None
706
+
641
707
  # ==================================================================
642
708
  # 消息管理
643
709
  # ==================================================================
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -258,6 +258,14 @@ class GroupManager:
258
258
  db_path = self._data_dir / "groups" / "messages.db"
259
259
  self._db_conn = sqlite3.connect(str(db_path), check_same_thread=False)
260
260
  self._db_conn.row_factory = sqlite3.Row
261
+ # [v1.23.81] 群聊 session 映射表(每个群一个纯数字 session ID)
262
+ self._db_conn.execute("""
263
+ CREATE TABLE IF NOT EXISTS group_sessions (
264
+ group_id TEXT PRIMARY KEY,
265
+ session_id TEXT NOT NULL UNIQUE,
266
+ created_at REAL NOT NULL
267
+ )
268
+ """)
261
269
  self._db_conn.execute("""
262
270
  CREATE TABLE IF NOT EXISTS group_messages (
263
271
  id TEXT PRIMARY KEY,
@@ -638,6 +646,64 @@ class GroupManager:
638
646
 
639
647
  return group
640
648
 
649
+ # ==================================================================
650
+ # [v1.23.81] 群聊 Session 管理(纯数字 ID,嵌入 URL 用于导航恢复)
651
+ # ==================================================================
652
+
653
+ def get_or_create_group_session(self, group_id: str) -> str:
654
+ """
655
+ 获取或创建群聊的 session ID。
656
+ 每个群有且仅有一个 session ID(纯数字,以 9 开头,递增)。
657
+ 此 session ID 用于前端 URL 参数,确保从后台管理返回时能正确恢复群聊视图。
658
+ """
659
+ if not self._db_conn:
660
+ return ""
661
+ # 查找已有 session
662
+ row = self._db_conn.execute(
663
+ "SELECT session_id FROM group_sessions WHERE group_id = ?", (group_id,)
664
+ ).fetchone()
665
+ if row:
666
+ return row["session_id"]
667
+ # 生成新的纯数字 session ID(9 开头,13 位数字,时间戳后 8 位 + 随机 4 位)
668
+ import random
669
+ ts_part = str(int(time.time()))[-8:]
670
+ rand_part = str(random.randint(1000, 9999))
671
+ new_sid = "9" + ts_part + rand_part # 共 13 位纯数字
672
+ # 确保唯一性
673
+ for _ in range(10):
674
+ existing = self._db_conn.execute(
675
+ "SELECT 1 FROM group_sessions WHERE session_id = ?", (new_sid,)
676
+ ).fetchone()
677
+ if not existing:
678
+ break
679
+ rand_part = str(random.randint(1000, 9999))
680
+ new_sid = "9" + ts_part + rand_part
681
+ self._db_conn.execute(
682
+ "INSERT INTO group_sessions (group_id, session_id, created_at) VALUES (?, ?, ?)",
683
+ (group_id, new_sid, time.time()),
684
+ )
685
+ self._db_conn.commit()
686
+ logger.info(f"群聊 session 创建: group={group_id}, session={new_sid}")
687
+ return new_sid
688
+
689
+ def get_group_id_by_session(self, session_id: str) -> Optional[str]:
690
+ """通过 session ID 查找 group_id(用于前端 URL 恢复)"""
691
+ if not self._db_conn:
692
+ return None
693
+ row = self._db_conn.execute(
694
+ "SELECT group_id FROM group_sessions WHERE session_id = ?", (session_id,)
695
+ ).fetchone()
696
+ return row["group_id"] if row else None
697
+
698
+ def get_session_by_group(self, group_id: str) -> Optional[str]:
699
+ """通过 group_id 查找 session_id"""
700
+ if not self._db_conn:
701
+ return None
702
+ row = self._db_conn.execute(
703
+ "SELECT session_id FROM group_sessions WHERE group_id = ?", (group_id,)
704
+ ).fetchone()
705
+ return row["session_id"] if row else None
706
+
641
707
  # ==================================================================
642
708
  # 消息管理
643
709
  # ==================================================================
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "myagent-ai",
3
- "version": "1.23.80",
3
+ "version": "1.23.82",
4
4
  "description": "本地桌面端执行型AI助手 - Open Interpreter 风格 | Local Desktop Execution-Oriented AI Assistant",
5
5
  "main": "main.py",
6
6
  "bin": {