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,519 @@
1
+ # Get Emails
2
+
3
+ > Check your inbox with one line. Process emails safely. Keep it simple.
4
+
5
+ ## Usage
6
+
7
+ **Option 1: Import directly**
8
+
9
+ ```python
10
+ from connectonion import get_emails, mark_read
11
+
12
+ agent = Agent("assistant", tools=[get_emails, mark_read])
13
+ ```
14
+
15
+ **Option 2: Copy and customize**
16
+
17
+ ```bash
18
+ co copy get_emails
19
+ ```
20
+
21
+ ```python
22
+ from tools.get_emails import get_emails, mark_read # Your local copy
23
+ ```
24
+
25
+ ---
26
+
27
+ ## Quick Start (10 seconds)
28
+
29
+ ```python
30
+ from connectonion import get_emails, send_email, mark_read
31
+
32
+ # Get your emails
33
+ emails = get_emails()
34
+ ```
35
+
36
+ **That's it.** You have your emails.
37
+
38
+ ---
39
+
40
+ ## Core Concept
41
+
42
+ Three functions. That's all:
43
+
44
+ ```python
45
+ get_emails(last=10, unread=False) # Get emails
46
+ send_email(to, subject, message) # Send email (already done)
47
+ mark_read(email_id) # Mark as read after processing
48
+ ```
49
+
50
+ **Important**: Emails are NOT auto-marked as read. You control when to mark them.
51
+
52
+ ---
53
+
54
+ ## Common Patterns
55
+
56
+ ### Check for new emails
57
+
58
+ ```python
59
+ from connectonion import get_emails, mark_read
60
+
61
+ # Get unread emails
62
+ new_emails = get_emails(unread=True)
63
+
64
+ for email in new_emails:
65
+ print(f"New from {email['from']}: {email['subject']}")
66
+
67
+ # Process the email
68
+ if process_email(email):
69
+ mark_read(email['id']) # Only mark if processed successfully
70
+ ```
71
+
72
+ ### Get latest email
73
+
74
+ ```python
75
+ # Get just the most recent email
76
+ emails = get_emails(last=1)
77
+ if emails:
78
+ latest = emails[0]
79
+ print(f"Latest: {latest['subject']}")
80
+ ```
81
+
82
+ ### Reply to emails
83
+
84
+ ```python
85
+ # Check and reply pattern
86
+ for email in get_emails(unread=True):
87
+ if "urgent" in email["subject"].lower():
88
+ # Send reply
89
+ send_email(
90
+ email["from"],
91
+ f"Re: {email['subject']}",
92
+ "I'm on it!"
93
+ )
94
+ # Mark as handled
95
+ mark_read(email['id'])
96
+ ```
97
+
98
+ ---
99
+
100
+ ## Complete Email Agent Example
101
+
102
+ Here's a full-featured email assistant agent that can manage your inbox:
103
+
104
+ ```python
105
+ from connectonion import Agent, get_emails, send_email, mark_read
106
+ from typing import List, Dict
107
+ import json
108
+
109
+ class EmailManager:
110
+ """Stateful email management with tracking."""
111
+
112
+ def __init__(self):
113
+ self.processed_count = 0
114
+ self.auto_replies_sent = 0
115
+
116
+ def check_inbox(self, show_all: bool = False) -> str:
117
+ """Check inbox and summarize emails."""
118
+ emails = get_emails(unread=not show_all)
119
+
120
+ if not emails:
121
+ return "📭 No new emails"
122
+
123
+ summary = f"📬 You have {len(emails)} {'emails' if show_all else 'unread emails'}:\n\n"
124
+
125
+ for i, email in enumerate(emails, 1):
126
+ status = "✓" if email['read'] else "•"
127
+ summary += f"{status} [{i}] From: {email['from']}\n"
128
+ summary += f" Subject: {email['subject']}\n"
129
+ summary += f" Preview: {email['message'][:50]}...\n\n"
130
+
131
+ return summary
132
+
133
+ def reply_to_email(self, email_index: int, message: str) -> str:
134
+ """Reply to a specific email by index."""
135
+ emails = get_emails()
136
+
137
+ if email_index < 1 or email_index > len(emails):
138
+ return f"❌ Invalid email index. You have {len(emails)} emails."
139
+
140
+ email = emails[email_index - 1]
141
+
142
+ # Send the reply
143
+ send_email(
144
+ email['from'],
145
+ f"Re: {email['subject']}",
146
+ message
147
+ )
148
+
149
+ # Mark original as read
150
+ mark_read(email['id'])
151
+ self.processed_count += 1
152
+
153
+ return f"✅ Replied to {email['from']} and marked as read"
154
+
155
+ def auto_respond(self, keywords: List[str] = None) -> str:
156
+ """Auto-respond to emails matching keywords."""
157
+ if keywords is None:
158
+ keywords = ["urgent", "asap", "important"]
159
+
160
+ emails = get_emails(unread=True)
161
+ responded = []
162
+
163
+ for email in emails:
164
+ # Check if any keyword matches
165
+ if any(kw.lower() in email['subject'].lower() or
166
+ kw.lower() in email['message'].lower()
167
+ for kw in keywords):
168
+
169
+ # Send auto-response
170
+ send_email(
171
+ email['from'],
172
+ f"Auto-Reply: {email['subject']}",
173
+ f"Thank you for your message marked as important. "
174
+ f"I've received it and will respond within 24 hours.\n\n"
175
+ f"Original message received: {email['timestamp']}"
176
+ )
177
+
178
+ mark_read(email['id'])
179
+ responded.append(email['from'])
180
+ self.auto_replies_sent += 1
181
+
182
+ if responded:
183
+ return f"🤖 Auto-responded to {len(responded)} emails from: {', '.join(responded)}"
184
+ return "No emails matched auto-response criteria"
185
+
186
+ def process_support_tickets(self) -> str:
187
+ """Process support emails and create tickets."""
188
+ support_emails = []
189
+
190
+ for email in get_emails(unread=True):
191
+ if any(word in email['subject'].lower()
192
+ for word in ['support', 'help', 'issue', 'problem', 'bug']):
193
+
194
+ support_emails.append(email)
195
+
196
+ # Acknowledge receipt
197
+ ticket_id = f"TICKET-{len(support_emails):04d}"
198
+
199
+ send_email(
200
+ email['from'],
201
+ f"Support Ticket Created: {ticket_id}",
202
+ f"Thank you for contacting support.\n\n"
203
+ f"Your ticket {ticket_id} has been created.\n"
204
+ f"Subject: {email['subject']}\n\n"
205
+ f"We'll respond within 24 hours."
206
+ )
207
+
208
+ mark_read(email['id'])
209
+ self.processed_count += 1
210
+
211
+ if support_emails:
212
+ return f"🎫 Created {len(support_emails)} support tickets"
213
+ return "No support emails found"
214
+
215
+ def archive_old_emails(self, days: int = 30) -> str:
216
+ """Mark old emails as read to clean up inbox."""
217
+ # For demo, we'll just mark all read emails
218
+ emails = get_emails(last=50)
219
+ old_count = 0
220
+
221
+ for email in emails:
222
+ if email['read']:
223
+ continue
224
+ # In real implementation, check timestamp
225
+ # For now, just demonstrate the pattern
226
+ mark_read(email['id'])
227
+ old_count += 1
228
+
229
+ return f"📦 Archived {old_count} old emails"
230
+
231
+ def get_statistics(self) -> str:
232
+ """Get email processing statistics."""
233
+ total = len(get_emails())
234
+ unread = len(get_emails(unread=True))
235
+
236
+ return (
237
+ f"📊 Email Statistics:\n"
238
+ f"• Total emails: {total}\n"
239
+ f"• Unread: {unread}\n"
240
+ f"• Processed this session: {self.processed_count}\n"
241
+ f"• Auto-replies sent: {self.auto_replies_sent}"
242
+ )
243
+
244
+
245
+ # Create the email agent
246
+ email_manager = EmailManager()
247
+
248
+ email_agent = Agent(
249
+ name="email_assistant",
250
+ tools=[
251
+ email_manager, # Pass the whole class instance!
252
+ get_emails, # Also available as standalone
253
+ send_email, # For custom operations
254
+ mark_read # For manual marking
255
+ ],
256
+ system_prompt="""You are a professional email assistant.
257
+
258
+ Your capabilities:
259
+ - Check and summarize inbox
260
+ - Reply to emails
261
+ - Auto-respond to urgent messages
262
+ - Process support tickets
263
+ - Provide email statistics
264
+
265
+ Guidelines:
266
+ 1. Always confirm before sending emails
267
+ 2. Be professional and courteous
268
+ 3. Prioritize urgent/important emails
269
+ 4. Keep responses concise
270
+ 5. Track what you've processed
271
+
272
+ When checking emails, start with check_inbox() to see what's available.
273
+ """
274
+ )
275
+
276
+ # Example usage
277
+ if __name__ == "__main__":
278
+ # Interactive email management
279
+ while True:
280
+ task = input("\n💌 What would you like to do with your emails? ")
281
+ if task.lower() in ['quit', 'exit']:
282
+ break
283
+
284
+ result = email_agent.input(task)
285
+ print(result)
286
+ ```
287
+
288
+ ---
289
+
290
+ ## Using the Email Agent
291
+
292
+ ### Example Conversations
293
+
294
+ ```python
295
+ # Check inbox
296
+ >>> email_agent.input("Check my inbox")
297
+ """
298
+ I'll check your inbox for you.
299
+
300
+ 📬 You have 3 unread emails:
301
+
302
+ • [1] From: alice@example.com
303
+ Subject: Project Update
304
+ Preview: The new features are ready for review. Can we...
305
+
306
+ • [2] From: support@service.com
307
+ Subject: Issue with login
308
+ Preview: I'm having trouble accessing my account...
309
+
310
+ • [3] From: boss@company.com
311
+ Subject: Urgent: Meeting Tomorrow
312
+ Preview: We need to discuss the Q4 planning...
313
+
314
+ You have 2 urgent/important emails that may need immediate attention.
315
+ """
316
+
317
+ # Reply to specific email
318
+ >>> email_agent.input("Reply to email 3 saying I'll be there")
319
+ """
320
+ I'll reply to email #3 from boss@company.com about the urgent meeting.
321
+
322
+ ✅ Replied to boss@company.com and marked as read
323
+ The reply "I'll be there" has been sent with subject "Re: Urgent: Meeting Tomorrow"
324
+ """
325
+
326
+ # Auto-respond to urgent emails
327
+ >>> email_agent.input("Auto-respond to all urgent emails")
328
+ """
329
+ I'll set up auto-responses for urgent emails.
330
+
331
+ 🤖 Auto-responded to 2 emails from: alice@example.com, boss@company.com
332
+
333
+ Auto-responses have been sent to emails marked as urgent or important,
334
+ letting senders know you've received their message and will respond within 24 hours.
335
+ """
336
+
337
+ # Process support requests
338
+ >>> email_agent.input("Handle any support tickets")
339
+ """
340
+ I'll process support emails and create tickets.
341
+
342
+ 🎫 Created 1 support ticket
343
+
344
+ Support ticket TICKET-0001 has been created for the email from support@service.com
345
+ about "Issue with login". An acknowledgment has been sent to the customer.
346
+ """
347
+
348
+ # Get statistics
349
+ >>> email_agent.input("Show me email statistics")
350
+ """
351
+ Here are your email statistics:
352
+
353
+ 📊 Email Statistics:
354
+ • Total emails: 25
355
+ • Unread: 12
356
+ • Processed this session: 4
357
+ • Auto-replies sent: 2
358
+
359
+ You've handled 4 emails so far, with 12 still unread in your inbox.
360
+ """
361
+ ```
362
+
363
+ ---
364
+
365
+ ## API Reference
366
+
367
+ ### get_emails()
368
+
369
+ ```python
370
+ get_emails(last=10, unread=False) -> list
371
+ ```
372
+
373
+ **Parameters:**
374
+ - `last` (int): Number of emails to retrieve. Default: 10
375
+ - `unread` (bool): Only get unread emails. Default: False
376
+
377
+ **Returns:**
378
+ List of email dictionaries:
379
+ ```python
380
+ [
381
+ {
382
+ 'id': 'msg_123',
383
+ 'from': 'alice@example.com',
384
+ 'subject': 'Project Update',
385
+ 'message': 'The new feature is ready...',
386
+ 'timestamp': '2024-01-15T10:30:00Z',
387
+ 'read': False
388
+ }
389
+ ]
390
+ ```
391
+
392
+ ### mark_read()
393
+
394
+ ```python
395
+ mark_read(email_id) -> bool
396
+ ```
397
+
398
+ **Parameters:**
399
+ - `email_id` (str or list): Single ID or list of IDs to mark as read
400
+
401
+ **Returns:**
402
+ - `True` if successful
403
+ - `False` if failed
404
+
405
+ ---
406
+
407
+ ## Simple Standalone Examples
408
+
409
+ ### Out-of-Office Responder
410
+
411
+ ```python
412
+ from connectonion import get_emails, send_email, mark_read
413
+ import time
414
+
415
+ def out_of_office():
416
+ """Simple out-of-office responder."""
417
+ message = """
418
+ Thank you for your email.
419
+
420
+ I am currently out of office and will return on Monday.
421
+ For urgent matters, please contact support@company.com.
422
+
423
+ Best regards
424
+ """
425
+
426
+ while True:
427
+ for email in get_emails(unread=True):
428
+ # Skip if already replied (has Re: in subject)
429
+ if not email['subject'].startswith('Re:'):
430
+ send_email(
431
+ email['from'],
432
+ f"Out of Office: Re: {email['subject']}",
433
+ message
434
+ )
435
+ mark_read(email['id'])
436
+ print(f"Auto-replied to {email['from']}")
437
+
438
+ time.sleep(300) # Check every 5 minutes
439
+
440
+ # Run the responder
441
+ out_of_office()
442
+ ```
443
+
444
+ ### Daily Digest
445
+
446
+ ```python
447
+ from connectonion import get_emails, send_email
448
+ from datetime import datetime
449
+
450
+ def create_daily_digest():
451
+ """Create a daily email digest."""
452
+ emails = get_emails(last=50)
453
+
454
+ # Group by sender
455
+ by_sender = {}
456
+ for email in emails:
457
+ sender = email['from']
458
+ if sender not in by_sender:
459
+ by_sender[sender] = []
460
+ by_sender[sender].append(email['subject'])
461
+
462
+ # Create digest
463
+ digest = f"📧 Daily Email Digest - {datetime.now().strftime('%Y-%m-%d')}\n\n"
464
+ digest += f"Total emails: {len(emails)}\n"
465
+ digest += f"Unique senders: {len(by_sender)}\n\n"
466
+
467
+ for sender, subjects in by_sender.items():
468
+ digest += f"From {sender} ({len(subjects)} emails):\n"
469
+ for subject in subjects[:3]: # Show first 3
470
+ digest += f" • {subject}\n"
471
+ if len(subjects) > 3:
472
+ digest += f" ... and {len(subjects)-3} more\n"
473
+ digest += "\n"
474
+
475
+ # Send digest to yourself
476
+ send_email(
477
+ "me@example.com",
478
+ "Daily Email Digest",
479
+ digest
480
+ )
481
+
482
+ return "Digest sent!"
483
+
484
+ # Create and send digest
485
+ create_daily_digest()
486
+ ```
487
+
488
+ ---
489
+
490
+ ## Why No Auto-Mark?
491
+
492
+ **The Problem with auto-marking:**
493
+ ```python
494
+ # BAD: Auto-mark on fetch
495
+ emails = get_emails(unread=True) # Server marks as read 😱
496
+ process_emails(emails) # Crashes! 💥
497
+ # Emails lost forever - marked read but not processed!
498
+ ```
499
+
500
+ **Our Safe Approach:**
501
+ ```python
502
+ # GOOD: Explicit marking
503
+ emails = get_emails(unread=True) # Stays unread
504
+ process_emails(emails) # Process them
505
+ mark_read([e['id'] for e in emails]) # Mark only after success ✅
506
+ ```
507
+
508
+ ---
509
+
510
+ ## Philosophy
511
+
512
+ **Three functions for everything email:**
513
+ - `get_emails()` - Read emails
514
+ - `send_email()` - Send emails
515
+ - `mark_read()` - Mark as processed
516
+
517
+ No complexity. No confusion. Just email.
518
+
519
+ Keep simple things simple.
@@ -0,0 +1,155 @@
1
+ # Gmail
2
+
3
+ Give your agents Gmail access.
4
+
5
+ ## Usage
6
+
7
+ **Option 1: Import directly**
8
+
9
+ ```python
10
+ from connectonion import Gmail
11
+
12
+ agent = Agent("assistant", tools=[Gmail()])
13
+ ```
14
+
15
+ **Option 2: Copy and customize**
16
+
17
+ ```bash
18
+ co copy gmail
19
+ ```
20
+
21
+ ```python
22
+ from tools.gmail import Gmail # Your local copy
23
+ ```
24
+
25
+ ## Quick Start
26
+
27
+ ```python
28
+ from connectonion import Agent, Gmail
29
+
30
+ gmail = Gmail()
31
+ agent = Agent("assistant", tools=[gmail])
32
+
33
+ agent.input("Show me my recent emails")
34
+ agent.input("Find emails from alice@example.com")
35
+ ```
36
+
37
+ ## Setup
38
+
39
+ ```bash
40
+ co auth google
41
+ ```
42
+
43
+ Your agent can now read and manage Gmail.
44
+
45
+ **Switch accounts?** Run `co auth google` again to connect a different Google account.
46
+
47
+ ## Agent Methods
48
+
49
+ ### Reading
50
+
51
+ **`read_inbox(last=10, unread=False)`**
52
+ - Read emails from inbox
53
+ - `last`: Number of emails (default: 10)
54
+ - `unread`: Only unread emails (default: False)
55
+
56
+ **`get_sent_emails(max_results=10)`**
57
+ - Get emails you sent
58
+
59
+ **`get_all_emails(max_results=50)`**
60
+ - Get emails from all folders (inbox, sent, archive)
61
+
62
+ ### Search
63
+
64
+ **`search_emails(query, max_results=10)`**
65
+ - Search using Gmail query syntax
66
+ - Examples: `"from:alice@example.com"`, `"subject:meeting"`, `"is:unread has:attachment"`
67
+
68
+ ### Content
69
+
70
+ **`get_email_body(email_id)`**
71
+ - Get full email content
72
+
73
+ **`get_email_attachments(email_id)`**
74
+ - List attachments (filename, size)
75
+
76
+ ### Actions
77
+
78
+ **`mark_read(email_id)`**
79
+ - Mark email as read
80
+
81
+ **`mark_unread(email_id)`**
82
+ - Mark email as unread
83
+
84
+ **`archive_email(email_id)`**
85
+ - Archive email (remove from inbox)
86
+
87
+ **`star_email(email_id)`**
88
+ - Add star to email
89
+
90
+ ### Labels
91
+
92
+ **`get_labels()`**
93
+ - List all Gmail labels
94
+
95
+ **`add_label(email_id, label)`**
96
+ - Add label to email
97
+
98
+ **`get_emails_with_label(label, max_results=10)`**
99
+ - Get emails with specific label
100
+
101
+ ### Stats
102
+
103
+ **`count_unread()`**
104
+ - Count unread emails
105
+
106
+ ### CRM
107
+
108
+ **`get_all_contacts(max_emails=500)`**
109
+ - Extract all unique contacts from emails
110
+ - Fast regex-based extraction
111
+ - Returns list of contacts with email and name
112
+
113
+ **`analyze_contact(email, max_emails=50)`**
114
+ - Analyze specific contact using LLM
115
+ - Provides relationship context, topics, patterns, tags
116
+ - Example: `gmail.analyze_contact("alice@example.com")`
117
+
118
+ ## Example
119
+
120
+ ```python
121
+ from connectonion import Agent, Gmail, Memory
122
+
123
+ gmail = Gmail()
124
+ memory = Memory()
125
+
126
+ agent = Agent(
127
+ name="email-assistant",
128
+ tools=[gmail, memory],
129
+ system_prompt="You help manage emails and remember important info."
130
+ )
131
+
132
+ agent.input("Check unread emails and save important deadlines to memory")
133
+ agent.input("Archive all newsletter emails from this week")
134
+ ```
135
+
136
+ ## Customizing
137
+
138
+ Need to modify Gmail's behavior? Copy the source to your project:
139
+
140
+ ```bash
141
+ co copy gmail
142
+ ```
143
+
144
+ Then import from your local copy:
145
+
146
+ ```python
147
+ # from connectonion import Gmail # Before
148
+ from tools.gmail import Gmail # After - customize freely!
149
+ ```
150
+
151
+ ## Troubleshooting
152
+
153
+ **Missing gmail.readonly scope**: Run `co auth google`
154
+
155
+ **Credentials not found**: Run `co auth google`