simcord 3.0.0__tar.gz → 3.0.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- simcord-3.0.2/.github/workflows/verify.yml +131 -0
- {simcord-3.0.0 → simcord-3.0.2}/.gitignore +1 -0
- simcord-3.0.2/CHANGELOG.md +457 -0
- {simcord-3.0.0 → simcord-3.0.2}/CONTRIBUTING.md +10 -0
- {simcord-3.0.0 → simcord-3.0.2}/PKG-INFO +42 -11
- {simcord-3.0.0 → simcord-3.0.2}/README.md +33 -8
- {simcord-3.0.0 → simcord-3.0.2}/docs/api.md +56 -2
- {simcord-3.0.0 → simcord-3.0.2}/docs/architecture.md +10 -0
- simcord-3.0.2/docs/assets/adventure/alpine.png +0 -0
- simcord-3.0.2/docs/assets/adventure/canyon.png +0 -0
- simcord-3.0.2/docs/assets/preview/attachments.png +0 -0
- simcord-3.0.2/docs/assets/preview/buttons.png +0 -0
- simcord-3.0.2/docs/assets/preview/embeds.png +0 -0
- simcord-3.0.2/docs/assets/preview/entities.png +0 -0
- simcord-3.0.2/docs/assets/preview/layouts.png +0 -0
- simcord-3.0.2/docs/assets/preview/markdown.png +0 -0
- simcord-3.0.2/docs/assets/preview/modals.png +0 -0
- simcord-3.0.2/docs/assets/preview/polls.png +0 -0
- simcord-3.0.2/docs/assets/preview/replies.png +0 -0
- simcord-3.0.2/docs/assets/preview/selects.png +0 -0
- simcord-3.0.2/docs/assets/preview/slash-commands.png +0 -0
- simcord-3.0.2/docs/assets/simcord-showcase-poll-refresh.gif +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/docs/concepts.md +13 -1
- {simcord-3.0.0 → simcord-3.0.2}/docs/guides/ai-coding-agents.md +3 -1
- {simcord-3.0.0 → simcord-3.0.2}/docs/guides/components.md +4 -0
- {simcord-3.0.0 → simcord-3.0.2}/docs/guides/diagnostics.md +25 -9
- simcord-3.0.2/docs/guides/discord-visual-calibration.md +184 -0
- {simcord-3.0.0 → simcord-3.0.2}/docs/guides/fixtures.md +12 -1
- {simcord-3.0.0 → simcord-3.0.2}/docs/guides/intents.md +43 -6
- {simcord-3.0.0 → simcord-3.0.2}/docs/guides/interactions.md +16 -0
- {simcord-3.0.0 → simcord-3.0.2}/docs/guides/messages.md +64 -4
- {simcord-3.0.0 → simcord-3.0.2}/docs/guides/permissions.md +4 -0
- simcord-3.0.2/docs/guides/preview.md +935 -0
- simcord-3.0.2/docs/guides/testing-slash-commands.md +161 -0
- {simcord-3.0.0 → simcord-3.0.2}/docs/guides/threads-reactions-dms.md +20 -1
- {simcord-3.0.0 → simcord-3.0.2}/docs/llms.txt +11 -2
- {simcord-3.0.0 → simcord-3.0.2}/docs/parity-matrix.md +37 -9
- simcord-3.0.2/docs/preview-attestation.md +90 -0
- {simcord-3.0.0 → simcord-3.0.2}/docs/stability.md +41 -5
- {simcord-3.0.0 → simcord-3.0.2}/examples/README.md +21 -4
- {simcord-3.0.0 → simcord-3.0.2}/examples/preview_example.py +3 -2
- {simcord-3.0.0 → simcord-3.0.2}/mkdocs.yml +5 -0
- {simcord-3.0.0 → simcord-3.0.2}/pyproject.toml +6 -3
- simcord-3.0.2/scripts/capture_discord_reference.py +424 -0
- {simcord-3.0.0 → simcord-3.0.2}/scripts/capture_visual_reference.py +215 -84
- simcord-3.0.2/scripts/check_package.py +103 -0
- simcord-3.0.2/scripts/check_reference_modal_offline.py +55 -0
- {simcord-3.0.0 → simcord-3.0.2}/scripts/discord_reference_bot.py +120 -68
- simcord-3.0.2/scripts/preview_dogfood.py +228 -0
- simcord-3.0.2/scripts/record_readme_demo.py +452 -0
- simcord-3.0.2/scripts/replay_visual_reference.py +871 -0
- simcord-3.0.2/scripts/validate_discord_reference_pack.py +241 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/__init__.py +2 -1
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/_dpy_internals.py +40 -7
- simcord-3.0.2/src/simcord/_modal.py +315 -0
- simcord-3.0.2/src/simcord/_runtime.py +313 -0
- simcord-3.0.2/src/simcord/_settlement.py +265 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/actors.py +269 -410
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/asserts.py +2 -2
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/cdn.py +10 -0
- simcord-3.0.2/src/simcord/backend/command_access.py +141 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/errors.py +9 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/models/__init__.py +13 -1
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/models/channel.py +0 -1
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/models/expression.py +5 -1
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/models/interaction.py +5 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/models/member.py +2 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/models/message.py +44 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/ops/channels.py +37 -4
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/ops/commands.py +37 -3
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/ops/expressions.py +20 -2
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/ops/guilds.py +16 -2
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/ops/messages.py +233 -32
- simcord-3.0.2/src/simcord/backend/ops/polls.py +105 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/ops/reactions.py +21 -11
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/serializers.py +27 -7
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/builders.py +156 -11
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/components.py +68 -17
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/enums.py +38 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/env.py +125 -589
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/gateway.py +21 -2
- simcord-3.0.2/src/simcord/http/_helpers.py +496 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/http/client.py +8 -2
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/http/router.py +3 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/http/routes/channels.py +14 -6
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/http/routes/commands.py +16 -2
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/http/routes/expressions.py +37 -6
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/http/routes/guilds.py +5 -2
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/http/routes/interactions.py +35 -23
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/http/routes/messages.py +5 -5
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/intents.py +55 -14
- simcord-3.0.2/src/simcord/interactions.py +487 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/preview/__init__.py +198 -42
- simcord-3.0.2/src/simcord/preview/_action_plans.py +595 -0
- simcord-3.0.2/src/simcord/preview/_actions.py +840 -0
- simcord-3.0.2/src/simcord/preview/_assets.py +502 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/preview/_capture.py +186 -109
- simcord-3.0.2/src/simcord/preview/_commands.py +214 -0
- simcord-3.0.2/src/simcord/preview/_component_projection.py +381 -0
- simcord-3.0.2/src/simcord/preview/_diagnostics.py +284 -0
- simcord-3.0.2/src/simcord/preview/_identity.py +146 -0
- simcord-3.0.2/src/simcord/preview/_markdown.py +545 -0
- simcord-3.0.2/src/simcord/preview/_media.py +832 -0
- simcord-3.0.2/src/simcord/preview/_media_worker.py +64 -0
- simcord-3.0.2/src/simcord/preview/_messages.py +653 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/preview/_pages.py +254 -44
- simcord-3.0.2/src/simcord/preview/_queries.py +797 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/preview/_server.py +169 -23
- simcord-3.0.2/src/simcord/preview/_snapshot.py +372 -0
- simcord-3.0.2/src/simcord/preview/protocol.schema.json +453 -0
- simcord-3.0.2/src/simcord/preview/static/app.js +2280 -0
- simcord-3.0.2/src/simcord/preview/static/commands.js +999 -0
- simcord-3.0.2/src/simcord/preview/static/components.js +695 -0
- simcord-3.0.2/src/simcord/preview/static/composer.js +226 -0
- simcord-3.0.2/src/simcord/preview/static/dom.js +106 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/preview/static/fonts/manifest.json +4 -3
- simcord-3.0.2/src/simcord/preview/static/fonts/noto-color-emoji-v2.051.ttf +0 -0
- simcord-3.0.2/src/simcord/preview/static/index.html +186 -0
- simcord-3.0.2/src/simcord/preview/static/listbox.js +155 -0
- simcord-3.0.2/src/simcord/preview/static/media.js +713 -0
- simcord-3.0.2/src/simcord/preview/static/messages.js +484 -0
- simcord-3.0.2/src/simcord/preview/static/preview.css +1817 -0
- simcord-3.0.2/src/simcord/preview/static/select-drafts.js +284 -0
- simcord-3.0.2/src/simcord/preview/static/selects.js +395 -0
- simcord-3.0.2/src/simcord/preview/static/text.js +357 -0
- simcord-3.0.2/src/simcord/preview/static/timeline.js +142 -0
- simcord-3.0.2/src/simcord/preview/static/transport.js +167 -0
- simcord-3.0.2/src/simcord/preview/static/vendor/highlight/LICENSE +29 -0
- simcord-3.0.2/src/simcord/preview/static/vendor/highlight/SHA256SUMS +20 -0
- simcord-3.0.2/src/simcord/preview/static/vendor/highlight/es/core.min.js +306 -0
- simcord-3.0.2/src/simcord/preview/static/vendor/highlight/es/languages/bash.min.js +21 -0
- simcord-3.0.2/src/simcord/preview/static/vendor/highlight/es/languages/cpp.min.js +46 -0
- simcord-3.0.2/src/simcord/preview/static/vendor/highlight/es/languages/csharp.min.js +49 -0
- simcord-3.0.2/src/simcord/preview/static/vendor/highlight/es/languages/css.min.js +31 -0
- simcord-3.0.2/src/simcord/preview/static/vendor/highlight/es/languages/diff.min.js +9 -0
- simcord-3.0.2/src/simcord/preview/static/vendor/highlight/es/languages/dockerfile.min.js +8 -0
- simcord-3.0.2/src/simcord/preview/static/vendor/highlight/es/languages/go.min.js +19 -0
- simcord-3.0.2/src/simcord/preview/static/vendor/highlight/es/languages/ini.min.js +16 -0
- simcord-3.0.2/src/simcord/preview/static/vendor/highlight/es/languages/java.min.js +38 -0
- simcord-3.0.2/src/simcord/preview/static/vendor/highlight/es/languages/javascript.min.js +81 -0
- simcord-3.0.2/src/simcord/preview/static/vendor/highlight/es/languages/json.min.js +8 -0
- simcord-3.0.2/src/simcord/preview/static/vendor/highlight/es/languages/markdown.min.js +32 -0
- simcord-3.0.2/src/simcord/preview/static/vendor/highlight/es/languages/python.min.js +42 -0
- simcord-3.0.2/src/simcord/preview/static/vendor/highlight/es/languages/rust.min.js +27 -0
- simcord-3.0.2/src/simcord/preview/static/vendor/highlight/es/languages/sql.min.js +21 -0
- simcord-3.0.2/src/simcord/preview/static/vendor/highlight/es/languages/typescript.min.js +99 -0
- simcord-3.0.2/src/simcord/preview/static/vendor/highlight/es/languages/xml.min.js +29 -0
- simcord-3.0.2/src/simcord/preview/static/vendor/highlight/es/languages/yaml.min.js +28 -0
- simcord-3.0.2/src/simcord/preview/static/vendor/lottie/5.12.2/lottie_light_canvas.min.js +1 -0
- simcord-3.0.2/src/simcord/preview/static/vendor/lottie/LICENSE +21 -0
- simcord-3.0.2/src/simcord/preview/static/vendor/lottie/SHA256SUMS +2 -0
- simcord-3.0.2/src/simcord/preview/static/workbench.js +130 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/results.py +7 -6
- {simcord-3.0.0 → simcord-3.0.2}/tests/conformance/test_field_honesty.py +110 -7
- simcord-3.0.2/tests/fixtures/commands/option_cases.json +42 -0
- simcord-3.0.2/tests/fixtures/preview/catalog.py +1293 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/fixtures/preview/coverage.json +346 -4
- {simcord-3.0.0 → simcord-3.0.2}/tests/fixtures/preview/measurements.json +80 -0
- simcord-3.0.2/tests/fixtures/preview/moving-square.json +1 -0
- simcord-3.0.2/tests/fixtures/preview/profiles.json +176 -0
- simcord-3.0.2/tests/fixtures/preview/states.json +331 -0
- simcord-3.0.2/tests/fixtures/preview/video.mp4 +0 -0
- simcord-3.0.2/tests/fixtures/preview/voice.ogg +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/fixtures/sample_bot/__init__.py +1 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/fixtures/sample_bot/interactions.py +52 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/fixtures/sample_bot/moderation.py +1 -0
- simcord-3.0.2/tests/fixtures/sample_bot/picker.py +97 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/preview_helpers.py +34 -8
- simcord-3.0.2/tests/integration/test_app_commands.py +127 -0
- simcord-3.0.2/tests/integration/test_command_visibility.py +340 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_components_v2_interactions.py +121 -1
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_components_v2_messages.py +27 -0
- simcord-3.0.2/tests/integration/test_forum.py +201 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_intents.py +25 -0
- simcord-3.0.2/tests/integration/test_interaction_followups.py +264 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_lifecycle.py +2 -2
- simcord-3.0.2/tests/integration/test_message_content_rest.py +293 -0
- simcord-3.0.2/tests/integration/test_message_routes.py +249 -0
- simcord-3.0.2/tests/integration/test_messages.py +353 -0
- simcord-3.0.2/tests/integration/test_observation_contracts.py +264 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_preview.py +104 -6
- simcord-3.0.2/tests/integration/test_preview_additional.py +1214 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_preview_capture.py +267 -12
- simcord-3.0.2/tests/integration/test_preview_capture_dx.py +1739 -0
- simcord-3.0.2/tests/integration/test_preview_channel.py +721 -0
- simcord-3.0.2/tests/integration/test_preview_command_picker.py +1026 -0
- simcord-3.0.2/tests/integration/test_preview_commands.py +663 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_preview_coverage.py +54 -45
- simcord-3.0.2/tests/integration/test_preview_dx.py +1053 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_preview_edges.py +15 -15
- simcord-3.0.2/tests/integration/test_preview_fixes.py +1196 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_preview_fonts.py +101 -4
- simcord-3.0.2/tests/integration/test_preview_identity.py +210 -0
- simcord-3.0.2/tests/integration/test_preview_message_actions.py +379 -0
- simcord-3.0.2/tests/integration/test_preview_security.py +884 -0
- simcord-3.0.2/tests/integration/test_reference_replay.py +96 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_settlement_contract.py +47 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_threads.py +33 -0
- simcord-3.0.2/tests/unit/test_command_access.py +282 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/unit/test_components_v2_validation.py +53 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/unit/test_dpy_internals.py +100 -28
- simcord-3.0.2/tests/unit/test_intent_rules.py +229 -0
- simcord-3.0.2/tests/unit/test_option_validation.py +110 -0
- simcord-3.0.2/tests/unit/test_preview_action_specs.py +52 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/unit/test_pytest_plugin.py +5 -7
- {simcord-3.0.0 → simcord-3.0.2}/uv.lock +194 -3
- simcord-3.0.0/.github/workflows/verify.yml +0 -99
- simcord-3.0.0/CHANGELOG.md +0 -291
- simcord-3.0.0/docs/guides/preview.md +0 -398
- simcord-3.0.0/docs/guides/testing-slash-commands.md +0 -104
- simcord-3.0.0/scripts/check_package.py +0 -47
- simcord-3.0.0/src/simcord/backend/ops/polls.py +0 -69
- simcord-3.0.0/src/simcord/http/_helpers.py +0 -282
- simcord-3.0.0/src/simcord/interactions.py +0 -217
- simcord-3.0.0/src/simcord/preview/_actions.py +0 -673
- simcord-3.0.0/src/simcord/preview/_assets.py +0 -209
- simcord-3.0.0/src/simcord/preview/_markdown.py +0 -145
- simcord-3.0.0/src/simcord/preview/_media.py +0 -167
- simcord-3.0.0/src/simcord/preview/_snapshot.py +0 -750
- simcord-3.0.0/src/simcord/preview/protocol.schema.json +0 -59
- simcord-3.0.0/src/simcord/preview/static/app.js +0 -885
- simcord-3.0.0/src/simcord/preview/static/components.js +0 -859
- simcord-3.0.0/src/simcord/preview/static/fonts/noto-color-emoji-v2.051.ttf +0 -0
- simcord-3.0.0/src/simcord/preview/static/index.html +0 -27
- simcord-3.0.0/src/simcord/preview/static/preview.css +0 -993
- simcord-3.0.0/tests/fixtures/preview/catalog.py +0 -483
- simcord-3.0.0/tests/fixtures/preview/profiles.json +0 -87
- simcord-3.0.0/tests/fixtures/preview/states.json +0 -137
- simcord-3.0.0/tests/integration/test_app_commands.py +0 -58
- simcord-3.0.0/tests/integration/test_forum.py +0 -79
- simcord-3.0.0/tests/integration/test_interaction_followups.py +0 -119
- simcord-3.0.0/tests/integration/test_message_routes.py +0 -94
- simcord-3.0.0/tests/integration/test_messages.py +0 -161
- simcord-3.0.0/tests/integration/test_preview_additional.py +0 -673
- simcord-3.0.0/tests/integration/test_preview_capture_dx.py +0 -296
- simcord-3.0.0/tests/integration/test_preview_dx.py +0 -177
- simcord-3.0.0/tests/integration/test_preview_fixes.py +0 -638
- simcord-3.0.0/tests/integration/test_preview_security.py +0 -208
- simcord-3.0.0/tests/unit/test_intent_rules.py +0 -94
- simcord-3.0.0/tests/unit/test_version.py +0 -13
- {simcord-3.0.0 → simcord-3.0.2}/.github/ISSUE_TEMPLATE/bug.md +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/.github/ISSUE_TEMPLATE/feature.md +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/.github/ISSUE_TEMPLATE/parity-gap.md +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/.github/dependabot.yml +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/.github/workflows/ci.yml +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/.github/workflows/dpy-master.yml +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/.github/workflows/release.yml +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/.pre-commit-config.yaml +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/.python-version +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/.readthedocs.yaml +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/CODE_OF_CONDUCT.md +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/LICENSE +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/SECURITY.md +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/benchmarks/_helpers.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/benchmarks/test_dispatch_benchmarks.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/benchmarks/test_perf_guards.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/changes/README.md +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/docs/assets/simcord-terminal-demo.gif +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/docs/assets/simcord-transparent.webp +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/docs/assets/social-card.png +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/docs/changelog.md +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/docs/cookbook.md +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/docs/faq.md +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/docs/guides/mocks-vs-simulation.md +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/docs/guides/moderation-and-guild.md +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/docs/guides/test-without-token.md +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/docs/guides/testing-discord-py-bots.md +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/docs/guides/time-control.md +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/docs/index.md +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/docs/installation.md +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/docs/performance.md +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/docs/quickstart.md +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/docs/robots.txt +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/examples/__init__.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/examples/bot.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/examples/conftest.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/examples/test_bot.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/overrides/main.html +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/scripts/check_discoverability.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/scripts/compare_visual_reference.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/__init__.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/access.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/models/auditlog.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/models/automod.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/models/guild.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/models/invite.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/models/role.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/models/scheduled_event.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/models/stage_instance.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/models/user.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/models/voice.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/models/webhook.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/ops/__init__.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/ops/audit.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/ops/base.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/ops/invites.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/ops/permissions.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/ops/scheduled_events.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/ops/voice.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/ops/webhooks.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/permissions.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/backend/state.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/http/__init__.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/http/routes/__init__.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/http/routes/application.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/http/routes/auditlogs.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/http/routes/automod.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/http/routes/invites.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/http/routes/reactions.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/http/routes/scheduled_events.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/http/routes/stage_instances.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/parity.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/preview/static/fonts/OFL-1.1-Noto-Arabic.txt +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/preview/static/fonts/OFL-1.1-Noto-CJK.txt +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/preview/static/fonts/OFL-1.1-Noto-Devanagari.txt +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/preview/static/fonts/OFL-1.1-Noto-Emoji.txt +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/preview/static/fonts/OFL-1.1-Noto-Hebrew.txt +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/preview/static/fonts/OFL-1.1-Noto.txt +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/preview/static/fonts/noto-sans-arabic-v2.012.ttf +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/preview/static/fonts/noto-sans-devanagari-v2.007.ttf +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/preview/static/fonts/noto-sans-hebrew-v3.001.ttf +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/preview/static/fonts/noto-sans-latin-italic-v2.015.ttf +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/preview/static/fonts/noto-sans-latin-v2.015.ttf +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/preview/static/fonts/noto-sans-mono-v2.014.ttf +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/preview/static/fonts/noto-sans-sc-v2.004.ttf +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/py.typed +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/pytest_plugin.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/src/simcord/types.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/conformance/_world.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/conformance/test_field_honesty_fuzz.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/conformance/test_route_coverage.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/conformance/test_serializers.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/conftest.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/fixtures/__init__.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/fixtures/preview/__init__.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/fixtures/sample_bot/events.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/fixtures/sample_bot/general.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_application_emojis.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_asserts.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_audit_logs.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_automod.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_bot_users_and_webhooks.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_channels.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_command_permissions.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_common_bot_sweep.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_coverage_sweep.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_diagnostics.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_edge_cases.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_error_capture_and_edits.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_expressions.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_gateway_and_automod_exempt.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_guilds.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_interactions.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_invites.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_members.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_misc_branches.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_moderation.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_polls.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_reactions.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_roles_and_ordering.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_scheduled_events.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_setup_hook_suspension.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_sharding.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_stage_instances.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_time.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_transport_edges.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_voice_state.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/integration/test_world_helpers.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/unit/test_assert_helpers.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/unit/test_backend_lookup_errors.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/unit/test_errors.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/unit/test_lazy_import.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/unit/test_parity.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/unit/test_parity_tooling.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/unit/test_permission_validators.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/unit/test_permissions.py +0 -0
- {simcord-3.0.0 → simcord-3.0.2}/tests/unit/test_router.py +0 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
name: Verify
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_call:
|
|
5
|
+
|
|
6
|
+
permissions:
|
|
7
|
+
contents: read
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
lint:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v7
|
|
14
|
+
- uses: astral-sh/setup-uv@v7
|
|
15
|
+
# screenshot extra pulls in playwright/PIL/markdown-it so pyright resolves
|
|
16
|
+
# the lazy optional imports in simcord.preview with real type info.
|
|
17
|
+
- run: uv sync --locked --extra dev --extra screenshot
|
|
18
|
+
- run: uv run ruff check src tests examples benchmarks scripts
|
|
19
|
+
- run: uv run ruff format --check src tests examples benchmarks scripts
|
|
20
|
+
- run: uv run pyright src
|
|
21
|
+
|
|
22
|
+
test:
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
strategy:
|
|
25
|
+
fail-fast: false
|
|
26
|
+
matrix:
|
|
27
|
+
python-version: ["3.11", "3.12", "3.13", "3.14"]
|
|
28
|
+
steps:
|
|
29
|
+
- uses: actions/checkout@v7
|
|
30
|
+
- uses: astral-sh/setup-uv@v7
|
|
31
|
+
with:
|
|
32
|
+
python-version: ${{ matrix.python-version }}
|
|
33
|
+
# The complete 3.0 suite includes real browser checks on every supported Python.
|
|
34
|
+
- run: uv sync --locked --extra dev --extra screenshot
|
|
35
|
+
- run: uv run python -m playwright install --with-deps chromium
|
|
36
|
+
- run: uv run coverage run -m pytest tests examples -q
|
|
37
|
+
- run: uv run coverage report
|
|
38
|
+
|
|
39
|
+
docs:
|
|
40
|
+
runs-on: ubuntu-latest
|
|
41
|
+
steps:
|
|
42
|
+
- uses: actions/checkout@v7
|
|
43
|
+
- uses: astral-sh/setup-uv@v7
|
|
44
|
+
- run: uv sync --locked --extra docs
|
|
45
|
+
- run: uv run mkdocs build --strict
|
|
46
|
+
- run: uv run python scripts/check_discoverability.py site
|
|
47
|
+
|
|
48
|
+
preview-package:
|
|
49
|
+
name: Preview package + locked Linux Chromium
|
|
50
|
+
runs-on: ubuntu-22.04
|
|
51
|
+
timeout-minutes: 30
|
|
52
|
+
steps:
|
|
53
|
+
- uses: actions/checkout@v7
|
|
54
|
+
- run: echo "PLAYWRIGHT_BROWSERS_PATH=${{ runner.temp }}/playwright-browsers" >> "$GITHUB_ENV"
|
|
55
|
+
- uses: astral-sh/setup-uv@v7
|
|
56
|
+
with:
|
|
57
|
+
python-version: "3.12"
|
|
58
|
+
- run: uv sync --locked --extra screenshot --extra pytest
|
|
59
|
+
- run: uv run python -m playwright install --with-deps chromium
|
|
60
|
+
- run: uv run python scripts/compare_visual_reference.py --check-manifest tests/fixtures/preview/coverage.json
|
|
61
|
+
- run: uv run python scripts/compare_visual_reference.py --check
|
|
62
|
+
- run: uv run python scripts/capture_visual_reference.py --check
|
|
63
|
+
- run: uv run pytest tests/integration/test_preview*.py -q
|
|
64
|
+
- run: uv build
|
|
65
|
+
- run: uv run python scripts/check_package.py dist
|
|
66
|
+
- name: Smoke-test installed wheel with a sparse system-font set
|
|
67
|
+
shell: bash
|
|
68
|
+
run: |
|
|
69
|
+
set -euo pipefail
|
|
70
|
+
tmp="$(mktemp -d)"
|
|
71
|
+
trap 'rm -rf "$tmp"' EXIT
|
|
72
|
+
mkdir -p "$tmp/sparse-fonts" "$tmp/font-cache"
|
|
73
|
+
# Chromium's Skia font manager requires one fallback even when the
|
|
74
|
+
# bundled Preview fonts supply every tested face.
|
|
75
|
+
cp "$(fc-match -f '%{file}' sans-serif)" "$tmp/sparse-fonts/fallback.ttf"
|
|
76
|
+
cat > "$tmp/fonts.conf" <<EOF
|
|
77
|
+
<?xml version="1.0"?>
|
|
78
|
+
<fontconfig>
|
|
79
|
+
<dir>$tmp/sparse-fonts</dir>
|
|
80
|
+
<cachedir>$tmp/font-cache</cachedir>
|
|
81
|
+
</fontconfig>
|
|
82
|
+
EOF
|
|
83
|
+
uv export --locked --no-dev --extra screenshot --no-emit-project \
|
|
84
|
+
--format requirements-txt --output-file "$tmp/requirements.txt"
|
|
85
|
+
uv venv --python 3.12 "$tmp/venv"
|
|
86
|
+
uv pip install --python "$tmp/venv/bin/python" -r "$tmp/requirements.txt"
|
|
87
|
+
wheel="$(printf '%s\n' "$GITHUB_WORKSPACE"/dist/*.whl)"
|
|
88
|
+
uv pip install --python "$tmp/venv/bin/python" --no-deps \
|
|
89
|
+
"simcord[screenshot] @ file://$wheel"
|
|
90
|
+
uv pip check --python "$tmp/venv/bin/python"
|
|
91
|
+
"$tmp/venv/bin/python" -m playwright install --with-deps chromium
|
|
92
|
+
cp examples/bot.py examples/preview_example.py "$tmp/"
|
|
93
|
+
(
|
|
94
|
+
cd "$tmp"
|
|
95
|
+
FONTCONFIG_FILE="$tmp/fonts.conf" \
|
|
96
|
+
"$tmp/venv/bin/python" preview_example.py > "$tmp/preview-report.json"
|
|
97
|
+
)
|
|
98
|
+
"$tmp/venv/bin/python" - "$tmp/preview-report.json" <<'PY'
|
|
99
|
+
import json
|
|
100
|
+
import sys
|
|
101
|
+
|
|
102
|
+
report = json.loads(open(sys.argv[1], encoding="utf-8").read())
|
|
103
|
+
capture = report["capture"]
|
|
104
|
+
assert capture["complete"], capture["diagnostics"]
|
|
105
|
+
loaded = {face["family"] for face in capture["profile"]["fontResolution"]["loaded"]}
|
|
106
|
+
required = {
|
|
107
|
+
"Noto Sans",
|
|
108
|
+
"Noto Sans Mono",
|
|
109
|
+
"Noto Color Emoji",
|
|
110
|
+
"Noto Sans Arabic",
|
|
111
|
+
"Noto Sans Hebrew",
|
|
112
|
+
"Noto Sans Devanagari",
|
|
113
|
+
"Noto Sans SC",
|
|
114
|
+
}
|
|
115
|
+
assert required <= loaded, f"wheel missed packaged font faces: {sorted(required - loaded)}"
|
|
116
|
+
PY
|
|
117
|
+
|
|
118
|
+
benchmark:
|
|
119
|
+
runs-on: ubuntu-latest
|
|
120
|
+
steps:
|
|
121
|
+
- uses: actions/checkout@v7
|
|
122
|
+
- uses: astral-sh/setup-uv@v7
|
|
123
|
+
# The perf guards (absolute budget + same-run scaling ratio) fail the build
|
|
124
|
+
# on a catastrophic regression; the JSON is uploaded as a non-gating trend.
|
|
125
|
+
- run: uv sync --locked --extra bench
|
|
126
|
+
- run: uv run pytest benchmarks --benchmark-json=benchmark.json
|
|
127
|
+
- uses: actions/upload-artifact@v7
|
|
128
|
+
if: always()
|
|
129
|
+
with:
|
|
130
|
+
name: benchmark-results
|
|
131
|
+
path: benchmark.json
|