octop 0.1.0.dev0__py3-none-any.whl

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 (915) hide show
  1. octop/__init__.py +5 -0
  2. octop/__main__.py +8 -0
  3. octop/api/__init__.py +1 -0
  4. octop/api/app.py +204 -0
  5. octop/api/common/__init__.py +1 -0
  6. octop/api/common/agent.py +45 -0
  7. octop/api/common/validators.py +49 -0
  8. octop/api/common/workspace.py +57 -0
  9. octop/api/deps.py +144 -0
  10. octop/api/middleware/__init__.py +1 -0
  11. octop/api/middleware/jwt_auth.py +40 -0
  12. octop/api/middleware/setup_lockdown.py +41 -0
  13. octop/api/openapi_meta.py +145 -0
  14. octop/api/routers/__init__.py +1 -0
  15. octop/api/routers/acp.py +301 -0
  16. octop/api/routers/admin.py +81 -0
  17. octop/api/routers/agent_files.py +236 -0
  18. octop/api/routers/agents.py +277 -0
  19. octop/api/routers/auth.py +101 -0
  20. octop/api/routers/backup.py +166 -0
  21. octop/api/routers/browser/__init__.py +16 -0
  22. octop/api/routers/browser/harness.py +170 -0
  23. octop/api/routers/browser/sessions.py +607 -0
  24. octop/api/routers/browser/stream.py +279 -0
  25. octop/api/routers/channels.py +810 -0
  26. octop/api/routers/chat/__init__.py +16 -0
  27. octop/api/routers/chat/history.py +245 -0
  28. octop/api/routers/chat/models.py +124 -0
  29. octop/api/routers/chat/routes.py +93 -0
  30. octop/api/routers/chat/serialize.py +496 -0
  31. octop/api/routers/chat/sse.py +32 -0
  32. octop/api/routers/chat/turn.py +228 -0
  33. octop/api/routers/chat/ws.py +144 -0
  34. octop/api/routers/connectors.py +651 -0
  35. octop/api/routers/cron.py +168 -0
  36. octop/api/routers/envs.py +70 -0
  37. octop/api/routers/experts.py +167 -0
  38. octop/api/routers/health.py +23 -0
  39. octop/api/routers/i18n.py +28 -0
  40. octop/api/routers/internal_mcp.py +147 -0
  41. octop/api/routers/mbti.py +764 -0
  42. octop/api/routers/observability.py +84 -0
  43. octop/api/routers/ollama_download_store.py +130 -0
  44. octop/api/routers/ollama_models.py +227 -0
  45. octop/api/routers/plugins.py +152 -0
  46. octop/api/routers/preferences.py +41 -0
  47. octop/api/routers/providers.py +317 -0
  48. octop/api/routers/security.py +193 -0
  49. octop/api/routers/setup.py +276 -0
  50. octop/api/routers/skills.py +758 -0
  51. octop/api/routers/slash.py +74 -0
  52. octop/api/routers/storage_backends.py +213 -0
  53. octop/api/routers/terminal.py +368 -0
  54. octop/api/routers/tls.py +112 -0
  55. octop/api/routers/update.py +198 -0
  56. octop/api/routers/update_store.py +69 -0
  57. octop/api/routers/usage.py +94 -0
  58. octop/api/routers/users.py +129 -0
  59. octop/api/routers/voice.py +234 -0
  60. octop/api/routers/workspace.py +374 -0
  61. octop/cli/__init__.py +1 -0
  62. octop/cli/_chat_render.py +330 -0
  63. octop/cli/_chat_turn.py +13 -0
  64. octop/cli/_cli_db.py +154 -0
  65. octop/cli/_client.py +194 -0
  66. octop/cli/_ctx.py +59 -0
  67. octop/cli/_feishu_creator.py +83 -0
  68. octop/cli/_prompts.py +54 -0
  69. octop/cli/_qr.py +167 -0
  70. octop/cli/_repl_session.py +58 -0
  71. octop/cli/_repl_toolbar.py +17 -0
  72. octop/cli/_state.py +35 -0
  73. octop/cli/_stub.py +24 -0
  74. octop/cli/acp_cmd.py +63 -0
  75. octop/cli/admin_cmd.py +127 -0
  76. octop/cli/agent_cmd.py +221 -0
  77. octop/cli/backup_cmd.py +80 -0
  78. octop/cli/channel_cmd.py +511 -0
  79. octop/cli/chat_cmd.py +30 -0
  80. octop/cli/chats_cmd.py +354 -0
  81. octop/cli/clean_cmd.py +42 -0
  82. octop/cli/completion_cmd.py +58 -0
  83. octop/cli/config_cmd.py +39 -0
  84. octop/cli/cron_cmd.py +121 -0
  85. octop/cli/init_cmd.py +121 -0
  86. octop/cli/main.py +121 -0
  87. octop/cli/models_cmd.py +297 -0
  88. octop/cli/plugin_cmd.py +72 -0
  89. octop/cli/provider_cmd.py +120 -0
  90. octop/cli/run_cmd.py +131 -0
  91. octop/cli/server_cmd.py +48 -0
  92. octop/cli/skills_cmd.py +146 -0
  93. octop/cli/update_cmd.py +68 -0
  94. octop/cli/user_cmd.py +160 -0
  95. octop/cli/version_cmd.py +17 -0
  96. octop/config.py +296 -0
  97. octop/dashboard/apple-touch-icon.png +0 -0
  98. octop/dashboard/assets/CardSkeleton.30rAhKS-.js +1 -0
  99. octop/dashboard/assets/KaTeX_AMS-Regular.BQhdFMY1.woff2 +0 -0
  100. octop/dashboard/assets/KaTeX_AMS-Regular.DMm9YOAa.woff +0 -0
  101. octop/dashboard/assets/KaTeX_AMS-Regular.DRggAlZN.ttf +0 -0
  102. octop/dashboard/assets/KaTeX_Caligraphic-Bold.ATXxdsX0.ttf +0 -0
  103. octop/dashboard/assets/KaTeX_Caligraphic-Bold.BEiXGLvX.woff +0 -0
  104. octop/dashboard/assets/KaTeX_Caligraphic-Bold.Dq_IR9rO.woff2 +0 -0
  105. octop/dashboard/assets/KaTeX_Caligraphic-Regular.CTRA-rTL.woff +0 -0
  106. octop/dashboard/assets/KaTeX_Caligraphic-Regular.Di6jR-x-.woff2 +0 -0
  107. octop/dashboard/assets/KaTeX_Caligraphic-Regular.wX97UBjC.ttf +0 -0
  108. octop/dashboard/assets/KaTeX_Fraktur-Bold.BdnERNNW.ttf +0 -0
  109. octop/dashboard/assets/KaTeX_Fraktur-Bold.BsDP51OF.woff +0 -0
  110. octop/dashboard/assets/KaTeX_Fraktur-Bold.CL6g_b3V.woff2 +0 -0
  111. octop/dashboard/assets/KaTeX_Fraktur-Regular.CB_wures.ttf +0 -0
  112. octop/dashboard/assets/KaTeX_Fraktur-Regular.CTYiF6lA.woff2 +0 -0
  113. octop/dashboard/assets/KaTeX_Fraktur-Regular.Dxdc4cR9.woff +0 -0
  114. octop/dashboard/assets/KaTeX_Main-Bold.Cx986IdX.woff2 +0 -0
  115. octop/dashboard/assets/KaTeX_Main-Bold.Jm3AIy58.woff +0 -0
  116. octop/dashboard/assets/KaTeX_Main-Bold.waoOVXN0.ttf +0 -0
  117. octop/dashboard/assets/KaTeX_Main-BoldItalic.DxDJ3AOS.woff2 +0 -0
  118. octop/dashboard/assets/KaTeX_Main-BoldItalic.DzxPMmG6.ttf +0 -0
  119. octop/dashboard/assets/KaTeX_Main-BoldItalic.SpSLRI95.woff +0 -0
  120. octop/dashboard/assets/KaTeX_Main-Italic.3WenGoN9.ttf +0 -0
  121. octop/dashboard/assets/KaTeX_Main-Italic.BMLOBm91.woff +0 -0
  122. octop/dashboard/assets/KaTeX_Main-Italic.NWA7e6Wa.woff2 +0 -0
  123. octop/dashboard/assets/KaTeX_Main-Regular.B22Nviop.woff2 +0 -0
  124. octop/dashboard/assets/KaTeX_Main-Regular.Dr94JaBh.woff +0 -0
  125. octop/dashboard/assets/KaTeX_Main-Regular.ypZvNtVU.ttf +0 -0
  126. octop/dashboard/assets/KaTeX_Math-BoldItalic.B3XSjfu4.ttf +0 -0
  127. octop/dashboard/assets/KaTeX_Math-BoldItalic.CZnvNsCZ.woff2 +0 -0
  128. octop/dashboard/assets/KaTeX_Math-BoldItalic.iY-2wyZ7.woff +0 -0
  129. octop/dashboard/assets/KaTeX_Math-Italic.DA0__PXp.woff +0 -0
  130. octop/dashboard/assets/KaTeX_Math-Italic.flOr_0UB.ttf +0 -0
  131. octop/dashboard/assets/KaTeX_Math-Italic.t53AETM-.woff2 +0 -0
  132. octop/dashboard/assets/KaTeX_SansSerif-Bold.CFMepnvq.ttf +0 -0
  133. octop/dashboard/assets/KaTeX_SansSerif-Bold.D1sUS0GD.woff2 +0 -0
  134. octop/dashboard/assets/KaTeX_SansSerif-Bold.DbIhKOiC.woff +0 -0
  135. octop/dashboard/assets/KaTeX_SansSerif-Italic.C3H0VqGB.woff2 +0 -0
  136. octop/dashboard/assets/KaTeX_SansSerif-Italic.DN2j7dab.woff +0 -0
  137. octop/dashboard/assets/KaTeX_SansSerif-Italic.YYjJ1zSn.ttf +0 -0
  138. octop/dashboard/assets/KaTeX_SansSerif-Regular.BNo7hRIc.ttf +0 -0
  139. octop/dashboard/assets/KaTeX_SansSerif-Regular.CS6fqUqJ.woff +0 -0
  140. octop/dashboard/assets/KaTeX_SansSerif-Regular.DDBCnlJ7.woff2 +0 -0
  141. octop/dashboard/assets/KaTeX_Script-Regular.C5JkGWo-.ttf +0 -0
  142. octop/dashboard/assets/KaTeX_Script-Regular.D3wIWfF6.woff2 +0 -0
  143. octop/dashboard/assets/KaTeX_Script-Regular.D5yQViql.woff +0 -0
  144. octop/dashboard/assets/KaTeX_Size1-Regular.C195tn64.woff +0 -0
  145. octop/dashboard/assets/KaTeX_Size1-Regular.Dbsnue_I.ttf +0 -0
  146. octop/dashboard/assets/KaTeX_Size1-Regular.mCD8mA8B.woff2 +0 -0
  147. octop/dashboard/assets/KaTeX_Size2-Regular.B7gKUWhC.ttf +0 -0
  148. octop/dashboard/assets/KaTeX_Size2-Regular.Dy4dx90m.woff2 +0 -0
  149. octop/dashboard/assets/KaTeX_Size2-Regular.oD1tc_U0.woff +0 -0
  150. octop/dashboard/assets/KaTeX_Size3-Regular.CTq5MqoE.woff +0 -0
  151. octop/dashboard/assets/KaTeX_Size3-Regular.DgpXs0kz.ttf +0 -0
  152. octop/dashboard/assets/KaTeX_Size4-Regular.BF-4gkZK.woff +0 -0
  153. octop/dashboard/assets/KaTeX_Size4-Regular.DWFBv043.ttf +0 -0
  154. octop/dashboard/assets/KaTeX_Size4-Regular.Dl5lxZxV.woff2 +0 -0
  155. octop/dashboard/assets/KaTeX_Typewriter-Regular.C0xS9mPB.woff +0 -0
  156. octop/dashboard/assets/KaTeX_Typewriter-Regular.CO6r4hn1.woff2 +0 -0
  157. octop/dashboard/assets/KaTeX_Typewriter-Regular.D3Ib7_Hf.ttf +0 -0
  158. octop/dashboard/assets/PageShell.CKvKZwMf.css +1 -0
  159. octop/dashboard/assets/PageShell.CYa_9Pj-.js +1 -0
  160. octop/dashboard/assets/anthropic.hp89qtrg.png +0 -0
  161. octop/dashboard/assets/arc.Cl2HwFRm.js +1 -0
  162. octop/dashboard/assets/architectureDiagram-3BPJPVTR.eadRtRG0.js +36 -0
  163. octop/dashboard/assets/band.CudBVStT.js +1 -0
  164. octop/dashboard/assets/blockDiagram-GPEHLZMM.CFzZeQPP.js +132 -0
  165. octop/dashboard/assets/c4Diagram-AAUBKEIU.glG-rBlj.js +10 -0
  166. octop/dashboard/assets/channel.Tnvc-QZR.js +1 -0
  167. octop/dashboard/assets/chunk-2J33WTMH.QcG8AiHb.js +1 -0
  168. octop/dashboard/assets/chunk-4BX2VUAB.CzTG6JmE.js +1 -0
  169. octop/dashboard/assets/chunk-55IACEB6.HStMUyMv.js +1 -0
  170. octop/dashboard/assets/chunk-727SXJPM.CJwn-iid.js +206 -0
  171. octop/dashboard/assets/chunk-AQP2D5EJ.A9Nrnth_.js +231 -0
  172. octop/dashboard/assets/chunk-FMBD7UC4.CMSPrfxF.js +15 -0
  173. octop/dashboard/assets/chunk-ND2GUHAM.DH3iHwHo.js +1 -0
  174. octop/dashboard/assets/chunk-QZHKN3VN.BcGnwoJl.js +1 -0
  175. octop/dashboard/assets/classDiagram-4FO5ZUOK.CG3lADpb.js +1 -0
  176. octop/dashboard/assets/classDiagram-v2-Q7XG4LA2.CG3lADpb.js +1 -0
  177. octop/dashboard/assets/codebuddy.CQQPq5E1.png +0 -0
  178. octop/dashboard/assets/constants.BYIQ2ClJ.js +1 -0
  179. octop/dashboard/assets/cose-bilkent-S5V4N54A.G3gINKU0.js +1 -0
  180. octop/dashboard/assets/cytoscape.esm.DqnC6J6I.js +331 -0
  181. octop/dashboard/assets/dagre-BM42HDAG.Znv6Zq9M.js +4 -0
  182. octop/dashboard/assets/dashscope.ClgxyOUM.png +0 -0
  183. octop/dashboard/assets/deepseek.BfIKgrKz.png +0 -0
  184. octop/dashboard/assets/defaultLocale.CcTwRAjA.js +1 -0
  185. octop/dashboard/assets/diagram-2AECGRRQ.3XVe1v0y.js +43 -0
  186. octop/dashboard/assets/diagram-5GNKFQAL.7YvbeyUl.js +10 -0
  187. octop/dashboard/assets/diagram-KO2AKTUF.CdUJQsTu.js +3 -0
  188. octop/dashboard/assets/diagram-LMA3HP47.DST4MQVG.js +24 -0
  189. octop/dashboard/assets/diagram-OG6HWLK6.D6zja04U.js +24 -0
  190. octop/dashboard/assets/erDiagram-TEJ5UH35.DgVn-Uwb.js +85 -0
  191. octop/dashboard/assets/feishu.yzJIGqLk.svg +1 -0
  192. octop/dashboard/assets/fileTreeIcon.acLzE26c.js +1 -0
  193. octop/dashboard/assets/flowDiagram-I6XJVG4X.D0MjS4p8.js +162 -0
  194. octop/dashboard/assets/ganttDiagram-6RSMTGT7.D8CQYZm_.js +292 -0
  195. octop/dashboard/assets/gitGraphDiagram-PVQCEYII.DX4yW5qz.js +106 -0
  196. octop/dashboard/assets/graph.Bad5vU0y.js +1 -0
  197. octop/dashboard/assets/groq.DxjL3oyr.png +0 -0
  198. octop/dashboard/assets/index.4xI3byn0.js +2 -0
  199. octop/dashboard/assets/index.B1fbxz08.js +1 -0
  200. octop/dashboard/assets/index.BAjo2GUc.css +1 -0
  201. octop/dashboard/assets/index.BG_6T3dn.css +1 -0
  202. octop/dashboard/assets/index.BdNZdymJ.js +5 -0
  203. octop/dashboard/assets/index.Bl7ZGsUK.css +1 -0
  204. octop/dashboard/assets/index.Bnrw5Sb2.js +1 -0
  205. octop/dashboard/assets/index.BpVsbwuO.css +1 -0
  206. octop/dashboard/assets/index.Btz3EUg4.css +1 -0
  207. octop/dashboard/assets/index.C0urAYZ6.css +1 -0
  208. octop/dashboard/assets/index.CASf_0TK.css +1 -0
  209. octop/dashboard/assets/index.CEWg4gyY.css +1 -0
  210. octop/dashboard/assets/index.CGtg8EsR.js +2 -0
  211. octop/dashboard/assets/index.CHqnSOwi.js +9 -0
  212. octop/dashboard/assets/index.CLJms_eO.css +1 -0
  213. octop/dashboard/assets/index.CNewRfr0.js +1 -0
  214. octop/dashboard/assets/index.COrVJkIe.js +11 -0
  215. octop/dashboard/assets/index.CP8dlkp_.js +1 -0
  216. octop/dashboard/assets/index.Ch36pMuX.js +1 -0
  217. octop/dashboard/assets/index.CimF3E3G.js +2 -0
  218. octop/dashboard/assets/index.CulANnwd.css +1 -0
  219. octop/dashboard/assets/index.D239sZTY.js +57 -0
  220. octop/dashboard/assets/index.D9qLDt6I.js +1 -0
  221. octop/dashboard/assets/index.DCLNobHW.css +1 -0
  222. octop/dashboard/assets/index.D_ph3bZl.css +1 -0
  223. octop/dashboard/assets/index.DheamfNW.js +5 -0
  224. octop/dashboard/assets/index.DjvK7nUh.css +1 -0
  225. octop/dashboard/assets/index.Dlve_rSO.js +93 -0
  226. octop/dashboard/assets/index.DxZfFW_G.js +6 -0
  227. octop/dashboard/assets/index.Rlfcrogd.js +1 -0
  228. octop/dashboard/assets/index.TprDt3nU.js +1 -0
  229. octop/dashboard/assets/index.VmfrCmRb.js +1 -0
  230. octop/dashboard/assets/index.aF0t2U6g.js +1 -0
  231. octop/dashboard/assets/index.cis3wmyt.css +1 -0
  232. octop/dashboard/assets/index.kFsyBpab.js +1 -0
  233. octop/dashboard/assets/index.module.CXlCdyLH.js +1 -0
  234. octop/dashboard/assets/index.module.D-vNudb_.js +1 -0
  235. octop/dashboard/assets/index.smnqylM0.js +1 -0
  236. octop/dashboard/assets/index.te6A7T69.css +1 -0
  237. octop/dashboard/assets/infoDiagram-5YYISTIA.cRdgBzuF.js +2 -0
  238. octop/dashboard/assets/init.DDlSWoZO.js +1 -0
  239. octop/dashboard/assets/ishikawaDiagram-YF4QCWOH.CiMYHEHO.js +70 -0
  240. octop/dashboard/assets/journeyDiagram-JHISSGLW.BDtXEn5s.js +139 -0
  241. octop/dashboard/assets/kanban-definition-UN3LZRKU.BNa2MaBb.js +89 -0
  242. octop/dashboard/assets/layout.CYcqwDbi.js +1 -0
  243. octop/dashboard/assets/linear.CWEflT9X.js +1 -0
  244. octop/dashboard/assets/markdown.B5dQ-dwW.js +1 -0
  245. octop/dashboard/assets/mermaid.core.58x0H9Is.js +309 -0
  246. octop/dashboard/assets/mimo.pbhfe3Fd.svg +17 -0
  247. octop/dashboard/assets/mindmap-definition-RKZ34NQL.ZufY01A0.js +96 -0
  248. octop/dashboard/assets/minimax.B0Eo-1V9.png +0 -0
  249. octop/dashboard/assets/modelscope.CJyewHiF.png +0 -0
  250. octop/dashboard/assets/moonshot.DRX5773U.webp +0 -0
  251. octop/dashboard/assets/mqtt.IKSdJE9d.png +0 -0
  252. octop/dashboard/assets/octop.tjp5Yqxl.svg +113 -0
  253. octop/dashboard/assets/ollama.BiKnEc5r.png +0 -0
  254. octop/dashboard/assets/openai.-2_yMGcs.png +0 -0
  255. octop/dashboard/assets/openrouter.CT0jBAsT.png +0 -0
  256. octop/dashboard/assets/ordinal.djD5ulR0.js +1 -0
  257. octop/dashboard/assets/pieDiagram-4H26LBE5.C2YofDJz.js +30 -0
  258. octop/dashboard/assets/quadrantDiagram-W4KKPZXB.oAfFXx_t.js +7 -0
  259. octop/dashboard/assets/requirementDiagram-4Y6WPE33.DbEggKHD.js +84 -0
  260. octop/dashboard/assets/sankeyDiagram-5OEKKPKP.BdVKDd9W.js +40 -0
  261. octop/dashboard/assets/sequenceDiagram-3UESZ5HK.BejYSZeY.js +162 -0
  262. octop/dashboard/assets/stateDiagram-AJRCARHV.B9DhiTvi.js +1 -0
  263. octop/dashboard/assets/stateDiagram-v2-BHNVJYJU.DTGniJVN.js +1 -0
  264. octop/dashboard/assets/step.2vt-w7iF.js +1 -0
  265. octop/dashboard/assets/sw-register.CCP-LE6W.js +1 -0
  266. octop/dashboard/assets/tencent-ima.DBik34z0.png +0 -0
  267. octop/dashboard/assets/tencent-lexiang.DQ8U6HGW.png +0 -0
  268. octop/dashboard/assets/time.D3fWl3Po.js +1 -0
  269. octop/dashboard/assets/timeline-definition-PNZ67QCA.DTgOcay1.js +120 -0
  270. octop/dashboard/assets/useStorageBackends.CedKppyD.js +1 -0
  271. octop/dashboard/assets/vendor-antd.BsSrZIW6.js +441 -0
  272. octop/dashboard/assets/vendor-icons.CE8oId9T.js +676 -0
  273. octop/dashboard/assets/vendor-markdown.CGehU_hi.js +297 -0
  274. octop/dashboard/assets/vendor-markdown.DVjVcbQd.css +1 -0
  275. octop/dashboard/assets/vendor-react.C7arMZQ3.js +51 -0
  276. octop/dashboard/assets/vendor-utils.eg3kvSM3.js +9 -0
  277. octop/dashboard/assets/vendor-xterm.BnL5uhB6.js +9 -0
  278. octop/dashboard/assets/vendor-xterm.DYP7pi_n.css +32 -0
  279. octop/dashboard/assets/vennDiagram-CIIHVFJN.CPbmYMe4.js +34 -0
  280. octop/dashboard/assets/wardley-L42UT6IY.DowHOmdw.js +173 -0
  281. octop/dashboard/assets/wardleyDiagram-YWT4CUSO.BSJG-6Ts.js +78 -0
  282. octop/dashboard/assets/xiaoyi.sDsAd89K.png +0 -0
  283. octop/dashboard/assets/xychartDiagram-2RQKCTM6.R6aKT3E4.js +7 -0
  284. octop/dashboard/assets/zhipu.CFgqzqwQ.png +0 -0
  285. octop/dashboard/fonts/FSPixelSansUnicode-Regular.ttf +0 -0
  286. octop/dashboard/index.html +47 -0
  287. octop/dashboard/lightclaw-symbol-blue.png +0 -0
  288. octop/dashboard/lightclaw-symbol.png +0 -0
  289. octop/dashboard/lightclaw_name.png +0 -0
  290. octop/dashboard/lightclaw_name_dark.png +0 -0
  291. octop/dashboard/logo.png +0 -0
  292. octop/dashboard/manifest.json +39 -0
  293. octop/dashboard/octop-symbol-blue.png +0 -0
  294. octop/dashboard/octop-symbol.png +0 -0
  295. octop/dashboard/octop_name.png +0 -0
  296. octop/dashboard/octop_name_dark.png +0 -0
  297. octop/dashboard/offline.html +74 -0
  298. octop/dashboard/pcm-processor.js +67 -0
  299. octop/dashboard/pwa-192.png +0 -0
  300. octop/dashboard/pwa-512.png +0 -0
  301. octop/dashboard/sw.js +1 -0
  302. octop/dashboard/workbox-bdb082da.js +1 -0
  303. octop/i18n/__init__.py +32 -0
  304. octop/i18n/domains/__init__.py +18 -0
  305. octop/i18n/domains/channel.py +16 -0
  306. octop/i18n/domains/errors.py +12 -0
  307. octop/i18n/domains/slash.py +23 -0
  308. octop/i18n/domains/tls.py +9 -0
  309. octop/i18n/domains/tools.py +28 -0
  310. octop/i18n/en.json +345 -0
  311. octop/i18n/loader.py +64 -0
  312. octop/i18n/zh.json +345 -0
  313. octop/infra/__init__.py +21 -0
  314. octop/infra/agents/acp_settings.py +117 -0
  315. octop/infra/agents/connectors/__init__.py +12 -0
  316. octop/infra/agents/connectors/baidu_token.py +90 -0
  317. octop/infra/agents/connectors/builder.py +352 -0
  318. octop/infra/agents/connectors/catalog.py +289 -0
  319. octop/infra/agents/connectors/crypto.py +28 -0
  320. octop/infra/agents/connectors/gateway/__init__.py +11 -0
  321. octop/infra/agents/connectors/gateway/adapters/__init__.py +1 -0
  322. octop/infra/agents/connectors/gateway/adapters/qq_mail.py +169 -0
  323. octop/infra/agents/connectors/gateway/adapters/tencent_ima.py +144 -0
  324. octop/infra/agents/connectors/gateway/adapters/tencent_news.py +65 -0
  325. octop/infra/agents/connectors/gateway/adapters/wechat_reading.py +85 -0
  326. octop/infra/agents/connectors/gateway/langchain.py +108 -0
  327. octop/infra/agents/connectors/gateway/protocol.py +78 -0
  328. octop/infra/agents/connectors/gateway/registry.py +49 -0
  329. octop/infra/agents/connectors/oauth/__init__.py +31 -0
  330. octop/infra/agents/connectors/oauth/baidu.py +239 -0
  331. octop/infra/agents/connectors/oauth/builtin.py +42 -0
  332. octop/infra/agents/connectors/oauth/mcp.py +162 -0
  333. octop/infra/agents/connectors/oauth/pkce.py +14 -0
  334. octop/infra/agents/connectors/oauth/registry.py +291 -0
  335. octop/infra/agents/connectors/probe.py +261 -0
  336. octop/infra/agents/connectors/service.py +129 -0
  337. octop/infra/agents/context_breakdown.py +251 -0
  338. octop/infra/agents/experts/catalog.py +185 -0
  339. octop/infra/agents/experts/library/cvm-ai-doctor/HEARTBEAT.md +225 -0
  340. octop/infra/agents/experts/library/cvm-ai-doctor/IDENTITY.md +48 -0
  341. octop/infra/agents/experts/library/cvm-ai-doctor/SOUL.md +123 -0
  342. octop/infra/agents/experts/library/cvm-ai-doctor/manifest.json +318 -0
  343. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/API.md +167 -0
  344. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/AUDIT-INDEX.txt +171 -0
  345. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/AUDIT-REPORT-2026-05-09.md +410 -0
  346. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/AUDIT-SUMMARY.txt +270 -0
  347. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/COMMAND-SAMPLING-AUDIT.txt +175 -0
  348. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/README.md +161 -0
  349. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/SKILL.md +457 -0
  350. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/_archived/SKILL-v1-original.md.bak +1136 -0
  351. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/_archived/SKILL-v3-lean.md +420 -0
  352. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/_backup/00-quick-reference.md +186 -0
  353. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/_backup/00-scenario-index.md +1251 -0
  354. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/_backup/disk-smart.md +573 -0
  355. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/_backup/hardware-other.md +943 -0
  356. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/_backup/resource-saturation.md +848 -0
  357. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/_backup/system-logs.md +709 -0
  358. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/_backup/time-sync.md +675 -0
  359. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/ai/cli-seeders/ai-clis.md +3 -0
  360. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/ai/cli-seeders/evaltools.md +7 -0
  361. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/ai/local-ai/audit-local-ai-packages.md +97 -0
  362. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/ai/local-ai/comfyui/setup-comfyui.md +75 -0
  363. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/ai/local-ai/gpu-ai-ml-assessment.md +441 -0
  364. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/ai/local-ai/ollama/prune-ollama.md +14 -0
  365. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/ai/local-ai/ollama/setup-ollama.md +57 -0
  366. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/ai/local-ai/ollama/suggest-ollama-models.md +78 -0
  367. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/ai/mcp/manage-mcp-servers.md +104 -0
  368. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/ai/stt/setup-speech-to-text.md +112 -0
  369. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/audio/mic-always-100.md +5 -0
  370. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/audio/set-as-default-mic.md +2 -0
  371. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/backup/identify-backup-targets.md +109 -0
  372. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/bluetooth/reset-bluetooth.md +330 -0
  373. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/bluetooth/troubleshoot-bluetooth.md +300 -0
  374. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/configuration/bash/add-bash-alias.md +9 -0
  375. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/configuration/bash/validate-bashrc.md +99 -0
  376. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/configuration/check-path.md +209 -0
  377. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/configuration/git/check-git-config.md +103 -0
  378. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/configuration/git/check-global-gitignore.md +145 -0
  379. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/configuration/permissions/debug-folder-permissions.md +234 -0
  380. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/configuration/ssh/list-ssh-connections.md +91 -0
  381. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/configuration/ssh/manage-ssh-keys.md +91 -0
  382. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/debugging/boot/check-boot-logs.md +43 -0
  383. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/debugging/boot/failed-boot-services.md +7 -0
  384. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/debugging/boot/review-boot.md +75 -0
  385. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/debugging/diagnose-crash.md +157 -0
  386. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/debugging/diagnose-slowdown.md +155 -0
  387. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/dev-tools/docker/setup-docker.md +258 -0
  388. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/dev-tools/ides/optimize-vscode-installation.md +131 -0
  389. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/dev-tools/node/node-version-check.md +1 -0
  390. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/dev-tools/node/npm-install.md +1 -0
  391. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/dev-tools/python/conda/manage-conda-environments.md +368 -0
  392. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/dev-tools/python/conda/setup-conda-data-analysis.md +88 -0
  393. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/dev-tools/python/conda/setup-conda-llm-finetune.md +108 -0
  394. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/dev-tools/python/conda/setup-conda-rocm.md +86 -0
  395. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/dev-tools/python/conda/setup-conda-stt-finetune.md +103 -0
  396. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/dev-tools/python/identify-python-environments.md +89 -0
  397. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/dev-tools/python/pyenv/setup-pyenv.md +52 -0
  398. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/dev-tools/sdks/sdk-check.md +2 -0
  399. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/dev-tools/suggest-ides.md +115 -0
  400. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/dev-tools/yadm/check-yadm.md +51 -0
  401. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/dev-tools/yadm/manually-update-yadm.md +49 -0
  402. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/display/capture-current-config.md +8 -0
  403. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/display/list-connected-displays.md +72 -0
  404. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/display/optimize-display-scaling.md +135 -0
  405. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/display/setup-multi-monitor.md +90 -0
  406. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/display/switch-display-profile.md +172 -0
  407. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/fonts/install-google-fonts.md +80 -0
  408. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/fonts/list-fonts.md +79 -0
  409. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/fs-optimisation/chunk/chunk-this-dir.md +5 -0
  410. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/fs-optimisation/consolidate/consolidate-folders.md +46 -0
  411. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/fs-optimisation/flatten/flatten.md +7 -0
  412. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/fs-optimisation/idate/suggest-folder-structure.md +52 -0
  413. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/fs-optimisation/separate/separate-by-filetype.md +3 -0
  414. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/fs-optimisation/separate/separate-photos-and-video.md +5 -0
  415. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/fs-optimisation/tidy-up/desktop-tidy.md +9 -0
  416. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/fs-optimisation/tidy-up/organize-loose-files.md +32 -0
  417. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/hardware/check-gpu-os-optimization.md +84 -0
  418. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/hardware/evaluate-wake-devices.md +75 -0
  419. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/hardware/hardware-profilers/by-component/profile-cpu.md +420 -0
  420. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/hardware/hardware-profilers/by-component/profile-gpu.md +357 -0
  421. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/hardware/hardware-profilers/by-component/profile-motherboard.md +456 -0
  422. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/hardware/hardware-profilers/by-component/profile-ram.md +278 -0
  423. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/hardware/hardware-profilers/hardware-identity.md +139 -0
  424. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/hardware/hardware-profilers/hardware-profile.md +245 -0
  425. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/hardware/review-gpu-settings.md +104 -0
  426. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/installation/clis/install-brew.md +123 -0
  427. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/installation/clis/install-gh-cli.md +309 -0
  428. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/installation/clis/install-pipx.md +321 -0
  429. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/installation/clis/install-sdkman.md +180 -0
  430. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/installation/clis/install-yadm.md +111 -0
  431. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/installation/clis/setup-aws-cli.md +40 -0
  432. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/installation/clis/setup-b2-cli.md +40 -0
  433. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/installation/clis/setup-rclone.md +41 -0
  434. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/installation/guis/input-remapper.md +1 -0
  435. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/installation/install-from-gh.md +7 -0
  436. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/installation/install-this.md +3 -0
  437. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/kde/backup-kde-settings.md +248 -0
  438. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/kde/list-kde-shortcuts.md +291 -0
  439. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/kde/optimize-kde-performance.md +288 -0
  440. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/kde/reset-plasma-config.md +249 -0
  441. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/logging/analyze-journal-errors.md +118 -0
  442. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/logging/check-failed-units.md +204 -0
  443. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/logging/monitor-system-resources.md +139 -0
  444. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/logging/tail-system-logs.md +115 -0
  445. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/media/check-codecs.md +89 -0
  446. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/network/diagnose-network-issues.md +87 -0
  447. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/network/lan/diagnose-lan-connectivity.md +80 -0
  448. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/network/lan/lan-ssh-setup.md +11 -0
  449. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/network/lan/scan-lan.md +47 -0
  450. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/network/lan/smart-arp.md +17 -0
  451. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/optimisation/large-files.md +7 -0
  452. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/optimisation/optimize-boot-speed.md +73 -0
  453. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/package-management/check-apt-health.md +183 -0
  454. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/package-management/check-third-party-repos.md +54 -0
  455. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/package-management/configure-auto-updates.md +186 -0
  456. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/package-management/evaluate-installed-software.md +50 -0
  457. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/package-management/identify-unused-packages.md +55 -0
  458. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/package-management/install-brew.md +1 -0
  459. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/peripherals/evtest.md +3 -0
  460. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/peripherals/list-usb-devices.md +277 -0
  461. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/power-mgmt/hibernation.md +1 -0
  462. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/power-mgmt/wol-setup.md +14 -0
  463. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/program-management/install-github-program.md +50 -0
  464. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/repositories/delete-old-repos.md +15 -0
  465. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/repositories/organise-repos.md +17 -0
  466. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/security/audits/probe-vulnerabilities.md +59 -0
  467. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/security/audits/write-audit.md +13 -0
  468. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/security/auth/yubi-setup.md +7 -0
  469. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/security/av/install-clamav.md +89 -0
  470. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/security/detect-spyware.md +62 -0
  471. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/security/firewall/analyze-firewall.md +286 -0
  472. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/security/posture-diagnostics/security-posture-check.md +98 -0
  473. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/storage/health-checks/btrfs-snapper-health.md +41 -0
  474. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/storage/health-checks/check-drive-health.md +117 -0
  475. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/storage/health-checks/smart-status.md +43 -0
  476. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/storage/network-mounts/setup-nfs-mounts.md +154 -0
  477. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/storage/network-mounts/setup-smb-mounts.md +201 -0
  478. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/storage/raid/check-raid-config.md +54 -0
  479. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/storage/storage-deep-dive.md +88 -0
  480. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/system-health/optimize-pipewire.md +57 -0
  481. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/system-health/review-startup-services.md +102 -0
  482. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/system-health/system-health-checkup.md +118 -0
  483. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/system-health/system-upgrade.md +21 -0
  484. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/utilities/diagnose-printers.md +54 -0
  485. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/video/codecs.md +1 -0
  486. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/commands/virtualization/check-virtualization.md +318 -0
  487. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/docs/architecture.md +409 -0
  488. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/docs/cvm-doctor-report.html +851 -0
  489. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/docs/scenario-decision-guide.md +302 -0
  490. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/docs/scenario-index-maintenance.md +208 -0
  491. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/examples/cron-job-spec.json +34 -0
  492. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/references/00-scenario-index.md +457 -0
  493. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/references/cluster-deep-analysis.md +463 -0
  494. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/references/cluster-discovery.md +169 -0
  495. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/references/cluster-health-score.md +173 -0
  496. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/references/cluster-quick-check.md +230 -0
  497. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/references/cluster-remediation.md +215 -0
  498. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/references/cvm-self-diagnosis-repair.md +219 -0
  499. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/references/disk-smart-deep.md +209 -0
  500. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/references/disk-smart-quick.md +145 -0
  501. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/references/hardware-health-deep.md +276 -0
  502. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/references/hardware-health-quick.md +236 -0
  503. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/references/resource-saturation-deep-combined.md +345 -0
  504. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/references/resource-saturation-deep-cpu.md +278 -0
  505. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/references/resource-saturation-deep-disk.md +343 -0
  506. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/references/resource-saturation-deep-memory.md +282 -0
  507. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/references/resource-saturation-deep-network.md +297 -0
  508. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/references/resource-saturation-quick.md +342 -0
  509. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/references/skill-collaboration-tencentcloud.md +276 -0
  510. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/references/skill-collaboration.md +223 -0
  511. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/references/system-logs-deep-auth.md +111 -0
  512. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/references/system-logs-deep-fs.md +106 -0
  513. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/references/system-logs-deep-kernel.md +196 -0
  514. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/references/system-logs-deep-oom.md +176 -0
  515. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/references/system-logs-deep-service.md +102 -0
  516. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/references/system-logs-quick.md +327 -0
  517. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/references/time-sync.md +675 -0
  518. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/scripts/README.md +141 -0
  519. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/scripts/analyze_stats.sh +287 -0
  520. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/scripts/cluster_deep_cpu.sh +55 -0
  521. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/scripts/cluster_deep_disk.sh +56 -0
  522. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/scripts/cluster_deep_memory.sh +50 -0
  523. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/scripts/cluster_deep_network.sh +58 -0
  524. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/scripts/cluster_deep_ssh.sh +53 -0
  525. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/scripts/cluster_os_snapshot.sh +39 -0
  526. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/scripts/cluster_patrol_record.py +171 -0
  527. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/scripts/cluster_patrol_server.py +226 -0
  528. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/scripts/cluster_score.sh +292 -0
  529. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/scripts/combined_analysis.sh +259 -0
  530. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/scripts/deep_scan.sh +452 -0
  531. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/scripts/generate_promo.py +53 -0
  532. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/scripts/log_stats.sh +36 -0
  533. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/scripts/patrol.sh +453 -0
  534. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/scripts/patrol_server.py +139 -0
  535. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/scripts/quick_scan.ps1 +182 -0
  536. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/scripts/quick_scan.sh +415 -0
  537. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/scripts/serve_dashboard.sh +57 -0
  538. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/scripts/setup-lightclaw-cron.sh +199 -0
  539. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/scripts/sync_skill.sh +136 -0
  540. octop/infra/agents/experts/library/cvm-ai-doctor/skills/cvm-ai-doctor/version.ini +12 -0
  541. octop/infra/agents/experts/library/cvm-cluster-doctor/HEARTBEAT.md +221 -0
  542. octop/infra/agents/experts/library/cvm-cluster-doctor/IDENTITY.md +53 -0
  543. octop/infra/agents/experts/library/cvm-cluster-doctor/SOUL.md +151 -0
  544. octop/infra/agents/experts/library/cvm-cluster-doctor/manifest.json +333 -0
  545. octop/infra/agents/experts/library/cvm-cluster-doctor/skills/tencentcloud-infra/SKILL.md +557 -0
  546. octop/infra/agents/experts/library/cvm-cluster-doctor/skills/tencentcloud-infra/_meta.json +6 -0
  547. octop/infra/agents/experts/library/cvm-cluster-doctor/skills/tencentcloud-infra/references/auto-check-resource.md +90 -0
  548. octop/infra/agents/experts/library/cvm-cluster-doctor/skills/tencentcloud-infra/references/cbs-bindto-cvm.md +437 -0
  549. octop/infra/agents/experts/library/cvm-cluster-doctor/skills/tencentcloud-infra/references/cloud-service-healthcheck.md +688 -0
  550. octop/infra/agents/experts/library/cvm-cluster-doctor/skills/tencentcloud-infra/references/cvm-security-check.md +192 -0
  551. octop/infra/agents/experts/library/cvm-cluster-doctor/skills/tencentcloud-infra/references/lighthouse-app-deploy.md +516 -0
  552. octop/infra/agents/experts/library/cvm-cluster-doctor/skills/tencentcloud-infra/references/lighthouse-openclaw-setup.md +154 -0
  553. octop/infra/agents/experts/library/cvm-cluster-doctor/skills/tencentcloud-infra/references/lighthouse-website-setup.md +308 -0
  554. octop/infra/agents/experts/library/cvm-cluster-doctor/skills/tencentcloud-infra/scripts/tccli-oauth-helper.py +361 -0
  555. octop/infra/agents/experts/library/cvm-cluster-doctor/skills/tencentcloud-infra/scripts/whoami.sh +17 -0
  556. octop/infra/agents/experts/library/default/IDENTITY.md +48 -0
  557. octop/infra/agents/experts/library/default/SOUL.md +48 -0
  558. octop/infra/agents/experts/library/default/manifest.json +21 -0
  559. octop/infra/agents/experts/library/general-assistant/MEMORY.md +2 -0
  560. octop/infra/agents/experts/library/general-assistant/SOUL.md +10 -0
  561. octop/infra/agents/experts/library/general-assistant/manifest.json +107 -0
  562. octop/infra/agents/experts/library/general-assistant/meta.yaml +4 -0
  563. octop/infra/agents/experts/library/general-assistant/skills/octop-assistant/SKILL.md +510 -0
  564. octop/infra/agents/experts/library/general-assistant/skills.json +1 -0
  565. octop/infra/agents/experts/library/news-trend/BOOTSTRAP.md +0 -0
  566. octop/infra/agents/experts/library/news-trend/HEARTBEAT.md +38 -0
  567. octop/infra/agents/experts/library/news-trend/IDENTITY.md +53 -0
  568. octop/infra/agents/experts/library/news-trend/SOUL.md +314 -0
  569. octop/infra/agents/experts/library/news-trend/manifest.json +70 -0
  570. octop/infra/agents/experts/library/news-trend/skills/daily-hot-news/SKILL.md +247 -0
  571. octop/infra/agents/experts/library/news-trend/skills/daily-hot-news/references/api-formats.md +105 -0
  572. octop/infra/agents/experts/library/news-trend/skills/daily-hot-news/references/dailyhot-api.md +183 -0
  573. octop/infra/agents/experts/library/news-trend/skills/daily-hot-news/references/sources.md +640 -0
  574. octop/infra/agents/experts/library/news-trend/skills/daily-hot-news/scripts/fetch_dailyhot.mjs +41 -0
  575. octop/infra/agents/experts/library/office-automation/IDENTITY.md +38 -0
  576. octop/infra/agents/experts/library/office-automation/SOUL.md +23 -0
  577. octop/infra/agents/experts/library/office-automation/manifest.json +253 -0
  578. octop/infra/agents/experts/library/office-automation/skills/docx/LICENSE.txt +30 -0
  579. octop/infra/agents/experts/library/office-automation/skills/docx/SKILL.md +487 -0
  580. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/__init__.py +1 -0
  581. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/accept_changes.py +134 -0
  582. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/comment.py +317 -0
  583. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/helpers/__init__.py +0 -0
  584. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/helpers/merge_runs.py +192 -0
  585. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/helpers/simplify_redlines.py +196 -0
  586. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/pack.py +155 -0
  587. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  588. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  589. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  590. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  591. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  592. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  593. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  594. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  595. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  596. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  597. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  598. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  599. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  600. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  601. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  602. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  603. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  604. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  605. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  606. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  607. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  608. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  609. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  610. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  611. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  612. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  613. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  614. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  615. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  616. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  617. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  618. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/mce/mc.xsd +75 -0
  619. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  620. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  621. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  622. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  623. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  624. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  625. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  626. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/soffice.py +218 -0
  627. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/unpack.py +131 -0
  628. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/validate.py +113 -0
  629. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/validators/__init__.py +15 -0
  630. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/validators/base.py +797 -0
  631. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/validators/docx.py +418 -0
  632. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/validators/pptx.py +262 -0
  633. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/office/validators/redlining.py +240 -0
  634. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/templates/comments.xml +3 -0
  635. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/templates/commentsExtended.xml +3 -0
  636. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
  637. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/templates/commentsIds.xml +3 -0
  638. octop/infra/agents/experts/library/office-automation/skills/docx/scripts/templates/people.xml +3 -0
  639. octop/infra/agents/experts/library/office-automation/skills/file_reader/SKILL.md +58 -0
  640. octop/infra/agents/experts/library/office-automation/skills/news/SKILL.md +47 -0
  641. octop/infra/agents/experts/library/office-automation/skills/pdf/LICENSE.txt +30 -0
  642. octop/infra/agents/experts/library/office-automation/skills/pdf/SKILL.md +329 -0
  643. octop/infra/agents/experts/library/office-automation/skills/pdf/forms.md +298 -0
  644. octop/infra/agents/experts/library/office-automation/skills/pdf/reference.md +612 -0
  645. octop/infra/agents/experts/library/office-automation/skills/pdf/scripts/check_bounding_boxes.py +71 -0
  646. octop/infra/agents/experts/library/office-automation/skills/pdf/scripts/check_fillable_fields.py +11 -0
  647. octop/infra/agents/experts/library/office-automation/skills/pdf/scripts/convert_pdf_to_images.py +31 -0
  648. octop/infra/agents/experts/library/office-automation/skills/pdf/scripts/create_validation_image.py +37 -0
  649. octop/infra/agents/experts/library/office-automation/skills/pdf/scripts/extract_form_field_info.py +128 -0
  650. octop/infra/agents/experts/library/office-automation/skills/pdf/scripts/extract_form_structure.py +116 -0
  651. octop/infra/agents/experts/library/office-automation/skills/pdf/scripts/fill_fillable_fields.py +102 -0
  652. octop/infra/agents/experts/library/office-automation/skills/pdf/scripts/fill_pdf_form_with_annotations.py +105 -0
  653. octop/infra/agents/experts/library/office-automation/skills/pptx/LICENSE.txt +30 -0
  654. octop/infra/agents/experts/library/office-automation/skills/pptx/SKILL.md +238 -0
  655. octop/infra/agents/experts/library/office-automation/skills/pptx/editing.md +209 -0
  656. octop/infra/agents/experts/library/office-automation/skills/pptx/pptxgenjs.md +420 -0
  657. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/__init__.py +0 -0
  658. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/add_slide.py +198 -0
  659. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/clean.py +279 -0
  660. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/helpers/__init__.py +0 -0
  661. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/helpers/merge_runs.py +192 -0
  662. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/helpers/simplify_redlines.py +196 -0
  663. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/pack.py +155 -0
  664. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  665. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  666. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  667. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  668. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  669. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  670. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  671. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  672. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  673. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  674. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  675. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  676. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  677. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  678. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  679. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  680. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  681. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  682. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  683. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  684. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  685. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  686. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  687. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  688. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  689. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  690. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  691. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  692. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  693. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  694. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  695. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/mce/mc.xsd +75 -0
  696. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  697. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  698. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  699. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  700. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  701. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  702. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  703. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/soffice.py +216 -0
  704. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/unpack.py +131 -0
  705. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/validate.py +113 -0
  706. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/validators/__init__.py +15 -0
  707. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/validators/base.py +797 -0
  708. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/validators/docx.py +418 -0
  709. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/validators/pptx.py +262 -0
  710. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/office/validators/redlining.py +240 -0
  711. octop/infra/agents/experts/library/office-automation/skills/pptx/scripts/thumbnail.py +302 -0
  712. octop/infra/agents/experts/library/office-automation/skills/xlsx/LICENSE.txt +30 -0
  713. octop/infra/agents/experts/library/office-automation/skills/xlsx/SKILL.md +306 -0
  714. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/helpers/__init__.py +0 -0
  715. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/helpers/merge_runs.py +192 -0
  716. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/helpers/simplify_redlines.py +196 -0
  717. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/pack.py +155 -0
  718. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  719. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  720. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  721. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  722. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  723. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  724. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  725. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  726. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  727. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  728. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  729. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  730. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  731. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  732. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  733. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  734. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  735. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  736. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  737. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  738. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  739. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  740. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  741. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  742. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  743. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  744. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  745. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  746. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  747. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  748. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  749. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/mce/mc.xsd +75 -0
  750. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  751. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  752. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  753. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  754. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  755. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  756. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  757. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/soffice.py +216 -0
  758. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/unpack.py +131 -0
  759. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/validate.py +113 -0
  760. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/validators/__init__.py +15 -0
  761. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/validators/base.py +797 -0
  762. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/validators/docx.py +418 -0
  763. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/validators/pptx.py +262 -0
  764. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/office/validators/redlining.py +240 -0
  765. octop/infra/agents/experts/library/office-automation/skills/xlsx/scripts/recalc.py +197 -0
  766. octop/infra/agents/experts/library/ops-engineer/IDENTITY.md +20 -0
  767. octop/infra/agents/experts/library/ops-engineer/SOUL.md +9 -0
  768. octop/infra/agents/experts/library/ops-engineer/manifest.json +65 -0
  769. octop/infra/agents/experts/library/parenting-companion/AGENTS.md +168 -0
  770. octop/infra/agents/experts/library/parenting-companion/BOOTSTRAP.md +98 -0
  771. octop/infra/agents/experts/library/parenting-companion/HEARTBEAT.md +127 -0
  772. octop/infra/agents/experts/library/parenting-companion/IDENTITY.md +59 -0
  773. octop/infra/agents/experts/library/parenting-companion/SOUL.md +33 -0
  774. octop/infra/agents/experts/library/parenting-companion/manifest.json +69 -0
  775. octop/infra/agents/experts/library/parenting-companion/scripts/check_memory_freshness.sh +81 -0
  776. octop/infra/agents/experts/library/stock-assistant/HEARTBEAT.md +79 -0
  777. octop/infra/agents/experts/library/stock-assistant/IDENTITY.md +37 -0
  778. octop/infra/agents/experts/library/stock-assistant/SOUL.md +252 -0
  779. octop/infra/agents/experts/library/stock-assistant/manifest.json +69 -0
  780. octop/infra/agents/experts/library/stock-assistant/skills/stock-info/SKILL.md +154 -0
  781. octop/infra/agents/experts/library/stock-assistant/skills/stock-info/references/examples.md +65 -0
  782. octop/infra/agents/experts/library/stock-assistant/skills/stock-info/references/known-issues.md +35 -0
  783. octop/infra/agents/experts/library/wechat-ops/IDENTITY.md +62 -0
  784. octop/infra/agents/experts/library/wechat-ops/SOUL.md +39 -0
  785. octop/infra/agents/experts/library/wechat-ops/manifest.json +72 -0
  786. octop/infra/agents/experts/library/wechat-ops/skills/publisher-multi-platform/IDENTITY.md +45 -0
  787. octop/infra/agents/experts/library/wechat-ops/skills/publisher-multi-platform/SKILL.md +443 -0
  788. octop/infra/agents/experts/library/wechat-ops/skills/publisher-multi-platform/SOUL.md +39 -0
  789. octop/infra/agents/experts/library/wechat-ops/skills/publisher-multi-platform/manifest.yaml +11 -0
  790. octop/infra/agents/experts/library/wechat-ops/skills/publisher-multi-platform/scripts/setup_server.sh +112 -0
  791. octop/infra/agents/experts/library/wechat-ops/skills/publisher-multi-platform/scripts/wechat_publish.py +1080 -0
  792. octop/infra/agents/experts/library/wechat-ops/skills/publisher-multi-platform/scripts/xhs_publish.py +592 -0
  793. octop/infra/agents/langfuse.py +166 -0
  794. octop/infra/agents/manager.py +1275 -0
  795. octop/infra/agents/mbti_profiles.py +596 -0
  796. octop/infra/agents/persona.py +109 -0
  797. octop/infra/agents/plugins/__init__.py +5 -0
  798. octop/infra/agents/plugins/manager.py +162 -0
  799. octop/infra/agents/providers/__init__.py +0 -0
  800. octop/infra/agents/providers/preset_expansion.py +542 -0
  801. octop/infra/agents/security.py +45 -0
  802. octop/infra/agents/tool_guard_rules.py +61 -0
  803. octop/infra/agents/tools/__init__.py +0 -0
  804. octop/infra/backend/__init__.py +17 -0
  805. octop/infra/backend/adapter.py +108 -0
  806. octop/infra/backend/browse.py +56 -0
  807. octop/infra/backend/probe.py +89 -0
  808. octop/infra/backend/resolver.py +74 -0
  809. octop/infra/backup/__init__.py +29 -0
  810. octop/infra/backup/manifest.py +75 -0
  811. octop/infra/backup/snapshot.py +49 -0
  812. octop/infra/backup/store.py +81 -0
  813. octop/infra/backup/system_archive.py +207 -0
  814. octop/infra/backup/workspace_archive.py +152 -0
  815. octop/infra/cron/__init__.py +1 -0
  816. octop/infra/cron/job.py +109 -0
  817. octop/infra/cron/manager.py +236 -0
  818. octop/infra/cron/tools.py +190 -0
  819. octop/infra/cron/trigger.py +35 -0
  820. octop/infra/db/__init__.py +1 -0
  821. octop/infra/db/factory.py +28 -0
  822. octop/infra/db/migrate.py +45 -0
  823. octop/infra/db/migrations/001_initial.sql +242 -0
  824. octop/infra/db/pool.py +55 -0
  825. octop/infra/db/repos/__init__.py +1 -0
  826. octop/infra/db/repos/_base.py +79 -0
  827. octop/infra/db/repos/agents.py +167 -0
  828. octop/infra/db/repos/audit.py +76 -0
  829. octop/infra/db/repos/backends.py +152 -0
  830. octop/infra/db/repos/channels.py +113 -0
  831. octop/infra/db/repos/connectors.py +219 -0
  832. octop/infra/db/repos/cron.py +162 -0
  833. octop/infra/db/repos/providers.py +148 -0
  834. octop/infra/db/repos/secrets.py +41 -0
  835. octop/infra/db/repos/sessions.py +231 -0
  836. octop/infra/db/repos/settings.py +38 -0
  837. octop/infra/db/repos/threads.py +126 -0
  838. octop/infra/db/repos/usage.py +279 -0
  839. octop/infra/db/repos/users.py +110 -0
  840. octop/infra/db/repos/voice_providers.py +140 -0
  841. octop/infra/db/services.py +138 -0
  842. octop/infra/errors.py +133 -0
  843. octop/infra/gateway/__init__.py +1 -0
  844. octop/infra/gateway/backend_files.py +436 -0
  845. octop/infra/gateway/bot_creators/__init__.py +1 -0
  846. octop/infra/gateway/bot_creators/feishu_bot_creator.py +1482 -0
  847. octop/infra/gateway/bot_creators/yuanbao_bot_creator.py +480 -0
  848. octop/infra/gateway/gateway.py +473 -0
  849. octop/infra/gateway/host_paths.py +96 -0
  850. octop/infra/gateway/media.py +70 -0
  851. octop/infra/gateway/process/__init__.py +30 -0
  852. octop/infra/gateway/process/agent_resolve.py +35 -0
  853. octop/infra/gateway/process/harness_request.py +213 -0
  854. octop/infra/gateway/process/message_keys.py +48 -0
  855. octop/infra/gateway/process/processor.py +475 -0
  856. octop/infra/gateway/process/slash_ctx.py +5 -0
  857. octop/infra/gateway/process/stream_project.py +121 -0
  858. octop/infra/gateway/process/usage_record.py +77 -0
  859. octop/infra/gateway/processor.py +25 -0
  860. octop/infra/gateway/slash/__init__.py +17 -0
  861. octop/infra/gateway/slash/catalog.py +268 -0
  862. octop/infra/gateway/slash/ctx.py +145 -0
  863. octop/infra/gateway/slash/dispatcher.py +88 -0
  864. octop/infra/gateway/slash/formatting.py +52 -0
  865. octop/infra/gateway/slash/handlers/__init__.py +24 -0
  866. octop/infra/gateway/slash/handlers/composite.py +252 -0
  867. octop/infra/gateway/slash/handlers/platform.py +150 -0
  868. octop/infra/gateway/slash/handlers/session.py +163 -0
  869. octop/infra/gateway/slash/help.py +25 -0
  870. octop/infra/gateway/slash/runner.py +44 -0
  871. octop/infra/gateway/slash/runtime_bridge.py +70 -0
  872. octop/infra/gateway/slash/types.py +17 -0
  873. octop/infra/gateway/threads.py +327 -0
  874. octop/infra/gateway/tool_media.py +581 -0
  875. octop/infra/gateway/ws/__init__.py +14 -0
  876. octop/infra/gateway/ws/ws_channel.py +164 -0
  877. octop/infra/gateway/ws/ws_hub.py +53 -0
  878. octop/infra/metrics.py +37 -0
  879. octop/infra/server.py +195 -0
  880. octop/infra/setup/__init__.py +1 -0
  881. octop/infra/setup/password_file.py +63 -0
  882. octop/infra/setup/wizard_tokens.py +67 -0
  883. octop/infra/tls/__init__.py +7 -0
  884. octop/infra/tls/acme_issue.py +134 -0
  885. octop/infra/tls/challenge.py +28 -0
  886. octop/infra/tls/http_companion.py +43 -0
  887. octop/infra/tls/listeners.py +62 -0
  888. octop/infra/tls/manager.py +257 -0
  889. octop/infra/tls/modes.py +54 -0
  890. octop/infra/tls/preflight.py +215 -0
  891. octop/infra/tls/renewal.py +88 -0
  892. octop/infra/tls/store.py +95 -0
  893. octop/infra/users/__init__.py +9 -0
  894. octop/infra/users/identity.py +28 -0
  895. octop/infra/users/manager.py +202 -0
  896. octop/infra/users/password.py +21 -0
  897. octop/infra/utils/__init__.py +1 -0
  898. octop/infra/utils/browser_media.py +44 -0
  899. octop/infra/utils/env_file.py +73 -0
  900. octop/infra/utils/locale.py +83 -0
  901. octop/infra/utils/ollama_manager.py +178 -0
  902. octop/infra/utils/paths.py +86 -0
  903. octop/infra/utils/subprocess_io.py +85 -0
  904. octop/infra/utils/ulid.py +44 -0
  905. octop/infra/voice/__init__.py +1 -0
  906. octop/infra/voice/adapters.py +277 -0
  907. octop/infra/voice/manager.py +175 -0
  908. octop/infra/voice/presets.py +54 -0
  909. octop/infra/voice/tencent_sign.py +57 -0
  910. octop/launch.py +115 -0
  911. octop-0.1.0.dev0.dist-info/METADATA +299 -0
  912. octop-0.1.0.dev0.dist-info/RECORD +915 -0
  913. octop-0.1.0.dev0.dist-info/WHEEL +4 -0
  914. octop-0.1.0.dev0.dist-info/entry_points.txt +2 -0
  915. octop-0.1.0.dev0.dist-info/licenses/LICENSE +21 -0
octop/__init__.py ADDED
@@ -0,0 +1,5 @@
1
+ """Octop — multi-user, multi-Agent self-hosted AI server."""
2
+
3
+ from __future__ import annotations
4
+
5
+ __version__ = "0.1.0"
octop/__main__.py ADDED
@@ -0,0 +1,8 @@
1
+ """Entry point: ``python -m octop`` → CLI."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from octop.cli.main import cli
6
+
7
+ if __name__ == "__main__":
8
+ cli()
octop/api/__init__.py ADDED
@@ -0,0 +1 @@
1
+
octop/api/app.py ADDED
@@ -0,0 +1,204 @@
1
+ """FastAPI app factory."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import logging
6
+ from collections.abc import Sequence
7
+ from dataclasses import dataclass
8
+ from pathlib import Path
9
+ from typing import Any
10
+
11
+ from fastapi import FastAPI, HTTPException, Request
12
+ from fastapi.middleware.cors import CORSMiddleware
13
+ from fastapi.responses import FileResponse, HTMLResponse, JSONResponse, PlainTextResponse
14
+ from scalar_fastapi import get_scalar_api_reference
15
+
16
+ from octop.api.middleware.jwt_auth import install as install_jwt_auth
17
+ from octop.api.middleware.setup_lockdown import install as install_setup_lockdown
18
+ from octop.api.openapi_meta import API_DESCRIPTION, OPENAPI_TAGS, configure_openapi
19
+ from octop.infra.errors import ErrorCode, OctopError
20
+ from octop.infra.server import OctopServer
21
+ from octop.infra.utils.locale import resolve_request_locale
22
+
23
+ logger = logging.getLogger(__name__)
24
+
25
+
26
+ @dataclass(frozen=True)
27
+ class _RouterMount:
28
+ router: Any
29
+ prefix: str
30
+ tags: Sequence[str]
31
+
32
+
33
+ def _mount_routers(app: FastAPI, mounts: Sequence[_RouterMount]) -> None:
34
+ for spec in mounts:
35
+ app.include_router(spec.router, prefix=spec.prefix, tags=list(spec.tags))
36
+
37
+
38
+ def _install_exception_handlers(app: FastAPI) -> None:
39
+ @app.exception_handler(OctopError)
40
+ async def _octop(request: Request, exc: OctopError) -> JSONResponse:
41
+ locale = resolve_request_locale(request)
42
+ return JSONResponse(status_code=exc.status, content=exc.to_envelope(locale=locale))
43
+
44
+ @app.exception_handler(Exception)
45
+ async def _unhandled(request: Request, exc: Exception) -> JSONResponse:
46
+ logger.exception("unhandled exception in %s", request.url.path)
47
+ locale = resolve_request_locale(request)
48
+ err = OctopError.localized(ErrorCode.INTERNAL_ERROR, locale)
49
+ return JSONResponse(status_code=err.status, content=err.to_envelope())
50
+
51
+
52
+ def build_app(server: OctopServer) -> FastAPI:
53
+ cfg = server.services.config if server.services else None
54
+ enable_dashboard = cfg.enable_dashboard if cfg else True
55
+ enable_api_docs = cfg.enable_api_docs if cfg else False
56
+
57
+ app = FastAPI(
58
+ title="Octop API",
59
+ version="0.1.0",
60
+ description=API_DESCRIPTION,
61
+ openapi_url="/api/openapi.json" if enable_api_docs else None,
62
+ openapi_tags=OPENAPI_TAGS,
63
+ )
64
+ configure_openapi(app)
65
+ app.state.octop_server = server
66
+ _install_exception_handlers(app)
67
+
68
+ if cfg and cfg.cors_origins:
69
+ app.add_middleware(
70
+ CORSMiddleware,
71
+ allow_origins=cfg.cors_origins,
72
+ allow_credentials=True,
73
+ allow_methods=["*"],
74
+ allow_headers=["*"],
75
+ )
76
+
77
+ install_jwt_auth(app, server)
78
+ install_setup_lockdown(app, server)
79
+
80
+ from octop.infra.tls.challenge import challenge_store
81
+
82
+ @app.get("/.well-known/acme-challenge/{token}", include_in_schema=False)
83
+ async def acme_http01_challenge(token: str) -> PlainTextResponse:
84
+ body = challenge_store.get(token)
85
+ if body is None:
86
+ raise HTTPException(status_code=404, detail="challenge not found")
87
+ return PlainTextResponse(body)
88
+
89
+ from octop.api.routers import (
90
+ acp,
91
+ admin,
92
+ agent_files,
93
+ agents,
94
+ auth,
95
+ backup,
96
+ browser,
97
+ channels,
98
+ chat,
99
+ connectors,
100
+ cron,
101
+ envs,
102
+ experts,
103
+ health,
104
+ i18n,
105
+ internal_mcp,
106
+ mbti,
107
+ ollama_models,
108
+ plugins,
109
+ preferences,
110
+ providers,
111
+ setup,
112
+ skills,
113
+ slash,
114
+ terminal,
115
+ update,
116
+ usage,
117
+ users,
118
+ voice,
119
+ workspace,
120
+ )
121
+ from octop.api.routers.observability import router as observability_router
122
+ from octop.api.routers.providers import admin_router as admin_providers_router
123
+ from octop.api.routers.security import router as security_router
124
+ from octop.api.routers.storage_backends import admin_router as admin_storage_router
125
+ from octop.api.routers.storage_backends import user_router as storage_backends_user_router
126
+ from octop.api.routers.tls import router as tls_router
127
+ from octop.api.routers.voice import admin_router as admin_voice_router
128
+
129
+ _mount_routers(
130
+ app,
131
+ [
132
+ _RouterMount(setup.router, "/api", ["setup"]),
133
+ _RouterMount(auth.router, "/api/auth", ["auth"]),
134
+ _RouterMount(preferences.router, "/api", ["auth"]),
135
+ _RouterMount(i18n.router, "/api", ["i18n"]),
136
+ _RouterMount(health.router, "/api/health", ["health"]),
137
+ _RouterMount(users.router, "/api/users", ["users"]),
138
+ _RouterMount(agents.router, "/api/agents", ["agents"]),
139
+ _RouterMount(acp.router, "/api", ["agents"]),
140
+ _RouterMount(chat.router, "/api", ["chat"]),
141
+ _RouterMount(slash.router, "/api", ["slash"]),
142
+ _RouterMount(connectors.router, "/api", ["connectors"]),
143
+ _RouterMount(internal_mcp.router, "/api", ["internal-mcp"]),
144
+ _RouterMount(channels.router, "/api", ["channels"]),
145
+ _RouterMount(cron.router, "/api", ["cron"]),
146
+ _RouterMount(envs.router, "/api", ["envs"]),
147
+ _RouterMount(providers.router, "/api/providers", ["providers"]),
148
+ _RouterMount(voice.router, "/api/voice", ["voice"]),
149
+ _RouterMount(admin.router, "/api/admin", ["admin"]),
150
+ _RouterMount(backup.router, "/api/admin", ["admin"]),
151
+ _RouterMount(admin_providers_router, "/api/admin/providers", ["admin"]),
152
+ _RouterMount(admin_voice_router, "/api/admin/voice/providers", ["admin"]),
153
+ _RouterMount(observability_router, "/api/admin/observability", ["observability"]),
154
+ _RouterMount(tls_router, "/api/admin/tls", ["tls"]),
155
+ _RouterMount(security_router, "/api/admin/security", ["security"]),
156
+ _RouterMount(admin_storage_router, "/api/admin/storage-backends", ["admin"]),
157
+ _RouterMount(
158
+ storage_backends_user_router, "/api/storage-backends", ["storage-backends"]
159
+ ),
160
+ _RouterMount(mbti.router, "/api", ["mbti"]),
161
+ _RouterMount(experts.router, "/api", ["experts"]),
162
+ _RouterMount(workspace.router, "/api", ["workspace"]),
163
+ _RouterMount(agent_files.router, "/api", ["agent_files"]),
164
+ _RouterMount(usage.router, "/api", ["usage"]),
165
+ _RouterMount(usage.admin_router, "/api/admin", ["admin"]),
166
+ _RouterMount(skills.router, "/api", ["skills"]),
167
+ _RouterMount(terminal.router, "/api", ["terminal"]),
168
+ _RouterMount(update.router, "/api", ["update"]),
169
+ _RouterMount(browser.router, "/api", ["browser"]),
170
+ _RouterMount(ollama_models.router, "/api", ["ollama"]),
171
+ _RouterMount(plugins.router, "/api", ["plugins"]),
172
+ ],
173
+ )
174
+
175
+ if enable_api_docs:
176
+
177
+ @app.get("/api/docs", include_in_schema=False)
178
+ async def api_docs() -> HTMLResponse:
179
+ return get_scalar_api_reference(
180
+ openapi_url=app.openapi_url,
181
+ title="Octop API",
182
+ )
183
+
184
+ if enable_dashboard:
185
+ dashboard_dir = Path(__file__).parent.parent / "dashboard"
186
+ index_file = dashboard_dir / "index.html"
187
+ if index_file.exists():
188
+
189
+ @app.get("/{full_path:path}", include_in_schema=False)
190
+ async def spa_fallback(full_path: str) -> FileResponse:
191
+ if full_path.startswith(("api/", "ws/")):
192
+ raise HTTPException(status_code=404, detail="Not Found")
193
+
194
+ if full_path:
195
+ candidate = (dashboard_dir / full_path).resolve()
196
+ try:
197
+ candidate.relative_to(dashboard_dir.resolve())
198
+ except ValueError:
199
+ return FileResponse(index_file)
200
+ if candidate.is_file():
201
+ return FileResponse(candidate)
202
+ return FileResponse(index_file)
203
+
204
+ return app
@@ -0,0 +1 @@
1
+ """Shared router helpers — agent access, workspace glue, request validation."""
@@ -0,0 +1,45 @@
1
+ """Shared agent ownership / existence checks for HTTP routers."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Any
6
+
7
+ from octop.infra.errors import ErrorCode, OctopError
8
+
9
+
10
+ def assert_agent_owner(row: Any, user: Any) -> None:
11
+ """Raise if the user may not access this agent row (admin bypasses)."""
12
+ if user.is_admin:
13
+ return
14
+ if row.user_id is not None and row.user_id != user.id:
15
+ raise OctopError(ErrorCode.FORBIDDEN, "agent not owned by user")
16
+
17
+
18
+ def require_agent_row(
19
+ agent_id: str,
20
+ *,
21
+ user: Any,
22
+ as_user: int | None,
23
+ server: Any,
24
+ ) -> Any:
25
+ """Load an agent row after owner / shared-agent / admin ``as_user`` checks."""
26
+ assert server.app_runtime is not None
27
+ row = server.app_runtime.agent_registry.get_row(agent_id)
28
+ if row is None:
29
+ raise OctopError(ErrorCode.AGENT_NOT_FOUND, f"agent {agent_id!r} not found")
30
+ if as_user is not None and as_user != user.id:
31
+ if not user.is_admin:
32
+ raise OctopError(ErrorCode.FORBIDDEN, "as_user requires admin")
33
+ target = server.user_manager.get_by_id(as_user)
34
+ if target is None:
35
+ raise OctopError(ErrorCode.NOT_FOUND, f"user {as_user} not found")
36
+ if row.user_id is not None and row.user_id != as_user:
37
+ raise OctopError(ErrorCode.FORBIDDEN, "agent not owned by as_user")
38
+ else:
39
+ assert_agent_owner(row, user)
40
+ return row
41
+
42
+
43
+ def assert_agent_access(server: Any, agent_id: str, user: Any) -> None:
44
+ """Ensure agent exists and is accessible to the current user."""
45
+ require_agent_row(agent_id, user=user, as_user=None, server=server)
@@ -0,0 +1,49 @@
1
+ """Cross-router request validation helpers (no FastAPI route definitions)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Any
6
+
7
+ from octop.infra.errors import ErrorCode, OctopError
8
+
9
+
10
+ async def validate_chat_mcp_servers(
11
+ server: Any,
12
+ *,
13
+ user_id: int,
14
+ names: list[str] | None,
15
+ ) -> list[str] | None:
16
+ if not names:
17
+ return None
18
+ repo = server.services.repos.connector_repo
19
+ try:
20
+ return list(repo.validate_mcp_servers_for_user(user_id, names))
21
+ except ValueError as exc:
22
+ raise OctopError(ErrorCode.CONNECTOR_NOT_BOUND, str(exc)) from exc
23
+
24
+
25
+ async def validate_chat_skills(
26
+ server: Any,
27
+ *,
28
+ agent_id: str,
29
+ user: Any,
30
+ names: list[str] | None,
31
+ ) -> list[str] | None:
32
+ """Validate per-turn skill filter for chat.
33
+
34
+ ``None`` leaves the full skill set; ``[]`` disables all skills.
35
+ """
36
+ if names is None:
37
+ return None
38
+ assert server.app_runtime is not None
39
+ allowed: set[str] = set()
40
+ for summary in await server.app_runtime.agent_registry.list_skill_summaries(agent_id):
41
+ if summary.get("enabled"):
42
+ allowed.add(str(summary["name"]))
43
+ bad = [n for n in names if n not in allowed]
44
+ if bad:
45
+ raise OctopError(
46
+ ErrorCode.NOT_FOUND,
47
+ f"skill(s) not found or disabled: {', '.join(bad)}",
48
+ )
49
+ return list(names)
@@ -0,0 +1,57 @@
1
+ """Shared workspace backend helpers (not route handlers)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Any
6
+
7
+ from octop.api.common.agent import require_agent_row
8
+
9
+ # deepagents.backends.utils.EMPTY_CONTENT_WARNING — shown to LLM tools, not humans.
10
+ _DEEPAGENTS_EMPTY_WARNING = "System reminder: File exists but has empty contents"
11
+
12
+
13
+ def coerce_read_content(content: Any) -> str:
14
+ """Normalize backend read payloads for the dashboard file viewer."""
15
+ if content is None:
16
+ return ""
17
+ if isinstance(content, list):
18
+ content = "\n".join(str(line) for line in content)
19
+ text = str(content)
20
+ if text == _DEEPAGENTS_EMPTY_WARNING:
21
+ return ""
22
+ return text
23
+
24
+
25
+ async def resolve_agent_backend(
26
+ agent_id: str,
27
+ *,
28
+ user: Any,
29
+ as_user: int | None,
30
+ server: Any,
31
+ ) -> Any:
32
+ """Get the harness workspace backend for file operations."""
33
+ require_agent_row(agent_id, user=user, as_user=as_user, server=server)
34
+ assert server.app_runtime is not None
35
+ return await server.app_runtime.agent_registry.resolve_harness_backend(agent_id)
36
+
37
+
38
+ def file_info_to_dict(info: Any) -> dict[str, Any]:
39
+ """Coerce a ``FileInfo`` TypedDict into a JSON-friendly dict."""
40
+ if isinstance(info, dict):
41
+ path = info.get("path")
42
+ is_dir = info.get("is_dir")
43
+ size = info.get("size")
44
+ modified_at = info.get("modified_at")
45
+ else:
46
+ path = getattr(info, "path", None)
47
+ is_dir = getattr(info, "is_dir", None)
48
+ size = getattr(info, "size", None)
49
+ modified_at = getattr(info, "modified_at", None)
50
+ out: dict[str, Any] = {"path": path}
51
+ if is_dir is not None:
52
+ out["is_dir"] = bool(is_dir)
53
+ if size is not None:
54
+ out["size"] = int(size)
55
+ if modified_at is not None:
56
+ out["modified_at"] = modified_at
57
+ return out
octop/api/deps.py ADDED
@@ -0,0 +1,144 @@
1
+ """FastAPI Depends, JWT helpers, and auth routing."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import time
6
+ from typing import TYPE_CHECKING, Any, cast
7
+
8
+ import jwt
9
+ from fastapi import Depends, Header, Query, Request
10
+
11
+ from octop.infra.errors import ErrorCode, OctopError
12
+
13
+ if TYPE_CHECKING:
14
+ from octop.infra.server import OctopServer
15
+ from octop.infra.users.identity import User
16
+
17
+
18
+ class InvalidToken(Exception): ...
19
+
20
+
21
+ class TokenExpired(InvalidToken): ...
22
+
23
+
24
+ def sign_token(
25
+ secret: bytes,
26
+ *,
27
+ sub: int,
28
+ uname: str,
29
+ role: str,
30
+ ttl_seconds: int = 86400,
31
+ ) -> str:
32
+ now = int(time.time())
33
+ payload = {
34
+ "sub": str(sub),
35
+ "uname": uname,
36
+ "role": role,
37
+ "iat": now,
38
+ "exp": now + ttl_seconds,
39
+ }
40
+ return jwt.encode(payload, secret, algorithm="HS256")
41
+
42
+
43
+ def decode_token(secret: bytes, token: str) -> dict[str, Any]:
44
+ try:
45
+ payload = jwt.decode(token, secret, algorithms=["HS256"])
46
+ if "sub" in payload:
47
+ payload["sub"] = int(payload["sub"])
48
+ return payload
49
+ except jwt.ExpiredSignatureError as exc:
50
+ raise TokenExpired() from exc
51
+ except jwt.InvalidTokenError as exc:
52
+ raise InvalidToken(str(exc)) from exc
53
+
54
+
55
+ # Paths that bypass JWT middleware (setup wizard, health, login).
56
+ _JWT_EXEMPT_PREFIXES = (
57
+ "/api/setup/",
58
+ "/api/health/",
59
+ "/api/i18n/",
60
+ "/api/connectors/oauth/callback",
61
+ "/api/internal/mcp/",
62
+ )
63
+ _JWT_EXEMPT_EXACT = (
64
+ "/api/health",
65
+ "/api/auth/login",
66
+ "/api/docs",
67
+ "/api/openapi.json",
68
+ )
69
+
70
+
71
+ def is_jwt_exempt_path(path: str) -> bool:
72
+ return path in _JWT_EXEMPT_EXACT or any(path.startswith(p) for p in _JWT_EXEMPT_PREFIXES)
73
+
74
+
75
+ def get_server(request: Request) -> OctopServer:
76
+ server: OctopServer = request.app.state.octop_server
77
+ if server.services is None or server.app_runtime is None:
78
+ raise OctopError(ErrorCode.INTERNAL_ERROR, "server not started")
79
+ return server
80
+
81
+
82
+ def extract_raw_token(
83
+ *,
84
+ authorization: str | None = None,
85
+ access_token: str | None = None,
86
+ ) -> str | None:
87
+ if authorization and authorization.lower().startswith("bearer "):
88
+ return authorization[7:].strip()
89
+ if access_token:
90
+ return access_token
91
+ return None
92
+
93
+
94
+ def _decode(server: OctopServer, token: str) -> dict[str, Any]:
95
+ assert server.services is not None
96
+ secret = server.services.secret_repo.get("jwt")
97
+ if secret is None:
98
+ raise OctopError(ErrorCode.INTERNAL_ERROR, "jwt secret missing")
99
+ try:
100
+ return decode_token(secret, token)
101
+ except TokenExpired as exc:
102
+ raise OctopError(ErrorCode.TOKEN_EXPIRED, "token expired") from exc
103
+ except InvalidToken as exc:
104
+ raise OctopError(ErrorCode.AUTH_FAILED, "invalid token") from exc
105
+
106
+
107
+ def resolve_user_from_token(server: OctopServer, token: str) -> User:
108
+ payload = _decode(server, token)
109
+ assert server.user_manager is not None
110
+ user = server.user_manager.get_by_id(int(payload["sub"]))
111
+ if user is None:
112
+ raise OctopError(ErrorCode.USER_DISABLED, "user not active")
113
+ return user
114
+
115
+
116
+ def authenticate_request(request: Request, server: OctopServer) -> User:
117
+ raw = extract_raw_token(
118
+ authorization=request.headers.get("authorization"),
119
+ access_token=request.query_params.get("access_token"),
120
+ )
121
+ if not raw:
122
+ raise OctopError(ErrorCode.AUTH_FAILED, "missing credentials")
123
+ return resolve_user_from_token(server, raw)
124
+
125
+
126
+ async def current_user(
127
+ request: Request,
128
+ server: OctopServer = Depends(get_server),
129
+ authorization: str | None = Header(None),
130
+ access_token: str | None = Query(None),
131
+ ) -> User:
132
+ cached = getattr(request.state, "octop_user", None)
133
+ if cached is not None:
134
+ return cast("User", cached)
135
+ raw = extract_raw_token(authorization=authorization, access_token=access_token)
136
+ if not raw:
137
+ raise OctopError(ErrorCode.AUTH_FAILED, "missing credentials")
138
+ return resolve_user_from_token(server, raw)
139
+
140
+
141
+ async def current_admin(user: User = Depends(current_user)) -> User:
142
+ if not user.is_admin:
143
+ raise OctopError(ErrorCode.FORBIDDEN, "admin required")
144
+ return user
@@ -0,0 +1 @@
1
+ """ASGI middlewares for octop."""
@@ -0,0 +1,40 @@
1
+ """Require JWT for all /api/* routes except an explicit allowlist.
2
+
3
+ Validated users are cached on ``request.state.octop_user`` so route-level
4
+ ``Depends(current_user)`` can reuse the result without re-decoding.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ from collections.abc import Awaitable, Callable
10
+ from typing import Any
11
+
12
+ from fastapi import Request
13
+ from fastapi.responses import JSONResponse
14
+
15
+ from octop.api.deps import authenticate_request, is_jwt_exempt_path
16
+ from octop.infra.errors import OctopError
17
+
18
+ _INSTALL_ATTR = "_octop_jwt_auth_installed"
19
+
20
+
21
+ def install(app: Any, server: Any) -> None:
22
+ if getattr(app, _INSTALL_ATTR, False):
23
+ return
24
+ setattr(app, _INSTALL_ATTR, True)
25
+
26
+ @app.middleware("http") # type: ignore[untyped-decorator]
27
+ async def _jwt_auth(
28
+ request: Request,
29
+ call_next: Callable[[Request], Awaitable[Any]],
30
+ ) -> Any:
31
+ path = request.url.path
32
+ if not path.startswith("/api/") or is_jwt_exempt_path(path):
33
+ return await call_next(request)
34
+
35
+ try:
36
+ request.state.octop_user = authenticate_request(request, server)
37
+ except OctopError as exc:
38
+ return JSONResponse(status_code=exc.status, content=exc.to_envelope())
39
+
40
+ return await call_next(request)
@@ -0,0 +1,41 @@
1
+ """Lock down all non-/setup endpoints while no users exist.
2
+
3
+ Returns ``503 {"setup_required": true}`` so the SPA can hard-redirect
4
+ to ``/setup``.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ from collections.abc import Awaitable, Callable
10
+ from typing import Any
11
+
12
+ from fastapi import Request
13
+ from fastapi.responses import JSONResponse
14
+
15
+ _OPEN_PREFIXES = (
16
+ "/api/setup/",
17
+ "/api/health/",
18
+ )
19
+
20
+
21
+ def install(app: Any, server: Any) -> None:
22
+ @app.middleware("http")
23
+ async def _lockdown(
24
+ request: Request,
25
+ call_next: Callable[[Request], Awaitable[Any]],
26
+ ) -> Any:
27
+ path = request.url.path
28
+ if not path.startswith("/api/"):
29
+ return await call_next(request)
30
+ cfg = server.services.config if server.services else None
31
+ open_exact = ["/api/health"]
32
+ if cfg and cfg.enable_api_docs:
33
+ open_exact.extend(("/api/docs", "/api/openapi.json"))
34
+ if path in open_exact or any(path.startswith(p) for p in _OPEN_PREFIXES):
35
+ return await call_next(request)
36
+ if server.user_manager is None or server.user_manager.count() == 0:
37
+ return JSONResponse(
38
+ status_code=503,
39
+ content={"setup_required": True},
40
+ )
41
+ return await call_next(request)