connectonion 0.6.1__tar.gz → 0.6.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {connectonion-0.6.1 → connectonion-0.6.3}/.gitignore +1 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/PKG-INFO +10 -3
- {connectonion-0.6.1 → connectonion-0.6.3}/README.md +9 -2
- connectonion-0.6.3/connectonion/__init__.py +118 -0
- connectonion-0.6.3/connectonion/cli/__init__.py +13 -0
- connectonion-0.6.3/connectonion/cli/browser_agent/__init__.py +15 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/cli/browser_agent/browser.py +95 -142
- connectonion-0.6.3/connectonion/cli/browser_agent/element_finder.py +147 -0
- connectonion-0.6.3/connectonion/cli/browser_agent/highlight_screenshot.py +182 -0
- connectonion-0.6.3/connectonion/cli/browser_agent/prompt.md +190 -0
- connectonion-0.6.3/connectonion/cli/browser_agent/prompts/element_matcher.md +59 -0
- connectonion-0.6.3/connectonion/cli/browser_agent/prompts/form_filler.md +19 -0
- connectonion-0.6.3/connectonion/cli/browser_agent/prompts/scroll_strategy.md +36 -0
- connectonion-0.6.3/connectonion/cli/browser_agent/scripts/extract_elements.js +126 -0
- connectonion-0.6.3/connectonion/cli/browser_agent/scroll.py +145 -0
- connectonion-0.6.3/connectonion/cli/co_ai/__init__.py +6 -0
- connectonion-0.6.3/connectonion/cli/co_ai/agent.py +87 -0
- connectonion-0.6.3/connectonion/cli/co_ai/agents/__init__.py +5 -0
- connectonion-0.6.3/connectonion/cli/co_ai/agents/registry.py +57 -0
- connectonion-0.6.3/connectonion/cli/co_ai/commands/__init__.py +45 -0
- connectonion-0.6.3/connectonion/cli/co_ai/commands/compact.py +173 -0
- connectonion-0.6.3/connectonion/cli/co_ai/commands/cost.py +77 -0
- connectonion-0.6.3/connectonion/cli/co_ai/commands/export.py +60 -0
- connectonion-0.6.3/connectonion/cli/co_ai/commands/help.py +80 -0
- connectonion-0.6.3/connectonion/cli/co_ai/commands/init.py +101 -0
- connectonion-0.6.3/connectonion/cli/co_ai/commands/sessions.py +55 -0
- connectonion-0.6.3/connectonion/cli/co_ai/commands/tasks.py +63 -0
- connectonion-0.6.3/connectonion/cli/co_ai/commands/undo.py +103 -0
- connectonion-0.6.3/connectonion/cli/co_ai/context.py +127 -0
- connectonion-0.6.3/connectonion/cli/co_ai/main.py +52 -0
- connectonion-0.6.3/connectonion/cli/co_ai/plugins/__init__.py +6 -0
- connectonion-0.6.3/connectonion/cli/co_ai/plugins/reminder.py +76 -0
- connectonion-0.6.3/connectonion/cli/co_ai/plugins/shell_approval.py +105 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/agents/explore.md +79 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/agents/plan.md +60 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/assembler.py +303 -0
- connectonion-0.6.1/connectonion/cli/docs/co-vibecoding-principles-docs-contexts-all-in-one.md → connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/README.md +26 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/api.md +457 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/cli/auth.md +46 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/cli/browser.md +235 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/cli/copy.md +184 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/cli/create.md +335 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/cli/init.md +431 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/co-directory-structure.md +214 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/concepts/agent.md +1078 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/concepts/events.md +816 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/concepts/llm_do.md +256 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/concepts/max_iterations.md +362 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/concepts/models.md +641 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/concepts/plugins.md +100 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/concepts/prompts.md +122 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/concepts/tools.md +512 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/concepts/transcribe.md +156 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/concepts/trust.md +291 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/debug/auto_debug.md +1026 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/debug/console.md +129 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/debug/eval-format.md +178 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/debug/eval.md +230 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/debug/exceptions.md +307 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/debug/log.md +117 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/debug/xray.md +215 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/design-decisions/001-choosing-input-method.md +202 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/design-decisions/002-choosing-llm-function-name.md +202 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/design-decisions/003-choosing-trust-keyword.md +141 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/design-decisions/004-cli-create-flow.md +117 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/design-decisions/005-designing-agent-network-protocol.md +503 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/design-decisions/006-agent-address-format.md +305 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/design-decisions/007-authentication-backend-design.md +240 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/design-decisions/008-naming-is-hard.md +228 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/design-decisions/009-why-connect-function.md +167 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/design-decisions/010-cli-ux-progressive-disclosure.md +176 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/design-decisions/011-global-config-identity-management.md +357 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/design-decisions/012-tool-execution-separation.md +259 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/design-decisions/013-debug-and-logging-design.md +253 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/design-decisions/014-hook-system-design.md +510 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/design-decisions/015-interactive-auto-debug-design.md +837 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/design-decisions/016-why-no-zero-knowledge-proofs.md +358 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/design-decisions/017-session-logging-and-eval-format.md +120 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/design-decisions/018-event-api-naming.md +274 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/design-decisions/019-agent-lifecycle-design.md +655 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/design-decisions/020-trust-system-and-network-architecture.md +503 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/design-decisions/021-task-storage-jsonl-design.md +496 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/design-decisions/022-raw-asgi-implementation.md +273 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/examples/agent_reasoning.md +62 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/examples/atomic_tools.md +24 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/examples/load_guide.md +18 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/examples.md +0 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/hook-system-options.md +364 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/index.md +162 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/integrations/auth.md +450 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/integrations/google.md +431 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/integrations/microsoft.md +370 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/network/connect.md +543 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/network/connection.md +538 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/network/deploy.md +123 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/network/host.md +1049 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/network/protocol/agent-relay-protocol.md +495 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/network/protocol/announce-message.md +115 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/principles.md +124 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/quickstart.md +261 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/roadmap.md +81 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/templates/meta-agent.md +152 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/templates/minimal.md +105 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/templates/playwright.md +130 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/templates/web-research.md +144 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/tui/chat.md +181 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/tui/divider.md +63 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/tui/dropdown.md +83 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/tui/footer.md +44 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/tui/fuzzy.md +68 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/tui/input.md +84 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/tui/keys.md +77 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/tui/pick.md +71 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/tui/providers.md +89 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/tui/status_bar.md +67 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/useful_plugins/calendar_plugin.md +68 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/useful_plugins/eval.md +89 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/useful_plugins/gmail_plugin.md +68 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/useful_plugins/image_result_formatter.md +74 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/useful_plugins/re_act.md +86 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/useful_plugins/shell_approval.md +69 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/useful_tools/diff_writer.md +138 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/useful_tools/get_emails.md +499 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/useful_tools/gmail.md +135 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/useful_tools/google_calendar.md +106 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/useful_tools/memory.md +486 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/useful_tools/microsoft_calendar.md +106 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/useful_tools/outlook.md +120 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/useful_tools/send_email.md +403 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/useful_tools/shell.md +95 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/useful_tools/slash_command.md +96 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/useful_tools/terminal.md +97 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/useful_tools/todo_list.md +252 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/useful_tools/web_fetch.md +130 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/vibe-coding-guide.md +97 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion/windows-support.md +258 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/main.md +247 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/reminders/plan_mode.md +34 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/summarization.md +55 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/tools/ask_user.md +61 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/tools/background.md +57 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/tools/edit.md +90 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/tools/glob.md +52 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/tools/grep.md +55 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/tools/plan_mode.md +80 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/tools/read.md +40 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/tools/shell.md +67 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/tools/task.md +51 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/tools/todo.md +139 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/tools/write.md +47 -0
- connectonion-0.6.3/connectonion/cli/co_ai/prompts/workflow.md +89 -0
- connectonion-0.6.3/connectonion/cli/co_ai/reminders.py +159 -0
- connectonion-0.6.3/connectonion/cli/co_ai/sessions.py +110 -0
- connectonion-0.6.3/connectonion/cli/co_ai/skills/__init__.py +37 -0
- connectonion-0.6.3/connectonion/cli/co_ai/skills/builtin/commit/SKILL.md +63 -0
- connectonion-0.6.3/connectonion/cli/co_ai/skills/builtin/review-pr/SKILL.md +76 -0
- connectonion-0.6.3/connectonion/cli/co_ai/skills/loader.py +166 -0
- connectonion-0.6.3/connectonion/cli/co_ai/skills/tool.py +46 -0
- connectonion-0.6.3/connectonion/cli/co_ai/tools/__init__.py +92 -0
- connectonion-0.6.3/connectonion/cli/co_ai/tools/ask_user.py +35 -0
- connectonion-0.6.3/connectonion/cli/co_ai/tools/background.py +201 -0
- connectonion-0.6.3/connectonion/cli/co_ai/tools/diff_writer.py +291 -0
- connectonion-0.6.3/connectonion/cli/co_ai/tools/edit.py +89 -0
- connectonion-0.6.3/connectonion/cli/co_ai/tools/glob.py +84 -0
- connectonion-0.6.3/connectonion/cli/co_ai/tools/grep.py +158 -0
- connectonion-0.6.3/connectonion/cli/co_ai/tools/load_guide.py +23 -0
- connectonion-0.6.3/connectonion/cli/co_ai/tools/multi_edit.py +116 -0
- connectonion-0.6.3/connectonion/cli/co_ai/tools/plan_mode.py +172 -0
- connectonion-0.6.3/connectonion/cli/co_ai/tools/read.py +67 -0
- connectonion-0.6.3/connectonion/cli/co_ai/tools/task.py +59 -0
- connectonion-0.6.3/connectonion/cli/co_ai/tools/todo_list.py +159 -0
- connectonion-0.6.3/connectonion/cli/co_ai/tools/write.py +126 -0
- connectonion-0.6.3/connectonion/cli/commands/__init__.py +11 -0
- connectonion-0.6.3/connectonion/cli/commands/ai_commands.py +34 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/cli/commands/copy_commands.py +55 -6
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/cli/commands/create.py +20 -17
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/cli/commands/init.py +19 -22
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/cli/commands/project_cmd_lib.py +15 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/cli/main.py +11 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/console.py +15 -1
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/core/__init__.py +10 -1
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/core/agent.py +37 -16
- connectonion-0.6.3/connectonion/core/exceptions.py +74 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/core/llm.py +54 -6
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/core/tool_executor.py +32 -31
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/core/tool_factory.py +47 -10
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/debug/__init__.py +10 -1
- connectonion-0.6.3/connectonion/debug/debug_explainer/__init__.py +19 -0
- connectonion-0.6.3/connectonion/debug/execution_analyzer/__init__.py +18 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/debug/execution_analyzer/execution_analysis.py +5 -2
- connectonion-0.6.3/connectonion/debug/runtime_inspector/__init__.py +22 -0
- connectonion-0.6.3/connectonion/docs/.package-ignore +6 -0
- connectonion-0.6.3/connectonion/docs/README.md +2036 -0
- connectonion-0.6.3/connectonion/docs/api.md +457 -0
- connectonion-0.6.3/connectonion/docs/archive/001-ai-agent-is-just-prompt-plus-function.md +249 -0
- connectonion-0.6.3/connectonion/docs/archive/README.md +53 -0
- connectonion-0.6.3/connectonion/docs/archive/archive/consolidation-plan.md +72 -0
- connectonion-0.6.3/connectonion/docs/archive/archive/core-principles-extracted.md +239 -0
- connectonion-0.6.3/connectonion/docs/archive/archive/master-principles.md +222 -0
- connectonion-0.6.3/connectonion/docs/archive/archive/principles.md +293 -0
- connectonion-0.6.3/connectonion/docs/archive/archive/simplicity-principles.md +221 -0
- connectonion-0.6.3/connectonion/docs/archive/attack-defense-insights.md +410 -0
- connectonion-0.6.3/connectonion/docs/archive/business-model.md +305 -0
- connectonion-0.6.3/connectonion/docs/archive/core-principles-unified.md +190 -0
- connectonion-0.6.3/connectonion/docs/archive/discussion-journey.md +178 -0
- connectonion-0.6.3/connectonion/docs/archive/economic-analysis.md +323 -0
- connectonion-0.6.3/connectonion/docs/archive/features/01-share-and-find.md +256 -0
- connectonion-0.6.3/connectonion/docs/archive/features/02-agent-authentication.md +93 -0
- connectonion-0.6.3/connectonion/docs/archive/features/03-test-before-trust.md +71 -0
- connectonion-0.6.3/connectonion/docs/archive/features/06-reliability-and-offline.md +197 -0
- connectonion-0.6.3/connectonion/docs/archive/features/README.md +46 -0
- connectonion-0.6.3/connectonion/docs/archive/features-roadmap.md +247 -0
- connectonion-0.6.3/connectonion/docs/archive/mcp-comparison-insights.md +215 -0
- connectonion-0.6.3/connectonion/docs/archive/migration-strategy.md +571 -0
- connectonion-0.6.3/connectonion/docs/archive/mini-whitepaper.md +293 -0
- connectonion-0.6.3/connectonion/docs/archive/network-protocol.md +394 -0
- connectonion-0.6.3/connectonion/docs/archive/semantic-revolution.md +367 -0
- connectonion-0.6.3/connectonion/docs/archive/technical-architecture.md +453 -0
- connectonion-0.6.3/connectonion/docs/archive/the-semantic-insight.md +207 -0
- connectonion-0.6.3/connectonion/docs/archive/threat-model.md +164 -0
- connectonion-0.6.3/connectonion/docs/cli/README.md +805 -0
- connectonion-0.6.3/connectonion/docs/cli/auth.md +46 -0
- connectonion-0.6.3/connectonion/docs/cli/browser.md +235 -0
- connectonion-0.6.3/connectonion/docs/cli/copy.md +232 -0
- connectonion-0.6.3/connectonion/docs/cli/create.md +335 -0
- connectonion-0.6.3/connectonion/docs/cli/init.md +431 -0
- connectonion-0.6.3/connectonion/docs/co-directory-structure.md +214 -0
- connectonion-0.6.3/connectonion/docs/concepts/agent.md +1078 -0
- connectonion-0.6.3/connectonion/docs/concepts/events.md +699 -0
- connectonion-0.6.3/connectonion/docs/concepts/llm_do.md +256 -0
- connectonion-0.6.3/connectonion/docs/concepts/max_iterations.md +362 -0
- connectonion-0.6.3/connectonion/docs/concepts/models.md +641 -0
- connectonion-0.6.3/connectonion/docs/concepts/plugins.md +100 -0
- connectonion-0.6.3/connectonion/docs/concepts/prompts.md +122 -0
- connectonion-0.6.3/connectonion/docs/concepts/session.md +428 -0
- connectonion-0.6.3/connectonion/docs/concepts/tools.md +512 -0
- connectonion-0.6.3/connectonion/docs/concepts/transcribe.md +156 -0
- connectonion-0.6.3/connectonion/docs/concepts/trust.md +291 -0
- connectonion-0.6.3/connectonion/docs/connectonion.md +1256 -0
- connectonion-0.6.3/connectonion/docs/debug/README.md +18 -0
- connectonion-0.6.3/connectonion/docs/debug/auto_debug.md +1026 -0
- connectonion-0.6.3/connectonion/docs/debug/console.md +129 -0
- connectonion-0.6.3/connectonion/docs/debug/eval-format.md +178 -0
- connectonion-0.6.3/connectonion/docs/debug/eval.md +230 -0
- connectonion-0.6.3/connectonion/docs/debug/exceptions.md +307 -0
- connectonion-0.6.3/connectonion/docs/debug/log.md +117 -0
- connectonion-0.6.3/connectonion/docs/debug/xray.md +215 -0
- connectonion-0.6.3/connectonion/docs/design-decisions/001-choosing-input-method.md +202 -0
- connectonion-0.6.3/connectonion/docs/design-decisions/002-choosing-llm-function-name.md +202 -0
- connectonion-0.6.3/connectonion/docs/design-decisions/003-choosing-trust-keyword.md +141 -0
- connectonion-0.6.3/connectonion/docs/design-decisions/004-cli-create-flow.md +117 -0
- connectonion-0.6.3/connectonion/docs/design-decisions/005-designing-agent-network-protocol.md +503 -0
- connectonion-0.6.3/connectonion/docs/design-decisions/006-agent-address-format.md +305 -0
- connectonion-0.6.3/connectonion/docs/design-decisions/007-authentication-backend-design.md +240 -0
- connectonion-0.6.3/connectonion/docs/design-decisions/008-naming-is-hard.md +228 -0
- connectonion-0.6.3/connectonion/docs/design-decisions/009-why-connect-function.md +167 -0
- connectonion-0.6.3/connectonion/docs/design-decisions/010-cli-ux-progressive-disclosure.md +176 -0
- connectonion-0.6.3/connectonion/docs/design-decisions/011-global-config-identity-management.md +357 -0
- connectonion-0.6.3/connectonion/docs/design-decisions/012-tool-execution-separation.md +259 -0
- connectonion-0.6.3/connectonion/docs/design-decisions/013-debug-and-logging-design.md +253 -0
- connectonion-0.6.3/connectonion/docs/design-decisions/014-hook-system-design.md +510 -0
- connectonion-0.6.3/connectonion/docs/design-decisions/015-interactive-auto-debug-design.md +837 -0
- connectonion-0.6.3/connectonion/docs/design-decisions/016-why-no-zero-knowledge-proofs.md +358 -0
- connectonion-0.6.3/connectonion/docs/design-decisions/017-session-logging-and-eval-format.md +120 -0
- connectonion-0.6.3/connectonion/docs/design-decisions/018-event-api-naming.md +274 -0
- connectonion-0.6.3/connectonion/docs/design-decisions/019-agent-lifecycle-design.md +655 -0
- connectonion-0.6.3/connectonion/docs/design-decisions/020-trust-system-and-network-architecture.md +503 -0
- connectonion-0.6.3/connectonion/docs/design-decisions/021-task-storage-jsonl-design.md +496 -0
- connectonion-0.6.3/connectonion/docs/design-decisions/022-raw-asgi-implementation.md +273 -0
- connectonion-0.6.3/connectonion/docs/examples.md +0 -0
- connectonion-0.6.3/connectonion/docs/hook-system-options.md +364 -0
- connectonion-0.6.3/connectonion/docs/integrations/README.md +12 -0
- connectonion-0.6.3/connectonion/docs/integrations/auth.md +450 -0
- connectonion-0.6.3/connectonion/docs/integrations/google.md +431 -0
- connectonion-0.6.3/connectonion/docs/integrations/microsoft.md +370 -0
- connectonion-0.6.3/connectonion/docs/network/README.md +14 -0
- connectonion-0.6.3/connectonion/docs/network/connect.md +629 -0
- connectonion-0.6.3/connectonion/docs/network/deploy.md +124 -0
- connectonion-0.6.3/connectonion/docs/network/host.md +1087 -0
- connectonion-0.6.3/connectonion/docs/network/io.md +538 -0
- connectonion-0.6.3/connectonion/docs/network/protocol/agent-relay-protocol.md +495 -0
- connectonion-0.6.3/connectonion/docs/network/protocol/announce-message.md +115 -0
- connectonion-0.6.3/connectonion/docs/principles.md +124 -0
- connectonion-0.6.3/connectonion/docs/quickstart.md +261 -0
- connectonion-0.6.3/connectonion/docs/roadmap.md +81 -0
- connectonion-0.6.3/connectonion/docs/templates/README.md +77 -0
- connectonion-0.6.3/connectonion/docs/templates/meta-agent.md +152 -0
- connectonion-0.6.3/connectonion/docs/templates/minimal.md +105 -0
- connectonion-0.6.3/connectonion/docs/templates/playwright.md +130 -0
- connectonion-0.6.3/connectonion/docs/templates/web-research.md +144 -0
- connectonion-0.6.3/connectonion/docs/tui/README.md +95 -0
- connectonion-0.6.3/connectonion/docs/tui/chat.md +181 -0
- connectonion-0.6.3/connectonion/docs/tui/divider.md +63 -0
- connectonion-0.6.3/connectonion/docs/tui/dropdown.md +83 -0
- connectonion-0.6.3/connectonion/docs/tui/footer.md +44 -0
- connectonion-0.6.3/connectonion/docs/tui/fuzzy.md +68 -0
- connectonion-0.6.3/connectonion/docs/tui/input.md +84 -0
- connectonion-0.6.3/connectonion/docs/tui/keys.md +77 -0
- connectonion-0.6.3/connectonion/docs/tui/pick.md +71 -0
- connectonion-0.6.3/connectonion/docs/tui/providers.md +89 -0
- connectonion-0.6.3/connectonion/docs/tui/status_bar.md +67 -0
- connectonion-0.6.3/connectonion/docs/useful_plugins/README.md +160 -0
- connectonion-0.6.3/connectonion/docs/useful_plugins/calendar_plugin.md +68 -0
- connectonion-0.6.3/connectonion/docs/useful_plugins/eval.md +89 -0
- connectonion-0.6.3/connectonion/docs/useful_plugins/gmail_plugin.md +68 -0
- connectonion-0.6.3/connectonion/docs/useful_plugins/image_result_formatter.md +74 -0
- connectonion-0.6.3/connectonion/docs/useful_plugins/re_act.md +86 -0
- connectonion-0.6.3/connectonion/docs/useful_plugins/shell_approval.md +69 -0
- connectonion-0.6.3/connectonion/docs/useful_plugins/system_reminder.md +210 -0
- connectonion-0.6.3/connectonion/docs/useful_prompts/README.md +127 -0
- connectonion-0.6.3/connectonion/docs/useful_prompts/coding_agent.md +214 -0
- connectonion-0.6.3/connectonion/docs/useful_tools/README.md +81 -0
- connectonion-0.6.3/connectonion/docs/useful_tools/ask_user.md +103 -0
- connectonion-0.6.3/connectonion/docs/useful_tools/diff_writer.md +158 -0
- connectonion-0.6.3/connectonion/docs/useful_tools/get_emails.md +519 -0
- connectonion-0.6.3/connectonion/docs/useful_tools/gmail.md +155 -0
- connectonion-0.6.3/connectonion/docs/useful_tools/google_calendar.md +126 -0
- connectonion-0.6.3/connectonion/docs/useful_tools/memory.md +506 -0
- connectonion-0.6.3/connectonion/docs/useful_tools/microsoft_calendar.md +126 -0
- connectonion-0.6.3/connectonion/docs/useful_tools/outlook.md +140 -0
- connectonion-0.6.3/connectonion/docs/useful_tools/send_email.md +423 -0
- connectonion-0.6.3/connectonion/docs/useful_tools/shell.md +115 -0
- connectonion-0.6.3/connectonion/docs/useful_tools/slash_command.md +116 -0
- connectonion-0.6.3/connectonion/docs/useful_tools/terminal.md +115 -0
- connectonion-0.6.3/connectonion/docs/useful_tools/todo_list.md +272 -0
- connectonion-0.6.3/connectonion/docs/useful_tools/web_fetch.md +150 -0
- connectonion-0.6.3/connectonion/docs/vibe-coding-guide.md +97 -0
- connectonion-0.6.3/connectonion/docs/windows-support.md +258 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/logger.py +3 -3
- connectonion-0.6.3/connectonion/network/__init__.py +50 -0
- connectonion-0.6.3/connectonion/network/asgi/__init__.py +81 -0
- connectonion-0.6.3/connectonion/network/asgi/http.py +205 -0
- connectonion-0.6.3/connectonion/network/asgi/websocket.py +217 -0
- connectonion-0.6.3/connectonion/network/connect.py +319 -0
- connectonion-0.6.3/connectonion/network/host/__init__.py +59 -0
- connectonion-0.6.3/connectonion/network/host/auth.py +191 -0
- connectonion-0.6.3/connectonion/network/host/routes.py +135 -0
- connectonion-0.6.3/connectonion/network/host/server.py +289 -0
- connectonion-0.6.3/connectonion/network/host/session.py +78 -0
- connectonion-0.6.3/connectonion/network/io/__init__.py +21 -0
- connectonion-0.6.1/connectonion/network/connection.py → connectonion-0.6.3/connectonion/network/io/base.py +17 -42
- connectonion-0.6.3/connectonion/network/io/websocket.py +55 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/network/relay.py +37 -16
- connectonion-0.6.3/connectonion/network/trust/__init__.py +30 -0
- connectonion-0.6.3/connectonion/network/trust/factory.py +138 -0
- connectonion-0.6.1/connectonion/network/trust_agents.py → connectonion-0.6.3/connectonion/network/trust/prompts.py +3 -3
- connectonion-0.6.1/connectonion/network/trust_functions.py → connectonion-0.6.3/connectonion/network/trust/tools.py +2 -2
- connectonion-0.6.3/connectonion/prompt_files/__init__.py +11 -0
- connectonion-0.6.3/connectonion/prompt_files/react_acknowledge.md +26 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/prompts.py +10 -1
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/tui/chat.py +10 -1
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/tui/divider.py +10 -1
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/tui/dropdown.py +10 -1
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/tui/footer.py +8 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/tui/fuzzy.py +11 -1
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/tui/input.py +118 -70
- connectonion-0.6.3/connectonion/tui/keys.py +162 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/tui/providers.py +11 -1
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/tui/status_bar.py +10 -1
- connectonion-0.6.3/connectonion/useful_events_handlers/__init__.py +24 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/useful_events_handlers/reflect.py +19 -4
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/useful_plugins/__init__.py +2 -1
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/useful_plugins/eval.py +2 -2
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/useful_plugins/gmail_plugin.py +3 -3
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/useful_plugins/image_result_formatter.py +3 -3
- connectonion-0.6.3/connectonion/useful_plugins/re_act.py +164 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/useful_plugins/shell_approval.py +2 -2
- connectonion-0.6.3/connectonion/useful_plugins/system_reminder.py +103 -0
- connectonion-0.6.3/connectonion/useful_plugins/ui_stream.py +49 -0
- connectonion-0.6.3/connectonion/useful_prompts/README.md +61 -0
- connectonion-0.6.3/connectonion/useful_prompts/__init__.py +45 -0
- connectonion-0.6.3/connectonion/useful_prompts/coding_agent/README.md +106 -0
- connectonion-0.6.3/connectonion/useful_prompts/coding_agent/assembler.py +123 -0
- connectonion-0.6.3/connectonion/useful_prompts/coding_agent/prompts/main.md +227 -0
- connectonion-0.6.3/connectonion/useful_prompts/coding_agent/prompts/tools/ask_user.md +61 -0
- connectonion-0.6.3/connectonion/useful_prompts/coding_agent/prompts/tools/background.md +57 -0
- connectonion-0.6.3/connectonion/useful_prompts/coding_agent/prompts/tools/edit.md +90 -0
- connectonion-0.6.3/connectonion/useful_prompts/coding_agent/prompts/tools/glob.md +52 -0
- connectonion-0.6.3/connectonion/useful_prompts/coding_agent/prompts/tools/grep.md +55 -0
- connectonion-0.6.3/connectonion/useful_prompts/coding_agent/prompts/tools/plan_mode.md +80 -0
- connectonion-0.6.3/connectonion/useful_prompts/coding_agent/prompts/tools/read.md +40 -0
- connectonion-0.6.3/connectonion/useful_prompts/coding_agent/prompts/tools/shell.md +67 -0
- connectonion-0.6.3/connectonion/useful_prompts/coding_agent/prompts/tools/task.md +51 -0
- connectonion-0.6.3/connectonion/useful_prompts/coding_agent/prompts/tools/todo.md +139 -0
- connectonion-0.6.3/connectonion/useful_prompts/coding_agent/prompts/tools/write.md +48 -0
- connectonion-0.6.3/connectonion/useful_prompts/system-reminders/security-warning.md +14 -0
- connectonion-0.6.3/connectonion/useful_prompts/system-reminders/test-reminder.md +11 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/useful_tools/__init__.py +31 -4
- connectonion-0.6.3/connectonion/useful_tools/ask_user.py +35 -0
- connectonion-0.6.3/connectonion/useful_tools/bash.py +69 -0
- connectonion-0.6.3/connectonion/useful_tools/diff_writer.py +284 -0
- connectonion-0.6.3/connectonion/useful_tools/edit.py +102 -0
- connectonion-0.6.3/connectonion/useful_tools/glob_files.py +97 -0
- connectonion-0.6.3/connectonion/useful_tools/grep_files.py +171 -0
- connectonion-0.6.3/connectonion/useful_tools/multi_edit.py +116 -0
- connectonion-0.6.3/connectonion/useful_tools/read_file.py +73 -0
- connectonion-0.6.3/connectonion/useful_tools/shell.py +102 -0
- connectonion-0.6.3/connectonion/useful_tools/write_file.py +129 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/pyproject.toml +11 -1
- connectonion-0.6.1/connectonion/__init__.py +0 -81
- connectonion-0.6.1/connectonion/cli/__init__.py +0 -3
- connectonion-0.6.1/connectonion/cli/browser_agent/__init__.py +0 -5
- connectonion-0.6.1/connectonion/cli/browser_agent/prompt.md +0 -107
- connectonion-0.6.1/connectonion/cli/browser_agent/scroll_strategies.py +0 -276
- connectonion-0.6.1/connectonion/cli/commands/__init__.py +0 -1
- connectonion-0.6.1/connectonion/debug/debug_explainer/__init__.py +0 -10
- connectonion-0.6.1/connectonion/debug/execution_analyzer/__init__.py +0 -9
- connectonion-0.6.1/connectonion/debug/runtime_inspector/__init__.py +0 -13
- connectonion-0.6.1/connectonion/network/__init__.py +0 -37
- connectonion-0.6.1/connectonion/network/asgi.py +0 -407
- connectonion-0.6.1/connectonion/network/connect.py +0 -272
- connectonion-0.6.1/connectonion/network/host.py +0 -616
- connectonion-0.6.1/connectonion/network/trust.py +0 -166
- connectonion-0.6.1/connectonion/prompt_files/__init__.py +0 -1
- connectonion-0.6.1/connectonion/tui/keys.py +0 -35
- connectonion-0.6.1/connectonion/useful_events_handlers/__init__.py +0 -16
- connectonion-0.6.1/connectonion/useful_plugins/re_act.py +0 -78
- connectonion-0.6.1/connectonion/useful_plugins/ui_stream.py +0 -164
- connectonion-0.6.1/connectonion/useful_tools/diff_writer.py +0 -192
- connectonion-0.6.1/connectonion/useful_tools/shell.py +0 -97
- connectonion-0.6.1/docs/README.md +0 -113
- connectonion-0.6.1/examples/browser-agent/README.md +0 -101
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/address.py +0 -0
- {connectonion-0.6.1/docs → connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion}/cli/README.md +0 -0
- {connectonion-0.6.1/connectonion/cli/docs → connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion}/connectonion.md +0 -0
- {connectonion-0.6.1/docs → connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion}/debug/README.md +0 -0
- {connectonion-0.6.1/docs → connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion}/integrations/README.md +0 -0
- {connectonion-0.6.1/docs → connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion}/network/README.md +0 -0
- {connectonion-0.6.1/docs → connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion}/templates/README.md +0 -0
- {connectonion-0.6.1/docs → connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion}/tui/README.md +0 -0
- {connectonion-0.6.1/docs → connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion}/useful_plugins/README.md +0 -0
- {connectonion-0.6.1/docs → connectonion-0.6.3/connectonion/cli/co_ai/prompts/connectonion}/useful_tools/README.md +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/cli/commands/auth_commands.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/cli/commands/browser_commands.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/cli/commands/deploy_commands.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/cli/commands/doctor_commands.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/cli/commands/eval_commands.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/cli/commands/reset_commands.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/cli/commands/status_commands.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/cli/docs.md +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/cli/templates/meta-agent/README.md +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/cli/templates/meta-agent/agent.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/cli/templates/meta-agent/prompts/answer_prompt.md +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/cli/templates/meta-agent/prompts/docs_retrieve_prompt.md +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/cli/templates/meta-agent/prompts/metagent.md +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/cli/templates/meta-agent/prompts/think_prompt.md +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/cli/templates/minimal/README.md +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/cli/templates/minimal/agent.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/cli/templates/playwright/README.md +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/cli/templates/playwright/agent.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/cli/templates/playwright/prompt.md +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/cli/templates/playwright/requirements.txt +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/cli/templates/web-research/agent.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/core/events.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/core/tool_registry.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/core/usage.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/debug/auto_debug.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/debug/auto_debug_exception.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/debug/auto_debug_ui.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/debug/debug_explainer/explain_agent.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/debug/debug_explainer/explain_context.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/debug/debug_explainer/explainer_prompt.md +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/debug/debug_explainer/root_cause_analysis_prompt.md +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/debug/decorators.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/debug/execution_analyzer/execution_analysis_prompt.md +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/debug/runtime_inspector/agent.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/debug/runtime_inspector/prompts/debug_assistant.md +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/debug/runtime_inspector/runtime_inspector.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/debug/xray.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/llm_do.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/network/announce.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/network/static/docs.html +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/prompt_files/analyze_contact.md +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/prompt_files/eval_expected.md +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/prompt_files/react_evaluate.md +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/prompt_files/react_plan.md +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/prompt_files/reflect.md +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/transcribe.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/tui/__init__.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/tui/pick.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/useful_plugins/calendar_plugin.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/useful_tools/get_emails.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/useful_tools/gmail.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/useful_tools/google_calendar.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/useful_tools/memory.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/useful_tools/microsoft_calendar.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/useful_tools/outlook.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/useful_tools/send_email.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/useful_tools/slash_command.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/useful_tools/terminal.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/useful_tools/todo_list.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/connectonion/useful_tools/web_fetch.py +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/examples/README.md +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/examples/email-agent/README.md +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/examples/simple-agent/README.md +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/prompts/README.md +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/prompts/formats/README.md +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/tests/README.md +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/tests/cli/README.md +0 -0
- {connectonion-0.6.1 → connectonion-0.6.3}/tests/cli/aws/README.md +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: connectonion
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.3
|
|
4
4
|
Summary: A simple Python framework for creating AI agents with behavior tracking
|
|
5
5
|
Project-URL: Homepage, https://github.com/openonion/connectonion
|
|
6
6
|
Project-URL: Documentation, https://docs.connectonion.com
|
|
@@ -334,9 +334,16 @@ analyst = Agent("analyst", tools=[analyze], plugins=[reflection])
|
|
|
334
334
|
- **Reusable capabilities**: Package event handlers into bundles
|
|
335
335
|
- **Simple pattern**: A plugin is just a list of event handlers
|
|
336
336
|
- **Easy composition**: Combine multiple plugins together
|
|
337
|
-
- **Built-in
|
|
337
|
+
- **Built-in plugins**: re_act, eval, system_reminder, image_result_formatter, and more
|
|
338
338
|
|
|
339
|
-
|
|
339
|
+
**Built-in plugins** are ready to use:
|
|
340
|
+
```python
|
|
341
|
+
from connectonion.useful_plugins import re_act, system_reminder
|
|
342
|
+
|
|
343
|
+
agent = Agent("assistant", tools=[search], plugins=[re_act, system_reminder])
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
[Learn more about plugins](docs/plugin.md) | [Built-in plugins](docs/useful_plugins/)
|
|
340
347
|
|
|
341
348
|
## 🔧 Core Concepts
|
|
342
349
|
|
|
@@ -281,9 +281,16 @@ analyst = Agent("analyst", tools=[analyze], plugins=[reflection])
|
|
|
281
281
|
- **Reusable capabilities**: Package event handlers into bundles
|
|
282
282
|
- **Simple pattern**: A plugin is just a list of event handlers
|
|
283
283
|
- **Easy composition**: Combine multiple plugins together
|
|
284
|
-
- **Built-in
|
|
284
|
+
- **Built-in plugins**: re_act, eval, system_reminder, image_result_formatter, and more
|
|
285
285
|
|
|
286
|
-
|
|
286
|
+
**Built-in plugins** are ready to use:
|
|
287
|
+
```python
|
|
288
|
+
from connectonion.useful_plugins import re_act, system_reminder
|
|
289
|
+
|
|
290
|
+
agent = Agent("assistant", tools=[search], plugins=[re_act, system_reminder])
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
[Learn more about plugins](docs/plugin.md) | [Built-in plugins](docs/useful_plugins/)
|
|
287
294
|
|
|
288
295
|
## 🔧 Core Concepts
|
|
289
296
|
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Purpose: Main package entry point exposing public API for ConnectOnion framework
|
|
3
|
+
LLM-Note:
|
|
4
|
+
Dependencies: imports from [core/, logger.py, llm_do.py, transcribe.py, prompts.py, debug/, useful_tools/, network/, address.py] | imported by [user code, tests/, examples/] | no direct tests (integration tests import from here)
|
|
5
|
+
Data flow: loads .env from cwd via load_dotenv() → exports all public API symbols → user imports `from connectonion import Agent, llm_do, ...`
|
|
6
|
+
State/Effects: auto-loads .env file from current working directory (NOT module directory) at import time
|
|
7
|
+
Integration: exposes complete public API: Agent, LLM, Logger, create_tool_from_function, llm_do, transcribe, xray, event decorators, built-in tools, networking functions | __all__ defines explicit public exports
|
|
8
|
+
Performance: .env loading happens once at first import (dotenv caches)
|
|
9
|
+
Errors: none (import errors bubble from submodules)
|
|
10
|
+
ConnectOnion - A simple agent framework with behavior tracking.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
__version__ = "0.6.3"
|
|
14
|
+
|
|
15
|
+
# Auto-load .env files for the entire framework
|
|
16
|
+
from dotenv import load_dotenv
|
|
17
|
+
from pathlib import Path as _Path
|
|
18
|
+
|
|
19
|
+
# SDK only loads from current working directory (where user runs their script)
|
|
20
|
+
# CLI commands (co ai, co browser, etc.) handle global fallback separately
|
|
21
|
+
load_dotenv(_Path.cwd() / ".env")
|
|
22
|
+
|
|
23
|
+
from .core import Agent, LLM, create_tool_from_function
|
|
24
|
+
from .core import (
|
|
25
|
+
after_user_input,
|
|
26
|
+
before_llm,
|
|
27
|
+
after_llm,
|
|
28
|
+
before_each_tool,
|
|
29
|
+
before_tools,
|
|
30
|
+
after_each_tool,
|
|
31
|
+
after_tools,
|
|
32
|
+
on_error,
|
|
33
|
+
on_complete,
|
|
34
|
+
)
|
|
35
|
+
from .logger import Logger
|
|
36
|
+
from .llm_do import llm_do
|
|
37
|
+
from .transcribe import transcribe
|
|
38
|
+
from .prompts import load_system_prompt
|
|
39
|
+
from .debug import xray, auto_debug_exception, replay, xray_replay
|
|
40
|
+
from .useful_tools import (
|
|
41
|
+
send_email, get_emails, mark_read, mark_unread,
|
|
42
|
+
Memory, Gmail, GoogleCalendar, Outlook, MicrosoftCalendar,
|
|
43
|
+
WebFetch, Shell, bash, DiffWriter, MODE_NORMAL, MODE_AUTO, MODE_PLAN,
|
|
44
|
+
pick, yes_no, autocomplete, TodoList, SlashCommand,
|
|
45
|
+
# Claude Code-style file tools
|
|
46
|
+
read_file, edit, multi_edit, glob, grep, write, FileWriter,
|
|
47
|
+
)
|
|
48
|
+
from .network import connect, RemoteAgent, Response, host, create_app, IO
|
|
49
|
+
from .network import relay, announce
|
|
50
|
+
from . import address
|
|
51
|
+
|
|
52
|
+
__all__ = [
|
|
53
|
+
# Core
|
|
54
|
+
"Agent",
|
|
55
|
+
"LLM",
|
|
56
|
+
"Logger",
|
|
57
|
+
"create_tool_from_function",
|
|
58
|
+
"llm_do",
|
|
59
|
+
"transcribe",
|
|
60
|
+
"load_system_prompt",
|
|
61
|
+
"xray",
|
|
62
|
+
"replay",
|
|
63
|
+
"xray_replay",
|
|
64
|
+
"auto_debug_exception",
|
|
65
|
+
# Email tools
|
|
66
|
+
"send_email",
|
|
67
|
+
"get_emails",
|
|
68
|
+
"mark_read",
|
|
69
|
+
"mark_unread",
|
|
70
|
+
# Class-based tools
|
|
71
|
+
"Memory",
|
|
72
|
+
"Gmail",
|
|
73
|
+
"GoogleCalendar",
|
|
74
|
+
"Outlook",
|
|
75
|
+
"MicrosoftCalendar",
|
|
76
|
+
"WebFetch",
|
|
77
|
+
"Shell",
|
|
78
|
+
"bash",
|
|
79
|
+
"DiffWriter",
|
|
80
|
+
"MODE_NORMAL",
|
|
81
|
+
"MODE_AUTO",
|
|
82
|
+
"MODE_PLAN",
|
|
83
|
+
# TUI helpers
|
|
84
|
+
"pick",
|
|
85
|
+
"yes_no",
|
|
86
|
+
"autocomplete",
|
|
87
|
+
# Task management
|
|
88
|
+
"TodoList",
|
|
89
|
+
"SlashCommand",
|
|
90
|
+
# Claude Code-style file tools
|
|
91
|
+
"read_file",
|
|
92
|
+
"edit",
|
|
93
|
+
"multi_edit",
|
|
94
|
+
"glob",
|
|
95
|
+
"grep",
|
|
96
|
+
"write",
|
|
97
|
+
"FileWriter",
|
|
98
|
+
# Networking
|
|
99
|
+
"connect",
|
|
100
|
+
"RemoteAgent",
|
|
101
|
+
"Response",
|
|
102
|
+
"host",
|
|
103
|
+
"create_app",
|
|
104
|
+
"IO",
|
|
105
|
+
"relay",
|
|
106
|
+
"announce",
|
|
107
|
+
"address",
|
|
108
|
+
# Event decorators
|
|
109
|
+
"after_user_input",
|
|
110
|
+
"before_llm",
|
|
111
|
+
"after_llm",
|
|
112
|
+
"before_each_tool",
|
|
113
|
+
"before_tools",
|
|
114
|
+
"after_each_tool",
|
|
115
|
+
"after_tools",
|
|
116
|
+
"on_error",
|
|
117
|
+
"on_complete",
|
|
118
|
+
]
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Purpose: CLI module entry point with version metadata
|
|
3
|
+
LLM-Note:
|
|
4
|
+
Dependencies: none | imported by [cli/main.py, setup.py] | no direct tests
|
|
5
|
+
Data flow: pure metadata (version string)
|
|
6
|
+
State/Effects: no state
|
|
7
|
+
Integration: exposes __version__ for CLI about/version commands
|
|
8
|
+
Performance: trivial
|
|
9
|
+
Errors: none
|
|
10
|
+
ConnectOnion CLI module.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
__version__ = "0.0.1b5"
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Purpose: Browser agent module exports for CLI browser automation
|
|
3
|
+
LLM-Note:
|
|
4
|
+
Dependencies: imports from [browser.py] | imported by [cli/commands/browser_commands.py] | no direct tests
|
|
5
|
+
Data flow: re-exports execute_browser_command and BrowserAutomation
|
|
6
|
+
State/Effects: no state
|
|
7
|
+
Integration: exposes execute_browser_command(), BrowserAutomation class for `co browser` command
|
|
8
|
+
Performance: trivial
|
|
9
|
+
Errors: none
|
|
10
|
+
Browser agent module for ConnectOnion CLI.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from .browser import execute_browser_command, BrowserAutomation
|
|
14
|
+
|
|
15
|
+
__all__ = ['execute_browser_command', 'BrowserAutomation']
|
|
@@ -1,4 +1,13 @@
|
|
|
1
|
-
"""
|
|
1
|
+
"""
|
|
2
|
+
Purpose: Natural language browser automation via Playwright with Chrome profile support
|
|
3
|
+
LLM-Note:
|
|
4
|
+
Dependencies: imports from [playwright.sync_api, connectonion Agent/llm_do, cli/browser_agent/element_finder, pydantic, pathlib, dotenv] | imported by [cli/commands/browser_commands.py] | tested by [tests/cli/test_browser_agent.py]
|
|
5
|
+
Data flow: BrowserAutomation() initializes Playwright → copies Chrome profile to .browser_agent_profile/ → opens browser with context → provides tools (navigate, find_element, fill_form, screenshot, scroll, wait_for_login) → Agent uses these tools via natural language → element_finder.py uses vision LLM to locate elements | screenshots saved to .tmp/ directory
|
|
6
|
+
State/Effects: maintains browser/page/context state | copies Chrome profile on first run | writes screenshots to .tmp/{timestamp}.png | modifies form_data dict for form fills | auto-closes browser in __del__
|
|
7
|
+
Integration: exposes BrowserAutomation(use_chrome_profile, headless) with methods: navigate(url), find_element(description), fill_form(field_values), screenshot(viewport), scroll(direction, description), click(description), type_text(description, text), wait_for_login(seconds) | FormField Pydantic model for form parsing | used by `co browser` CLI command
|
|
8
|
+
Performance: headless by default (faster) | Chrome profile copy (one-time, slow first run) | vision model for element finding (slower but accurate) | screenshots base64-encoded for LLM analysis
|
|
9
|
+
Errors: returns error string if Playwright not installed | returns "Browser already open" if reinitializing | element not found returns descriptive error | Chrome must be closed when using profile
|
|
10
|
+
Browser Agent for CLI - Natural language browser automation.
|
|
2
11
|
|
|
3
12
|
This module provides a browser automation agent that understands natural language
|
|
4
13
|
requests for browser operations via the ConnectOnion CLI.
|
|
@@ -20,6 +29,7 @@ from typing import Optional, List, Dict, Any
|
|
|
20
29
|
from connectonion import Agent, llm_do
|
|
21
30
|
from dotenv import load_dotenv
|
|
22
31
|
from pydantic import BaseModel, Field
|
|
32
|
+
from . import element_finder
|
|
23
33
|
|
|
24
34
|
# Default screenshots directory
|
|
25
35
|
SCREENSHOTS_DIR = Path.cwd() / ".tmp"
|
|
@@ -53,7 +63,7 @@ class BrowserAutomation:
|
|
|
53
63
|
Supports Chrome profile for persistent sessions.
|
|
54
64
|
"""
|
|
55
65
|
|
|
56
|
-
def __init__(self, use_chrome_profile: bool =
|
|
66
|
+
def __init__(self, use_chrome_profile: bool = True, headless: bool = True):
|
|
57
67
|
"""Initialize browser automation.
|
|
58
68
|
|
|
59
69
|
Args:
|
|
@@ -95,8 +105,9 @@ class BrowserAutomation:
|
|
|
95
105
|
self.playwright = sync_playwright().start()
|
|
96
106
|
|
|
97
107
|
if self.use_chrome_profile:
|
|
98
|
-
# Use Chromium with Chrome profile copy
|
|
99
|
-
chromium_profile = Path.
|
|
108
|
+
# Use Chromium with Chrome profile copy in global ~/.co/ folder
|
|
109
|
+
chromium_profile = Path.home() / ".co" / "browser_profile"
|
|
110
|
+
chromium_profile.parent.mkdir(parents=True, exist_ok=True)
|
|
100
111
|
|
|
101
112
|
if not chromium_profile.exists():
|
|
102
113
|
import shutil
|
|
@@ -109,17 +120,28 @@ class BrowserAutomation:
|
|
|
109
120
|
source_profile = home / ".config/google-chrome"
|
|
110
121
|
|
|
111
122
|
if source_profile.exists():
|
|
123
|
+
def safe_copy(src, dst):
|
|
124
|
+
try:
|
|
125
|
+
shutil.copy2(src, dst)
|
|
126
|
+
except:
|
|
127
|
+
pass # Skip any file that can't be copied
|
|
128
|
+
|
|
112
129
|
shutil.copytree(
|
|
113
130
|
source_profile,
|
|
114
131
|
chromium_profile,
|
|
115
|
-
ignore=shutil.ignore_patterns(
|
|
132
|
+
ignore=shutil.ignore_patterns(
|
|
133
|
+
'*Cache*', '*cache*', 'Service Worker', 'ShaderCache',
|
|
134
|
+
'Singleton*', '*lock*', '*Lock*', '*.tmp', 'GPUCache',
|
|
135
|
+
'Code Cache', 'DawnCache', 'GrShaderCache', 'blob_storage'
|
|
136
|
+
),
|
|
137
|
+
copy_function=safe_copy,
|
|
116
138
|
dirs_exist_ok=True
|
|
117
139
|
)
|
|
118
140
|
|
|
119
141
|
self.browser = self.playwright.chromium.launch_persistent_context(
|
|
120
142
|
str(chromium_profile),
|
|
121
143
|
headless=headless,
|
|
122
|
-
args=['--disable-blink-features=AutomationControlled'],
|
|
144
|
+
args=['--no-sandbox', '--disable-setuid-sandbox', '--disable-blink-features=AutomationControlled'],
|
|
123
145
|
ignore_default_args=['--enable-automation'],
|
|
124
146
|
timeout=120000,
|
|
125
147
|
)
|
|
@@ -127,10 +149,12 @@ class BrowserAutomation:
|
|
|
127
149
|
self.page.add_init_script("""
|
|
128
150
|
Object.defineProperty(navigator, 'webdriver', { get: () => undefined });
|
|
129
151
|
""")
|
|
152
|
+
self.page.set_viewport_size({"width": 1920, "height": 1080})
|
|
130
153
|
return f"Browser opened with Chrome profile: {chromium_profile}"
|
|
131
154
|
else:
|
|
132
155
|
self.browser = self.playwright.chromium.launch(headless=headless)
|
|
133
156
|
self.page = self.browser.new_page()
|
|
157
|
+
self.page.set_viewport_size({"width": 1920, "height": 1080})
|
|
134
158
|
return "Browser opened successfully"
|
|
135
159
|
|
|
136
160
|
def go_to(self, url: str) -> str:
|
|
@@ -149,88 +173,94 @@ class BrowserAutomation:
|
|
|
149
173
|
def find_element_by_description(self, description: str) -> str:
|
|
150
174
|
"""Find element using natural language description.
|
|
151
175
|
|
|
152
|
-
Uses
|
|
176
|
+
Uses element_finder: LLM selects from indexed list, never generates CSS.
|
|
153
177
|
|
|
154
178
|
Args:
|
|
155
179
|
description: e.g., "the submit button", "email input field"
|
|
156
180
|
|
|
157
181
|
Returns:
|
|
158
|
-
|
|
182
|
+
Pre-built locator string, or error message
|
|
159
183
|
"""
|
|
160
184
|
if not self.page:
|
|
161
185
|
return "Browser not open"
|
|
162
186
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
confidence: float = Field(..., description="Confidence score 0-1")
|
|
168
|
-
explanation: str = Field(..., description="Why this element matches")
|
|
169
|
-
|
|
170
|
-
result = llm_do(
|
|
171
|
-
f"""Analyze this HTML and find the CSS selector for: "{description}"
|
|
172
|
-
|
|
173
|
-
HTML (first 15000 chars): {html[:15000]}
|
|
174
|
-
|
|
175
|
-
Return the most specific CSS selector that uniquely identifies this element.
|
|
176
|
-
""",
|
|
177
|
-
output=ElementSelector,
|
|
178
|
-
model="gpt-4o",
|
|
179
|
-
temperature=0.1
|
|
180
|
-
)
|
|
181
|
-
|
|
182
|
-
if self.page.locator(result.selector).count() > 0:
|
|
183
|
-
return result.selector
|
|
184
|
-
else:
|
|
185
|
-
return f"Found selector {result.selector} but element not on page"
|
|
187
|
+
element = element_finder.find_element(self.page, description)
|
|
188
|
+
if element:
|
|
189
|
+
return element.locator
|
|
190
|
+
return f"Could not find element matching: {description}"
|
|
186
191
|
|
|
187
192
|
def click(self, description: str) -> str:
|
|
188
193
|
"""Click on an element using natural language description.
|
|
189
194
|
|
|
190
|
-
|
|
191
|
-
description: e.g., "the blue submit button", "link to contact page"
|
|
195
|
+
Uses element_finder: LLM selects from pre-built locators, never generates CSS.
|
|
192
196
|
"""
|
|
193
197
|
if not self.page:
|
|
194
198
|
return "Browser not open"
|
|
195
199
|
|
|
196
|
-
|
|
200
|
+
element = element_finder.find_element(self.page, description)
|
|
197
201
|
|
|
198
|
-
if
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
202
|
+
if not element:
|
|
203
|
+
# Fallback to simple text matching
|
|
204
|
+
text_locator = self.page.get_by_text(description)
|
|
205
|
+
if text_locator.count() > 0:
|
|
206
|
+
text_locator.first.click()
|
|
207
|
+
return f"Clicked on '{description}' (by text fallback)"
|
|
208
|
+
return f"Could not find element matching: {description}"
|
|
203
209
|
|
|
204
|
-
|
|
205
|
-
|
|
210
|
+
# Try the locator with fresh bounding box
|
|
211
|
+
locator = self.page.locator(element.locator)
|
|
212
|
+
|
|
213
|
+
if locator.count() > 0:
|
|
214
|
+
box = locator.first.bounding_box()
|
|
215
|
+
if box:
|
|
216
|
+
x = box['x'] + box['width'] / 2
|
|
217
|
+
y = box['y'] + box['height'] / 2
|
|
218
|
+
self.page.mouse.click(x, y)
|
|
219
|
+
return f"Clicked [{element.index}] {element.tag} '{element.text}'"
|
|
220
|
+
|
|
221
|
+
locator.first.click(force=True)
|
|
222
|
+
return f"Clicked [{element.index}] {element.tag} '{element.text}' (force)"
|
|
223
|
+
|
|
224
|
+
# Fallback: use original coordinates
|
|
225
|
+
x = element.x + element.width // 2
|
|
226
|
+
y = element.y + element.height // 2
|
|
227
|
+
self.page.mouse.click(x, y)
|
|
228
|
+
return f"Clicked [{element.index}] '{element.text}' at ({x}, {y})"
|
|
206
229
|
|
|
207
230
|
def type_text(self, field_description: str, text: str) -> str:
|
|
208
231
|
"""Type text into a form field.
|
|
209
232
|
|
|
210
|
-
|
|
211
|
-
field_description: e.g., "email field", "password input"
|
|
212
|
-
text: The text to type
|
|
233
|
+
Uses element_finder: LLM selects from pre-built locators, never generates CSS.
|
|
213
234
|
"""
|
|
214
235
|
if not self.page:
|
|
215
236
|
return "Browser not open"
|
|
216
237
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
if
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
238
|
+
element = element_finder.find_element(self.page, field_description)
|
|
239
|
+
|
|
240
|
+
if not element:
|
|
241
|
+
# Fallback to placeholder matching
|
|
242
|
+
placeholder_locator = self.page.get_by_placeholder(field_description)
|
|
243
|
+
if placeholder_locator.count() > 0:
|
|
244
|
+
placeholder_locator.first.fill(text)
|
|
245
|
+
self.form_data[field_description] = text
|
|
246
|
+
return f"Typed into '{field_description}'"
|
|
247
|
+
return f"Could not find field: {field_description}"
|
|
248
|
+
|
|
249
|
+
# Try the pre-built locator
|
|
250
|
+
locator = self.page.locator(element.locator)
|
|
251
|
+
|
|
252
|
+
if locator.count() > 0:
|
|
253
|
+
locator.first.fill(text)
|
|
254
|
+
self.form_data[field_description] = text
|
|
255
|
+
return f"Typed into [{element.index}] {element.tag}"
|
|
256
|
+
|
|
257
|
+
# Fallback: click then type
|
|
258
|
+
x = element.x + element.width // 2
|
|
259
|
+
y = element.y + element.height // 2
|
|
260
|
+
self.page.mouse.click(x, y)
|
|
261
|
+
self.page.keyboard.type(text)
|
|
232
262
|
self.form_data[field_description] = text
|
|
233
|
-
return f"Typed into {
|
|
263
|
+
return f"Typed into [{element.index}] at ({x}, {y})"
|
|
234
264
|
|
|
235
265
|
def get_text(self) -> str:
|
|
236
266
|
"""Get all visible text from the page."""
|
|
@@ -306,27 +336,6 @@ class BrowserAutomation:
|
|
|
306
336
|
self.page.set_viewport_size({"width": width, "height": height})
|
|
307
337
|
return f"Viewport set to {width}x{height}"
|
|
308
338
|
|
|
309
|
-
def screenshot_mobile(self, url: str = None) -> str:
|
|
310
|
-
"""Take screenshot with iPhone viewport (390x844)."""
|
|
311
|
-
if url:
|
|
312
|
-
self.go_to(url)
|
|
313
|
-
self.set_viewport(390, 844)
|
|
314
|
-
return self.take_screenshot()
|
|
315
|
-
|
|
316
|
-
def screenshot_tablet(self, url: str = None) -> str:
|
|
317
|
-
"""Take screenshot with iPad viewport (768x1024)."""
|
|
318
|
-
if url:
|
|
319
|
-
self.go_to(url)
|
|
320
|
-
self.set_viewport(768, 1024)
|
|
321
|
-
return self.take_screenshot()
|
|
322
|
-
|
|
323
|
-
def screenshot_desktop(self, url: str = None) -> str:
|
|
324
|
-
"""Take screenshot with desktop viewport (1920x1080)."""
|
|
325
|
-
if url:
|
|
326
|
-
self.go_to(url)
|
|
327
|
-
self.set_viewport(1920, 1080)
|
|
328
|
-
return self.take_screenshot()
|
|
329
|
-
|
|
330
339
|
def find_forms(self) -> List[FormField]:
|
|
331
340
|
"""Find all form fields on the current page."""
|
|
332
341
|
if not self.page:
|
|
@@ -440,69 +449,13 @@ class BrowserAutomation:
|
|
|
440
449
|
return f"Waited for {seconds} seconds"
|
|
441
450
|
|
|
442
451
|
def scroll(self, times: int = 5, description: str = "the main content area") -> str:
|
|
443
|
-
"""Universal scroll with
|
|
444
|
-
|
|
445
|
-
Tries multiple strategies until one works:
|
|
446
|
-
1. AI-generated strategy (analyzes page structure)
|
|
447
|
-
2. Element scrolling
|
|
448
|
-
3. Page scrolling
|
|
452
|
+
"""Universal scroll with AI strategy and fallback.
|
|
449
453
|
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
description: What to scroll (e.g., "the email list")
|
|
453
|
-
|
|
454
|
-
Returns:
|
|
455
|
-
Status message with successful strategy
|
|
454
|
+
Tries: AI-generated → Element scroll → Page scroll
|
|
455
|
+
Verifies success with screenshot comparison.
|
|
456
456
|
"""
|
|
457
|
-
from . import
|
|
458
|
-
return
|
|
459
|
-
page=self.page,
|
|
460
|
-
take_screenshot=self.take_screenshot,
|
|
461
|
-
times=times,
|
|
462
|
-
description=description
|
|
463
|
-
)
|
|
464
|
-
|
|
465
|
-
def scroll_page(self, direction: str = "down", amount: int = 1000) -> str:
|
|
466
|
-
"""Scroll the page in a direction.
|
|
467
|
-
|
|
468
|
-
Args:
|
|
469
|
-
direction: "down", "up", "top", or "bottom"
|
|
470
|
-
amount: Pixels to scroll (ignored for "bottom"/"top")
|
|
471
|
-
"""
|
|
472
|
-
if not self.page:
|
|
473
|
-
return "Browser not open"
|
|
474
|
-
|
|
475
|
-
if direction == "bottom":
|
|
476
|
-
self.page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
|
|
477
|
-
return "Scrolled to bottom of page"
|
|
478
|
-
elif direction == "top":
|
|
479
|
-
self.page.evaluate("window.scrollTo(0, 0)")
|
|
480
|
-
return "Scrolled to top of page"
|
|
481
|
-
elif direction == "down":
|
|
482
|
-
self.page.evaluate(f"window.scrollBy(0, {amount})")
|
|
483
|
-
return f"Scrolled down {amount} pixels"
|
|
484
|
-
elif direction == "up":
|
|
485
|
-
self.page.evaluate(f"window.scrollBy(0, -{amount})")
|
|
486
|
-
return f"Scrolled up {amount} pixels"
|
|
487
|
-
else:
|
|
488
|
-
return f"Unknown direction: {direction}"
|
|
489
|
-
|
|
490
|
-
def scroll_element(self, selector: str, amount: int = 1000) -> str:
|
|
491
|
-
"""Scroll a specific element by CSS selector."""
|
|
492
|
-
if not self.page:
|
|
493
|
-
return "Browser not open"
|
|
494
|
-
|
|
495
|
-
result = self.page.evaluate(f"""
|
|
496
|
-
(() => {{
|
|
497
|
-
const element = document.querySelector('{selector}');
|
|
498
|
-
if (!element) return 'Element not found: {selector}';
|
|
499
|
-
const beforeScroll = element.scrollTop;
|
|
500
|
-
element.scrollTop += {amount};
|
|
501
|
-
const afterScroll = element.scrollTop;
|
|
502
|
-
return `Scrolled from ${{beforeScroll}}px to ${{afterScroll}}px`;
|
|
503
|
-
}})()
|
|
504
|
-
""")
|
|
505
|
-
return result
|
|
457
|
+
from . import scroll
|
|
458
|
+
return scroll.scroll(self.page, self.take_screenshot, times, description)
|
|
506
459
|
|
|
507
460
|
def wait_for_manual_login(self, site_name: str = "the website") -> str:
|
|
508
461
|
"""Pause automation for user to login manually.
|