connectonion 0.6.1__py3-none-any.whl → 0.6.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +95 -142
- connectonion/cli/browser_agent/element_finder.py +147 -0
- connectonion/cli/browser_agent/highlight_screenshot.py +182 -0
- connectonion/cli/browser_agent/prompt.md +188 -105
- connectonion/cli/browser_agent/prompts/element_matcher.md +59 -0
- connectonion/cli/browser_agent/prompts/form_filler.md +19 -0
- connectonion/cli/browser_agent/prompts/scroll_strategy.md +36 -0
- connectonion/cli/browser_agent/scripts/extract_elements.js +126 -0
- connectonion/cli/browser_agent/scroll.py +145 -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 +6 -0
- connectonion/cli/co_ai/plugins/reminder.py +76 -0
- connectonion/cli/co_ai/plugins/shell_approval.py +105 -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/reminders/plan_mode.md +34 -0
- connectonion/cli/co_ai/prompts/summarization.md +55 -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/reminders.py +159 -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 +172 -0
- connectonion/cli/co_ai/tools/read.py +67 -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 +100 -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_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 +2 -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/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.1.dist-info → connectonion-0.6.3.dist-info}/METADATA +10 -3
- connectonion-0.6.3.dist-info/RECORD +469 -0
- connectonion/cli/browser_agent/scroll_strategies.py +0 -276
- connectonion/network/asgi.py +0 -407
- connectonion/network/host.py +0 -616
- connectonion/network/trust.py +0 -166
- connectonion-0.6.1.dist-info/RECORD +0 -123
- /connectonion/cli/{docs → co_ai/prompts/connectonion}/connectonion.md +0 -0
- {connectonion-0.6.1.dist-info → connectonion-0.6.3.dist-info}/WHEEL +0 -0
- {connectonion-0.6.1.dist-info → connectonion-0.6.3.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# Design Decision: Why We Chose `input()` Over `run()`
|
|
2
|
+
|
|
3
|
+
*Date: 2025-08-11*
|
|
4
|
+
*Decision: Use `agent.input()` as the primary method for agent interaction*
|
|
5
|
+
*Status: Implemented in v0.0.1b3*
|
|
6
|
+
|
|
7
|
+
## The Journey
|
|
8
|
+
|
|
9
|
+
When we first built ConnectOnion, we followed the industry standard and used `agent.input()` as our primary method. It worked, it was familiar to developers who'd used similar frameworks, and nobody complained. But sometimes, the absence of complaints doesn't mean you've found the best solution—it just means people have accepted the status quo.
|
|
10
|
+
|
|
11
|
+
The question that changed everything was simple: **"Would `agent.input()` be clearer for engineers?"**
|
|
12
|
+
|
|
13
|
+
## The Problem
|
|
14
|
+
|
|
15
|
+
We noticed that when developers first encountered our framework, there was always a slight pause:
|
|
16
|
+
|
|
17
|
+
```python
|
|
18
|
+
agent = Agent("assistant")
|
|
19
|
+
result = agent.input("What's the weather?") # What exactly am I "running"?
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
That pause—that fraction of a second where developers had to translate "run" into "process my prompt"—was a tiny friction point. But tiny frictions add up, especially when you're trying to make AI agents as accessible as possible.
|
|
23
|
+
|
|
24
|
+
## The Exploration
|
|
25
|
+
|
|
26
|
+
We evaluated several candidates, each with its own philosophy:
|
|
27
|
+
|
|
28
|
+
### The Original: `run()`
|
|
29
|
+
```python
|
|
30
|
+
result = agent.input("Generate a Python function")
|
|
31
|
+
```
|
|
32
|
+
- **Pros:** Industry standard, familiar from threading and app frameworks
|
|
33
|
+
- **Cons:** Ambiguous—are we running the agent or running the prompt?
|
|
34
|
+
- **Mental model:** "Execute something" (but what?)
|
|
35
|
+
|
|
36
|
+
### The Conversationalist: `chat()`
|
|
37
|
+
```python
|
|
38
|
+
result = agent.chat("Generate a Python function")
|
|
39
|
+
```
|
|
40
|
+
- **Pros:** Immediately conveys interaction
|
|
41
|
+
- **Cons:** Implies conversation, awkward for non-conversational tasks
|
|
42
|
+
- **Mental model:** "Have a conversation"
|
|
43
|
+
|
|
44
|
+
### The Questioner: `ask()`
|
|
45
|
+
```python
|
|
46
|
+
result = agent.ask("Generate a Python function")
|
|
47
|
+
```
|
|
48
|
+
- **Pros:** Natural for questions
|
|
49
|
+
- **Cons:** Semantically wrong for commands and generation tasks
|
|
50
|
+
- **Mental model:** "Ask a question"
|
|
51
|
+
|
|
52
|
+
### The Processor: `process()`
|
|
53
|
+
```python
|
|
54
|
+
result = agent.process("Generate a Python function")
|
|
55
|
+
```
|
|
56
|
+
- **Pros:** Technically accurate, universal
|
|
57
|
+
- **Cons:** Feels mechanical, not intuitive
|
|
58
|
+
- **Mental model:** "Process data"
|
|
59
|
+
|
|
60
|
+
### The Invoker: `invoke()`
|
|
61
|
+
```python
|
|
62
|
+
result = agent.invoke("Generate a Python function")
|
|
63
|
+
```
|
|
64
|
+
- **Pros:** Technically precise, enterprise-familiar
|
|
65
|
+
- **Cons:** Requires vocabulary knowledge, not guessable
|
|
66
|
+
- **Mental model:** "Invoke... something?"
|
|
67
|
+
|
|
68
|
+
### The Chosen One: `input()`
|
|
69
|
+
```python
|
|
70
|
+
result = agent.input("Generate a Python function")
|
|
71
|
+
```
|
|
72
|
+
- **Pros:** Immediately clear data flow, universally understood
|
|
73
|
+
- **Cons:** Passive voice, slight conflict with Python's built-in
|
|
74
|
+
- **Mental model:** "Input → Output" (everyone gets this!)
|
|
75
|
+
|
|
76
|
+
## The Principles We Used
|
|
77
|
+
|
|
78
|
+
We established clear principles for evaluating our options:
|
|
79
|
+
|
|
80
|
+
1. **Zero Learning Curve** - Could someone guess it without documentation?
|
|
81
|
+
2. **Universal Applicability** - Does it work for all use cases?
|
|
82
|
+
3. **Cognitive Directness** - No mental translation required
|
|
83
|
+
4. **Technical Accuracy** - Does it describe what actually happens?
|
|
84
|
+
|
|
85
|
+
## The "Mom Test"
|
|
86
|
+
|
|
87
|
+
We applied what we call the "Mom Test"—could you explain this to someone non-technical?
|
|
88
|
+
|
|
89
|
+
- "You **run** the agent" → "Run it where? Like exercise?"
|
|
90
|
+
- "You **invoke** the agent" → "What does invoke mean?"
|
|
91
|
+
- "You **input** text to the agent" → "Oh, like typing into it? Got it!"
|
|
92
|
+
|
|
93
|
+
## The Revelation
|
|
94
|
+
|
|
95
|
+
The breakthrough came when we realized we were optimizing for the wrong thing. We were trying to describe what the *agent* does (runs, processes, invokes) instead of what the *user* does (provides input).
|
|
96
|
+
|
|
97
|
+
```python
|
|
98
|
+
# This is what users think:
|
|
99
|
+
"I have input" → "I give it to the agent" → "I get output"
|
|
100
|
+
|
|
101
|
+
# Not this:
|
|
102
|
+
"I have a prompt" → "I run the agent with it" → "The agent executes"
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Real-World Validation
|
|
106
|
+
|
|
107
|
+
We looked at what developers naturally type when exploring a new agent framework:
|
|
108
|
+
|
|
109
|
+
```python
|
|
110
|
+
# Most common attempts (in order):
|
|
111
|
+
1. agent.input(...) # 40% try this first
|
|
112
|
+
2. agent.send(...) # 25% (from messaging paradigm)
|
|
113
|
+
3. agent.ask(...) # 20% (assuming Q&A)
|
|
114
|
+
4. agent.input(...) # 10% (from experience)
|
|
115
|
+
5. agent.process(...) # 5% (data engineers)
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
The data was clear: `input()` is what people naturally expect.
|
|
119
|
+
|
|
120
|
+
## Addressing the Concerns
|
|
121
|
+
|
|
122
|
+
### "But Python has a built-in `input()` function!"
|
|
123
|
+
|
|
124
|
+
True, but context matters:
|
|
125
|
+
```python
|
|
126
|
+
# Global function - getting input FROM user
|
|
127
|
+
user_text = input("Enter text: ")
|
|
128
|
+
|
|
129
|
+
# Method on object - giving input TO agent
|
|
130
|
+
result = agent.input(user_text)
|
|
131
|
+
|
|
132
|
+
# These are clearly different contexts
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
In practice, this has never caused confusion. The contexts are so different that developers intuitively understand the distinction.
|
|
136
|
+
|
|
137
|
+
### "But `input()` sounds passive!"
|
|
138
|
+
|
|
139
|
+
Yes, from the agent's perspective. But we're designing for the user's perspective. The user actively inputs, the agent processes, the user receives output. The method name reflects the user's action, not the agent's.
|
|
140
|
+
|
|
141
|
+
### "But other frameworks use `run()` or `invoke()`!"
|
|
142
|
+
|
|
143
|
+
And that's exactly why there's room for improvement. Just because something is common doesn't mean it's optimal. We chose clarity over convention.
|
|
144
|
+
|
|
145
|
+
## The Implementation
|
|
146
|
+
|
|
147
|
+
```python
|
|
148
|
+
class Agent:
|
|
149
|
+
def input(self, prompt: str) -> str:
|
|
150
|
+
"""Provide input to the agent and get response."""
|
|
151
|
+
# Core implementation
|
|
152
|
+
|
|
153
|
+
# Backward compatibility
|
|
154
|
+
run = input # Alias for existing users
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## The Impact
|
|
158
|
+
|
|
159
|
+
Since switching to `input()`:
|
|
160
|
+
|
|
161
|
+
1. **Faster onboarding** - New users understand immediately
|
|
162
|
+
2. **Fewer questions** - No more "what does run mean?" in discussions
|
|
163
|
+
3. **Clearer code** - Reading code with `input()` is self-documenting
|
|
164
|
+
4. **Better mental model** - Users think in terms of I/O naturally
|
|
165
|
+
|
|
166
|
+
## Example: The Difference in Practice
|
|
167
|
+
|
|
168
|
+
```python
|
|
169
|
+
# Before (with run):
|
|
170
|
+
agent = Agent("assistant")
|
|
171
|
+
result = agent.input("Analyze this data") # Cognitive translation needed
|
|
172
|
+
|
|
173
|
+
# After (with input):
|
|
174
|
+
agent = Agent("assistant")
|
|
175
|
+
result = agent.input("Analyze this data") # Immediately clear
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
The difference seems small, but multiply this by every interaction, every developer, every day—and it adds up to significant cognitive load reduction.
|
|
179
|
+
|
|
180
|
+
## Conclusion
|
|
181
|
+
|
|
182
|
+
Choosing `input()` over `run()` wasn't about following trends or being different. It was about recognizing that the best API is the one users don't have to learn—they already understand it.
|
|
183
|
+
|
|
184
|
+
When you design APIs, ask yourself: "What would someone try without reading the docs?" That's usually your answer.
|
|
185
|
+
|
|
186
|
+
## Lessons Learned
|
|
187
|
+
|
|
188
|
+
1. **Optimize for user mental models, not technical accuracy**
|
|
189
|
+
2. **The best name is the one people guess correctly**
|
|
190
|
+
3. **Small frictions compound into big barriers**
|
|
191
|
+
4. **Sometimes the "industry standard" is just the "industry default"**
|
|
192
|
+
5. **Test with people who haven't read your documentation**
|
|
193
|
+
|
|
194
|
+
## What This Means for ConnectOnion
|
|
195
|
+
|
|
196
|
+
This decision reflects our core philosophy: **AI agents should be as intuitive as possible**. Every design decision should reduce the barrier between human intent and agent action.
|
|
197
|
+
|
|
198
|
+
When you use `agent.input()`, you're not learning our API—you're using knowledge you already have. That's the ConnectOnion way.
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
*This document is part of our design decision series, where we share the thinking behind ConnectOnion's API choices. These aren't just technical decisions—they're user experience decisions.*
|
connectonion/cli/co_ai/prompts/connectonion/design-decisions/002-choosing-llm-function-name.md
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# Design Decision: Choosing `llm_do()` as the Function Name
|
|
2
|
+
|
|
3
|
+
## Date
|
|
4
|
+
2024-01-29 (Updated: 2024-01-30)
|
|
5
|
+
|
|
6
|
+
## Status
|
|
7
|
+
Decided → Revised
|
|
8
|
+
|
|
9
|
+
## Context
|
|
10
|
+
|
|
11
|
+
We needed a simple, intuitive function for one-shot LLM calls with optional structured output. The function would:
|
|
12
|
+
- Make single-round LLM calls (no loops/iterations)
|
|
13
|
+
- Support both string and Pydantic model outputs
|
|
14
|
+
- Accept prompts as strings or file paths
|
|
15
|
+
- Be immediately understandable to developers
|
|
16
|
+
|
|
17
|
+
## Initial Decision: `llm()`
|
|
18
|
+
|
|
19
|
+
We initially chose `llm()` for its simplicity. However, user feedback revealed a critical issue:
|
|
20
|
+
- **`llm` reads as a noun, not a verb**
|
|
21
|
+
- Functions should be actions (verbs)
|
|
22
|
+
- Users were confused about what `llm()` does at a glance
|
|
23
|
+
|
|
24
|
+
## Final Decision: `llm_do()`
|
|
25
|
+
|
|
26
|
+
After extensive analysis, we chose `llm_do()` because:
|
|
27
|
+
|
|
28
|
+
1. **Has a clear verb**: "do" is the most versatile action word
|
|
29
|
+
2. **Works for all use cases**:
|
|
30
|
+
```python
|
|
31
|
+
answer = llm_do("What's 2+2?") # Do the calculation
|
|
32
|
+
invoice = llm_do(text, output=Invoice) # Do the extraction
|
|
33
|
+
translation = llm_do("Hello", system_prompt="Translate") # Do the translation
|
|
34
|
+
```
|
|
35
|
+
3. **Immediately clear**: Users understand it's performing an action
|
|
36
|
+
4. **Still short**: Only 6 characters
|
|
37
|
+
|
|
38
|
+
## Options We Considered
|
|
39
|
+
|
|
40
|
+
### 1. `llm_do()` ✅ **CHOSEN**
|
|
41
|
+
```python
|
|
42
|
+
answer = llm_do("What's 2+2?")
|
|
43
|
+
data = llm_do(text, output=Report)
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**Pros:**
|
|
47
|
+
- Clear verb that implies action
|
|
48
|
+
- Works naturally for ALL use cases
|
|
49
|
+
- Professional yet simple
|
|
50
|
+
- Only 6 characters
|
|
51
|
+
|
|
52
|
+
**Cons:**
|
|
53
|
+
- Slightly longer than `llm()`
|
|
54
|
+
|
|
55
|
+
### 2. `llm()` (Original)
|
|
56
|
+
```python
|
|
57
|
+
answer = llm("What's 2+2?")
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Pros:**
|
|
61
|
+
- Shortest possible (3 chars)
|
|
62
|
+
- Clean look
|
|
63
|
+
|
|
64
|
+
**Cons:**
|
|
65
|
+
- **Reads as noun, not verb**
|
|
66
|
+
- Unclear what action it performs
|
|
67
|
+
- Users confused at first glance
|
|
68
|
+
|
|
69
|
+
### 3. `llm_oneshot()`
|
|
70
|
+
```python
|
|
71
|
+
result = llm_oneshot("Process this")
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Pros:**
|
|
75
|
+
- Explicitly describes behavior
|
|
76
|
+
- Zero ambiguity
|
|
77
|
+
|
|
78
|
+
**Cons:**
|
|
79
|
+
- Too verbose (11 characters)
|
|
80
|
+
- Feels like enterprise Java
|
|
81
|
+
- Not elegant
|
|
82
|
+
|
|
83
|
+
### 4. `llm_tap()`
|
|
84
|
+
```python
|
|
85
|
+
answer = llm_tap("What's 2+2?")
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Pros:**
|
|
89
|
+
- Elegant, modern feel
|
|
90
|
+
- Short (7 chars)
|
|
91
|
+
|
|
92
|
+
**Cons:**
|
|
93
|
+
- Only sounds good for questions
|
|
94
|
+
- Weird for extraction/conversion tasks
|
|
95
|
+
|
|
96
|
+
### 5. `llm_go()`
|
|
97
|
+
```python
|
|
98
|
+
answer = llm_go("What's 2+2?")
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**Pros:**
|
|
102
|
+
- Very short (6 chars)
|
|
103
|
+
- Simple verb
|
|
104
|
+
|
|
105
|
+
**Cons:**
|
|
106
|
+
- Too vague ("go where?")
|
|
107
|
+
- Doesn't indicate what happens
|
|
108
|
+
|
|
109
|
+
### 6. `llm_gen()`
|
|
110
|
+
```python
|
|
111
|
+
answer = llm_gen("What's 2+2?")
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
**Pros:**
|
|
115
|
+
- "gen" is a clear verb (generate)
|
|
116
|
+
- Modern (Gen AI)
|
|
117
|
+
|
|
118
|
+
**Cons:**
|
|
119
|
+
- Implies generation only
|
|
120
|
+
- Not intuitive for extraction tasks
|
|
121
|
+
|
|
122
|
+
### 7. `llm_call()`
|
|
123
|
+
```python
|
|
124
|
+
answer = llm_call("What's 2+2?")
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**Pros:**
|
|
128
|
+
- "Call" implies single execution
|
|
129
|
+
- Natural phrasing
|
|
130
|
+
|
|
131
|
+
**Cons:**
|
|
132
|
+
- Could be confused with function calls
|
|
133
|
+
- Less versatile than "do"
|
|
134
|
+
|
|
135
|
+
### 8. `ask()`
|
|
136
|
+
```python
|
|
137
|
+
answer = ask("What's 2+2?")
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**Pros:**
|
|
141
|
+
- Natural, conversational
|
|
142
|
+
- Very short
|
|
143
|
+
|
|
144
|
+
**Cons:**
|
|
145
|
+
- Doesn't convey all use cases
|
|
146
|
+
- Too informal for extraction/analysis
|
|
147
|
+
|
|
148
|
+
## Implementation
|
|
149
|
+
|
|
150
|
+
```python
|
|
151
|
+
from connectonion import llm_do
|
|
152
|
+
|
|
153
|
+
# Clear distinction in usage
|
|
154
|
+
result = llm_do("Quick question") # Verb makes action clear
|
|
155
|
+
agent.llm = OpenAILLM() # Noun for the instance
|
|
156
|
+
response = agent.llm.complete(...) # Method on the instance
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## Testing Against Real Use Cases
|
|
160
|
+
|
|
161
|
+
Looking at our documentation examples:
|
|
162
|
+
|
|
163
|
+
```python
|
|
164
|
+
# Data Extraction
|
|
165
|
+
invoice = llm_do(invoice_text, output=Invoice) # ✅ "Do the extraction"
|
|
166
|
+
|
|
167
|
+
# Analysis
|
|
168
|
+
analysis = llm_do(text, output=FeedbackAnalysis) # ✅ "Do the analysis"
|
|
169
|
+
|
|
170
|
+
# Translation
|
|
171
|
+
translation = llm_do("Hello", system_prompt="Translate") # ✅ "Do the translation"
|
|
172
|
+
|
|
173
|
+
# Validation
|
|
174
|
+
is_valid = llm_do("Is this SQL valid?") # ✅ "Do the validation"
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
`llm_do()` reads naturally across all use cases, while alternatives like `llm_tap()` only work for some.
|
|
178
|
+
|
|
179
|
+
## Consequences
|
|
180
|
+
|
|
181
|
+
### Positive
|
|
182
|
+
- Users immediately understand it's an action
|
|
183
|
+
- Works naturally for all use cases
|
|
184
|
+
- Clear contrast with `Agent()` for complex workflows
|
|
185
|
+
- Follows function naming best practices (verb-based)
|
|
186
|
+
|
|
187
|
+
### Negative
|
|
188
|
+
- Slightly longer than original `llm()` (6 vs 3 chars)
|
|
189
|
+
- Need to update all documentation and examples
|
|
190
|
+
|
|
191
|
+
## Lessons Learned
|
|
192
|
+
|
|
193
|
+
1. **Functions need verbs**: Even if shorter, noun-based function names confuse users
|
|
194
|
+
2. **Versatility matters**: The verb must work for ALL use cases, not just some
|
|
195
|
+
3. **User feedback is crucial**: The confusion with `llm()` only became clear through usage
|
|
196
|
+
4. **"Do" is the ultimate verb**: It's the most versatile action word in English
|
|
197
|
+
|
|
198
|
+
## References
|
|
199
|
+
|
|
200
|
+
- [Principle: Simple things simple](../principles.md)
|
|
201
|
+
- [Python naming conventions](https://peps.python.org/pep-0008/)
|
|
202
|
+
- Similar patterns: `requests.get()`, `json.loads()`, `pd.read_csv()`
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# Why We Chose "Trust" - The Story Behind ConnectOnion's Authentication Keyword
|
|
2
|
+
|
|
3
|
+
*December 2024*
|
|
4
|
+
|
|
5
|
+
When designing ConnectOnion's agent-to-agent authentication system, we faced a crucial decision: what should we call the parameter that controls how agents verify each other? After evaluating 15+ options and extensive discussion, we settled on `trust`. Here's why.
|
|
6
|
+
|
|
7
|
+
## The Challenge: Finding a Bidirectional Word
|
|
8
|
+
|
|
9
|
+
Our authentication system needed a keyword that works in two directions:
|
|
10
|
+
1. **As a service provider**: "Who can use my services?"
|
|
11
|
+
2. **As a service consumer**: "Which services do I trust?"
|
|
12
|
+
|
|
13
|
+
Most security terms only work in one direction. We needed something that naturally flows both ways.
|
|
14
|
+
|
|
15
|
+
## Options We Considered
|
|
16
|
+
|
|
17
|
+
### 1. `auth` / `authentication`
|
|
18
|
+
**Why not**: Too technical and implies traditional authentication (passwords, tokens). We're doing behavioral verification, not credential checking.
|
|
19
|
+
|
|
20
|
+
### 2. `verify` / `validate`
|
|
21
|
+
**Why not**: One-directional - you verify others, but saying "I'm verified" sounds like a credential system.
|
|
22
|
+
|
|
23
|
+
### 3. `guard` / `guardian`
|
|
24
|
+
**Why not**: Implies blocking/protection only. Doesn't capture the mutual relationship between agents.
|
|
25
|
+
|
|
26
|
+
### 4. `policy` / `rules`
|
|
27
|
+
**Why not**: Too formal and configuration-heavy. Doesn't match our natural language approach.
|
|
28
|
+
|
|
29
|
+
### 5. `security` / `safe`
|
|
30
|
+
**Why not**: Too broad and creates fear. Security implies threats; we want collaboration.
|
|
31
|
+
|
|
32
|
+
### 6. `filter` / `allow`
|
|
33
|
+
**Why not**: One-directional and negative. Focuses on exclusion rather than building relationships.
|
|
34
|
+
|
|
35
|
+
### 7. `mode` / `env`
|
|
36
|
+
**Why not**: Too generic. Could mean anything - doesn't clearly indicate authentication purpose.
|
|
37
|
+
|
|
38
|
+
### 8. `strict` / `open` / `tested`
|
|
39
|
+
**Why not**: These became our trust *levels*, but the parameter itself needed a clearer name.
|
|
40
|
+
|
|
41
|
+
### 9. `require` / `expect`
|
|
42
|
+
**Why not**: Works for incoming but awkward for outgoing ("I require others" vs "I'm required"?).
|
|
43
|
+
|
|
44
|
+
### 10. `proof` / `prove`
|
|
45
|
+
**Why not**: Implies formal verification. We do behavioral testing, not mathematical proofs.
|
|
46
|
+
|
|
47
|
+
## Why "Trust" Won
|
|
48
|
+
|
|
49
|
+
### 1. Naturally Bidirectional
|
|
50
|
+
```python
|
|
51
|
+
# Both directions feel natural
|
|
52
|
+
agent = Agent(name="my_service", trust="strict") # I trust strict agents
|
|
53
|
+
service = need("translator", trust="tested") # I need tested services
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
The word "trust" flows both ways without awkwardness.
|
|
57
|
+
|
|
58
|
+
### 2. Human-Friendly
|
|
59
|
+
Developers immediately understand trust. It's how we think about relationships:
|
|
60
|
+
- "I trust this service"
|
|
61
|
+
- "This service trusts me"
|
|
62
|
+
- "We need to build trust"
|
|
63
|
+
|
|
64
|
+
### 3. Progressive, Not Binary
|
|
65
|
+
Trust isn't yes/no - it grows through interaction:
|
|
66
|
+
```python
|
|
67
|
+
trust="open" # Trust everyone (dev mode)
|
|
68
|
+
trust="tested" # Test first, then trust
|
|
69
|
+
trust="strict" # Only trusted partners
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### 4. Matches Real Behavior
|
|
73
|
+
We're not checking passwords or certificates. We're testing behavior:
|
|
74
|
+
- Can you translate "Hello" to "Hola"?
|
|
75
|
+
- Do you respond within 500ms?
|
|
76
|
+
- Have we worked together successfully before?
|
|
77
|
+
|
|
78
|
+
This is trust-building, not authentication.
|
|
79
|
+
|
|
80
|
+
### 5. Enables Natural Language Config
|
|
81
|
+
```python
|
|
82
|
+
trust = """
|
|
83
|
+
I trust agents that:
|
|
84
|
+
- Pass my capability tests
|
|
85
|
+
- Respond quickly
|
|
86
|
+
- Have good track record
|
|
87
|
+
"""
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
"Trust policy" sounds natural. "Authentication policy" sounds bureaucratic.
|
|
91
|
+
|
|
92
|
+
## The Unix Philosophy Connection
|
|
93
|
+
|
|
94
|
+
Following Unix principles, trust isn't a complex protocol - it's simple functions composed by prompts:
|
|
95
|
+
|
|
96
|
+
```python
|
|
97
|
+
# Small, composable trust functions
|
|
98
|
+
def check_whitelist(agent_id): ...
|
|
99
|
+
def test_capability(agent, test): ...
|
|
100
|
+
def measure_response_time(agent): ...
|
|
101
|
+
|
|
102
|
+
# Composed into trust agents
|
|
103
|
+
trust_agent = Agent(
|
|
104
|
+
name="my_guardian",
|
|
105
|
+
tools=[check_whitelist, test_capability, measure_response_time]
|
|
106
|
+
)
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Some Challenges with "Trust"
|
|
110
|
+
|
|
111
|
+
We acknowledge potential confusion:
|
|
112
|
+
|
|
113
|
+
1. **Overloaded Term**: "Trust" appears in many contexts (TLS, trust stores, web of trust)
|
|
114
|
+
2. **Seems Soft**: Some developers might prefer "harder" security terms
|
|
115
|
+
3. **Cultural Variations**: Trust has different connotations across cultures
|
|
116
|
+
|
|
117
|
+
But these are outweighed by its clarity and naturalness for our use case.
|
|
118
|
+
|
|
119
|
+
## The Final Design
|
|
120
|
+
|
|
121
|
+
```python
|
|
122
|
+
# Three forms, one keyword
|
|
123
|
+
translator = need("translate", trust="strict") # Simple level
|
|
124
|
+
translator = need("translate", trust="./trust.md") # Natural language
|
|
125
|
+
translator = need("translate", trust=my_trust_agent) # Custom agent
|
|
126
|
+
|
|
127
|
+
# Bidirectional by default
|
|
128
|
+
alice = Agent(name="alice", trust="tested") # Alice tests her users
|
|
129
|
+
bob_needs = need("service", trust="strict") # Bob only uses strict services
|
|
130
|
+
# Both must approve for connection!
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Conclusion
|
|
134
|
+
|
|
135
|
+
`trust` won because it's the most honest description of what we're doing. We're not authenticating with credentials or authorizing with permissions. We're building trust through behavioral verification and shared experiences.
|
|
136
|
+
|
|
137
|
+
In ConnectOnion, agents don't authenticate - they trust. And that makes all the difference.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
*This design decision exemplifies ConnectOnion's philosophy: make simple things simple, make complicated things possible. Trust is simple to understand, yet enables sophisticated agent relationships.*
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Design Decision: CLI Create Flow Optimization
|
|
2
|
+
|
|
3
|
+
## Date
|
|
4
|
+
2024-09-12
|
|
5
|
+
|
|
6
|
+
## Status
|
|
7
|
+
Implemented
|
|
8
|
+
|
|
9
|
+
## Context
|
|
10
|
+
The original `co create` command flow asked users for the project name first, then template selection, then AI configuration. This created a poor user experience where users had to name something before they knew what they were building.
|
|
11
|
+
|
|
12
|
+
## Problem Statement
|
|
13
|
+
Users were experiencing decision paralysis and confusion because:
|
|
14
|
+
1. They had to name their project before choosing what type of project it would be
|
|
15
|
+
2. The template selection showed too much information in a verbose format
|
|
16
|
+
3. Users had to type template names instead of using simple numeric selection
|
|
17
|
+
4. The flow didn't align with natural decision-making process
|
|
18
|
+
|
|
19
|
+
## Decision
|
|
20
|
+
We restructured the `co create` flow to follow a more intuitive order:
|
|
21
|
+
|
|
22
|
+
### New Flow Order:
|
|
23
|
+
1. **Template Selection** (first) - What are you building?
|
|
24
|
+
2. **AI/API Configuration** (if needed) - How will it work?
|
|
25
|
+
3. **Custom Description** (if custom template) - What specifically?
|
|
26
|
+
4. **Project Name** (last) - What will you call it?
|
|
27
|
+
|
|
28
|
+
### UI Improvements:
|
|
29
|
+
- Replaced verbose template descriptions with clean numbered list
|
|
30
|
+
- Users press 1-6 instead of typing template names
|
|
31
|
+
- Removed excessive file tree information from initial view
|
|
32
|
+
- Added confirmation message after selection
|
|
33
|
+
|
|
34
|
+
## Implementation
|
|
35
|
+
|
|
36
|
+
### Before:
|
|
37
|
+
```
|
|
38
|
+
Project name [my-agent]: ???
|
|
39
|
+
[... then template selection with verbose output ...]
|
|
40
|
+
Template (minimal, web-research, email-agent, ...) [minimal]: minimal
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### After:
|
|
44
|
+
```
|
|
45
|
+
Choose a template:
|
|
46
|
+
|
|
47
|
+
1. 📦 Minimal - Simple starting point
|
|
48
|
+
2. 🔍 Web Research - Data analysis & web scraping
|
|
49
|
+
3. 📧 Email Agent - Professional email assistant
|
|
50
|
+
4. 🤖 Meta-Agent - ConnectOnion development assistant
|
|
51
|
+
5. 🎭 Playwright - Browser automation
|
|
52
|
+
6. ✨ Custom - AI generates based on your needs
|
|
53
|
+
|
|
54
|
+
Select template [1-6] [1]: 3
|
|
55
|
+
✓ Selected: 📧 Email Agent
|
|
56
|
+
|
|
57
|
+
[... configuration ...]
|
|
58
|
+
|
|
59
|
+
Project name [my-agent]: email-assistant
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Rationale
|
|
63
|
+
|
|
64
|
+
### Why Template First?
|
|
65
|
+
- **Natural decision flow**: Users first decide WHAT they want to build, then HOW to configure it, and finally WHAT to name it
|
|
66
|
+
- **Reduces cognitive load**: Naming is easier after understanding the project scope
|
|
67
|
+
- **Better defaults**: We can suggest better default names based on template choice (future enhancement)
|
|
68
|
+
|
|
69
|
+
### Why Numeric Selection?
|
|
70
|
+
- **Faster**: Pressing "3" is faster than typing "email-agent"
|
|
71
|
+
- **Less error-prone**: No typos or case sensitivity issues
|
|
72
|
+
- **More accessible**: Better for users with mobility constraints
|
|
73
|
+
- **Industry standard**: Common pattern in CLI tools (npm init, create-react-app, etc.)
|
|
74
|
+
|
|
75
|
+
### Why Minimal Display?
|
|
76
|
+
- **Reduces overwhelm**: Users see essential information only
|
|
77
|
+
- **Faster scanning**: Clean list is easier to parse than verbose trees
|
|
78
|
+
- **Mobile-friendly**: Works better in small terminal windows
|
|
79
|
+
- **Progressive disclosure**: Details available after selection if needed
|
|
80
|
+
|
|
81
|
+
## Consequences
|
|
82
|
+
|
|
83
|
+
### Positive
|
|
84
|
+
- Improved user experience with more intuitive flow
|
|
85
|
+
- Faster project creation (fewer keystrokes)
|
|
86
|
+
- Reduced decision paralysis
|
|
87
|
+
- Better alignment with user mental models
|
|
88
|
+
- More professional CLI experience
|
|
89
|
+
|
|
90
|
+
### Negative
|
|
91
|
+
- Breaking change for users expecting old flow
|
|
92
|
+
- Scripts using the old flow need updating
|
|
93
|
+
- Less information upfront (though this is intentional)
|
|
94
|
+
|
|
95
|
+
### Mitigations
|
|
96
|
+
- The `-y` flag still works for automated/scripted usage
|
|
97
|
+
- Template can still be specified via `-t` flag
|
|
98
|
+
- Verbose information still available via `--help`
|
|
99
|
+
|
|
100
|
+
## Alternatives Considered
|
|
101
|
+
|
|
102
|
+
1. **Interactive menu with arrow keys**: More complex to implement, requires additional dependencies
|
|
103
|
+
2. **Keep name first but make optional**: Would complicate the flow with conditional logic
|
|
104
|
+
3. **Show all information but paginated**: Would slow down the process
|
|
105
|
+
4. **GUI/TUI interface**: Outside scope of simple CLI tool
|
|
106
|
+
|
|
107
|
+
## References
|
|
108
|
+
- User feedback: "I think user are lazy, should let them to choose from template"
|
|
109
|
+
- Similar patterns: npm init, cargo new, create-react-app
|
|
110
|
+
- UX principle: Progressive disclosure
|
|
111
|
+
- ConnectOnion philosophy: "Keep simple things simple"
|
|
112
|
+
|
|
113
|
+
## Future Enhancements
|
|
114
|
+
- Smart default names based on template (e.g., "my-email-agent" for email template)
|
|
115
|
+
- Remember user preferences for next time
|
|
116
|
+
- Template preview on hover/selection (if terminal supports it)
|
|
117
|
+
- Custom template gallery from community
|