connectonion 0.6.2__py3-none-any.whl → 0.6.4__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 (410) hide show
  1. connectonion/__init__.py +46 -9
  2. connectonion/cli/__init__.py +11 -1
  3. connectonion/cli/browser_agent/__init__.py +11 -1
  4. connectonion/cli/browser_agent/browser.py +13 -3
  5. connectonion/cli/browser_agent/element_finder.py +8 -0
  6. connectonion/cli/browser_agent/highlight_screenshot.py +9 -1
  7. connectonion/cli/browser_agent/scroll.py +8 -0
  8. connectonion/cli/co_ai/__init__.py +6 -0
  9. connectonion/cli/co_ai/agent.py +87 -0
  10. connectonion/cli/co_ai/agents/__init__.py +5 -0
  11. connectonion/cli/co_ai/agents/registry.py +57 -0
  12. connectonion/cli/co_ai/commands/__init__.py +45 -0
  13. connectonion/cli/co_ai/commands/compact.py +173 -0
  14. connectonion/cli/co_ai/commands/cost.py +77 -0
  15. connectonion/cli/co_ai/commands/export.py +60 -0
  16. connectonion/cli/co_ai/commands/help.py +80 -0
  17. connectonion/cli/co_ai/commands/init.py +101 -0
  18. connectonion/cli/co_ai/commands/sessions.py +55 -0
  19. connectonion/cli/co_ai/commands/tasks.py +63 -0
  20. connectonion/cli/co_ai/commands/undo.py +103 -0
  21. connectonion/cli/co_ai/context.py +127 -0
  22. connectonion/cli/co_ai/main.py +52 -0
  23. connectonion/cli/co_ai/plugins/__init__.py +5 -0
  24. connectonion/cli/co_ai/plugins/system_reminder.py +154 -0
  25. connectonion/cli/co_ai/prompts/agents/explore.md +79 -0
  26. connectonion/cli/co_ai/prompts/agents/plan.md +60 -0
  27. connectonion/cli/co_ai/prompts/assembler.py +303 -0
  28. connectonion/cli/{docs/co-vibecoding-principles-docs-contexts-all-in-one.md → co_ai/prompts/connectonion/README.md} +26 -0
  29. connectonion/cli/co_ai/prompts/connectonion/api.md +457 -0
  30. connectonion/cli/co_ai/prompts/connectonion/cli/README.md +805 -0
  31. connectonion/cli/co_ai/prompts/connectonion/cli/auth.md +46 -0
  32. connectonion/cli/co_ai/prompts/connectonion/cli/browser.md +235 -0
  33. connectonion/cli/co_ai/prompts/connectonion/cli/copy.md +184 -0
  34. connectonion/cli/co_ai/prompts/connectonion/cli/create.md +335 -0
  35. connectonion/cli/co_ai/prompts/connectonion/cli/init.md +431 -0
  36. connectonion/cli/co_ai/prompts/connectonion/co-directory-structure.md +214 -0
  37. connectonion/cli/co_ai/prompts/connectonion/concepts/agent.md +1078 -0
  38. connectonion/cli/co_ai/prompts/connectonion/concepts/events.md +816 -0
  39. connectonion/cli/co_ai/prompts/connectonion/concepts/llm_do.md +256 -0
  40. connectonion/cli/co_ai/prompts/connectonion/concepts/max_iterations.md +362 -0
  41. connectonion/cli/co_ai/prompts/connectonion/concepts/models.md +641 -0
  42. connectonion/cli/co_ai/prompts/connectonion/concepts/plugins.md +100 -0
  43. connectonion/cli/co_ai/prompts/connectonion/concepts/prompts.md +122 -0
  44. connectonion/cli/co_ai/prompts/connectonion/concepts/tools.md +512 -0
  45. connectonion/cli/co_ai/prompts/connectonion/concepts/transcribe.md +156 -0
  46. connectonion/cli/co_ai/prompts/connectonion/concepts/trust.md +291 -0
  47. connectonion/cli/co_ai/prompts/connectonion/debug/README.md +18 -0
  48. connectonion/cli/co_ai/prompts/connectonion/debug/auto_debug.md +1026 -0
  49. connectonion/cli/co_ai/prompts/connectonion/debug/console.md +129 -0
  50. connectonion/cli/co_ai/prompts/connectonion/debug/eval-format.md +178 -0
  51. connectonion/cli/co_ai/prompts/connectonion/debug/eval.md +230 -0
  52. connectonion/cli/co_ai/prompts/connectonion/debug/exceptions.md +307 -0
  53. connectonion/cli/co_ai/prompts/connectonion/debug/log.md +117 -0
  54. connectonion/cli/co_ai/prompts/connectonion/debug/xray.md +215 -0
  55. connectonion/cli/co_ai/prompts/connectonion/design-decisions/001-choosing-input-method.md +202 -0
  56. connectonion/cli/co_ai/prompts/connectonion/design-decisions/002-choosing-llm-function-name.md +202 -0
  57. connectonion/cli/co_ai/prompts/connectonion/design-decisions/003-choosing-trust-keyword.md +141 -0
  58. connectonion/cli/co_ai/prompts/connectonion/design-decisions/004-cli-create-flow.md +117 -0
  59. connectonion/cli/co_ai/prompts/connectonion/design-decisions/005-designing-agent-network-protocol.md +503 -0
  60. connectonion/cli/co_ai/prompts/connectonion/design-decisions/006-agent-address-format.md +305 -0
  61. connectonion/cli/co_ai/prompts/connectonion/design-decisions/007-authentication-backend-design.md +240 -0
  62. connectonion/cli/co_ai/prompts/connectonion/design-decisions/008-naming-is-hard.md +228 -0
  63. connectonion/cli/co_ai/prompts/connectonion/design-decisions/009-why-connect-function.md +167 -0
  64. connectonion/cli/co_ai/prompts/connectonion/design-decisions/010-cli-ux-progressive-disclosure.md +176 -0
  65. connectonion/cli/co_ai/prompts/connectonion/design-decisions/011-global-config-identity-management.md +357 -0
  66. connectonion/cli/co_ai/prompts/connectonion/design-decisions/012-tool-execution-separation.md +259 -0
  67. connectonion/cli/co_ai/prompts/connectonion/design-decisions/013-debug-and-logging-design.md +253 -0
  68. connectonion/cli/co_ai/prompts/connectonion/design-decisions/014-hook-system-design.md +510 -0
  69. connectonion/cli/co_ai/prompts/connectonion/design-decisions/015-interactive-auto-debug-design.md +837 -0
  70. connectonion/cli/co_ai/prompts/connectonion/design-decisions/016-why-no-zero-knowledge-proofs.md +358 -0
  71. connectonion/cli/co_ai/prompts/connectonion/design-decisions/017-session-logging-and-eval-format.md +120 -0
  72. connectonion/cli/co_ai/prompts/connectonion/design-decisions/018-event-api-naming.md +274 -0
  73. connectonion/cli/co_ai/prompts/connectonion/design-decisions/019-agent-lifecycle-design.md +655 -0
  74. connectonion/cli/co_ai/prompts/connectonion/design-decisions/020-trust-system-and-network-architecture.md +503 -0
  75. connectonion/cli/co_ai/prompts/connectonion/design-decisions/021-task-storage-jsonl-design.md +496 -0
  76. connectonion/cli/co_ai/prompts/connectonion/design-decisions/022-raw-asgi-implementation.md +273 -0
  77. connectonion/cli/co_ai/prompts/connectonion/examples/agent_reasoning.md +62 -0
  78. connectonion/cli/co_ai/prompts/connectonion/examples/atomic_tools.md +24 -0
  79. connectonion/cli/co_ai/prompts/connectonion/examples/load_guide.md +18 -0
  80. connectonion/cli/co_ai/prompts/connectonion/examples.md +0 -0
  81. connectonion/cli/co_ai/prompts/connectonion/hook-system-options.md +364 -0
  82. connectonion/cli/co_ai/prompts/connectonion/index.md +162 -0
  83. connectonion/cli/co_ai/prompts/connectonion/integrations/README.md +12 -0
  84. connectonion/cli/co_ai/prompts/connectonion/integrations/auth.md +450 -0
  85. connectonion/cli/co_ai/prompts/connectonion/integrations/google.md +431 -0
  86. connectonion/cli/co_ai/prompts/connectonion/integrations/microsoft.md +370 -0
  87. connectonion/cli/co_ai/prompts/connectonion/network/README.md +14 -0
  88. connectonion/cli/co_ai/prompts/connectonion/network/connect.md +543 -0
  89. connectonion/cli/co_ai/prompts/connectonion/network/connection.md +538 -0
  90. connectonion/cli/co_ai/prompts/connectonion/network/deploy.md +123 -0
  91. connectonion/cli/co_ai/prompts/connectonion/network/host.md +1049 -0
  92. connectonion/cli/co_ai/prompts/connectonion/network/protocol/agent-relay-protocol.md +495 -0
  93. connectonion/cli/co_ai/prompts/connectonion/network/protocol/announce-message.md +115 -0
  94. connectonion/cli/co_ai/prompts/connectonion/principles.md +124 -0
  95. connectonion/cli/co_ai/prompts/connectonion/quickstart.md +261 -0
  96. connectonion/cli/co_ai/prompts/connectonion/roadmap.md +81 -0
  97. connectonion/cli/co_ai/prompts/connectonion/templates/README.md +77 -0
  98. connectonion/cli/co_ai/prompts/connectonion/templates/meta-agent.md +152 -0
  99. connectonion/cli/co_ai/prompts/connectonion/templates/minimal.md +105 -0
  100. connectonion/cli/co_ai/prompts/connectonion/templates/playwright.md +130 -0
  101. connectonion/cli/co_ai/prompts/connectonion/templates/web-research.md +144 -0
  102. connectonion/cli/co_ai/prompts/connectonion/tui/README.md +95 -0
  103. connectonion/cli/co_ai/prompts/connectonion/tui/chat.md +181 -0
  104. connectonion/cli/co_ai/prompts/connectonion/tui/divider.md +63 -0
  105. connectonion/cli/co_ai/prompts/connectonion/tui/dropdown.md +83 -0
  106. connectonion/cli/co_ai/prompts/connectonion/tui/footer.md +44 -0
  107. connectonion/cli/co_ai/prompts/connectonion/tui/fuzzy.md +68 -0
  108. connectonion/cli/co_ai/prompts/connectonion/tui/input.md +84 -0
  109. connectonion/cli/co_ai/prompts/connectonion/tui/keys.md +77 -0
  110. connectonion/cli/co_ai/prompts/connectonion/tui/pick.md +71 -0
  111. connectonion/cli/co_ai/prompts/connectonion/tui/providers.md +89 -0
  112. connectonion/cli/co_ai/prompts/connectonion/tui/status_bar.md +67 -0
  113. connectonion/cli/co_ai/prompts/connectonion/useful_plugins/README.md +156 -0
  114. connectonion/cli/co_ai/prompts/connectonion/useful_plugins/calendar_plugin.md +68 -0
  115. connectonion/cli/co_ai/prompts/connectonion/useful_plugins/eval.md +89 -0
  116. connectonion/cli/co_ai/prompts/connectonion/useful_plugins/gmail_plugin.md +68 -0
  117. connectonion/cli/co_ai/prompts/connectonion/useful_plugins/image_result_formatter.md +74 -0
  118. connectonion/cli/co_ai/prompts/connectonion/useful_plugins/re_act.md +86 -0
  119. connectonion/cli/co_ai/prompts/connectonion/useful_plugins/shell_approval.md +69 -0
  120. connectonion/cli/co_ai/prompts/connectonion/useful_tools/README.md +81 -0
  121. connectonion/cli/co_ai/prompts/connectonion/useful_tools/diff_writer.md +138 -0
  122. connectonion/cli/co_ai/prompts/connectonion/useful_tools/get_emails.md +499 -0
  123. connectonion/cli/co_ai/prompts/connectonion/useful_tools/gmail.md +135 -0
  124. connectonion/cli/co_ai/prompts/connectonion/useful_tools/google_calendar.md +106 -0
  125. connectonion/cli/co_ai/prompts/connectonion/useful_tools/memory.md +486 -0
  126. connectonion/cli/co_ai/prompts/connectonion/useful_tools/microsoft_calendar.md +106 -0
  127. connectonion/cli/co_ai/prompts/connectonion/useful_tools/outlook.md +120 -0
  128. connectonion/cli/co_ai/prompts/connectonion/useful_tools/send_email.md +403 -0
  129. connectonion/cli/co_ai/prompts/connectonion/useful_tools/shell.md +95 -0
  130. connectonion/cli/co_ai/prompts/connectonion/useful_tools/slash_command.md +96 -0
  131. connectonion/cli/co_ai/prompts/connectonion/useful_tools/terminal.md +97 -0
  132. connectonion/cli/co_ai/prompts/connectonion/useful_tools/todo_list.md +252 -0
  133. connectonion/cli/co_ai/prompts/connectonion/useful_tools/web_fetch.md +130 -0
  134. connectonion/cli/co_ai/prompts/connectonion/vibe-coding-guide.md +97 -0
  135. connectonion/cli/co_ai/prompts/connectonion/windows-support.md +258 -0
  136. connectonion/cli/co_ai/prompts/main.md +247 -0
  137. connectonion/cli/co_ai/prompts/summarization.md +55 -0
  138. connectonion/cli/co_ai/prompts/system-reminders/agent.md +23 -0
  139. connectonion/cli/co_ai/prompts/system-reminders/plan_mode.md +13 -0
  140. connectonion/cli/co_ai/prompts/system-reminders/security.md +14 -0
  141. connectonion/cli/co_ai/prompts/system-reminders/simplicity.md +14 -0
  142. connectonion/cli/co_ai/prompts/tools/ask_user.md +61 -0
  143. connectonion/cli/co_ai/prompts/tools/background.md +57 -0
  144. connectonion/cli/co_ai/prompts/tools/edit.md +90 -0
  145. connectonion/cli/co_ai/prompts/tools/glob.md +52 -0
  146. connectonion/cli/co_ai/prompts/tools/grep.md +55 -0
  147. connectonion/cli/co_ai/prompts/tools/plan_mode.md +80 -0
  148. connectonion/cli/co_ai/prompts/tools/read.md +40 -0
  149. connectonion/cli/co_ai/prompts/tools/shell.md +67 -0
  150. connectonion/cli/co_ai/prompts/tools/task.md +51 -0
  151. connectonion/cli/co_ai/prompts/tools/todo.md +139 -0
  152. connectonion/cli/co_ai/prompts/tools/write.md +47 -0
  153. connectonion/cli/co_ai/prompts/workflow.md +89 -0
  154. connectonion/cli/co_ai/sessions.py +110 -0
  155. connectonion/cli/co_ai/skills/__init__.py +37 -0
  156. connectonion/cli/co_ai/skills/builtin/commit/SKILL.md +63 -0
  157. connectonion/cli/co_ai/skills/builtin/review-pr/SKILL.md +76 -0
  158. connectonion/cli/co_ai/skills/loader.py +166 -0
  159. connectonion/cli/co_ai/skills/tool.py +46 -0
  160. connectonion/cli/co_ai/tools/__init__.py +92 -0
  161. connectonion/cli/co_ai/tools/ask_user.py +35 -0
  162. connectonion/cli/co_ai/tools/background.py +201 -0
  163. connectonion/cli/co_ai/tools/diff_writer.py +291 -0
  164. connectonion/cli/co_ai/tools/edit.py +89 -0
  165. connectonion/cli/co_ai/tools/glob.py +84 -0
  166. connectonion/cli/co_ai/tools/grep.py +158 -0
  167. connectonion/cli/co_ai/tools/load_guide.py +23 -0
  168. connectonion/cli/co_ai/tools/multi_edit.py +116 -0
  169. connectonion/cli/co_ai/tools/plan_mode.py +169 -0
  170. connectonion/cli/co_ai/tools/read.py +61 -0
  171. connectonion/cli/co_ai/tools/task.py +59 -0
  172. connectonion/cli/co_ai/tools/todo_list.py +159 -0
  173. connectonion/cli/co_ai/tools/write.py +126 -0
  174. connectonion/cli/commands/__init__.py +11 -1
  175. connectonion/cli/commands/ai_commands.py +34 -0
  176. connectonion/cli/commands/copy_commands.py +55 -6
  177. connectonion/cli/commands/create.py +20 -17
  178. connectonion/cli/commands/init.py +19 -22
  179. connectonion/cli/commands/project_cmd_lib.py +15 -0
  180. connectonion/cli/main.py +11 -0
  181. connectonion/console.py +15 -1
  182. connectonion/core/__init__.py +10 -1
  183. connectonion/core/agent.py +37 -16
  184. connectonion/core/exceptions.py +74 -0
  185. connectonion/core/llm.py +54 -6
  186. connectonion/core/tool_executor.py +32 -31
  187. connectonion/core/tool_factory.py +47 -10
  188. connectonion/debug/__init__.py +10 -1
  189. connectonion/debug/debug_explainer/__init__.py +10 -1
  190. connectonion/debug/execution_analyzer/__init__.py +10 -1
  191. connectonion/debug/execution_analyzer/execution_analysis.py +5 -2
  192. connectonion/debug/runtime_inspector/__init__.py +10 -1
  193. connectonion/docs/.package-ignore +6 -0
  194. connectonion/docs/README.md +2036 -0
  195. connectonion/docs/api.md +457 -0
  196. connectonion/docs/archive/001-ai-agent-is-just-prompt-plus-function.md +249 -0
  197. connectonion/docs/archive/README.md +53 -0
  198. connectonion/docs/archive/archive/consolidation-plan.md +72 -0
  199. connectonion/docs/archive/archive/core-principles-extracted.md +239 -0
  200. connectonion/docs/archive/archive/master-principles.md +222 -0
  201. connectonion/docs/archive/archive/principles.md +293 -0
  202. connectonion/docs/archive/archive/simplicity-principles.md +221 -0
  203. connectonion/docs/archive/attack-defense-insights.md +410 -0
  204. connectonion/docs/archive/business-model.md +305 -0
  205. connectonion/docs/archive/core-principles-unified.md +190 -0
  206. connectonion/docs/archive/discussion-journey.md +178 -0
  207. connectonion/docs/archive/economic-analysis.md +323 -0
  208. connectonion/docs/archive/features/01-share-and-find.md +256 -0
  209. connectonion/docs/archive/features/02-agent-authentication.md +93 -0
  210. connectonion/docs/archive/features/03-test-before-trust.md +71 -0
  211. connectonion/docs/archive/features/06-reliability-and-offline.md +197 -0
  212. connectonion/docs/archive/features/README.md +46 -0
  213. connectonion/docs/archive/features-roadmap.md +247 -0
  214. connectonion/docs/archive/mcp-comparison-insights.md +215 -0
  215. connectonion/docs/archive/migration-strategy.md +571 -0
  216. connectonion/docs/archive/mini-whitepaper.md +293 -0
  217. connectonion/docs/archive/network-protocol.md +394 -0
  218. connectonion/docs/archive/semantic-revolution.md +367 -0
  219. connectonion/docs/archive/technical-architecture.md +453 -0
  220. connectonion/docs/archive/the-semantic-insight.md +207 -0
  221. connectonion/docs/archive/threat-model.md +164 -0
  222. connectonion/docs/cli/README.md +805 -0
  223. connectonion/docs/cli/auth.md +46 -0
  224. connectonion/docs/cli/browser.md +235 -0
  225. connectonion/docs/cli/copy.md +232 -0
  226. connectonion/docs/cli/create.md +335 -0
  227. connectonion/docs/cli/init.md +431 -0
  228. connectonion/docs/co-directory-structure.md +214 -0
  229. connectonion/docs/concepts/agent.md +1078 -0
  230. connectonion/docs/concepts/events.md +699 -0
  231. connectonion/docs/concepts/llm_do.md +256 -0
  232. connectonion/docs/concepts/max_iterations.md +362 -0
  233. connectonion/docs/concepts/models.md +641 -0
  234. connectonion/docs/concepts/plugins.md +101 -0
  235. connectonion/docs/concepts/prompts.md +122 -0
  236. connectonion/docs/concepts/session.md +428 -0
  237. connectonion/docs/concepts/tools.md +512 -0
  238. connectonion/docs/concepts/transcribe.md +156 -0
  239. connectonion/docs/concepts/trust.md +291 -0
  240. connectonion/docs/connectonion.md +1256 -0
  241. connectonion/docs/debug/README.md +18 -0
  242. connectonion/docs/debug/auto_debug.md +1026 -0
  243. connectonion/docs/debug/console.md +129 -0
  244. connectonion/docs/debug/eval-format.md +178 -0
  245. connectonion/docs/debug/eval.md +230 -0
  246. connectonion/docs/debug/exceptions.md +307 -0
  247. connectonion/docs/debug/log.md +117 -0
  248. connectonion/docs/debug/xray.md +215 -0
  249. connectonion/docs/design-decisions/001-choosing-input-method.md +202 -0
  250. connectonion/docs/design-decisions/002-choosing-llm-function-name.md +202 -0
  251. connectonion/docs/design-decisions/003-choosing-trust-keyword.md +141 -0
  252. connectonion/docs/design-decisions/004-cli-create-flow.md +117 -0
  253. connectonion/docs/design-decisions/005-designing-agent-network-protocol.md +503 -0
  254. connectonion/docs/design-decisions/006-agent-address-format.md +305 -0
  255. connectonion/docs/design-decisions/007-authentication-backend-design.md +240 -0
  256. connectonion/docs/design-decisions/008-naming-is-hard.md +228 -0
  257. connectonion/docs/design-decisions/009-why-connect-function.md +167 -0
  258. connectonion/docs/design-decisions/010-cli-ux-progressive-disclosure.md +176 -0
  259. connectonion/docs/design-decisions/011-global-config-identity-management.md +357 -0
  260. connectonion/docs/design-decisions/012-tool-execution-separation.md +259 -0
  261. connectonion/docs/design-decisions/013-debug-and-logging-design.md +253 -0
  262. connectonion/docs/design-decisions/014-hook-system-design.md +510 -0
  263. connectonion/docs/design-decisions/015-interactive-auto-debug-design.md +837 -0
  264. connectonion/docs/design-decisions/016-why-no-zero-knowledge-proofs.md +358 -0
  265. connectonion/docs/design-decisions/017-session-logging-and-eval-format.md +120 -0
  266. connectonion/docs/design-decisions/018-event-api-naming.md +274 -0
  267. connectonion/docs/design-decisions/019-agent-lifecycle-design.md +655 -0
  268. connectonion/docs/design-decisions/020-trust-system-and-network-architecture.md +503 -0
  269. connectonion/docs/design-decisions/021-task-storage-jsonl-design.md +496 -0
  270. connectonion/docs/design-decisions/022-raw-asgi-implementation.md +273 -0
  271. connectonion/docs/examples.md +0 -0
  272. connectonion/docs/hook-system-options.md +364 -0
  273. connectonion/docs/integrations/README.md +12 -0
  274. connectonion/docs/integrations/auth.md +450 -0
  275. connectonion/docs/integrations/google.md +431 -0
  276. connectonion/docs/integrations/microsoft.md +370 -0
  277. connectonion/docs/network/README.md +14 -0
  278. connectonion/docs/network/connect.md +629 -0
  279. connectonion/docs/network/deploy.md +124 -0
  280. connectonion/docs/network/host.md +1087 -0
  281. connectonion/docs/network/io.md +538 -0
  282. connectonion/docs/network/protocol/agent-relay-protocol.md +495 -0
  283. connectonion/docs/network/protocol/announce-message.md +115 -0
  284. connectonion/docs/principles.md +124 -0
  285. connectonion/docs/quickstart.md +261 -0
  286. connectonion/docs/roadmap.md +81 -0
  287. connectonion/docs/templates/README.md +77 -0
  288. connectonion/docs/templates/meta-agent.md +152 -0
  289. connectonion/docs/templates/minimal.md +105 -0
  290. connectonion/docs/templates/playwright.md +130 -0
  291. connectonion/docs/templates/web-research.md +144 -0
  292. connectonion/docs/tui/README.md +95 -0
  293. connectonion/docs/tui/chat.md +181 -0
  294. connectonion/docs/tui/divider.md +63 -0
  295. connectonion/docs/tui/dropdown.md +83 -0
  296. connectonion/docs/tui/footer.md +44 -0
  297. connectonion/docs/tui/fuzzy.md +68 -0
  298. connectonion/docs/tui/input.md +84 -0
  299. connectonion/docs/tui/keys.md +77 -0
  300. connectonion/docs/tui/pick.md +71 -0
  301. connectonion/docs/tui/providers.md +89 -0
  302. connectonion/docs/tui/status_bar.md +67 -0
  303. connectonion/docs/useful_plugins/README.md +160 -0
  304. connectonion/docs/useful_plugins/calendar_plugin.md +68 -0
  305. connectonion/docs/useful_plugins/eval.md +89 -0
  306. connectonion/docs/useful_plugins/gmail_plugin.md +68 -0
  307. connectonion/docs/useful_plugins/image_result_formatter.md +74 -0
  308. connectonion/docs/useful_plugins/re_act.md +86 -0
  309. connectonion/docs/useful_plugins/shell_approval.md +69 -0
  310. connectonion/docs/useful_plugins/system_reminder.md +210 -0
  311. connectonion/docs/useful_plugins/tool_approval.md +139 -0
  312. connectonion/docs/useful_prompts/README.md +127 -0
  313. connectonion/docs/useful_prompts/coding_agent.md +214 -0
  314. connectonion/docs/useful_tools/README.md +81 -0
  315. connectonion/docs/useful_tools/ask_user.md +103 -0
  316. connectonion/docs/useful_tools/diff_writer.md +158 -0
  317. connectonion/docs/useful_tools/get_emails.md +519 -0
  318. connectonion/docs/useful_tools/gmail.md +155 -0
  319. connectonion/docs/useful_tools/google_calendar.md +126 -0
  320. connectonion/docs/useful_tools/memory.md +506 -0
  321. connectonion/docs/useful_tools/microsoft_calendar.md +126 -0
  322. connectonion/docs/useful_tools/outlook.md +140 -0
  323. connectonion/docs/useful_tools/send_email.md +423 -0
  324. connectonion/docs/useful_tools/shell.md +115 -0
  325. connectonion/docs/useful_tools/slash_command.md +116 -0
  326. connectonion/docs/useful_tools/terminal.md +115 -0
  327. connectonion/docs/useful_tools/todo_list.md +272 -0
  328. connectonion/docs/useful_tools/web_fetch.md +150 -0
  329. connectonion/docs/vibe-coding-guide.md +97 -0
  330. connectonion/docs/windows-support.md +258 -0
  331. connectonion/logger.py +3 -3
  332. connectonion/network/__init__.py +19 -6
  333. connectonion/network/asgi/__init__.py +81 -0
  334. connectonion/network/asgi/http.py +205 -0
  335. connectonion/network/asgi/websocket.py +217 -0
  336. connectonion/network/connect.py +232 -185
  337. connectonion/network/host/__init__.py +59 -0
  338. connectonion/network/host/auth.py +191 -0
  339. connectonion/network/host/routes.py +135 -0
  340. connectonion/network/host/server.py +289 -0
  341. connectonion/network/host/session.py +78 -0
  342. connectonion/network/io/__init__.py +21 -0
  343. connectonion/network/{connection.py → io/base.py} +17 -42
  344. connectonion/network/io/websocket.py +55 -0
  345. connectonion/network/relay.py +37 -16
  346. connectonion/network/trust/__init__.py +30 -0
  347. connectonion/network/trust/factory.py +138 -0
  348. connectonion/network/{trust_agents.py → trust/prompts.py} +3 -3
  349. connectonion/network/{trust_functions.py → trust/tools.py} +2 -2
  350. connectonion/prompt_files/__init__.py +11 -1
  351. connectonion/prompt_files/react_acknowledge.md +26 -0
  352. connectonion/prompts.py +10 -1
  353. connectonion/tui/chat.py +10 -1
  354. connectonion/tui/divider.py +10 -1
  355. connectonion/tui/dropdown.py +10 -1
  356. connectonion/tui/footer.py +8 -0
  357. connectonion/tui/fuzzy.py +11 -1
  358. connectonion/tui/input.py +118 -70
  359. connectonion/tui/keys.py +133 -6
  360. connectonion/tui/providers.py +11 -1
  361. connectonion/tui/status_bar.py +10 -1
  362. connectonion/useful_events_handlers/__init__.py +8 -0
  363. connectonion/useful_events_handlers/reflect.py +19 -4
  364. connectonion/useful_plugins/__init__.py +3 -1
  365. connectonion/useful_plugins/eval.py +2 -2
  366. connectonion/useful_plugins/gmail_plugin.py +3 -3
  367. connectonion/useful_plugins/image_result_formatter.py +3 -3
  368. connectonion/useful_plugins/re_act.py +114 -28
  369. connectonion/useful_plugins/shell_approval.py +2 -2
  370. connectonion/useful_plugins/system_reminder.py +103 -0
  371. connectonion/useful_plugins/tool_approval.py +233 -0
  372. connectonion/useful_plugins/ui_stream.py +18 -133
  373. connectonion/useful_prompts/README.md +61 -0
  374. connectonion/useful_prompts/__init__.py +45 -0
  375. connectonion/useful_prompts/coding_agent/README.md +106 -0
  376. connectonion/useful_prompts/coding_agent/assembler.py +123 -0
  377. connectonion/useful_prompts/coding_agent/prompts/main.md +227 -0
  378. connectonion/useful_prompts/coding_agent/prompts/tools/ask_user.md +61 -0
  379. connectonion/useful_prompts/coding_agent/prompts/tools/background.md +57 -0
  380. connectonion/useful_prompts/coding_agent/prompts/tools/edit.md +90 -0
  381. connectonion/useful_prompts/coding_agent/prompts/tools/glob.md +52 -0
  382. connectonion/useful_prompts/coding_agent/prompts/tools/grep.md +55 -0
  383. connectonion/useful_prompts/coding_agent/prompts/tools/plan_mode.md +80 -0
  384. connectonion/useful_prompts/coding_agent/prompts/tools/read.md +40 -0
  385. connectonion/useful_prompts/coding_agent/prompts/tools/shell.md +67 -0
  386. connectonion/useful_prompts/coding_agent/prompts/tools/task.md +51 -0
  387. connectonion/useful_prompts/coding_agent/prompts/tools/todo.md +139 -0
  388. connectonion/useful_prompts/coding_agent/prompts/tools/write.md +48 -0
  389. connectonion/useful_prompts/system-reminders/security-warning.md +14 -0
  390. connectonion/useful_prompts/system-reminders/test-reminder.md +11 -0
  391. connectonion/useful_tools/__init__.py +31 -4
  392. connectonion/useful_tools/ask_user.py +35 -0
  393. connectonion/useful_tools/bash.py +69 -0
  394. connectonion/useful_tools/diff_writer.py +186 -94
  395. connectonion/useful_tools/edit.py +102 -0
  396. connectonion/useful_tools/glob_files.py +97 -0
  397. connectonion/useful_tools/grep_files.py +171 -0
  398. connectonion/useful_tools/multi_edit.py +116 -0
  399. connectonion/useful_tools/read_file.py +73 -0
  400. connectonion/useful_tools/shell.py +50 -45
  401. connectonion/useful_tools/write_file.py +129 -0
  402. {connectonion-0.6.2.dist-info → connectonion-0.6.4.dist-info}/METADATA +10 -3
  403. connectonion-0.6.4.dist-info/RECORD +472 -0
  404. connectonion/network/asgi.py +0 -407
  405. connectonion/network/host.py +0 -616
  406. connectonion/network/trust.py +0 -166
  407. connectonion-0.6.2.dist-info/RECORD +0 -129
  408. /connectonion/cli/{docs → co_ai/prompts/connectonion}/connectonion.md +0 -0
  409. {connectonion-0.6.2.dist-info → connectonion-0.6.4.dist-info}/WHEEL +0 -0
  410. {connectonion-0.6.2.dist-info → connectonion-0.6.4.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,538 @@
1
+ # Connection
2
+
3
+ > Communicate with clients from hosted agents. Same events, works locally and hosted.
4
+
5
+ ---
6
+
7
+ ## Quick Start (60 Seconds)
8
+
9
+ ```python
10
+ from connectonion import Agent, host, after_llm, before_each_tool
11
+
12
+ @after_llm
13
+ def on_thinking(agent):
14
+ if agent.connection:
15
+ agent.connection.log("thinking")
16
+
17
+ @before_each_tool
18
+ def on_tool(agent):
19
+ if agent.connection:
20
+ tool = agent.current_session['pending_tool']
21
+ agent.connection.log("tool_call", name=tool['name'], arguments=tool['arguments'])
22
+
23
+ agent = Agent("helper", tools=[search], on_events=[on_thinking, on_tool])
24
+ host(agent)
25
+ ```
26
+
27
+ **That's it.** Your agent now communicates with connected clients.
28
+
29
+ ---
30
+
31
+ ## The Core Concept
32
+
33
+ When you `host()` an agent, each request gets a `connection`:
34
+
35
+ ```
36
+ Local execution: agent.connection = None
37
+ Hosted execution: agent.connection = Connection to client
38
+ ```
39
+
40
+ Same events. Same code. Just check `if agent.connection:`.
41
+
42
+ ---
43
+
44
+ ## Two-Layer API
45
+
46
+ ```
47
+ ┌─────────────────────────────────────────────────────────────┐
48
+ │ HIGH-LEVEL API (2 methods) │
49
+ │ ────────────────────────── │
50
+ │ connection.log(type, **data) → one-way notify │
51
+ │ connection.request_approval(tool, args) → bool (two-way) │
52
+ ├─────────────────────────────────────────────────────────────┤
53
+ │ LOW-LEVEL API (2 methods) │
54
+ │ ───────────────────────── │
55
+ │ connection.send(event) → send any event │
56
+ │ connection.receive() → get response │
57
+ └─────────────────────────────────────────────────────────────┘
58
+ ```
59
+
60
+ **High-level**: `log()` for notifications, `request_approval()` for permissions
61
+ **Low-level**: `send()` / `receive()` for custom needs
62
+
63
+ ---
64
+
65
+ ## The Connection Interface
66
+
67
+ ```python
68
+ class Connection:
69
+ """Connection to client for real-time communication."""
70
+
71
+ # ═══════════════════════════════════════════════════════
72
+ # LOW-LEVEL API (Primitives)
73
+ # ═══════════════════════════════════════════════════════
74
+
75
+ def send(self, event: dict) -> None:
76
+ """Send any event to client."""
77
+
78
+ def receive(self) -> dict:
79
+ """Receive response from client."""
80
+
81
+ # ═══════════════════════════════════════════════════════
82
+ # HIGH-LEVEL API (Patterns)
83
+ # ═══════════════════════════════════════════════════════
84
+
85
+ def log(self, event_type: str, **data) -> None:
86
+ """One-way notification to client.
87
+
88
+ Common event types: thinking, tool_call, tool_result, complete, error
89
+ """
90
+ self.send({"type": event_type, **data})
91
+
92
+ def request_approval(self, tool: str, arguments: dict) -> bool:
93
+ """Two-way: request permission, wait for response."""
94
+ self.send({"type": "approval_needed", "tool": tool, "arguments": arguments})
95
+ response = self.receive()
96
+ return response.get("approved", False)
97
+ ```
98
+
99
+ ---
100
+
101
+ ## Lifecycle
102
+
103
+ ```
104
+ ┌─────────────────────────────────────────────────────────────┐
105
+ │ │
106
+ │ LOCAL EXECUTION │
107
+ │ ─────────────── │
108
+ │ agent = Agent("helper", on_events=[...]) │
109
+ │ agent.connection = None ← Always None locally │
110
+ │ agent.input("hello") │
111
+ │ → Events fire │
112
+ │ → Handlers check: if agent.connection: (skip) │
113
+ │ │
114
+ │ HOSTED EXECUTION │
115
+ │ ──────────────── │
116
+ │ host(agent) │
117
+ │ │ │
118
+ │ ├─→ Client connects (WebSocket) │
119
+ │ │ │
120
+ │ ├─→ agent = copy.deepcopy(agent_template) │
121
+ │ │ │
122
+ │ ├─→ agent.connection = Connection(ws) ← Injected │
123
+ │ │ │
124
+ │ ├─→ agent.input(prompt) │
125
+ │ │ → Events fire │
126
+ │ │ → if agent.connection: ✓ │
127
+ │ │ → agent.connection.log("thinking") │
128
+ │ │ │
129
+ │ └─→ Request completes, connection closed │
130
+ │ │
131
+ └─────────────────────────────────────────────────────────────┘
132
+ ```
133
+
134
+ ---
135
+
136
+ ## High-Level API Examples
137
+
138
+ ### Notify Events
139
+
140
+ ```python
141
+ from connectonion import Agent, host, after_llm, after_each_tool, on_complete
142
+
143
+ @after_llm
144
+ def on_thinking(agent):
145
+ if agent.connection:
146
+ agent.connection.log("thinking")
147
+
148
+ @after_each_tool
149
+ def on_result(agent):
150
+ if agent.connection:
151
+ trace = agent.current_session['trace'][-1]
152
+ agent.connection.log("tool_result", name=trace['tool_name'], result=trace['result'])
153
+
154
+ @on_complete
155
+ def on_done(agent):
156
+ if agent.connection:
157
+ agent.connection.log("complete", result=agent.current_session['result'])
158
+
159
+ agent = Agent("helper", tools=[search], on_events=[on_thinking, on_result, on_done])
160
+ host(agent)
161
+ ```
162
+
163
+ ### Tool Approval
164
+
165
+ ```python
166
+ from connectonion import Agent, host, before_each_tool
167
+
168
+ class ToolRejected(Exception):
169
+ pass
170
+
171
+ DANGEROUS_TOOLS = ["delete_file", "send_email", "run_shell"]
172
+
173
+ @before_each_tool
174
+ def check_approval(agent):
175
+ if not agent.connection:
176
+ return
177
+
178
+ tool = agent.current_session['pending_tool']
179
+
180
+ # Notify tool is starting
181
+ agent.connection.log("tool_call", name=tool['name'], arguments=tool['arguments'])
182
+
183
+ # Request approval for dangerous tools
184
+ if tool['name'] in DANGEROUS_TOOLS:
185
+ if not agent.connection.request_approval(tool['name'], tool['arguments']):
186
+ raise ToolRejected(f"User rejected {tool['name']}")
187
+
188
+ agent = Agent("helper", tools=[delete_file], on_events=[check_approval])
189
+ host(agent)
190
+ ```
191
+
192
+ ---
193
+
194
+ ## Low-Level API Examples
195
+
196
+ For custom events and interactions:
197
+
198
+ ```python
199
+ @after_llm
200
+ def custom_progress(agent):
201
+ if agent.connection:
202
+ # Custom event type
203
+ agent.connection.send({
204
+ "type": "progress",
205
+ "percent": 50,
206
+ "stage": "analyzing"
207
+ })
208
+
209
+ @before_each_tool
210
+ def custom_interaction(agent):
211
+ if not agent.connection:
212
+ return
213
+
214
+ tool = agent.current_session['pending_tool']
215
+
216
+ # Ask user to choose
217
+ agent.connection.send({
218
+ "type": "choice",
219
+ "question": "Which method?",
220
+ "options": ["fast", "thorough"]
221
+ })
222
+ response = agent.connection.receive()
223
+ method = response.get("choice", "fast")
224
+
225
+ # Modify tool arguments based on choice
226
+ tool['arguments']['method'] = method
227
+ ```
228
+
229
+ ---
230
+
231
+ ## Event Protocol
232
+
233
+ ### Server → Client
234
+
235
+ ```typescript
236
+ // Common events (via log())
237
+ { type: "thinking" }
238
+ { type: "tool_call", name: string, arguments: object }
239
+ { type: "tool_result", name: string, result: string }
240
+ { type: "complete", result: string }
241
+ { type: "error", message: string }
242
+
243
+ // Approval request (via request_approval())
244
+ { type: "approval_needed", tool: string, arguments: object }
245
+
246
+ // Custom events (via send())
247
+ { type: "your_custom_type", ...data }
248
+ ```
249
+
250
+ ### Client → Server
251
+
252
+ ```typescript
253
+ // Approval response
254
+ { approved: boolean }
255
+
256
+ // Custom response
257
+ { ...your_data }
258
+ ```
259
+
260
+ ---
261
+
262
+ ## Client-Side (JavaScript)
263
+
264
+ ```javascript
265
+ const ws = new WebSocket("ws://localhost:8000/ws");
266
+
267
+ ws.onmessage = async (event) => {
268
+ const msg = JSON.parse(event.data);
269
+
270
+ switch (msg.type) {
271
+ case "thinking":
272
+ showSpinner();
273
+ break;
274
+
275
+ case "tool_call":
276
+ appendMessage(`Calling ${msg.name}...`);
277
+ break;
278
+
279
+ case "tool_result":
280
+ appendMessage(`${msg.name}: ${msg.result}`);
281
+ break;
282
+
283
+ case "complete":
284
+ hideSpinner();
285
+ appendMessage(msg.result);
286
+ break;
287
+
288
+ case "error":
289
+ showError(msg.message);
290
+ break;
291
+
292
+ case "approval_needed":
293
+ const approved = await showApprovalDialog(msg.tool, msg.arguments);
294
+ ws.send(JSON.stringify({ approved }));
295
+ break;
296
+ }
297
+ };
298
+
299
+ // Send prompt
300
+ ws.send(JSON.stringify({ type: "INPUT", prompt: "Search for Python docs" }));
301
+ ```
302
+
303
+ ---
304
+
305
+ ## React Hook
306
+
307
+ ```typescript
308
+ import { useState, useEffect, useCallback } from 'react';
309
+
310
+ function useAgent(wsUrl: string) {
311
+ const [events, setEvents] = useState([]);
312
+ const [pendingApproval, setPendingApproval] = useState(null);
313
+ const [ws, setWs] = useState(null);
314
+
315
+ useEffect(() => {
316
+ const socket = new WebSocket(wsUrl);
317
+
318
+ socket.onmessage = (e) => {
319
+ const event = JSON.parse(e.data);
320
+ setEvents(prev => [...prev, event]);
321
+
322
+ if (event.type === 'approval_needed') {
323
+ setPendingApproval(event);
324
+ }
325
+ };
326
+
327
+ setWs(socket);
328
+ return () => socket.close();
329
+ }, [wsUrl]);
330
+
331
+ const send = useCallback((prompt) => {
332
+ ws?.send(JSON.stringify({ type: 'INPUT', prompt }));
333
+ }, [ws]);
334
+
335
+ const approve = useCallback((approved) => {
336
+ if (pendingApproval) {
337
+ ws?.send(JSON.stringify({ approved }));
338
+ setPendingApproval(null);
339
+ }
340
+ }, [ws, pendingApproval]);
341
+
342
+ return { events, pendingApproval, send, approve };
343
+ }
344
+ ```
345
+
346
+ ### Usage
347
+
348
+ ```tsx
349
+ function AgentChat() {
350
+ const { events, pendingApproval, send, approve } = useAgent("ws://localhost:8000/ws");
351
+
352
+ return (
353
+ <div>
354
+ {events.map((e, i) => (
355
+ <EventMessage key={i} event={e} />
356
+ ))}
357
+
358
+ {pendingApproval && (
359
+ <ApprovalDialog
360
+ tool={pendingApproval.tool}
361
+ onApprove={() => approve(true)}
362
+ onReject={() => approve(false)}
363
+ />
364
+ )}
365
+
366
+ <ChatInput onSend={send} />
367
+ </div>
368
+ );
369
+ }
370
+ ```
371
+
372
+ ---
373
+
374
+ ## Available Events
375
+
376
+ | Event | When It Fires | Typical Usage |
377
+ |-------|---------------|---------------|
378
+ | `after_llm` | After each LLM response | `log("thinking")` |
379
+ | `before_each_tool` | Before each tool executes | `log("tool_call", ...)`, `request_approval(...)` |
380
+ | `after_each_tool` | After each tool completes | `log("tool_result", ...)` |
381
+ | `on_complete` | After agent finishes | `log("complete", ...)` |
382
+ | `on_error` | When tool fails | `log("error", ...)` |
383
+
384
+ ---
385
+
386
+ ## Complete Example
387
+
388
+ ```python
389
+ from connectonion import (
390
+ Agent, host,
391
+ after_llm, before_each_tool, after_each_tool, on_complete, on_error
392
+ )
393
+
394
+ class ToolRejected(Exception):
395
+ pass
396
+
397
+ DANGEROUS_TOOLS = ["delete_file", "send_email"]
398
+
399
+ @after_llm
400
+ def on_thinking(agent):
401
+ if agent.connection:
402
+ agent.connection.log("thinking")
403
+
404
+ @before_each_tool
405
+ def on_tool_start(agent):
406
+ if not agent.connection:
407
+ return
408
+
409
+ tool = agent.current_session['pending_tool']
410
+ agent.connection.log("tool_call", name=tool['name'], arguments=tool['arguments'])
411
+
412
+ if tool['name'] in DANGEROUS_TOOLS:
413
+ if not agent.connection.request_approval(tool['name'], tool['arguments']):
414
+ raise ToolRejected(tool['name'])
415
+
416
+ @after_each_tool
417
+ def on_tool_end(agent):
418
+ if agent.connection:
419
+ trace = agent.current_session['trace'][-1]
420
+ agent.connection.log(
421
+ "tool_result",
422
+ name=trace['tool_name'],
423
+ result=trace['result'],
424
+ status=trace['status']
425
+ )
426
+
427
+ @on_complete
428
+ def on_done(agent):
429
+ if agent.connection:
430
+ agent.connection.log("complete", result=agent.current_session['result'])
431
+
432
+ @on_error
433
+ def on_fail(agent):
434
+ if agent.connection:
435
+ trace = agent.current_session['trace'][-1]
436
+ agent.connection.log("error", message=trace.get('error', 'Unknown error'))
437
+
438
+ agent = Agent(
439
+ "helper",
440
+ tools=[search, delete_file],
441
+ on_events=[on_thinking, on_tool_start, on_tool_end, on_done, on_fail]
442
+ )
443
+
444
+ host(agent)
445
+ ```
446
+
447
+ ---
448
+
449
+ ## Local vs Hosted
450
+
451
+ Same handlers work in both contexts:
452
+
453
+ ```python
454
+ @after_llm
455
+ def my_handler(agent):
456
+ # Runs in BOTH local and hosted mode
457
+ print(f"Iteration {agent.current_session['iteration']}")
458
+
459
+ # Only runs when hosted
460
+ if agent.connection:
461
+ agent.connection.log("thinking")
462
+
463
+ # Local - connection is None, skips log
464
+ agent = Agent("helper", on_events=[my_handler])
465
+ agent.input("hello")
466
+
467
+ # Hosted - connection exists, sends to client
468
+ host(agent)
469
+ ```
470
+
471
+ ---
472
+
473
+ ## Custom Adapters
474
+
475
+ Implement your own connection for custom transports:
476
+
477
+ ```python
478
+ from connectonion.network import Connection
479
+
480
+ class SlackConnection(Connection):
481
+ """Send events to Slack channel."""
482
+
483
+ def __init__(self, slack_client, channel_id):
484
+ self._slack = slack_client
485
+ self._channel = channel_id
486
+
487
+ def send(self, event: dict):
488
+ self._slack.chat_postMessage(
489
+ channel=self._channel,
490
+ text=f"{event['type']}: {event.get('result', event.get('name', ''))}"
491
+ )
492
+
493
+ def receive(self) -> dict:
494
+ # Implementation depends on your Slack setup
495
+ pass
496
+
497
+ # High-level methods automatically use send/receive
498
+
499
+ # Use custom adapter
500
+ agent.connection = SlackConnection(slack_client, "#agent-events")
501
+ agent.input("do something")
502
+ ```
503
+
504
+ ---
505
+
506
+ ## Summary
507
+
508
+ | Layer | Methods | For |
509
+ |-------|---------|-----|
510
+ | **High-level** | `log(type, **data)`, `request_approval(tool, args)` | Daily use (2 methods) |
511
+ | **Low-level** | `send(event)`, `receive()` | Custom events (2 methods) |
512
+
513
+ **The pattern:**
514
+
515
+ ```python
516
+ if agent.connection:
517
+ # One-way notifications
518
+ agent.connection.log("thinking")
519
+ agent.connection.log("tool_call", name="search", arguments={"q": "python"})
520
+
521
+ # Two-way permission request
522
+ if not agent.connection.request_approval("delete", {"path": "/tmp/x"}):
523
+ raise ToolRejected()
524
+
525
+ # Custom events (low-level)
526
+ agent.connection.send({"type": "custom", "data": {...}})
527
+ response = agent.connection.receive()
528
+ ```
529
+
530
+ **4 methods total. Simple things simple. Complicated things possible.**
531
+
532
+ ---
533
+
534
+ ## Learn More
535
+
536
+ - **[host.md](host.md)** - Host agents over HTTP/WebSocket
537
+ - **[connect.md](connect.md)** - Connect to remote agents
538
+
@@ -0,0 +1,123 @@
1
+ # Deploy Your Agent
2
+
3
+ Get your agent running in production.
4
+
5
+ > **Beta**: `co deploy` is in beta. Works well but may change.
6
+
7
+ ---
8
+
9
+ ## Two Options
10
+
11
+ | Option | Best For |
12
+ |--------|----------|
13
+ | **`co deploy`** | Quick deployment, managed hosting |
14
+ | **Self-host** | Full control, your own infrastructure |
15
+
16
+ ---
17
+
18
+ ## co deploy (Easiest)
19
+
20
+ Deploy to ConnectOnion Cloud with one command.
21
+
22
+ ```bash
23
+ cd my-agent
24
+ git init && git add -A && git commit -m "Initial commit"
25
+ co auth # If not already authenticated
26
+ co deploy
27
+ ```
28
+
29
+ **Output:**
30
+ ```
31
+ Deploying to ConnectOnion Cloud...
32
+
33
+ Project: my-agent
34
+ Secrets: 3 keys
35
+
36
+ Uploading...
37
+ Building...
38
+
39
+ Deployed!
40
+ Agent URL: https://my-agent-0x7a9f3b2c.agents.openonion.ai
41
+ ```
42
+
43
+ URL format: `{project_name}-{your_address[:10]}.agents.openonion.ai`
44
+
45
+ Re-deploying the same project updates the same URL (like Heroku).
46
+
47
+ ### Requirements
48
+
49
+ - Git repository with committed code
50
+ - `.co/config.toml` (created by `co create` or `co init`)
51
+ - Authenticated (`co auth`)
52
+
53
+ ### How It Works
54
+
55
+ ```
56
+ co deploy → Upload source → We build and run → Returns URL
57
+ ```
58
+
59
+ You upload source code, we handle the rest.
60
+
61
+ ### Configuration
62
+
63
+ ```toml
64
+ # .co/config.toml
65
+ [project]
66
+ name = "my-agent"
67
+ secrets = ".env"
68
+
69
+ [deploy]
70
+ entrypoint = "agent.py"
71
+ ```
72
+
73
+ ### Secrets
74
+
75
+ Secrets from `.env` are securely passed to your agent:
76
+
77
+ ```bash
78
+ # .env
79
+ OPENAI_API_KEY=sk-xxx
80
+ DATABASE_URL=postgres://...
81
+ ```
82
+
83
+ ---
84
+
85
+ ## Self-Host
86
+
87
+ Deploy to your own VPS or infrastructure using `host()`.
88
+
89
+ ```python
90
+ # agent.py
91
+ from connectonion import Agent, host
92
+
93
+ agent = Agent("my-agent", tools=[my_tool])
94
+
95
+ # Export ASGI app for uvicorn/gunicorn
96
+ app = host.app(agent)
97
+
98
+ if __name__ == "__main__":
99
+ host(agent)
100
+ ```
101
+
102
+ Deploy with uvicorn, gunicorn, or any ASGI server:
103
+
104
+ ```bash
105
+ # Direct
106
+ python agent.py
107
+
108
+ # Uvicorn
109
+ uvicorn agent:app --workers 4
110
+
111
+ # Gunicorn
112
+ gunicorn agent:app -w 4 -k uvicorn.workers.UvicornWorker
113
+ ```
114
+
115
+ For full API reference, see [host()](host.md).
116
+
117
+ ---
118
+
119
+ ## When to Use Which
120
+
121
+ **Use `co deploy`:** Fastest path to production, no infrastructure management.
122
+
123
+ **Use self-hosting:** Full control, custom domains, compliance requirements.