wxcc-toolkit 0.3.2__tar.gz → 0.3.4__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.
- {wxcc_toolkit-0.3.2/src/wxcc_toolkit.egg-info → wxcc_toolkit-0.3.4}/PKG-INFO +31 -7
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/README.md +30 -6
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/pyproject.toml +1 -1
- wxcc_toolkit-0.3.4/src/wxcc_flow/__init__.py +1 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/main.py +10 -1
- wxcc_toolkit-0.3.4/src/wxcc_flow/update_check.py +135 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4/src/wxcc_toolkit.egg-info}/PKG-INFO +31 -7
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_toolkit.egg-info/SOURCES.txt +3 -1
- wxcc_toolkit-0.3.4/tests/test_update_check.py +178 -0
- wxcc_toolkit-0.3.2/src/wxcc_flow/__init__.py +0 -1
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/LICENSE +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/MANIFEST.in +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/setup.cfg +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-action/SKILL.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-action/reference.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-digital-inbound/SKILL.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-digital-inbound/reference.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-flow-designer/SKILL.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-flow-designer/reference.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-flow-programmatic/SKILL.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-flow-programmatic/reference.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-notification/SKILL.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-notification/reference.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-outbound-flow/SKILL.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-outbound-flow/reference.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-scripted-fulfillment/SKILL.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-scripted-fulfillment/reference.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-solution-docs/SKILL.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-solution-docs/reference.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-spec-diagram/SKILL.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-spec-diagram/generate.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-spec-diagram/reference.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/configure-ai-agent/SKILL.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/configure-ai-agent/reference.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/configure-scripted-agent/SKILL.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/configure-scripted-agent/reference.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/design-flow/SKILL.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/design-flow/reference.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/design-scripted-agent/SKILL.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/wxcc-debug/SKILL.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/wxcc-debug/reference.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/agents/wxcc-agent-builder.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/rules/ai-agent-studio-questions.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/rules/ai-agent-studio-scripted-questions.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/rules/bre-questions.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/rules/db-integration-questions.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/rules/digital-inbound-questions.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/rules/flow-designer-pipeline.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/rules/flow-designer-questions.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/rules/flowir-mcp-verification.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/rules/large-operation-batching.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/rules/webex-connect-questions.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/rules/wxcc-platform-questions.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/settings.json +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-action/SKILL.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-action/reference.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-digital-inbound/SKILL.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-digital-inbound/reference.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-flow-designer/SKILL.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-flow-designer/reference.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-flow-programmatic/SKILL.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-flow-programmatic/reference.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-notification/SKILL.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-notification/reference.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-outbound-flow/SKILL.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-outbound-flow/reference.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-scripted-fulfillment/SKILL.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-scripted-fulfillment/reference.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-solution-docs/SKILL.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-solution-docs/reference.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-spec-diagram/SKILL.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-spec-diagram/generate.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-spec-diagram/reference.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/configure-ai-agent/SKILL.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/configure-ai-agent/reference.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/configure-scripted-agent/SKILL.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/configure-scripted-agent/reference.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/design-flow/SKILL.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/design-flow/reference.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/design-scripted-agent/SKILL.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/wxcc-debug/SKILL.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/wxcc-debug/reference.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/agents/wxcc-agent-builder.toml +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/config.toml +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/docs/cli-commands.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/docs/rules/ai-agent-studio-questions.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/docs/rules/ai-agent-studio-scripted-questions.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/docs/rules/bre-questions.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/docs/rules/db-integration-questions.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/docs/rules/digital-inbound-questions.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/docs/rules/flow-designer-pipeline.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/docs/rules/flow-designer-questions.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/docs/rules/flowir-mcp-verification.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/docs/rules/large-operation-batching.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/docs/rules/webex-connect-questions.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/docs/rules/wxcc-platform-questions.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/docs/sync-checklist.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.mcp.json +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/AGENTS.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/CLAUDE.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/examples/demo-outbound-notifications.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/examples/flow-designer-autonomous-package-tracking.env.template +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/examples/flow-designer-scripted-doctors-appointment.env.template +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/examples/flow-designer-scripted-track-package.env.template +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/examples/flowir/business-hours-routing.json +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/examples/flowir/data-dip-routing.json +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/examples/flowir/menu-routing.json +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/examples/flowir/simple-inbound.json +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/examples/format-store-hours.json +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/examples/function-import.json +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/ai-agent-studio.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/bre-setup.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/cjds-integration.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/connect-flows.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/cross-channel-escalation.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/custom-connectors-setup.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/digital-inbound-agent.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/dual-call-paging.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/functions-setup.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/inbound-sms.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/inbound-voice.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/multi-channel-routing.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/outbound-apple-messages.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/outbound-email.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/outbound-rcs.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/outbound-sms.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/outbound-voice.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/outbound-whatsapp.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/scripted-agent-build.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/scripted-agent-design.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/sequential-dialing.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/supabase.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/webex-api-auth.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/webex-calling-paging.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/webhook-triggers.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/wxcc-setup.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/ai-agent-studio-import-json.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/ai-agent-studio-scripted.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/ai-agent-studio.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/bre.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/connect-apple-messages.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/connect-email.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/connect-multi-channel.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/connect-rcs.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/connect-sms.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/connect-whatsapp.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/db-integration.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/digital-inbound.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-blueprints.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/_index.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/advanced-queue-information.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/blind-transfer.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/bre-request.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/bridged-transfer.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/business-hours.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/call-progress-analysis.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/callback.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/case.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/collect-digits.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/condition.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/cryptographic-hash.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/custom-connectors.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/end-flow.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/escalate-cdg.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/feedback-v2.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/feedback.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/functions-activity.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/generate-otp.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/get-queue-info.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/global-event-output-variables.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/goto.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/http-connector.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/http-request.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/last-agent-removed.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/menu.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/outdial-entry-point.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/parse.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/percentage-allocation.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/queue-to-agent.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/receive-message.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/record.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/recording-control.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/reservation-start.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/schedule-callback.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/screen-pop.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/self-loop-limits.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/send-custom-message.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/send-digits.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/set-announcement.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/set-caller-id.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/set-contact-priority.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/set-whisper.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/start-media-stream.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/upload-audio.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/verify-otp.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/virtual-agent-legacy.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/virtual-agent-v2.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/wait.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-essentials.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-flowir.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-patterns.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/webex-connect-advanced.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/webex-connect.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/wxcc-platform.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/wxcc-provisioning-api.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/templates/action-config.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/templates/ai-agent-design-doc.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/templates/ai-agent-studio-import-template.json +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/templates/design-doc.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/templates/flow-designer-design-doc.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/templates/notification-config.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/templates/outbound-flow-config.md +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/client.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/config.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/generated/__init__.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/generated/_registry.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/generated/connectors.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/generated/flows.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/generated/flows_v2.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/generated/prefs.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/generated/projects.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/generated/resource_collections.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/generated/templates.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/generated/tracing.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/generated/user_prefs.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/generated/util.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/generated/versions.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/init_playbook.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/output.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_toolkit.egg-info/dependency_links.txt +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_toolkit.egg-info/entry_points.txt +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_toolkit.egg-info/requires.txt +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_toolkit.egg-info/top_level.txt +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/tests/test_assemble.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/tests/test_client.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/tests/test_doc_consistency.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/tests/test_drift_check.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/tests/test_generator.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/tests/test_generator_regression.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/tests/test_init_playbook.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/tests/test_live_mutation.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/tests/test_live_readonly.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/tests/test_release_integrity.py +0 -0
- {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/tests/test_spec_diff.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: wxcc-toolkit
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.4
|
|
4
4
|
Summary: WxCC AI Agent Builder Toolkit — a Claude Code playbook (agent, skills, rules, docs) plus the wxcc-flow Flow Designer CLI, delivered via pip
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
Requires-Python: >=3.9
|
|
@@ -34,17 +34,26 @@ This installs two console commands (aliases of the same CLI): `wxcc-toolkit` and
|
|
|
34
34
|
wxcc-toolkit init my-wxcc-project
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
This materializes the
|
|
37
|
+
This materializes **both** the Claude Code and Codex CLI profiles into
|
|
38
|
+
`my-wxcc-project/` by default (pass `--claude-only` or `--codex-only` to
|
|
39
|
+
install just one — see "Using with OpenAI Codex CLI" below):
|
|
38
40
|
|
|
39
41
|
```
|
|
40
42
|
my-wxcc-project/
|
|
41
43
|
├── CLAUDE.md # project instructions Claude Code loads at session start
|
|
42
|
-
├── .
|
|
44
|
+
├── AGENTS.md # project instructions Codex CLI loads
|
|
45
|
+
├── .mcp.json # Claude MCP server config (optional — see "Configure MCP servers" below)
|
|
43
46
|
├── .claude/
|
|
44
47
|
│ ├── settings.json # pre-approved Skills, MCP tools, and wxcc-flow CLI
|
|
45
48
|
│ ├── agents/ # the wxcc-agent-builder agent
|
|
46
49
|
│ ├── skills/ # 14 build/design skills
|
|
47
50
|
│ └── rules/ # platform-accuracy doc-lookup rules
|
|
51
|
+
├── .codex/
|
|
52
|
+
│ ├── config.toml # approval policy, sandbox mode, MCP servers
|
|
53
|
+
│ ├── agents/ # per-agent Codex config
|
|
54
|
+
│ └── docs/ # CLI command reference, doc-lookup rules
|
|
55
|
+
├── .agents/
|
|
56
|
+
│ └── skills/ # the same 14 skills, in Codex's skill format
|
|
48
57
|
└── docs/
|
|
49
58
|
├── reference/ # platform knowledge (Flow Designer, Connect, AI Agent Studio, …)
|
|
50
59
|
├── playbooks/ # step-by-step platform guides
|
|
@@ -52,10 +61,11 @@ my-wxcc-project/
|
|
|
52
61
|
└── examples/ # working FlowIR / config examples
|
|
53
62
|
```
|
|
54
63
|
|
|
55
|
-
`init` writes a manifest (`.claude/.wxcc-manifest.json`
|
|
56
|
-
|
|
57
|
-
files
|
|
58
|
-
|
|
64
|
+
`init` writes a manifest per installed profile (`.claude/.wxcc-manifest.json`
|
|
65
|
+
and/or `.codex/.wxcc-manifest.json`) recording every file it owns. It never
|
|
66
|
+
overwrites files you create. If the target folder already contains files the
|
|
67
|
+
playbook would overwrite, `init` stops and lists them — re-run with `--force`
|
|
68
|
+
to overwrite, or pick an empty folder.
|
|
59
69
|
|
|
60
70
|
## Configure the `wxcc-flow` CLI (recommended)
|
|
61
71
|
|
|
@@ -146,6 +156,20 @@ The Codex profile is generated from the Claude profile at build time — the
|
|
|
146
156
|
two never drift. Codex has no per-command allowlist, so expect an approval
|
|
147
157
|
prompt when a command needs to run outside the workspace sandbox.
|
|
148
158
|
|
|
159
|
+
## Staying up to date
|
|
160
|
+
|
|
161
|
+
`pip` never upgrades on its own, so `wxcc-flow` checks PyPI once a day (a
|
|
162
|
+
best-effort call with a 1-second timeout, cached in `~/.wxcc-flow/`) and, when a
|
|
163
|
+
newer release exists, prints one line to stderr before the command runs:
|
|
164
|
+
|
|
165
|
+
> wxcc-flow 0.3.4 available (you have 0.3.3). Upgrade: pip install -U wxcc-toolkit && wxcc-flow init
|
|
166
|
+
|
|
167
|
+
Both steps matter: `pip install -U wxcc-toolkit` updates the CLI, and
|
|
168
|
+
`wxcc-flow init` (see below) refreshes the playbook files in your project folder.
|
|
169
|
+
The check never blocks a command and stays silent on any network error. Silence
|
|
170
|
+
it with the `--no-update-check` flag, by setting `WXCC_FLOW_NO_UPDATE_CHECK=1`,
|
|
171
|
+
or in CI (it is skipped automatically when `CI` is set).
|
|
172
|
+
|
|
149
173
|
## Update an existing project folder
|
|
150
174
|
|
|
151
175
|
After upgrading the package (`pip install --upgrade wxcc-toolkit`), refresh a
|
|
@@ -21,17 +21,26 @@ This installs two console commands (aliases of the same CLI): `wxcc-toolkit` and
|
|
|
21
21
|
wxcc-toolkit init my-wxcc-project
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
-
This materializes the
|
|
24
|
+
This materializes **both** the Claude Code and Codex CLI profiles into
|
|
25
|
+
`my-wxcc-project/` by default (pass `--claude-only` or `--codex-only` to
|
|
26
|
+
install just one — see "Using with OpenAI Codex CLI" below):
|
|
25
27
|
|
|
26
28
|
```
|
|
27
29
|
my-wxcc-project/
|
|
28
30
|
├── CLAUDE.md # project instructions Claude Code loads at session start
|
|
29
|
-
├── .
|
|
31
|
+
├── AGENTS.md # project instructions Codex CLI loads
|
|
32
|
+
├── .mcp.json # Claude MCP server config (optional — see "Configure MCP servers" below)
|
|
30
33
|
├── .claude/
|
|
31
34
|
│ ├── settings.json # pre-approved Skills, MCP tools, and wxcc-flow CLI
|
|
32
35
|
│ ├── agents/ # the wxcc-agent-builder agent
|
|
33
36
|
│ ├── skills/ # 14 build/design skills
|
|
34
37
|
│ └── rules/ # platform-accuracy doc-lookup rules
|
|
38
|
+
├── .codex/
|
|
39
|
+
│ ├── config.toml # approval policy, sandbox mode, MCP servers
|
|
40
|
+
│ ├── agents/ # per-agent Codex config
|
|
41
|
+
│ └── docs/ # CLI command reference, doc-lookup rules
|
|
42
|
+
├── .agents/
|
|
43
|
+
│ └── skills/ # the same 14 skills, in Codex's skill format
|
|
35
44
|
└── docs/
|
|
36
45
|
├── reference/ # platform knowledge (Flow Designer, Connect, AI Agent Studio, …)
|
|
37
46
|
├── playbooks/ # step-by-step platform guides
|
|
@@ -39,10 +48,11 @@ my-wxcc-project/
|
|
|
39
48
|
└── examples/ # working FlowIR / config examples
|
|
40
49
|
```
|
|
41
50
|
|
|
42
|
-
`init` writes a manifest (`.claude/.wxcc-manifest.json`
|
|
43
|
-
|
|
44
|
-
files
|
|
45
|
-
|
|
51
|
+
`init` writes a manifest per installed profile (`.claude/.wxcc-manifest.json`
|
|
52
|
+
and/or `.codex/.wxcc-manifest.json`) recording every file it owns. It never
|
|
53
|
+
overwrites files you create. If the target folder already contains files the
|
|
54
|
+
playbook would overwrite, `init` stops and lists them — re-run with `--force`
|
|
55
|
+
to overwrite, or pick an empty folder.
|
|
46
56
|
|
|
47
57
|
## Configure the `wxcc-flow` CLI (recommended)
|
|
48
58
|
|
|
@@ -133,6 +143,20 @@ The Codex profile is generated from the Claude profile at build time — the
|
|
|
133
143
|
two never drift. Codex has no per-command allowlist, so expect an approval
|
|
134
144
|
prompt when a command needs to run outside the workspace sandbox.
|
|
135
145
|
|
|
146
|
+
## Staying up to date
|
|
147
|
+
|
|
148
|
+
`pip` never upgrades on its own, so `wxcc-flow` checks PyPI once a day (a
|
|
149
|
+
best-effort call with a 1-second timeout, cached in `~/.wxcc-flow/`) and, when a
|
|
150
|
+
newer release exists, prints one line to stderr before the command runs:
|
|
151
|
+
|
|
152
|
+
> wxcc-flow 0.3.4 available (you have 0.3.3). Upgrade: pip install -U wxcc-toolkit && wxcc-flow init
|
|
153
|
+
|
|
154
|
+
Both steps matter: `pip install -U wxcc-toolkit` updates the CLI, and
|
|
155
|
+
`wxcc-flow init` (see below) refreshes the playbook files in your project folder.
|
|
156
|
+
The check never blocks a command and stays silent on any network error. Silence
|
|
157
|
+
it with the `--no-update-check` flag, by setting `WXCC_FLOW_NO_UPDATE_CHECK=1`,
|
|
158
|
+
or in CI (it is skipped automatically when `CI` is set).
|
|
159
|
+
|
|
136
160
|
## Update an existing project folder
|
|
137
161
|
|
|
138
162
|
After upgrading the package (`pip install --upgrade wxcc-toolkit`), refresh a
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "wxcc-toolkit"
|
|
7
|
-
version = "0.3.
|
|
7
|
+
version = "0.3.4"
|
|
8
8
|
description = "WxCC AI Agent Builder Toolkit — a Claude Code playbook (agent, skills, rules, docs) plus the wxcc-flow Flow Designer CLI, delivered via pip"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "Apache-2.0"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.3.4"
|
|
@@ -41,8 +41,17 @@ def version_callback(value: bool):
|
|
|
41
41
|
@app.callback()
|
|
42
42
|
def main(
|
|
43
43
|
version: bool = typer.Option(False, "--version", callback=version_callback, is_eager=True),
|
|
44
|
+
no_update_check: bool = typer.Option(
|
|
45
|
+
False, "--no-update-check",
|
|
46
|
+
help="Skip the once-a-day PyPI update check for this run.",
|
|
47
|
+
),
|
|
44
48
|
):
|
|
45
|
-
|
|
49
|
+
# Best-effort upgrade nudge; never let it break a real command.
|
|
50
|
+
try:
|
|
51
|
+
from wxcc_flow.update_check import maybe_notify_update
|
|
52
|
+
maybe_notify_update(__version__, disabled=no_update_check)
|
|
53
|
+
except Exception:
|
|
54
|
+
pass
|
|
46
55
|
|
|
47
56
|
|
|
48
57
|
# ── Configure ────────────────────────────────────────────────────────
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"""Best-effort PyPI update check for the wxcc-flow CLI.
|
|
2
|
+
|
|
3
|
+
Runs once per invocation from the top-level Typer callback. It must NEVER
|
|
4
|
+
block or break a real command, so every path here is defensive:
|
|
5
|
+
|
|
6
|
+
* a short (1s) network timeout,
|
|
7
|
+
* a 24h on-disk cache next to the config (``~/.wxcc-flow/update-check.json``),
|
|
8
|
+
* every exception (no network, PyPI outage, bad JSON, unwritable cache)
|
|
9
|
+
swallowed — a failure prints nothing and returns ``None``.
|
|
10
|
+
|
|
11
|
+
The notice is printed to stderr so it never corrupts ``-o json`` output on
|
|
12
|
+
stdout. It is silenced by ``--no-update-check``, by ``WXCC_FLOW_NO_UPDATE_CHECK``,
|
|
13
|
+
and under ``CI`` (so pipelines and the test suite stay hermetic).
|
|
14
|
+
"""
|
|
15
|
+
import json
|
|
16
|
+
import os
|
|
17
|
+
import re
|
|
18
|
+
import sys
|
|
19
|
+
import time
|
|
20
|
+
from pathlib import Path
|
|
21
|
+
|
|
22
|
+
import httpx
|
|
23
|
+
|
|
24
|
+
PACKAGE_NAME = "wxcc-toolkit"
|
|
25
|
+
PYPI_JSON_URL = f"https://pypi.org/pypi/{PACKAGE_NAME}/json"
|
|
26
|
+
CACHE_PATH = Path.home() / ".wxcc-flow" / "update-check.json"
|
|
27
|
+
CACHE_TTL_SECONDS = 24 * 60 * 60 # re-check PyPI at most once a day
|
|
28
|
+
REQUEST_TIMEOUT_SECONDS = 1.0
|
|
29
|
+
ENV_DISABLE = "WXCC_FLOW_NO_UPDATE_CHECK"
|
|
30
|
+
|
|
31
|
+
_LEADING_NUMERIC = re.compile(r"(\d+(?:\.\d+)*)")
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _parse_version(text):
|
|
35
|
+
"""Leading numeric components of a version as an int tuple.
|
|
36
|
+
|
|
37
|
+
``'0.3.10'`` -> ``(0, 3, 10)``; ``'0.4.0rc1'`` -> ``(0, 4, 0)``;
|
|
38
|
+
``''`` / unparseable -> ``()``. Dependency-free so we don't pull in
|
|
39
|
+
``packaging`` (not a declared runtime dep).
|
|
40
|
+
"""
|
|
41
|
+
if not text:
|
|
42
|
+
return ()
|
|
43
|
+
m = _LEADING_NUMERIC.match(text.strip())
|
|
44
|
+
if not m:
|
|
45
|
+
return ()
|
|
46
|
+
return tuple(int(p) for p in m.group(1).split("."))
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def _is_newer(latest, current):
|
|
50
|
+
"""True iff ``latest`` is a strictly newer release than ``current``."""
|
|
51
|
+
lt, ct = _parse_version(latest), _parse_version(current)
|
|
52
|
+
if not lt:
|
|
53
|
+
return False
|
|
54
|
+
width = max(len(lt), len(ct))
|
|
55
|
+
lt = lt + (0,) * (width - len(lt))
|
|
56
|
+
ct = ct + (0,) * (width - len(ct))
|
|
57
|
+
return lt > ct
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def _env_truthy(name):
|
|
61
|
+
val = os.environ.get(name, "").strip().lower()
|
|
62
|
+
return bool(val) and val not in ("0", "false", "no", "off")
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def _read_cache(path):
|
|
66
|
+
try:
|
|
67
|
+
with open(path, encoding="utf-8") as f:
|
|
68
|
+
return json.load(f)
|
|
69
|
+
except Exception:
|
|
70
|
+
return None
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def _write_cache(path, latest, now):
|
|
74
|
+
try:
|
|
75
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
76
|
+
with open(path, "w", encoding="utf-8") as f:
|
|
77
|
+
json.dump({"pkg": PACKAGE_NAME, "latest": latest, "last_check": now}, f)
|
|
78
|
+
except Exception:
|
|
79
|
+
pass
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def _fetch_latest(timeout):
|
|
83
|
+
resp = httpx.get(PYPI_JSON_URL, timeout=timeout)
|
|
84
|
+
resp.raise_for_status()
|
|
85
|
+
return resp.json()["info"]["version"]
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def check_for_update(current_version, *, now=None, cache_path=CACHE_PATH,
|
|
89
|
+
ttl=CACHE_TTL_SECONDS, timeout=REQUEST_TIMEOUT_SECONDS,
|
|
90
|
+
force=False):
|
|
91
|
+
"""Return the latest PyPI version string if newer than ``current_version``.
|
|
92
|
+
|
|
93
|
+
Returns ``None`` when already up to date OR on any failure. Only hits PyPI
|
|
94
|
+
when the cache is missing/stale or ``force=True``; a fresh cache answers
|
|
95
|
+
offline.
|
|
96
|
+
"""
|
|
97
|
+
try:
|
|
98
|
+
if now is None:
|
|
99
|
+
now = time.time()
|
|
100
|
+
latest = None
|
|
101
|
+
cache = _read_cache(cache_path)
|
|
102
|
+
if (not force and cache
|
|
103
|
+
and isinstance(cache.get("last_check"), (int, float))
|
|
104
|
+
and now - cache["last_check"] < ttl):
|
|
105
|
+
latest = cache.get("latest")
|
|
106
|
+
if latest is None:
|
|
107
|
+
latest = _fetch_latest(timeout)
|
|
108
|
+
_write_cache(cache_path, latest, now)
|
|
109
|
+
if latest and _is_newer(latest, current_version):
|
|
110
|
+
return latest
|
|
111
|
+
return None
|
|
112
|
+
except Exception:
|
|
113
|
+
return None
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def maybe_notify_update(current_version, *, disabled=False, stream=None, **kwargs):
|
|
117
|
+
"""Print a one-line upgrade notice to stderr if a newer release exists.
|
|
118
|
+
|
|
119
|
+
Silent when disabled (flag, ``WXCC_FLOW_NO_UPDATE_CHECK``, or ``CI``) and
|
|
120
|
+
silent on any failure. Returns the latest version if a notice was printed,
|
|
121
|
+
else ``None``. Extra kwargs pass through to :func:`check_for_update`.
|
|
122
|
+
"""
|
|
123
|
+
if disabled or _env_truthy(ENV_DISABLE) or _env_truthy("CI"):
|
|
124
|
+
return None
|
|
125
|
+
latest = check_for_update(current_version, **kwargs)
|
|
126
|
+
if not latest:
|
|
127
|
+
return None
|
|
128
|
+
try:
|
|
129
|
+
(stream or sys.stderr).write(
|
|
130
|
+
f"wxcc-flow {latest} available (you have {current_version}). "
|
|
131
|
+
f"Upgrade: pip install -U {PACKAGE_NAME} && wxcc-flow init\n"
|
|
132
|
+
)
|
|
133
|
+
except Exception:
|
|
134
|
+
return None
|
|
135
|
+
return latest
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: wxcc-toolkit
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.4
|
|
4
4
|
Summary: WxCC AI Agent Builder Toolkit — a Claude Code playbook (agent, skills, rules, docs) plus the wxcc-flow Flow Designer CLI, delivered via pip
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
Requires-Python: >=3.9
|
|
@@ -34,17 +34,26 @@ This installs two console commands (aliases of the same CLI): `wxcc-toolkit` and
|
|
|
34
34
|
wxcc-toolkit init my-wxcc-project
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
This materializes the
|
|
37
|
+
This materializes **both** the Claude Code and Codex CLI profiles into
|
|
38
|
+
`my-wxcc-project/` by default (pass `--claude-only` or `--codex-only` to
|
|
39
|
+
install just one — see "Using with OpenAI Codex CLI" below):
|
|
38
40
|
|
|
39
41
|
```
|
|
40
42
|
my-wxcc-project/
|
|
41
43
|
├── CLAUDE.md # project instructions Claude Code loads at session start
|
|
42
|
-
├── .
|
|
44
|
+
├── AGENTS.md # project instructions Codex CLI loads
|
|
45
|
+
├── .mcp.json # Claude MCP server config (optional — see "Configure MCP servers" below)
|
|
43
46
|
├── .claude/
|
|
44
47
|
│ ├── settings.json # pre-approved Skills, MCP tools, and wxcc-flow CLI
|
|
45
48
|
│ ├── agents/ # the wxcc-agent-builder agent
|
|
46
49
|
│ ├── skills/ # 14 build/design skills
|
|
47
50
|
│ └── rules/ # platform-accuracy doc-lookup rules
|
|
51
|
+
├── .codex/
|
|
52
|
+
│ ├── config.toml # approval policy, sandbox mode, MCP servers
|
|
53
|
+
│ ├── agents/ # per-agent Codex config
|
|
54
|
+
│ └── docs/ # CLI command reference, doc-lookup rules
|
|
55
|
+
├── .agents/
|
|
56
|
+
│ └── skills/ # the same 14 skills, in Codex's skill format
|
|
48
57
|
└── docs/
|
|
49
58
|
├── reference/ # platform knowledge (Flow Designer, Connect, AI Agent Studio, …)
|
|
50
59
|
├── playbooks/ # step-by-step platform guides
|
|
@@ -52,10 +61,11 @@ my-wxcc-project/
|
|
|
52
61
|
└── examples/ # working FlowIR / config examples
|
|
53
62
|
```
|
|
54
63
|
|
|
55
|
-
`init` writes a manifest (`.claude/.wxcc-manifest.json`
|
|
56
|
-
|
|
57
|
-
files
|
|
58
|
-
|
|
64
|
+
`init` writes a manifest per installed profile (`.claude/.wxcc-manifest.json`
|
|
65
|
+
and/or `.codex/.wxcc-manifest.json`) recording every file it owns. It never
|
|
66
|
+
overwrites files you create. If the target folder already contains files the
|
|
67
|
+
playbook would overwrite, `init` stops and lists them — re-run with `--force`
|
|
68
|
+
to overwrite, or pick an empty folder.
|
|
59
69
|
|
|
60
70
|
## Configure the `wxcc-flow` CLI (recommended)
|
|
61
71
|
|
|
@@ -146,6 +156,20 @@ The Codex profile is generated from the Claude profile at build time — the
|
|
|
146
156
|
two never drift. Codex has no per-command allowlist, so expect an approval
|
|
147
157
|
prompt when a command needs to run outside the workspace sandbox.
|
|
148
158
|
|
|
159
|
+
## Staying up to date
|
|
160
|
+
|
|
161
|
+
`pip` never upgrades on its own, so `wxcc-flow` checks PyPI once a day (a
|
|
162
|
+
best-effort call with a 1-second timeout, cached in `~/.wxcc-flow/`) and, when a
|
|
163
|
+
newer release exists, prints one line to stderr before the command runs:
|
|
164
|
+
|
|
165
|
+
> wxcc-flow 0.3.4 available (you have 0.3.3). Upgrade: pip install -U wxcc-toolkit && wxcc-flow init
|
|
166
|
+
|
|
167
|
+
Both steps matter: `pip install -U wxcc-toolkit` updates the CLI, and
|
|
168
|
+
`wxcc-flow init` (see below) refreshes the playbook files in your project folder.
|
|
169
|
+
The check never blocks a command and stays silent on any network error. Silence
|
|
170
|
+
it with the `--no-update-check` flag, by setting `WXCC_FLOW_NO_UPDATE_CHECK=1`,
|
|
171
|
+
or in CI (it is skipped automatically when `CI` is set).
|
|
172
|
+
|
|
149
173
|
## Update an existing project folder
|
|
150
174
|
|
|
151
175
|
After upgrading the package (`pip install --upgrade wxcc-toolkit`), refresh a
|
|
@@ -8,6 +8,7 @@ src/wxcc_flow/config.py
|
|
|
8
8
|
src/wxcc_flow/init_playbook.py
|
|
9
9
|
src/wxcc_flow/main.py
|
|
10
10
|
src/wxcc_flow/output.py
|
|
11
|
+
src/wxcc_flow/update_check.py
|
|
11
12
|
src/wxcc_flow/_playbook/.mcp.json
|
|
12
13
|
src/wxcc_flow/_playbook/AGENTS.md
|
|
13
14
|
src/wxcc_flow/_playbook/CLAUDE.md
|
|
@@ -237,4 +238,5 @@ tests/test_init_playbook.py
|
|
|
237
238
|
tests/test_live_mutation.py
|
|
238
239
|
tests/test_live_readonly.py
|
|
239
240
|
tests/test_release_integrity.py
|
|
240
|
-
tests/test_spec_diff.py
|
|
241
|
+
tests/test_spec_diff.py
|
|
242
|
+
tests/test_update_check.py
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"""Tests for the best-effort PyPI update check (wxcc_flow.update_check).
|
|
2
|
+
|
|
3
|
+
Fully hermetic: every test mocks httpx and points the cache at tmp_path, so
|
|
4
|
+
nothing here reaches the network. The conftest disables the check session-wide;
|
|
5
|
+
the autouse fixture below re-enables it for this module's tests.
|
|
6
|
+
"""
|
|
7
|
+
import json
|
|
8
|
+
|
|
9
|
+
import httpx
|
|
10
|
+
import pytest
|
|
11
|
+
from typer.testing import CliRunner
|
|
12
|
+
|
|
13
|
+
import wxcc_flow.update_check as uc
|
|
14
|
+
from wxcc_flow import __version__
|
|
15
|
+
from wxcc_flow.main import app
|
|
16
|
+
|
|
17
|
+
runner = CliRunner()
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class _FakeResp:
|
|
21
|
+
def __init__(self, payload):
|
|
22
|
+
self._payload = payload
|
|
23
|
+
|
|
24
|
+
def raise_for_status(self):
|
|
25
|
+
return None
|
|
26
|
+
|
|
27
|
+
def json(self):
|
|
28
|
+
return self._payload
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _fake_get(version):
|
|
32
|
+
def _get(url, timeout=None):
|
|
33
|
+
assert "wxcc-toolkit" in url
|
|
34
|
+
return _FakeResp({"info": {"version": version}})
|
|
35
|
+
return _get
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
@pytest.fixture(autouse=True)
|
|
39
|
+
def _enable_checks(monkeypatch):
|
|
40
|
+
"""Undo the conftest session-wide disable so these tests hit the enabled
|
|
41
|
+
path; the gate tests re-set the env in their own body."""
|
|
42
|
+
monkeypatch.delenv(uc.ENV_DISABLE, raising=False)
|
|
43
|
+
monkeypatch.delenv("CI", raising=False)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
# ------------------------------------------------------------ version compare
|
|
47
|
+
@pytest.mark.parametrize("latest,current,expected", [
|
|
48
|
+
("0.3.4", "0.3.3", True),
|
|
49
|
+
("0.3.10", "0.3.3", True), # numeric, not string, comparison
|
|
50
|
+
("0.10.0", "0.9.9", True),
|
|
51
|
+
("1.0.0", "0.99.99", True),
|
|
52
|
+
("0.3.3", "0.3.3", False),
|
|
53
|
+
("0.3.2", "0.3.3", False),
|
|
54
|
+
("0.4.0rc1", "0.4.0", False), # don't nag toward a prerelease
|
|
55
|
+
("", "0.3.3", False),
|
|
56
|
+
("garbage", "0.3.3", False),
|
|
57
|
+
])
|
|
58
|
+
def test_is_newer(latest, current, expected):
|
|
59
|
+
assert uc._is_newer(latest, current) is expected
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def test_parse_version_strips_suffix():
|
|
63
|
+
assert uc._parse_version("0.4.0rc1") == (0, 4, 0)
|
|
64
|
+
assert uc._parse_version("1.2.3.post1") == (1, 2, 3)
|
|
65
|
+
assert uc._parse_version("") == ()
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
# ------------------------------------------------------------ check_for_update
|
|
69
|
+
def test_returns_latest_when_newer(monkeypatch, tmp_path):
|
|
70
|
+
monkeypatch.setattr(uc.httpx, "get", _fake_get("9.9.9"))
|
|
71
|
+
cache = tmp_path / "u.json"
|
|
72
|
+
assert uc.check_for_update("0.3.3", cache_path=cache, now=1000.0) == "9.9.9"
|
|
73
|
+
saved = json.loads(cache.read_text())
|
|
74
|
+
assert saved["latest"] == "9.9.9" and saved["last_check"] == 1000.0
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def test_returns_none_when_current(monkeypatch, tmp_path):
|
|
78
|
+
monkeypatch.setattr(uc.httpx, "get", _fake_get(__version__))
|
|
79
|
+
assert uc.check_for_update(__version__, cache_path=tmp_path / "u.json", now=1.0) is None
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def test_fresh_cache_skips_network(monkeypatch, tmp_path):
|
|
83
|
+
cache = tmp_path / "u.json"
|
|
84
|
+
cache.write_text(json.dumps({"latest": "9.9.9", "last_check": 1000.0}))
|
|
85
|
+
|
|
86
|
+
def _boom(*a, **k):
|
|
87
|
+
raise AssertionError("network must not be hit on a fresh cache")
|
|
88
|
+
monkeypatch.setattr(uc.httpx, "get", _boom)
|
|
89
|
+
assert uc.check_for_update("0.3.3", cache_path=cache, now=1000.0 + 60) == "9.9.9"
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def test_stale_cache_refetches(monkeypatch, tmp_path):
|
|
93
|
+
cache = tmp_path / "u.json"
|
|
94
|
+
cache.write_text(json.dumps({"latest": "0.0.1", "last_check": 1000.0}))
|
|
95
|
+
monkeypatch.setattr(uc.httpx, "get", _fake_get("9.9.9"))
|
|
96
|
+
now = 1000.0 + uc.CACHE_TTL_SECONDS + 1
|
|
97
|
+
assert uc.check_for_update("0.3.3", cache_path=cache, now=now) == "9.9.9"
|
|
98
|
+
assert json.loads(cache.read_text())["latest"] == "9.9.9"
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def test_network_error_is_swallowed(monkeypatch, tmp_path):
|
|
102
|
+
def _raise(*a, **k):
|
|
103
|
+
raise httpx.ConnectError("no network")
|
|
104
|
+
monkeypatch.setattr(uc.httpx, "get", _raise)
|
|
105
|
+
assert uc.check_for_update("0.3.3", cache_path=tmp_path / "u.json", now=1.0) is None
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def test_force_ignores_fresh_cache(monkeypatch, tmp_path):
|
|
109
|
+
cache = tmp_path / "u.json"
|
|
110
|
+
cache.write_text(json.dumps({"latest": "0.0.1", "last_check": 1000.0}))
|
|
111
|
+
monkeypatch.setattr(uc.httpx, "get", _fake_get("9.9.9"))
|
|
112
|
+
assert uc.check_for_update("0.3.3", cache_path=cache, now=1000.0 + 1, force=True) == "9.9.9"
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
# ------------------------------------------------------------ maybe_notify
|
|
116
|
+
class _Sink:
|
|
117
|
+
def __init__(self):
|
|
118
|
+
self.text = ""
|
|
119
|
+
|
|
120
|
+
def write(self, s):
|
|
121
|
+
self.text += s
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def test_notify_prints_when_newer(monkeypatch, tmp_path):
|
|
125
|
+
monkeypatch.setattr(uc.httpx, "get", _fake_get("9.9.9"))
|
|
126
|
+
sink = _Sink()
|
|
127
|
+
out = uc.maybe_notify_update("0.3.3", stream=sink, cache_path=tmp_path / "u.json", now=1.0)
|
|
128
|
+
assert out == "9.9.9"
|
|
129
|
+
assert "9.9.9 available" in sink.text
|
|
130
|
+
assert "pip install -U wxcc-toolkit" in sink.text
|
|
131
|
+
assert "wxcc-flow init" in sink.text
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def test_notify_silent_when_current(monkeypatch, tmp_path):
|
|
135
|
+
monkeypatch.setattr(uc.httpx, "get", _fake_get(__version__))
|
|
136
|
+
sink = _Sink()
|
|
137
|
+
assert uc.maybe_notify_update(__version__, stream=sink,
|
|
138
|
+
cache_path=tmp_path / "u.json", now=1.0) is None
|
|
139
|
+
assert sink.text == ""
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def test_notify_silent_when_flag_disabled(monkeypatch, tmp_path):
|
|
143
|
+
monkeypatch.setattr(uc.httpx, "get", _fake_get("9.9.9"))
|
|
144
|
+
sink = _Sink()
|
|
145
|
+
assert uc.maybe_notify_update("0.3.3", disabled=True, stream=sink,
|
|
146
|
+
cache_path=tmp_path / "u.json", now=1.0) is None
|
|
147
|
+
assert sink.text == ""
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
@pytest.mark.parametrize("env", ["WXCC_FLOW_NO_UPDATE_CHECK", "CI"])
|
|
151
|
+
def test_notify_silent_when_env_set(monkeypatch, tmp_path, env):
|
|
152
|
+
monkeypatch.setenv(env, "1")
|
|
153
|
+
monkeypatch.setattr(uc.httpx, "get", _fake_get("9.9.9"))
|
|
154
|
+
sink = _Sink()
|
|
155
|
+
assert uc.maybe_notify_update("0.3.3", stream=sink,
|
|
156
|
+
cache_path=tmp_path / "u.json", now=1.0) is None
|
|
157
|
+
assert sink.text == ""
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def test_notify_env_falsey_stays_enabled(monkeypatch, tmp_path):
|
|
161
|
+
monkeypatch.setenv("WXCC_FLOW_NO_UPDATE_CHECK", "0") # explicit "don't disable"
|
|
162
|
+
monkeypatch.setattr(uc.httpx, "get", _fake_get("9.9.9"))
|
|
163
|
+
sink = _Sink()
|
|
164
|
+
assert uc.maybe_notify_update("0.3.3", stream=sink,
|
|
165
|
+
cache_path=tmp_path / "u.json", now=1.0) == "9.9.9"
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
# ------------------------------------------------------------ CLI wiring
|
|
169
|
+
def test_version_flag_still_works():
|
|
170
|
+
result = runner.invoke(app, ["--version"])
|
|
171
|
+
assert result.exit_code == 0
|
|
172
|
+
assert __version__ in result.output
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
def test_no_update_check_option_registered():
|
|
176
|
+
import typer
|
|
177
|
+
cmd = typer.main.get_command(app)
|
|
178
|
+
assert "no_update_check" in {p.name for p in cmd.params}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.3.2"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/wxcc-debug/SKILL.md
RENAMED
|
File without changes
|