netizen-cli 0.12.0__tar.gz → 0.12.1__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.
- {netizen_cli-0.12.0/netizen_cli.egg-info → netizen_cli-0.12.1}/PKG-INFO +1 -1
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/__init__.py +1 -1
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/channel_app.py +9 -5
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/management/service.py +38 -24
- {netizen_cli-0.12.0 → netizen_cli-0.12.1/netizen_cli.egg-info}/PKG-INFO +1 -1
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/pyproject.toml +1 -1
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_channel_app.py +27 -7
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/MANIFEST.in +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/README.md +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/_build.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/config.example.yaml +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/__main__.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/account_rate_limits.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/admin/__init__.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/admin/auth.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/admin/credentials.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/admin/errors.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/admin/feishu.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/admin/login.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/admin/port_config.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/admin/presentation.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/admin/queries.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/admin/static/admin.css +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/admin/static/admin.js +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/admin/static/chat-picker.css +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/admin/static/chat-picker.js +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/admin/static/identity.js +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/admin/static/index.html +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/admin/static/login.html +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/admin/static/login.js +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/admin/static/session-access.js +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/admin/transport.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/admin/users.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/admin/web.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/bindings.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/builtin_skills.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/cards/__init__.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/cards/callbacks.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/cards/chat_target.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/cards/controls.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/cards/defaults.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/cards/fork.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/cards/model_info.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/cards/pagination.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/cards/questions.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/cards/reply.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/cards/scheduled.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/cards/session_ids.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/cards/status.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/cards/usage.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/channel/__init__.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/channel/completion_mentions.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/channel/input_preparation.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/channel/messages.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/channel/ports.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/channel/question_inputs.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/channel/reactions.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/channel/reply_presenter.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/channel/topics.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/chat_avatars.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/chat_targets.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/cli.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/cli_data.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/cli_packages.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/cli_services.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/cli_setup.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/cli_update.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/cli_update_restore.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/cli_update_worker.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/codex_runtime.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/completion_mention.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/database_migrations.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/defaults/__init__.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/defaults/models.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/defaults/service.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/defaults/store.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/deployment/__init__.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/deployment/restart_worker.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/deployment/update_executor.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/deployment/update_protocol.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/domain.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/error_messages.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/experience.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/feishu_app_onboarding.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/feishu_app_permissions.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/feishu_links.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/git_status.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/image_inputs.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/instance.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/lark_app.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/main.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/management/__init__.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/management/blocking_io.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/management/chat_directory.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/management/chat_labels.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/management/coordination.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/management/updates.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/markdown_images.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/mcp_transport.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/message_content.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/message_history.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/message_preparation.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/message_projection.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/migrations/__init__.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/migrations/schema.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/migrations/v14.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/model_settings.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/package_resources.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/pagination.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/partial_answers.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/projects.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/prompt_projection.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/quoted_context.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/result_images.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/runtime/__init__.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/runtime/contracts.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/runtime/name_writes.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/runtime/thread_naming.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/schedules/__init__.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/schedules/mcp.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/schedules/models.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/schedules/scheduler.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/schedules/service.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/schedules/store.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/sdk_gap_adapter.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/service_launcher.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/session_settings.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/sessions/__init__.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/sessions/errors.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/sessions/mcp.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/sessions/policy.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/sessions/presentation.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/sessions/schema.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/sessions/service.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/settings.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/skill_references.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/task_text.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/terminal_cleanup.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/turn_activity.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/turn_files.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/turn_patch_children.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/turn_plan_observer.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli/user_questions.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli.egg-info/SOURCES.txt +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli.egg-info/dependency_links.txt +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli.egg-info/entry_points.txt +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli.egg-info/requires.txt +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/netizen_cli.egg-info/top_level.txt +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/setup.cfg +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/skills/netizen-lark/SKILL.md +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/skills/netizen-user-guide/SKILL.md +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/skills/netizen-user-guide/references/admin.md +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/skills/netizen-user-guide/references/commands.md +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/skills/netizen-user-guide/references/concepts.md +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/skills/netizen-user-guide/references/faq.md +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/skills/netizen-user-guide/references/feedback-and-files.md +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/skills/netizen-user-guide/references/fork-side-goal.md +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/skills/netizen-user-guide/references/messages.md +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/skills/netizen-user-guide/references/native-capabilities.md +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/skills/netizen-user-guide/references/scheduled-tasks.md +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/skills/netizen-user-guide/references/session-collaboration.md +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/skills/netizen-user-guide/references/sessions.md +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/skills/netizen-user-guide/references/status-and-control.md +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/skills/netizen-user-guide/references/user-guide.md +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_account_rate_limits.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_admin_update_executor_probe.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_binding_scheduled_channel.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_bindings.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_cards.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_channel_fixtures.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_channel_input_preparation.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_chat_avatars.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_chat_target_cards.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_check_sdk.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_cli.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_cli_data.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_cli_distribution.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_cli_integration.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_cli_packages.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_cli_packaging.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_cli_services.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_cli_setup.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_cli_update.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_codex_runtime.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_codex_sdk_capabilities.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_codex_sdk_upgrade_0161.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_completion_mention_cards.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_completion_mentions.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_completion_topic_delivery.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_cron_chat_targets.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_database_migrations.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_defaults_cards.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_defaults_channel.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_defaults_runtime.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_deployment.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_documentation_links.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_domain_experience.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_error_messages.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_feishu_app_onboarding.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_feishu_app_permissions.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_file_pagination.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_fork_cards.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_git_status.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_image_inputs.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_lark_app.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_lark_sdk_contract.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_main.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_markdown_images.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_message_content.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_message_history.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_message_material_inputs.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_message_preparation.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_migration_schema_validation.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_model_info_cards.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_model_settings.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_name_writes.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_pagination.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_partial_answer_delivery.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_partial_answers.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_persistent_fork_bindings.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_persistent_fork_channel.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_persistent_fork_runtime.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_probe_child_files.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_probe_feishu_completion_mention.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_probe_feishu_partial_answers.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_probe_feishu_turn_file_card.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_probe_persistent_fork.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_probe_python_sdk.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_probe_scheduled_tasks.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_probe_sdk_completion_race.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_probe_skill_execution.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_probe_thread_naming.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_project_delete_channel.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_project_delete_runtime.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_project_deletion_storage.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_prompt_projection.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_question_cards.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_question_channel.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_question_target_parity.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_quoted_context.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_release_script.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_repository_hygiene.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_result_images.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_resume_channel.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_retired_deployment.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_runtime_resume_activation.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_runtime_thread_naming.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_schedule_card_retry.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_schedule_cards.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_schedule_mcp.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_schedule_run_now.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_schedule_scope_matrix.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_schedule_service.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_scheduled_channel.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_scheduled_runtime.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_scheduler.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_scheduler_presenter.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_schedules_storage.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_sdk_gap_adapter.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_service_launcher.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_session_collaboration_app.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_session_defaults.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_session_external_runtime.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_session_id_cards.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_session_policy.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_session_settings.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_session_tools.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_settings_projects.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_status_cards.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_status_commands.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_task_text.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_terminal_cleanup.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_thread_naming.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_turn_activity.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_turn_files.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_turn_patch_children.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_turn_patch_statistics.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_turn_plan_observer.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_update_executor.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_usage_card.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_usage_control.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_user_guide_skill.py +0 -0
- {netizen_cli-0.12.0 → netizen_cli-0.12.1}/tests/test_user_questions.py +0 -0
|
@@ -5365,11 +5365,15 @@ class ChannelApplication:
|
|
|
5365
5365
|
await self._reply_no_current_binding(message, intent.scope)
|
|
5366
5366
|
return
|
|
5367
5367
|
state = await self._binding_state(binding)
|
|
5368
|
-
|
|
5369
|
-
|
|
5370
|
-
|
|
5371
|
-
|
|
5372
|
-
|
|
5368
|
+
try:
|
|
5369
|
+
metadata = await self._management.binding_metadata_exact(
|
|
5370
|
+
binding.id,
|
|
5371
|
+
deadline=asyncio.get_running_loop().time() + _SESSION_QUERY_TIMEOUT_SECONDS,
|
|
5372
|
+
)
|
|
5373
|
+
except Exception:
|
|
5374
|
+
logger.warning("Status metadata unavailable", exc_info=True)
|
|
5375
|
+
metadata = None
|
|
5376
|
+
thread_metadata_lines = _thread_metadata_status_lines(binding, metadata)
|
|
5373
5377
|
try:
|
|
5374
5378
|
project = self._projects.resolve_for_binding(binding.project_alias)
|
|
5375
5379
|
except ProjectError:
|
|
@@ -318,7 +318,7 @@ def _session_inventory_state(
|
|
|
318
318
|
return SessionInventoryState(native.state.value)
|
|
319
319
|
|
|
320
320
|
|
|
321
|
-
def
|
|
321
|
+
def _native_updated_at(native: NativeThreadView | None) -> int | None:
|
|
322
322
|
value = native.metadata.updated_at if native is not None and native.metadata is not None else None
|
|
323
323
|
return value if type(value) is int and value >= 0 else None
|
|
324
324
|
|
|
@@ -1335,15 +1335,25 @@ class InstanceManagementService:
|
|
|
1335
1335
|
if any(record.binding.native_thread_id is not None for record in records)
|
|
1336
1336
|
else {}
|
|
1337
1337
|
)
|
|
1338
|
+
records = tuple(
|
|
1339
|
+
record for record in records
|
|
1340
|
+
if _session_inventory_state(
|
|
1341
|
+
record.binding, (native or {}).get(record.binding.native_thread_id),
|
|
1342
|
+
) in states
|
|
1343
|
+
)
|
|
1344
|
+
# The native catalog can omit readable Threads with an empty preview.
|
|
1345
|
+
# Recover their summaries before selecting a page, so its timestamps,
|
|
1346
|
+
# ordering and cursor all use the same metadata. Keep time for rendering.
|
|
1347
|
+
views = await self._session_native_views(
|
|
1348
|
+
tuple(record.binding for record in records), native=native,
|
|
1349
|
+
deadline=self._enrichment_deadline(deadline, _NATIVE_INDEX_READ_SECONDS),
|
|
1350
|
+
)
|
|
1338
1351
|
descending = query.sort_direction == "desc"
|
|
1339
1352
|
|
|
1340
1353
|
def candidates():
|
|
1341
1354
|
for record in records:
|
|
1342
1355
|
binding = record.binding
|
|
1343
|
-
|
|
1344
|
-
if _session_inventory_state(binding, view) not in states:
|
|
1345
|
-
continue
|
|
1346
|
-
updated = _indexed_updated_at(view)
|
|
1356
|
+
updated = _native_updated_at(views.get(binding.native_thread_id))
|
|
1347
1357
|
if cursor is not None:
|
|
1348
1358
|
if cursor.updated_at is None:
|
|
1349
1359
|
if updated is not None:
|
|
@@ -1378,7 +1388,7 @@ class InstanceManagementService:
|
|
|
1378
1388
|
self._query_seconds(deadline)
|
|
1379
1389
|
return await self._session_page(
|
|
1380
1390
|
tuple(record for record, _updated in selected[:limit]), native=native,
|
|
1381
|
-
next_cursor=next_cursor, deadline=deadline,
|
|
1391
|
+
next_cursor=next_cursor, deadline=deadline, views=views,
|
|
1382
1392
|
)
|
|
1383
1393
|
|
|
1384
1394
|
async def query_scope_sessions(
|
|
@@ -2195,21 +2205,12 @@ class InstanceManagementService:
|
|
|
2195
2205
|
native: dict[str, NativeThreadView] | None,
|
|
2196
2206
|
next_cursor: BindingCursor | SessionUpdatedCursor | None,
|
|
2197
2207
|
deadline: float,
|
|
2198
|
-
|
|
2208
|
+
views: dict[str, NativeThreadView] | None = None,
|
|
2199
2209
|
) -> SessionInventoryPage:
|
|
2200
|
-
views
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
# Summary recovery is still page-only. Its timestamp cannot join an
|
|
2205
|
-
# ordering already chosen from the index: show an unknown time rather
|
|
2206
|
-
# than make recovered rows appear incorrectly sorted.
|
|
2207
|
-
views = {
|
|
2208
|
-
thread_id: replace(view, metadata=replace(
|
|
2209
|
-
view.metadata, updated_at=_indexed_updated_at((native or {}).get(thread_id)),
|
|
2210
|
-
)) if view.metadata is not None else view
|
|
2211
|
-
for thread_id, view in views.items()
|
|
2212
|
-
}
|
|
2210
|
+
if views is None:
|
|
2211
|
+
views = await self._session_native_views(
|
|
2212
|
+
tuple(record.binding for record in records), native=native, deadline=deadline,
|
|
2213
|
+
)
|
|
2213
2214
|
labels = await self.resolve_chat_labels(
|
|
2214
2215
|
(record.scope.chat_id for record in records), deadline=deadline,
|
|
2215
2216
|
)
|
|
@@ -2239,9 +2240,9 @@ class InstanceManagementService:
|
|
|
2239
2240
|
)
|
|
2240
2241
|
for binding in bindings if binding.native_thread_id is not None
|
|
2241
2242
|
}
|
|
2242
|
-
#
|
|
2243
|
-
#
|
|
2244
|
-
#
|
|
2243
|
+
# Read missing summaries for this page, or for candidates before time
|
|
2244
|
+
# ordering. An exact read cannot establish archive/existence state.
|
|
2245
|
+
# The caller's deadline covers both queuing and the actual reads.
|
|
2245
2246
|
|
|
2246
2247
|
async def hydrate(thread_id: str) -> None:
|
|
2247
2248
|
try:
|
|
@@ -2262,7 +2263,20 @@ class InstanceManagementService:
|
|
|
2262
2263
|
thread_id for thread_id, view in views.items()
|
|
2263
2264
|
if view.state is None and view.metadata is None
|
|
2264
2265
|
)
|
|
2265
|
-
|
|
2266
|
+
pending = iter(unresolved)
|
|
2267
|
+
|
|
2268
|
+
async def hydrate_pending() -> None:
|
|
2269
|
+
for thread_id in pending:
|
|
2270
|
+
if self._summary_reads_closed or asyncio.get_running_loop().time() >= deadline:
|
|
2271
|
+
break
|
|
2272
|
+
await hydrate(thread_id)
|
|
2273
|
+
|
|
2274
|
+
# A large candidate set must not create one waiting Task per Thread.
|
|
2275
|
+
# The shared limiter still counts SDK requests after caller timeouts.
|
|
2276
|
+
await asyncio.gather(*(
|
|
2277
|
+
hydrate_pending()
|
|
2278
|
+
for _ in range(min(len(unresolved), _SESSION_SUMMARY_READ_CONCURRENCY))
|
|
2279
|
+
))
|
|
2266
2280
|
return views
|
|
2267
2281
|
|
|
2268
2282
|
def _summary_read_finished(self, task: asyncio.Task[NativeThreadMetadata]) -> None:
|
|
@@ -5087,7 +5087,7 @@ class ChannelApplicationTest(unittest.IsolatedAsyncioTestCase):
|
|
|
5087
5087
|
scope = FeishuScope("cli_test", "oc_direct", ScopeKind.DIRECT)
|
|
5088
5088
|
binding = self.store.active_binding(scope.key)
|
|
5089
5089
|
self.store.assign_native_thread_id(binding.id, "native-one")
|
|
5090
|
-
self.runtime.
|
|
5090
|
+
self.runtime.thread_summary_values["native-one"] = NativeThreadMetadata(
|
|
5091
5091
|
thread_id="native-one",
|
|
5092
5092
|
name=" Release\nreview ",
|
|
5093
5093
|
preview="Check\tcurrent changes",
|
|
@@ -5101,7 +5101,27 @@ class ChannelApplicationTest(unittest.IsolatedAsyncioTestCase):
|
|
|
5101
5101
|
self.assertIn("名称:Release review", lines)
|
|
5102
5102
|
self.assertIn("会话预览:Check current changes", lines)
|
|
5103
5103
|
self.assertIn("上下文窗口:暂不可用(下次可观测 Turn 完成后更新)", lines)
|
|
5104
|
-
self.assertEqual(self.runtime.
|
|
5104
|
+
self.assertEqual(self.runtime.thread_summary_calls, ["native-one"])
|
|
5105
|
+
self.assertEqual(self.runtime.thread_metadata_calls, [])
|
|
5106
|
+
|
|
5107
|
+
async def test_status_reads_named_external_only_thread_missing_from_catalog(self) -> None:
|
|
5108
|
+
await self.fixture.new()
|
|
5109
|
+
scope = FeishuScope("cli_test", "oc_direct", ScopeKind.DIRECT)
|
|
5110
|
+
binding = self.store.active_binding(scope.key)
|
|
5111
|
+
self.store.assign_native_thread_id(binding.id, "external-only")
|
|
5112
|
+
self.runtime.thread_summary_values["external-only"] = NativeThreadMetadata(
|
|
5113
|
+
"external-only", "协作会话", "", updated_at=1_792_074_779,
|
|
5114
|
+
)
|
|
5115
|
+
|
|
5116
|
+
await self.app.handle_message(FakeMessage("/status", message_id="om_status"))
|
|
5117
|
+
|
|
5118
|
+
lines = _status_text(self.channel.replies[-1][1]).splitlines()
|
|
5119
|
+
self.assertIn("名称:协作会话", lines)
|
|
5120
|
+
self.assertIn("会话预览:暂无", lines)
|
|
5121
|
+
self.assertEqual(self.runtime.thread_summary_calls, ["external-only"])
|
|
5122
|
+
self.assertEqual(self.runtime.thread_metadata_calls, [])
|
|
5123
|
+
self.assertEqual(self.runtime.submit_calls, [])
|
|
5124
|
+
self.assertEqual(self.store.active_binding(scope.key).id, binding.id)
|
|
5105
5125
|
|
|
5106
5126
|
async def test_status_hides_source_trailer_from_native_preview(self) -> None:
|
|
5107
5127
|
await self.fixture.new()
|
|
@@ -5113,7 +5133,7 @@ class ChannelApplicationTest(unittest.IsolatedAsyncioTestCase):
|
|
|
5113
5133
|
'{"kind": "feishu_current_message", "sender":'
|
|
5114
5134
|
)
|
|
5115
5135
|
metadata = NativeThreadMetadata("native-one", "打招呼", preview)
|
|
5116
|
-
self.runtime.
|
|
5136
|
+
self.runtime.thread_summary_values["native-one"] = metadata
|
|
5117
5137
|
|
|
5118
5138
|
await self.app.handle_message(
|
|
5119
5139
|
FakeMessage("/status", message_id="om_status")
|
|
@@ -5136,7 +5156,7 @@ class ChannelApplicationTest(unittest.IsolatedAsyncioTestCase):
|
|
|
5136
5156
|
'[点击](https://example.test) `echo` <at id="ou_user">用户</at> '
|
|
5137
5157
|
'<feishu_current_message_context> 示例'
|
|
5138
5158
|
)
|
|
5139
|
-
self.runtime.
|
|
5159
|
+
self.runtime.thread_summary_values["native-one"] = NativeThreadMetadata(
|
|
5140
5160
|
"native-one", name, preview,
|
|
5141
5161
|
)
|
|
5142
5162
|
|
|
@@ -5164,7 +5184,7 @@ class ChannelApplicationTest(unittest.IsolatedAsyncioTestCase):
|
|
|
5164
5184
|
scope = FeishuScope("cli_test", "oc_direct", ScopeKind.DIRECT)
|
|
5165
5185
|
binding = self.store.active_binding(scope.key)
|
|
5166
5186
|
self.store.assign_native_thread_id(binding.id, "native-one")
|
|
5167
|
-
self.runtime.
|
|
5187
|
+
self.runtime.thread_summary_values["native-one"] = NativeThreadMetadata(
|
|
5168
5188
|
thread_id="native-one",
|
|
5169
5189
|
name=None,
|
|
5170
5190
|
preview="First task",
|
|
@@ -5255,7 +5275,7 @@ class ChannelApplicationTest(unittest.IsolatedAsyncioTestCase):
|
|
|
5255
5275
|
scope = FeishuScope("cli_test", "oc_direct", ScopeKind.DIRECT)
|
|
5256
5276
|
binding = self.store.active_binding(scope.key)
|
|
5257
5277
|
self.store.assign_native_thread_id(binding.id, "native-one")
|
|
5258
|
-
self.runtime.
|
|
5278
|
+
self.runtime.thread_summary_values["native-one"] = NativeThreadMetadata(
|
|
5259
5279
|
thread_id="native-one",
|
|
5260
5280
|
name=None,
|
|
5261
5281
|
preview="First task",
|
|
@@ -5278,7 +5298,7 @@ class ChannelApplicationTest(unittest.IsolatedAsyncioTestCase):
|
|
|
5278
5298
|
self.store.assign_native_thread_id(binding.id, "native-one")
|
|
5279
5299
|
self.runtime.thread_metadata_error = RuntimeError("history unavailable")
|
|
5280
5300
|
|
|
5281
|
-
with
|
|
5301
|
+
with patch.object(self.runtime, "thread_summary", side_effect=RuntimeError("read unavailable")):
|
|
5282
5302
|
await self.app.handle_message(
|
|
5283
5303
|
FakeMessage("/status", message_id="om_status")
|
|
5284
5304
|
)
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|