nanoinfra 0.3.0__tar.gz

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 (866) hide show
  1. nanoinfra-0.3.0/.gitignore +104 -0
  2. nanoinfra-0.3.0/LICENSE +22 -0
  3. nanoinfra-0.3.0/PKG-INFO +419 -0
  4. nanoinfra-0.3.0/README.md +336 -0
  5. nanoinfra-0.3.0/THIRD_PARTY_NOTICES.md +175 -0
  6. nanoinfra-0.3.0/docs/README.md +84 -0
  7. nanoinfra-0.3.0/docs/guides/README.md +50 -0
  8. nanoinfra-0.3.0/hatch_build.py +103 -0
  9. nanoinfra-0.3.0/nanoinfra/__init__.py +117 -0
  10. nanoinfra-0.3.0/nanoinfra/__main__.py +8 -0
  11. nanoinfra-0.3.0/nanoinfra/agent/__init__.py +29 -0
  12. nanoinfra-0.3.0/nanoinfra/agent/autocompact.py +154 -0
  13. nanoinfra-0.3.0/nanoinfra/agent/automation_turns.py +149 -0
  14. nanoinfra-0.3.0/nanoinfra/agent/context.py +318 -0
  15. nanoinfra-0.3.0/nanoinfra/agent/context_governance.py +511 -0
  16. nanoinfra-0.3.0/nanoinfra/agent/cron_turns.py +57 -0
  17. nanoinfra-0.3.0/nanoinfra/agent/goal_permission.py +29 -0
  18. nanoinfra-0.3.0/nanoinfra/agent/hook.py +309 -0
  19. nanoinfra-0.3.0/nanoinfra/agent/hooks/__init__.py +11 -0
  20. nanoinfra-0.3.0/nanoinfra/agent/hooks/file_edit_activity.py +139 -0
  21. nanoinfra-0.3.0/nanoinfra/agent/loop.py +2300 -0
  22. nanoinfra-0.3.0/nanoinfra/agent/memory.py +1221 -0
  23. nanoinfra-0.3.0/nanoinfra/agent/model_presets.py +85 -0
  24. nanoinfra-0.3.0/nanoinfra/agent/model_runtime.py +245 -0
  25. nanoinfra-0.3.0/nanoinfra/agent/progress_hook.py +222 -0
  26. nanoinfra-0.3.0/nanoinfra/agent/runner.py +1670 -0
  27. nanoinfra-0.3.0/nanoinfra/agent/skills.py +298 -0
  28. nanoinfra-0.3.0/nanoinfra/agent/subagent.py +577 -0
  29. nanoinfra-0.3.0/nanoinfra/agent/tools/__init__.py +32 -0
  30. nanoinfra-0.3.0/nanoinfra/agent/tools/apply_patch.py +294 -0
  31. nanoinfra-0.3.0/nanoinfra/agent/tools/base.py +351 -0
  32. nanoinfra-0.3.0/nanoinfra/agent/tools/cli_apps.py +160 -0
  33. nanoinfra-0.3.0/nanoinfra/agent/tools/context.py +92 -0
  34. nanoinfra-0.3.0/nanoinfra/agent/tools/cron.py +294 -0
  35. nanoinfra-0.3.0/nanoinfra/agent/tools/exec_session.py +752 -0
  36. nanoinfra-0.3.0/nanoinfra/agent/tools/file_state.py +209 -0
  37. nanoinfra-0.3.0/nanoinfra/agent/tools/filesystem.py +1131 -0
  38. nanoinfra-0.3.0/nanoinfra/agent/tools/image_generation.py +337 -0
  39. nanoinfra-0.3.0/nanoinfra/agent/tools/loader.py +191 -0
  40. nanoinfra-0.3.0/nanoinfra/agent/tools/long_task.py +374 -0
  41. nanoinfra-0.3.0/nanoinfra/agent/tools/mcp.py +1573 -0
  42. nanoinfra-0.3.0/nanoinfra/agent/tools/message.py +257 -0
  43. nanoinfra-0.3.0/nanoinfra/agent/tools/path_utils.py +34 -0
  44. nanoinfra-0.3.0/nanoinfra/agent/tools/registry.py +220 -0
  45. nanoinfra-0.3.0/nanoinfra/agent/tools/runtime_state.py +76 -0
  46. nanoinfra-0.3.0/nanoinfra/agent/tools/sandbox.py +125 -0
  47. nanoinfra-0.3.0/nanoinfra/agent/tools/schema.py +235 -0
  48. nanoinfra-0.3.0/nanoinfra/agent/tools/search.py +593 -0
  49. nanoinfra-0.3.0/nanoinfra/agent/tools/self.py +592 -0
  50. nanoinfra-0.3.0/nanoinfra/agent/tools/sessions.py +230 -0
  51. nanoinfra-0.3.0/nanoinfra/agent/tools/shell.py +991 -0
  52. nanoinfra-0.3.0/nanoinfra/agent/tools/spawn.py +110 -0
  53. nanoinfra-0.3.0/nanoinfra/agent/tools/web.py +1183 -0
  54. nanoinfra-0.3.0/nanoinfra/agent/turn_delivery.py +318 -0
  55. nanoinfra-0.3.0/nanoinfra/agent/turn_hooks.py +92 -0
  56. nanoinfra-0.3.0/nanoinfra/api/__init__.py +1 -0
  57. nanoinfra-0.3.0/nanoinfra/api/runtime.py +60 -0
  58. nanoinfra-0.3.0/nanoinfra/api/server.py +492 -0
  59. nanoinfra-0.3.0/nanoinfra/apps/__init__.py +5 -0
  60. nanoinfra-0.3.0/nanoinfra/apps/cli/__init__.py +13 -0
  61. nanoinfra-0.3.0/nanoinfra/apps/cli/service.py +1407 -0
  62. nanoinfra-0.3.0/nanoinfra/apps/cli/utils.py +68 -0
  63. nanoinfra-0.3.0/nanoinfra/apps/protocol.py +56 -0
  64. nanoinfra-0.3.0/nanoinfra/audio/__init__.py +2 -0
  65. nanoinfra-0.3.0/nanoinfra/audio/transcription.py +216 -0
  66. nanoinfra-0.3.0/nanoinfra/audio/transcription_registry.py +101 -0
  67. nanoinfra-0.3.0/nanoinfra/bus/__init__.py +6 -0
  68. nanoinfra-0.3.0/nanoinfra/bus/events.py +60 -0
  69. nanoinfra-0.3.0/nanoinfra/bus/outbound_events.py +243 -0
  70. nanoinfra-0.3.0/nanoinfra/bus/progress.py +67 -0
  71. nanoinfra-0.3.0/nanoinfra/bus/queue.py +44 -0
  72. nanoinfra-0.3.0/nanoinfra/bus/runtime_events.py +274 -0
  73. nanoinfra-0.3.0/nanoinfra/channels/__init__.py +5 -0
  74. nanoinfra-0.3.0/nanoinfra/channels/_manifest.py +40 -0
  75. nanoinfra-0.3.0/nanoinfra/channels/_setup.py +23 -0
  76. nanoinfra-0.3.0/nanoinfra/channels/base.py +314 -0
  77. nanoinfra-0.3.0/nanoinfra/channels/connect.py +24 -0
  78. nanoinfra-0.3.0/nanoinfra/channels/contracts.py +631 -0
  79. nanoinfra-0.3.0/nanoinfra/channels/dingtalk/__init__.py +1 -0
  80. nanoinfra-0.3.0/nanoinfra/channels/dingtalk/manifest.py +24 -0
  81. nanoinfra-0.3.0/nanoinfra/channels/dingtalk/runtime.py +889 -0
  82. nanoinfra-0.3.0/nanoinfra/channels/dingtalk/webui/index.ts +21 -0
  83. nanoinfra-0.3.0/nanoinfra/channels/dingtalk/webui/locales/en.json +31 -0
  84. nanoinfra-0.3.0/nanoinfra/channels/dingtalk/webui/locales/es.json +31 -0
  85. nanoinfra-0.3.0/nanoinfra/channels/dingtalk/webui/locales/fr.json +31 -0
  86. nanoinfra-0.3.0/nanoinfra/channels/dingtalk/webui/locales/id.json +31 -0
  87. nanoinfra-0.3.0/nanoinfra/channels/dingtalk/webui/locales/ja.json +31 -0
  88. nanoinfra-0.3.0/nanoinfra/channels/dingtalk/webui/locales/ko.json +31 -0
  89. nanoinfra-0.3.0/nanoinfra/channels/dingtalk/webui/locales/pt-BR.json +31 -0
  90. nanoinfra-0.3.0/nanoinfra/channels/dingtalk/webui/locales/vi.json +31 -0
  91. nanoinfra-0.3.0/nanoinfra/channels/dingtalk/webui/locales/zh-CN.json +32 -0
  92. nanoinfra-0.3.0/nanoinfra/channels/dingtalk/webui/locales/zh-TW.json +32 -0
  93. nanoinfra-0.3.0/nanoinfra/channels/discord/__init__.py +1 -0
  94. nanoinfra-0.3.0/nanoinfra/channels/discord/manifest.py +27 -0
  95. nanoinfra-0.3.0/nanoinfra/channels/discord/runtime.py +842 -0
  96. nanoinfra-0.3.0/nanoinfra/channels/discord/validation.py +69 -0
  97. nanoinfra-0.3.0/nanoinfra/channels/discord/webui/index.ts +20 -0
  98. nanoinfra-0.3.0/nanoinfra/channels/discord/webui/locales/en.json +39 -0
  99. nanoinfra-0.3.0/nanoinfra/channels/discord/webui/locales/es.json +39 -0
  100. nanoinfra-0.3.0/nanoinfra/channels/discord/webui/locales/fr.json +39 -0
  101. nanoinfra-0.3.0/nanoinfra/channels/discord/webui/locales/id.json +39 -0
  102. nanoinfra-0.3.0/nanoinfra/channels/discord/webui/locales/ja.json +39 -0
  103. nanoinfra-0.3.0/nanoinfra/channels/discord/webui/locales/ko.json +39 -0
  104. nanoinfra-0.3.0/nanoinfra/channels/discord/webui/locales/pt-BR.json +39 -0
  105. nanoinfra-0.3.0/nanoinfra/channels/discord/webui/locales/vi.json +39 -0
  106. nanoinfra-0.3.0/nanoinfra/channels/discord/webui/locales/zh-CN.json +39 -0
  107. nanoinfra-0.3.0/nanoinfra/channels/discord/webui/locales/zh-TW.json +39 -0
  108. nanoinfra-0.3.0/nanoinfra/channels/email/__init__.py +1 -0
  109. nanoinfra-0.3.0/nanoinfra/channels/email/manifest.py +44 -0
  110. nanoinfra-0.3.0/nanoinfra/channels/email/runtime.py +919 -0
  111. nanoinfra-0.3.0/nanoinfra/channels/email/validation.py +91 -0
  112. nanoinfra-0.3.0/nanoinfra/channels/email/webui/index.ts +66 -0
  113. nanoinfra-0.3.0/nanoinfra/channels/email/webui/locales/en.json +92 -0
  114. nanoinfra-0.3.0/nanoinfra/channels/email/webui/locales/es.json +92 -0
  115. nanoinfra-0.3.0/nanoinfra/channels/email/webui/locales/fr.json +92 -0
  116. nanoinfra-0.3.0/nanoinfra/channels/email/webui/locales/id.json +92 -0
  117. nanoinfra-0.3.0/nanoinfra/channels/email/webui/locales/ja.json +92 -0
  118. nanoinfra-0.3.0/nanoinfra/channels/email/webui/locales/ko.json +92 -0
  119. nanoinfra-0.3.0/nanoinfra/channels/email/webui/locales/pt-BR.json +92 -0
  120. nanoinfra-0.3.0/nanoinfra/channels/email/webui/locales/vi.json +92 -0
  121. nanoinfra-0.3.0/nanoinfra/channels/email/webui/locales/zh-CN.json +92 -0
  122. nanoinfra-0.3.0/nanoinfra/channels/email/webui/locales/zh-TW.json +92 -0
  123. nanoinfra-0.3.0/nanoinfra/channels/feishu/__init__.py +1 -0
  124. nanoinfra-0.3.0/nanoinfra/channels/feishu/config.py +36 -0
  125. nanoinfra-0.3.0/nanoinfra/channels/feishu/connect.py +230 -0
  126. nanoinfra-0.3.0/nanoinfra/channels/feishu/instances.py +268 -0
  127. nanoinfra-0.3.0/nanoinfra/channels/feishu/manifest.py +42 -0
  128. nanoinfra-0.3.0/nanoinfra/channels/feishu/runtime.py +2896 -0
  129. nanoinfra-0.3.0/nanoinfra/channels/feishu/validation.py +34 -0
  130. nanoinfra-0.3.0/nanoinfra/channels/feishu/websocket.py +183 -0
  131. nanoinfra-0.3.0/nanoinfra/channels/feishu/webui/FeishuAssistantsPanel.tsx +182 -0
  132. nanoinfra-0.3.0/nanoinfra/channels/feishu/webui/FeishuConnectFlow.tsx +48 -0
  133. nanoinfra-0.3.0/nanoinfra/channels/feishu/webui/index.tsx +33 -0
  134. nanoinfra-0.3.0/nanoinfra/channels/feishu/webui/locales/en.json +73 -0
  135. nanoinfra-0.3.0/nanoinfra/channels/feishu/webui/locales/es.json +73 -0
  136. nanoinfra-0.3.0/nanoinfra/channels/feishu/webui/locales/fr.json +73 -0
  137. nanoinfra-0.3.0/nanoinfra/channels/feishu/webui/locales/id.json +73 -0
  138. nanoinfra-0.3.0/nanoinfra/channels/feishu/webui/locales/ja.json +73 -0
  139. nanoinfra-0.3.0/nanoinfra/channels/feishu/webui/locales/ko.json +73 -0
  140. nanoinfra-0.3.0/nanoinfra/channels/feishu/webui/locales/pt-BR.json +73 -0
  141. nanoinfra-0.3.0/nanoinfra/channels/feishu/webui/locales/vi.json +73 -0
  142. nanoinfra-0.3.0/nanoinfra/channels/feishu/webui/locales/zh-CN.json +74 -0
  143. nanoinfra-0.3.0/nanoinfra/channels/feishu/webui/locales/zh-TW.json +74 -0
  144. nanoinfra-0.3.0/nanoinfra/channels/manager.py +985 -0
  145. nanoinfra-0.3.0/nanoinfra/channels/matrix/__init__.py +1 -0
  146. nanoinfra-0.3.0/nanoinfra/channels/matrix/manifest.py +39 -0
  147. nanoinfra-0.3.0/nanoinfra/channels/matrix/runtime.py +1170 -0
  148. nanoinfra-0.3.0/nanoinfra/channels/matrix/validation.py +46 -0
  149. nanoinfra-0.3.0/nanoinfra/channels/matrix/webui/index.ts +23 -0
  150. nanoinfra-0.3.0/nanoinfra/channels/matrix/webui/locales/en.json +48 -0
  151. nanoinfra-0.3.0/nanoinfra/channels/matrix/webui/locales/es.json +48 -0
  152. nanoinfra-0.3.0/nanoinfra/channels/matrix/webui/locales/fr.json +48 -0
  153. nanoinfra-0.3.0/nanoinfra/channels/matrix/webui/locales/id.json +48 -0
  154. nanoinfra-0.3.0/nanoinfra/channels/matrix/webui/locales/ja.json +48 -0
  155. nanoinfra-0.3.0/nanoinfra/channels/matrix/webui/locales/ko.json +48 -0
  156. nanoinfra-0.3.0/nanoinfra/channels/matrix/webui/locales/pt-BR.json +48 -0
  157. nanoinfra-0.3.0/nanoinfra/channels/matrix/webui/locales/vi.json +48 -0
  158. nanoinfra-0.3.0/nanoinfra/channels/matrix/webui/locales/zh-CN.json +48 -0
  159. nanoinfra-0.3.0/nanoinfra/channels/matrix/webui/locales/zh-TW.json +48 -0
  160. nanoinfra-0.3.0/nanoinfra/channels/mattermost/__init__.py +1 -0
  161. nanoinfra-0.3.0/nanoinfra/channels/mattermost/manifest.py +25 -0
  162. nanoinfra-0.3.0/nanoinfra/channels/mattermost/runtime.py +749 -0
  163. nanoinfra-0.3.0/nanoinfra/channels/mattermost/webui/index.ts +21 -0
  164. nanoinfra-0.3.0/nanoinfra/channels/mattermost/webui/locales/en.json +43 -0
  165. nanoinfra-0.3.0/nanoinfra/channels/mattermost/webui/locales/es.json +43 -0
  166. nanoinfra-0.3.0/nanoinfra/channels/mattermost/webui/locales/fr.json +43 -0
  167. nanoinfra-0.3.0/nanoinfra/channels/mattermost/webui/locales/id.json +43 -0
  168. nanoinfra-0.3.0/nanoinfra/channels/mattermost/webui/locales/ja.json +43 -0
  169. nanoinfra-0.3.0/nanoinfra/channels/mattermost/webui/locales/ko.json +43 -0
  170. nanoinfra-0.3.0/nanoinfra/channels/mattermost/webui/locales/pt-BR.json +43 -0
  171. nanoinfra-0.3.0/nanoinfra/channels/mattermost/webui/locales/vi.json +43 -0
  172. nanoinfra-0.3.0/nanoinfra/channels/mattermost/webui/locales/zh-CN.json +43 -0
  173. nanoinfra-0.3.0/nanoinfra/channels/mattermost/webui/locales/zh-TW.json +43 -0
  174. nanoinfra-0.3.0/nanoinfra/channels/mochat/__init__.py +1 -0
  175. nanoinfra-0.3.0/nanoinfra/channels/mochat/manifest.py +30 -0
  176. nanoinfra-0.3.0/nanoinfra/channels/mochat/runtime.py +996 -0
  177. nanoinfra-0.3.0/nanoinfra/channels/msteams/__init__.py +1 -0
  178. nanoinfra-0.3.0/nanoinfra/channels/msteams/manifest.py +29 -0
  179. nanoinfra-0.3.0/nanoinfra/channels/msteams/runtime.py +843 -0
  180. nanoinfra-0.3.0/nanoinfra/channels/msteams/webui/index.ts +22 -0
  181. nanoinfra-0.3.0/nanoinfra/channels/msteams/webui/locales/en.json +39 -0
  182. nanoinfra-0.3.0/nanoinfra/channels/msteams/webui/locales/es.json +39 -0
  183. nanoinfra-0.3.0/nanoinfra/channels/msteams/webui/locales/fr.json +39 -0
  184. nanoinfra-0.3.0/nanoinfra/channels/msteams/webui/locales/id.json +39 -0
  185. nanoinfra-0.3.0/nanoinfra/channels/msteams/webui/locales/ja.json +39 -0
  186. nanoinfra-0.3.0/nanoinfra/channels/msteams/webui/locales/ko.json +39 -0
  187. nanoinfra-0.3.0/nanoinfra/channels/msteams/webui/locales/pt-BR.json +39 -0
  188. nanoinfra-0.3.0/nanoinfra/channels/msteams/webui/locales/vi.json +39 -0
  189. nanoinfra-0.3.0/nanoinfra/channels/msteams/webui/locales/zh-CN.json +39 -0
  190. nanoinfra-0.3.0/nanoinfra/channels/msteams/webui/locales/zh-TW.json +39 -0
  191. nanoinfra-0.3.0/nanoinfra/channels/napcat/__init__.py +1 -0
  192. nanoinfra-0.3.0/nanoinfra/channels/napcat/manifest.py +25 -0
  193. nanoinfra-0.3.0/nanoinfra/channels/napcat/runtime.py +587 -0
  194. nanoinfra-0.3.0/nanoinfra/channels/napcat/webui/index.ts +21 -0
  195. nanoinfra-0.3.0/nanoinfra/channels/napcat/webui/locales/en.json +38 -0
  196. nanoinfra-0.3.0/nanoinfra/channels/napcat/webui/locales/es.json +38 -0
  197. nanoinfra-0.3.0/nanoinfra/channels/napcat/webui/locales/fr.json +38 -0
  198. nanoinfra-0.3.0/nanoinfra/channels/napcat/webui/locales/id.json +38 -0
  199. nanoinfra-0.3.0/nanoinfra/channels/napcat/webui/locales/ja.json +38 -0
  200. nanoinfra-0.3.0/nanoinfra/channels/napcat/webui/locales/ko.json +38 -0
  201. nanoinfra-0.3.0/nanoinfra/channels/napcat/webui/locales/pt-BR.json +38 -0
  202. nanoinfra-0.3.0/nanoinfra/channels/napcat/webui/locales/vi.json +38 -0
  203. nanoinfra-0.3.0/nanoinfra/channels/napcat/webui/locales/zh-CN.json +38 -0
  204. nanoinfra-0.3.0/nanoinfra/channels/napcat/webui/locales/zh-TW.json +38 -0
  205. nanoinfra-0.3.0/nanoinfra/channels/plugin.py +186 -0
  206. nanoinfra-0.3.0/nanoinfra/channels/qq/__init__.py +1 -0
  207. nanoinfra-0.3.0/nanoinfra/channels/qq/manifest.py +28 -0
  208. nanoinfra-0.3.0/nanoinfra/channels/qq/runtime.py +771 -0
  209. nanoinfra-0.3.0/nanoinfra/channels/qq/webui/index.ts +21 -0
  210. nanoinfra-0.3.0/nanoinfra/channels/qq/webui/locales/en.json +38 -0
  211. nanoinfra-0.3.0/nanoinfra/channels/qq/webui/locales/es.json +38 -0
  212. nanoinfra-0.3.0/nanoinfra/channels/qq/webui/locales/fr.json +38 -0
  213. nanoinfra-0.3.0/nanoinfra/channels/qq/webui/locales/id.json +38 -0
  214. nanoinfra-0.3.0/nanoinfra/channels/qq/webui/locales/ja.json +38 -0
  215. nanoinfra-0.3.0/nanoinfra/channels/qq/webui/locales/ko.json +38 -0
  216. nanoinfra-0.3.0/nanoinfra/channels/qq/webui/locales/pt-BR.json +38 -0
  217. nanoinfra-0.3.0/nanoinfra/channels/qq/webui/locales/vi.json +38 -0
  218. nanoinfra-0.3.0/nanoinfra/channels/qq/webui/locales/zh-CN.json +38 -0
  219. nanoinfra-0.3.0/nanoinfra/channels/qq/webui/locales/zh-TW.json +38 -0
  220. nanoinfra-0.3.0/nanoinfra/channels/registry.py +104 -0
  221. nanoinfra-0.3.0/nanoinfra/channels/signal/__init__.py +1 -0
  222. nanoinfra-0.3.0/nanoinfra/channels/signal/manifest.py +25 -0
  223. nanoinfra-0.3.0/nanoinfra/channels/signal/runtime.py +1428 -0
  224. nanoinfra-0.3.0/nanoinfra/channels/signal/webui/index.ts +22 -0
  225. nanoinfra-0.3.0/nanoinfra/channels/signal/webui/locales/en.json +38 -0
  226. nanoinfra-0.3.0/nanoinfra/channels/signal/webui/locales/es.json +38 -0
  227. nanoinfra-0.3.0/nanoinfra/channels/signal/webui/locales/fr.json +38 -0
  228. nanoinfra-0.3.0/nanoinfra/channels/signal/webui/locales/id.json +38 -0
  229. nanoinfra-0.3.0/nanoinfra/channels/signal/webui/locales/ja.json +38 -0
  230. nanoinfra-0.3.0/nanoinfra/channels/signal/webui/locales/ko.json +38 -0
  231. nanoinfra-0.3.0/nanoinfra/channels/signal/webui/locales/pt-BR.json +38 -0
  232. nanoinfra-0.3.0/nanoinfra/channels/signal/webui/locales/vi.json +38 -0
  233. nanoinfra-0.3.0/nanoinfra/channels/signal/webui/locales/zh-CN.json +38 -0
  234. nanoinfra-0.3.0/nanoinfra/channels/signal/webui/locales/zh-TW.json +38 -0
  235. nanoinfra-0.3.0/nanoinfra/channels/slack/__init__.py +1 -0
  236. nanoinfra-0.3.0/nanoinfra/channels/slack/manifest.py +30 -0
  237. nanoinfra-0.3.0/nanoinfra/channels/slack/runtime.py +851 -0
  238. nanoinfra-0.3.0/nanoinfra/channels/slack/validation.py +90 -0
  239. nanoinfra-0.3.0/nanoinfra/channels/slack/webui/index.ts +64 -0
  240. nanoinfra-0.3.0/nanoinfra/channels/slack/webui/locales/en.json +38 -0
  241. nanoinfra-0.3.0/nanoinfra/channels/slack/webui/locales/es.json +38 -0
  242. nanoinfra-0.3.0/nanoinfra/channels/slack/webui/locales/fr.json +38 -0
  243. nanoinfra-0.3.0/nanoinfra/channels/slack/webui/locales/id.json +38 -0
  244. nanoinfra-0.3.0/nanoinfra/channels/slack/webui/locales/ja.json +38 -0
  245. nanoinfra-0.3.0/nanoinfra/channels/slack/webui/locales/ko.json +38 -0
  246. nanoinfra-0.3.0/nanoinfra/channels/slack/webui/locales/pt-BR.json +38 -0
  247. nanoinfra-0.3.0/nanoinfra/channels/slack/webui/locales/vi.json +38 -0
  248. nanoinfra-0.3.0/nanoinfra/channels/slack/webui/locales/zh-CN.json +38 -0
  249. nanoinfra-0.3.0/nanoinfra/channels/slack/webui/locales/zh-TW.json +38 -0
  250. nanoinfra-0.3.0/nanoinfra/channels/telegram/__init__.py +1 -0
  251. nanoinfra-0.3.0/nanoinfra/channels/telegram/manifest.py +31 -0
  252. nanoinfra-0.3.0/nanoinfra/channels/telegram/runtime.py +1783 -0
  253. nanoinfra-0.3.0/nanoinfra/channels/telegram/validation.py +161 -0
  254. nanoinfra-0.3.0/nanoinfra/channels/telegram/webui/index.ts +21 -0
  255. nanoinfra-0.3.0/nanoinfra/channels/telegram/webui/locales/en.json +39 -0
  256. nanoinfra-0.3.0/nanoinfra/channels/telegram/webui/locales/es.json +39 -0
  257. nanoinfra-0.3.0/nanoinfra/channels/telegram/webui/locales/fr.json +39 -0
  258. nanoinfra-0.3.0/nanoinfra/channels/telegram/webui/locales/id.json +39 -0
  259. nanoinfra-0.3.0/nanoinfra/channels/telegram/webui/locales/ja.json +39 -0
  260. nanoinfra-0.3.0/nanoinfra/channels/telegram/webui/locales/ko.json +39 -0
  261. nanoinfra-0.3.0/nanoinfra/channels/telegram/webui/locales/pt-BR.json +39 -0
  262. nanoinfra-0.3.0/nanoinfra/channels/telegram/webui/locales/vi.json +39 -0
  263. nanoinfra-0.3.0/nanoinfra/channels/telegram/webui/locales/zh-CN.json +39 -0
  264. nanoinfra-0.3.0/nanoinfra/channels/telegram/webui/locales/zh-TW.json +39 -0
  265. nanoinfra-0.3.0/nanoinfra/channels/validation.py +417 -0
  266. nanoinfra-0.3.0/nanoinfra/channels/websocket/__init__.py +1 -0
  267. nanoinfra-0.3.0/nanoinfra/channels/websocket/manifest.py +21 -0
  268. nanoinfra-0.3.0/nanoinfra/channels/websocket/runtime.py +1401 -0
  269. nanoinfra-0.3.0/nanoinfra/channels/websocket/validation.py +23 -0
  270. nanoinfra-0.3.0/nanoinfra/channels/websocket/webui/index.ts +17 -0
  271. nanoinfra-0.3.0/nanoinfra/channels/websocket/webui/locales/en.json +15 -0
  272. nanoinfra-0.3.0/nanoinfra/channels/websocket/webui/locales/es.json +15 -0
  273. nanoinfra-0.3.0/nanoinfra/channels/websocket/webui/locales/fr.json +15 -0
  274. nanoinfra-0.3.0/nanoinfra/channels/websocket/webui/locales/id.json +15 -0
  275. nanoinfra-0.3.0/nanoinfra/channels/websocket/webui/locales/ja.json +15 -0
  276. nanoinfra-0.3.0/nanoinfra/channels/websocket/webui/locales/ko.json +15 -0
  277. nanoinfra-0.3.0/nanoinfra/channels/websocket/webui/locales/pt-BR.json +15 -0
  278. nanoinfra-0.3.0/nanoinfra/channels/websocket/webui/locales/vi.json +15 -0
  279. nanoinfra-0.3.0/nanoinfra/channels/websocket/webui/locales/zh-CN.json +15 -0
  280. nanoinfra-0.3.0/nanoinfra/channels/websocket/webui/locales/zh-TW.json +15 -0
  281. nanoinfra-0.3.0/nanoinfra/channels/wecom/__init__.py +1 -0
  282. nanoinfra-0.3.0/nanoinfra/channels/wecom/manifest.py +24 -0
  283. nanoinfra-0.3.0/nanoinfra/channels/wecom/runtime.py +576 -0
  284. nanoinfra-0.3.0/nanoinfra/channels/wecom/webui/index.ts +20 -0
  285. nanoinfra-0.3.0/nanoinfra/channels/wecom/webui/locales/en.json +31 -0
  286. nanoinfra-0.3.0/nanoinfra/channels/wecom/webui/locales/es.json +31 -0
  287. nanoinfra-0.3.0/nanoinfra/channels/wecom/webui/locales/fr.json +31 -0
  288. nanoinfra-0.3.0/nanoinfra/channels/wecom/webui/locales/id.json +31 -0
  289. nanoinfra-0.3.0/nanoinfra/channels/wecom/webui/locales/ja.json +31 -0
  290. nanoinfra-0.3.0/nanoinfra/channels/wecom/webui/locales/ko.json +31 -0
  291. nanoinfra-0.3.0/nanoinfra/channels/wecom/webui/locales/pt-BR.json +31 -0
  292. nanoinfra-0.3.0/nanoinfra/channels/wecom/webui/locales/vi.json +31 -0
  293. nanoinfra-0.3.0/nanoinfra/channels/wecom/webui/locales/zh-CN.json +32 -0
  294. nanoinfra-0.3.0/nanoinfra/channels/wecom/webui/locales/zh-TW.json +32 -0
  295. nanoinfra-0.3.0/nanoinfra/channels/weixin/__init__.py +1 -0
  296. nanoinfra-0.3.0/nanoinfra/channels/weixin/connect.py +252 -0
  297. nanoinfra-0.3.0/nanoinfra/channels/weixin/manifest.py +31 -0
  298. nanoinfra-0.3.0/nanoinfra/channels/weixin/runtime.py +1744 -0
  299. nanoinfra-0.3.0/nanoinfra/channels/weixin/state.py +27 -0
  300. nanoinfra-0.3.0/nanoinfra/channels/weixin/validation.py +34 -0
  301. nanoinfra-0.3.0/nanoinfra/channels/weixin/webui/WeixinConnectFlow.tsx +39 -0
  302. nanoinfra-0.3.0/nanoinfra/channels/weixin/webui/index.tsx +27 -0
  303. nanoinfra-0.3.0/nanoinfra/channels/weixin/webui/locales/en.json +35 -0
  304. nanoinfra-0.3.0/nanoinfra/channels/weixin/webui/locales/es.json +35 -0
  305. nanoinfra-0.3.0/nanoinfra/channels/weixin/webui/locales/fr.json +35 -0
  306. nanoinfra-0.3.0/nanoinfra/channels/weixin/webui/locales/id.json +35 -0
  307. nanoinfra-0.3.0/nanoinfra/channels/weixin/webui/locales/ja.json +35 -0
  308. nanoinfra-0.3.0/nanoinfra/channels/weixin/webui/locales/ko.json +35 -0
  309. nanoinfra-0.3.0/nanoinfra/channels/weixin/webui/locales/pt-BR.json +35 -0
  310. nanoinfra-0.3.0/nanoinfra/channels/weixin/webui/locales/vi.json +35 -0
  311. nanoinfra-0.3.0/nanoinfra/channels/weixin/webui/locales/zh-CN.json +36 -0
  312. nanoinfra-0.3.0/nanoinfra/channels/weixin/webui/locales/zh-TW.json +36 -0
  313. nanoinfra-0.3.0/nanoinfra/channels/whatsapp/__init__.py +1 -0
  314. nanoinfra-0.3.0/nanoinfra/channels/whatsapp/manifest.py +35 -0
  315. nanoinfra-0.3.0/nanoinfra/channels/whatsapp/runtime.py +727 -0
  316. nanoinfra-0.3.0/nanoinfra/channels/whatsapp/state.py +25 -0
  317. nanoinfra-0.3.0/nanoinfra/channels/whatsapp/validation.py +34 -0
  318. nanoinfra-0.3.0/nanoinfra/channels/whatsapp/webui/index.ts +20 -0
  319. nanoinfra-0.3.0/nanoinfra/channels/whatsapp/webui/locales/en.json +30 -0
  320. nanoinfra-0.3.0/nanoinfra/channels/whatsapp/webui/locales/es.json +30 -0
  321. nanoinfra-0.3.0/nanoinfra/channels/whatsapp/webui/locales/fr.json +30 -0
  322. nanoinfra-0.3.0/nanoinfra/channels/whatsapp/webui/locales/id.json +30 -0
  323. nanoinfra-0.3.0/nanoinfra/channels/whatsapp/webui/locales/ja.json +30 -0
  324. nanoinfra-0.3.0/nanoinfra/channels/whatsapp/webui/locales/ko.json +30 -0
  325. nanoinfra-0.3.0/nanoinfra/channels/whatsapp/webui/locales/pt-BR.json +30 -0
  326. nanoinfra-0.3.0/nanoinfra/channels/whatsapp/webui/locales/vi.json +30 -0
  327. nanoinfra-0.3.0/nanoinfra/channels/whatsapp/webui/locales/zh-CN.json +30 -0
  328. nanoinfra-0.3.0/nanoinfra/channels/whatsapp/webui/locales/zh-TW.json +30 -0
  329. nanoinfra-0.3.0/nanoinfra/cli/__init__.py +1 -0
  330. nanoinfra-0.3.0/nanoinfra/cli/agent.py +352 -0
  331. nanoinfra-0.3.0/nanoinfra/cli/commands.py +668 -0
  332. nanoinfra-0.3.0/nanoinfra/cli/gateway.py +326 -0
  333. nanoinfra-0.3.0/nanoinfra/cli/gateway_runtime.py +870 -0
  334. nanoinfra-0.3.0/nanoinfra/cli/log_control.py +12 -0
  335. nanoinfra-0.3.0/nanoinfra/cli/models.py +31 -0
  336. nanoinfra-0.3.0/nanoinfra/cli/onboard.py +2130 -0
  337. nanoinfra-0.3.0/nanoinfra/cli/provider.py +372 -0
  338. nanoinfra-0.3.0/nanoinfra/cli/runtime_config.py +185 -0
  339. nanoinfra-0.3.0/nanoinfra/cli/stream.py +231 -0
  340. nanoinfra-0.3.0/nanoinfra/cli/terminal.py +428 -0
  341. nanoinfra-0.3.0/nanoinfra/cli/webui.py +261 -0
  342. nanoinfra-0.3.0/nanoinfra/cli/webui_support.py +498 -0
  343. nanoinfra-0.3.0/nanoinfra/command/__init__.py +6 -0
  344. nanoinfra-0.3.0/nanoinfra/command/builtin.py +1048 -0
  345. nanoinfra-0.3.0/nanoinfra/command/router.py +117 -0
  346. nanoinfra-0.3.0/nanoinfra/config/__init__.py +35 -0
  347. nanoinfra-0.3.0/nanoinfra/config/errors.py +112 -0
  348. nanoinfra-0.3.0/nanoinfra/config/loader.py +387 -0
  349. nanoinfra-0.3.0/nanoinfra/config/paths.py +71 -0
  350. nanoinfra-0.3.0/nanoinfra/config/schema.py +683 -0
  351. nanoinfra-0.3.0/nanoinfra/config/watcher.py +23 -0
  352. nanoinfra-0.3.0/nanoinfra/config_base.py +15 -0
  353. nanoinfra-0.3.0/nanoinfra/cron/__init__.py +23 -0
  354. nanoinfra-0.3.0/nanoinfra/cron/bound_runner.py +154 -0
  355. nanoinfra-0.3.0/nanoinfra/cron/service.py +837 -0
  356. nanoinfra-0.3.0/nanoinfra/cron/session_delivery.py +15 -0
  357. nanoinfra-0.3.0/nanoinfra/cron/session_turns.py +86 -0
  358. nanoinfra-0.3.0/nanoinfra/cron/types.py +188 -0
  359. nanoinfra-0.3.0/nanoinfra/cron/webui_metadata.py +27 -0
  360. nanoinfra-0.3.0/nanoinfra/gateway/__init__.py +19 -0
  361. nanoinfra-0.3.0/nanoinfra/gateway/runtime.py +104 -0
  362. nanoinfra-0.3.0/nanoinfra/gateway/service.py +286 -0
  363. nanoinfra-0.3.0/nanoinfra/nanoinfra.py +337 -0
  364. nanoinfra-0.3.0/nanoinfra/optional_features.py +807 -0
  365. nanoinfra-0.3.0/nanoinfra/pairing/__init__.py +37 -0
  366. nanoinfra-0.3.0/nanoinfra/pairing/store.py +361 -0
  367. nanoinfra-0.3.0/nanoinfra/process_runtime.py +460 -0
  368. nanoinfra-0.3.0/nanoinfra/providers/__init__.py +48 -0
  369. nanoinfra-0.3.0/nanoinfra/providers/anthropic_provider.py +860 -0
  370. nanoinfra-0.3.0/nanoinfra/providers/azure_openai_provider.py +416 -0
  371. nanoinfra-0.3.0/nanoinfra/providers/base.py +1193 -0
  372. nanoinfra-0.3.0/nanoinfra/providers/bedrock_provider.py +816 -0
  373. nanoinfra-0.3.0/nanoinfra/providers/conversation_state.py +262 -0
  374. nanoinfra-0.3.0/nanoinfra/providers/factory.py +382 -0
  375. nanoinfra-0.3.0/nanoinfra/providers/fallback_provider.py +482 -0
  376. nanoinfra-0.3.0/nanoinfra/providers/github_copilot_provider.py +292 -0
  377. nanoinfra-0.3.0/nanoinfra/providers/image_generation.py +2129 -0
  378. nanoinfra-0.3.0/nanoinfra/providers/openai_codex_oauth.py +272 -0
  379. nanoinfra-0.3.0/nanoinfra/providers/openai_codex_provider.py +580 -0
  380. nanoinfra-0.3.0/nanoinfra/providers/openai_compat_provider.py +1961 -0
  381. nanoinfra-0.3.0/nanoinfra/providers/openai_responses/__init__.py +51 -0
  382. nanoinfra-0.3.0/nanoinfra/providers/openai_responses/converters.py +223 -0
  383. nanoinfra-0.3.0/nanoinfra/providers/openai_responses/parsing.py +727 -0
  384. nanoinfra-0.3.0/nanoinfra/providers/openai_responses/state.py +204 -0
  385. nanoinfra-0.3.0/nanoinfra/providers/registry.py +768 -0
  386. nanoinfra-0.3.0/nanoinfra/providers/transcription.py +828 -0
  387. nanoinfra-0.3.0/nanoinfra/providers/unconfigured_provider.py +38 -0
  388. nanoinfra-0.3.0/nanoinfra/providers/xai_grok_provider.py +615 -0
  389. nanoinfra-0.3.0/nanoinfra/providers/xai_oauth.py +751 -0
  390. nanoinfra-0.3.0/nanoinfra/runtime_context.py +245 -0
  391. nanoinfra-0.3.0/nanoinfra/sdk/__init__.py +1 -0
  392. nanoinfra-0.3.0/nanoinfra/sdk/clients.py +232 -0
  393. nanoinfra-0.3.0/nanoinfra/sdk/runtime.py +48 -0
  394. nanoinfra-0.3.0/nanoinfra/sdk/streaming.py +224 -0
  395. nanoinfra-0.3.0/nanoinfra/sdk/types.py +174 -0
  396. nanoinfra-0.3.0/nanoinfra/security/__init__.py +1 -0
  397. nanoinfra-0.3.0/nanoinfra/security/network.py +344 -0
  398. nanoinfra-0.3.0/nanoinfra/security/workspace_access.py +434 -0
  399. nanoinfra-0.3.0/nanoinfra/security/workspace_policy.py +128 -0
  400. nanoinfra-0.3.0/nanoinfra/session/__init__.py +5 -0
  401. nanoinfra-0.3.0/nanoinfra/session/automation_turns.py +92 -0
  402. nanoinfra-0.3.0/nanoinfra/session/goal_state.py +132 -0
  403. nanoinfra-0.3.0/nanoinfra/session/history_visibility.py +22 -0
  404. nanoinfra-0.3.0/nanoinfra/session/keys.py +42 -0
  405. nanoinfra-0.3.0/nanoinfra/session/manager.py +1174 -0
  406. nanoinfra-0.3.0/nanoinfra/session/model_selection.py +22 -0
  407. nanoinfra-0.3.0/nanoinfra/session/turn_continuation.py +278 -0
  408. nanoinfra-0.3.0/nanoinfra/session/webui_turns.py +648 -0
  409. nanoinfra-0.3.0/nanoinfra/skills/README.md +31 -0
  410. nanoinfra-0.3.0/nanoinfra/skills/clawhub/SKILL.md +53 -0
  411. nanoinfra-0.3.0/nanoinfra/skills/cron/SKILL.md +59 -0
  412. nanoinfra-0.3.0/nanoinfra/skills/github/SKILL.md +48 -0
  413. nanoinfra-0.3.0/nanoinfra/skills/image-generation/SKILL.md +66 -0
  414. nanoinfra-0.3.0/nanoinfra/skills/memory/SKILL.md +38 -0
  415. nanoinfra-0.3.0/nanoinfra/skills/my/SKILL.md +72 -0
  416. nanoinfra-0.3.0/nanoinfra/skills/my/references/examples.md +77 -0
  417. nanoinfra-0.3.0/nanoinfra/skills/skill-creator/SKILL.md +374 -0
  418. nanoinfra-0.3.0/nanoinfra/skills/skill-creator/scripts/init_skill.py +389 -0
  419. nanoinfra-0.3.0/nanoinfra/skills/skill-creator/scripts/package_skill.py +152 -0
  420. nanoinfra-0.3.0/nanoinfra/skills/skill-creator/scripts/quick_validate.py +213 -0
  421. nanoinfra-0.3.0/nanoinfra/skills/summarize/SKILL.md +67 -0
  422. nanoinfra-0.3.0/nanoinfra/skills/tmux/SKILL.md +121 -0
  423. nanoinfra-0.3.0/nanoinfra/skills/tmux/scripts/find-sessions.sh +112 -0
  424. nanoinfra-0.3.0/nanoinfra/skills/tmux/scripts/wait-for-text.sh +83 -0
  425. nanoinfra-0.3.0/nanoinfra/skills/update-setup/SKILL.md +129 -0
  426. nanoinfra-0.3.0/nanoinfra/skills/weather/SKILL.md +49 -0
  427. nanoinfra-0.3.0/nanoinfra/templates/AGENTS.md +24 -0
  428. nanoinfra-0.3.0/nanoinfra/templates/HEARTBEAT.md +14 -0
  429. nanoinfra-0.3.0/nanoinfra/templates/SOUL.md +11 -0
  430. nanoinfra-0.3.0/nanoinfra/templates/USER.md +49 -0
  431. nanoinfra-0.3.0/nanoinfra/templates/__init__.py +0 -0
  432. nanoinfra-0.3.0/nanoinfra/templates/agent/_snippets/untrusted_content.md +2 -0
  433. nanoinfra-0.3.0/nanoinfra/templates/agent/consolidator_archive.md +24 -0
  434. nanoinfra-0.3.0/nanoinfra/templates/agent/cron_reminder.md +9 -0
  435. nanoinfra-0.3.0/nanoinfra/templates/agent/dream.md +108 -0
  436. nanoinfra-0.3.0/nanoinfra/templates/agent/evaluator.md +17 -0
  437. nanoinfra-0.3.0/nanoinfra/templates/agent/goal_runtime.md +31 -0
  438. nanoinfra-0.3.0/nanoinfra/templates/agent/identity.md +31 -0
  439. nanoinfra-0.3.0/nanoinfra/templates/agent/max_iterations_message.md +1 -0
  440. nanoinfra-0.3.0/nanoinfra/templates/agent/platform_policy.md +10 -0
  441. nanoinfra-0.3.0/nanoinfra/templates/agent/skills_section.md +5 -0
  442. nanoinfra-0.3.0/nanoinfra/templates/agent/subagent_announce.md +8 -0
  443. nanoinfra-0.3.0/nanoinfra/templates/agent/subagent_system.md +21 -0
  444. nanoinfra-0.3.0/nanoinfra/templates/agent/tool_contract.md +83 -0
  445. nanoinfra-0.3.0/nanoinfra/templates/legacy/SOUL.md +18 -0
  446. nanoinfra-0.3.0/nanoinfra/templates/memory/MEMORY.md +23 -0
  447. nanoinfra-0.3.0/nanoinfra/templates/memory/__init__.py +0 -0
  448. nanoinfra-0.3.0/nanoinfra/templates/prompts/README.md +25 -0
  449. nanoinfra-0.3.0/nanoinfra/triggers/__init__.py +19 -0
  450. nanoinfra-0.3.0/nanoinfra/triggers/local_runner.py +214 -0
  451. nanoinfra-0.3.0/nanoinfra/triggers/local_session_turns.py +62 -0
  452. nanoinfra-0.3.0/nanoinfra/triggers/local_store.py +489 -0
  453. nanoinfra-0.3.0/nanoinfra/triggers/local_turns.py +55 -0
  454. nanoinfra-0.3.0/nanoinfra/triggers/local_types.py +158 -0
  455. nanoinfra-0.3.0/nanoinfra/utils/__init__.py +42 -0
  456. nanoinfra-0.3.0/nanoinfra/utils/artifacts.py +122 -0
  457. nanoinfra-0.3.0/nanoinfra/utils/cancellation.py +10 -0
  458. nanoinfra-0.3.0/nanoinfra/utils/dict_keys.py +17 -0
  459. nanoinfra-0.3.0/nanoinfra/utils/document.py +488 -0
  460. nanoinfra-0.3.0/nanoinfra/utils/evaluator.py +138 -0
  461. nanoinfra-0.3.0/nanoinfra/utils/file_edit_events.py +513 -0
  462. nanoinfra-0.3.0/nanoinfra/utils/gitstore.py +585 -0
  463. nanoinfra-0.3.0/nanoinfra/utils/helpers.py +921 -0
  464. nanoinfra-0.3.0/nanoinfra/utils/llm_runtime.py +104 -0
  465. nanoinfra-0.3.0/nanoinfra/utils/logging_bridge.py +47 -0
  466. nanoinfra-0.3.0/nanoinfra/utils/media_decode.py +93 -0
  467. nanoinfra-0.3.0/nanoinfra/utils/path.py +107 -0
  468. nanoinfra-0.3.0/nanoinfra/utils/progress_events.py +109 -0
  469. nanoinfra-0.3.0/nanoinfra/utils/prompt_templates.py +35 -0
  470. nanoinfra-0.3.0/nanoinfra/utils/restart.py +91 -0
  471. nanoinfra-0.3.0/nanoinfra/utils/run_records.py +58 -0
  472. nanoinfra-0.3.0/nanoinfra/utils/runtime.py +213 -0
  473. nanoinfra-0.3.0/nanoinfra/utils/searchusage.py +179 -0
  474. nanoinfra-0.3.0/nanoinfra/utils/subagent_channel_display.py +59 -0
  475. nanoinfra-0.3.0/nanoinfra/utils/tool_hints.py +154 -0
  476. nanoinfra-0.3.0/nanoinfra/utils/workspace_prompts.py +58 -0
  477. nanoinfra-0.3.0/nanoinfra/web/__init__.py +9 -0
  478. nanoinfra-0.3.0/nanoinfra/web/dist/assets/DeleteConfirm-ZDIBHxDw.js +1 -0
  479. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  480. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  481. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  482. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  483. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  484. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  485. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  486. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  487. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  488. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  489. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  490. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  491. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  492. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  493. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  494. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  495. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  496. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  497. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  498. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  499. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  500. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  501. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  502. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  503. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  504. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  505. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  506. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  507. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  508. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  509. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  510. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  511. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  512. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  513. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  514. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  515. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  516. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  517. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  518. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  519. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  520. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  521. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  522. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  523. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  524. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  525. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  526. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  527. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  528. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  529. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  530. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  531. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  532. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  533. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  534. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  535. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  536. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  537. nanoinfra-0.3.0/nanoinfra/web/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  538. nanoinfra-0.3.0/nanoinfra/web/dist/assets/RenameChatDialog-DydJo9i7.js +1 -0
  539. nanoinfra-0.3.0/nanoinfra/web/dist/assets/SessionSearchDialog-LVk5Runq.js +1 -0
  540. nanoinfra-0.3.0/nanoinfra/web/dist/assets/SettingsView-Dr6-NX9Y.js +131 -0
  541. nanoinfra-0.3.0/nanoinfra/web/dist/assets/abap-BTxTsz5m.js +1 -0
  542. nanoinfra-0.3.0/nanoinfra/web/dist/assets/abnf-CLx68HhD.js +1 -0
  543. nanoinfra-0.3.0/nanoinfra/web/dist/assets/actionscript-qqdYwETx.js +1 -0
  544. nanoinfra-0.3.0/nanoinfra/web/dist/assets/ada-BPecdljE.js +1 -0
  545. nanoinfra-0.3.0/nanoinfra/web/dist/assets/agda-Bl0dNccZ.js +1 -0
  546. nanoinfra-0.3.0/nanoinfra/web/dist/assets/al-CIrM5fJx.js +1 -0
  547. nanoinfra-0.3.0/nanoinfra/web/dist/assets/alert-dialog-B0V_zlz4.js +7 -0
  548. nanoinfra-0.3.0/nanoinfra/web/dist/assets/antlr4-O20o1JaO.js +1 -0
  549. nanoinfra-0.3.0/nanoinfra/web/dist/assets/apacheconf-c-kQsXIt.js +1 -0
  550. nanoinfra-0.3.0/nanoinfra/web/dist/assets/apex-D1qqbfrO.js +1 -0
  551. nanoinfra-0.3.0/nanoinfra/web/dist/assets/apl-Bew89ZVd.js +1 -0
  552. nanoinfra-0.3.0/nanoinfra/web/dist/assets/applescript-jRUoVSdD.js +1 -0
  553. nanoinfra-0.3.0/nanoinfra/web/dist/assets/aql-Bgg3OW_A.js +1 -0
  554. nanoinfra-0.3.0/nanoinfra/web/dist/assets/arduino-Dohf8bP6.js +1 -0
  555. nanoinfra-0.3.0/nanoinfra/web/dist/assets/arff-DfFoUR23.js +1 -0
  556. nanoinfra-0.3.0/nanoinfra/web/dist/assets/asciidoc-BRc3eEN0.js +1 -0
  557. nanoinfra-0.3.0/nanoinfra/web/dist/assets/asm6502-u9-V1pRU.js +1 -0
  558. nanoinfra-0.3.0/nanoinfra/web/dist/assets/asmatmel-B3Af4sG0.js +1 -0
  559. nanoinfra-0.3.0/nanoinfra/web/dist/assets/aspnet-BDvp-7Wl.js +1 -0
  560. nanoinfra-0.3.0/nanoinfra/web/dist/assets/autohotkey-DdC-pO6a.js +1 -0
  561. nanoinfra-0.3.0/nanoinfra/web/dist/assets/autoit-BN6oNL5n.js +1 -0
  562. nanoinfra-0.3.0/nanoinfra/web/dist/assets/avisynth-6T6SUgYj.js +1 -0
  563. nanoinfra-0.3.0/nanoinfra/web/dist/assets/avro-idl-Bu6M9MJh.js +1 -0
  564. nanoinfra-0.3.0/nanoinfra/web/dist/assets/bash-DFCN2G-8.js +1 -0
  565. nanoinfra-0.3.0/nanoinfra/web/dist/assets/basic-BJ14E6Q1.js +1 -0
  566. nanoinfra-0.3.0/nanoinfra/web/dist/assets/batch-D8ZsaM5L.js +1 -0
  567. nanoinfra-0.3.0/nanoinfra/web/dist/assets/bbcode-xlw1QWJE.js +1 -0
  568. nanoinfra-0.3.0/nanoinfra/web/dist/assets/bicep-Df1LXZAw.js +1 -0
  569. nanoinfra-0.3.0/nanoinfra/web/dist/assets/birb-D6mrJGQn.js +1 -0
  570. nanoinfra-0.3.0/nanoinfra/web/dist/assets/bison-DAqRaaPJ.js +1 -0
  571. nanoinfra-0.3.0/nanoinfra/web/dist/assets/bnf-D0fVwNkm.js +1 -0
  572. nanoinfra-0.3.0/nanoinfra/web/dist/assets/brainfuck-BFNPbvsu.js +1 -0
  573. nanoinfra-0.3.0/nanoinfra/web/dist/assets/brightscript-DEBze7zc.js +1 -0
  574. nanoinfra-0.3.0/nanoinfra/web/dist/assets/bro-_BPPb1DQ.js +1 -0
  575. nanoinfra-0.3.0/nanoinfra/web/dist/assets/bsl-DJTw8l_K.js +1 -0
  576. nanoinfra-0.3.0/nanoinfra/web/dist/assets/c-CU6bGXwY.js +1 -0
  577. nanoinfra-0.3.0/nanoinfra/web/dist/assets/cfscript-yFvgJQSZ.js +1 -0
  578. nanoinfra-0.3.0/nanoinfra/web/dist/assets/chaiscript-Ck5qtb83.js +1 -0
  579. nanoinfra-0.3.0/nanoinfra/web/dist/assets/cil-D3NXLkSh.js +1 -0
  580. nanoinfra-0.3.0/nanoinfra/web/dist/assets/clojure-Dx1UKku8.js +1 -0
  581. nanoinfra-0.3.0/nanoinfra/web/dist/assets/cmake-zLAKhdte.js +1 -0
  582. nanoinfra-0.3.0/nanoinfra/web/dist/assets/cobol-D-7rrwPr.js +1 -0
  583. nanoinfra-0.3.0/nanoinfra/web/dist/assets/coffeescript-XEz2zYpD.js +1 -0
  584. nanoinfra-0.3.0/nanoinfra/web/dist/assets/concurnas-D2kKitPB.js +1 -0
  585. nanoinfra-0.3.0/nanoinfra/web/dist/assets/coq-xmWwMeJN.js +1 -0
  586. nanoinfra-0.3.0/nanoinfra/web/dist/assets/cpp-5cZaIPMz.js +1 -0
  587. nanoinfra-0.3.0/nanoinfra/web/dist/assets/crystal-DQyGoBIr.js +1 -0
  588. nanoinfra-0.3.0/nanoinfra/web/dist/assets/csharp-DlaZ0bzk.js +1 -0
  589. nanoinfra-0.3.0/nanoinfra/web/dist/assets/cshtml-BDm6i3sP.js +1 -0
  590. nanoinfra-0.3.0/nanoinfra/web/dist/assets/csp-eVThHT9k.js +1 -0
  591. nanoinfra-0.3.0/nanoinfra/web/dist/assets/css-extras-CHYg7Eks.js +1 -0
  592. nanoinfra-0.3.0/nanoinfra/web/dist/assets/csv-DlvrOilb.js +1 -0
  593. nanoinfra-0.3.0/nanoinfra/web/dist/assets/cypher-d8KF7AVw.js +1 -0
  594. nanoinfra-0.3.0/nanoinfra/web/dist/assets/d-CUNQj6Fk.js +1 -0
  595. nanoinfra-0.3.0/nanoinfra/web/dist/assets/dart-BQk_sM1o.js +1 -0
  596. nanoinfra-0.3.0/nanoinfra/web/dist/assets/dataweave-czMwA1wK.js +1 -0
  597. nanoinfra-0.3.0/nanoinfra/web/dist/assets/dax-BfSjbx7R.js +1 -0
  598. nanoinfra-0.3.0/nanoinfra/web/dist/assets/dhall-DUF34t8l.js +1 -0
  599. nanoinfra-0.3.0/nanoinfra/web/dist/assets/dialog-Cuj65W-T.js +1 -0
  600. nanoinfra-0.3.0/nanoinfra/web/dist/assets/diff-JGH8rvoM.js +3 -0
  601. nanoinfra-0.3.0/nanoinfra/web/dist/assets/django-BU98z0AH.js +1 -0
  602. nanoinfra-0.3.0/nanoinfra/web/dist/assets/dns-zone-file-CEvdzj6J.js +1 -0
  603. nanoinfra-0.3.0/nanoinfra/web/dist/assets/docker-gh-8jsQJ.js +1 -0
  604. nanoinfra-0.3.0/nanoinfra/web/dist/assets/dot-qNMEVUQr.js +1 -0
  605. nanoinfra-0.3.0/nanoinfra/web/dist/assets/ebnf-CaSoWfcb.js +1 -0
  606. nanoinfra-0.3.0/nanoinfra/web/dist/assets/editorconfig-De2WV9Er.js +1 -0
  607. nanoinfra-0.3.0/nanoinfra/web/dist/assets/eiffel-BVpx-9To.js +1 -0
  608. nanoinfra-0.3.0/nanoinfra/web/dist/assets/ejs-BH3gqrL3.js +1 -0
  609. nanoinfra-0.3.0/nanoinfra/web/dist/assets/elixir-PLLgWZCk.js +1 -0
  610. nanoinfra-0.3.0/nanoinfra/web/dist/assets/elm-D2ZFQ3X8.js +1 -0
  611. nanoinfra-0.3.0/nanoinfra/web/dist/assets/erb-Bw2Goo34.js +1 -0
  612. nanoinfra-0.3.0/nanoinfra/web/dist/assets/erlang-CiC_ICgs.js +1 -0
  613. nanoinfra-0.3.0/nanoinfra/web/dist/assets/etlua-CltNTnS0.js +1 -0
  614. nanoinfra-0.3.0/nanoinfra/web/dist/assets/excel-formula-C6P2vswa.js +1 -0
  615. nanoinfra-0.3.0/nanoinfra/web/dist/assets/factor-Bdl0BGyl.js +1 -0
  616. nanoinfra-0.3.0/nanoinfra/web/dist/assets/false-CcRRJINV.js +1 -0
  617. nanoinfra-0.3.0/nanoinfra/web/dist/assets/firestore-security-rules-DnKgC_Uj.js +1 -0
  618. nanoinfra-0.3.0/nanoinfra/web/dist/assets/flow-B2sUSJga.js +1 -0
  619. nanoinfra-0.3.0/nanoinfra/web/dist/assets/fortran-j2KY0CFH.js +1 -0
  620. nanoinfra-0.3.0/nanoinfra/web/dist/assets/fsharp-9iDYT-zt.js +1 -0
  621. nanoinfra-0.3.0/nanoinfra/web/dist/assets/ftl-W31g5ZIv.js +1 -0
  622. nanoinfra-0.3.0/nanoinfra/web/dist/assets/gap-DWJ-huBz.js +1 -0
  623. nanoinfra-0.3.0/nanoinfra/web/dist/assets/gcode-B6ivGqai.js +1 -0
  624. nanoinfra-0.3.0/nanoinfra/web/dist/assets/gdscript-CtuKemd2.js +1 -0
  625. nanoinfra-0.3.0/nanoinfra/web/dist/assets/gedcom-DfKmDPEL.js +1 -0
  626. nanoinfra-0.3.0/nanoinfra/web/dist/assets/gherkin-B68_XQXn.js +1 -0
  627. nanoinfra-0.3.0/nanoinfra/web/dist/assets/git-C4ltGfrF.js +1 -0
  628. nanoinfra-0.3.0/nanoinfra/web/dist/assets/glsl-BxvWe1Dj.js +1 -0
  629. nanoinfra-0.3.0/nanoinfra/web/dist/assets/gml-YAlx00R8.js +1 -0
  630. nanoinfra-0.3.0/nanoinfra/web/dist/assets/gn-Dyg3prPj.js +1 -0
  631. nanoinfra-0.3.0/nanoinfra/web/dist/assets/go-BhDVsLpi.js +1 -0
  632. nanoinfra-0.3.0/nanoinfra/web/dist/assets/go-module-BYsltJqc.js +1 -0
  633. nanoinfra-0.3.0/nanoinfra/web/dist/assets/graphql-VeJ4LWpq.js +1 -0
  634. nanoinfra-0.3.0/nanoinfra/web/dist/assets/groovy-FwMHF20-.js +1 -0
  635. nanoinfra-0.3.0/nanoinfra/web/dist/assets/haml-BU7vi0tL.js +1 -0
  636. nanoinfra-0.3.0/nanoinfra/web/dist/assets/handlebars-BNcquLRp.js +1 -0
  637. nanoinfra-0.3.0/nanoinfra/web/dist/assets/haskell-CyebQwDA.js +1 -0
  638. nanoinfra-0.3.0/nanoinfra/web/dist/assets/haxe-DWTiJRgy.js +1 -0
  639. nanoinfra-0.3.0/nanoinfra/web/dist/assets/hcl-Cms86IOV.js +1 -0
  640. nanoinfra-0.3.0/nanoinfra/web/dist/assets/highlighted-body-OFNGDK62-D5OYcooC.js +1 -0
  641. nanoinfra-0.3.0/nanoinfra/web/dist/assets/hlsl-bYo0PLX1.js +1 -0
  642. nanoinfra-0.3.0/nanoinfra/web/dist/assets/hoon-JJcsBk-a.js +1 -0
  643. nanoinfra-0.3.0/nanoinfra/web/dist/assets/hpkp-6tC-Ja1K.js +1 -0
  644. nanoinfra-0.3.0/nanoinfra/web/dist/assets/hsts-Bc1fvY7h.js +1 -0
  645. nanoinfra-0.3.0/nanoinfra/web/dist/assets/http-DvwDNyuH.js +1 -0
  646. nanoinfra-0.3.0/nanoinfra/web/dist/assets/ichigojam-CyuMIJEv.js +1 -0
  647. nanoinfra-0.3.0/nanoinfra/web/dist/assets/icon-CzFDQeeN.js +1 -0
  648. nanoinfra-0.3.0/nanoinfra/web/dist/assets/icu-message-format-BV2QCfdX.js +1 -0
  649. nanoinfra-0.3.0/nanoinfra/web/dist/assets/idris-Tm3kwcbJ.js +1 -0
  650. nanoinfra-0.3.0/nanoinfra/web/dist/assets/iecst-CQWhEFf-.js +1 -0
  651. nanoinfra-0.3.0/nanoinfra/web/dist/assets/ignore-BhvS0J7n.js +1 -0
  652. nanoinfra-0.3.0/nanoinfra/web/dist/assets/imageEncode.worker-Cs1P3eq4.js +1 -0
  653. nanoinfra-0.3.0/nanoinfra/web/dist/assets/index-COQcQw3j.css +1 -0
  654. nanoinfra-0.3.0/nanoinfra/web/dist/assets/index-dqQxZS-d.js +526 -0
  655. nanoinfra-0.3.0/nanoinfra/web/dist/assets/inform7-DABodzZ7.js +1 -0
  656. nanoinfra-0.3.0/nanoinfra/web/dist/assets/ini-CQ8wBPPu.js +1 -0
  657. nanoinfra-0.3.0/nanoinfra/web/dist/assets/io-DHeWagML.js +1 -0
  658. nanoinfra-0.3.0/nanoinfra/web/dist/assets/j-CothTcZb.js +1 -0
  659. nanoinfra-0.3.0/nanoinfra/web/dist/assets/java-DAyr6OiZ.js +1 -0
  660. nanoinfra-0.3.0/nanoinfra/web/dist/assets/javadoc-CR2rGaiD.js +1 -0
  661. nanoinfra-0.3.0/nanoinfra/web/dist/assets/javadoclike-CDWiam3v.js +1 -0
  662. nanoinfra-0.3.0/nanoinfra/web/dist/assets/javastacktrace-DItaBDRo.js +1 -0
  663. nanoinfra-0.3.0/nanoinfra/web/dist/assets/jexl-BrkGGecr.js +1 -0
  664. nanoinfra-0.3.0/nanoinfra/web/dist/assets/jolie-CP_qNEPz.js +1 -0
  665. nanoinfra-0.3.0/nanoinfra/web/dist/assets/jq-BSUDsBkM.js +1 -0
  666. nanoinfra-0.3.0/nanoinfra/web/dist/assets/js-extras-CFcVaE6s.js +1 -0
  667. nanoinfra-0.3.0/nanoinfra/web/dist/assets/js-templates-czRfUMWj.js +1 -0
  668. nanoinfra-0.3.0/nanoinfra/web/dist/assets/jsdoc-DbELV2Gy.js +1 -0
  669. nanoinfra-0.3.0/nanoinfra/web/dist/assets/json-CHu0hQI6.js +1 -0
  670. nanoinfra-0.3.0/nanoinfra/web/dist/assets/json5-CTORnimT.js +1 -0
  671. nanoinfra-0.3.0/nanoinfra/web/dist/assets/jsonp-DPbSLZki.js +1 -0
  672. nanoinfra-0.3.0/nanoinfra/web/dist/assets/jsstacktrace-B0EfpnIy.js +1 -0
  673. nanoinfra-0.3.0/nanoinfra/web/dist/assets/jsx-Ch3JCHy3.js +1 -0
  674. nanoinfra-0.3.0/nanoinfra/web/dist/assets/julia-D3cJrIK_.js +1 -0
  675. nanoinfra-0.3.0/nanoinfra/web/dist/assets/katex-BSBacQyE.js +257 -0
  676. nanoinfra-0.3.0/nanoinfra/web/dist/assets/katex-wklAmtGL.css +1 -0
  677. nanoinfra-0.3.0/nanoinfra/web/dist/assets/keepalived-CH0aAWbU.js +1 -0
  678. nanoinfra-0.3.0/nanoinfra/web/dist/assets/keyman-COvMFVUq.js +1 -0
  679. nanoinfra-0.3.0/nanoinfra/web/dist/assets/kotlin-CGzx6qro.js +1 -0
  680. nanoinfra-0.3.0/nanoinfra/web/dist/assets/kumir-Cq2psYCX.js +1 -0
  681. nanoinfra-0.3.0/nanoinfra/web/dist/assets/kusto-HZ_JB1XH.js +1 -0
  682. nanoinfra-0.3.0/nanoinfra/web/dist/assets/latex-ChB4GBVq.js +1 -0
  683. nanoinfra-0.3.0/nanoinfra/web/dist/assets/latte-Cny52NdS.js +1 -0
  684. nanoinfra-0.3.0/nanoinfra/web/dist/assets/less-VSJ8E64n.js +1 -0
  685. nanoinfra-0.3.0/nanoinfra/web/dist/assets/lilypond-B53yDbdb.js +1 -0
  686. nanoinfra-0.3.0/nanoinfra/web/dist/assets/liquid-B7MjdZ_3.js +1 -0
  687. nanoinfra-0.3.0/nanoinfra/web/dist/assets/lisp-p_h1GSgj.js +1 -0
  688. nanoinfra-0.3.0/nanoinfra/web/dist/assets/livescript-BpsWwdY8.js +1 -0
  689. nanoinfra-0.3.0/nanoinfra/web/dist/assets/llvm-B0m9jYdg.js +1 -0
  690. nanoinfra-0.3.0/nanoinfra/web/dist/assets/log-CnSYgwOP.js +1 -0
  691. nanoinfra-0.3.0/nanoinfra/web/dist/assets/lolcode-D6mwtPdy.js +1 -0
  692. nanoinfra-0.3.0/nanoinfra/web/dist/assets/lua-DiLlijZd.js +1 -0
  693. nanoinfra-0.3.0/nanoinfra/web/dist/assets/magma-Br9p9IL5.js +1 -0
  694. nanoinfra-0.3.0/nanoinfra/web/dist/assets/makefile-DCUy7NlT.js +1 -0
  695. nanoinfra-0.3.0/nanoinfra/web/dist/assets/markdown-K1xXj6rc.js +1 -0
  696. nanoinfra-0.3.0/nanoinfra/web/dist/assets/markdown-vendor-CZkOVCq6.js +168 -0
  697. nanoinfra-0.3.0/nanoinfra/web/dist/assets/markdown-vendor-Yd9OhMyU.css +1 -0
  698. nanoinfra-0.3.0/nanoinfra/web/dist/assets/markup-templating-k9UQ6WCq.js +1 -0
  699. nanoinfra-0.3.0/nanoinfra/web/dist/assets/matlab-CpIDxJ9Q.js +1 -0
  700. nanoinfra-0.3.0/nanoinfra/web/dist/assets/maxscript-CeRxpTNa.js +1 -0
  701. nanoinfra-0.3.0/nanoinfra/web/dist/assets/mel-D5xqB5Wq.js +1 -0
  702. nanoinfra-0.3.0/nanoinfra/web/dist/assets/mermaid-GHXKKRXX-Cbj1jG9Z.js +4 -0
  703. nanoinfra-0.3.0/nanoinfra/web/dist/assets/mermaid-db0XXCln.js +1 -0
  704. nanoinfra-0.3.0/nanoinfra/web/dist/assets/mizar-Ckizxveo.js +1 -0
  705. nanoinfra-0.3.0/nanoinfra/web/dist/assets/mongodb-B36B026n.js +1 -0
  706. nanoinfra-0.3.0/nanoinfra/web/dist/assets/monkey-Ce8X25vC.js +1 -0
  707. nanoinfra-0.3.0/nanoinfra/web/dist/assets/moonscript-Ie1g7I5K.js +1 -0
  708. nanoinfra-0.3.0/nanoinfra/web/dist/assets/n1ql-Byk78Fu3.js +1 -0
  709. nanoinfra-0.3.0/nanoinfra/web/dist/assets/n4js-YbPKNTZP.js +1 -0
  710. nanoinfra-0.3.0/nanoinfra/web/dist/assets/nand2tetris-hdl-BbJgreJ8.js +1 -0
  711. nanoinfra-0.3.0/nanoinfra/web/dist/assets/naniscript-DO6XXost.js +1 -0
  712. nanoinfra-0.3.0/nanoinfra/web/dist/assets/nasm-Db_lGoWH.js +1 -0
  713. nanoinfra-0.3.0/nanoinfra/web/dist/assets/neon-Dq9wgyu8.js +1 -0
  714. nanoinfra-0.3.0/nanoinfra/web/dist/assets/nevod-DmZWHTwe.js +1 -0
  715. nanoinfra-0.3.0/nanoinfra/web/dist/assets/nginx-DCKEnDNk.js +1 -0
  716. nanoinfra-0.3.0/nanoinfra/web/dist/assets/nim-ikGLGLqZ.js +1 -0
  717. nanoinfra-0.3.0/nanoinfra/web/dist/assets/nix-B6GyNmy6.js +1 -0
  718. nanoinfra-0.3.0/nanoinfra/web/dist/assets/nsis-_JBvKfJG.js +1 -0
  719. nanoinfra-0.3.0/nanoinfra/web/dist/assets/objectivec-RgqExJA8.js +1 -0
  720. nanoinfra-0.3.0/nanoinfra/web/dist/assets/ocaml-B9m7r8UP.js +1 -0
  721. nanoinfra-0.3.0/nanoinfra/web/dist/assets/opencl-UEC_ceU-.js +1 -0
  722. nanoinfra-0.3.0/nanoinfra/web/dist/assets/openqasm-orq9Mr9d.js +1 -0
  723. nanoinfra-0.3.0/nanoinfra/web/dist/assets/oz-CKl3dYjZ.js +1 -0
  724. nanoinfra-0.3.0/nanoinfra/web/dist/assets/parigp-fMgVnc21.js +1 -0
  725. nanoinfra-0.3.0/nanoinfra/web/dist/assets/parser-DrGL1b4Y.js +1 -0
  726. nanoinfra-0.3.0/nanoinfra/web/dist/assets/pascal-CFxHDCsS.js +1 -0
  727. nanoinfra-0.3.0/nanoinfra/web/dist/assets/pascaligo-BTtbNEDx.js +1 -0
  728. nanoinfra-0.3.0/nanoinfra/web/dist/assets/pcaxis-orOlXN9z.js +1 -0
  729. nanoinfra-0.3.0/nanoinfra/web/dist/assets/peoplecode-CJBBddeZ.js +1 -0
  730. nanoinfra-0.3.0/nanoinfra/web/dist/assets/perl-CAz1ri2p.js +1 -0
  731. nanoinfra-0.3.0/nanoinfra/web/dist/assets/php-BwfV8XPQ.js +1 -0
  732. nanoinfra-0.3.0/nanoinfra/web/dist/assets/php-extras-DRrkcUpN.js +1 -0
  733. nanoinfra-0.3.0/nanoinfra/web/dist/assets/phpdoc-BBmL-ZeZ.js +1 -0
  734. nanoinfra-0.3.0/nanoinfra/web/dist/assets/plsql-BpBgY5NH.js +1 -0
  735. nanoinfra-0.3.0/nanoinfra/web/dist/assets/powerquery-DoaGIXM9.js +1 -0
  736. nanoinfra-0.3.0/nanoinfra/web/dist/assets/powershell-BnLltkAW.js +1 -0
  737. nanoinfra-0.3.0/nanoinfra/web/dist/assets/processing-IJCFLkCS.js +1 -0
  738. nanoinfra-0.3.0/nanoinfra/web/dist/assets/prolog-2PBGHdOZ.js +1 -0
  739. nanoinfra-0.3.0/nanoinfra/web/dist/assets/promql-YFwJaj_q.js +1 -0
  740. nanoinfra-0.3.0/nanoinfra/web/dist/assets/properties-DR02LL1W.js +1 -0
  741. nanoinfra-0.3.0/nanoinfra/web/dist/assets/protobuf-CVQaLHQ_.js +1 -0
  742. nanoinfra-0.3.0/nanoinfra/web/dist/assets/psl-WNlCik9J.js +1 -0
  743. nanoinfra-0.3.0/nanoinfra/web/dist/assets/pug-Di_CDG3n.js +1 -0
  744. nanoinfra-0.3.0/nanoinfra/web/dist/assets/puppet-Bm_TLMRJ.js +1 -0
  745. nanoinfra-0.3.0/nanoinfra/web/dist/assets/pure-BrYj7IoG.js +1 -0
  746. nanoinfra-0.3.0/nanoinfra/web/dist/assets/purebasic-ixTEgi4L.js +1 -0
  747. nanoinfra-0.3.0/nanoinfra/web/dist/assets/purescript-DIR-NsY6.js +1 -0
  748. nanoinfra-0.3.0/nanoinfra/web/dist/assets/python-D1jh0EKw.js +1 -0
  749. nanoinfra-0.3.0/nanoinfra/web/dist/assets/q-Bb8Zse27.js +1 -0
  750. nanoinfra-0.3.0/nanoinfra/web/dist/assets/qml-CP_FAJKr.js +1 -0
  751. nanoinfra-0.3.0/nanoinfra/web/dist/assets/qore-C2ooZZfX.js +1 -0
  752. nanoinfra-0.3.0/nanoinfra/web/dist/assets/qsharp-BI42kppE.js +1 -0
  753. nanoinfra-0.3.0/nanoinfra/web/dist/assets/r-DfOa-ini.js +1 -0
  754. nanoinfra-0.3.0/nanoinfra/web/dist/assets/racket-2N3X-pvE.js +1 -0
  755. nanoinfra-0.3.0/nanoinfra/web/dist/assets/reason-snFKVO9k.js +1 -0
  756. nanoinfra-0.3.0/nanoinfra/web/dist/assets/regex-BrsDgjv2.js +1 -0
  757. nanoinfra-0.3.0/nanoinfra/web/dist/assets/rego-B00eUQoF.js +1 -0
  758. nanoinfra-0.3.0/nanoinfra/web/dist/assets/renpy-9OqpgW-p.js +1 -0
  759. nanoinfra-0.3.0/nanoinfra/web/dist/assets/rest-DujueOqJ.js +1 -0
  760. nanoinfra-0.3.0/nanoinfra/web/dist/assets/rip-CyKUjsHx.js +1 -0
  761. nanoinfra-0.3.0/nanoinfra/web/dist/assets/roboconf-HAvp2Huk.js +1 -0
  762. nanoinfra-0.3.0/nanoinfra/web/dist/assets/robotframework-Df-X-_Qm.js +1 -0
  763. nanoinfra-0.3.0/nanoinfra/web/dist/assets/ruby-iHitQxjy.js +1 -0
  764. nanoinfra-0.3.0/nanoinfra/web/dist/assets/rust-DchIM8j6.js +1 -0
  765. nanoinfra-0.3.0/nanoinfra/web/dist/assets/sas-ufQXqM5o.js +1 -0
  766. nanoinfra-0.3.0/nanoinfra/web/dist/assets/sass-Cj2yVtex.js +1 -0
  767. nanoinfra-0.3.0/nanoinfra/web/dist/assets/scala-BJGpMetZ.js +1 -0
  768. nanoinfra-0.3.0/nanoinfra/web/dist/assets/scheme-1VR-T03i.js +1 -0
  769. nanoinfra-0.3.0/nanoinfra/web/dist/assets/scss-D5TunEI7.js +1 -0
  770. nanoinfra-0.3.0/nanoinfra/web/dist/assets/shell-session-HCg8iNBC.js +1 -0
  771. nanoinfra-0.3.0/nanoinfra/web/dist/assets/smali-c2OU3PLu.js +1 -0
  772. nanoinfra-0.3.0/nanoinfra/web/dist/assets/smalltalk-oOrEyl88.js +1 -0
  773. nanoinfra-0.3.0/nanoinfra/web/dist/assets/smarty-DFR51zAT.js +1 -0
  774. nanoinfra-0.3.0/nanoinfra/web/dist/assets/sml-CQGRxfW1.js +1 -0
  775. nanoinfra-0.3.0/nanoinfra/web/dist/assets/solidity-3EYQLAvY.js +1 -0
  776. nanoinfra-0.3.0/nanoinfra/web/dist/assets/solution-file-x6dnrC44.js +1 -0
  777. nanoinfra-0.3.0/nanoinfra/web/dist/assets/soy-PuYURrzy.js +1 -0
  778. nanoinfra-0.3.0/nanoinfra/web/dist/assets/sparql-CHB9zWj0.js +1 -0
  779. nanoinfra-0.3.0/nanoinfra/web/dist/assets/splunk-spl-C51OGsgc.js +1 -0
  780. nanoinfra-0.3.0/nanoinfra/web/dist/assets/sqf-0xN0DNfS.js +1 -0
  781. nanoinfra-0.3.0/nanoinfra/web/dist/assets/sql-B9tf2GY5.js +1 -0
  782. nanoinfra-0.3.0/nanoinfra/web/dist/assets/squirrel-BxzL_FpJ.js +1 -0
  783. nanoinfra-0.3.0/nanoinfra/web/dist/assets/stan-DePi-HcQ.js +1 -0
  784. nanoinfra-0.3.0/nanoinfra/web/dist/assets/stylus-Ce23ZbDQ.js +1 -0
  785. nanoinfra-0.3.0/nanoinfra/web/dist/assets/swift-BmM1fqZY.js +1 -0
  786. nanoinfra-0.3.0/nanoinfra/web/dist/assets/syntax-highlight-hGwkQuZs.js +22 -0
  787. nanoinfra-0.3.0/nanoinfra/web/dist/assets/systemd-DRWE3PNR.js +2 -0
  788. nanoinfra-0.3.0/nanoinfra/web/dist/assets/t4-cs-DygKi09R.js +1 -0
  789. nanoinfra-0.3.0/nanoinfra/web/dist/assets/t4-templating-DaeIO3Rl.js +1 -0
  790. nanoinfra-0.3.0/nanoinfra/web/dist/assets/t4-vb-CQvocmCq.js +1 -0
  791. nanoinfra-0.3.0/nanoinfra/web/dist/assets/tap-Ad_3vl9H.js +1 -0
  792. nanoinfra-0.3.0/nanoinfra/web/dist/assets/tcl-CJ2zj8b5.js +1 -0
  793. nanoinfra-0.3.0/nanoinfra/web/dist/assets/textile-DwYMozn_.js +1 -0
  794. nanoinfra-0.3.0/nanoinfra/web/dist/assets/toml-BghJOb86.js +1 -0
  795. nanoinfra-0.3.0/nanoinfra/web/dist/assets/tremor-BRcudkgZ.js +1 -0
  796. nanoinfra-0.3.0/nanoinfra/web/dist/assets/tsx-C31jhlu6.js +1 -0
  797. nanoinfra-0.3.0/nanoinfra/web/dist/assets/tt2-CJBUzurT.js +1 -0
  798. nanoinfra-0.3.0/nanoinfra/web/dist/assets/turtle-GmhaHbXh.js +1 -0
  799. nanoinfra-0.3.0/nanoinfra/web/dist/assets/twig-QcsrZSVz.js +1 -0
  800. nanoinfra-0.3.0/nanoinfra/web/dist/assets/typescript-vp94J5H4.js +1 -0
  801. nanoinfra-0.3.0/nanoinfra/web/dist/assets/typoscript-D7bKZxA-.js +1 -0
  802. nanoinfra-0.3.0/nanoinfra/web/dist/assets/unrealscript-BEYi0AqJ.js +1 -0
  803. nanoinfra-0.3.0/nanoinfra/web/dist/assets/uorazor-DlcfCSi0.js +1 -0
  804. nanoinfra-0.3.0/nanoinfra/web/dist/assets/uri-DJHnpKcc.js +1 -0
  805. nanoinfra-0.3.0/nanoinfra/web/dist/assets/v-cHUyfWYR.js +1 -0
  806. nanoinfra-0.3.0/nanoinfra/web/dist/assets/vala-DrOdS0cL.js +1 -0
  807. nanoinfra-0.3.0/nanoinfra/web/dist/assets/vbnet-Dxbfi9_U.js +1 -0
  808. nanoinfra-0.3.0/nanoinfra/web/dist/assets/velocity-Dt6bOyAZ.js +1 -0
  809. nanoinfra-0.3.0/nanoinfra/web/dist/assets/verilog-MWS9oFVa.js +1 -0
  810. nanoinfra-0.3.0/nanoinfra/web/dist/assets/vhdl-Rr8j1ZNg.js +1 -0
  811. nanoinfra-0.3.0/nanoinfra/web/dist/assets/vim-CqguD1Br.js +1 -0
  812. nanoinfra-0.3.0/nanoinfra/web/dist/assets/visual-basic-DNlcXxNQ.js +1 -0
  813. nanoinfra-0.3.0/nanoinfra/web/dist/assets/warpscript-Kr55HxC4.js +1 -0
  814. nanoinfra-0.3.0/nanoinfra/web/dist/assets/wasm-IPF9mchX.js +1 -0
  815. nanoinfra-0.3.0/nanoinfra/web/dist/assets/web-idl-B_gprUln.js +1 -0
  816. nanoinfra-0.3.0/nanoinfra/web/dist/assets/wiki-B8E4RaRG.js +1 -0
  817. nanoinfra-0.3.0/nanoinfra/web/dist/assets/wolfram-CAxg9Wud.js +1 -0
  818. nanoinfra-0.3.0/nanoinfra/web/dist/assets/wren-DMg0S2Vm.js +1 -0
  819. nanoinfra-0.3.0/nanoinfra/web/dist/assets/xeora-Dr7mVZGZ.js +1 -0
  820. nanoinfra-0.3.0/nanoinfra/web/dist/assets/xml-doc-BiVXpP_r.js +1 -0
  821. nanoinfra-0.3.0/nanoinfra/web/dist/assets/xojo-BPwtzqJb.js +1 -0
  822. nanoinfra-0.3.0/nanoinfra/web/dist/assets/xquery-D6GBHLZt.js +1 -0
  823. nanoinfra-0.3.0/nanoinfra/web/dist/assets/yaml-Bd5tuXfa.js +1 -0
  824. nanoinfra-0.3.0/nanoinfra/web/dist/assets/yang-C6OVLfFP.js +1 -0
  825. nanoinfra-0.3.0/nanoinfra/web/dist/assets/zig-BPL9gV9R.js +1 -0
  826. nanoinfra-0.3.0/nanoinfra/web/dist/brand/nanoinfra_apple_touch.png +0 -0
  827. nanoinfra-0.3.0/nanoinfra/web/dist/brand/nanoinfra_favicon_32.png +0 -0
  828. nanoinfra-0.3.0/nanoinfra/web/dist/brand/nanoinfra_icon.png +0 -0
  829. nanoinfra-0.3.0/nanoinfra/web/dist/brand/nanoinfra_logo.png +0 -0
  830. nanoinfra-0.3.0/nanoinfra/web/dist/brand/nanoinfra_logo.webp +0 -0
  831. nanoinfra-0.3.0/nanoinfra/web/dist/brand/nanoinfra_mark.svg +23 -0
  832. nanoinfra-0.3.0/nanoinfra/web/dist/index.html +199 -0
  833. nanoinfra-0.3.0/nanoinfra/webui/__init__.py +2 -0
  834. nanoinfra-0.3.0/nanoinfra/webui/attachment_ingress.py +172 -0
  835. nanoinfra-0.3.0/nanoinfra/webui/build.py +300 -0
  836. nanoinfra-0.3.0/nanoinfra/webui/cli_apps_api.py +134 -0
  837. nanoinfra-0.3.0/nanoinfra/webui/file_preview.py +163 -0
  838. nanoinfra-0.3.0/nanoinfra/webui/forking.py +116 -0
  839. nanoinfra-0.3.0/nanoinfra/webui/gateway_services.py +120 -0
  840. nanoinfra-0.3.0/nanoinfra/webui/gateway_tokens.py +105 -0
  841. nanoinfra-0.3.0/nanoinfra/webui/http_utils.py +253 -0
  842. nanoinfra-0.3.0/nanoinfra/webui/ingress_policy.py +70 -0
  843. nanoinfra-0.3.0/nanoinfra/webui/mcp_presets_api.py +1354 -0
  844. nanoinfra-0.3.0/nanoinfra/webui/mcp_presets_runtime.py +5 -0
  845. nanoinfra-0.3.0/nanoinfra/webui/media_api.py +304 -0
  846. nanoinfra-0.3.0/nanoinfra/webui/media_gateway.py +112 -0
  847. nanoinfra-0.3.0/nanoinfra/webui/metadata.py +6 -0
  848. nanoinfra-0.3.0/nanoinfra/webui/nanoinfra_features_api.py +54 -0
  849. nanoinfra-0.3.0/nanoinfra/webui/session_access.py +291 -0
  850. nanoinfra-0.3.0/nanoinfra/webui/session_automations.py +341 -0
  851. nanoinfra-0.3.0/nanoinfra/webui/session_list_index.py +430 -0
  852. nanoinfra-0.3.0/nanoinfra/webui/settings_api.py +2355 -0
  853. nanoinfra-0.3.0/nanoinfra/webui/settings_routes.py +1198 -0
  854. nanoinfra-0.3.0/nanoinfra/webui/sidebar_state.py +198 -0
  855. nanoinfra-0.3.0/nanoinfra/webui/skills_api.py +235 -0
  856. nanoinfra-0.3.0/nanoinfra/webui/skills_marketplace.py +938 -0
  857. nanoinfra-0.3.0/nanoinfra/webui/thread_disk.py +31 -0
  858. nanoinfra-0.3.0/nanoinfra/webui/token_usage.py +370 -0
  859. nanoinfra-0.3.0/nanoinfra/webui/transcript.py +2528 -0
  860. nanoinfra-0.3.0/nanoinfra/webui/transcription_ws.py +46 -0
  861. nanoinfra-0.3.0/nanoinfra/webui/version_check.py +51 -0
  862. nanoinfra-0.3.0/nanoinfra/webui/websocket_logging.py +66 -0
  863. nanoinfra-0.3.0/nanoinfra/webui/workspaces.py +319 -0
  864. nanoinfra-0.3.0/nanoinfra/webui/ws_http.py +1298 -0
  865. nanoinfra-0.3.0/pyproject.toml +191 -0
  866. nanoinfra-0.3.0/webui/README.md +101 -0
@@ -0,0 +1,104 @@
1
+ # Project-specific
2
+ .worktrees/
3
+ .worktree/
4
+ .assets
5
+ .docs
6
+ .env
7
+ .web
8
+ .orion
9
+
10
+ # Claude / AI assistant artifacts
11
+ docs/superpowers/
12
+ docs/plans/
13
+ /plans/
14
+
15
+ # webui (monorepo frontend)
16
+ webui/node_modules/
17
+ webui/dist/
18
+ webui/coverage/
19
+ webui/.vite/
20
+ *.tsbuildinfo
21
+
22
+ # Python bytecode & caches
23
+ *.pyc
24
+ *.pyo
25
+ *.pyd
26
+ *.pyw
27
+ *.pyz
28
+ __pycache__/
29
+ *.egg-info/
30
+ *.egg
31
+ .venv/
32
+ venv/
33
+ .pytest_cache/
34
+ .mypy_cache/
35
+ .ruff_cache/
36
+ .pytype/
37
+ .dmypy.json
38
+ dmypy.json
39
+ .tox/
40
+ .nox/
41
+ .hypothesis/
42
+
43
+ # Build & packaging
44
+ dist/
45
+ build/
46
+ *.manifest
47
+ *.spec
48
+ pip-wheel-metadata/
49
+ share/python-wheels/
50
+
51
+ # Test & coverage
52
+ .coverage
53
+ .coverage.*
54
+ htmlcov/
55
+ coverage.xml
56
+ *.cover
57
+
58
+ # Lock files (project policy)
59
+ poetry.lock
60
+ uv.lock
61
+
62
+ # Jupyter
63
+ .ipynb_checkpoints/
64
+
65
+ # macOS
66
+ .DS_Store
67
+ .AppleDouble
68
+ .LSOverride
69
+
70
+ # Windows
71
+ Thumbs.db
72
+ ehthumbs.db
73
+ Desktop.ini
74
+
75
+ # Linux
76
+ .directory
77
+
78
+ # Editors & IDEs (local workspace / user settings)
79
+ .vscode/
80
+ .cursor/
81
+ .idea/
82
+ .fleet/
83
+ *.code-workspace
84
+ *.sublime-project
85
+ *.sublime-workspace
86
+ *.swp
87
+ *.swo
88
+ *~
89
+ nano.*.save
90
+
91
+ # Environment & secrets (keep examples tracked if needed)
92
+ .env.*
93
+ !.env.example
94
+
95
+ # Logs & temp
96
+ *.log
97
+ logs/
98
+ tmp/
99
+ temp/
100
+ *.tmp
101
+ exp/
102
+ .playwright-mcp/
103
+ bridge/node_modules/
104
+ webui/.verify-*
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025-present Xubin Ren and the nanobot contributors
4
+ Copyright (c) 2026 Alberto Ferrer and the nanoinfra contributors
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.
@@ -0,0 +1,419 @@
1
+ Metadata-Version: 2.4
2
+ Name: nanoinfra
3
+ Version: 0.3.0
4
+ Summary: A lightweight personal AI assistant framework
5
+ Author: Xubin Ren, the nanobot contributors, Alberto Ferrer
6
+ License: MIT
7
+ License-File: LICENSE
8
+ License-File: THIRD_PARTY_NOTICES.md
9
+ Keywords: agent,ai,chatbot
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: License :: OSI Approved :: MIT License
13
+ Classifier: Programming Language :: Python :: 3.11
14
+ Classifier: Programming Language :: Python :: 3.12
15
+ Requires-Python: >=3.11
16
+ Requires-Dist: anthropic<1.0.0,>=0.100.0
17
+ Requires-Dist: chardet<6.0.0,>=3.0.2
18
+ Requires-Dist: croniter<7.0.0,>=6.0.0
19
+ Requires-Dist: ddgs<10.0.0,>=9.5.5
20
+ Requires-Dist: defusedxml<1.0.0,>=0.7.1
21
+ Requires-Dist: dulwich<1.0.0,>=0.22.0
22
+ Requires-Dist: filelock>=3.25.2
23
+ Requires-Dist: httpx<1.0.0,>=0.28.0
24
+ Requires-Dist: jinja2<4.0.0,>=3.1.0
25
+ Requires-Dist: json-repair<1.0.0,>=0.57.0
26
+ Requires-Dist: loguru<1.0.0,>=0.7.3
27
+ Requires-Dist: lxml-html-clean<1.0.0,>=0.4.0
28
+ Requires-Dist: mcp<2.0.0,>=1.26.0
29
+ Requires-Dist: oauth-cli-kit<1.0.0,>=0.1.6
30
+ Requires-Dist: openai>=2.8.0
31
+ Requires-Dist: openpyxl<4.0.0,>=3.1.0
32
+ Requires-Dist: packaging>=24.0
33
+ Requires-Dist: prompt-toolkit<4.0.0,>=3.0.50
34
+ Requires-Dist: pydantic-settings<3.0.0,>=2.12.0
35
+ Requires-Dist: pydantic<3.0.0,>=2.12.0
36
+ Requires-Dist: pypdf<6.0.0,>=5.0.0
37
+ Requires-Dist: python-docx<2.0.0,>=1.1.0
38
+ Requires-Dist: python-pptx<2.0.0,>=1.0.0
39
+ Requires-Dist: pyyaml<7.0.0,>=6.0
40
+ Requires-Dist: questionary<3.0.0,>=2.0.0
41
+ Requires-Dist: readability-lxml<1.0.0,>=0.8.4
42
+ Requires-Dist: rich<15.0.0,>=14.0.0
43
+ Requires-Dist: tiktoken<1.0.0,>=0.12.0
44
+ Requires-Dist: typer<1.0.0,>=0.20.0
45
+ Requires-Dist: tzdata>=2025.2
46
+ Requires-Dist: watchfiles<2.0.0,>=1.1.1
47
+ Requires-Dist: websocket-client<2.0.0,>=1.9.0
48
+ Requires-Dist: websockets<17.0,>=15.0
49
+ Provides-Extra: api
50
+ Requires-Dist: aiohttp<4.0.0,>=3.9.0; extra == 'api'
51
+ Provides-Extra: azure
52
+ Requires-Dist: azure-identity<2.0.0,>=1.19.0; extra == 'azure'
53
+ Provides-Extra: bedrock
54
+ Requires-Dist: boto3>=1.43.0; extra == 'bedrock'
55
+ Provides-Extra: dev
56
+ Requires-Dist: aiohttp<4.0.0,>=3.9.0; extra == 'dev'
57
+ Requires-Dist: basedpyright<2.0.0,>=1.39.0; extra == 'dev'
58
+ Requires-Dist: msgpack<2.0.0,>=1.1.0; extra == 'dev'
59
+ Requires-Dist: openpyxl<4.0.0,>=3.1.0; extra == 'dev'
60
+ Requires-Dist: pymupdf>=1.25.0; extra == 'dev'
61
+ Requires-Dist: pypdf<6.0.0,>=5.0.0; extra == 'dev'
62
+ Requires-Dist: pytest-asyncio<2.0.0,>=1.3.0; extra == 'dev'
63
+ Requires-Dist: pytest-cov<7.0.0,>=6.0.0; extra == 'dev'
64
+ Requires-Dist: pytest-xdist<4.0.0,>=3.8.0; extra == 'dev'
65
+ Requires-Dist: pytest<10.0.0,>=9.0.0; extra == 'dev'
66
+ Requires-Dist: python-docx<2.0.0,>=1.1.0; extra == 'dev'
67
+ Requires-Dist: python-pptx<2.0.0,>=1.0.0; extra == 'dev'
68
+ Requires-Dist: python-socketio<6.0.0,>=5.16.0; extra == 'dev'
69
+ Requires-Dist: ruff>=0.1.0; extra == 'dev'
70
+ Provides-Extra: documents
71
+ Requires-Dist: defusedxml<1.0.0,>=0.7.1; extra == 'documents'
72
+ Requires-Dist: openpyxl<4.0.0,>=3.1.0; extra == 'documents'
73
+ Requires-Dist: pypdf<6.0.0,>=5.0.0; extra == 'documents'
74
+ Requires-Dist: python-docx<2.0.0,>=1.1.0; extra == 'documents'
75
+ Requires-Dist: python-pptx<2.0.0,>=1.0.0; extra == 'documents'
76
+ Provides-Extra: langfuse
77
+ Requires-Dist: langfuse<4.0.0,>=3.0.0; extra == 'langfuse'
78
+ Provides-Extra: olostep
79
+ Requires-Dist: olostep>=0.1.0; (python_version < '3.14') and extra == 'olostep'
80
+ Provides-Extra: pdf
81
+ Requires-Dist: pypdf<6.0.0,>=5.0.0; extra == 'pdf'
82
+ Description-Content-Type: text/markdown
83
+
84
+ <picture>
85
+ <source media="(prefers-color-scheme: dark)" srcset="./images/readme-cover-dark.svg">
86
+ <img alt="nanoinfra README cover" src="./images/readme-cover-light.svg">
87
+ </picture>
88
+
89
+ <div align="center">
90
+ <p>
91
+ <a href="https://nanoinfra.wiki/docs/latest/getting-started/nanoinfra-overview">English</a> |
92
+ <a href="https://nanoinfra.wiki/cn/docs/latest/getting-started/nanoinfra-overview">็ฎ€ไฝ“ไธญๆ–‡</a> |
93
+ <a href="https://nanoinfra.wiki/zh-Hant/docs/latest/getting-started/nanoinfra-overview">็น้ซ”ไธญๆ–‡</a> |
94
+ <a href="https://nanoinfra.wiki/es/docs/latest/getting-started/nanoinfra-overview">Espaรฑol</a> |
95
+ <a href="https://nanoinfra.wiki/fr/docs/latest/getting-started/nanoinfra-overview">Franรงais</a> |
96
+ <a href="https://nanoinfra.wiki/id/docs/latest/getting-started/nanoinfra-overview">Bahasa Indonesia</a> |
97
+ <a href="https://nanoinfra.wiki/ja/docs/latest/getting-started/nanoinfra-overview">ๆ—ฅๆœฌ่ชž</a> |
98
+ <a href="https://nanoinfra.wiki/ko/docs/latest/getting-started/nanoinfra-overview">ํ•œ๊ตญ์–ด</a> |
99
+ <a href="https://nanoinfra.wiki/ru/docs/latest/getting-started/nanoinfra-overview">ะ ัƒััะบะธะน</a> |
100
+ <a href="https://nanoinfra.wiki/vi/docs/latest/getting-started/nanoinfra-overview">Tiแบฟng Viแป‡t</a>
101
+ </p>
102
+ <p>
103
+ <a href="https://github.com/bet0x/nanoinfra"><img src="https://img.shields.io/github/stars/bet0x/nanoinfra?style=flat&logo=github" alt="GitHub stars"></a>
104
+ <a href="https://pypi.org/project/nanoinfra/"><img src="https://img.shields.io/pypi/v/nanoinfra" alt="PyPI version"></a>
105
+ <a href="https://pepy.tech/project/nanoinfra"><img src="https://static.pepy.tech/badge/nanoinfra" alt="PyPI downloads"></a>
106
+ <a href="https://github.com/bet0x/nanoinfra/actions/workflows/ci.yml"><img src="https://github.com/bet0x/nanoinfra/actions/workflows/ci.yml/badge.svg?branch=main" alt="Test Suite"></a>
107
+ <a href="https://pypi.org/project/nanoinfra/"><img src="https://img.shields.io/badge/python-%3E%3D3.11-blue" alt="Python 3.11 or newer"></a>
108
+ <a href="./LICENSE"><img src="https://img.shields.io/github/license/bet0x/nanoinfra" alt="MIT License"></a>
109
+ <a href="https://nanoinfra.wiki/docs/latest/getting-started/nanoinfra-overview"><img src="https://img.shields.io/badge/docs-nanoinfra.wiki-blue" alt="nanoinfra documentation"></a>
110
+ </p>
111
+ <p>
112
+ <a href="https://discord.gg/MnCvHqpUGB">Discord</a> ยท
113
+ <a href="https://x.com/nanoinfra_project">X</a> ยท
114
+ <a href="./COMMUNICATION.md">WeChat / Feishu</a>
115
+ </p>
116
+ </div>
117
+
118
+ # nanoinfra
119
+
120
+ ๐Ÿˆ **nanoinfra** is an ultra-lightweight, open-source, self-hosted personal AI agent framework written in Python. It runs in a WebUI, terminal, or chat apps and combines tools, long-term memory, MCP integrations, model routing, multi-agent delegation, scheduled automation, and an OpenAI-compatible API in a small, readable core.
121
+
122
+ ## Start Here
123
+
124
+ | You want to... | Go to |
125
+ |---|---|
126
+ | Install nanoinfra with no terminal/config background | [Start Without Technical Background](./docs/start-without-technical-background.md) |
127
+ | Install quickly and get one CLI reply | [Install](#-install) and [Quick Start](#-quick-start) |
128
+ | Open the bundled browser UI | [WebUI](#-webui) |
129
+ | Connect Telegram, Discord, WeChat, Slack, Email, Mattermost, or another chat app | [Chat Apps](./docs/chat-apps.md) |
130
+ | Configure providers, fallback models, Langfuse, MCP, web tools, or security | [Docs](./docs/README.md) and [Configuration](./docs/configuration.md) |
131
+ | Understand or extend the internals | [Architecture](./docs/architecture.md) and [Development](./docs/development.md) |
132
+ | Deploy to the cloud or keep nanoinfra running as a service | [Deployment](./docs/deployment.md) |
133
+
134
+ ## What can nanoinfra do?
135
+
136
+ nanoinfra is a self-hosted personal AI agent runtime. It can:
137
+
138
+ - run in a browser WebUI or terminal
139
+ - connect to Telegram, Discord, Slack, WeChat, Email, Mattermost, and other chat apps
140
+ - use tools such as files, shell, web search, web fetch, MCP, cron, image generation, and subagents
141
+ - keep session history and long-term memory through Dream
142
+ - run long-horizon goals and scheduled automations
143
+ - expose a Python SDK and OpenAI-compatible API for integrations
144
+ - deploy as a long-running local or server-side agent gateway
145
+
146
+ ## ๐Ÿ’ก Why nanoinfra
147
+
148
+ - **Persistent workflows**: goals, memory, tools, and chat context survive long-running work.
149
+ - **Chat-native reach**: WebUI, API, Telegram, Feishu, Slack, Discord, Teams, email, and Mattermost.
150
+ - **Model freedom**: OpenAI-compatible APIs, local LLMs, image generation, search, and fallbacks.
151
+ - **Small core**: readable internals with MCP, memory, deployment, and automation built in.
152
+ - **Own your stack**: inspect, customize, self-host, and extend without a giant platform.
153
+
154
+ ## ๐Ÿ“ฆ Install
155
+
156
+ > [!IMPORTANT]
157
+ > If you want the newest features and experiments, install from source.
158
+ >
159
+ > If you want the most stable day-to-day experience, install from PyPI or with `uv`.
160
+
161
+ Pick **one** install method:
162
+
163
+ Prerequisites: Python 3.11 or newer. Git is only needed for a source install. Published packages already include the WebUI; a current-source install needs `bun` or `npm` to build it.
164
+
165
+ If terminals, API keys, or config files are new to you, use the guided zero-background walkthrough in [Start Without Technical Background](./docs/start-without-technical-background.md) instead of this compact README path.
166
+
167
+ **One-command setup**
168
+
169
+ macOS / Linux:
170
+
171
+ ```bash
172
+ curl -fsSL https://raw.githubusercontent.com/bet0x/nanoinfra/main/scripts/install.sh | sh
173
+ ```
174
+
175
+ Windows PowerShell:
176
+
177
+ ```powershell
178
+ irm https://raw.githubusercontent.com/bet0x/nanoinfra/main/scripts/install.ps1 | iex
179
+ ```
180
+
181
+ The default command installs or upgrades `nanoinfra` from PyPI. On a fresh local desktop, it then starts `nanoinfra webui` so you can configure the first provider and model in **Settings โ†’ Models**. SSH, headless, existing-config, and older-release paths keep the terminal setup wizard. The installer avoids system-wide pip installs by using an active virtual environment, `uv`, `pipx`, or a managed venv under `~/.nanoinfra/venv`. It also prints the exact command it used to run nanoinfra; reuse that full command below if `nanoinfra` is not on `PATH`.
182
+
183
+ To preview the plan without changing your environment, pass `--dry-run`; combine it with `--dev` when you want to preview the main-branch install.
184
+
185
+ ```bash
186
+ curl -fsSL https://raw.githubusercontent.com/bet0x/nanoinfra/main/scripts/install.sh | sh -s -- --dry-run
187
+ ```
188
+
189
+ ```powershell
190
+ & ([scriptblock]::Create((irm https://raw.githubusercontent.com/bet0x/nanoinfra/main/scripts/install.ps1))) --dry-run
191
+ ```
192
+
193
+ To install the current `main` branch instead, pass `--dev`:
194
+
195
+ ```bash
196
+ curl -fsSL https://raw.githubusercontent.com/bet0x/nanoinfra/main/scripts/install.sh | sh -s -- --dev
197
+ ```
198
+
199
+ ```powershell
200
+ & ([scriptblock]::Create((irm https://raw.githubusercontent.com/bet0x/nanoinfra/main/scripts/install.ps1))) --dev
201
+ ```
202
+
203
+ If you prefer to inspect the script first, open [`scripts/install.sh`](./scripts/install.sh) or [`scripts/install.ps1`](./scripts/install.ps1).
204
+
205
+ **Install with `uv`**
206
+
207
+ ```bash
208
+ uv tool install nanoinfra
209
+ ```
210
+
211
+ **Install from PyPI with pip**
212
+
213
+ ```bash
214
+ python -m pip install nanoinfra
215
+ ```
216
+
217
+ If pip reports `externally-managed-environment` on macOS or Linux, use the one-command installer, `uv tool install nanoinfra`, `pipx install nanoinfra`, or install inside a virtual environment.
218
+
219
+ **Install from source**
220
+
221
+ `bun` or `npm` must be available. From an activated virtual environment:
222
+
223
+ ```bash
224
+ git clone https://github.com/bet0x/nanoinfra.git
225
+ cd nanoinfra
226
+ python -m pip install .
227
+ ```
228
+
229
+ On Windows, if pip reports that it cannot launch `npm`, run `cd webui`, `npm.cmd install --package-lock=false`, `npm.cmd run build`, and `cd ..` in order, then retry the install. Contributors who need an editable checkout should follow [`CONTRIBUTING.md`](./CONTRIBUTING.md) and [`webui/README.md`](./webui/README.md).
230
+
231
+ Verify the install:
232
+
233
+ ```bash
234
+ nanoinfra --version
235
+ ```
236
+
237
+ If `nanoinfra` is not on `PATH`, invoke it through the method that installed it: reuse the recommended installer's command, use `uv tool run --from nanoinfra nanoinfra ...` or `pipx run --spec nanoinfra nanoinfra ...`, or use the Python executable from the environment where pip installed the package.
238
+
239
+ ## ๐Ÿš€ Quick Start
240
+
241
+ **Open nanoinfra in your browser**
242
+
243
+ ```bash
244
+ nanoinfra webui
245
+ ```
246
+
247
+ This is the recommended first run. The launcher creates the config and workspace when needed, safely enables the local WebSocket channel after confirmation, starts the gateway, and opens [`http://127.0.0.1:8765`](http://127.0.0.1:8765). A fresh install can open before a model is configured, so setup continues in the browser instead of beginning in a JSON file. The first-run WebUI binds to localhost by default and is not exposed to your LAN.
248
+
249
+ **Your first three steps**
250
+
251
+ 1. Open **Settings โ†’ Models** and choose a provider, credential, and model.
252
+ 2. Start a new topic and send `Hello!` to verify the connection.
253
+ 3. Before project work, choose the intended workspace and access mode from the composer.
254
+
255
+ Any normal reply means the provider, model, workspace, and browser gateway are working together.
256
+
257
+ **Keep nanoinfra running after you close the terminal**
258
+
259
+ ```bash
260
+ nanoinfra webui --background
261
+ ```
262
+
263
+ This starts the same full gateway as `nanoinfra webui`, opens the browser, and leaves channels and automations running after the launcher exits. Complete first-time model setup with foreground `nanoinfra webui` before switching to background mode.
264
+
265
+ ```bash
266
+ nanoinfra gateway status
267
+ nanoinfra gateway logs
268
+ nanoinfra gateway restart
269
+ nanoinfra gateway stop
270
+ ```
271
+
272
+ **Prefer a gateway-first workflow?**
273
+
274
+ ```bash
275
+ nanoinfra gateway
276
+ ```
277
+
278
+ This skips WebUI setup and browser opening, then runs the same complete gateway in the current terminal. It is the familiar entry point if you are coming from OpenClaw or already operate agents as long-lived services. The WebUI remains available when its channel is configured; open it manually when needed.
279
+
280
+ Use `nanoinfra gateway --background` for the same direct entry point without keeping the terminal attached. For automatic startup and supervision by the operating system, see [Deployment](./docs/deployment.md).
281
+
282
+ **Prefer to work entirely in the terminal?**
283
+
284
+ ```bash
285
+ nanoinfra agent
286
+ ```
287
+
288
+ This opens an interactive terminal chat with the same configured model, workspace, and tools while keeping its own CLI session history. It does not open a browser or keep chat channels and automations running after you exit. Type `exit` or press `Ctrl+C` when you are done.
289
+
290
+ For one request and an immediate exit, use:
291
+
292
+ ```bash
293
+ nanoinfra agent -m "Hello!"
294
+ ```
295
+
296
+ The one-shot form is useful for a quick provider check, shell scripts, and local automation. If you have not configured a model yet, run `nanoinfra webui` and open **Settings โ†’ Models** first.
297
+
298
+ Need manual JSON, another device on your LAN, or help with provider/model matching? Continue with [Install and Quick Start](./docs/quick-start.md), [WebUI](./docs/webui.md), or [Troubleshooting](./docs/troubleshooting.md).
299
+
300
+ If nanoinfra worked for you, a star on GitHub is the simplest way to support the project.
301
+
302
+ - Want a pasteable provider setup? See [Provider Cookbook](./docs/provider-cookbook.md)
303
+ - Want to understand provider/model matching? See [Providers and Models](./docs/providers.md)
304
+ - Want web search, MCP, security settings, or more config options? See [Configuration](./docs/configuration.md)
305
+ - Want to run locally? See [Ollama](./docs/providers.md#ollama), [vLLM or another local OpenAI-compatible server](./docs/providers.md#vllm-or-other-local-openai-compatible-server), and the full [provider reference](./docs/configuration.md#providers).
306
+ - Want to run nanoinfra in chat apps like Telegram, Discord, WeChat or Feishu? See [Chat Apps](./docs/chat-apps.md)
307
+ - Want Docker or Linux service deployment? See [Deployment](./docs/deployment.md)
308
+
309
+ <a id="deploy-to-render"></a>
310
+
311
+ ## โ˜๏ธ Deploy
312
+
313
+ **Render โ€” one click**
314
+
315
+ Deploy nanoinfra's gateway and bundled WebUI from the repository's ready-to-use Blueprint:
316
+
317
+ [![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/deploy?repo=https://github.com/bet0x/nanoinfra)
318
+
319
+ Render will ask for `ANTHROPIC_API_KEY` and a private `NANOINFRA_WEB_TOKEN`, then provision persistent storage for sessions, memory, and WebUI history. Persistent disks require a paid Render service.
320
+
321
+ **Self-host**
322
+
323
+ Prefer your own infrastructure? Follow the [deployment guide](./docs/deployment.md) for Docker, Docker Compose, Linux services, and macOS LaunchAgent setup.
324
+
325
+ ## ๐ŸŒ WebUI
326
+
327
+ The WebUI ships **inside the published wheel** with no separate frontend build. It is the browser workbench for persistent topics, visible agent activity, workspace controls, Apps, Skills, Automations, and settings.
328
+
329
+ <p align="center">
330
+ <img src="images/nanoinfra_webui.png" alt="nanoinfra webui preview" width="900">
331
+ </p>
332
+
333
+ Use it to:
334
+
335
+ - keep separate topics for different tasks and projects;
336
+ - inspect reasoning, tool calls, file edits, diffs, command output, and generated artifacts;
337
+ - switch models and workspaces without leaving the conversation;
338
+ - configure providers, chat channels, Apps, Skills, and Automations from one place.
339
+
340
+ See the [WebUI guide](./docs/webui.md) for LAN access, background operation, workspace controls, and the full feature tour. Working on the frontend itself? Use [`webui/README.md`](./webui/README.md).
341
+
342
+ ## ๐Ÿ—๏ธ Architecture
343
+
344
+ <p align="center">
345
+ <img src="images/nanoinfra_arch.png" alt="nanoinfra architecture" width="800">
346
+ </p>
347
+
348
+ ๐Ÿˆ nanoinfra stays lightweight by centering everything around a small agent loop: messages come in from chat apps, the LLM decides when tools are needed, and memory or skills are pulled in only as context instead of becoming a heavy orchestration layer. That keeps the core path readable and easy to extend, while still letting you add channels, tools, memory, and deployment options without turning the system into a monolith.
349
+
350
+ ## ๐Ÿ“š Docs
351
+
352
+ Browse the [repo docs](./docs/README.md) for the latest features and GitHub development version, or visit [nanoinfra.wiki](https://nanoinfra.wiki/docs/latest/getting-started/nanoinfra-overview) for the stable release documentation.
353
+
354
+ - Use task-oriented guides: [Guides](./docs/guides/README.md)
355
+ - Start with no technical background: [Start Without Technical Background](./docs/start-without-technical-background.md)
356
+ - Start from zero with developer basics: [Install and Quick Start](./docs/quick-start.md)
357
+ - Understand the runtime model: [Concepts](./docs/concepts.md)
358
+ - Read the source-level map: [Architecture](./docs/architecture.md)
359
+ - Choose a provider/model: [Providers and Models](./docs/providers.md)
360
+ - Copy provider setup recipes: [Provider Cookbook](./docs/provider-cookbook.md)
361
+ - Debug setup and runtime failures: [Troubleshooting](./docs/troubleshooting.md)
362
+ - Talk to your nanoinfra with familiar chat apps: [Chat App AI Agent](./docs/guides/chat-app-ai-agent.md) ยท [Chat Apps](./docs/chat-apps.md)
363
+ - Schedule or trigger agent work: [Automations](./docs/automations.md)
364
+ - Configure providers, web search, MCP, and runtime behavior: [Configuration](./docs/configuration.md)
365
+ - Integrate nanoinfra with local tools and automations: [OpenAI-Compatible API](./docs/openai-api.md) ยท [Python SDK](./docs/python-sdk.md)
366
+ - Run nanoinfra with Docker or as a Linux service: [Deployment](./docs/deployment.md)
367
+
368
+ ## Releases
369
+
370
+ **Latest release: [v0.3.0 - The Agency Release](https://github.com/HKUDS/nanobot/releases/tag/v0.3.0)**
371
+
372
+ The Agency Release turns nanoinfra from a durable workbench into an agent runtime that can coordinate helpers, switch models per session, and carry authorized work through to completion.
373
+
374
+ - Consult inline subagents without leaving the current task
375
+ - Switch model presets per session directly from the composer
376
+ - Start from a guided WebUI setup with clearer execution controls
377
+ - Apply configuration changes live across a more reliable provider, channel, and tool runtime
378
+
379
+ [Read the v0.3.0 release notes](https://github.com/HKUDS/nanobot/releases/tag/v0.3.0)
380
+
381
+ ## Recent Updates
382
+
383
+ - **2026-07-24** Guided first-run setup, inline subagents, and model switching from the composer.
384
+ - **2026-07-23** Grok OAuth with hosted X Search, live image settings, and clearer fallback models.
385
+ - **2026-07-22** Parallel Search, live configuration reloads, richer app discovery, and a smoother mobile WebUI.
386
+ - **2026-07-21** Codex fast mode, visible skill references, safer configuration saves, and sturdier task cleanup.
387
+ - **2026-07-20** Cleaner code blocks and copy actions, self-contained channels, and steadier QQ reconnects.
388
+
389
+ For older updates, see the [release archive](./docs/release-archive.md) or [GitHub releases](https://github.com/bet0x/nanoinfra/releases).
390
+
391
+ ## Open Source Partners
392
+
393
+ <p align="center">
394
+ <a href="https://platform.kimi.com?aff=nanoinfra"><picture><source media="(prefers-color-scheme: dark)" srcset="https://kimi-file.moonshot.cn/prod-chat-kimi/kfs/4/1/2026-06-05/1d8h69mt3v89kkekg24gg"><img alt="Kimi Open Source Friends" height="44" src="https://kimi-file.moonshot.cn/prod-chat-kimi/kfs/4/1/2026-06-05/1d8h69fudcmosb3pipls0"></picture></a>
395
+ <a href="https://platform.minimaxi.com/subscribe/token-plan?code=GILTJpMTqZ&source=link"><img alt="MiniMax" height="40" src="https://mintcdn.com/minimax-zh/1UjvBcdoC6r0UeyA/logo/light.svg?fit=max&auto=format&n=1UjvBcdoC6r0UeyA&q=85&s=672d724b639b2d88d0702fae329ea4f8"></a>
396
+ </p>
397
+
398
+ ## ๐Ÿค Contribute
399
+
400
+ Use nanoinfra for a real task, report what broke, and then pick a focused improvement.
401
+
402
+ - Read [CONTRIBUTING.md](./CONTRIBUTING.md) for the development workflow.
403
+ - Browse [open issues](https://github.com/bet0x/nanoinfra/issues) for problems to investigate.
404
+ - Open a [pull request](https://github.com/bet0x/nanoinfra/pulls) for a focused fix or integration.
405
+
406
+ ## Contact
407
+
408
+ Nanoinfra is a fork of [nanobot](https://github.com/re-bin/nanobot), the original open-source project started by [Xubin Ren](https://github.com/re-bin). This fork is maintained by Alberto Ferrer. Feel free to contact [albertof@barrahome.org](mailto:albertof@barrahome.org) for questions, ideas, or collaboration.
409
+
410
+ ### Contributors
411
+
412
+ <a href="https://github.com/bet0x/nanoinfra/graphs/contributors">
413
+ <img src="https://contrib.rocks/image?repo=bet0x/nanoinfra&max=100&columns=12&updated=20260210" alt="Contributors" />
414
+ </a>
415
+
416
+ <p align="center">
417
+ <em> Thanks for visiting โœจ nanoinfra!</em><br><br>
418
+ <img src="https://visitor-badge.laobi.icu/badge?page_id=HKUDS.nanoinfra&style=for-the-badge&color=00d4ff" alt="Views">
419
+ </p>