affinity-sdk 2.0.5__tar.gz → 2.0.6__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.
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/CHANGELOG.md +15 -5
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/PKG-INFO +1 -1
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/field_resolver.py +28 -26
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.claude-plugin/plugin.json +1 -1
- affinity_sdk-2.0.6/mcp/.mcp-bash/VERSION +1 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/tools_policy.sh +99 -5
- affinity_sdk-2.0.6/mcp/.mcp-bash/vendor.json +1 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.registry/commands.generated.json +2 -2
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/CHANGELOG.md +13 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/COMPATIBILITY +2 -0
- affinity_sdk-2.0.6/mcp/VERSION +1 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/mcp-bash.lock +2 -2
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/server.d/server.meta.json +1 -1
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/plugins/xaffinity-cli/.claude-plugin/plugin.json +1 -1
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/plugins/xaffinity-cli/hooks/pre-xaffinity.sh +2 -2
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/plugins/xaffinity-cli/hooks/session-setup.sh +1 -1
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/plugins/xaffinity-cli/skills/xaffinity-cli-usage/SKILL.md +2 -2
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/plugins/xaffinity-cli/skills/xaffinity-cli-usage/references/setup.md +1 -1
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/pyproject.toml +1 -1
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cowork/cassettes/company-lists-status.cassette.json +87 -87
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cowork/cassettes/hook-blocks-without-key.cassette.json +64 -64
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cowork/cassettes/no-key-skill-path.cassette.json +101 -108
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cowork/cassettes/status-history.cassette.json +117 -124
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_field_resolver.py +35 -0
- affinity_sdk-2.0.5/mcp/.mcp-bash/VERSION +0 -1
- affinity_sdk-2.0.5/mcp/.mcp-bash/vendor.json +0 -1
- affinity_sdk-2.0.5/mcp/VERSION +0 -1
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/.claude-plugin/marketplace.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/.cursor/rules/test-data-privacy.mdc +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/.editorconfig +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/.env.example +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/.gitattributes +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/.github/CODEOWNERS +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/.github/PULL_REQUEST_TEMPLATE/cli_command.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/.github/PULL_REQUEST_TEMPLATE/release.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/.github/dependabot.yml +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/.github/labels.yml +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/.github/mcp-release-install-footer.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/.github/pull_request_template.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/.github/release-install-footer.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/.github/workflows/ci.yml +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/.github/workflows/cowork-replay.yml +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/.github/workflows/docs.yml +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/.github/workflows/labels.yml +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/.github/workflows/linkcheck.yml +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/.github/workflows/openapi-validation.yml +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/.github/workflows/plugin-build.yml +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/.github/workflows/plugin-release.yml +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/.github/workflows/release-detect.yml +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/.github/workflows/release.yml +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/.github/workflows/version-check.yml +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/.gitignore +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/.pre-commit-config.yaml +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/AGENTS.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/CODE_OF_CONDUCT.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/CONTRIBUTING.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/LICENSE +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/README.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/SECURITY.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/VERSIONING.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/__init__.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/_filtering/__init__.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/_filtering/dates.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/_filtering/filter_text.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/_filtering/pushdown.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/_filtering/search.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/_filtering/where.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/_internal/__init__.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/_internal/keyfile.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/api_versions.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/__init__.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/__main__.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/_update_worker.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/async_utils.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/click_compat.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/__init__.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/_entity_field.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/_entity_files_dump.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/_entity_files_read.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/_entity_files_upload.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/_list_entry_fields.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/_org_reads.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/_search_common.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/_v1_parsing.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/company_cmds.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/completion_cmd.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/config_cmds.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/discovery_cmds.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/entry_cmds.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/field_cmds.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/file_cmds.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/file_url_cmd.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/interaction_cmds.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/list_cmds.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/note_cmds.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/opportunity_cmds.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/org_cmds.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/org_read_cmds.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/person_cmds.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/query_cmd.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/relationship_strength_cmds.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/reminder_cmds.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/resolve_url_cmd.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/session_cmds.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/task_cmds.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/transcript_cmds.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/version_cmd.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/webhook_cmds.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/commands/whoami_cmd.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/config.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/confirm.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/constants.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/context.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/csv_utils.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/date_utils.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/decorators.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/entity_search.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/errors.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/field_utils.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/formatters.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/help_json.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/interaction_utils.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/list_search.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/logging.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/main.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/mcp_limits.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/options.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/paths.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/progress.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/query/__init__.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/query/aggregates.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/query/cursor.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/query/dates.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/query/exceptions.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/query/executor.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/query/filter_text.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/query/filters.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/query/models.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/query/output.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/query/parser.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/query/planner.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/query/progress.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/query/pushdown.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/query/schema.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/render.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/resolve.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/resolvers.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/results.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/runner.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/serialization.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/session_cache.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/types.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/cli/update_check.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/client.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/clients/__init__.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/clients/http.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/clients/pipeline.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/compare.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/criteria.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/downloads.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/exceptions.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/field_resolve_utils.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/filters.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/hooks.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/inbound_webhooks.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/models/__init__.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/models/discovery.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/models/entities.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/models/interactions_v2.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/models/org.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/models/pagination.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/models/rate_limit_snapshot.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/models/relationships_v2.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/models/search.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/models/secondary.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/models/transcripts.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/models/types.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/policies.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/progress.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/py.typed +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/services/__init__.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/services/_batch_interactions.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/services/_discovery.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/services/_dropdown_options.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/services/_field_listing.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/services/_field_updates.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/services/_note_html.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/services/_org_reads.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/services/_search.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/services/_single_field.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/services/_v2_filters.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/services/companies.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/services/lists.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/services/opportunities.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/services/org.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/services/persons.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/services/rate_limits.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/services/reminders.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/services/search.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/services/tasks.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/services/transcripts.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/services/v1_only.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/services/webhooks.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/affinity/types.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/codecov.yml +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/cli-development-guide.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/ai-integrations/index.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/changelog.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/cli/commands.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/cli/index.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/cli/scripting.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/cli-reference.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/examples.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/getting-started.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/glossary.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/guides/affinity-official-mcp-comparison.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/guides/api-versions-and-routing.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/guides/api-versions.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/guides/authentication.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/guides/claude-code-plugins.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/guides/configuration.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/guides/csv-export.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/guides/datetime-handling.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/guides/debugging-hooks.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/guides/errors-and-retries.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/guides/field-types-and-values.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/guides/field-values.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/guides/filtering.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/guides/ids-and-types.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/guides/migrating-to-2.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/guides/models.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/guides/opportunity-associations.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/guides/pagination.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/guides/performance.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/guides/query-command.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/guides/rate-limits.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/guides/sync-vs-async.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/guides/webhooks.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/index.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/mcp/index.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/reference/api-coverage.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/reference/client.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/reference/exceptions.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/reference/filters.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/reference/models.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/reference/query-language.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/reference/services/companies.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/reference/services/lists.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/reference/services/opportunities.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/reference/services/persons.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/reference/services/reminders.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/reference/services/tasks.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/reference/services/teams-users.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/reference/services/transcripts.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/reference/services/v1/auth.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/reference/services/v1/field-values.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/reference/services/v1/fields.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/reference/services/v1/files.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/reference/services/v1/interactions.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/reference/services/v1/notes.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/reference/services/v1/relationships.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/reference/services/webhooks.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/reference/types.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/docs/public/troubleshooting.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/examples/advanced_usage.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/examples/async_lifecycle.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/examples/basic_usage.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/examples/filter_builder.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/examples/hooks_debugging.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/examples/list_management.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/examples/resolve_helpers.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/examples/task_polling.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.claude-plugin/.gitignore +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.claude-plugin/skills/affinity-mcp-workflows/SKILL.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.claude-plugin/skills/pipeline-history/SKILL.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.claude-plugin/skills/query-language/SKILL.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.claude-plugin/skills/query-language/references/filter-operators.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.claude-plugin/skills/query-language/references/include-expand.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.claude-plugin/skills/query-language/references/output-formats.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.claude-plugin/skills/query-language/references/quantifiers.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.claude-plugin/xaffinity-mcp.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.gitignore +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/bin/mcp-bash +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/handlers/completion.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/handlers/lifecycle.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/handlers/logging.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/handlers/ping.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/handlers/prompts.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/handlers/resources.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/handlers/roots.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/handlers/tools.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/auth.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/capabilities.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/cli/common.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/cli/health.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/completion.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/core.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/elicitation.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/file_read.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/handler_helpers.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/hash.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/ids.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/io.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/json.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/lock.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/logging.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/meta_env.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/paginate.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/path.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/policy.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/progress-passthrough.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/progress.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/prompts.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/registry.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/require.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/resource_content.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/resource_match.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/resource_providers.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/resources.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/roots.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/rpc.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/runtime.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/spec.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/timeout.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/tools.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/ui-templates.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/ui.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/uri.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/lib/validate.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/providers/echo.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/providers/file.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/providers/git.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/providers/https.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/providers/ui.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/sdk/tool-error.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/sdk/tool-sdk.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.mcp-bash/sdk/ui-sdk.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.registry/mcp-commands.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.registry/prompts.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.registry/resource-templates.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.registry/resources.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/.registry/ui-resources.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/Makefile +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/README.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/completions/entity-name.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/completions/list-name.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/completions/status-value.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/docs/DEBUGGING.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/icon.svg +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/lib/cache.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/lib/cli-detect.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/lib/cli-gateway.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/lib/common.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/lib/entity-types.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/lib/field-resolution.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/mcp-publisher.lock +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/mcpb.conf +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/prompts/change-status/change-status.completion.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/prompts/change-status/change-status.meta.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/prompts/change-status/change-status.txt +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/prompts/interaction-brief/interaction-brief.meta.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/prompts/interaction-brief/interaction-brief.txt +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/prompts/log-call/log-call.meta.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/prompts/log-call/log-call.txt +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/prompts/log-interaction-and-update-workflow/log-interaction-and-update-workflow.meta.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/prompts/log-interaction-and-update-workflow/log-interaction-and-update-workflow.txt +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/prompts/log-message/log-message.meta.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/prompts/log-message/log-message.txt +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/prompts/pipeline-review/pipeline-review.completion.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/prompts/pipeline-review/pipeline-review.meta.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/prompts/pipeline-review/pipeline-review.txt +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/prompts/prepare-briefing/prepare-briefing.meta.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/prompts/prepare-briefing/prepare-briefing.txt +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/prompts/warm-intro/warm-intro.meta.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/prompts/warm-intro/warm-intro.txt +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/providers/xaffinity.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/resources/data-model/data-model.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/resources/data-model/data-model.meta.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/resources/field-catalogs/field-catalogs.meta.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/resources/field-catalogs/field-catalogs.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/resources/interaction-enums/interaction-enums.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/resources/interaction-enums/interaction-enums.meta.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/resources/me/me.meta.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/resources/me/me.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/resources/me-person-id/me-person-id.meta.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/resources/me-person-id/me-person-id.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/resources/query-guide/query-guide.meta.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/resources/query-guide/query-guide.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/resources/saved-views/saved-views.meta.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/resources/saved-views/saved-views.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/resources/workflow-config/workflow-config.meta.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/resources/workflow-config/workflow-config.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/resources/workflows-guide/workflows-guide.meta.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/resources/workflows-guide/workflows-guide.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/resources/xaffinity-field-catalogs.completion.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/resources/xaffinity-saved-views.completion.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/resources/xaffinity-workflow-config.completion.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/server.d/env.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/server.d/health-checks.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/server.d/policy.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/server.d/requirements.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/server.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/test/README.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/test/run.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/test/test_env_update_check.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/test-progress.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/tools/discover-commands/tool.meta.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/tools/discover-commands/tool.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/tools/execute-read-command/tool.meta.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/tools/execute-read-command/tool.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/tools/execute-write-command/tool.meta.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/tools/execute-write-command/tool.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/tools/get-entity-dossier/tool.meta.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/tools/get-entity-dossier/tool.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/tools/get-file-url/tool.meta.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/tools/get-file-url/tool.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/tools/query/tool.meta.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/tools/query/tool.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/tools/read-xaffinity-resource/tool.meta.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/tools/read-xaffinity-resource/tool.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/user-config.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/xaffinity-mcp-env.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mcp/xaffinity-mcp.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/mkdocs.yml +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/plugins/affinity-sdk/.claude-plugin/plugin.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/plugins/affinity-sdk/.claude-plugin/skills/affinity-python-sdk/SKILL.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/plugins/affinity-sdk/.claude-plugin/skills/affinity-python-sdk/references/services.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/plugins/xaffinity-cli/hooks/guard-env-read.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/plugins/xaffinity-cli/hooks/hooks.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/plugins/xaffinity-cli/skills/xaffinity-cli-usage/references/files-and-writes.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/plugins/xaffinity-cli/skills/xaffinity-cli-usage/references/filtering.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/plugins/xaffinity-cli/skills/xaffinity-cli-usage/references/history-and-activity.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/plugins/xaffinity-cli/skills/xaffinity-cli-usage/references/interactions.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/plugins/xaffinity-cli/skills/xaffinity-cli-usage/references/query-guide.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cli/query/test_cursor.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cli/test_company_create_dedup.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cli/test_company_ls_filter_rejection.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cli/test_formatters.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cli/test_output_formats_integration.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cli/test_person_create_dedup.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cli/test_person_ls_filter_rejection.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cli/test_query_filter_rejection.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cli/test_query_list_entry_relationships.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cli/test_query_list_export_parity.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cli/test_query_output_flattening.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cli/test_query_output_truncation.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cli/test_query_unreplied.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/conftest.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cowork/.cowork-redact.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cowork/README.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cowork/fixtures/workdir-key/README.txt +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cowork/fixtures/workdir-key/xaffinity-test-key +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cowork/fixtures/workdir-nokey/README.txt +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cowork/image/Dockerfile +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cowork/image/fakeaff/build_fixtures.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cowork/image/fakeaff/fixtures.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cowork/image/fakeaff/server.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cowork/image/xaffinity-wrapper.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cowork/privacy-allow.txt +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cowork/record.sh +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cowork/scenarios/company-lists-status.yaml +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cowork/scenarios/hook-blocks-without-key.yaml +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cowork/scenarios/no-key-skill-path.yaml +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cowork/scenarios/status-history.yaml +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cowork/sessions/no-key.yaml +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/cowork/sessions/with-key.yaml +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/field_write_mocks.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/fixtures/openapi/mini_openapi.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/fixtures/webhooks/field_value_updated.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/fixtures/webhooks/list_entry_created.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/fixtures/webhooks/organization_created.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/fixtures/webhooks/organization_merged.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/fixtures/webhooks/person_created.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/fixtures/webhooks/unknown_event.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/integration/README.md +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/integration/conftest.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/integration/setup_query_parity_data.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/integration/test_cli_writes.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/integration/test_query_parity_integration.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/integration/test_sdk_reads.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/integration/test_sdk_writes.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/integration/test_sdk_writes_runner.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/mcp/__init__.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/mcp/test_query_cursor.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/skill-evals/xaffinity-cli-usage-evals/evals.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/spec_guard.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_affinity_client_wrapper_additional_coverage.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_api_coverage.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_api_key_file_formats.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_api_key_resolution.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_api_version.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_api_version_per_operation.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_async_file_download_streaming.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_batch_get.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_api_version.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_column_limiting.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_command_context.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_commands_must_fix.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_company_cmds_coverage.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_company_get.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_config_cmds.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_context_coverage.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_csv_export.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_date_params.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_date_utils.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_datetime_formatting.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_datetime_header_offsets.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_domain_linkification.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_dotenv_resolution.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_dropdown_field_writes.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_enriched_field_writes.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_entity_field_writes.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_entity_files_dump.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_entity_ls_server_filter.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_entry_field.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_entry_field_batch_writes.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_entry_field_multi_value_limits.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_error_hints.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_error_rendering.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_field_history.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_field_history_bulk.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_field_history_deleted_options.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_field_options_and_transcripts.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_field_utils.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_field_utils_coverage.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_field_utils_set_phase.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_field_value_humanization.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_file_url.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_files_ls.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_files_read.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_get_interaction_dates.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_help_json.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_interaction_date_chunking.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_interaction_utils.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_json_safety.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_list_cmds_coverage.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_list_expand_interactions.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_list_export_entity_scope.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_list_export_field_refresh.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_list_export_filter_safety.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_list_export_server_filter.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_list_export_truncation_meta.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_missing_coverage.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_multi_value_truncation_warnings.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_no_network_commands.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_notes_writes.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_opportunity_cmds.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_opportunity_cmds_coverage.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_org.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_page_size_validation.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_pager_logic.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_person_cmds_coverage.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_person_get.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_plugin_manifest.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_pre_xaffinity_hook.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_progress_manager.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_query_aggregates.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_query_cmd.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_query_cmd_coverage.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_query_dates.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_query_executor.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_query_expand_interactions.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_query_filters.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_query_integration.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_query_must_fix.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_query_parser.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_query_planner.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_query_review_fixes.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_query_safety.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_query_schema.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_query_server_filter.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_rate_limit_rendering.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_rate_limit_throttle.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_reminders.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_render_coverage.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_resolve_coverage.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_resolve_url_parsing.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_result_summary.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_safe_field_writes.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_search.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_serialization.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_session_cache.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_session_setup_hook.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_set_phase_atomicity.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_types.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_unreplied.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_update_check.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_v1_only_cmds.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_v1_parsing.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_webhooks.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_cli_write_ops.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_client.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_companies_create_dedup.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_companies_filter_rejection.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_compare.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_duplicates_connections.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_env_helpers.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_exceptions_coverage.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_field_service_caching.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_field_types_c4.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_field_value_type.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_field_values_get_value.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_file_batch_get.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_file_download_streaming.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_file_list_batch.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_file_upload_helpers_and_validation.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_files_upload_returning_files.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_files_v2.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_filters.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_generate_mcp_command_registry.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_get_fields_filter_includes.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_get_fields_pagination.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_get_first.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_hidden_field_values.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_hooks.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_http_client_additional_coverage.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_http_client_remaining_coverage.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_inbound_webhooks.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_integration_smoke.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_interaction_date_validation.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_interactions_and_files_regressions.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_isodatetime.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_list_entries_server_filter.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_list_entry_membership_and_opportunities.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_list_term.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_lists_v2_writes.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_mcp_bundle_env_and_completions.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_mcp_cli_version_check.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_mcp_entity_dossier.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_mcp_gateway_limits.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_mcp_history_bulk_gateway.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_mcp_limits.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_mcp_must_fix.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_mcp_query_cli_error.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_mcp_read_truncation.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_mcp_resource_scripts.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_models.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_models_v2_2026_fields.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_multi_value_limits.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_new_features.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_notes_v2.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_notes_v2_writes.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_opportunities_filter_rejection.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_org_reads.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_pagination_iterators.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_persons_create_dedup.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_persons_filter_rejection.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_public_api.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_query_pushdown.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_rate_limit_v2.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_raw_pipeline_hook_events.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_readonly_factory.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_reminder_list_batch.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_reminders_v2.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_requirements_additional.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_review_fixes_sdk_cli.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_sdk_interaction_dates.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_sdk_must_fix.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_search.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_search_v2.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_service_get_parameter_combinations.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_services_batch_get_interaction_dates.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_services_companies_coverage_gaps.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_services_dropdown_options.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_services_entity_field_updates.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_services_entity_list_entries.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_services_field_value_changes.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_services_list_entries_filter_paths.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_services_lists_additional_coverage.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_services_lists_coverage_gaps.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_services_opportunities_additional_coverage.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_services_opportunities_coverage_gaps.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_services_opportunities_tasks_additional_coverage.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_services_pages_cursor_guard.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_services_persons_companies_additional_coverage.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_services_rate_limits_coverage_gaps.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_services_v1_only_async.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_services_v1_only_coverage_gaps.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_single_field_v2.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_small_modules_coverage.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_spec_guard.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_teams_users_feedback.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_transport_and_readonly_mode.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_v1_association_parsing.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_v1_only_services_additional_coverage.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_v1_only_services_more_coverage.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_v2_request_bodies.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_validate_openapi_tool.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/test_webhooks_v2.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/unit/__init__.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tests/unit/test_exceptions.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tools/__init__.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tools/api_coverage.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tools/api_coverage.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tools/api_coverage_v1_snapshot.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tools/check_cli_patterns.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tools/generate_mcp_command_registry.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tools/generate_release_notes.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tools/generate_requirements_mapping.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tools/openapi_snapshots/2024-01-01.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tools/openapi_snapshots/2026-07-15.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tools/openapi_snapshots/2026-09-17.json +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tools/search_golden.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tools/sync_mcp_bundle_env.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tools/sync_mcp_registry.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tools/sync_mcp_version.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tools/validate_mcp_registry_metadata.py +0 -0
- {affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/tools/validate_openapi_models.py +0 -0
|
@@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [2.0.6] - 2026-10-14
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- `FieldResolver.get`, `get_many` and `get_by_id` accept a plain `ListEntry` (as returned by
|
|
13
|
+
`companies.get_list_entries()` and `persons.get_list_entries()`) in their type hints. They
|
|
14
|
+
already worked on it at runtime; strict type checkers no longer need a cast.
|
|
15
|
+
|
|
8
16
|
## [2.0.5] - 2026-10-14
|
|
9
17
|
|
|
10
18
|
**Exception to semantic versioning** (as 2.0.2–2.0.4): two fixes change what a call returns or
|
|
@@ -20,12 +28,14 @@ what the CLI prints. Each is marked **Behavior change**.
|
|
|
20
28
|
options are unchanged. When a value is plain text the CLI reads the field's metadata (one call)
|
|
21
29
|
to tell a dropdown from a text field (`history-bulk --list-id` already has it). Table and CSV
|
|
22
30
|
output show the text, as before.
|
|
23
|
-
- **Behavior change. SDK: `on_error="skip"` leaves failed records out of
|
|
31
|
+
- **Behavior change (correctness fix). SDK: `on_error="skip"` leaves failed records out of
|
|
24
32
|
`AsyncReminderService.list_batch` and `AsyncFileService.list_batch`.** A failed request used
|
|
25
|
-
to leave its ids in the result with empty
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
failed.
|
|
33
|
+
to leave its ids in the result with empty lists, which looked like "no reminders" / "no files";
|
|
34
|
+
one failed reminders request (50 ids) silently hid them all. A failure on a later page left a
|
|
35
|
+
partial list that looked complete. They are now absent from the result, as with every other
|
|
36
|
+
`on_error="skip"` method: a requested id with no key failed. **If you stored or cached results
|
|
37
|
+
of these calls made with `on_error="skip"` before 2.0.5, some empty or partial lists may be
|
|
38
|
+
failures: re-fetch them.**
|
|
29
39
|
- SDK: `field_value_changes.iter_all()` reads 10,000 changes per call by default (was 100), the
|
|
30
40
|
V1 maximum: a 16,000-change history takes 3 calls instead of 161 (paging ends on an empty
|
|
31
41
|
page). Pass `page_size` for smaller
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: affinity-sdk
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.6
|
|
4
4
|
Summary: A modern, strongly-typed Python SDK for the Affinity CRM API
|
|
5
5
|
Project-URL: Homepage, https://github.com/yaniv-golan/affinity-sdk
|
|
6
6
|
Project-URL: Documentation, https://yaniv-golan.github.io/affinity-sdk/latest/
|
|
@@ -12,6 +12,7 @@ from .field_resolve_utils import (
|
|
|
12
12
|
resolve_location,
|
|
13
13
|
resolve_person,
|
|
14
14
|
)
|
|
15
|
+
from .models.entities import FieldValues
|
|
15
16
|
from .models.types import FieldValueType, ResolveMode
|
|
16
17
|
|
|
17
18
|
__all__ = ["AmbiguousFieldError", "FieldResolver"]
|
|
@@ -20,6 +21,7 @@ if TYPE_CHECKING:
|
|
|
20
21
|
from .models.entities import (
|
|
21
22
|
Company,
|
|
22
23
|
FieldMetadata,
|
|
24
|
+
ListEntry,
|
|
23
25
|
ListEntryWithEntity,
|
|
24
26
|
Opportunity,
|
|
25
27
|
Person,
|
|
@@ -27,6 +29,25 @@ if TYPE_CHECKING:
|
|
|
27
29
|
from .models.types import AnyFieldId
|
|
28
30
|
|
|
29
31
|
|
|
32
|
+
def _field_values(
|
|
33
|
+
entity: Company | Person | Opportunity | ListEntry | ListEntryWithEntity,
|
|
34
|
+
) -> FieldValues:
|
|
35
|
+
"""
|
|
36
|
+
The field values to read: the entity's own, or, for a list entry fetched without its
|
|
37
|
+
list fields, those of the embedded entity when they were requested. A ``ListEntry``
|
|
38
|
+
from ``get_list_entries()`` has no embedded entity (``entity`` is None), so it reads
|
|
39
|
+
its own fields.
|
|
40
|
+
"""
|
|
41
|
+
inner_fields = getattr(getattr(entity, "entity", None), "fields", None)
|
|
42
|
+
if (
|
|
43
|
+
not entity.fields.requested
|
|
44
|
+
and isinstance(inner_fields, FieldValues)
|
|
45
|
+
and inner_fields.requested
|
|
46
|
+
):
|
|
47
|
+
return inner_fields
|
|
48
|
+
return entity.fields
|
|
49
|
+
|
|
50
|
+
|
|
30
51
|
class AmbiguousFieldError(Exception):
|
|
31
52
|
"""Raised when find_field() matches multiple fields and disambiguation is needed."""
|
|
32
53
|
|
|
@@ -97,7 +118,7 @@ class FieldResolver:
|
|
|
97
118
|
|
|
98
119
|
def get(
|
|
99
120
|
self,
|
|
100
|
-
entity: Company | Person | Opportunity | ListEntryWithEntity,
|
|
121
|
+
entity: Company | Person | Opportunity | ListEntry | ListEntryWithEntity,
|
|
101
122
|
field_name: str,
|
|
102
123
|
*,
|
|
103
124
|
resolve: ResolveMode = ResolveMode.RAW,
|
|
@@ -123,17 +144,8 @@ class FieldResolver:
|
|
|
123
144
|
>>> stage = resolver.get(opportunity, "Stage", resolve=ResolveMode.TEXT)
|
|
124
145
|
>>> print(stage) # "Negotiation" instead of 12345
|
|
125
146
|
"""
|
|
126
|
-
|
|
127
|
-
if
|
|
128
|
-
hasattr(entity, "entity")
|
|
129
|
-
and entity.entity is not None
|
|
130
|
-
and hasattr(entity.entity, "fields")
|
|
131
|
-
and not entity.fields.requested
|
|
132
|
-
and entity.entity.fields.requested
|
|
133
|
-
):
|
|
134
|
-
entity = entity.entity
|
|
135
|
-
|
|
136
|
-
if not entity.fields.requested:
|
|
147
|
+
fields = _field_values(entity)
|
|
148
|
+
if not fields.requested:
|
|
137
149
|
warnings.warn(
|
|
138
150
|
"Fields were not requested for this entity. "
|
|
139
151
|
"Pass field_ids or field_types when fetching to populate field values.",
|
|
@@ -146,7 +158,7 @@ class FieldResolver:
|
|
|
146
158
|
if field is None:
|
|
147
159
|
return None
|
|
148
160
|
|
|
149
|
-
value =
|
|
161
|
+
value = fields.get_value(str(field.id))
|
|
150
162
|
|
|
151
163
|
if resolve == ResolveMode.TEXT and value is not None:
|
|
152
164
|
value = self._resolve_value(value, field.value_type)
|
|
@@ -155,7 +167,7 @@ class FieldResolver:
|
|
|
155
167
|
|
|
156
168
|
def get_many(
|
|
157
169
|
self,
|
|
158
|
-
entity: Company | Person | Opportunity | ListEntryWithEntity,
|
|
170
|
+
entity: Company | Person | Opportunity | ListEntry | ListEntryWithEntity,
|
|
159
171
|
field_names: Sequence[str],
|
|
160
172
|
*,
|
|
161
173
|
resolve: ResolveMode = ResolveMode.RAW,
|
|
@@ -284,7 +296,7 @@ class FieldResolver:
|
|
|
284
296
|
|
|
285
297
|
def get_by_id(
|
|
286
298
|
self,
|
|
287
|
-
entity: Company | Person | Opportunity | ListEntryWithEntity,
|
|
299
|
+
entity: Company | Person | Opportunity | ListEntry | ListEntryWithEntity,
|
|
288
300
|
field_id: str | AnyFieldId,
|
|
289
301
|
*,
|
|
290
302
|
resolve: ResolveMode = ResolveMode.RAW,
|
|
@@ -300,18 +312,8 @@ class FieldResolver:
|
|
|
300
312
|
Returns:
|
|
301
313
|
The extracted field value, or None if not found.
|
|
302
314
|
"""
|
|
303
|
-
# Delegate to inner entity for ListEntryWithEntity
|
|
304
|
-
if (
|
|
305
|
-
hasattr(entity, "entity")
|
|
306
|
-
and entity.entity is not None
|
|
307
|
-
and hasattr(entity.entity, "fields")
|
|
308
|
-
and not entity.fields.requested
|
|
309
|
-
and entity.entity.fields.requested
|
|
310
|
-
):
|
|
311
|
-
entity = entity.entity
|
|
312
|
-
|
|
313
315
|
field_id_str = str(field_id)
|
|
314
|
-
value = entity.
|
|
316
|
+
value = _field_values(entity).get_value(field_id_str)
|
|
315
317
|
if resolve == ResolveMode.TEXT and value is not None:
|
|
316
318
|
field = self._by_id.get(field_id_str)
|
|
317
319
|
value_type = field.value_type if field else None
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "affinity-crm-mcp-unofficial",
|
|
3
3
|
"description": "Affinity CRM workflows for Claude \u2014 meeting prep, pipeline review, warm intros, interaction logging, and relationship intelligence",
|
|
4
|
-
"version": "2.0.
|
|
4
|
+
"version": "2.0.7",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Yaniv Golan",
|
|
7
7
|
"email": "yaniv@golan.name"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.9.6
|
|
@@ -105,8 +105,15 @@ mcp_tools_policy_check_secure_tree() {
|
|
|
105
105
|
|
|
106
106
|
# Why server.d/policy.sh can't be loaded safely: prints the reason, or
|
|
107
107
|
# nothing when there is no policy.sh or it is fine. Insecure ownership or
|
|
108
|
-
# permissions, a symlink,
|
|
109
|
-
#
|
|
108
|
+
# permissions, a symlink, a syntax error, or a file that dies while it is
|
|
109
|
+
# sourced (a top-level command that fails, a syntax error in a file it
|
|
110
|
+
# sources, a top-level exit), tried in a fresh bash process at each start
|
|
111
|
+
# (its top-level code then runs one extra time); the workers reuse that
|
|
112
|
+
# verdict while the file's content is the same. A file it sources that breaks
|
|
113
|
+
# while the server runs is not seen until the next start (a worker's own load
|
|
114
|
+
# can't tell on bash 4+: the dispatcher's callers exempt it from errexit),
|
|
115
|
+
# except that a worker whose load no longer defines a hook the start check
|
|
116
|
+
# saw refuses the call (mcp_tools_policy_init).
|
|
110
117
|
mcp_tools_policy_unsafe_reason() {
|
|
111
118
|
[ -n "${MCPBASH_SERVER_DIR:-}" ] || return 0
|
|
112
119
|
local policy_path="${MCPBASH_SERVER_DIR}/policy.sh"
|
|
@@ -116,10 +123,75 @@ mcp_tools_policy_unsafe_reason() {
|
|
|
116
123
|
"${policy_path}" "${policy_path}" "${MCPBASH_SERVER_DIR}" "${MCPBASH_PROJECT_ROOT:-.}"
|
|
117
124
|
return 0
|
|
118
125
|
fi
|
|
126
|
+
case "$(mcp_tools_policy_load_verdict "${policy_path}")" in
|
|
127
|
+
ok*) ;;
|
|
128
|
+
syntax) printf '%s was not loaded: it has a syntax error (check it with: bash -n "%s")' "${policy_path}" "${policy_path}" ;;
|
|
129
|
+
*) printf '%s was not loaded: it stops while loading (a top-level command that fails, a syntax error in a file it sources, or a top-level exit)' "${policy_path}" ;;
|
|
130
|
+
esac
|
|
131
|
+
return 0
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
# Whether sourcing POLICY_PATH completes, tried in a new bash process and
|
|
135
|
+
# cached in the state dir against the file's content: "syntax", "failed", or
|
|
136
|
+
# "ok" followed by the hooks it defines, as ":project" (mcp_tools_policy_project)
|
|
137
|
+
# and ":check" (a mcp_tools_policy_check that replaces the built-in one).
|
|
138
|
+
mcp_tools_policy_load_verdict() {
|
|
139
|
+
local policy_path="$1" content="" cache="" cached_content="" verdict=""
|
|
140
|
+
IFS= read -r -d '' content <"${policy_path}" 2>/dev/null || true
|
|
141
|
+
# Kept for this server only (its state dir), so the workers don't repeat
|
|
142
|
+
# it: the next start checks again, since a file policy.sh sources may
|
|
143
|
+
# have changed (only policy.sh's own content is compared).
|
|
144
|
+
if [ -n "${MCPBASH_STATE_DIR:-}" ] && [ -d "${MCPBASH_STATE_DIR}" ]; then
|
|
145
|
+
cache="${MCPBASH_STATE_DIR}/policy.loads"
|
|
146
|
+
fi
|
|
147
|
+
if [ -n "${cache}" ] && [ -f "${cache}" ]; then
|
|
148
|
+
{
|
|
149
|
+
IFS= read -r verdict
|
|
150
|
+
IFS= read -r -d '' cached_content || true
|
|
151
|
+
} <"${cache}" 2>/dev/null || true
|
|
152
|
+
if [ -n "${verdict}" ] && [ "${cached_content}" = "${content}" ]; then
|
|
153
|
+
printf '%s' "${verdict}"
|
|
154
|
+
return 0
|
|
155
|
+
fi
|
|
156
|
+
fi
|
|
119
157
|
if ! "${BASH:-bash}" -n "${policy_path}" 2>/dev/null; then
|
|
120
|
-
|
|
158
|
+
verdict=syntax
|
|
159
|
+
else
|
|
160
|
+
# A fresh bash process: a subshell would inherit an errexit exemption
|
|
161
|
+
# from any || or if around this call, and then let a failing
|
|
162
|
+
# top-level command through. As strict as a worker on every bash: a
|
|
163
|
+
# top-level command that fails, or one in a file policy.sh sources (a
|
|
164
|
+
# syntax error there), ends the probe. The status of the file as a
|
|
165
|
+
# whole (its last command) is fine: the ERR trap tells that case by
|
|
166
|
+
# where it fires. A new process sees only exported variables: export
|
|
167
|
+
# the server paths a policy.sh may use at its top level, as a worker
|
|
168
|
+
# has them (in this command substitution only).
|
|
169
|
+
# shellcheck disable=SC2016 # The probe script is expanded by the new bash.
|
|
170
|
+
verdict="$(
|
|
171
|
+
export MCPBASH_HOME MCPBASH_PROJECT_ROOT MCPBASH_SERVER_DIR MCPBASH_TOOLS_DIR MCPBASH_STATE_DIR
|
|
172
|
+
exec "${BASH:-bash}" -c '
|
|
173
|
+
exec 3>&1 </dev/null >/dev/null 2>&1
|
|
174
|
+
set -euo pipefail
|
|
175
|
+
probe_self="${BASH_SOURCE[0]:-}"
|
|
176
|
+
exited=false
|
|
177
|
+
_mcp_probe_loaded() {
|
|
178
|
+
local v=ok
|
|
179
|
+
if declare -F mcp_tools_policy_project >/dev/null; then v="${v}:project"; fi
|
|
180
|
+
if declare -F mcp_tools_policy_check >/dev/null; then v="${v}:check"; fi
|
|
181
|
+
printf "%s" "${v}" >&3
|
|
182
|
+
}
|
|
183
|
+
trap "[ \"\${BASH_SOURCE[0]:-}\" = \"\${probe_self}\" ] && [ \"\${exited}\" = false ] && _mcp_probe_loaded" ERR
|
|
184
|
+
exit() { exited=true; }
|
|
185
|
+
. "$1"
|
|
186
|
+
unset -f exit
|
|
187
|
+
trap - ERR
|
|
188
|
+
[ "${exited}" = "false" ] && _mcp_probe_loaded
|
|
189
|
+
' _ "${policy_path}" 2>/dev/null
|
|
190
|
+
)" || true
|
|
191
|
+
[ -n "${verdict}" ] || verdict=failed
|
|
121
192
|
fi
|
|
122
|
-
|
|
193
|
+
[ -z "${cache}" ] || printf '%s\n%s' "${verdict}" "${content}" >"${cache}" 2>/dev/null || true
|
|
194
|
+
printf '%s' "${verdict}"
|
|
123
195
|
}
|
|
124
196
|
|
|
125
197
|
# At server start (main process): tell the operator on stderr when policy.sh
|
|
@@ -151,8 +223,30 @@ mcp_tools_policy_init() {
|
|
|
151
223
|
fi
|
|
152
224
|
local policy_path="${MCPBASH_SERVER_DIR:-}/policy.sh"
|
|
153
225
|
if [ -n "${MCPBASH_SERVER_DIR:-}" ] && [ -f "${policy_path}" ]; then
|
|
226
|
+
local check_before
|
|
227
|
+
check_before="$(declare -f mcp_tools_policy_check 2>/dev/null || true)"
|
|
228
|
+
# A top-level `exit` would end this worker, and the client would get no
|
|
229
|
+
# answer: catch it while sourcing.
|
|
230
|
+
_MCP_TOOLS_POLICY_EXITED=false
|
|
231
|
+
# shellcheck disable=SC2317,SC2329 # Invoked indirectly: by a top-level exit in policy.sh.
|
|
232
|
+
exit() { _MCP_TOOLS_POLICY_EXITED=true; }
|
|
154
233
|
# shellcheck disable=SC1090
|
|
155
|
-
. "${policy_path}"
|
|
234
|
+
. "${policy_path}" || true
|
|
235
|
+
unset -f exit
|
|
236
|
+
local verdict=""
|
|
237
|
+
if [ "${_MCP_TOOLS_POLICY_EXITED}" = "true" ]; then
|
|
238
|
+
MCP_TOOLS_POLICY_UNSAFE="${policy_path} was not loaded: it stops while loading (a top-level exit)"
|
|
239
|
+
elif ! declare -F mcp_tools_policy_project >/dev/null 2>&1 \
|
|
240
|
+
|| [ "$(declare -f mcp_tools_policy_check 2>/dev/null || true)" = "${check_before}" ]; then
|
|
241
|
+
# A hook the start check saw is missing from this load: a file
|
|
242
|
+
# policy.sh sources broke since (this load can't see a failure on
|
|
243
|
+
# bash 4+: the callers exempt it from errexit).
|
|
244
|
+
verdict="$(mcp_tools_policy_load_verdict "${policy_path}")"
|
|
245
|
+
if { ! declare -F mcp_tools_policy_project >/dev/null 2>&1 && [ "${verdict}" != "${verdict#*:project}" ]; } \
|
|
246
|
+
|| { [ "$(declare -f mcp_tools_policy_check 2>/dev/null || true)" = "${check_before}" ] && [ "${verdict}" != "${verdict#*:check}" ]; }; then
|
|
247
|
+
MCP_TOOLS_POLICY_UNSAFE="${policy_path} was not loaded: it no longer defines its policy hook (a file it sources changed since the server started; restart the server)"
|
|
248
|
+
fi
|
|
249
|
+
fi
|
|
156
250
|
fi
|
|
157
251
|
return 0
|
|
158
252
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":"1.9.6","sha256":"d09a66e1e97d654905774351226b3103072bcd428fbc79cb677447a7dbc30556","vendored_from":"/Users/yaniv/.local/share/mcp-bash","vendored_at":"2026-10-14T12:55:45Z"}
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
"_generated": {
|
|
3
3
|
"warning": "DO NOT EDIT - This file is auto-generated",
|
|
4
4
|
"generator": "tools/generate_mcp_command_registry.py",
|
|
5
|
-
"cliVersion": "2.0.
|
|
5
|
+
"cliVersion": "2.0.6",
|
|
6
6
|
"sourceConfig": "mcp/.registry/mcp-commands.json"
|
|
7
7
|
},
|
|
8
8
|
"version": 1,
|
|
9
|
-
"cliVersion": "2.0.
|
|
9
|
+
"cliVersion": "2.0.6",
|
|
10
10
|
"commands": [
|
|
11
11
|
{
|
|
12
12
|
"name": "company connections",
|
|
@@ -5,6 +5,19 @@ All notable changes to the xaffinity MCP server will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [2.0.7] - 2026-10-14
|
|
9
|
+
|
|
10
|
+
Requires CLI 2.0.5 (no new CLI requirements).
|
|
11
|
+
|
|
12
|
+
### Security
|
|
13
|
+
|
|
14
|
+
- On mcp-bash 1.9.6 (was 1.9.5): a `server.d/policy.sh` that fails while loading (a failing
|
|
15
|
+
top-level command, a syntax error in a file it sources, a top-level `exit`) now refuses every
|
|
16
|
+
tool call with a reason. Before, a tool the policy blocks (e.g. the write tool in read-only
|
|
17
|
+
mode) could run on bash 4+, or the call got no answer. Calls are also refused if a file the
|
|
18
|
+
policy sources breaks while the server runs. The server test-loads `policy.sh` in a separate
|
|
19
|
+
process at each start; this server's policy only sets variables, so start-up is unchanged.
|
|
20
|
+
|
|
8
21
|
## [2.0.6] - 2026-10-14
|
|
9
22
|
|
|
10
23
|
Requires CLI 2.0.5.
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
CLI_MIN_VERSION="2.0.5"
|
|
5
5
|
CLI_MAX_VERSION="2.0.5"
|
|
6
6
|
|
|
7
|
+
# MCP 2.0.7: no new CLI requirements (mcp-bash 1.9.6).
|
|
8
|
+
|
|
7
9
|
# MCP 2.0.6 requires CLI 2.0.5 for:
|
|
8
10
|
# - `field history` / `field history-bulk`: a deleted dropdown option as
|
|
9
11
|
# {"id": null, "text": ..., "deleted": true} (was a bare string); the pipeline-history skill
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2.0.7
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# mcp-bash.lock - Pin mcp-bash-framework version and commit
|
|
2
2
|
# Source this file in bash scripts: source mcp-bash.lock
|
|
3
3
|
# Update: git ls-remote https://github.com/yaniv-golan/mcp-bash-framework.git 'vX.Y.Z^{}'
|
|
4
|
-
MCPBASH_VERSION=1.9.
|
|
5
|
-
MCPBASH_COMMIT=
|
|
4
|
+
MCPBASH_VERSION=1.9.6
|
|
5
|
+
MCPBASH_COMMIT=33f21cc4bfcab20d86d0d1b62d8a1f3844c8b776
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xaffinity-mcp",
|
|
3
3
|
"title": "xaffinity MCP",
|
|
4
|
-
"version": "2.0.
|
|
4
|
+
"version": "2.0.7",
|
|
5
5
|
"description": "MCP server for Affinity CRM - workflow management, entity lookup, relationship intelligence using xaffinity CLI",
|
|
6
6
|
"env": {
|
|
7
7
|
"MCPBASH_TOOL_ENV_MODE": "allowlist",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "affinity-crm-cli-xaffinity-unofficial",
|
|
3
3
|
"description": "Affinity CRM command-line tools — search contacts, export lists to CSV, filter pipelines, and manage CRM data via xaffinity",
|
|
4
|
-
"version": "2.0.
|
|
4
|
+
"version": "2.0.5",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Yaniv Golan",
|
|
7
7
|
"email": "yaniv@golan.name"
|
|
@@ -42,7 +42,7 @@ if [ -f "$HOME/.xaffinity-install-status" ] && grep -qF "INSTALL_FAILED" "$HOME/
|
|
|
42
42
|
"hookSpecificOutput": {
|
|
43
43
|
"permissionDecision": "deny"
|
|
44
44
|
},
|
|
45
|
-
"systemMessage": "BLOCKED: xaffinity CLI installation failed. Ask the user to check network connectivity and Python environment, then run: pip install 'affinity-sdk[cli]==2.0.
|
|
45
|
+
"systemMessage": "BLOCKED: xaffinity CLI installation failed. Ask the user to check network connectivity and Python environment, then run: pip install 'affinity-sdk[cli]==2.0.6'"
|
|
46
46
|
}
|
|
47
47
|
EOF
|
|
48
48
|
exit 2
|
|
@@ -67,7 +67,7 @@ if [ -z "${AFFINITY_SESSION_CACHE:-}" ]; then
|
|
|
67
67
|
"hookSpecificOutput": {
|
|
68
68
|
"permissionDecision": "deny"
|
|
69
69
|
},
|
|
70
|
-
"systemMessage": "BLOCKED: xaffinity CLI installation failed. Ask the user to check network connectivity and Python environment, then run: pip install 'affinity-sdk[cli]==2.0.
|
|
70
|
+
"systemMessage": "BLOCKED: xaffinity CLI installation failed. Ask the user to check network connectivity and Python environment, then run: pip install 'affinity-sdk[cli]==2.0.6'"
|
|
71
71
|
}
|
|
72
72
|
EOF
|
|
73
73
|
exit 2
|
|
@@ -72,7 +72,7 @@ set -euo pipefail
|
|
|
72
72
|
# The CLI version this plugin release is written for. Kept equal to pyproject.toml's version
|
|
73
73
|
# (tests/test_cli_session_setup_hook.py checks it). Set XAFFINITY_CLI_SPEC to install another,
|
|
74
74
|
# e.g. XAFFINITY_CLI_SPEC="affinity-sdk[cli]" for the newest release.
|
|
75
|
-
cli_spec="${XAFFINITY_CLI_SPEC:-affinity-sdk[cli]==2.0.
|
|
75
|
+
cli_spec="${XAFFINITY_CLI_SPEC:-affinity-sdk[cli]==2.0.6}"
|
|
76
76
|
|
|
77
77
|
# --- Recursion guard ---
|
|
78
78
|
# Prevents infinite loop if pip install somehow triggers this wrapper again.
|
{affinity_sdk-2.0.5 → affinity_sdk-2.0.6}/plugins/xaffinity-cli/skills/xaffinity-cli-usage/SKILL.md
RENAMED
|
@@ -23,7 +23,7 @@ xaffinity config check-key --json
|
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
- **`command not found`** (exit 127; e.g. a Claude Cowork VM) — install it once per task:
|
|
26
|
-
`pip install --user -q --no-warn-script-location "affinity-sdk[cli]==2.0.
|
|
26
|
+
`pip install --user -q --no-warn-script-location "affinity-sdk[cli]==2.0.6"` (about 10s), then
|
|
27
27
|
start every later bash call with `export PATH="$HOME/.local/bin:$PATH";` (each call is a
|
|
28
28
|
fresh shell) and run check-key again. Details and the no-network case: `references/setup.md` (Claude Cowork).
|
|
29
29
|
- **`"configured": true`** — use the `pattern` field from the output for ALL subsequent commands:
|
|
@@ -319,6 +319,6 @@ reference (JSON structure, operators, aggregation, examples): `references/query-
|
|
|
319
319
|
| Get command help | `xaffinity <command> --help` (USE THIS — don't guess flags) |
|
|
320
320
|
|
|
321
321
|
**Remember:** prefix all commands with `xaffinity --readonly` (and `--dotenv` if `check-key` says
|
|
322
|
-
so). Install: `pip install "affinity-sdk[cli]==2.0.
|
|
322
|
+
so). Install: `pip install "affinity-sdk[cli]==2.0.6"`, the version this skill is written for
|
|
323
323
|
(`--user` plus the PATH line above when `xaffinity` isn't found); if a command or flag shown
|
|
324
324
|
here is missing, the installed CLI is older: install that version. Docs: https://yaniv-golan.github.io/affinity-sdk/latest/
|
|
@@ -43,7 +43,7 @@ config files):
|
|
|
43
43
|
## Claude Cowork
|
|
44
44
|
|
|
45
45
|
**Installing the CLI.** Cowork's VM may not have `xaffinity` (`command not found`). Install it
|
|
46
|
-
once per task: `pip install --user -q --no-warn-script-location "affinity-sdk[cli]==2.0.
|
|
46
|
+
once per task: `pip install --user -q --no-warn-script-location "affinity-sdk[cli]==2.0.6"` (about
|
|
47
47
|
10s). It lands in `~/.local/bin`, which is not on PATH, and each bash call is a fresh shell, so start every
|
|
48
48
|
xaffinity call with `export PATH="$HOME/.local/bin:$PATH";` — then commands and check-key's
|
|
49
49
|
`pattern` work as written (or call `~/.local/bin/xaffinity` by its full path). The install lasts
|