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.
Files changed (245) hide show
  1. {wxcc_toolkit-0.3.2/src/wxcc_toolkit.egg-info → wxcc_toolkit-0.3.4}/PKG-INFO +31 -7
  2. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/README.md +30 -6
  3. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/pyproject.toml +1 -1
  4. wxcc_toolkit-0.3.4/src/wxcc_flow/__init__.py +1 -0
  5. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/main.py +10 -1
  6. wxcc_toolkit-0.3.4/src/wxcc_flow/update_check.py +135 -0
  7. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4/src/wxcc_toolkit.egg-info}/PKG-INFO +31 -7
  8. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_toolkit.egg-info/SOURCES.txt +3 -1
  9. wxcc_toolkit-0.3.4/tests/test_update_check.py +178 -0
  10. wxcc_toolkit-0.3.2/src/wxcc_flow/__init__.py +0 -1
  11. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/LICENSE +0 -0
  12. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/MANIFEST.in +0 -0
  13. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/setup.cfg +0 -0
  14. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-action/SKILL.md +0 -0
  15. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-action/reference.md +0 -0
  16. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-digital-inbound/SKILL.md +0 -0
  17. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-digital-inbound/reference.md +0 -0
  18. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-flow-designer/SKILL.md +0 -0
  19. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-flow-designer/reference.md +0 -0
  20. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-flow-programmatic/SKILL.md +0 -0
  21. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-flow-programmatic/reference.md +0 -0
  22. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-notification/SKILL.md +0 -0
  23. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-notification/reference.md +0 -0
  24. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-outbound-flow/SKILL.md +0 -0
  25. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-outbound-flow/reference.md +0 -0
  26. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-scripted-fulfillment/SKILL.md +0 -0
  27. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-scripted-fulfillment/reference.md +0 -0
  28. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-solution-docs/SKILL.md +0 -0
  29. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-solution-docs/reference.md +0 -0
  30. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-spec-diagram/SKILL.md +0 -0
  31. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-spec-diagram/generate.py +0 -0
  32. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/build-spec-diagram/reference.md +0 -0
  33. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/configure-ai-agent/SKILL.md +0 -0
  34. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/configure-ai-agent/reference.md +0 -0
  35. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/configure-scripted-agent/SKILL.md +0 -0
  36. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/configure-scripted-agent/reference.md +0 -0
  37. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/design-flow/SKILL.md +0 -0
  38. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/design-flow/reference.md +0 -0
  39. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/design-scripted-agent/SKILL.md +0 -0
  40. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/wxcc-debug/SKILL.md +0 -0
  41. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.agents/skills/wxcc-debug/reference.md +0 -0
  42. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/agents/wxcc-agent-builder.md +0 -0
  43. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/rules/ai-agent-studio-questions.md +0 -0
  44. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/rules/ai-agent-studio-scripted-questions.md +0 -0
  45. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/rules/bre-questions.md +0 -0
  46. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/rules/db-integration-questions.md +0 -0
  47. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/rules/digital-inbound-questions.md +0 -0
  48. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/rules/flow-designer-pipeline.md +0 -0
  49. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/rules/flow-designer-questions.md +0 -0
  50. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/rules/flowir-mcp-verification.md +0 -0
  51. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/rules/large-operation-batching.md +0 -0
  52. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/rules/webex-connect-questions.md +0 -0
  53. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/rules/wxcc-platform-questions.md +0 -0
  54. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/settings.json +0 -0
  55. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-action/SKILL.md +0 -0
  56. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-action/reference.md +0 -0
  57. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-digital-inbound/SKILL.md +0 -0
  58. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-digital-inbound/reference.md +0 -0
  59. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-flow-designer/SKILL.md +0 -0
  60. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-flow-designer/reference.md +0 -0
  61. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-flow-programmatic/SKILL.md +0 -0
  62. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-flow-programmatic/reference.md +0 -0
  63. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-notification/SKILL.md +0 -0
  64. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-notification/reference.md +0 -0
  65. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-outbound-flow/SKILL.md +0 -0
  66. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-outbound-flow/reference.md +0 -0
  67. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-scripted-fulfillment/SKILL.md +0 -0
  68. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-scripted-fulfillment/reference.md +0 -0
  69. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-solution-docs/SKILL.md +0 -0
  70. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-solution-docs/reference.md +0 -0
  71. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-spec-diagram/SKILL.md +0 -0
  72. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-spec-diagram/generate.py +0 -0
  73. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/build-spec-diagram/reference.md +0 -0
  74. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/configure-ai-agent/SKILL.md +0 -0
  75. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/configure-ai-agent/reference.md +0 -0
  76. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/configure-scripted-agent/SKILL.md +0 -0
  77. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/configure-scripted-agent/reference.md +0 -0
  78. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/design-flow/SKILL.md +0 -0
  79. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/design-flow/reference.md +0 -0
  80. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/design-scripted-agent/SKILL.md +0 -0
  81. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/wxcc-debug/SKILL.md +0 -0
  82. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.claude/skills/wxcc-debug/reference.md +0 -0
  83. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/agents/wxcc-agent-builder.toml +0 -0
  84. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/config.toml +0 -0
  85. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/docs/cli-commands.md +0 -0
  86. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/docs/rules/ai-agent-studio-questions.md +0 -0
  87. {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
  88. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/docs/rules/bre-questions.md +0 -0
  89. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/docs/rules/db-integration-questions.md +0 -0
  90. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/docs/rules/digital-inbound-questions.md +0 -0
  91. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/docs/rules/flow-designer-pipeline.md +0 -0
  92. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/docs/rules/flow-designer-questions.md +0 -0
  93. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/docs/rules/flowir-mcp-verification.md +0 -0
  94. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/docs/rules/large-operation-batching.md +0 -0
  95. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/docs/rules/webex-connect-questions.md +0 -0
  96. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/docs/rules/wxcc-platform-questions.md +0 -0
  97. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.codex/docs/sync-checklist.md +0 -0
  98. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/.mcp.json +0 -0
  99. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/AGENTS.md +0 -0
  100. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/CLAUDE.md +0 -0
  101. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/examples/demo-outbound-notifications.md +0 -0
  102. {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
  103. {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
  104. {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
  105. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/examples/flowir/business-hours-routing.json +0 -0
  106. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/examples/flowir/data-dip-routing.json +0 -0
  107. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/examples/flowir/menu-routing.json +0 -0
  108. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/examples/flowir/simple-inbound.json +0 -0
  109. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/examples/format-store-hours.json +0 -0
  110. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/examples/function-import.json +0 -0
  111. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/ai-agent-studio.md +0 -0
  112. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/bre-setup.md +0 -0
  113. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/cjds-integration.md +0 -0
  114. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/connect-flows.md +0 -0
  115. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/cross-channel-escalation.md +0 -0
  116. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/custom-connectors-setup.md +0 -0
  117. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/digital-inbound-agent.md +0 -0
  118. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/dual-call-paging.md +0 -0
  119. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/functions-setup.md +0 -0
  120. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/inbound-sms.md +0 -0
  121. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/inbound-voice.md +0 -0
  122. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/multi-channel-routing.md +0 -0
  123. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/outbound-apple-messages.md +0 -0
  124. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/outbound-email.md +0 -0
  125. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/outbound-rcs.md +0 -0
  126. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/outbound-sms.md +0 -0
  127. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/outbound-voice.md +0 -0
  128. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/outbound-whatsapp.md +0 -0
  129. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/scripted-agent-build.md +0 -0
  130. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/scripted-agent-design.md +0 -0
  131. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/sequential-dialing.md +0 -0
  132. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/supabase.md +0 -0
  133. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/webex-api-auth.md +0 -0
  134. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/webex-calling-paging.md +0 -0
  135. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/webhook-triggers.md +0 -0
  136. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/playbooks/wxcc-setup.md +0 -0
  137. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/ai-agent-studio-import-json.md +0 -0
  138. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/ai-agent-studio-scripted.md +0 -0
  139. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/ai-agent-studio.md +0 -0
  140. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/bre.md +0 -0
  141. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/connect-apple-messages.md +0 -0
  142. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/connect-email.md +0 -0
  143. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/connect-multi-channel.md +0 -0
  144. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/connect-rcs.md +0 -0
  145. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/connect-sms.md +0 -0
  146. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/connect-whatsapp.md +0 -0
  147. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/db-integration.md +0 -0
  148. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/digital-inbound.md +0 -0
  149. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-blueprints.md +0 -0
  150. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/_index.md +0 -0
  151. {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
  152. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/blind-transfer.md +0 -0
  153. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/bre-request.md +0 -0
  154. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/bridged-transfer.md +0 -0
  155. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/business-hours.md +0 -0
  156. {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
  157. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/callback.md +0 -0
  158. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/case.md +0 -0
  159. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/collect-digits.md +0 -0
  160. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/condition.md +0 -0
  161. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/cryptographic-hash.md +0 -0
  162. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/custom-connectors.md +0 -0
  163. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/end-flow.md +0 -0
  164. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/escalate-cdg.md +0 -0
  165. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/feedback-v2.md +0 -0
  166. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/feedback.md +0 -0
  167. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/functions-activity.md +0 -0
  168. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/generate-otp.md +0 -0
  169. {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
  170. {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
  171. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/goto.md +0 -0
  172. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/http-connector.md +0 -0
  173. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/http-request.md +0 -0
  174. {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
  175. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/menu.md +0 -0
  176. {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
  177. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/parse.md +0 -0
  178. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/percentage-allocation.md +0 -0
  179. {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
  180. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/receive-message.md +0 -0
  181. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/record.md +0 -0
  182. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/recording-control.md +0 -0
  183. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/reservation-start.md +0 -0
  184. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/schedule-callback.md +0 -0
  185. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/screen-pop.md +0 -0
  186. {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
  187. {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
  188. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/send-digits.md +0 -0
  189. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/set-announcement.md +0 -0
  190. {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
  191. {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
  192. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/set-whisper.md +0 -0
  193. {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
  194. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/upload-audio.md +0 -0
  195. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/verify-otp.md +0 -0
  196. {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
  197. {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
  198. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-activities/wait.md +0 -0
  199. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-essentials.md +0 -0
  200. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-flowir.md +0 -0
  201. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer-patterns.md +0 -0
  202. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/flow-designer.md +0 -0
  203. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/webex-connect-advanced.md +0 -0
  204. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/webex-connect.md +0 -0
  205. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/wxcc-platform.md +0 -0
  206. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/reference/wxcc-provisioning-api.md +0 -0
  207. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/templates/action-config.md +0 -0
  208. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/templates/ai-agent-design-doc.md +0 -0
  209. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/templates/ai-agent-studio-import-template.json +0 -0
  210. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/templates/design-doc.md +0 -0
  211. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/templates/flow-designer-design-doc.md +0 -0
  212. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/templates/notification-config.md +0 -0
  213. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/_playbook/docs/templates/outbound-flow-config.md +0 -0
  214. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/client.py +0 -0
  215. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/config.py +0 -0
  216. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/generated/__init__.py +0 -0
  217. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/generated/_registry.py +0 -0
  218. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/generated/connectors.py +0 -0
  219. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/generated/flows.py +0 -0
  220. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/generated/flows_v2.py +0 -0
  221. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/generated/prefs.py +0 -0
  222. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/generated/projects.py +0 -0
  223. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/generated/resource_collections.py +0 -0
  224. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/generated/templates.py +0 -0
  225. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/generated/tracing.py +0 -0
  226. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/generated/user_prefs.py +0 -0
  227. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/generated/util.py +0 -0
  228. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/generated/versions.py +0 -0
  229. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/init_playbook.py +0 -0
  230. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_flow/output.py +0 -0
  231. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_toolkit.egg-info/dependency_links.txt +0 -0
  232. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_toolkit.egg-info/entry_points.txt +0 -0
  233. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_toolkit.egg-info/requires.txt +0 -0
  234. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/src/wxcc_toolkit.egg-info/top_level.txt +0 -0
  235. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/tests/test_assemble.py +0 -0
  236. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/tests/test_client.py +0 -0
  237. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/tests/test_doc_consistency.py +0 -0
  238. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/tests/test_drift_check.py +0 -0
  239. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/tests/test_generator.py +0 -0
  240. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/tests/test_generator_regression.py +0 -0
  241. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/tests/test_init_playbook.py +0 -0
  242. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/tests/test_live_mutation.py +0 -0
  243. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/tests/test_live_readonly.py +0 -0
  244. {wxcc_toolkit-0.3.2 → wxcc_toolkit-0.3.4}/tests/test_release_integrity.py +0 -0
  245. {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.2
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 playbook into `my-wxcc-project/`:
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
- ├── .mcp.json # MCP server config (optional — see "Configure MCP servers" below)
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`) recording every file it
56
- owns. It never overwrites files you create. If the target folder already contains
57
- files the playbook would overwrite, `init` stops and lists them — re-run with
58
- `--force` to overwrite, or pick an empty folder.
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 playbook into `my-wxcc-project/`:
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
- ├── .mcp.json # MCP server config (optional — see "Configure MCP servers" below)
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`) recording every file it
43
- owns. It never overwrites files you create. If the target folder already contains
44
- files the playbook would overwrite, `init` stops and lists them — re-run with
45
- `--force` to overwrite, or pick an empty folder.
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.2"
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
- pass
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.2
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 playbook into `my-wxcc-project/`:
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
- ├── .mcp.json # MCP server config (optional — see "Configure MCP servers" below)
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`) recording every file it
56
- owns. It never overwrites files you create. If the target folder already contains
57
- files the playbook would overwrite, `init` stops and lists them — re-run with
58
- `--force` to overwrite, or pick an empty folder.
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