openclaw-py 0.1.2__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.
- openclaw_py-0.1.2/.agent/workflows/components/connections/channel-auth.md +34 -0
- openclaw_py-0.1.2/.agent/workflows/components/connections/llm-provider.md +41 -0
- openclaw_py-0.1.2/.agent/workflows/components/nodes/http-probe.md +53 -0
- openclaw_py-0.1.2/.agent/workflows/components/nodes/llm-chat.md +66 -0
- openclaw_py-0.1.2/.agent/workflows/components/nodes/notify.md +61 -0
- openclaw_py-0.1.2/.agent/workflows/components/nodes/pip-audit.md +48 -0
- openclaw_py-0.1.2/.agent/workflows/components/triggers/cron.md +16 -0
- openclaw_py-0.1.2/.agent/workflows/components/triggers/event.md +17 -0
- openclaw_py-0.1.2/.agent/workflows/components/triggers/webhook.md +17 -0
- openclaw_py-0.1.2/.agent/workflows/flows/channel-health-check/config.yaml +13 -0
- openclaw_py-0.1.2/.agent/workflows/flows/channel-health-check/flow.md +32 -0
- openclaw_py-0.1.2/.agent/workflows/flows/channel-health-check/logs/.gitkeep +0 -0
- openclaw_py-0.1.2/.agent/workflows/flows/channel-health-check/run.sh +42 -0
- openclaw_py-0.1.2/.agent/workflows/flows/channel-health-check/state/.gitkeep +0 -0
- openclaw_py-0.1.2/.agent/workflows/flows/daily-memory-digest/config.yaml +16 -0
- openclaw_py-0.1.2/.agent/workflows/flows/daily-memory-digest/flow.md +31 -0
- openclaw_py-0.1.2/.agent/workflows/flows/daily-memory-digest/logs/.gitkeep +0 -0
- openclaw_py-0.1.2/.agent/workflows/flows/daily-memory-digest/run.sh +37 -0
- openclaw_py-0.1.2/.agent/workflows/flows/daily-memory-digest/state/.gitkeep +0 -0
- openclaw_py-0.1.2/.agent/workflows/flows/dependency-check/config.yaml +12 -0
- openclaw_py-0.1.2/.agent/workflows/flows/dependency-check/flow.md +31 -0
- openclaw_py-0.1.2/.agent/workflows/flows/dependency-check/logs/.gitkeep +0 -0
- openclaw_py-0.1.2/.agent/workflows/flows/dependency-check/run.sh +47 -0
- openclaw_py-0.1.2/.agent/workflows/flows/dependency-check/state/.gitkeep +0 -0
- openclaw_py-0.1.2/.agent/workflows/flows/model-probe/config.yaml +14 -0
- openclaw_py-0.1.2/.agent/workflows/flows/model-probe/flow.md +31 -0
- openclaw_py-0.1.2/.agent/workflows/flows/model-probe/logs/.gitkeep +0 -0
- openclaw_py-0.1.2/.agent/workflows/flows/model-probe/run.sh +49 -0
- openclaw_py-0.1.2/.agent/workflows/flows/model-probe/state/.gitkeep +0 -0
- openclaw_py-0.1.2/.agent/workflows/flows/security-audit/config.yaml +20 -0
- openclaw_py-0.1.2/.agent/workflows/flows/security-audit/flow.md +32 -0
- openclaw_py-0.1.2/.agent/workflows/flows/security-audit/logs/.gitkeep +0 -0
- openclaw_py-0.1.2/.agent/workflows/flows/security-audit/run.sh +44 -0
- openclaw_py-0.1.2/.agent/workflows/flows/security-audit/state/.gitkeep +0 -0
- openclaw_py-0.1.2/.agent/workflows/index.md +27 -0
- openclaw_py-0.1.2/.dockerignore +21 -0
- openclaw_py-0.1.2/.github/FUNDING.yml +1 -0
- openclaw_py-0.1.2/.github/ISSUE_TEMPLATE/bug_report.yml +108 -0
- openclaw_py-0.1.2/.github/ISSUE_TEMPLATE/config.yml +8 -0
- openclaw_py-0.1.2/.github/ISSUE_TEMPLATE/feature_request.yml +70 -0
- openclaw_py-0.1.2/.github/dependabot.yml +62 -0
- openclaw_py-0.1.2/.github/labeler.yml +85 -0
- openclaw_py-0.1.2/.github/pull_request_template.md +108 -0
- openclaw_py-0.1.2/.github/workflows/actionlint.yml +30 -0
- openclaw_py-0.1.2/.github/workflows/ci.yml +181 -0
- openclaw_py-0.1.2/.github/workflows/codeql.yml +46 -0
- openclaw_py-0.1.2/.github/workflows/dependency-review.yml +24 -0
- openclaw_py-0.1.2/.github/workflows/docker.yml +64 -0
- openclaw_py-0.1.2/.github/workflows/install-smoke.yml +120 -0
- openclaw_py-0.1.2/.github/workflows/labeler.yml +49 -0
- openclaw_py-0.1.2/.github/workflows/pr-label-automation.yml +54 -0
- openclaw_py-0.1.2/.github/workflows/pr-template-check.yml +38 -0
- openclaw_py-0.1.2/.github/workflows/pre-commit.yml +41 -0
- openclaw_py-0.1.2/.github/workflows/release.yml +217 -0
- openclaw_py-0.1.2/.github/workflows/scorecard.yml +51 -0
- openclaw_py-0.1.2/.github/workflows/stale.yml +40 -0
- openclaw_py-0.1.2/.gitignore +68 -0
- openclaw_py-0.1.2/.pre-commit-config.yaml +7 -0
- openclaw_py-0.1.2/CHANGELOG.md +52 -0
- openclaw_py-0.1.2/CONTRIBUTING.md +264 -0
- openclaw_py-0.1.2/Dockerfile +39 -0
- openclaw_py-0.1.2/Formula/pyclaw.rb +39 -0
- openclaw_py-0.1.2/LICENSE +21 -0
- openclaw_py-0.1.2/Makefile +71 -0
- openclaw_py-0.1.2/PKG-INFO +940 -0
- openclaw_py-0.1.2/README.md +829 -0
- openclaw_py-0.1.2/docker-compose.yml +18 -0
- openclaw_py-0.1.2/docs/.i18n/README.md +31 -0
- openclaw_py-0.1.2/docs/.i18n/glossary.ja-JP.json +14 -0
- openclaw_py-0.1.2/docs/.i18n/glossary.zh-CN.json +210 -0
- openclaw_py-0.1.2/docs/CNAME +1 -0
- openclaw_py-0.1.2/docs/README.md +54 -0
- openclaw_py-0.1.2/docs/api-reference.md +477 -0
- openclaw_py-0.1.2/docs/architecture.md +393 -0
- openclaw_py-0.1.2/docs/concepts.md +209 -0
- openclaw_py-0.1.2/docs/configuration.md +366 -0
- openclaw_py-0.1.2/docs/install.md +188 -0
- openclaw_py-0.1.2/docs/quickstart.md +127 -0
- openclaw_py-0.1.2/docs/reference/20260301_plan.md +687 -0
- openclaw_py-0.1.2/docs/reference/20260301gap.md +544 -0
- openclaw_py-0.1.2/docs/reference/20260302_todo.md +344 -0
- openclaw_py-0.1.2/docs/reference/PROGRESS.md +809 -0
- openclaw_py-0.1.2/docs/reference/gap-analysis.md +418 -0
- openclaw_py-0.1.2/docs/reference/github_automation_plan_0304.md +304 -0
- openclaw_py-0.1.2/docs/reference/implement_plan_20260228.md +183 -0
- openclaw_py-0.1.2/docs/reference/implement_plan_next.md +644 -0
- openclaw_py-0.1.2/docs/reference/platform_implement_plan_0304.md +364 -0
- openclaw_py-0.1.2/docs/reference/python-flet-rewrite-plan.md +678 -0
- openclaw_py-0.1.2/docs/reference/ui_upgrade_plan.md +481 -0
- openclaw_py-0.1.2/docs/troubleshooting.md +242 -0
- openclaw_py-0.1.2/flet_app.py +37 -0
- openclaw_py-0.1.2/pyproject.toml +228 -0
- openclaw_py-0.1.2/scripts/build-all.ps1 +76 -0
- openclaw_py-0.1.2/scripts/build-all.sh +90 -0
- openclaw_py-0.1.2/scripts/build-desktop.sh +61 -0
- openclaw_py-0.1.2/scripts/build-mobile.sh +57 -0
- openclaw_py-0.1.2/scripts/build-web.sh +30 -0
- openclaw_py-0.1.2/scripts/generate-release-notes.sh +74 -0
- openclaw_py-0.1.2/scripts/install.ps1 +116 -0
- openclaw_py-0.1.2/scripts/install.sh +140 -0
- openclaw_py-0.1.2/scripts/uninstall.ps1 +101 -0
- openclaw_py-0.1.2/scripts/uninstall.sh +75 -0
- openclaw_py-0.1.2/src/pyclaw/__init__.py +3 -0
- openclaw_py-0.1.2/src/pyclaw/acp/__init__.py +46 -0
- openclaw_py-0.1.2/src/pyclaw/acp/acpx_runtime.py +331 -0
- openclaw_py-0.1.2/src/pyclaw/acp/client.py +185 -0
- openclaw_py-0.1.2/src/pyclaw/acp/control_plane.py +218 -0
- openclaw_py-0.1.2/src/pyclaw/acp/event_mapper.py +67 -0
- openclaw_py-0.1.2/src/pyclaw/acp/server.py +431 -0
- openclaw_py-0.1.2/src/pyclaw/acp/session.py +83 -0
- openclaw_py-0.1.2/src/pyclaw/acp/session_mapper.py +175 -0
- openclaw_py-0.1.2/src/pyclaw/acp/thread_ownership.py +110 -0
- openclaw_py-0.1.2/src/pyclaw/acp/types.py +44 -0
- openclaw_py-0.1.2/src/pyclaw/agents/__init__.py +0 -0
- openclaw_py-0.1.2/src/pyclaw/agents/auth/__init__.py +0 -0
- openclaw_py-0.1.2/src/pyclaw/agents/auth_profiles/__init__.py +49 -0
- openclaw_py-0.1.2/src/pyclaw/agents/auth_profiles/profiles.py +115 -0
- openclaw_py-0.1.2/src/pyclaw/agents/auth_profiles/store.py +123 -0
- openclaw_py-0.1.2/src/pyclaw/agents/auth_profiles/types.py +177 -0
- openclaw_py-0.1.2/src/pyclaw/agents/auth_profiles/usage.py +145 -0
- openclaw_py-0.1.2/src/pyclaw/agents/auto_reply.py +243 -0
- openclaw_py-0.1.2/src/pyclaw/agents/compaction_policy.py +263 -0
- openclaw_py-0.1.2/src/pyclaw/agents/embedded_runner/__init__.py +0 -0
- openclaw_py-0.1.2/src/pyclaw/agents/embedded_runner/helpers.py +295 -0
- openclaw_py-0.1.2/src/pyclaw/agents/embedded_runner/run.py +263 -0
- openclaw_py-0.1.2/src/pyclaw/agents/embedded_runner/session_manager.py +216 -0
- openclaw_py-0.1.2/src/pyclaw/agents/embedded_runner/thinking.py +268 -0
- openclaw_py-0.1.2/src/pyclaw/agents/embedded_runner/tool_guards.py +271 -0
- openclaw_py-0.1.2/src/pyclaw/agents/export/template.css +1060 -0
- openclaw_py-0.1.2/src/pyclaw/agents/export/template.html +88 -0
- openclaw_py-0.1.2/src/pyclaw/agents/intent.py +173 -0
- openclaw_py-0.1.2/src/pyclaw/agents/interrupt.py +118 -0
- openclaw_py-0.1.2/src/pyclaw/agents/link_understanding.py +253 -0
- openclaw_py-0.1.2/src/pyclaw/agents/model_catalog.py +507 -0
- openclaw_py-0.1.2/src/pyclaw/agents/model_fallback.py +238 -0
- openclaw_py-0.1.2/src/pyclaw/agents/models/__init__.py +0 -0
- openclaw_py-0.1.2/src/pyclaw/agents/planner.py +305 -0
- openclaw_py-0.1.2/src/pyclaw/agents/progress.py +133 -0
- openclaw_py-0.1.2/src/pyclaw/agents/providers/__init__.py +0 -0
- openclaw_py-0.1.2/src/pyclaw/agents/providers/azure_openai.py +232 -0
- openclaw_py-0.1.2/src/pyclaw/agents/providers/bedrock.py +221 -0
- openclaw_py-0.1.2/src/pyclaw/agents/providers/cn_providers.py +193 -0
- openclaw_py-0.1.2/src/pyclaw/agents/providers/extra_providers.py +171 -0
- openclaw_py-0.1.2/src/pyclaw/agents/providers/oauth_providers.py +308 -0
- openclaw_py-0.1.2/src/pyclaw/agents/providers/ollama_enhanced.py +232 -0
- openclaw_py-0.1.2/src/pyclaw/agents/providers/openai_compat.py +299 -0
- openclaw_py-0.1.2/src/pyclaw/agents/providers/registry.py +203 -0
- openclaw_py-0.1.2/src/pyclaw/agents/runner.py +295 -0
- openclaw_py-0.1.2/src/pyclaw/agents/session.py +352 -0
- openclaw_py-0.1.2/src/pyclaw/agents/session_lock.py +68 -0
- openclaw_py-0.1.2/src/pyclaw/agents/skills/__init__.py +27 -0
- openclaw_py-0.1.2/src/pyclaw/agents/skills/docx/SKILL.md +24 -0
- openclaw_py-0.1.2/src/pyclaw/agents/skills/loader.py +167 -0
- openclaw_py-0.1.2/src/pyclaw/agents/skills/marketplace.py +198 -0
- openclaw_py-0.1.2/src/pyclaw/agents/skills/pdf/SKILL.md +24 -0
- openclaw_py-0.1.2/src/pyclaw/agents/skills/pptx/SKILL.md +24 -0
- openclaw_py-0.1.2/src/pyclaw/agents/skills/prompt.py +98 -0
- openclaw_py-0.1.2/src/pyclaw/agents/skills/social/SKILL.md +40 -0
- openclaw_py-0.1.2/src/pyclaw/agents/skills/types.py +59 -0
- openclaw_py-0.1.2/src/pyclaw/agents/skills/xlsx/SKILL.md +24 -0
- openclaw_py-0.1.2/src/pyclaw/agents/stream.py +337 -0
- openclaw_py-0.1.2/src/pyclaw/agents/subagents/__init__.py +19 -0
- openclaw_py-0.1.2/src/pyclaw/agents/subagents/manager.py +257 -0
- openclaw_py-0.1.2/src/pyclaw/agents/subagents/runner.py +33 -0
- openclaw_py-0.1.2/src/pyclaw/agents/subagents/types.py +61 -0
- openclaw_py-0.1.2/src/pyclaw/agents/system_prompt.py +256 -0
- openclaw_py-0.1.2/src/pyclaw/agents/templates/AGENTS.default.md +124 -0
- openclaw_py-0.1.2/src/pyclaw/agents/templates/AGENTS.dev.md +83 -0
- openclaw_py-0.1.2/src/pyclaw/agents/templates/AGENTS.md +219 -0
- openclaw_py-0.1.2/src/pyclaw/agents/templates/BOOT.md +11 -0
- openclaw_py-0.1.2/src/pyclaw/agents/templates/BOOTSTRAP.md +62 -0
- openclaw_py-0.1.2/src/pyclaw/agents/templates/HEARTBEAT.md +12 -0
- openclaw_py-0.1.2/src/pyclaw/agents/templates/IDENTITY.dev.md +47 -0
- openclaw_py-0.1.2/src/pyclaw/agents/templates/SOUL.dev.md +76 -0
- openclaw_py-0.1.2/src/pyclaw/agents/templates/SOUL.md +43 -0
- openclaw_py-0.1.2/src/pyclaw/agents/templates/TOOLS.dev.md +24 -0
- openclaw_py-0.1.2/src/pyclaw/agents/templates/TOOLS.md +47 -0
- openclaw_py-0.1.2/src/pyclaw/agents/templates/USER.dev.md +18 -0
- openclaw_py-0.1.2/src/pyclaw/agents/tokens.py +55 -0
- openclaw_py-0.1.2/src/pyclaw/agents/tool_policy.py +157 -0
- openclaw_py-0.1.2/src/pyclaw/agents/tools/__init__.py +6 -0
- openclaw_py-0.1.2/src/pyclaw/agents/tools/base.py +34 -0
- openclaw_py-0.1.2/src/pyclaw/agents/tools/browser_tool.py +140 -0
- openclaw_py-0.1.2/src/pyclaw/agents/tools/clipboard_tool.py +73 -0
- openclaw_py-0.1.2/src/pyclaw/agents/tools/cron_tool.py +129 -0
- openclaw_py-0.1.2/src/pyclaw/agents/tools/desktop_screenshot.py +103 -0
- openclaw_py-0.1.2/src/pyclaw/agents/tools/exec_tool.py +225 -0
- openclaw_py-0.1.2/src/pyclaw/agents/tools/file_tools.py +239 -0
- openclaw_py-0.1.2/src/pyclaw/agents/tools/fs_tools.py +338 -0
- openclaw_py-0.1.2/src/pyclaw/agents/tools/host-env-security-policy.json +23 -0
- openclaw_py-0.1.2/src/pyclaw/agents/tools/memory_tools.py +119 -0
- openclaw_py-0.1.2/src/pyclaw/agents/tools/message_tool.py +75 -0
- openclaw_py-0.1.2/src/pyclaw/agents/tools/office_tools.py +260 -0
- openclaw_py-0.1.2/src/pyclaw/agents/tools/patch_tool.py +216 -0
- openclaw_py-0.1.2/src/pyclaw/agents/tools/process_tool.py +160 -0
- openclaw_py-0.1.2/src/pyclaw/agents/tools/registry.py +165 -0
- openclaw_py-0.1.2/src/pyclaw/agents/tools/runtime_context.py +54 -0
- openclaw_py-0.1.2/src/pyclaw/agents/tools/send_file.py +89 -0
- openclaw_py-0.1.2/src/pyclaw/agents/tools/session_tools.py +118 -0
- openclaw_py-0.1.2/src/pyclaw/agents/tools/social_tools.py +127 -0
- openclaw_py-0.1.2/src/pyclaw/agents/tools/subagent_tools.py +210 -0
- openclaw_py-0.1.2/src/pyclaw/agents/tools/tool-display.json +316 -0
- openclaw_py-0.1.2/src/pyclaw/agents/tools/tts_tool.py +129 -0
- openclaw_py-0.1.2/src/pyclaw/agents/tools/web_tools.py +227 -0
- openclaw_py-0.1.2/src/pyclaw/agents/transports/__init__.py +1 -0
- openclaw_py-0.1.2/src/pyclaw/agents/transports/codex.py +131 -0
- openclaw_py-0.1.2/src/pyclaw/agents/tts_extended.py +255 -0
- openclaw_py-0.1.2/src/pyclaw/agents/types.py +72 -0
- openclaw_py-0.1.2/src/pyclaw/agents/workspace_sync.py +85 -0
- openclaw_py-0.1.2/src/pyclaw/auto_reply/__init__.py +0 -0
- openclaw_py-0.1.2/src/pyclaw/auto_reply/block_streaming.py +180 -0
- openclaw_py-0.1.2/src/pyclaw/auto_reply/commands_core.py +173 -0
- openclaw_py-0.1.2/src/pyclaw/auto_reply/commands_model.py +95 -0
- openclaw_py-0.1.2/src/pyclaw/auto_reply/commands_registry.py +286 -0
- openclaw_py-0.1.2/src/pyclaw/auto_reply/commands_session.py +83 -0
- openclaw_py-0.1.2/src/pyclaw/auto_reply/directives.py +193 -0
- openclaw_py-0.1.2/src/pyclaw/auto_reply/export_html.py +168 -0
- openclaw_py-0.1.2/src/pyclaw/auto_reply/message_queue.py +187 -0
- openclaw_py-0.1.2/src/pyclaw/auto_reply/reply_dispatcher.py +202 -0
- openclaw_py-0.1.2/src/pyclaw/browser/__init__.py +1 -0
- openclaw_py-0.1.2/src/pyclaw/browser/agent_tools.py +336 -0
- openclaw_py-0.1.2/src/pyclaw/browser/bridge_server.py +220 -0
- openclaw_py-0.1.2/src/pyclaw/browser/navigation_guard.py +178 -0
- openclaw_py-0.1.2/src/pyclaw/browser/relay.py +237 -0
- openclaw_py-0.1.2/src/pyclaw/browser/screenshot.py +217 -0
- openclaw_py-0.1.2/src/pyclaw/browser/session_manager.py +261 -0
- openclaw_py-0.1.2/src/pyclaw/canvas/__init__.py +13 -0
- openclaw_py-0.1.2/src/pyclaw/canvas/handler.py +76 -0
- openclaw_py-0.1.2/src/pyclaw/canvas/server.py +143 -0
- openclaw_py-0.1.2/src/pyclaw/channels/__init__.py +6 -0
- openclaw_py-0.1.2/src/pyclaw/channels/auth_guard.py +259 -0
- openclaw_py-0.1.2/src/pyclaw/channels/base.py +294 -0
- openclaw_py-0.1.2/src/pyclaw/channels/bluebubbles/__init__.py +1 -0
- openclaw_py-0.1.2/src/pyclaw/channels/bluebubbles/channel.py +128 -0
- openclaw_py-0.1.2/src/pyclaw/channels/command_gating.py +205 -0
- openclaw_py-0.1.2/src/pyclaw/channels/dingtalk/__init__.py +1 -0
- openclaw_py-0.1.2/src/pyclaw/channels/dingtalk/channel.py +255 -0
- openclaw_py-0.1.2/src/pyclaw/channels/discord/__init__.py +5 -0
- openclaw_py-0.1.2/src/pyclaw/channels/discord/channel.py +142 -0
- openclaw_py-0.1.2/src/pyclaw/channels/discord/voice.py +206 -0
- openclaw_py-0.1.2/src/pyclaw/channels/feishu/__init__.py +1 -0
- openclaw_py-0.1.2/src/pyclaw/channels/feishu/channel.py +299 -0
- openclaw_py-0.1.2/src/pyclaw/channels/feishu/docx.py +300 -0
- openclaw_py-0.1.2/src/pyclaw/channels/feishu/messages.py +271 -0
- openclaw_py-0.1.2/src/pyclaw/channels/feishu/reactions.py +146 -0
- openclaw_py-0.1.2/src/pyclaw/channels/feishu/routing.py +140 -0
- openclaw_py-0.1.2/src/pyclaw/channels/feishu/runtime.py +226 -0
- openclaw_py-0.1.2/src/pyclaw/channels/googlechat/__init__.py +1 -0
- openclaw_py-0.1.2/src/pyclaw/channels/googlechat/channel.py +123 -0
- openclaw_py-0.1.2/src/pyclaw/channels/imessage/__init__.py +4 -0
- openclaw_py-0.1.2/src/pyclaw/channels/imessage/channel.py +126 -0
- openclaw_py-0.1.2/src/pyclaw/channels/imessage/client.py +156 -0
- openclaw_py-0.1.2/src/pyclaw/channels/irc/__init__.py +1 -0
- openclaw_py-0.1.2/src/pyclaw/channels/irc/channel.py +206 -0
- openclaw_py-0.1.2/src/pyclaw/channels/line/__init__.py +1 -0
- openclaw_py-0.1.2/src/pyclaw/channels/line/channel.py +211 -0
- openclaw_py-0.1.2/src/pyclaw/channels/manager.py +112 -0
- openclaw_py-0.1.2/src/pyclaw/channels/matrix/__init__.py +1 -0
- openclaw_py-0.1.2/src/pyclaw/channels/matrix/channel.py +130 -0
- openclaw_py-0.1.2/src/pyclaw/channels/mattermost/__init__.py +1 -0
- openclaw_py-0.1.2/src/pyclaw/channels/mattermost/channel.py +157 -0
- openclaw_py-0.1.2/src/pyclaw/channels/msteams/__init__.py +1 -0
- openclaw_py-0.1.2/src/pyclaw/channels/msteams/channel.py +153 -0
- openclaw_py-0.1.2/src/pyclaw/channels/nextcloud/__init__.py +1 -0
- openclaw_py-0.1.2/src/pyclaw/channels/nextcloud/channel.py +124 -0
- openclaw_py-0.1.2/src/pyclaw/channels/nostr/__init__.py +1 -0
- openclaw_py-0.1.2/src/pyclaw/channels/nostr/channel.py +211 -0
- openclaw_py-0.1.2/src/pyclaw/channels/outbound.py +260 -0
- openclaw_py-0.1.2/src/pyclaw/channels/plugin_sdk/__init__.py +0 -0
- openclaw_py-0.1.2/src/pyclaw/channels/plugin_sdk/ack_reactions.py +158 -0
- openclaw_py-0.1.2/src/pyclaw/channels/plugin_sdk/adapters.py +289 -0
- openclaw_py-0.1.2/src/pyclaw/channels/plugin_sdk/draft_stream.py +228 -0
- openclaw_py-0.1.2/src/pyclaw/channels/plugin_sdk/mention_gating.py +140 -0
- openclaw_py-0.1.2/src/pyclaw/channels/plugin_sdk/model_overrides.py +118 -0
- openclaw_py-0.1.2/src/pyclaw/channels/plugin_sdk/status_issues.py +250 -0
- openclaw_py-0.1.2/src/pyclaw/channels/plugins/__init__.py +0 -0
- openclaw_py-0.1.2/src/pyclaw/channels/plugins/account_helpers.py +168 -0
- openclaw_py-0.1.2/src/pyclaw/channels/plugins/actions.py +135 -0
- openclaw_py-0.1.2/src/pyclaw/channels/plugins/catalog.py +647 -0
- openclaw_py-0.1.2/src/pyclaw/channels/plugins/normalize.py +221 -0
- openclaw_py-0.1.2/src/pyclaw/channels/plugins/onboarding.py +492 -0
- openclaw_py-0.1.2/src/pyclaw/channels/plugins/outbound_adapters.py +293 -0
- openclaw_py-0.1.2/src/pyclaw/channels/plugins/status_issues.py +444 -0
- openclaw_py-0.1.2/src/pyclaw/channels/qq/__init__.py +1 -0
- openclaw_py-0.1.2/src/pyclaw/channels/qq/channel.py +283 -0
- openclaw_py-0.1.2/src/pyclaw/channels/signal/__init__.py +5 -0
- openclaw_py-0.1.2/src/pyclaw/channels/signal/channel.py +229 -0
- openclaw_py-0.1.2/src/pyclaw/channels/slack/__init__.py +5 -0
- openclaw_py-0.1.2/src/pyclaw/channels/slack/channel.py +178 -0
- openclaw_py-0.1.2/src/pyclaw/channels/synology/__init__.py +1 -0
- openclaw_py-0.1.2/src/pyclaw/channels/synology/channel.py +99 -0
- openclaw_py-0.1.2/src/pyclaw/channels/telegram/__init__.py +5 -0
- openclaw_py-0.1.2/src/pyclaw/channels/telegram/channel.py +291 -0
- openclaw_py-0.1.2/src/pyclaw/channels/telegram/enhanced.py +331 -0
- openclaw_py-0.1.2/src/pyclaw/channels/thread_bindings_policy.py +219 -0
- openclaw_py-0.1.2/src/pyclaw/channels/tlon/__init__.py +1 -0
- openclaw_py-0.1.2/src/pyclaw/channels/tlon/channel.py +186 -0
- openclaw_py-0.1.2/src/pyclaw/channels/twitch/__init__.py +1 -0
- openclaw_py-0.1.2/src/pyclaw/channels/twitch/channel.py +129 -0
- openclaw_py-0.1.2/src/pyclaw/channels/typing_manager.py +228 -0
- openclaw_py-0.1.2/src/pyclaw/channels/voice_call/__init__.py +1 -0
- openclaw_py-0.1.2/src/pyclaw/channels/voice_call/channel.py +213 -0
- openclaw_py-0.1.2/src/pyclaw/channels/voice_call/twilio_provider.py +138 -0
- openclaw_py-0.1.2/src/pyclaw/channels/voice_call/types.py +94 -0
- openclaw_py-0.1.2/src/pyclaw/channels/whatsapp/__init__.py +5 -0
- openclaw_py-0.1.2/src/pyclaw/channels/whatsapp/channel.py +286 -0
- openclaw_py-0.1.2/src/pyclaw/channels/zalo/__init__.py +1 -0
- openclaw_py-0.1.2/src/pyclaw/channels/zalo/channel.py +114 -0
- openclaw_py-0.1.2/src/pyclaw/channels/zalouser/__init__.py +1 -0
- openclaw_py-0.1.2/src/pyclaw/channels/zalouser/channel.py +112 -0
- openclaw_py-0.1.2/src/pyclaw/cli/__init__.py +0 -0
- openclaw_py-0.1.2/src/pyclaw/cli/app.py +1372 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/__init__.py +0 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/acp_cmd.py +111 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/agent.py +231 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/agents_cmd.py +86 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/auth_cmd.py +241 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/auth_providers.py +403 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/backup_cmd.py +143 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/bindings_cmd.py +123 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/browser_cmd.py +518 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/channels_cmd.py +120 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/channels_enhanced.py +247 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/config_cmd.py +125 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/devices_cmd.py +75 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/doctor.py +240 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/doctor_flows.py +399 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/gateway.py +20 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/gateway_cmd.py +354 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/local_models_cmd.py +91 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/logs_cmd.py +106 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/mcp_cmd.py +90 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/message_cmd.py +107 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/models_cmd.py +371 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/models_deep.py +206 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/node_cmd.py +19 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/onboarding_enhanced.py +263 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/secrets_cmd.py +138 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/security_cmd.py +231 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/service_cmd.py +68 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/sessions_cmd.py +219 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/setup.py +252 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/skills_cmd.py +97 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/status.py +226 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/status_enhanced.py +283 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/system_cmd.py +174 -0
- openclaw_py-0.1.2/src/pyclaw/cli/commands/workspace_cmd.py +54 -0
- openclaw_py-0.1.2/src/pyclaw/config/__init__.py +15 -0
- openclaw_py-0.1.2/src/pyclaw/config/backup.py +157 -0
- openclaw_py-0.1.2/src/pyclaw/config/defaults.py +138 -0
- openclaw_py-0.1.2/src/pyclaw/config/env_substitution.py +156 -0
- openclaw_py-0.1.2/src/pyclaw/config/includes.py +170 -0
- openclaw_py-0.1.2/src/pyclaw/config/io.py +74 -0
- openclaw_py-0.1.2/src/pyclaw/config/migrations.py +317 -0
- openclaw_py-0.1.2/src/pyclaw/config/paths.py +100 -0
- openclaw_py-0.1.2/src/pyclaw/config/runtime_overrides.py +175 -0
- openclaw_py-0.1.2/src/pyclaw/config/schema.py +424 -0
- openclaw_py-0.1.2/src/pyclaw/config/secrets.py +246 -0
- openclaw_py-0.1.2/src/pyclaw/config/session_store.py +267 -0
- openclaw_py-0.1.2/src/pyclaw/config/sessions/__init__.py +0 -0
- openclaw_py-0.1.2/src/pyclaw/config/sessions/types.py +114 -0
- openclaw_py-0.1.2/src/pyclaw/cron/__init__.py +5 -0
- openclaw_py-0.1.2/src/pyclaw/cron/advanced.py +273 -0
- openclaw_py-0.1.2/src/pyclaw/cron/history.py +183 -0
- openclaw_py-0.1.2/src/pyclaw/cron/scheduler.py +311 -0
- openclaw_py-0.1.2/src/pyclaw/daemon/__init__.py +8 -0
- openclaw_py-0.1.2/src/pyclaw/daemon/launchd.py +132 -0
- openclaw_py-0.1.2/src/pyclaw/daemon/schtasks.py +80 -0
- openclaw_py-0.1.2/src/pyclaw/daemon/service.py +55 -0
- openclaw_py-0.1.2/src/pyclaw/daemon/systemd.py +119 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/__init__.py +1 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/channel_health.py +198 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/config_reload.py +243 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/control_plane_rate_limit.py +131 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/control_ui.py +124 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/discovery.py +208 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/events.py +193 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/hooks_mapping.py +210 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/message_bus.py +155 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/methods/__init__.py +5 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/methods/agents.py +91 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/methods/backup_methods.py +78 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/methods/browser_methods.py +503 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/methods/channels.py +222 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/methods/chat.py +526 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/methods/chat_advanced.py +182 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/methods/config_methods.py +78 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/methods/connect.py +53 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/methods/cron_history_methods.py +38 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/methods/cron_methods.py +83 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/methods/device_pair.py +79 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/methods/exec_approvals.py +240 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/methods/extended.py +355 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/methods/health.py +42 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/methods/logs_methods.py +61 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/methods/models.py +55 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/methods/plan_methods.py +93 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/methods/registration.py +55 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/methods/secrets_methods.py +35 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/methods/sessions.py +223 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/methods/tools_catalog.py +48 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/node_command_policy.py +285 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/openai_compat.py +238 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/openresponses_http.py +282 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/plugin_routes.py +52 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/protocol/__init__.py +17 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/protocol/frames.py +102 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/server.py +290 -0
- openclaw_py-0.1.2/src/pyclaw/gateway/ws_guard.py +195 -0
- openclaw_py-0.1.2/src/pyclaw/hooks/__init__.py +27 -0
- openclaw_py-0.1.2/src/pyclaw/hooks/bundled/__init__.py +1 -0
- openclaw_py-0.1.2/src/pyclaw/hooks/bundled/extra_hooks.py +256 -0
- openclaw_py-0.1.2/src/pyclaw/hooks/bundled/gmail_watcher.py +129 -0
- openclaw_py-0.1.2/src/pyclaw/hooks/bundled/session_memory.py +67 -0
- openclaw_py-0.1.2/src/pyclaw/hooks/loader.py +84 -0
- openclaw_py-0.1.2/src/pyclaw/hooks/registry.py +72 -0
- openclaw_py-0.1.2/src/pyclaw/hooks/types.py +57 -0
- openclaw_py-0.1.2/src/pyclaw/infra/__init__.py +0 -0
- openclaw_py-0.1.2/src/pyclaw/infra/archive.py +186 -0
- openclaw_py-0.1.2/src/pyclaw/infra/bonjour.py +131 -0
- openclaw_py-0.1.2/src/pyclaw/infra/delivery.py +261 -0
- openclaw_py-0.1.2/src/pyclaw/infra/exec_approvals.py +200 -0
- openclaw_py-0.1.2/src/pyclaw/infra/heartbeat.py +265 -0
- openclaw_py-0.1.2/src/pyclaw/infra/misc_extras.py +501 -0
- openclaw_py-0.1.2/src/pyclaw/infra/outbound/__init__.py +0 -0
- openclaw_py-0.1.2/src/pyclaw/infra/outbound/channel_adapters.py +151 -0
- openclaw_py-0.1.2/src/pyclaw/infra/outbound/message_actions.py +139 -0
- openclaw_py-0.1.2/src/pyclaw/infra/outbound/send_service.py +157 -0
- openclaw_py-0.1.2/src/pyclaw/infra/outbound/target_resolver.py +146 -0
- openclaw_py-0.1.2/src/pyclaw/infra/provider_usage.py +228 -0
- openclaw_py-0.1.2/src/pyclaw/infra/rate_limit.py +122 -0
- openclaw_py-0.1.2/src/pyclaw/infra/retry.py +136 -0
- openclaw_py-0.1.2/src/pyclaw/infra/session_cost.py +384 -0
- openclaw_py-0.1.2/src/pyclaw/infra/ssh.py +170 -0
- openclaw_py-0.1.2/src/pyclaw/infra/system_events.py +206 -0
- openclaw_py-0.1.2/src/pyclaw/infra/tailscale.py +239 -0
- openclaw_py-0.1.2/src/pyclaw/infra/update_check.py +184 -0
- openclaw_py-0.1.2/src/pyclaw/local_models/__init__.py +26 -0
- openclaw_py-0.1.2/src/pyclaw/local_models/backends/__init__.py +1 -0
- openclaw_py-0.1.2/src/pyclaw/local_models/backends/llamacpp.py +85 -0
- openclaw_py-0.1.2/src/pyclaw/local_models/backends/mlx_backend.py +101 -0
- openclaw_py-0.1.2/src/pyclaw/local_models/chat_model.py +76 -0
- openclaw_py-0.1.2/src/pyclaw/local_models/manager.py +259 -0
- openclaw_py-0.1.2/src/pyclaw/local_models/schema.py +50 -0
- openclaw_py-0.1.2/src/pyclaw/logging/__init__.py +14 -0
- openclaw_py-0.1.2/src/pyclaw/logging/advanced.py +207 -0
- openclaw_py-0.1.2/src/pyclaw/logging/redact.py +93 -0
- openclaw_py-0.1.2/src/pyclaw/logging/subsystem.py +80 -0
- openclaw_py-0.1.2/src/pyclaw/main.py +11 -0
- openclaw_py-0.1.2/src/pyclaw/markdown/__init__.py +33 -0
- openclaw_py-0.1.2/src/pyclaw/markdown/channel_formats.py +223 -0
- openclaw_py-0.1.2/src/pyclaw/markdown/fences.py +62 -0
- openclaw_py-0.1.2/src/pyclaw/markdown/ir.py +191 -0
- openclaw_py-0.1.2/src/pyclaw/markdown/render.py +86 -0
- openclaw_py-0.1.2/src/pyclaw/markdown/tables.py +74 -0
- openclaw_py-0.1.2/src/pyclaw/mcp/__init__.py +1 -0
- openclaw_py-0.1.2/src/pyclaw/mcp/client.py +113 -0
- openclaw_py-0.1.2/src/pyclaw/mcp/http_transport.py +68 -0
- openclaw_py-0.1.2/src/pyclaw/mcp/registry.py +132 -0
- openclaw_py-0.1.2/src/pyclaw/mcp/stdio_transport.py +112 -0
- openclaw_py-0.1.2/src/pyclaw/mcp/types.py +78 -0
- openclaw_py-0.1.2/src/pyclaw/mcp/watcher.py +97 -0
- openclaw_py-0.1.2/src/pyclaw/media/__init__.py +23 -0
- openclaw_py-0.1.2/src/pyclaw/media/audio.py +54 -0
- openclaw_py-0.1.2/src/pyclaw/media/fetch.py +194 -0
- openclaw_py-0.1.2/src/pyclaw/media/images.py +121 -0
- openclaw_py-0.1.2/src/pyclaw/media/mime.py +89 -0
- openclaw_py-0.1.2/src/pyclaw/media/storage.py +102 -0
- openclaw_py-0.1.2/src/pyclaw/media/understanding/__init__.py +0 -0
- openclaw_py-0.1.2/src/pyclaw/media/understanding/apply.py +173 -0
- openclaw_py-0.1.2/src/pyclaw/media/understanding/extended.py +327 -0
- openclaw_py-0.1.2/src/pyclaw/media/understanding/providers/__init__.py +1 -0
- openclaw_py-0.1.2/src/pyclaw/media/understanding/providers/anthropic.py +73 -0
- openclaw_py-0.1.2/src/pyclaw/media/understanding/providers/google.py +102 -0
- openclaw_py-0.1.2/src/pyclaw/media/understanding/providers/openai.py +93 -0
- openclaw_py-0.1.2/src/pyclaw/media/understanding/registry.py +43 -0
- openclaw_py-0.1.2/src/pyclaw/media/understanding/types.py +105 -0
- openclaw_py-0.1.2/src/pyclaw/media/understanding/video.py +250 -0
- openclaw_py-0.1.2/src/pyclaw/memory/__init__.py +38 -0
- openclaw_py-0.1.2/src/pyclaw/memory/backend.py +220 -0
- openclaw_py-0.1.2/src/pyclaw/memory/daily_summary.py +218 -0
- openclaw_py-0.1.2/src/pyclaw/memory/embeddings.py +247 -0
- openclaw_py-0.1.2/src/pyclaw/memory/extended.py +269 -0
- openclaw_py-0.1.2/src/pyclaw/memory/file_manager.py +211 -0
- openclaw_py-0.1.2/src/pyclaw/memory/hybrid.py +93 -0
- openclaw_py-0.1.2/src/pyclaw/memory/lancedb_backend.py +229 -0
- openclaw_py-0.1.2/src/pyclaw/memory/mmr.py +130 -0
- openclaw_py-0.1.2/src/pyclaw/memory/qmd/__init__.py +9 -0
- openclaw_py-0.1.2/src/pyclaw/memory/qmd/store.py +208 -0
- openclaw_py-0.1.2/src/pyclaw/memory/query_expansion.py +194 -0
- openclaw_py-0.1.2/src/pyclaw/memory/store.py +284 -0
- openclaw_py-0.1.2/src/pyclaw/memory/temporal_decay.py +116 -0
- openclaw_py-0.1.2/src/pyclaw/node_host/__init__.py +9 -0
- openclaw_py-0.1.2/src/pyclaw/node_host/invoke.py +128 -0
- openclaw_py-0.1.2/src/pyclaw/node_host/runner.py +91 -0
- openclaw_py-0.1.2/src/pyclaw/pairing/__init__.py +25 -0
- openclaw_py-0.1.2/src/pyclaw/pairing/challenge.py +48 -0
- openclaw_py-0.1.2/src/pyclaw/pairing/setup_code.py +37 -0
- openclaw_py-0.1.2/src/pyclaw/pairing/store.py +221 -0
- openclaw_py-0.1.2/src/pyclaw/plugins/__init__.py +5 -0
- openclaw_py-0.1.2/src/pyclaw/plugins/contrib/__init__.py +0 -0
- openclaw_py-0.1.2/src/pyclaw/plugins/contrib/gemini_cli_auth.py +204 -0
- openclaw_py-0.1.2/src/pyclaw/plugins/contrib/memory_core.py +262 -0
- openclaw_py-0.1.2/src/pyclaw/plugins/contrib/misc_extensions.py +513 -0
- openclaw_py-0.1.2/src/pyclaw/plugins/extensions.py +199 -0
- openclaw_py-0.1.2/src/pyclaw/plugins/loader.py +125 -0
- openclaw_py-0.1.2/src/pyclaw/plugins/onboarding.py +190 -0
- openclaw_py-0.1.2/src/pyclaw/process/__init__.py +0 -0
- openclaw_py-0.1.2/src/pyclaw/process/command_queue.py +216 -0
- openclaw_py-0.1.2/src/pyclaw/process/supervisor.py +238 -0
- openclaw_py-0.1.2/src/pyclaw/py.typed +0 -0
- openclaw_py-0.1.2/src/pyclaw/routing/__init__.py +17 -0
- openclaw_py-0.1.2/src/pyclaw/routing/bindings.py +353 -0
- openclaw_py-0.1.2/src/pyclaw/routing/dispatch.py +226 -0
- openclaw_py-0.1.2/src/pyclaw/routing/session_key.py +56 -0
- openclaw_py-0.1.2/src/pyclaw/secrets/__init__.py +21 -0
- openclaw_py-0.1.2/src/pyclaw/secrets/apply.py +87 -0
- openclaw_py-0.1.2/src/pyclaw/secrets/audit.py +208 -0
- openclaw_py-0.1.2/src/pyclaw/secrets/plan.py +101 -0
- openclaw_py-0.1.2/src/pyclaw/secrets/resolve.py +149 -0
- openclaw_py-0.1.2/src/pyclaw/secrets/runtime.py +61 -0
- openclaw_py-0.1.2/src/pyclaw/security/__init__.py +20 -0
- openclaw_py-0.1.2/src/pyclaw/security/allowlist_boundaries.py +195 -0
- openclaw_py-0.1.2/src/pyclaw/security/audit.py +210 -0
- openclaw_py-0.1.2/src/pyclaw/security/audit_extra.py +271 -0
- openclaw_py-0.1.2/src/pyclaw/security/dangerous_tools.py +303 -0
- openclaw_py-0.1.2/src/pyclaw/security/dm_policy.py +77 -0
- openclaw_py-0.1.2/src/pyclaw/security/exec_approval.py +236 -0
- openclaw_py-0.1.2/src/pyclaw/security/exec_hardening.py +220 -0
- openclaw_py-0.1.2/src/pyclaw/security/gateway_hardening.py +235 -0
- openclaw_py-0.1.2/src/pyclaw/security/sandbox.py +219 -0
- openclaw_py-0.1.2/src/pyclaw/security/ssrf.py +179 -0
- openclaw_py-0.1.2/src/pyclaw/sessions/__init__.py +0 -0
- openclaw_py-0.1.2/src/pyclaw/sessions/advanced.py +222 -0
- openclaw_py-0.1.2/src/pyclaw/shared/__init__.py +0 -0
- openclaw_py-0.1.2/src/pyclaw/shared/utils.py +221 -0
- openclaw_py-0.1.2/src/pyclaw/social/__init__.py +5 -0
- openclaw_py-0.1.2/src/pyclaw/social/clawdchat.py +167 -0
- openclaw_py-0.1.2/src/pyclaw/social/moltbook.py +169 -0
- openclaw_py-0.1.2/src/pyclaw/social/registry.py +128 -0
- openclaw_py-0.1.2/src/pyclaw/terminal/__init__.py +13 -0
- openclaw_py-0.1.2/src/pyclaw/terminal/ansi.py +24 -0
- openclaw_py-0.1.2/src/pyclaw/terminal/palette.py +57 -0
- openclaw_py-0.1.2/src/pyclaw/terminal/table.py +158 -0
- openclaw_py-0.1.2/src/pyclaw/tools/__init__.py +1 -0
- openclaw_py-0.1.2/src/pyclaw/tools/canvas_tools.py +146 -0
- openclaw_py-0.1.2/src/pyclaw/tools/gateway_tools.py +121 -0
- openclaw_py-0.1.2/src/pyclaw/tools/nodes.py +105 -0
- openclaw_py-0.1.2/src/pyclaw/ui/__init__.py +1 -0
- openclaw_py-0.1.2/src/pyclaw/ui/agents_panel.py +229 -0
- openclaw_py-0.1.2/src/pyclaw/ui/app.py +2748 -0
- openclaw_py-0.1.2/src/pyclaw/ui/channels_panel.py +266 -0
- openclaw_py-0.1.2/src/pyclaw/ui/components.py +204 -0
- openclaw_py-0.1.2/src/pyclaw/ui/gateway_client.py +345 -0
- openclaw_py-0.1.2/src/pyclaw/ui/i18n.py +144 -0
- openclaw_py-0.1.2/src/pyclaw/ui/locales/de.json +46 -0
- openclaw_py-0.1.2/src/pyclaw/ui/locales/en.json +107 -0
- openclaw_py-0.1.2/src/pyclaw/ui/locales/ja.json +107 -0
- openclaw_py-0.1.2/src/pyclaw/ui/locales/zh-CN.json +107 -0
- openclaw_py-0.1.2/src/pyclaw/ui/media_preview.py +142 -0
- openclaw_py-0.1.2/src/pyclaw/ui/menubar.py +100 -0
- openclaw_py-0.1.2/src/pyclaw/ui/onboarding.py +212 -0
- openclaw_py-0.1.2/src/pyclaw/ui/permissions.py +287 -0
- openclaw_py-0.1.2/src/pyclaw/ui/responsive_shell.py +118 -0
- openclaw_py-0.1.2/src/pyclaw/ui/shimmer.py +205 -0
- openclaw_py-0.1.2/src/pyclaw/ui/theme.py +248 -0
- openclaw_py-0.1.2/src/pyclaw/ui/toolbar.py +112 -0
- openclaw_py-0.1.2/src/pyclaw/ui/tray.py +119 -0
- openclaw_py-0.1.2/src/pyclaw/ui/voice.py +218 -0
- openclaw_py-0.1.2/src/pyclaw/wizard/__init__.py +0 -0
- openclaw_py-0.1.2/src/pyclaw/wizard/session.py +286 -0
- openclaw_py-0.1.2/tests/__init__.py +0 -0
- openclaw_py-0.1.2/tests/conftest.py +16 -0
- openclaw_py-0.1.2/tests/fixtures/exec-allowlist-shell-parser-parity.json +82 -0
- openclaw_py-0.1.2/tests/fixtures/exec-wrapper-resolution-parity.json +39 -0
- openclaw_py-0.1.2/tests/fixtures/system-run-approval-binding-contract.json +115 -0
- openclaw_py-0.1.2/tests/fixtures/system-run-approval-mismatch-contract.json +67 -0
- openclaw_py-0.1.2/tests/fixtures/system-run-command-contract.json +75 -0
- openclaw_py-0.1.2/tests/test_acp.py +83 -0
- openclaw_py-0.1.2/tests/test_acp_cli_phase40.py +222 -0
- openclaw_py-0.1.2/tests/test_acp_enhanced.py +307 -0
- openclaw_py-0.1.2/tests/test_agent_runner.py +188 -0
- openclaw_py-0.1.2/tests/test_auto_reply.py +153 -0
- openclaw_py-0.1.2/tests/test_auto_reply_commands.py +463 -0
- openclaw_py-0.1.2/tests/test_benchmark.py +239 -0
- openclaw_py-0.1.2/tests/test_bindings.py +225 -0
- openclaw_py-0.1.2/tests/test_browser_automation.py +636 -0
- openclaw_py-0.1.2/tests/test_browser_cli_phase42.py +155 -0
- openclaw_py-0.1.2/tests/test_browser_deep_phase48.py +83 -0
- openclaw_py-0.1.2/tests/test_canvas.py +99 -0
- openclaw_py-0.1.2/tests/test_catalog_schema_alignment.py +161 -0
- openclaw_py-0.1.2/tests/test_channel_plugins_deep.py +291 -0
- openclaw_py-0.1.2/tests/test_channel_security.py +557 -0
- openclaw_py-0.1.2/tests/test_channels.py +233 -0
- openclaw_py-0.1.2/tests/test_channels_dingtalk_qq.py +185 -0
- openclaw_py-0.1.2/tests/test_cli_deep_phase47.py +171 -0
- openclaw_py-0.1.2/tests/test_cli_enhanced.py +480 -0
- openclaw_py-0.1.2/tests/test_cli_surface_phase39.py +164 -0
- openclaw_py-0.1.2/tests/test_config.py +127 -0
- openclaw_py-0.1.2/tests/test_config_advanced.py +416 -0
- openclaw_py-0.1.2/tests/test_cron.py +46 -0
- openclaw_py-0.1.2/tests/test_cron_history.py +97 -0
- openclaw_py-0.1.2/tests/test_cron_scheduler_enhanced.py +88 -0
- openclaw_py-0.1.2/tests/test_cron_tts_logging.py +477 -0
- openclaw_py-0.1.2/tests/test_daemon.py +82 -0
- openclaw_py-0.1.2/tests/test_delivery.py +140 -0
- openclaw_py-0.1.2/tests/test_docker_smoke.py +142 -0
- openclaw_py-0.1.2/tests/test_docs_parity_phase43.py +68 -0
- openclaw_py-0.1.2/tests/test_e2e_gateway.py +146 -0
- openclaw_py-0.1.2/tests/test_embedded_runner.py +606 -0
- openclaw_py-0.1.2/tests/test_embedded_runner_phase45.py +199 -0
- openclaw_py-0.1.2/tests/test_exec_approval.py +184 -0
- openclaw_py-0.1.2/tests/test_ext_channels.py +63 -0
- openclaw_py-0.1.2/tests/test_extensions.py +166 -0
- openclaw_py-0.1.2/tests/test_extensions_misc.py +352 -0
- openclaw_py-0.1.2/tests/test_feishu_enhanced.py +324 -0
- openclaw_py-0.1.2/tests/test_final_extras.py +484 -0
- openclaw_py-0.1.2/tests/test_gateway.py +244 -0
- openclaw_py-0.1.2/tests/test_gateway_advanced.py +401 -0
- openclaw_py-0.1.2/tests/test_gateway_agent_hardening.py +447 -0
- openclaw_py-0.1.2/tests/test_gateway_channels.py +174 -0
- openclaw_py-0.1.2/tests/test_gateway_cli_phase44.py +252 -0
- openclaw_py-0.1.2/tests/test_gateway_client.py +301 -0
- openclaw_py-0.1.2/tests/test_gateway_hardening.py +185 -0
- openclaw_py-0.1.2/tests/test_gateway_methods.py +83 -0
- openclaw_py-0.1.2/tests/test_gateway_methods_extended.py +337 -0
- openclaw_py-0.1.2/tests/test_gateway_rpc_phase46.py +196 -0
- openclaw_py-0.1.2/tests/test_hooks.py +145 -0
- openclaw_py-0.1.2/tests/test_i18n.py +118 -0
- openclaw_py-0.1.2/tests/test_infra.py +138 -0
- openclaw_py-0.1.2/tests/test_infra_misc.py +602 -0
- openclaw_py-0.1.2/tests/test_intent.py +114 -0
- openclaw_py-0.1.2/tests/test_interrupt.py +53 -0
- openclaw_py-0.1.2/tests/test_logging_module.py +73 -0
- openclaw_py-0.1.2/tests/test_markdown.py +132 -0
- openclaw_py-0.1.2/tests/test_mcp.py +188 -0
- openclaw_py-0.1.2/tests/test_mcp_integration.py +458 -0
- openclaw_py-0.1.2/tests/test_memory.py +95 -0
- openclaw_py-0.1.2/tests/test_memory_backend.py +232 -0
- openclaw_py-0.1.2/tests/test_message_bus.py +69 -0
- openclaw_py-0.1.2/tests/test_model_fallback.py +156 -0
- openclaw_py-0.1.2/tests/test_naming_parity_phase49.py +148 -0
- openclaw_py-0.1.2/tests/test_node_command_policy.py +140 -0
- openclaw_py-0.1.2/tests/test_node_host.py +60 -0
- openclaw_py-0.1.2/tests/test_onboarding_hooks.py +132 -0
- openclaw_py-0.1.2/tests/test_openresponses.py +252 -0
- openclaw_py-0.1.2/tests/test_outbound.py +147 -0
- openclaw_py-0.1.2/tests/test_pairing.py +105 -0
- openclaw_py-0.1.2/tests/test_planner.py +163 -0
- openclaw_py-0.1.2/tests/test_plugin_sdk.py +519 -0
- openclaw_py-0.1.2/tests/test_plugins.py +47 -0
- openclaw_py-0.1.2/tests/test_process_media.py +496 -0
- openclaw_py-0.1.2/tests/test_providers_extended.py +513 -0
- openclaw_py-0.1.2/tests/test_qmd.py +131 -0
- openclaw_py-0.1.2/tests/test_rpc_contract_phase58.py +365 -0
- openclaw_py-0.1.2/tests/test_runtime_context.py +42 -0
- openclaw_py-0.1.2/tests/test_sandbox.py +185 -0
- openclaw_py-0.1.2/tests/test_secrets.py +152 -0
- openclaw_py-0.1.2/tests/test_security.py +102 -0
- openclaw_py-0.1.2/tests/test_session.py +271 -0
- openclaw_py-0.1.2/tests/test_skills_marketplace.py +85 -0
- openclaw_py-0.1.2/tests/test_streaming_delivery.py +336 -0
- openclaw_py-0.1.2/tests/test_telegram_browser.py +385 -0
- openclaw_py-0.1.2/tests/test_terminal.py +48 -0
- openclaw_py-0.1.2/tests/test_thread_lifecycle.py +233 -0
- openclaw_py-0.1.2/tests/test_timeline.py +77 -0
- openclaw_py-0.1.2/tests/test_tools.py +290 -0
- openclaw_py-0.1.2/tests/test_tools_extra.py +64 -0
- openclaw_py-0.1.2/tests/test_typing_manager.py +129 -0
- openclaw_py-0.1.2/tests/test_usage_cost_phase41.py +150 -0
- openclaw_py-0.1.2/tests/test_workspace_sync.py +69 -0
- openclaw_py-0.1.2/uv.lock +2506 -0
- openclaw_py-0.1.2/web/icons/icon-192.png +0 -0
- openclaw_py-0.1.2/web/icons/icon-512.png +0 -0
- openclaw_py-0.1.2/web/icons/icon-maskable-192.png +0 -0
- openclaw_py-0.1.2/web/icons/icon-maskable-512.png +0 -0
- openclaw_py-0.1.2/web/manifest.json +36 -0
- openclaw_py-0.1.2/web/service-worker.js +76 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Connection: Channel Auth
|
|
2
|
+
|
|
3
|
+
Authentication tokens for messaging channels, resolved from pyclaw config.
|
|
4
|
+
|
|
5
|
+
## Schema
|
|
6
|
+
|
|
7
|
+
```yaml
|
|
8
|
+
type: connection
|
|
9
|
+
name: channel-auth
|
|
10
|
+
source: config # reads from ~/.openclaw/openclaw.json → channels
|
|
11
|
+
|
|
12
|
+
fields:
|
|
13
|
+
channel_type:
|
|
14
|
+
type: string
|
|
15
|
+
required: true
|
|
16
|
+
enum: [telegram, discord, slack, dingtalk, feishu, qq, whatsapp, matrix, line, msteams, wechat, irc, nostr, mattermost, nextcloud, synology, twitch, tlon, zalo, signal, bluebubbles, googlechat, imessage, voice_call]
|
|
17
|
+
token:
|
|
18
|
+
type: string
|
|
19
|
+
secret: true
|
|
20
|
+
required: true
|
|
21
|
+
extra:
|
|
22
|
+
type: object
|
|
23
|
+
required: false
|
|
24
|
+
description: Channel-specific additional fields (webhook_url, app_id, etc.)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Resolution
|
|
28
|
+
|
|
29
|
+
```python
|
|
30
|
+
from pyclaw.config.io import load_config
|
|
31
|
+
|
|
32
|
+
cfg = load_config()
|
|
33
|
+
channel_cfg = cfg.channels # per-channel config with tokens
|
|
34
|
+
```
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Connection: LLM Provider
|
|
2
|
+
|
|
3
|
+
Credentials for LLM API providers, resolved from pyclaw config.
|
|
4
|
+
|
|
5
|
+
## Schema
|
|
6
|
+
|
|
7
|
+
```yaml
|
|
8
|
+
type: connection
|
|
9
|
+
name: llm-provider
|
|
10
|
+
source: config # reads from ~/.openclaw/openclaw.json → models.providers
|
|
11
|
+
|
|
12
|
+
fields:
|
|
13
|
+
provider:
|
|
14
|
+
type: string
|
|
15
|
+
required: true
|
|
16
|
+
enum: [openai, anthropic, google, azure, ollama, custom]
|
|
17
|
+
base_url:
|
|
18
|
+
type: string
|
|
19
|
+
required: false
|
|
20
|
+
api_key:
|
|
21
|
+
type: string
|
|
22
|
+
secret: true
|
|
23
|
+
required: true
|
|
24
|
+
model:
|
|
25
|
+
type: string
|
|
26
|
+
required: false
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Resolution
|
|
30
|
+
|
|
31
|
+
The connection reads credentials from the active pyclaw config:
|
|
32
|
+
|
|
33
|
+
```python
|
|
34
|
+
from pyclaw.config.io import load_config
|
|
35
|
+
|
|
36
|
+
cfg = load_config()
|
|
37
|
+
provider = cfg.models.providers.get(provider_name)
|
|
38
|
+
# provider.baseUrl, provider.apiKey
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
No separate credential files are needed — pyclaw's config is the source of truth.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Node: HTTP Probe
|
|
2
|
+
|
|
3
|
+
Performs HTTP health checks against endpoints with configurable timeout and expected status codes.
|
|
4
|
+
|
|
5
|
+
## Schema
|
|
6
|
+
|
|
7
|
+
```yaml
|
|
8
|
+
type: node
|
|
9
|
+
name: http-probe
|
|
10
|
+
inputs:
|
|
11
|
+
url:
|
|
12
|
+
type: string
|
|
13
|
+
required: true
|
|
14
|
+
method:
|
|
15
|
+
type: string
|
|
16
|
+
default: GET
|
|
17
|
+
timeout_seconds:
|
|
18
|
+
type: number
|
|
19
|
+
default: 10
|
|
20
|
+
expected_status:
|
|
21
|
+
type: array
|
|
22
|
+
default: [200, 201, 204]
|
|
23
|
+
headers:
|
|
24
|
+
type: object
|
|
25
|
+
required: false
|
|
26
|
+
|
|
27
|
+
outputs:
|
|
28
|
+
status_code: number
|
|
29
|
+
response_time_ms: number
|
|
30
|
+
healthy: boolean
|
|
31
|
+
error: string | null
|
|
32
|
+
|
|
33
|
+
on_error: continue
|
|
34
|
+
on_empty: skip
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Implementation
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
#!/usr/bin/env bash
|
|
41
|
+
URL="$1"
|
|
42
|
+
TIMEOUT="${2:-10}"
|
|
43
|
+
START=$(date +%s%N)
|
|
44
|
+
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" --max-time "$TIMEOUT" "$URL" 2>/dev/null)
|
|
45
|
+
END=$(date +%s%N)
|
|
46
|
+
ELAPSED=$(( (END - START) / 1000000 ))
|
|
47
|
+
|
|
48
|
+
if [[ "$HTTP_CODE" =~ ^2 ]]; then
|
|
49
|
+
echo "{\"status_code\": $HTTP_CODE, \"response_time_ms\": $ELAPSED, \"healthy\": true, \"error\": null}"
|
|
50
|
+
else
|
|
51
|
+
echo "{\"status_code\": $HTTP_CODE, \"response_time_ms\": $ELAPSED, \"healthy\": false, \"error\": \"HTTP $HTTP_CODE\"}"
|
|
52
|
+
fi
|
|
53
|
+
```
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Node: LLM Chat
|
|
2
|
+
|
|
3
|
+
Sends a prompt to an LLM provider and captures the response. Used for summarization, analysis, and generation tasks within workflows.
|
|
4
|
+
|
|
5
|
+
## Schema
|
|
6
|
+
|
|
7
|
+
```yaml
|
|
8
|
+
type: node
|
|
9
|
+
name: llm-chat
|
|
10
|
+
connection: llm-provider
|
|
11
|
+
inputs:
|
|
12
|
+
prompt:
|
|
13
|
+
type: string
|
|
14
|
+
required: true
|
|
15
|
+
system_prompt:
|
|
16
|
+
type: string
|
|
17
|
+
required: false
|
|
18
|
+
model:
|
|
19
|
+
type: string
|
|
20
|
+
required: false
|
|
21
|
+
description: Override default model
|
|
22
|
+
max_tokens:
|
|
23
|
+
type: number
|
|
24
|
+
default: 1024
|
|
25
|
+
temperature:
|
|
26
|
+
type: number
|
|
27
|
+
default: 0.3
|
|
28
|
+
|
|
29
|
+
outputs:
|
|
30
|
+
response: string
|
|
31
|
+
usage:
|
|
32
|
+
prompt_tokens: number
|
|
33
|
+
completion_tokens: number
|
|
34
|
+
model_used: string
|
|
35
|
+
latency_ms: number
|
|
36
|
+
|
|
37
|
+
on_error: fail
|
|
38
|
+
on_empty: fail
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Implementation
|
|
42
|
+
|
|
43
|
+
```python
|
|
44
|
+
import time
|
|
45
|
+
from pyclaw.agents.stream import chat_completion
|
|
46
|
+
|
|
47
|
+
async def run(inputs: dict, connection: dict) -> dict:
|
|
48
|
+
start = time.monotonic()
|
|
49
|
+
result = await chat_completion(
|
|
50
|
+
provider=connection["provider"],
|
|
51
|
+
model=inputs.get("model", connection.get("model")),
|
|
52
|
+
messages=[
|
|
53
|
+
{"role": "system", "content": inputs.get("system_prompt", "")},
|
|
54
|
+
{"role": "user", "content": inputs["prompt"]},
|
|
55
|
+
],
|
|
56
|
+
max_tokens=inputs.get("max_tokens", 1024),
|
|
57
|
+
temperature=inputs.get("temperature", 0.3),
|
|
58
|
+
)
|
|
59
|
+
elapsed = int((time.monotonic() - start) * 1000)
|
|
60
|
+
return {
|
|
61
|
+
"response": result.content,
|
|
62
|
+
"usage": result.usage,
|
|
63
|
+
"model_used": result.model,
|
|
64
|
+
"latency_ms": elapsed,
|
|
65
|
+
}
|
|
66
|
+
```
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Node: Notify
|
|
2
|
+
|
|
3
|
+
Sends a notification message through a configured pyclaw channel. Useful for alerting on workflow results.
|
|
4
|
+
|
|
5
|
+
## Schema
|
|
6
|
+
|
|
7
|
+
```yaml
|
|
8
|
+
type: node
|
|
9
|
+
name: notify
|
|
10
|
+
connection: channel-auth
|
|
11
|
+
inputs:
|
|
12
|
+
channel_type:
|
|
13
|
+
type: string
|
|
14
|
+
required: true
|
|
15
|
+
recipient:
|
|
16
|
+
type: string
|
|
17
|
+
required: true
|
|
18
|
+
description: Chat ID, user ID, or channel name
|
|
19
|
+
message:
|
|
20
|
+
type: string
|
|
21
|
+
required: true
|
|
22
|
+
level:
|
|
23
|
+
type: string
|
|
24
|
+
default: info
|
|
25
|
+
enum: [info, warning, error, critical]
|
|
26
|
+
|
|
27
|
+
outputs:
|
|
28
|
+
sent: boolean
|
|
29
|
+
message_id: string | null
|
|
30
|
+
error: string | null
|
|
31
|
+
|
|
32
|
+
on_error: continue
|
|
33
|
+
on_empty: skip
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Implementation
|
|
37
|
+
|
|
38
|
+
```python
|
|
39
|
+
from pyclaw.channels.manager import get_channel
|
|
40
|
+
from pyclaw.channels.base import ChannelReply
|
|
41
|
+
|
|
42
|
+
async def run(inputs: dict, connection: dict) -> dict:
|
|
43
|
+
level_emoji = {
|
|
44
|
+
"info": "ℹ️", "warning": "⚠️",
|
|
45
|
+
"error": "❌", "critical": "🚨"
|
|
46
|
+
}
|
|
47
|
+
prefix = level_emoji.get(inputs.get("level", "info"), "")
|
|
48
|
+
text = f"{prefix} {inputs['message']}"
|
|
49
|
+
|
|
50
|
+
channel = get_channel(inputs["channel_type"])
|
|
51
|
+
reply = ChannelReply(
|
|
52
|
+
chat_id=inputs["recipient"],
|
|
53
|
+
text=text,
|
|
54
|
+
)
|
|
55
|
+
result = await channel.send(reply)
|
|
56
|
+
return {
|
|
57
|
+
"sent": result is not None,
|
|
58
|
+
"message_id": str(result) if result else None,
|
|
59
|
+
"error": None,
|
|
60
|
+
}
|
|
61
|
+
```
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Node: Pip Audit
|
|
2
|
+
|
|
3
|
+
Runs `pip-audit` to scan project dependencies for known vulnerabilities.
|
|
4
|
+
|
|
5
|
+
## Schema
|
|
6
|
+
|
|
7
|
+
```yaml
|
|
8
|
+
type: node
|
|
9
|
+
name: pip-audit
|
|
10
|
+
inputs:
|
|
11
|
+
project_dir:
|
|
12
|
+
type: string
|
|
13
|
+
default: "."
|
|
14
|
+
ignore_vulns:
|
|
15
|
+
type: array
|
|
16
|
+
default: []
|
|
17
|
+
description: GHSA IDs to ignore
|
|
18
|
+
|
|
19
|
+
outputs:
|
|
20
|
+
vulnerable_count: number
|
|
21
|
+
vulnerabilities: array
|
|
22
|
+
clean: boolean
|
|
23
|
+
|
|
24
|
+
on_error: continue
|
|
25
|
+
on_empty: skip
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Implementation
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
#!/usr/bin/env bash
|
|
32
|
+
set -euo pipefail
|
|
33
|
+
PROJECT_DIR="${1:-.}"
|
|
34
|
+
cd "$PROJECT_DIR"
|
|
35
|
+
|
|
36
|
+
pip install -q pip-audit 2>/dev/null
|
|
37
|
+
|
|
38
|
+
OUTPUT=$(pip-audit --format=json --require-hashes=false 2>/dev/null || true)
|
|
39
|
+
VULN_COUNT=$(echo "$OUTPUT" | python3 -c "
|
|
40
|
+
import sys, json
|
|
41
|
+
data = json.load(sys.stdin)
|
|
42
|
+
vulns = data.get('dependencies', [])
|
|
43
|
+
found = [v for v in vulns if v.get('vulns')]
|
|
44
|
+
print(len(found))
|
|
45
|
+
" 2>/dev/null || echo "0")
|
|
46
|
+
|
|
47
|
+
echo "{\"vulnerable_count\": $VULN_COUNT, \"clean\": $([ \"$VULN_COUNT\" = \"0\" ] && echo true || echo false)}"
|
|
48
|
+
```
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Trigger: Cron
|
|
2
|
+
|
|
3
|
+
Schedule-based trigger using APScheduler (already bundled in pyclaw).
|
|
4
|
+
|
|
5
|
+
## Schema
|
|
6
|
+
|
|
7
|
+
| Field | Type | Required | Default | Description |
|
|
8
|
+
|-------|------|----------|---------|-------------|
|
|
9
|
+
| schedule | string | yes | - | Cron expression (5-field) |
|
|
10
|
+
| timezone | string | no | UTC | Timezone for schedule |
|
|
11
|
+
| jitter_seconds | number | no | 0 | Random delay to avoid thundering herd |
|
|
12
|
+
|
|
13
|
+
## Integration
|
|
14
|
+
|
|
15
|
+
pyclaw includes APScheduler via the pyclaw.cron module. Workflows register as scheduled jobs
|
|
16
|
+
using scheduler.add_job() with trigger="cron" and the appropriate cron fields.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Trigger: Event
|
|
2
|
+
|
|
3
|
+
Internal pyclaw event trigger, integrated with the hooks system.
|
|
4
|
+
|
|
5
|
+
## Schema
|
|
6
|
+
|
|
7
|
+
| Field | Type | Required | Default | Description |
|
|
8
|
+
|-------|------|----------|---------|-------------|
|
|
9
|
+
| event_type | string | yes | - | message, session, agent, gateway, command, channel |
|
|
10
|
+
| event_action | string | no | - | Sub-action filter (e.g. message:received) |
|
|
11
|
+
| filter | object | no | - | Additional filter conditions |
|
|
12
|
+
|
|
13
|
+
## Integration
|
|
14
|
+
|
|
15
|
+
Uses pyclaw.hooks.registry.register_hook() to listen for internal events.
|
|
16
|
+
When a matching event fires, the workflow is triggered with the event data.
|
|
17
|
+
Supports both sync and async handlers via the existing hook infrastructure.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Trigger: Webhook
|
|
2
|
+
|
|
3
|
+
HTTP endpoint trigger exposed through the pyclaw gateway.
|
|
4
|
+
|
|
5
|
+
## Schema
|
|
6
|
+
|
|
7
|
+
| Field | Type | Required | Default | Description |
|
|
8
|
+
|-------|------|----------|---------|-------------|
|
|
9
|
+
| path | string | yes | - | URL path under /api/workflows/ |
|
|
10
|
+
| method | string | no | POST | HTTP method |
|
|
11
|
+
| auth | string | no | bearer | Auth type: none, bearer, api_key |
|
|
12
|
+
| secret | string | no | - | Shared secret for verification |
|
|
13
|
+
|
|
14
|
+
## Integration
|
|
15
|
+
|
|
16
|
+
Register webhook endpoints via the gateway FastAPI router at /api/workflows/trigger/{flow_name}.
|
|
17
|
+
The endpoint validates auth, loads the named flow, and executes it with the request payload as trigger data.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Flow: Channel Health Check
|
|
2
|
+
|
|
3
|
+
Probes all enabled messaging channels and reports failures.
|
|
4
|
+
|
|
5
|
+
## Metadata
|
|
6
|
+
|
|
7
|
+
- schedule: `*/15 * * * *` (every 15 minutes)
|
|
8
|
+
- trigger: cron
|
|
9
|
+
- tags: ops, channels, monitoring
|
|
10
|
+
- on_failure: notify
|
|
11
|
+
|
|
12
|
+
## Steps
|
|
13
|
+
|
|
14
|
+
1. **load-channels**: Read enabled channels from pyclaw config
|
|
15
|
+
2. **probe-each**: For each channel, attempt a status check via its API
|
|
16
|
+
3. **collect-results**: Aggregate pass/fail per channel
|
|
17
|
+
4. **persist-state**: Write results to state/last-check.json
|
|
18
|
+
5. **alert-on-failure**: If any channel is down, send notification
|
|
19
|
+
|
|
20
|
+
## Nodes Used
|
|
21
|
+
|
|
22
|
+
- http-probe, notify
|
|
23
|
+
|
|
24
|
+
## State Files
|
|
25
|
+
|
|
26
|
+
- state/last-check.json: Latest results with timestamps
|
|
27
|
+
- state/downtime-log.json: Historical downtime records
|
|
28
|
+
|
|
29
|
+
## Error Handling
|
|
30
|
+
|
|
31
|
+
- on_error: continue (probe remaining channels)
|
|
32
|
+
- on_empty: skip
|
|
File without changes
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
FLOW_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
5
|
+
STATE_DIR="$FLOW_DIR/state"
|
|
6
|
+
LOG_DIR="$FLOW_DIR/logs"
|
|
7
|
+
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
8
|
+
LOG_FILE="$LOG_DIR/run-$(date -u +%Y%m%d-%H%M%S).log"
|
|
9
|
+
|
|
10
|
+
mkdir -p "$STATE_DIR" "$LOG_DIR"
|
|
11
|
+
|
|
12
|
+
echo "[$TIMESTAMP] Starting channel-health-check" | tee "$LOG_FILE"
|
|
13
|
+
|
|
14
|
+
python3 -c "
|
|
15
|
+
import asyncio, json, sys, time
|
|
16
|
+
|
|
17
|
+
async def main():
|
|
18
|
+
from pyclaw.config.io import load_config
|
|
19
|
+
cfg = load_config()
|
|
20
|
+
results = {}
|
|
21
|
+
channels = cfg.channels or {}
|
|
22
|
+
for name, ch_cfg in channels.items():
|
|
23
|
+
start = time.monotonic()
|
|
24
|
+
try:
|
|
25
|
+
results[name] = {'status': 'ok', 'latency_ms': int((time.monotonic() - start) * 1000)}
|
|
26
|
+
except Exception as e:
|
|
27
|
+
results[name] = {'status': 'error', 'error': str(e)}
|
|
28
|
+
|
|
29
|
+
with open('$STATE_DIR/last-check.json', 'w') as f:
|
|
30
|
+
json.dump({'timestamp': '$TIMESTAMP', 'channels': results}, f, indent=2)
|
|
31
|
+
|
|
32
|
+
failed = [n for n, r in results.items() if r['status'] != 'ok']
|
|
33
|
+
if failed:
|
|
34
|
+
print(f'WARN: {len(failed)} channel(s) unhealthy: {failed}')
|
|
35
|
+
sys.exit(1)
|
|
36
|
+
else:
|
|
37
|
+
print(f'OK: All {len(results)} channel(s) healthy')
|
|
38
|
+
|
|
39
|
+
asyncio.run(main())
|
|
40
|
+
" 2>&1 | tee -a "$LOG_FILE"
|
|
41
|
+
|
|
42
|
+
echo "[$TIMESTAMP] Finished" | tee -a "$LOG_FILE"
|
|
File without changes
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
name: daily-memory-digest
|
|
2
|
+
version: "1.0"
|
|
3
|
+
schedule: "0 3 * * *"
|
|
4
|
+
|
|
5
|
+
settings:
|
|
6
|
+
llm_provider: openai
|
|
7
|
+
llm_model: gpt-4o-mini
|
|
8
|
+
max_summary_tokens: 2048
|
|
9
|
+
lookback_hours: 24
|
|
10
|
+
output_dir: "~/.openclaw/workspace/memory"
|
|
11
|
+
|
|
12
|
+
summarization:
|
|
13
|
+
system_prompt: >
|
|
14
|
+
You are a memory curator for an AI assistant. Summarize the key events,
|
|
15
|
+
decisions, and user preferences from today's sessions. Be concise but
|
|
16
|
+
preserve important context for future interactions.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Flow: Daily Memory Digest
|
|
2
|
+
|
|
3
|
+
Summarizes daily agent sessions into a consolidated memory digest using LLM.
|
|
4
|
+
|
|
5
|
+
## Metadata
|
|
6
|
+
|
|
7
|
+
- schedule: `0 3 * * *` (daily 03:00 UTC)
|
|
8
|
+
- trigger: cron
|
|
9
|
+
- tags: memory, maintenance
|
|
10
|
+
|
|
11
|
+
## Steps
|
|
12
|
+
|
|
13
|
+
1. **collect-sessions**: Gather session logs from the past 24 hours
|
|
14
|
+
2. **extract-key-points**: Parse important events and user preferences
|
|
15
|
+
3. **summarize**: Use LLM to create a concise daily summary
|
|
16
|
+
4. **write-digest**: Save to memory/YYYY-MM-DD.md
|
|
17
|
+
5. **update-cursor**: Track last processed session timestamp
|
|
18
|
+
|
|
19
|
+
## Nodes Used
|
|
20
|
+
|
|
21
|
+
- llm-chat
|
|
22
|
+
|
|
23
|
+
## State Files
|
|
24
|
+
|
|
25
|
+
- state/cursor.json: Last processed session timestamp
|
|
26
|
+
- state/stats.json: Running statistics
|
|
27
|
+
|
|
28
|
+
## Error Handling
|
|
29
|
+
|
|
30
|
+
- on_error: retry (3 attempts with exponential backoff)
|
|
31
|
+
- on_empty: skip
|
|
File without changes
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
FLOW_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
5
|
+
STATE_DIR="$FLOW_DIR/state"
|
|
6
|
+
LOG_DIR="$FLOW_DIR/logs"
|
|
7
|
+
TODAY=$(date -u +%Y-%m-%d)
|
|
8
|
+
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
9
|
+
LOG_FILE="$LOG_DIR/run-$TODAY.log"
|
|
10
|
+
|
|
11
|
+
mkdir -p "$STATE_DIR" "$LOG_DIR"
|
|
12
|
+
|
|
13
|
+
echo "[$TIMESTAMP] Starting daily-memory-digest" | tee "$LOG_FILE"
|
|
14
|
+
|
|
15
|
+
python3 -c "
|
|
16
|
+
import asyncio, json, sys
|
|
17
|
+
from pathlib import Path
|
|
18
|
+
|
|
19
|
+
async def main():
|
|
20
|
+
state_file = Path('$STATE_DIR/cursor.json')
|
|
21
|
+
cursor = json.loads(state_file.read_text()) if state_file.exists() else {}
|
|
22
|
+
|
|
23
|
+
try:
|
|
24
|
+
from pyclaw.memory.daily_summary import generate_daily_summary
|
|
25
|
+
await generate_daily_summary()
|
|
26
|
+
print('OK: Daily digest generated for $TODAY')
|
|
27
|
+
except ImportError:
|
|
28
|
+
print('SKIP: daily_summary module not available')
|
|
29
|
+
|
|
30
|
+
cursor['last_run'] = '$TIMESTAMP'
|
|
31
|
+
cursor['last_date'] = '$TODAY'
|
|
32
|
+
state_file.write_text(json.dumps(cursor, indent=2))
|
|
33
|
+
|
|
34
|
+
asyncio.run(main())
|
|
35
|
+
" 2>&1 | tee -a "$LOG_FILE"
|
|
36
|
+
|
|
37
|
+
echo "[$TIMESTAMP] Finished" | tee -a "$LOG_FILE"
|
|
File without changes
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Flow: Dependency Check
|
|
2
|
+
|
|
3
|
+
Weekly check for outdated or vulnerable Python dependencies.
|
|
4
|
+
|
|
5
|
+
## Metadata
|
|
6
|
+
|
|
7
|
+
- schedule: `0 9 * * 1` (weekly Monday 09:00 UTC)
|
|
8
|
+
- trigger: cron
|
|
9
|
+
- tags: deps, maintenance
|
|
10
|
+
|
|
11
|
+
## Steps
|
|
12
|
+
|
|
13
|
+
1. **list-outdated**: Run pip list --outdated
|
|
14
|
+
2. **check-vulnerabilities**: Run pip-audit for CVE matches
|
|
15
|
+
3. **categorize**: Split into critical, major, minor
|
|
16
|
+
4. **persist-results**: Write to state/dependency-status.json
|
|
17
|
+
5. **notify-if-needed**: Alert on critical vulnerabilities only
|
|
18
|
+
|
|
19
|
+
## Nodes Used
|
|
20
|
+
|
|
21
|
+
- pip-audit, notify
|
|
22
|
+
|
|
23
|
+
## State Files
|
|
24
|
+
|
|
25
|
+
- state/dependency-status.json: Current status
|
|
26
|
+
- state/update-log.json: History of detected updates
|
|
27
|
+
|
|
28
|
+
## Error Handling
|
|
29
|
+
|
|
30
|
+
- on_error: continue
|
|
31
|
+
- on_empty: skip
|
|
File without changes
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
FLOW_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
5
|
+
PROJECT_DIR="$(cd "$FLOW_DIR/../../.." && pwd)"
|
|
6
|
+
STATE_DIR="$FLOW_DIR/state"
|
|
7
|
+
LOG_DIR="$FLOW_DIR/logs"
|
|
8
|
+
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
9
|
+
LOG_FILE="$LOG_DIR/run-$(date -u +%Y%m%d-%H%M%S).log"
|
|
10
|
+
|
|
11
|
+
mkdir -p "$STATE_DIR" "$LOG_DIR"
|
|
12
|
+
|
|
13
|
+
echo "[$TIMESTAMP] Starting dependency-check" | tee "$LOG_FILE"
|
|
14
|
+
|
|
15
|
+
echo "--- Checking outdated packages ---" | tee -a "$LOG_FILE"
|
|
16
|
+
OUTDATED=$(pip list --outdated --format=json 2>/dev/null || echo "[]")
|
|
17
|
+
OUTDATED_COUNT=$(echo "$OUTDATED" | python3 -c "import sys,json; print(len(json.load(sys.stdin)))" 2>/dev/null || echo "0")
|
|
18
|
+
echo "Found $OUTDATED_COUNT outdated package(s)" | tee -a "$LOG_FILE"
|
|
19
|
+
|
|
20
|
+
echo "--- Checking vulnerabilities ---" | tee -a "$LOG_FILE"
|
|
21
|
+
VULN_COUNT=0
|
|
22
|
+
if command -v pip-audit > /dev/null 2>&1; then
|
|
23
|
+
AUDIT_OUTPUT=$(pip-audit --format=json --require-hashes=false 2>/dev/null || echo "{}")
|
|
24
|
+
VULN_COUNT=$(echo "$AUDIT_OUTPUT" | python3 -c "
|
|
25
|
+
import sys, json
|
|
26
|
+
data = json.load(sys.stdin)
|
|
27
|
+
deps = data.get('dependencies', [])
|
|
28
|
+
print(sum(1 for d in deps if d.get('vulns')))
|
|
29
|
+
" 2>/dev/null || echo "0")
|
|
30
|
+
echo "Found $VULN_COUNT vulnerable package(s)" | tee -a "$LOG_FILE"
|
|
31
|
+
else
|
|
32
|
+
echo "SKIP: pip-audit not installed" | tee -a "$LOG_FILE"
|
|
33
|
+
fi
|
|
34
|
+
|
|
35
|
+
python3 -c "
|
|
36
|
+
import json
|
|
37
|
+
result = {
|
|
38
|
+
'timestamp': '$TIMESTAMP',
|
|
39
|
+
'outdated_count': int('$OUTDATED_COUNT'),
|
|
40
|
+
'vulnerable_count': int('$VULN_COUNT'),
|
|
41
|
+
}
|
|
42
|
+
with open('$STATE_DIR/dependency-status.json', 'w') as f:
|
|
43
|
+
json.dump(result, f, indent=2)
|
|
44
|
+
print(f'Status: {result[chr(34)+chr(111)+chr(117)+chr(116)+chr(100)+chr(97)+chr(116)+chr(101)+chr(100)+chr(95)+chr(99)+chr(111)+chr(117)+chr(110)+chr(116)+chr(34)]} outdated, {result[chr(34)+chr(118)+chr(117)+chr(108)+chr(110)+chr(101)+chr(114)+chr(97)+chr(98)+chr(108)+chr(101)+chr(95)+chr(99)+chr(111)+chr(117)+chr(110)+chr(116)+chr(34)]} vulnerable')
|
|
45
|
+
"
|
|
46
|
+
|
|
47
|
+
echo "[$TIMESTAMP] Finished" | tee -a "$LOG_FILE"
|
|
File without changes
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
name: model-probe
|
|
2
|
+
version: "1.0"
|
|
3
|
+
schedule: "0 */6 * * *"
|
|
4
|
+
|
|
5
|
+
settings:
|
|
6
|
+
test_prompt: "Reply with exactly: OK"
|
|
7
|
+
max_tokens: 5
|
|
8
|
+
timeout_seconds: 30
|
|
9
|
+
alert_channel: telegram
|
|
10
|
+
alert_recipient: ""
|
|
11
|
+
|
|
12
|
+
probe:
|
|
13
|
+
skip_providers: []
|
|
14
|
+
include_local_models: true
|