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.
- connectonion/__init__.py +46 -9
- connectonion/cli/__init__.py +11 -1
- connectonion/cli/browser_agent/__init__.py +11 -1
- connectonion/cli/browser_agent/browser.py +13 -3
- connectonion/cli/browser_agent/element_finder.py +8 -0
- connectonion/cli/browser_agent/highlight_screenshot.py +9 -1
- connectonion/cli/browser_agent/scroll.py +8 -0
- connectonion/cli/co_ai/__init__.py +6 -0
- connectonion/cli/co_ai/agent.py +87 -0
- connectonion/cli/co_ai/agents/__init__.py +5 -0
- connectonion/cli/co_ai/agents/registry.py +57 -0
- connectonion/cli/co_ai/commands/__init__.py +45 -0
- connectonion/cli/co_ai/commands/compact.py +173 -0
- connectonion/cli/co_ai/commands/cost.py +77 -0
- connectonion/cli/co_ai/commands/export.py +60 -0
- connectonion/cli/co_ai/commands/help.py +80 -0
- connectonion/cli/co_ai/commands/init.py +101 -0
- connectonion/cli/co_ai/commands/sessions.py +55 -0
- connectonion/cli/co_ai/commands/tasks.py +63 -0
- connectonion/cli/co_ai/commands/undo.py +103 -0
- connectonion/cli/co_ai/context.py +127 -0
- connectonion/cli/co_ai/main.py +52 -0
- connectonion/cli/co_ai/plugins/__init__.py +5 -0
- connectonion/cli/co_ai/plugins/system_reminder.py +154 -0
- connectonion/cli/co_ai/prompts/agents/explore.md +79 -0
- connectonion/cli/co_ai/prompts/agents/plan.md +60 -0
- connectonion/cli/co_ai/prompts/assembler.py +303 -0
- connectonion/cli/{docs/co-vibecoding-principles-docs-contexts-all-in-one.md → co_ai/prompts/connectonion/README.md} +26 -0
- connectonion/cli/co_ai/prompts/connectonion/api.md +457 -0
- connectonion/cli/co_ai/prompts/connectonion/cli/README.md +805 -0
- connectonion/cli/co_ai/prompts/connectonion/cli/auth.md +46 -0
- connectonion/cli/co_ai/prompts/connectonion/cli/browser.md +235 -0
- connectonion/cli/co_ai/prompts/connectonion/cli/copy.md +184 -0
- connectonion/cli/co_ai/prompts/connectonion/cli/create.md +335 -0
- connectonion/cli/co_ai/prompts/connectonion/cli/init.md +431 -0
- connectonion/cli/co_ai/prompts/connectonion/co-directory-structure.md +214 -0
- connectonion/cli/co_ai/prompts/connectonion/concepts/agent.md +1078 -0
- connectonion/cli/co_ai/prompts/connectonion/concepts/events.md +816 -0
- connectonion/cli/co_ai/prompts/connectonion/concepts/llm_do.md +256 -0
- connectonion/cli/co_ai/prompts/connectonion/concepts/max_iterations.md +362 -0
- connectonion/cli/co_ai/prompts/connectonion/concepts/models.md +641 -0
- connectonion/cli/co_ai/prompts/connectonion/concepts/plugins.md +100 -0
- connectonion/cli/co_ai/prompts/connectonion/concepts/prompts.md +122 -0
- connectonion/cli/co_ai/prompts/connectonion/concepts/tools.md +512 -0
- connectonion/cli/co_ai/prompts/connectonion/concepts/transcribe.md +156 -0
- connectonion/cli/co_ai/prompts/connectonion/concepts/trust.md +291 -0
- connectonion/cli/co_ai/prompts/connectonion/debug/README.md +18 -0
- connectonion/cli/co_ai/prompts/connectonion/debug/auto_debug.md +1026 -0
- connectonion/cli/co_ai/prompts/connectonion/debug/console.md +129 -0
- connectonion/cli/co_ai/prompts/connectonion/debug/eval-format.md +178 -0
- connectonion/cli/co_ai/prompts/connectonion/debug/eval.md +230 -0
- connectonion/cli/co_ai/prompts/connectonion/debug/exceptions.md +307 -0
- connectonion/cli/co_ai/prompts/connectonion/debug/log.md +117 -0
- connectonion/cli/co_ai/prompts/connectonion/debug/xray.md +215 -0
- connectonion/cli/co_ai/prompts/connectonion/design-decisions/001-choosing-input-method.md +202 -0
- connectonion/cli/co_ai/prompts/connectonion/design-decisions/002-choosing-llm-function-name.md +202 -0
- connectonion/cli/co_ai/prompts/connectonion/design-decisions/003-choosing-trust-keyword.md +141 -0
- connectonion/cli/co_ai/prompts/connectonion/design-decisions/004-cli-create-flow.md +117 -0
- connectonion/cli/co_ai/prompts/connectonion/design-decisions/005-designing-agent-network-protocol.md +503 -0
- connectonion/cli/co_ai/prompts/connectonion/design-decisions/006-agent-address-format.md +305 -0
- connectonion/cli/co_ai/prompts/connectonion/design-decisions/007-authentication-backend-design.md +240 -0
- connectonion/cli/co_ai/prompts/connectonion/design-decisions/008-naming-is-hard.md +228 -0
- connectonion/cli/co_ai/prompts/connectonion/design-decisions/009-why-connect-function.md +167 -0
- connectonion/cli/co_ai/prompts/connectonion/design-decisions/010-cli-ux-progressive-disclosure.md +176 -0
- connectonion/cli/co_ai/prompts/connectonion/design-decisions/011-global-config-identity-management.md +357 -0
- connectonion/cli/co_ai/prompts/connectonion/design-decisions/012-tool-execution-separation.md +259 -0
- connectonion/cli/co_ai/prompts/connectonion/design-decisions/013-debug-and-logging-design.md +253 -0
- connectonion/cli/co_ai/prompts/connectonion/design-decisions/014-hook-system-design.md +510 -0
- connectonion/cli/co_ai/prompts/connectonion/design-decisions/015-interactive-auto-debug-design.md +837 -0
- connectonion/cli/co_ai/prompts/connectonion/design-decisions/016-why-no-zero-knowledge-proofs.md +358 -0
- connectonion/cli/co_ai/prompts/connectonion/design-decisions/017-session-logging-and-eval-format.md +120 -0
- connectonion/cli/co_ai/prompts/connectonion/design-decisions/018-event-api-naming.md +274 -0
- connectonion/cli/co_ai/prompts/connectonion/design-decisions/019-agent-lifecycle-design.md +655 -0
- connectonion/cli/co_ai/prompts/connectonion/design-decisions/020-trust-system-and-network-architecture.md +503 -0
- connectonion/cli/co_ai/prompts/connectonion/design-decisions/021-task-storage-jsonl-design.md +496 -0
- connectonion/cli/co_ai/prompts/connectonion/design-decisions/022-raw-asgi-implementation.md +273 -0
- connectonion/cli/co_ai/prompts/connectonion/examples/agent_reasoning.md +62 -0
- connectonion/cli/co_ai/prompts/connectonion/examples/atomic_tools.md +24 -0
- connectonion/cli/co_ai/prompts/connectonion/examples/load_guide.md +18 -0
- connectonion/cli/co_ai/prompts/connectonion/examples.md +0 -0
- connectonion/cli/co_ai/prompts/connectonion/hook-system-options.md +364 -0
- connectonion/cli/co_ai/prompts/connectonion/index.md +162 -0
- connectonion/cli/co_ai/prompts/connectonion/integrations/README.md +12 -0
- connectonion/cli/co_ai/prompts/connectonion/integrations/auth.md +450 -0
- connectonion/cli/co_ai/prompts/connectonion/integrations/google.md +431 -0
- connectonion/cli/co_ai/prompts/connectonion/integrations/microsoft.md +370 -0
- connectonion/cli/co_ai/prompts/connectonion/network/README.md +14 -0
- connectonion/cli/co_ai/prompts/connectonion/network/connect.md +543 -0
- connectonion/cli/co_ai/prompts/connectonion/network/connection.md +538 -0
- connectonion/cli/co_ai/prompts/connectonion/network/deploy.md +123 -0
- connectonion/cli/co_ai/prompts/connectonion/network/host.md +1049 -0
- connectonion/cli/co_ai/prompts/connectonion/network/protocol/agent-relay-protocol.md +495 -0
- connectonion/cli/co_ai/prompts/connectonion/network/protocol/announce-message.md +115 -0
- connectonion/cli/co_ai/prompts/connectonion/principles.md +124 -0
- connectonion/cli/co_ai/prompts/connectonion/quickstart.md +261 -0
- connectonion/cli/co_ai/prompts/connectonion/roadmap.md +81 -0
- connectonion/cli/co_ai/prompts/connectonion/templates/README.md +77 -0
- connectonion/cli/co_ai/prompts/connectonion/templates/meta-agent.md +152 -0
- connectonion/cli/co_ai/prompts/connectonion/templates/minimal.md +105 -0
- connectonion/cli/co_ai/prompts/connectonion/templates/playwright.md +130 -0
- connectonion/cli/co_ai/prompts/connectonion/templates/web-research.md +144 -0
- connectonion/cli/co_ai/prompts/connectonion/tui/README.md +95 -0
- connectonion/cli/co_ai/prompts/connectonion/tui/chat.md +181 -0
- connectonion/cli/co_ai/prompts/connectonion/tui/divider.md +63 -0
- connectonion/cli/co_ai/prompts/connectonion/tui/dropdown.md +83 -0
- connectonion/cli/co_ai/prompts/connectonion/tui/footer.md +44 -0
- connectonion/cli/co_ai/prompts/connectonion/tui/fuzzy.md +68 -0
- connectonion/cli/co_ai/prompts/connectonion/tui/input.md +84 -0
- connectonion/cli/co_ai/prompts/connectonion/tui/keys.md +77 -0
- connectonion/cli/co_ai/prompts/connectonion/tui/pick.md +71 -0
- connectonion/cli/co_ai/prompts/connectonion/tui/providers.md +89 -0
- connectonion/cli/co_ai/prompts/connectonion/tui/status_bar.md +67 -0
- connectonion/cli/co_ai/prompts/connectonion/useful_plugins/README.md +156 -0
- connectonion/cli/co_ai/prompts/connectonion/useful_plugins/calendar_plugin.md +68 -0
- connectonion/cli/co_ai/prompts/connectonion/useful_plugins/eval.md +89 -0
- connectonion/cli/co_ai/prompts/connectonion/useful_plugins/gmail_plugin.md +68 -0
- connectonion/cli/co_ai/prompts/connectonion/useful_plugins/image_result_formatter.md +74 -0
- connectonion/cli/co_ai/prompts/connectonion/useful_plugins/re_act.md +86 -0
- connectonion/cli/co_ai/prompts/connectonion/useful_plugins/shell_approval.md +69 -0
- connectonion/cli/co_ai/prompts/connectonion/useful_tools/README.md +81 -0
- connectonion/cli/co_ai/prompts/connectonion/useful_tools/diff_writer.md +138 -0
- connectonion/cli/co_ai/prompts/connectonion/useful_tools/get_emails.md +499 -0
- connectonion/cli/co_ai/prompts/connectonion/useful_tools/gmail.md +135 -0
- connectonion/cli/co_ai/prompts/connectonion/useful_tools/google_calendar.md +106 -0
- connectonion/cli/co_ai/prompts/connectonion/useful_tools/memory.md +486 -0
- connectonion/cli/co_ai/prompts/connectonion/useful_tools/microsoft_calendar.md +106 -0
- connectonion/cli/co_ai/prompts/connectonion/useful_tools/outlook.md +120 -0
- connectonion/cli/co_ai/prompts/connectonion/useful_tools/send_email.md +403 -0
- connectonion/cli/co_ai/prompts/connectonion/useful_tools/shell.md +95 -0
- connectonion/cli/co_ai/prompts/connectonion/useful_tools/slash_command.md +96 -0
- connectonion/cli/co_ai/prompts/connectonion/useful_tools/terminal.md +97 -0
- connectonion/cli/co_ai/prompts/connectonion/useful_tools/todo_list.md +252 -0
- connectonion/cli/co_ai/prompts/connectonion/useful_tools/web_fetch.md +130 -0
- connectonion/cli/co_ai/prompts/connectonion/vibe-coding-guide.md +97 -0
- connectonion/cli/co_ai/prompts/connectonion/windows-support.md +258 -0
- connectonion/cli/co_ai/prompts/main.md +247 -0
- connectonion/cli/co_ai/prompts/summarization.md +55 -0
- connectonion/cli/co_ai/prompts/system-reminders/agent.md +23 -0
- connectonion/cli/co_ai/prompts/system-reminders/plan_mode.md +13 -0
- connectonion/cli/co_ai/prompts/system-reminders/security.md +14 -0
- connectonion/cli/co_ai/prompts/system-reminders/simplicity.md +14 -0
- connectonion/cli/co_ai/prompts/tools/ask_user.md +61 -0
- connectonion/cli/co_ai/prompts/tools/background.md +57 -0
- connectonion/cli/co_ai/prompts/tools/edit.md +90 -0
- connectonion/cli/co_ai/prompts/tools/glob.md +52 -0
- connectonion/cli/co_ai/prompts/tools/grep.md +55 -0
- connectonion/cli/co_ai/prompts/tools/plan_mode.md +80 -0
- connectonion/cli/co_ai/prompts/tools/read.md +40 -0
- connectonion/cli/co_ai/prompts/tools/shell.md +67 -0
- connectonion/cli/co_ai/prompts/tools/task.md +51 -0
- connectonion/cli/co_ai/prompts/tools/todo.md +139 -0
- connectonion/cli/co_ai/prompts/tools/write.md +47 -0
- connectonion/cli/co_ai/prompts/workflow.md +89 -0
- connectonion/cli/co_ai/sessions.py +110 -0
- connectonion/cli/co_ai/skills/__init__.py +37 -0
- connectonion/cli/co_ai/skills/builtin/commit/SKILL.md +63 -0
- connectonion/cli/co_ai/skills/builtin/review-pr/SKILL.md +76 -0
- connectonion/cli/co_ai/skills/loader.py +166 -0
- connectonion/cli/co_ai/skills/tool.py +46 -0
- connectonion/cli/co_ai/tools/__init__.py +92 -0
- connectonion/cli/co_ai/tools/ask_user.py +35 -0
- connectonion/cli/co_ai/tools/background.py +201 -0
- connectonion/cli/co_ai/tools/diff_writer.py +291 -0
- connectonion/cli/co_ai/tools/edit.py +89 -0
- connectonion/cli/co_ai/tools/glob.py +84 -0
- connectonion/cli/co_ai/tools/grep.py +158 -0
- connectonion/cli/co_ai/tools/load_guide.py +23 -0
- connectonion/cli/co_ai/tools/multi_edit.py +116 -0
- connectonion/cli/co_ai/tools/plan_mode.py +169 -0
- connectonion/cli/co_ai/tools/read.py +61 -0
- connectonion/cli/co_ai/tools/task.py +59 -0
- connectonion/cli/co_ai/tools/todo_list.py +159 -0
- connectonion/cli/co_ai/tools/write.py +126 -0
- connectonion/cli/commands/__init__.py +11 -1
- connectonion/cli/commands/ai_commands.py +34 -0
- connectonion/cli/commands/copy_commands.py +55 -6
- connectonion/cli/commands/create.py +20 -17
- connectonion/cli/commands/init.py +19 -22
- connectonion/cli/commands/project_cmd_lib.py +15 -0
- connectonion/cli/main.py +11 -0
- connectonion/console.py +15 -1
- connectonion/core/__init__.py +10 -1
- connectonion/core/agent.py +37 -16
- connectonion/core/exceptions.py +74 -0
- connectonion/core/llm.py +54 -6
- connectonion/core/tool_executor.py +32 -31
- connectonion/core/tool_factory.py +47 -10
- connectonion/debug/__init__.py +10 -1
- connectonion/debug/debug_explainer/__init__.py +10 -1
- connectonion/debug/execution_analyzer/__init__.py +10 -1
- connectonion/debug/execution_analyzer/execution_analysis.py +5 -2
- connectonion/debug/runtime_inspector/__init__.py +10 -1
- connectonion/docs/.package-ignore +6 -0
- connectonion/docs/README.md +2036 -0
- connectonion/docs/api.md +457 -0
- connectonion/docs/archive/001-ai-agent-is-just-prompt-plus-function.md +249 -0
- connectonion/docs/archive/README.md +53 -0
- connectonion/docs/archive/archive/consolidation-plan.md +72 -0
- connectonion/docs/archive/archive/core-principles-extracted.md +239 -0
- connectonion/docs/archive/archive/master-principles.md +222 -0
- connectonion/docs/archive/archive/principles.md +293 -0
- connectonion/docs/archive/archive/simplicity-principles.md +221 -0
- connectonion/docs/archive/attack-defense-insights.md +410 -0
- connectonion/docs/archive/business-model.md +305 -0
- connectonion/docs/archive/core-principles-unified.md +190 -0
- connectonion/docs/archive/discussion-journey.md +178 -0
- connectonion/docs/archive/economic-analysis.md +323 -0
- connectonion/docs/archive/features/01-share-and-find.md +256 -0
- connectonion/docs/archive/features/02-agent-authentication.md +93 -0
- connectonion/docs/archive/features/03-test-before-trust.md +71 -0
- connectonion/docs/archive/features/06-reliability-and-offline.md +197 -0
- connectonion/docs/archive/features/README.md +46 -0
- connectonion/docs/archive/features-roadmap.md +247 -0
- connectonion/docs/archive/mcp-comparison-insights.md +215 -0
- connectonion/docs/archive/migration-strategy.md +571 -0
- connectonion/docs/archive/mini-whitepaper.md +293 -0
- connectonion/docs/archive/network-protocol.md +394 -0
- connectonion/docs/archive/semantic-revolution.md +367 -0
- connectonion/docs/archive/technical-architecture.md +453 -0
- connectonion/docs/archive/the-semantic-insight.md +207 -0
- connectonion/docs/archive/threat-model.md +164 -0
- connectonion/docs/cli/README.md +805 -0
- connectonion/docs/cli/auth.md +46 -0
- connectonion/docs/cli/browser.md +235 -0
- connectonion/docs/cli/copy.md +232 -0
- connectonion/docs/cli/create.md +335 -0
- connectonion/docs/cli/init.md +431 -0
- connectonion/docs/co-directory-structure.md +214 -0
- connectonion/docs/concepts/agent.md +1078 -0
- connectonion/docs/concepts/events.md +699 -0
- connectonion/docs/concepts/llm_do.md +256 -0
- connectonion/docs/concepts/max_iterations.md +362 -0
- connectonion/docs/concepts/models.md +641 -0
- connectonion/docs/concepts/plugins.md +101 -0
- connectonion/docs/concepts/prompts.md +122 -0
- connectonion/docs/concepts/session.md +428 -0
- connectonion/docs/concepts/tools.md +512 -0
- connectonion/docs/concepts/transcribe.md +156 -0
- connectonion/docs/concepts/trust.md +291 -0
- connectonion/docs/connectonion.md +1256 -0
- connectonion/docs/debug/README.md +18 -0
- connectonion/docs/debug/auto_debug.md +1026 -0
- connectonion/docs/debug/console.md +129 -0
- connectonion/docs/debug/eval-format.md +178 -0
- connectonion/docs/debug/eval.md +230 -0
- connectonion/docs/debug/exceptions.md +307 -0
- connectonion/docs/debug/log.md +117 -0
- connectonion/docs/debug/xray.md +215 -0
- connectonion/docs/design-decisions/001-choosing-input-method.md +202 -0
- connectonion/docs/design-decisions/002-choosing-llm-function-name.md +202 -0
- connectonion/docs/design-decisions/003-choosing-trust-keyword.md +141 -0
- connectonion/docs/design-decisions/004-cli-create-flow.md +117 -0
- connectonion/docs/design-decisions/005-designing-agent-network-protocol.md +503 -0
- connectonion/docs/design-decisions/006-agent-address-format.md +305 -0
- connectonion/docs/design-decisions/007-authentication-backend-design.md +240 -0
- connectonion/docs/design-decisions/008-naming-is-hard.md +228 -0
- connectonion/docs/design-decisions/009-why-connect-function.md +167 -0
- connectonion/docs/design-decisions/010-cli-ux-progressive-disclosure.md +176 -0
- connectonion/docs/design-decisions/011-global-config-identity-management.md +357 -0
- connectonion/docs/design-decisions/012-tool-execution-separation.md +259 -0
- connectonion/docs/design-decisions/013-debug-and-logging-design.md +253 -0
- connectonion/docs/design-decisions/014-hook-system-design.md +510 -0
- connectonion/docs/design-decisions/015-interactive-auto-debug-design.md +837 -0
- connectonion/docs/design-decisions/016-why-no-zero-knowledge-proofs.md +358 -0
- connectonion/docs/design-decisions/017-session-logging-and-eval-format.md +120 -0
- connectonion/docs/design-decisions/018-event-api-naming.md +274 -0
- connectonion/docs/design-decisions/019-agent-lifecycle-design.md +655 -0
- connectonion/docs/design-decisions/020-trust-system-and-network-architecture.md +503 -0
- connectonion/docs/design-decisions/021-task-storage-jsonl-design.md +496 -0
- connectonion/docs/design-decisions/022-raw-asgi-implementation.md +273 -0
- connectonion/docs/examples.md +0 -0
- connectonion/docs/hook-system-options.md +364 -0
- connectonion/docs/integrations/README.md +12 -0
- connectonion/docs/integrations/auth.md +450 -0
- connectonion/docs/integrations/google.md +431 -0
- connectonion/docs/integrations/microsoft.md +370 -0
- connectonion/docs/network/README.md +14 -0
- connectonion/docs/network/connect.md +629 -0
- connectonion/docs/network/deploy.md +124 -0
- connectonion/docs/network/host.md +1087 -0
- connectonion/docs/network/io.md +538 -0
- connectonion/docs/network/protocol/agent-relay-protocol.md +495 -0
- connectonion/docs/network/protocol/announce-message.md +115 -0
- connectonion/docs/principles.md +124 -0
- connectonion/docs/quickstart.md +261 -0
- connectonion/docs/roadmap.md +81 -0
- connectonion/docs/templates/README.md +77 -0
- connectonion/docs/templates/meta-agent.md +152 -0
- connectonion/docs/templates/minimal.md +105 -0
- connectonion/docs/templates/playwright.md +130 -0
- connectonion/docs/templates/web-research.md +144 -0
- connectonion/docs/tui/README.md +95 -0
- connectonion/docs/tui/chat.md +181 -0
- connectonion/docs/tui/divider.md +63 -0
- connectonion/docs/tui/dropdown.md +83 -0
- connectonion/docs/tui/footer.md +44 -0
- connectonion/docs/tui/fuzzy.md +68 -0
- connectonion/docs/tui/input.md +84 -0
- connectonion/docs/tui/keys.md +77 -0
- connectonion/docs/tui/pick.md +71 -0
- connectonion/docs/tui/providers.md +89 -0
- connectonion/docs/tui/status_bar.md +67 -0
- connectonion/docs/useful_plugins/README.md +160 -0
- connectonion/docs/useful_plugins/calendar_plugin.md +68 -0
- connectonion/docs/useful_plugins/eval.md +89 -0
- connectonion/docs/useful_plugins/gmail_plugin.md +68 -0
- connectonion/docs/useful_plugins/image_result_formatter.md +74 -0
- connectonion/docs/useful_plugins/re_act.md +86 -0
- connectonion/docs/useful_plugins/shell_approval.md +69 -0
- connectonion/docs/useful_plugins/system_reminder.md +210 -0
- connectonion/docs/useful_plugins/tool_approval.md +139 -0
- connectonion/docs/useful_prompts/README.md +127 -0
- connectonion/docs/useful_prompts/coding_agent.md +214 -0
- connectonion/docs/useful_tools/README.md +81 -0
- connectonion/docs/useful_tools/ask_user.md +103 -0
- connectonion/docs/useful_tools/diff_writer.md +158 -0
- connectonion/docs/useful_tools/get_emails.md +519 -0
- connectonion/docs/useful_tools/gmail.md +155 -0
- connectonion/docs/useful_tools/google_calendar.md +126 -0
- connectonion/docs/useful_tools/memory.md +506 -0
- connectonion/docs/useful_tools/microsoft_calendar.md +126 -0
- connectonion/docs/useful_tools/outlook.md +140 -0
- connectonion/docs/useful_tools/send_email.md +423 -0
- connectonion/docs/useful_tools/shell.md +115 -0
- connectonion/docs/useful_tools/slash_command.md +116 -0
- connectonion/docs/useful_tools/terminal.md +115 -0
- connectonion/docs/useful_tools/todo_list.md +272 -0
- connectonion/docs/useful_tools/web_fetch.md +150 -0
- connectonion/docs/vibe-coding-guide.md +97 -0
- connectonion/docs/windows-support.md +258 -0
- connectonion/logger.py +3 -3
- connectonion/network/__init__.py +19 -6
- connectonion/network/asgi/__init__.py +81 -0
- connectonion/network/asgi/http.py +205 -0
- connectonion/network/asgi/websocket.py +217 -0
- connectonion/network/connect.py +232 -185
- connectonion/network/host/__init__.py +59 -0
- connectonion/network/host/auth.py +191 -0
- connectonion/network/host/routes.py +135 -0
- connectonion/network/host/server.py +289 -0
- connectonion/network/host/session.py +78 -0
- connectonion/network/io/__init__.py +21 -0
- connectonion/network/{connection.py → io/base.py} +17 -42
- connectonion/network/io/websocket.py +55 -0
- connectonion/network/relay.py +37 -16
- connectonion/network/trust/__init__.py +30 -0
- connectonion/network/trust/factory.py +138 -0
- connectonion/network/{trust_agents.py → trust/prompts.py} +3 -3
- connectonion/network/{trust_functions.py → trust/tools.py} +2 -2
- connectonion/prompt_files/__init__.py +11 -1
- connectonion/prompt_files/react_acknowledge.md +26 -0
- connectonion/prompts.py +10 -1
- connectonion/tui/chat.py +10 -1
- connectonion/tui/divider.py +10 -1
- connectonion/tui/dropdown.py +10 -1
- connectonion/tui/footer.py +8 -0
- connectonion/tui/fuzzy.py +11 -1
- connectonion/tui/input.py +118 -70
- connectonion/tui/keys.py +133 -6
- connectonion/tui/providers.py +11 -1
- connectonion/tui/status_bar.py +10 -1
- connectonion/useful_events_handlers/__init__.py +8 -0
- connectonion/useful_events_handlers/reflect.py +19 -4
- connectonion/useful_plugins/__init__.py +3 -1
- connectonion/useful_plugins/eval.py +2 -2
- connectonion/useful_plugins/gmail_plugin.py +3 -3
- connectonion/useful_plugins/image_result_formatter.py +3 -3
- connectonion/useful_plugins/re_act.py +114 -28
- connectonion/useful_plugins/shell_approval.py +2 -2
- connectonion/useful_plugins/system_reminder.py +103 -0
- connectonion/useful_plugins/tool_approval.py +233 -0
- connectonion/useful_plugins/ui_stream.py +18 -133
- connectonion/useful_prompts/README.md +61 -0
- connectonion/useful_prompts/__init__.py +45 -0
- connectonion/useful_prompts/coding_agent/README.md +106 -0
- connectonion/useful_prompts/coding_agent/assembler.py +123 -0
- connectonion/useful_prompts/coding_agent/prompts/main.md +227 -0
- connectonion/useful_prompts/coding_agent/prompts/tools/ask_user.md +61 -0
- connectonion/useful_prompts/coding_agent/prompts/tools/background.md +57 -0
- connectonion/useful_prompts/coding_agent/prompts/tools/edit.md +90 -0
- connectonion/useful_prompts/coding_agent/prompts/tools/glob.md +52 -0
- connectonion/useful_prompts/coding_agent/prompts/tools/grep.md +55 -0
- connectonion/useful_prompts/coding_agent/prompts/tools/plan_mode.md +80 -0
- connectonion/useful_prompts/coding_agent/prompts/tools/read.md +40 -0
- connectonion/useful_prompts/coding_agent/prompts/tools/shell.md +67 -0
- connectonion/useful_prompts/coding_agent/prompts/tools/task.md +51 -0
- connectonion/useful_prompts/coding_agent/prompts/tools/todo.md +139 -0
- connectonion/useful_prompts/coding_agent/prompts/tools/write.md +48 -0
- connectonion/useful_prompts/system-reminders/security-warning.md +14 -0
- connectonion/useful_prompts/system-reminders/test-reminder.md +11 -0
- connectonion/useful_tools/__init__.py +31 -4
- connectonion/useful_tools/ask_user.py +35 -0
- connectonion/useful_tools/bash.py +69 -0
- connectonion/useful_tools/diff_writer.py +186 -94
- connectonion/useful_tools/edit.py +102 -0
- connectonion/useful_tools/glob_files.py +97 -0
- connectonion/useful_tools/grep_files.py +171 -0
- connectonion/useful_tools/multi_edit.py +116 -0
- connectonion/useful_tools/read_file.py +73 -0
- connectonion/useful_tools/shell.py +50 -45
- connectonion/useful_tools/write_file.py +129 -0
- {connectonion-0.6.2.dist-info → connectonion-0.6.4.dist-info}/METADATA +10 -3
- connectonion-0.6.4.dist-info/RECORD +472 -0
- connectonion/network/asgi.py +0 -407
- connectonion/network/host.py +0 -616
- connectonion/network/trust.py +0 -166
- connectonion-0.6.2.dist-info/RECORD +0 -129
- /connectonion/cli/{docs → co_ai/prompts/connectonion}/connectonion.md +0 -0
- {connectonion-0.6.2.dist-info → connectonion-0.6.4.dist-info}/WHEEL +0 -0
- {connectonion-0.6.2.dist-info → connectonion-0.6.4.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
# Google Integration (co auth google)
|
|
2
|
+
|
|
3
|
+
> Send emails via Gmail and read calendar events from your AI agents. 30-second setup.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Quick Start
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
co auth google
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
What happens:
|
|
14
|
+
1. Clears any existing Google connection (allows switching accounts)
|
|
15
|
+
2. Opens browser to Google OAuth consent screen
|
|
16
|
+
3. You authorize Gmail Send + Calendar Read permissions
|
|
17
|
+
4. Credentials saved to `.env` (both local and global `~/.co/keys.env`)
|
|
18
|
+
5. Ready to use Gmail and Calendar tools immediately
|
|
19
|
+
|
|
20
|
+
**That's it.** Your agents can now send emails and read your calendar.
|
|
21
|
+
|
|
22
|
+
**Switching accounts?** Just run `co auth google` again - it will clear the old connection and let you pick a new Google account.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Prerequisites
|
|
27
|
+
|
|
28
|
+
Before running `co auth google`, you must authenticate with OpenOnion:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
co auth
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
This creates your `OPENONION_API_KEY` which is required for Google OAuth to work.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## What Gets Saved
|
|
39
|
+
|
|
40
|
+
After successful authentication, your `.env` file contains:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# Google OAuth Credentials
|
|
44
|
+
GOOGLE_ACCESS_TOKEN=ya29.a0A...
|
|
45
|
+
GOOGLE_REFRESH_TOKEN=1//0g...
|
|
46
|
+
GOOGLE_TOKEN_EXPIRES_AT=2025-12-31T23:59:59
|
|
47
|
+
GOOGLE_SCOPES=gmail.send,calendar.readonly
|
|
48
|
+
GOOGLE_EMAIL=your.email@gmail.com
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Security notes:**
|
|
52
|
+
- Credentials are saved to both local `.env` and `~/.co/keys.env`
|
|
53
|
+
- File permissions set to `0600` (read/write for owner only) on Unix systems
|
|
54
|
+
- Access tokens expire, but refresh tokens allow automatic renewal
|
|
55
|
+
- You can revoke access anytime via Google Account settings or the dashboard
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Permissions Requested
|
|
60
|
+
|
|
61
|
+
When you run `co auth google`, we request these Google scopes:
|
|
62
|
+
|
|
63
|
+
| Scope | Purpose | What agents can do |
|
|
64
|
+
|-------|---------|-------------------|
|
|
65
|
+
| `gmail.send` | Send emails on your behalf | Use `send_email()` tool to send emails |
|
|
66
|
+
| `calendar.readonly` | Read calendar events | Read your calendar to check availability |
|
|
67
|
+
| `userinfo.email` | Get your email address | Identify which Google account is connected |
|
|
68
|
+
|
|
69
|
+
**Privacy**: We only request the minimum permissions needed. We cannot:
|
|
70
|
+
- Read your inbox (use built-in `get_emails()` for that)
|
|
71
|
+
- Delete or modify calendar events
|
|
72
|
+
- Access your Google Drive or other services
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Using Google OAuth in Agents
|
|
77
|
+
|
|
78
|
+
Once authenticated, your agents can use Google-powered tools:
|
|
79
|
+
|
|
80
|
+
### Send Email via Gmail
|
|
81
|
+
|
|
82
|
+
```python
|
|
83
|
+
from connectonion import Agent, send_email
|
|
84
|
+
|
|
85
|
+
def send_gmail(to: str, subject: str, body: str) -> str:
|
|
86
|
+
"""Send email via your Gmail account."""
|
|
87
|
+
result = send_email(to, subject, body)
|
|
88
|
+
return f"Email sent to {to}: {result}"
|
|
89
|
+
|
|
90
|
+
agent = Agent(
|
|
91
|
+
"Gmail Assistant",
|
|
92
|
+
tools=[send_gmail]
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
agent.input("Send an email to alice@example.com saying hello")
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Read Calendar Events
|
|
99
|
+
|
|
100
|
+
```python
|
|
101
|
+
from connectonion import Agent
|
|
102
|
+
import os
|
|
103
|
+
from google.oauth2.credentials import Credentials
|
|
104
|
+
from googleapiclient.discovery import build
|
|
105
|
+
from datetime import datetime, timedelta
|
|
106
|
+
|
|
107
|
+
def check_calendar(days_ahead: int = 7) -> str:
|
|
108
|
+
"""Check Google Calendar for upcoming events."""
|
|
109
|
+
# Load credentials from environment
|
|
110
|
+
creds = Credentials(
|
|
111
|
+
token=os.getenv("GOOGLE_ACCESS_TOKEN"),
|
|
112
|
+
refresh_token=os.getenv("GOOGLE_REFRESH_TOKEN"),
|
|
113
|
+
token_uri="https://oauth2.googleapis.com/token",
|
|
114
|
+
client_id=os.getenv("GOOGLE_CLIENT_ID"), # From backend
|
|
115
|
+
client_secret=os.getenv("GOOGLE_CLIENT_SECRET"),
|
|
116
|
+
scopes=["https://www.googleapis.com/auth/calendar.readonly"]
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
service = build('calendar', 'v3', credentials=creds)
|
|
120
|
+
|
|
121
|
+
# Get events from now to days_ahead
|
|
122
|
+
now = datetime.utcnow().isoformat() + 'Z'
|
|
123
|
+
end = (datetime.utcnow() + timedelta(days=days_ahead)).isoformat() + 'Z'
|
|
124
|
+
|
|
125
|
+
events_result = service.events().list(
|
|
126
|
+
calendarId='primary',
|
|
127
|
+
timeMin=now,
|
|
128
|
+
timeMax=end,
|
|
129
|
+
maxResults=10,
|
|
130
|
+
singleEvents=True,
|
|
131
|
+
orderBy='startTime'
|
|
132
|
+
).execute()
|
|
133
|
+
|
|
134
|
+
events = events_result.get('items', [])
|
|
135
|
+
|
|
136
|
+
if not events:
|
|
137
|
+
return f"No events in the next {days_ahead} days"
|
|
138
|
+
|
|
139
|
+
summary = f"Upcoming events ({len(events)}):\n"
|
|
140
|
+
for event in events:
|
|
141
|
+
start = event['start'].get('dateTime', event['start'].get('date'))
|
|
142
|
+
summary += f"- {start}: {event['summary']}\n"
|
|
143
|
+
|
|
144
|
+
return summary
|
|
145
|
+
|
|
146
|
+
agent = Agent(
|
|
147
|
+
"Calendar Assistant",
|
|
148
|
+
tools=[check_calendar]
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
agent.input("What's on my calendar this week?")
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Complete Example: Scheduling Agent
|
|
157
|
+
|
|
158
|
+
Here's a full agent that can check your calendar and send meeting invites:
|
|
159
|
+
|
|
160
|
+
```python
|
|
161
|
+
from connectonion import Agent, send_email
|
|
162
|
+
import os
|
|
163
|
+
from google.oauth2.credentials import Credentials
|
|
164
|
+
from googleapiclient.discovery import build
|
|
165
|
+
from datetime import datetime, timedelta
|
|
166
|
+
|
|
167
|
+
class SchedulingAssistant:
|
|
168
|
+
"""AI assistant that manages your calendar and sends meeting emails."""
|
|
169
|
+
|
|
170
|
+
def __init__(self):
|
|
171
|
+
# Initialize Google Calendar API
|
|
172
|
+
creds = Credentials(
|
|
173
|
+
token=os.getenv("GOOGLE_ACCESS_TOKEN"),
|
|
174
|
+
refresh_token=os.getenv("GOOGLE_REFRESH_TOKEN"),
|
|
175
|
+
token_uri="https://oauth2.googleapis.com/token",
|
|
176
|
+
client_id=os.getenv("GOOGLE_CLIENT_ID"),
|
|
177
|
+
client_secret=os.getenv("GOOGLE_CLIENT_SECRET"),
|
|
178
|
+
scopes=["https://www.googleapis.com/auth/calendar.readonly"]
|
|
179
|
+
)
|
|
180
|
+
self.calendar = build('calendar', 'v3', credentials=creds)
|
|
181
|
+
|
|
182
|
+
def check_availability(self, date_str: str) -> str:
|
|
183
|
+
"""Check if a specific date/time is free on calendar."""
|
|
184
|
+
# Parse date and check calendar
|
|
185
|
+
target_date = datetime.fromisoformat(date_str)
|
|
186
|
+
|
|
187
|
+
events_result = self.calendar.events().list(
|
|
188
|
+
calendarId='primary',
|
|
189
|
+
timeMin=target_date.isoformat() + 'Z',
|
|
190
|
+
timeMax=(target_date + timedelta(hours=1)).isoformat() + 'Z',
|
|
191
|
+
singleEvents=True
|
|
192
|
+
).execute()
|
|
193
|
+
|
|
194
|
+
events = events_result.get('items', [])
|
|
195
|
+
|
|
196
|
+
if events:
|
|
197
|
+
return f"Not available - {len(events)} event(s) scheduled"
|
|
198
|
+
return "Available"
|
|
199
|
+
|
|
200
|
+
def send_meeting_invite(
|
|
201
|
+
self,
|
|
202
|
+
to: str,
|
|
203
|
+
subject: str,
|
|
204
|
+
datetime_str: str,
|
|
205
|
+
duration_hours: int = 1
|
|
206
|
+
) -> str:
|
|
207
|
+
"""Send meeting invitation email."""
|
|
208
|
+
meeting_time = datetime.fromisoformat(datetime_str)
|
|
209
|
+
|
|
210
|
+
body = f"""
|
|
211
|
+
Hi,
|
|
212
|
+
|
|
213
|
+
I'd like to schedule a meeting with you.
|
|
214
|
+
|
|
215
|
+
Date & Time: {meeting_time.strftime('%A, %B %d, %Y at %I:%M %p')}
|
|
216
|
+
Duration: {duration_hours} hour(s)
|
|
217
|
+
|
|
218
|
+
Please let me know if this works for you.
|
|
219
|
+
|
|
220
|
+
Best regards
|
|
221
|
+
"""
|
|
222
|
+
|
|
223
|
+
result = send_email(to, subject, body)
|
|
224
|
+
return f"Meeting invite sent to {to}"
|
|
225
|
+
|
|
226
|
+
# Create tools from methods
|
|
227
|
+
assistant = SchedulingAssistant()
|
|
228
|
+
|
|
229
|
+
agent = Agent(
|
|
230
|
+
"Scheduling Agent",
|
|
231
|
+
tools=[
|
|
232
|
+
assistant.check_availability,
|
|
233
|
+
assistant.send_meeting_invite
|
|
234
|
+
],
|
|
235
|
+
system_prompt="""You are a scheduling assistant.
|
|
236
|
+
|
|
237
|
+
You can:
|
|
238
|
+
1. Check calendar availability
|
|
239
|
+
2. Send meeting invitations via Gmail
|
|
240
|
+
|
|
241
|
+
When asked to schedule a meeting:
|
|
242
|
+
1. First check if the proposed time is available
|
|
243
|
+
2. If available, send the meeting invite
|
|
244
|
+
3. Report back to the user
|
|
245
|
+
"""
|
|
246
|
+
)
|
|
247
|
+
|
|
248
|
+
# Use it
|
|
249
|
+
agent.input("""
|
|
250
|
+
Schedule a 1-hour meeting with bob@example.com
|
|
251
|
+
for tomorrow at 2pm. Subject: Q4 Planning Discussion
|
|
252
|
+
""")
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
## Troubleshooting
|
|
258
|
+
|
|
259
|
+
### "Not authenticated with OpenOnion"
|
|
260
|
+
|
|
261
|
+
You need to run `co auth` first to get your `OPENONION_API_KEY`:
|
|
262
|
+
|
|
263
|
+
```bash
|
|
264
|
+
co auth
|
|
265
|
+
co auth google
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
### Authorization Timeout
|
|
269
|
+
|
|
270
|
+
If the browser window doesn't complete authorization within 5 minutes:
|
|
271
|
+
|
|
272
|
+
```bash
|
|
273
|
+
# Try again
|
|
274
|
+
co auth google
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
The command polls the backend every 2 seconds waiting for your authorization.
|
|
278
|
+
|
|
279
|
+
### Access Denied / User Cancelled
|
|
280
|
+
|
|
281
|
+
If you click "Cancel" on the Google consent screen:
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
# Just run it again when ready
|
|
285
|
+
co auth google
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### Credentials Not Working
|
|
289
|
+
|
|
290
|
+
Check if credentials are properly saved:
|
|
291
|
+
|
|
292
|
+
```bash
|
|
293
|
+
# Check local .env
|
|
294
|
+
cat .env | grep GOOGLE_
|
|
295
|
+
|
|
296
|
+
# Check global keys
|
|
297
|
+
cat ~/.co/keys.env | grep GOOGLE_
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
If credentials exist but don't work, re-authenticate:
|
|
301
|
+
|
|
302
|
+
```bash
|
|
303
|
+
co auth google
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
This will clear old credentials and set up fresh ones.
|
|
307
|
+
|
|
308
|
+
### Switch Google Account
|
|
309
|
+
|
|
310
|
+
To use a different Google account:
|
|
311
|
+
|
|
312
|
+
```bash
|
|
313
|
+
co auth google
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
This automatically clears the old connection before starting a new OAuth flow. Pick your desired account in the browser.
|
|
317
|
+
|
|
318
|
+
### Revoke Access
|
|
319
|
+
|
|
320
|
+
To disconnect your Google account:
|
|
321
|
+
|
|
322
|
+
1. Via Google Account Settings:
|
|
323
|
+
- Go to https://myaccount.google.com/permissions
|
|
324
|
+
- Find "OpenOnion" and click "Remove access"
|
|
325
|
+
|
|
326
|
+
2. Via OpenOnion Dashboard:
|
|
327
|
+
- Visit https://o.openonion.ai
|
|
328
|
+
- Click "Disconnect Google Account"
|
|
329
|
+
|
|
330
|
+
3. Manually remove credentials:
|
|
331
|
+
```bash
|
|
332
|
+
# Remove from local .env
|
|
333
|
+
sed -i '' '/^GOOGLE_/d' .env
|
|
334
|
+
|
|
335
|
+
# Remove from global keys
|
|
336
|
+
sed -i '' '/^GOOGLE_/d' ~/.co/keys.env
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
---
|
|
340
|
+
|
|
341
|
+
## Security Best Practices
|
|
342
|
+
|
|
343
|
+
1. **Never commit `.env` files**: Add to `.gitignore`
|
|
344
|
+
```bash
|
|
345
|
+
echo ".env" >> .gitignore
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
2. **Use environment-specific credentials**:
|
|
349
|
+
- Development: Use test Google account
|
|
350
|
+
- Production: Use production account
|
|
351
|
+
|
|
352
|
+
3. **Regularly rotate credentials**:
|
|
353
|
+
```bash
|
|
354
|
+
# Re-authenticate every few months
|
|
355
|
+
co auth google
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
4. **Monitor usage**: Check your Google Account activity regularly
|
|
359
|
+
|
|
360
|
+
5. **Revoke when done**: If you stop using a project, revoke access
|
|
361
|
+
|
|
362
|
+
---
|
|
363
|
+
|
|
364
|
+
## How It Works
|
|
365
|
+
|
|
366
|
+
Behind the scenes, `co auth google`:
|
|
367
|
+
|
|
368
|
+
1. **Clears existing connection**: Calls `/api/v1/oauth/google/revoke` to remove old credentials (allows switching accounts)
|
|
369
|
+
2. **Initiates OAuth flow**: Calls `/api/v1/oauth/google/init` with your `OPENONION_API_KEY`
|
|
370
|
+
3. **Opens browser**: Launches Google's OAuth consent screen with required scopes
|
|
371
|
+
4. **Polls for completion**: Checks `/api/v1/oauth/google/status` every 5 seconds
|
|
372
|
+
5. **Retrieves credentials**: Gets tokens from `/api/v1/oauth/google/credentials`
|
|
373
|
+
6. **Saves locally**: Writes credentials to `.env` files with secure permissions
|
|
374
|
+
|
|
375
|
+
The backend handles:
|
|
376
|
+
- OAuth 2.0 authorization code flow
|
|
377
|
+
- Token refresh logic
|
|
378
|
+
- Secure storage of credentials
|
|
379
|
+
- Association with your OpenOnion account
|
|
380
|
+
|
|
381
|
+
---
|
|
382
|
+
|
|
383
|
+
## Environment Variables Reference
|
|
384
|
+
|
|
385
|
+
After running `co auth google`, these variables are available:
|
|
386
|
+
|
|
387
|
+
```bash
|
|
388
|
+
GOOGLE_ACCESS_TOKEN # Short-lived token for API calls (expires in 1 hour)
|
|
389
|
+
GOOGLE_REFRESH_TOKEN # Long-lived token for getting new access tokens
|
|
390
|
+
GOOGLE_TOKEN_EXPIRES_AT # ISO timestamp when access token expires
|
|
391
|
+
GOOGLE_SCOPES # Comma-separated list of granted scopes
|
|
392
|
+
GOOGLE_EMAIL # Your Google account email address
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
**Usage in code:**
|
|
396
|
+
|
|
397
|
+
```python
|
|
398
|
+
import os
|
|
399
|
+
|
|
400
|
+
# Check if Google OAuth is configured
|
|
401
|
+
if os.getenv("GOOGLE_ACCESS_TOKEN"):
|
|
402
|
+
print(f"Connected as: {os.getenv('GOOGLE_EMAIL')}")
|
|
403
|
+
else:
|
|
404
|
+
print("Not connected. Run: co auth google")
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
---
|
|
408
|
+
|
|
409
|
+
## Related
|
|
410
|
+
|
|
411
|
+
- [CLI Auth](cli-auth.md) - Authenticate with OpenOnion first
|
|
412
|
+
- [Send Email](send_email.md) - Send emails via OpenOnion's email service
|
|
413
|
+
- [Get Emails](get_emails.md) - Read emails from your OpenOnion inbox
|
|
414
|
+
- [Global .co Directory](co-directory-structure.md) - Where credentials are stored
|
|
415
|
+
|
|
416
|
+
---
|
|
417
|
+
|
|
418
|
+
## Privacy Policy & Terms
|
|
419
|
+
|
|
420
|
+
By using `co auth google`, you agree to:
|
|
421
|
+
- [OpenOnion Privacy Policy](https://o.openonion.ai/privacy)
|
|
422
|
+
- [OpenOnion Terms of Service](https://o.openonion.ai/terms)
|
|
423
|
+
- [Google API Services User Data Policy](https://developers.google.com/terms/api-services-user-data-policy)
|
|
424
|
+
|
|
425
|
+
We only use your Google data for the purposes you authorize. We never:
|
|
426
|
+
- Sell your data
|
|
427
|
+
- Share with third parties (except Google)
|
|
428
|
+
- Store more than necessary
|
|
429
|
+
- Access data beyond requested scopes
|
|
430
|
+
|
|
431
|
+
You can revoke access at any time.
|