connectonion 0.6.2__py3-none-any.whl → 0.6.3__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 (407) 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 +6 -0
  24. connectonion/cli/co_ai/plugins/reminder.py +76 -0
  25. connectonion/cli/co_ai/plugins/shell_approval.py +105 -0
  26. connectonion/cli/co_ai/prompts/agents/explore.md +79 -0
  27. connectonion/cli/co_ai/prompts/agents/plan.md +60 -0
  28. connectonion/cli/co_ai/prompts/assembler.py +303 -0
  29. connectonion/cli/{docs/co-vibecoding-principles-docs-contexts-all-in-one.md → co_ai/prompts/connectonion/README.md} +26 -0
  30. connectonion/cli/co_ai/prompts/connectonion/api.md +457 -0
  31. connectonion/cli/co_ai/prompts/connectonion/cli/README.md +805 -0
  32. connectonion/cli/co_ai/prompts/connectonion/cli/auth.md +46 -0
  33. connectonion/cli/co_ai/prompts/connectonion/cli/browser.md +235 -0
  34. connectonion/cli/co_ai/prompts/connectonion/cli/copy.md +184 -0
  35. connectonion/cli/co_ai/prompts/connectonion/cli/create.md +335 -0
  36. connectonion/cli/co_ai/prompts/connectonion/cli/init.md +431 -0
  37. connectonion/cli/co_ai/prompts/connectonion/co-directory-structure.md +214 -0
  38. connectonion/cli/co_ai/prompts/connectonion/concepts/agent.md +1078 -0
  39. connectonion/cli/co_ai/prompts/connectonion/concepts/events.md +816 -0
  40. connectonion/cli/co_ai/prompts/connectonion/concepts/llm_do.md +256 -0
  41. connectonion/cli/co_ai/prompts/connectonion/concepts/max_iterations.md +362 -0
  42. connectonion/cli/co_ai/prompts/connectonion/concepts/models.md +641 -0
  43. connectonion/cli/co_ai/prompts/connectonion/concepts/plugins.md +100 -0
  44. connectonion/cli/co_ai/prompts/connectonion/concepts/prompts.md +122 -0
  45. connectonion/cli/co_ai/prompts/connectonion/concepts/tools.md +512 -0
  46. connectonion/cli/co_ai/prompts/connectonion/concepts/transcribe.md +156 -0
  47. connectonion/cli/co_ai/prompts/connectonion/concepts/trust.md +291 -0
  48. connectonion/cli/co_ai/prompts/connectonion/debug/README.md +18 -0
  49. connectonion/cli/co_ai/prompts/connectonion/debug/auto_debug.md +1026 -0
  50. connectonion/cli/co_ai/prompts/connectonion/debug/console.md +129 -0
  51. connectonion/cli/co_ai/prompts/connectonion/debug/eval-format.md +178 -0
  52. connectonion/cli/co_ai/prompts/connectonion/debug/eval.md +230 -0
  53. connectonion/cli/co_ai/prompts/connectonion/debug/exceptions.md +307 -0
  54. connectonion/cli/co_ai/prompts/connectonion/debug/log.md +117 -0
  55. connectonion/cli/co_ai/prompts/connectonion/debug/xray.md +215 -0
  56. connectonion/cli/co_ai/prompts/connectonion/design-decisions/001-choosing-input-method.md +202 -0
  57. connectonion/cli/co_ai/prompts/connectonion/design-decisions/002-choosing-llm-function-name.md +202 -0
  58. connectonion/cli/co_ai/prompts/connectonion/design-decisions/003-choosing-trust-keyword.md +141 -0
  59. connectonion/cli/co_ai/prompts/connectonion/design-decisions/004-cli-create-flow.md +117 -0
  60. connectonion/cli/co_ai/prompts/connectonion/design-decisions/005-designing-agent-network-protocol.md +503 -0
  61. connectonion/cli/co_ai/prompts/connectonion/design-decisions/006-agent-address-format.md +305 -0
  62. connectonion/cli/co_ai/prompts/connectonion/design-decisions/007-authentication-backend-design.md +240 -0
  63. connectonion/cli/co_ai/prompts/connectonion/design-decisions/008-naming-is-hard.md +228 -0
  64. connectonion/cli/co_ai/prompts/connectonion/design-decisions/009-why-connect-function.md +167 -0
  65. connectonion/cli/co_ai/prompts/connectonion/design-decisions/010-cli-ux-progressive-disclosure.md +176 -0
  66. connectonion/cli/co_ai/prompts/connectonion/design-decisions/011-global-config-identity-management.md +357 -0
  67. connectonion/cli/co_ai/prompts/connectonion/design-decisions/012-tool-execution-separation.md +259 -0
  68. connectonion/cli/co_ai/prompts/connectonion/design-decisions/013-debug-and-logging-design.md +253 -0
  69. connectonion/cli/co_ai/prompts/connectonion/design-decisions/014-hook-system-design.md +510 -0
  70. connectonion/cli/co_ai/prompts/connectonion/design-decisions/015-interactive-auto-debug-design.md +837 -0
  71. connectonion/cli/co_ai/prompts/connectonion/design-decisions/016-why-no-zero-knowledge-proofs.md +358 -0
  72. connectonion/cli/co_ai/prompts/connectonion/design-decisions/017-session-logging-and-eval-format.md +120 -0
  73. connectonion/cli/co_ai/prompts/connectonion/design-decisions/018-event-api-naming.md +274 -0
  74. connectonion/cli/co_ai/prompts/connectonion/design-decisions/019-agent-lifecycle-design.md +655 -0
  75. connectonion/cli/co_ai/prompts/connectonion/design-decisions/020-trust-system-and-network-architecture.md +503 -0
  76. connectonion/cli/co_ai/prompts/connectonion/design-decisions/021-task-storage-jsonl-design.md +496 -0
  77. connectonion/cli/co_ai/prompts/connectonion/design-decisions/022-raw-asgi-implementation.md +273 -0
  78. connectonion/cli/co_ai/prompts/connectonion/examples/agent_reasoning.md +62 -0
  79. connectonion/cli/co_ai/prompts/connectonion/examples/atomic_tools.md +24 -0
  80. connectonion/cli/co_ai/prompts/connectonion/examples/load_guide.md +18 -0
  81. connectonion/cli/co_ai/prompts/connectonion/examples.md +0 -0
  82. connectonion/cli/co_ai/prompts/connectonion/hook-system-options.md +364 -0
  83. connectonion/cli/co_ai/prompts/connectonion/index.md +162 -0
  84. connectonion/cli/co_ai/prompts/connectonion/integrations/README.md +12 -0
  85. connectonion/cli/co_ai/prompts/connectonion/integrations/auth.md +450 -0
  86. connectonion/cli/co_ai/prompts/connectonion/integrations/google.md +431 -0
  87. connectonion/cli/co_ai/prompts/connectonion/integrations/microsoft.md +370 -0
  88. connectonion/cli/co_ai/prompts/connectonion/network/README.md +14 -0
  89. connectonion/cli/co_ai/prompts/connectonion/network/connect.md +543 -0
  90. connectonion/cli/co_ai/prompts/connectonion/network/connection.md +538 -0
  91. connectonion/cli/co_ai/prompts/connectonion/network/deploy.md +123 -0
  92. connectonion/cli/co_ai/prompts/connectonion/network/host.md +1049 -0
  93. connectonion/cli/co_ai/prompts/connectonion/network/protocol/agent-relay-protocol.md +495 -0
  94. connectonion/cli/co_ai/prompts/connectonion/network/protocol/announce-message.md +115 -0
  95. connectonion/cli/co_ai/prompts/connectonion/principles.md +124 -0
  96. connectonion/cli/co_ai/prompts/connectonion/quickstart.md +261 -0
  97. connectonion/cli/co_ai/prompts/connectonion/roadmap.md +81 -0
  98. connectonion/cli/co_ai/prompts/connectonion/templates/README.md +77 -0
  99. connectonion/cli/co_ai/prompts/connectonion/templates/meta-agent.md +152 -0
  100. connectonion/cli/co_ai/prompts/connectonion/templates/minimal.md +105 -0
  101. connectonion/cli/co_ai/prompts/connectonion/templates/playwright.md +130 -0
  102. connectonion/cli/co_ai/prompts/connectonion/templates/web-research.md +144 -0
  103. connectonion/cli/co_ai/prompts/connectonion/tui/README.md +95 -0
  104. connectonion/cli/co_ai/prompts/connectonion/tui/chat.md +181 -0
  105. connectonion/cli/co_ai/prompts/connectonion/tui/divider.md +63 -0
  106. connectonion/cli/co_ai/prompts/connectonion/tui/dropdown.md +83 -0
  107. connectonion/cli/co_ai/prompts/connectonion/tui/footer.md +44 -0
  108. connectonion/cli/co_ai/prompts/connectonion/tui/fuzzy.md +68 -0
  109. connectonion/cli/co_ai/prompts/connectonion/tui/input.md +84 -0
  110. connectonion/cli/co_ai/prompts/connectonion/tui/keys.md +77 -0
  111. connectonion/cli/co_ai/prompts/connectonion/tui/pick.md +71 -0
  112. connectonion/cli/co_ai/prompts/connectonion/tui/providers.md +89 -0
  113. connectonion/cli/co_ai/prompts/connectonion/tui/status_bar.md +67 -0
  114. connectonion/cli/co_ai/prompts/connectonion/useful_plugins/README.md +156 -0
  115. connectonion/cli/co_ai/prompts/connectonion/useful_plugins/calendar_plugin.md +68 -0
  116. connectonion/cli/co_ai/prompts/connectonion/useful_plugins/eval.md +89 -0
  117. connectonion/cli/co_ai/prompts/connectonion/useful_plugins/gmail_plugin.md +68 -0
  118. connectonion/cli/co_ai/prompts/connectonion/useful_plugins/image_result_formatter.md +74 -0
  119. connectonion/cli/co_ai/prompts/connectonion/useful_plugins/re_act.md +86 -0
  120. connectonion/cli/co_ai/prompts/connectonion/useful_plugins/shell_approval.md +69 -0
  121. connectonion/cli/co_ai/prompts/connectonion/useful_tools/README.md +81 -0
  122. connectonion/cli/co_ai/prompts/connectonion/useful_tools/diff_writer.md +138 -0
  123. connectonion/cli/co_ai/prompts/connectonion/useful_tools/get_emails.md +499 -0
  124. connectonion/cli/co_ai/prompts/connectonion/useful_tools/gmail.md +135 -0
  125. connectonion/cli/co_ai/prompts/connectonion/useful_tools/google_calendar.md +106 -0
  126. connectonion/cli/co_ai/prompts/connectonion/useful_tools/memory.md +486 -0
  127. connectonion/cli/co_ai/prompts/connectonion/useful_tools/microsoft_calendar.md +106 -0
  128. connectonion/cli/co_ai/prompts/connectonion/useful_tools/outlook.md +120 -0
  129. connectonion/cli/co_ai/prompts/connectonion/useful_tools/send_email.md +403 -0
  130. connectonion/cli/co_ai/prompts/connectonion/useful_tools/shell.md +95 -0
  131. connectonion/cli/co_ai/prompts/connectonion/useful_tools/slash_command.md +96 -0
  132. connectonion/cli/co_ai/prompts/connectonion/useful_tools/terminal.md +97 -0
  133. connectonion/cli/co_ai/prompts/connectonion/useful_tools/todo_list.md +252 -0
  134. connectonion/cli/co_ai/prompts/connectonion/useful_tools/web_fetch.md +130 -0
  135. connectonion/cli/co_ai/prompts/connectonion/vibe-coding-guide.md +97 -0
  136. connectonion/cli/co_ai/prompts/connectonion/windows-support.md +258 -0
  137. connectonion/cli/co_ai/prompts/main.md +247 -0
  138. connectonion/cli/co_ai/prompts/reminders/plan_mode.md +34 -0
  139. connectonion/cli/co_ai/prompts/summarization.md +55 -0
  140. connectonion/cli/co_ai/prompts/tools/ask_user.md +61 -0
  141. connectonion/cli/co_ai/prompts/tools/background.md +57 -0
  142. connectonion/cli/co_ai/prompts/tools/edit.md +90 -0
  143. connectonion/cli/co_ai/prompts/tools/glob.md +52 -0
  144. connectonion/cli/co_ai/prompts/tools/grep.md +55 -0
  145. connectonion/cli/co_ai/prompts/tools/plan_mode.md +80 -0
  146. connectonion/cli/co_ai/prompts/tools/read.md +40 -0
  147. connectonion/cli/co_ai/prompts/tools/shell.md +67 -0
  148. connectonion/cli/co_ai/prompts/tools/task.md +51 -0
  149. connectonion/cli/co_ai/prompts/tools/todo.md +139 -0
  150. connectonion/cli/co_ai/prompts/tools/write.md +47 -0
  151. connectonion/cli/co_ai/prompts/workflow.md +89 -0
  152. connectonion/cli/co_ai/reminders.py +159 -0
  153. connectonion/cli/co_ai/sessions.py +110 -0
  154. connectonion/cli/co_ai/skills/__init__.py +37 -0
  155. connectonion/cli/co_ai/skills/builtin/commit/SKILL.md +63 -0
  156. connectonion/cli/co_ai/skills/builtin/review-pr/SKILL.md +76 -0
  157. connectonion/cli/co_ai/skills/loader.py +166 -0
  158. connectonion/cli/co_ai/skills/tool.py +46 -0
  159. connectonion/cli/co_ai/tools/__init__.py +92 -0
  160. connectonion/cli/co_ai/tools/ask_user.py +35 -0
  161. connectonion/cli/co_ai/tools/background.py +201 -0
  162. connectonion/cli/co_ai/tools/diff_writer.py +291 -0
  163. connectonion/cli/co_ai/tools/edit.py +89 -0
  164. connectonion/cli/co_ai/tools/glob.py +84 -0
  165. connectonion/cli/co_ai/tools/grep.py +158 -0
  166. connectonion/cli/co_ai/tools/load_guide.py +23 -0
  167. connectonion/cli/co_ai/tools/multi_edit.py +116 -0
  168. connectonion/cli/co_ai/tools/plan_mode.py +172 -0
  169. connectonion/cli/co_ai/tools/read.py +67 -0
  170. connectonion/cli/co_ai/tools/task.py +59 -0
  171. connectonion/cli/co_ai/tools/todo_list.py +159 -0
  172. connectonion/cli/co_ai/tools/write.py +126 -0
  173. connectonion/cli/commands/__init__.py +11 -1
  174. connectonion/cli/commands/ai_commands.py +34 -0
  175. connectonion/cli/commands/copy_commands.py +55 -6
  176. connectonion/cli/commands/create.py +20 -17
  177. connectonion/cli/commands/init.py +19 -22
  178. connectonion/cli/commands/project_cmd_lib.py +15 -0
  179. connectonion/cli/main.py +11 -0
  180. connectonion/console.py +15 -1
  181. connectonion/core/__init__.py +10 -1
  182. connectonion/core/agent.py +37 -16
  183. connectonion/core/exceptions.py +74 -0
  184. connectonion/core/llm.py +54 -6
  185. connectonion/core/tool_executor.py +32 -31
  186. connectonion/core/tool_factory.py +47 -10
  187. connectonion/debug/__init__.py +10 -1
  188. connectonion/debug/debug_explainer/__init__.py +10 -1
  189. connectonion/debug/execution_analyzer/__init__.py +10 -1
  190. connectonion/debug/execution_analyzer/execution_analysis.py +5 -2
  191. connectonion/debug/runtime_inspector/__init__.py +10 -1
  192. connectonion/docs/.package-ignore +6 -0
  193. connectonion/docs/README.md +2036 -0
  194. connectonion/docs/api.md +457 -0
  195. connectonion/docs/archive/001-ai-agent-is-just-prompt-plus-function.md +249 -0
  196. connectonion/docs/archive/README.md +53 -0
  197. connectonion/docs/archive/archive/consolidation-plan.md +72 -0
  198. connectonion/docs/archive/archive/core-principles-extracted.md +239 -0
  199. connectonion/docs/archive/archive/master-principles.md +222 -0
  200. connectonion/docs/archive/archive/principles.md +293 -0
  201. connectonion/docs/archive/archive/simplicity-principles.md +221 -0
  202. connectonion/docs/archive/attack-defense-insights.md +410 -0
  203. connectonion/docs/archive/business-model.md +305 -0
  204. connectonion/docs/archive/core-principles-unified.md +190 -0
  205. connectonion/docs/archive/discussion-journey.md +178 -0
  206. connectonion/docs/archive/economic-analysis.md +323 -0
  207. connectonion/docs/archive/features/01-share-and-find.md +256 -0
  208. connectonion/docs/archive/features/02-agent-authentication.md +93 -0
  209. connectonion/docs/archive/features/03-test-before-trust.md +71 -0
  210. connectonion/docs/archive/features/06-reliability-and-offline.md +197 -0
  211. connectonion/docs/archive/features/README.md +46 -0
  212. connectonion/docs/archive/features-roadmap.md +247 -0
  213. connectonion/docs/archive/mcp-comparison-insights.md +215 -0
  214. connectonion/docs/archive/migration-strategy.md +571 -0
  215. connectonion/docs/archive/mini-whitepaper.md +293 -0
  216. connectonion/docs/archive/network-protocol.md +394 -0
  217. connectonion/docs/archive/semantic-revolution.md +367 -0
  218. connectonion/docs/archive/technical-architecture.md +453 -0
  219. connectonion/docs/archive/the-semantic-insight.md +207 -0
  220. connectonion/docs/archive/threat-model.md +164 -0
  221. connectonion/docs/cli/README.md +805 -0
  222. connectonion/docs/cli/auth.md +46 -0
  223. connectonion/docs/cli/browser.md +235 -0
  224. connectonion/docs/cli/copy.md +232 -0
  225. connectonion/docs/cli/create.md +335 -0
  226. connectonion/docs/cli/init.md +431 -0
  227. connectonion/docs/co-directory-structure.md +214 -0
  228. connectonion/docs/concepts/agent.md +1078 -0
  229. connectonion/docs/concepts/events.md +699 -0
  230. connectonion/docs/concepts/llm_do.md +256 -0
  231. connectonion/docs/concepts/max_iterations.md +362 -0
  232. connectonion/docs/concepts/models.md +641 -0
  233. connectonion/docs/concepts/plugins.md +100 -0
  234. connectonion/docs/concepts/prompts.md +122 -0
  235. connectonion/docs/concepts/session.md +428 -0
  236. connectonion/docs/concepts/tools.md +512 -0
  237. connectonion/docs/concepts/transcribe.md +156 -0
  238. connectonion/docs/concepts/trust.md +291 -0
  239. connectonion/docs/connectonion.md +1256 -0
  240. connectonion/docs/debug/README.md +18 -0
  241. connectonion/docs/debug/auto_debug.md +1026 -0
  242. connectonion/docs/debug/console.md +129 -0
  243. connectonion/docs/debug/eval-format.md +178 -0
  244. connectonion/docs/debug/eval.md +230 -0
  245. connectonion/docs/debug/exceptions.md +307 -0
  246. connectonion/docs/debug/log.md +117 -0
  247. connectonion/docs/debug/xray.md +215 -0
  248. connectonion/docs/design-decisions/001-choosing-input-method.md +202 -0
  249. connectonion/docs/design-decisions/002-choosing-llm-function-name.md +202 -0
  250. connectonion/docs/design-decisions/003-choosing-trust-keyword.md +141 -0
  251. connectonion/docs/design-decisions/004-cli-create-flow.md +117 -0
  252. connectonion/docs/design-decisions/005-designing-agent-network-protocol.md +503 -0
  253. connectonion/docs/design-decisions/006-agent-address-format.md +305 -0
  254. connectonion/docs/design-decisions/007-authentication-backend-design.md +240 -0
  255. connectonion/docs/design-decisions/008-naming-is-hard.md +228 -0
  256. connectonion/docs/design-decisions/009-why-connect-function.md +167 -0
  257. connectonion/docs/design-decisions/010-cli-ux-progressive-disclosure.md +176 -0
  258. connectonion/docs/design-decisions/011-global-config-identity-management.md +357 -0
  259. connectonion/docs/design-decisions/012-tool-execution-separation.md +259 -0
  260. connectonion/docs/design-decisions/013-debug-and-logging-design.md +253 -0
  261. connectonion/docs/design-decisions/014-hook-system-design.md +510 -0
  262. connectonion/docs/design-decisions/015-interactive-auto-debug-design.md +837 -0
  263. connectonion/docs/design-decisions/016-why-no-zero-knowledge-proofs.md +358 -0
  264. connectonion/docs/design-decisions/017-session-logging-and-eval-format.md +120 -0
  265. connectonion/docs/design-decisions/018-event-api-naming.md +274 -0
  266. connectonion/docs/design-decisions/019-agent-lifecycle-design.md +655 -0
  267. connectonion/docs/design-decisions/020-trust-system-and-network-architecture.md +503 -0
  268. connectonion/docs/design-decisions/021-task-storage-jsonl-design.md +496 -0
  269. connectonion/docs/design-decisions/022-raw-asgi-implementation.md +273 -0
  270. connectonion/docs/examples.md +0 -0
  271. connectonion/docs/hook-system-options.md +364 -0
  272. connectonion/docs/integrations/README.md +12 -0
  273. connectonion/docs/integrations/auth.md +450 -0
  274. connectonion/docs/integrations/google.md +431 -0
  275. connectonion/docs/integrations/microsoft.md +370 -0
  276. connectonion/docs/network/README.md +14 -0
  277. connectonion/docs/network/connect.md +629 -0
  278. connectonion/docs/network/deploy.md +124 -0
  279. connectonion/docs/network/host.md +1087 -0
  280. connectonion/docs/network/io.md +538 -0
  281. connectonion/docs/network/protocol/agent-relay-protocol.md +495 -0
  282. connectonion/docs/network/protocol/announce-message.md +115 -0
  283. connectonion/docs/principles.md +124 -0
  284. connectonion/docs/quickstart.md +261 -0
  285. connectonion/docs/roadmap.md +81 -0
  286. connectonion/docs/templates/README.md +77 -0
  287. connectonion/docs/templates/meta-agent.md +152 -0
  288. connectonion/docs/templates/minimal.md +105 -0
  289. connectonion/docs/templates/playwright.md +130 -0
  290. connectonion/docs/templates/web-research.md +144 -0
  291. connectonion/docs/tui/README.md +95 -0
  292. connectonion/docs/tui/chat.md +181 -0
  293. connectonion/docs/tui/divider.md +63 -0
  294. connectonion/docs/tui/dropdown.md +83 -0
  295. connectonion/docs/tui/footer.md +44 -0
  296. connectonion/docs/tui/fuzzy.md +68 -0
  297. connectonion/docs/tui/input.md +84 -0
  298. connectonion/docs/tui/keys.md +77 -0
  299. connectonion/docs/tui/pick.md +71 -0
  300. connectonion/docs/tui/providers.md +89 -0
  301. connectonion/docs/tui/status_bar.md +67 -0
  302. connectonion/docs/useful_plugins/README.md +160 -0
  303. connectonion/docs/useful_plugins/calendar_plugin.md +68 -0
  304. connectonion/docs/useful_plugins/eval.md +89 -0
  305. connectonion/docs/useful_plugins/gmail_plugin.md +68 -0
  306. connectonion/docs/useful_plugins/image_result_formatter.md +74 -0
  307. connectonion/docs/useful_plugins/re_act.md +86 -0
  308. connectonion/docs/useful_plugins/shell_approval.md +69 -0
  309. connectonion/docs/useful_plugins/system_reminder.md +210 -0
  310. connectonion/docs/useful_prompts/README.md +127 -0
  311. connectonion/docs/useful_prompts/coding_agent.md +214 -0
  312. connectonion/docs/useful_tools/README.md +81 -0
  313. connectonion/docs/useful_tools/ask_user.md +103 -0
  314. connectonion/docs/useful_tools/diff_writer.md +158 -0
  315. connectonion/docs/useful_tools/get_emails.md +519 -0
  316. connectonion/docs/useful_tools/gmail.md +155 -0
  317. connectonion/docs/useful_tools/google_calendar.md +126 -0
  318. connectonion/docs/useful_tools/memory.md +506 -0
  319. connectonion/docs/useful_tools/microsoft_calendar.md +126 -0
  320. connectonion/docs/useful_tools/outlook.md +140 -0
  321. connectonion/docs/useful_tools/send_email.md +423 -0
  322. connectonion/docs/useful_tools/shell.md +115 -0
  323. connectonion/docs/useful_tools/slash_command.md +116 -0
  324. connectonion/docs/useful_tools/terminal.md +115 -0
  325. connectonion/docs/useful_tools/todo_list.md +272 -0
  326. connectonion/docs/useful_tools/web_fetch.md +150 -0
  327. connectonion/docs/vibe-coding-guide.md +97 -0
  328. connectonion/docs/windows-support.md +258 -0
  329. connectonion/logger.py +3 -3
  330. connectonion/network/__init__.py +19 -6
  331. connectonion/network/asgi/__init__.py +81 -0
  332. connectonion/network/asgi/http.py +205 -0
  333. connectonion/network/asgi/websocket.py +217 -0
  334. connectonion/network/connect.py +232 -185
  335. connectonion/network/host/__init__.py +59 -0
  336. connectonion/network/host/auth.py +191 -0
  337. connectonion/network/host/routes.py +135 -0
  338. connectonion/network/host/server.py +289 -0
  339. connectonion/network/host/session.py +78 -0
  340. connectonion/network/io/__init__.py +21 -0
  341. connectonion/network/{connection.py → io/base.py} +17 -42
  342. connectonion/network/io/websocket.py +55 -0
  343. connectonion/network/relay.py +37 -16
  344. connectonion/network/trust/__init__.py +30 -0
  345. connectonion/network/trust/factory.py +138 -0
  346. connectonion/network/{trust_agents.py → trust/prompts.py} +3 -3
  347. connectonion/network/{trust_functions.py → trust/tools.py} +2 -2
  348. connectonion/prompt_files/__init__.py +11 -1
  349. connectonion/prompt_files/react_acknowledge.md +26 -0
  350. connectonion/prompts.py +10 -1
  351. connectonion/tui/chat.py +10 -1
  352. connectonion/tui/divider.py +10 -1
  353. connectonion/tui/dropdown.py +10 -1
  354. connectonion/tui/footer.py +8 -0
  355. connectonion/tui/fuzzy.py +11 -1
  356. connectonion/tui/input.py +118 -70
  357. connectonion/tui/keys.py +133 -6
  358. connectonion/tui/providers.py +11 -1
  359. connectonion/tui/status_bar.py +10 -1
  360. connectonion/useful_events_handlers/__init__.py +8 -0
  361. connectonion/useful_events_handlers/reflect.py +19 -4
  362. connectonion/useful_plugins/__init__.py +2 -1
  363. connectonion/useful_plugins/eval.py +2 -2
  364. connectonion/useful_plugins/gmail_plugin.py +3 -3
  365. connectonion/useful_plugins/image_result_formatter.py +3 -3
  366. connectonion/useful_plugins/re_act.py +114 -28
  367. connectonion/useful_plugins/shell_approval.py +2 -2
  368. connectonion/useful_plugins/system_reminder.py +103 -0
  369. connectonion/useful_plugins/ui_stream.py +18 -133
  370. connectonion/useful_prompts/README.md +61 -0
  371. connectonion/useful_prompts/__init__.py +45 -0
  372. connectonion/useful_prompts/coding_agent/README.md +106 -0
  373. connectonion/useful_prompts/coding_agent/assembler.py +123 -0
  374. connectonion/useful_prompts/coding_agent/prompts/main.md +227 -0
  375. connectonion/useful_prompts/coding_agent/prompts/tools/ask_user.md +61 -0
  376. connectonion/useful_prompts/coding_agent/prompts/tools/background.md +57 -0
  377. connectonion/useful_prompts/coding_agent/prompts/tools/edit.md +90 -0
  378. connectonion/useful_prompts/coding_agent/prompts/tools/glob.md +52 -0
  379. connectonion/useful_prompts/coding_agent/prompts/tools/grep.md +55 -0
  380. connectonion/useful_prompts/coding_agent/prompts/tools/plan_mode.md +80 -0
  381. connectonion/useful_prompts/coding_agent/prompts/tools/read.md +40 -0
  382. connectonion/useful_prompts/coding_agent/prompts/tools/shell.md +67 -0
  383. connectonion/useful_prompts/coding_agent/prompts/tools/task.md +51 -0
  384. connectonion/useful_prompts/coding_agent/prompts/tools/todo.md +139 -0
  385. connectonion/useful_prompts/coding_agent/prompts/tools/write.md +48 -0
  386. connectonion/useful_prompts/system-reminders/security-warning.md +14 -0
  387. connectonion/useful_prompts/system-reminders/test-reminder.md +11 -0
  388. connectonion/useful_tools/__init__.py +31 -4
  389. connectonion/useful_tools/ask_user.py +35 -0
  390. connectonion/useful_tools/bash.py +69 -0
  391. connectonion/useful_tools/diff_writer.py +186 -94
  392. connectonion/useful_tools/edit.py +102 -0
  393. connectonion/useful_tools/glob_files.py +97 -0
  394. connectonion/useful_tools/grep_files.py +171 -0
  395. connectonion/useful_tools/multi_edit.py +116 -0
  396. connectonion/useful_tools/read_file.py +73 -0
  397. connectonion/useful_tools/shell.py +50 -45
  398. connectonion/useful_tools/write_file.py +129 -0
  399. {connectonion-0.6.2.dist-info → connectonion-0.6.3.dist-info}/METADATA +10 -3
  400. connectonion-0.6.3.dist-info/RECORD +469 -0
  401. connectonion/network/asgi.py +0 -407
  402. connectonion/network/host.py +0 -616
  403. connectonion/network/trust.py +0 -166
  404. connectonion-0.6.2.dist-info/RECORD +0 -129
  405. /connectonion/cli/{docs → co_ai/prompts/connectonion}/connectonion.md +0 -0
  406. {connectonion-0.6.2.dist-info → connectonion-0.6.3.dist-info}/WHEEL +0 -0
  407. {connectonion-0.6.2.dist-info → connectonion-0.6.3.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,538 @@
1
+ # IO
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.io:
15
+ agent.io.log("thinking")
16
+
17
+ @before_each_tool
18
+ def on_tool(agent):
19
+ if agent.io:
20
+ tool = agent.current_session['pending_tool']
21
+ agent.io.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 an `io`:
34
+
35
+ ```
36
+ Local execution: agent.io = None
37
+ Hosted execution: agent.io = IO to client
38
+ ```
39
+
40
+ Same events. Same code. Just check `if agent.io:`.
41
+
42
+ ---
43
+
44
+ ## Two-Layer API
45
+
46
+ ```
47
+ ┌─────────────────────────────────────────────────────────────┐
48
+ │ HIGH-LEVEL API (2 methods) │
49
+ │ ────────────────────────── │
50
+ │ io.log(type, **data) → one-way notify │
51
+ │ io.request_approval(tool, args) → bool (two-way) │
52
+ ├─────────────────────────────────────────────────────────────┤
53
+ │ LOW-LEVEL API (2 methods) │
54
+ │ ───────────────────────── │
55
+ │ io.send(event) → send any event │
56
+ │ io.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 IO Interface
66
+
67
+ ```python
68
+ class IO:
69
+ """IO 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.io = None ← Always None locally │
110
+ │ agent.input("hello") │
111
+ │ → Events fire │
112
+ │ → Handlers check: if agent.io: (skip) │
113
+ │ │
114
+ │ HOSTED EXECUTION │
115
+ │ ──────────────── │
116
+ │ host(agent) │
117
+ │ │ │
118
+ │ ├─→ Client connects (WebSocket) │
119
+ │ │ │
120
+ │ ├─→ agent = copy.deepcopy(agent_template) │
121
+ │ │ │
122
+ │ ├─→ agent.io = IO(ws) ← Injected │
123
+ │ │ │
124
+ │ ├─→ agent.input(prompt) │
125
+ │ │ → Events fire │
126
+ │ │ → if agent.io: ✓ │
127
+ │ │ → agent.io.log("thinking") │
128
+ │ │ │
129
+ │ └─→ Request completes, io 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.io:
146
+ agent.io.log("thinking")
147
+
148
+ @after_each_tool
149
+ def on_result(agent):
150
+ if agent.io:
151
+ trace = agent.current_session['trace'][-1]
152
+ agent.io.log("tool_result", name=trace['tool_name'], result=trace['result'])
153
+
154
+ @on_complete
155
+ def on_done(agent):
156
+ if agent.io:
157
+ agent.io.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.io:
176
+ return
177
+
178
+ tool = agent.current_session['pending_tool']
179
+
180
+ # Notify tool is starting
181
+ agent.io.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.io.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.io:
202
+ # Custom event type
203
+ agent.io.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.io:
212
+ return
213
+
214
+ tool = agent.current_session['pending_tool']
215
+
216
+ # Ask user to choose
217
+ agent.io.send({
218
+ "type": "choice",
219
+ "question": "Which method?",
220
+ "options": ["fast", "thorough"]
221
+ })
222
+ response = agent.io.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.io:
402
+ agent.io.log("thinking")
403
+
404
+ @before_each_tool
405
+ def on_tool_start(agent):
406
+ if not agent.io:
407
+ return
408
+
409
+ tool = agent.current_session['pending_tool']
410
+ agent.io.log("tool_call", name=tool['name'], arguments=tool['arguments'])
411
+
412
+ if tool['name'] in DANGEROUS_TOOLS:
413
+ if not agent.io.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.io:
419
+ trace = agent.current_session['trace'][-1]
420
+ agent.io.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.io:
430
+ agent.io.log("complete", result=agent.current_session['result'])
431
+
432
+ @on_error
433
+ def on_fail(agent):
434
+ if agent.io:
435
+ trace = agent.current_session['trace'][-1]
436
+ agent.io.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.io:
461
+ agent.io.log("thinking")
462
+
463
+ # Local - io is None, skips log
464
+ agent = Agent("helper", on_events=[my_handler])
465
+ agent.input("hello")
466
+
467
+ # Hosted - io exists, sends to client
468
+ host(agent)
469
+ ```
470
+
471
+ ---
472
+
473
+ ## Custom Adapters
474
+
475
+ Implement your own IO for custom transports:
476
+
477
+ ```python
478
+ from connectonion.network import IO
479
+
480
+ class SlackIO(IO):
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.io = SlackIO(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.io:
517
+ # One-way notifications
518
+ agent.io.log("thinking")
519
+ agent.io.log("tool_call", name="search", arguments={"q": "python"})
520
+
521
+ # Two-way permission request
522
+ if not agent.io.request_approval("delete", {"path": "/tmp/x"}):
523
+ raise ToolRejected()
524
+
525
+ # Custom events (low-level)
526
+ agent.io.send({"type": "custom", "data": {...}})
527
+ response = agent.io.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
+