immich-api 0.2.1__tar.gz → 0.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. {immich_api-0.2.1 → immich_api-0.2.2}/.bumpversion.cfg +1 -1
  2. immich_api-0.2.2/.github/workflows/connector-pr.yml +16 -0
  3. {immich_api-0.2.1/immich_api.egg-info → immich_api-0.2.2}/PKG-INFO +4 -4
  4. {immich_api-0.2.1 → immich_api-0.2.2}/docker/Dockerfile +1 -1
  5. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/mcp_server.py +0 -9
  6. {immich_api-0.2.1 → immich_api-0.2.2/immich_api.egg-info}/PKG-INFO +4 -4
  7. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api.egg-info/SOURCES.txt +8 -0
  8. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api.egg-info/requires.txt +3 -3
  9. {immich_api-0.2.1 → immich_api-0.2.2}/pyproject.toml +4 -4
  10. {immich_api-0.2.1 → immich_api-0.2.2}/scripts/generated_schema_clones.py +18 -3
  11. {immich_api-0.2.1 → immich_api-0.2.2}/scripts/verify_generated_schemas.py +1 -1
  12. {immich_api-0.2.1 → immich_api-0.2.2}/specs/README.md +1 -0
  13. immich_api-0.2.2/specs/connector-content/plan.md +7 -0
  14. immich_api-0.2.2/specs/connector-content/requirements.md +9 -0
  15. immich_api-0.2.2/specs/connector-content/spec.md +11 -0
  16. immich_api-0.2.2/specs/connector-content/status.json +22 -0
  17. immich_api-0.2.2/specs/connector-content/tasks.md +5 -0
  18. immich_api-0.2.2/specs/connector-content/test-spec.md +7 -0
  19. immich_api-0.2.2/tests/test_default_content_surfaces.py +43 -0
  20. {immich_api-0.2.1 → immich_api-0.2.2}/.config/spec-dashboard.json +0 -0
  21. {immich_api-0.2.1 → immich_api-0.2.2}/.github/workflows/pages.yml +0 -0
  22. {immich_api-0.2.1 → immich_api-0.2.2}/.github/workflows/pipeline.yml +0 -0
  23. {immich_api-0.2.1 → immich_api-0.2.2}/.github/workflows/scanners.yml +0 -0
  24. {immich_api-0.2.1 → immich_api-0.2.2}/.github/workflows/windows-ci.yml +0 -0
  25. {immich_api-0.2.1 → immich_api-0.2.2}/.pipeline-theme/provenance.json +0 -0
  26. {immich_api-0.2.1 → immich_api-0.2.2}/.pipeline-theme/scripts/sync_mkdocs_theme.py +0 -0
  27. {immich_api-0.2.1 → immich_api-0.2.2}/.pipeline-theme/templates/mkdocs-theme/README.md +0 -0
  28. {immich_api-0.2.1 → immich_api-0.2.2}/.pipeline-theme/templates/mkdocs-theme/assets/brands/agent-connector-sdk-logo-v1.png +0 -0
  29. {immich_api-0.2.1 → immich_api-0.2.2}/.pipeline-theme/templates/mkdocs-theme/assets/brands/agent-terminal-ui-logo-v1.png +0 -0
  30. {immich_api-0.2.1 → immich_api-0.2.2}/.pipeline-theme/templates/mkdocs-theme/assets/brands/agent-utilities-logo-v1.png +0 -0
  31. {immich_api-0.2.1 → immich_api-0.2.2}/.pipeline-theme/templates/mkdocs-theme/assets/brands/agent-webui-logo-v1.png +0 -0
  32. {immich_api-0.2.1 → immich_api-0.2.2}/.pipeline-theme/templates/mkdocs-theme/assets/brands/epistemic-graph-logo-v1.png +0 -0
  33. {immich_api-0.2.1 → immich_api-0.2.2}/.pipeline-theme/templates/mkdocs-theme/assets/brands/geniusbot-logo-v1.png +0 -0
  34. {immich_api-0.2.1 → immich_api-0.2.2}/.pipeline-theme/templates/mkdocs-theme/assets/brands/graph-os-logo-v1.png +0 -0
  35. {immich_api-0.2.1 → immich_api-0.2.2}/.pipeline-theme/templates/mkdocs-theme/assets/favicon.svg +0 -0
  36. {immich_api-0.2.1 → immich_api-0.2.2}/.pipeline-theme/templates/mkdocs-theme/assets/graph-mark.svg +0 -0
  37. {immich_api-0.2.1 → immich_api-0.2.2}/.pipeline-theme/templates/mkdocs-theme/assets/runtime-architecture.mmd +0 -0
  38. {immich_api-0.2.1 → immich_api-0.2.2}/.pipeline-theme/templates/mkdocs-theme/assets/runtime-architecture.svg +0 -0
  39. {immich_api-0.2.1 → immich_api-0.2.2}/.pipeline-theme/templates/mkdocs-theme/base.mkdocs.yml +0 -0
  40. {immich_api-0.2.1 → immich_api-0.2.2}/.pipeline-theme/templates/mkdocs-theme/extra.css +0 -0
  41. {immich_api-0.2.1 → immich_api-0.2.2}/.pipeline-theme/templates/mkdocs-theme/glossary.md +0 -0
  42. {immich_api-0.2.1 → immich_api-0.2.2}/.pipeline-theme/templates/mkdocs-theme/overrides/main.html +0 -0
  43. {immich_api-0.2.1 → immich_api-0.2.2}/.pre-commit-config.yaml +0 -0
  44. {immich_api-0.2.1 → immich_api-0.2.2}/LICENSE +0 -0
  45. {immich_api-0.2.1 → immich_api-0.2.2}/MANIFEST.in +0 -0
  46. {immich_api-0.2.1 → immich_api-0.2.2}/README.md +0 -0
  47. {immich_api-0.2.1 → immich_api-0.2.2}/docker/debug.Dockerfile +0 -0
  48. {immich_api-0.2.1 → immich_api-0.2.2}/docker/mcp.compose.yml +0 -0
  49. {immich_api-0.2.1 → immich_api-0.2.2}/docker/starship.toml +0 -0
  50. {immich_api-0.2.1 → immich_api-0.2.2}/docs/agent-readiness.json +0 -0
  51. {immich_api-0.2.1 → immich_api-0.2.2}/docs/agent-readiness.schema.json +0 -0
  52. {immich_api-0.2.1 → immich_api-0.2.2}/docs/architecture.md +0 -0
  53. {immich_api-0.2.1 → immich_api-0.2.2}/docs/assets/brands/agent-connector-sdk-logo-v1.png +0 -0
  54. {immich_api-0.2.1 → immich_api-0.2.2}/docs/assets/brands/agent-terminal-ui-logo-v1.png +0 -0
  55. {immich_api-0.2.1 → immich_api-0.2.2}/docs/assets/brands/agent-utilities-logo-v1.png +0 -0
  56. {immich_api-0.2.1 → immich_api-0.2.2}/docs/assets/brands/agent-webui-logo-v1.png +0 -0
  57. {immich_api-0.2.1 → immich_api-0.2.2}/docs/assets/brands/epistemic-graph-logo-v1.png +0 -0
  58. {immich_api-0.2.1 → immich_api-0.2.2}/docs/assets/brands/geniusbot-logo-v1.png +0 -0
  59. {immich_api-0.2.1 → immich_api-0.2.2}/docs/assets/brands/graph-os-logo-v1.png +0 -0
  60. {immich_api-0.2.1 → immich_api-0.2.2}/docs/assets/favicon.svg +0 -0
  61. {immich_api-0.2.1 → immich_api-0.2.2}/docs/assets/graph-mark.svg +0 -0
  62. {immich_api-0.2.1 → immich_api-0.2.2}/docs/assets/runtime-architecture.mmd +0 -0
  63. {immich_api-0.2.1 → immich_api-0.2.2}/docs/assets/runtime-architecture.svg +0 -0
  64. {immich_api-0.2.1 → immich_api-0.2.2}/docs/capabilities/api.json +0 -0
  65. {immich_api-0.2.1 → immich_api-0.2.2}/docs/capabilities/mcp.json +0 -0
  66. {immich_api-0.2.1 → immich_api-0.2.2}/docs/concepts.md +0 -0
  67. {immich_api-0.2.1 → immich_api-0.2.2}/docs/deployment.md +0 -0
  68. {immich_api-0.2.1 → immich_api-0.2.2}/docs/glossary.md +0 -0
  69. {immich_api-0.2.1 → immich_api-0.2.2}/docs/immich-capabilities.md +0 -0
  70. {immich_api-0.2.1 → immich_api-0.2.2}/docs/index.md +0 -0
  71. {immich_api-0.2.1 → immich_api-0.2.2}/docs/installation.md +0 -0
  72. {immich_api-0.2.1 → immich_api-0.2.2}/docs/openapi-parity.md +0 -0
  73. {immich_api-0.2.1 → immich_api-0.2.2}/docs/overview.md +0 -0
  74. {immich_api-0.2.1 → immich_api-0.2.2}/docs/platform.md +0 -0
  75. {immich_api-0.2.1 → immich_api-0.2.2}/docs/spec-delivery.md +0 -0
  76. {immich_api-0.2.1 → immich_api-0.2.2}/docs/stylesheets/extra.css +0 -0
  77. {immich_api-0.2.1 → immich_api-0.2.2}/docs/usage.md +0 -0
  78. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/__init__.py +0 -0
  79. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/__main__.py +0 -0
  80. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/album_metadata.py +0 -0
  81. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/api/__init__.py +0 -0
  82. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/api/api_client_system.py +0 -0
  83. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/auth.py +0 -0
  84. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/connector_manifest.yml +0 -0
  85. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/connectors/__init__.py +0 -0
  86. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/connectors/mcp_source_presets.json +0 -0
  87. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/connectors/tool_schema_fingerprints.json +0 -0
  88. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/error_authority.py +0 -0
  89. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/error_rendering.py +0 -0
  90. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/immich_input_models.py +0 -0
  91. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/immich_response_models.py +0 -0
  92. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/kg_ingest.py +0 -0
  93. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/mcp/__init__.py +0 -0
  94. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/mcp/album_sample.py +0 -0
  95. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/mcp_config.json +0 -0
  96. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/ontology/__init__.py +0 -0
  97. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/ontology/immich.ttl +0 -0
  98. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/ontology/schema-provenance.json +0 -0
  99. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/ontology/shapes/immich.ttl +0 -0
  100. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/openapi_auth_scheme.py +0 -0
  101. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/openapi_contract.json +0 -0
  102. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/openapi_execution.py +0 -0
  103. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/openapi_inventory.json +0 -0
  104. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/openapi_request.py +0 -0
  105. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/openapi_response.py +0 -0
  106. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/openapi_runtime.py +0 -0
  107. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/parity/__init__.py +0 -0
  108. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/parity/check_openapi_parity.py +0 -0
  109. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/parity/openapi_discovery.py +0 -0
  110. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/parity/openapi_parity.py +0 -0
  111. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/parity/openapi_provider_evidence.py +0 -0
  112. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/parity/openapi_provider_overlay.py +0 -0
  113. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/parity/openapi_provider_responses.py +0 -0
  114. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/parity/openapi_schema.py +0 -0
  115. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/parity/openapi_schema_budget.py +0 -0
  116. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/parity/openapi_schema_inputs.py +0 -0
  117. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/parity/openapi_schema_types.py +0 -0
  118. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/parity/openapi_security.py +0 -0
  119. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/parity/openapi_source_parity.py +0 -0
  120. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/parity/openapi_transport_parity.py +0 -0
  121. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/parity/unicode_patterns.py +0 -0
  122. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/parity/unicode_properties.json +0 -0
  123. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/prompts/__init__.py +0 -0
  124. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/prompts/immich_album_review.json +0 -0
  125. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/prompts/immich_asset_metadata.json +0 -0
  126. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/prompts/immich_person_record.json +0 -0
  127. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/prompts/immich_specialist.json +0 -0
  128. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/prompts/main_agent.json +0 -0
  129. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/skills/__init__.py +0 -0
  130. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/skills/immich-album-review/SKILL.md +0 -0
  131. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/skills/immich-asset-metadata/SKILL.md +0 -0
  132. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/skills/immich-health/SKILL.md +0 -0
  133. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api/skills/immich-person-record/SKILL.md +0 -0
  134. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api.egg-info/dependency_links.txt +0 -0
  135. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api.egg-info/entry_points.txt +0 -0
  136. {immich_api-0.2.1 → immich_api-0.2.2}/immich_api.egg-info/top_level.txt +0 -0
  137. {immich_api-0.2.1 → immich_api-0.2.2}/mkdocs.yml +0 -0
  138. {immich_api-0.2.1 → immich_api-0.2.2}/pytest.ini +0 -0
  139. {immich_api-0.2.1 → immich_api-0.2.2}/requirements.txt +0 -0
  140. {immich_api-0.2.1 → immich_api-0.2.2}/scripts/agent_readiness_tck.py +0 -0
  141. {immich_api-0.2.1 → immich_api-0.2.2}/scripts/bootstrap.sh +0 -0
  142. {immich_api-0.2.1 → immich_api-0.2.2}/scripts/bootstrap_environment.py +0 -0
  143. {immich_api-0.2.1 → immich_api-0.2.2}/scripts/bootstrap_sources.py +0 -0
  144. {immich_api-0.2.1 → immich_api-0.2.2}/scripts/check_connector_contract.py +0 -0
  145. {immich_api-0.2.1 → immich_api-0.2.2}/scripts/check_import_safety.py +0 -0
  146. {immich_api-0.2.1 → immich_api-0.2.2}/scripts/check_workspace_source_drift.py +0 -0
  147. {immich_api-0.2.1 → immich_api-0.2.2}/scripts/generate_agent_readiness.py +0 -0
  148. {immich_api-0.2.1 → immich_api-0.2.2}/scripts/generate_immich_content.py +0 -0
  149. {immich_api-0.2.1 → immich_api-0.2.2}/scripts/generate_tool_schemas.py +0 -0
  150. {immich_api-0.2.1 → immich_api-0.2.2}/scripts/measure_operation_parity.py +0 -0
  151. {immich_api-0.2.1 → immich_api-0.2.2}/scripts/reviewed_secret_history.py +0 -0
  152. {immich_api-0.2.1 → immich_api-0.2.2}/scripts/security_sanitizer.py +0 -0
  153. {immich_api-0.2.1 → immich_api-0.2.2}/scripts/select_python.py +0 -0
  154. {immich_api-0.2.1 → immich_api-0.2.2}/scripts/upstream_evidence.py +0 -0
  155. {immich_api-0.2.1 → immich_api-0.2.2}/scripts/verify_api_integration.py +0 -0
  156. {immich_api-0.2.1 → immich_api-0.2.2}/scripts/workspace_sources.py +0 -0
  157. {immich_api-0.2.1 → immich_api-0.2.2}/setup.cfg +0 -0
  158. {immich_api-0.2.1 → immich_api-0.2.2}/specs/immich-api/plan.md +0 -0
  159. {immich_api-0.2.1 → immich_api-0.2.2}/specs/immich-api/requirements.md +0 -0
  160. {immich_api-0.2.1 → immich_api-0.2.2}/specs/immich-api/spec.md +0 -0
  161. {immich_api-0.2.1 → immich_api-0.2.2}/specs/immich-api/status.json +0 -0
  162. {immich_api-0.2.1 → immich_api-0.2.2}/specs/immich-api/tasks.md +0 -0
  163. {immich_api-0.2.1 → immich_api-0.2.2}/specs/immich-api/test-spec.md +0 -0
  164. {immich_api-0.2.1 → immich_api-0.2.2}/tests/__init__.py +0 -0
  165. {immich_api-0.2.1 → immich_api-0.2.2}/tests/conftest.py +0 -0
  166. {immich_api-0.2.1 → immich_api-0.2.2}/tests/fixtures/native-client-budget.json +0 -0
  167. {immich_api-0.2.1 → immich_api-0.2.2}/tests/fixtures/operation-cases.json +0 -0
  168. {immich_api-0.2.1 → immich_api-0.2.2}/tests/operation_fixtures.py +0 -0
  169. {immich_api-0.2.1 → immich_api-0.2.2}/tests/parity_support.py +0 -0
  170. {immich_api-0.2.1 → immich_api-0.2.2}/tests/test_album_metadata.py +0 -0
  171. {immich_api-0.2.1 → immich_api-0.2.2}/tests/test_api_wrapper.py +0 -0
  172. {immich_api-0.2.1 → immich_api-0.2.2}/tests/test_auth.py +0 -0
  173. {immich_api-0.2.1 → immich_api-0.2.2}/tests/test_concept_parity.py +0 -0
  174. {immich_api-0.2.1 → immich_api-0.2.2}/tests/test_error_authority.py +0 -0
  175. {immich_api-0.2.1 → immich_api-0.2.2}/tests/test_fleet_name.py +0 -0
  176. {immich_api-0.2.1 → immich_api-0.2.2}/tests/test_generated_schema_policy.py +0 -0
  177. {immich_api-0.2.1 → immich_api-0.2.2}/tests/test_immich_content.py +0 -0
  178. {immich_api-0.2.1 → immich_api-0.2.2}/tests/test_immich_mcp_validation.py +0 -0
  179. {immich_api-0.2.1 → immich_api-0.2.2}/tests/test_init_dynamics.py +0 -0
  180. {immich_api-0.2.1 → immich_api-0.2.2}/tests/test_kg_ingest.py +0 -0
  181. {immich_api-0.2.1 → immich_api-0.2.2}/tests/test_oauth_redirect_response.py +0 -0
  182. {immich_api-0.2.1 → immich_api-0.2.2}/tests/test_openapi_auth_provider.py +0 -0
  183. {immich_api-0.2.1 → immich_api-0.2.2}/tests/test_operation_parity.py +0 -0
  184. {immich_api-0.2.1 → immich_api-0.2.2}/tests/test_reviewed_secret_history.py +0 -0
  185. {immich_api-0.2.1 → immich_api-0.2.2}/tests/test_session_auth_isolation.py +0 -0
  186. {immich_api-0.2.1 → immich_api-0.2.2}/tests/test_source_image.py +0 -0
  187. {immich_api-0.2.1 → immich_api-0.2.2}/tests/test_startup.py +0 -0
  188. {immich_api-0.2.1 → immich_api-0.2.2}/tests/test_upstream_evidence.py +0 -0
@@ -1,5 +1,5 @@
1
1
  [bumpversion]
2
- current_version = 0.2.1
2
+ current_version = 0.2.2
3
3
  commit = True
4
4
  tag = True
5
5
 
@@ -0,0 +1,16 @@
1
+ name: Connector PR
2
+
3
+ on: pull_request
4
+
5
+ concurrency:
6
+ group: pr-${{ github.workflow }}-${{ github.event.pull_request.number }}
7
+ cancel-in-progress: true
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ gates:
14
+ uses: Knuckles-Team/pipelines/.github/workflows/connector_pr_pipeline.yml@main
15
+ with:
16
+ runner: '"self-hosted"'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: immich-api
3
- Version: 0.2.1
3
+ Version: 0.2.2
4
4
  Summary: Immich Api API + MCP Server
5
5
  Author: Repository Maintainers
6
6
  License: MIT
@@ -16,11 +16,11 @@ Requires-Dist: rfc3986-validator<0.2,>=0.1.1
16
16
  Requires-Dist: rfc3339-validator<0.2,>=0.1.4
17
17
  Requires-Dist: jsonschema<5,>=4.23
18
18
  Requires-Dist: regex>=2026.9.29
19
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.11
19
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.18
20
20
  Provides-Extra: mcp
21
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.11; extra == "mcp"
21
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.18; extra == "mcp"
22
22
  Provides-Extra: all
23
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.11; extra == "all"
23
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.18; extra == "all"
24
24
  Provides-Extra: test
25
25
  Requires-Dist: pytest-xdist>=3.6.0; extra == "test"
26
26
  Requires-Dist: pytest; extra == "test"
@@ -20,7 +20,7 @@ ENV HOST=${HOST} \
20
20
  XDG_CONFIG_HOME=/tmp/.config \
21
21
  XDG_CACHE_HOME=/tmp/.cache
22
22
  # Fixed identity for least-privilege runtime and stable volume ownership.
23
- RUN pip install --only-binary :all: immich-api[mcp]==0.2.1 \
23
+ RUN pip install --only-binary :all: immich-api[mcp]==0.2.2 \
24
24
  && groupadd --system --gid 10001 app \
25
25
  && useradd --system --uid 10001 --gid 10001 --no-create-home \
26
26
  --home-dir /tmp --shell /usr/sbin/nologin app
@@ -1,8 +1,6 @@
1
1
  import sys
2
- from pathlib import Path
3
2
 
4
3
  from agent_connector_sdk.config import load_config
5
- from agent_connector_sdk.mcp.content import ConnectorContent
6
4
  from agent_connector_sdk.mcp.server import create_mcp_server
7
5
  from agent_connector_sdk.mcp.tool_surface import register_tool_surface
8
6
 
@@ -14,18 +12,11 @@ __version__ = "0.1.0"
14
12
  def get_mcp_instance(*, command_args=None):
15
13
  """Construct one SDK-governed server and its native package content."""
16
14
  load_config()
17
- package_root = Path(__file__).resolve().parent
18
15
  args, mcp, middlewares = create_mcp_server(
19
16
  name="Immich Api",
20
17
  version=__version__,
21
18
  instructions="Immich Api API + MCP Server",
22
19
  command_args=command_args,
23
- content=ConnectorContent(
24
- connector="immich",
25
- package_root=package_root,
26
- package_version=__version__,
27
- manifest_path=package_root / "connector_manifest.yml",
28
- ),
29
20
  )
30
21
  register_tool_surface(mcp, service="immich-api", tools_module=tool_modules)
31
22
  for middleware in middlewares:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: immich-api
3
- Version: 0.2.1
3
+ Version: 0.2.2
4
4
  Summary: Immich Api API + MCP Server
5
5
  Author: Repository Maintainers
6
6
  License: MIT
@@ -16,11 +16,11 @@ Requires-Dist: rfc3986-validator<0.2,>=0.1.1
16
16
  Requires-Dist: rfc3339-validator<0.2,>=0.1.4
17
17
  Requires-Dist: jsonschema<5,>=4.23
18
18
  Requires-Dist: regex>=2026.9.29
19
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.11
19
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.18
20
20
  Provides-Extra: mcp
21
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.11; extra == "mcp"
21
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.18; extra == "mcp"
22
22
  Provides-Extra: all
23
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.11; extra == "all"
23
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.18; extra == "all"
24
24
  Provides-Extra: test
25
25
  Requires-Dist: pytest-xdist>=3.6.0; extra == "test"
26
26
  Requires-Dist: pytest; extra == "test"
@@ -8,6 +8,7 @@ pyproject.toml
8
8
  pytest.ini
9
9
  requirements.txt
10
10
  .config/spec-dashboard.json
11
+ .github/workflows/connector-pr.yml
11
12
  .github/workflows/pages.yml
12
13
  .github/workflows/pipeline.yml
13
14
  .github/workflows/scanners.yml
@@ -145,6 +146,12 @@ scripts/verify_api_integration.py
145
146
  scripts/verify_generated_schemas.py
146
147
  scripts/workspace_sources.py
147
148
  specs/README.md
149
+ specs/connector-content/plan.md
150
+ specs/connector-content/requirements.md
151
+ specs/connector-content/spec.md
152
+ specs/connector-content/status.json
153
+ specs/connector-content/tasks.md
154
+ specs/connector-content/test-spec.md
148
155
  specs/immich-api/plan.md
149
156
  specs/immich-api/requirements.md
150
157
  specs/immich-api/spec.md
@@ -159,6 +166,7 @@ tests/test_album_metadata.py
159
166
  tests/test_api_wrapper.py
160
167
  tests/test_auth.py
161
168
  tests/test_concept_parity.py
169
+ tests/test_default_content_surfaces.py
162
170
  tests/test_error_authority.py
163
171
  tests/test_fleet_name.py
164
172
  tests/test_generated_schema_policy.py
@@ -2,13 +2,13 @@ rfc3986-validator<0.2,>=0.1.1
2
2
  rfc3339-validator<0.2,>=0.1.4
3
3
  jsonschema<5,>=4.23
4
4
  regex>=2026.9.29
5
- agent-connector-sdk[mcp]<1.0.0,>=0.3.11
5
+ agent-connector-sdk[mcp]<1.0.0,>=0.3.18
6
6
 
7
7
  [all]
8
- agent-connector-sdk[mcp]<1.0.0,>=0.3.11
8
+ agent-connector-sdk[mcp]<1.0.0,>=0.3.18
9
9
 
10
10
  [mcp]
11
- agent-connector-sdk[mcp]<1.0.0,>=0.3.11
11
+ agent-connector-sdk[mcp]<1.0.0,>=0.3.18
12
12
 
13
13
  [test]
14
14
  pytest-xdist>=3.6.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "immich-api"
7
- version = "0.2.1"
7
+ version = "0.2.2"
8
8
  description = "Immich Api API + MCP Server"
9
9
  readme = "README.md"
10
10
  classifiers = [ "Development Status :: 4 - Beta", "License :: OSI Approved :: MIT License", "Environment :: Console", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3",]
@@ -14,7 +14,7 @@ dependencies = [
14
14
  "rfc3339-validator>=0.1.4,<0.2",
15
15
  "jsonschema>=4.23,<5",
16
16
  "regex>=2026.9.29",
17
- "agent-connector-sdk[mcp]>=0.3.11,<1.0.0",
17
+ "agent-connector-sdk[mcp]>=0.3.18,<1.0.0",
18
18
  ]
19
19
  [[project.authors]]
20
20
  name = "Repository Maintainers"
@@ -23,9 +23,9 @@ name = "Repository Maintainers"
23
23
  text = "MIT"
24
24
 
25
25
  [project.optional-dependencies]
26
- mcp = [ "agent-connector-sdk[mcp]>=0.3.11,<1.0.0",]
26
+ mcp = [ "agent-connector-sdk[mcp]>=0.3.18,<1.0.0",]
27
27
  all = [
28
- "agent-connector-sdk[mcp]>=0.3.11,<1.0.0",
28
+ "agent-connector-sdk[mcp]>=0.3.18,<1.0.0",
29
29
  ]
30
30
  test = [
31
31
  "pytest-xdist>=3.6.0", "pytest", "pytest-asyncio", "pytest-cov",]
@@ -86,13 +86,28 @@ def retain_pairs(pairs: dict, verified: dict) -> dict:
86
86
  }
87
87
 
88
88
 
89
- def scan(root: Path, ref: str | None, scratch: Path, executable: str) -> dict:
89
+ def scan(
90
+ root: Path,
91
+ ref: str | None,
92
+ scratch: Path,
93
+ executable: str,
94
+ *,
95
+ baseline: bool = False,
96
+ ) -> dict:
90
97
  from pipelines_hooks.clones import jscpd_keys, jscpd_run, jscpd_snapshot
91
98
 
92
99
  if ref is None:
93
100
  return {}
94
101
  snapshot = jscpd_snapshot.materialize(root, ref, scratch)
95
- verified = verified_artifacts(snapshot, root)
102
+ try:
103
+ verified = verified_artifacts(snapshot, root)
104
+ except ValueError as exc:
105
+ if not baseline:
106
+ raise
107
+ # A baseline whose receipts were already stale cannot prove any artifact
108
+ # generated, so it admits no exclusions: every pair stays in the baseline.
109
+ print(f"Baseline {ref[:12]} unverified, admitting no exclusions: {exc}")
110
+ verified = {}
96
111
  document = jscpd_run.run(executable, snapshot)
97
112
  pairs = jscpd_keys.keys(document, snapshot)
98
113
  retained = retain_pairs(pairs, verified)
@@ -126,7 +141,7 @@ def main() -> int:
126
141
  print(jscpd_keys.render_pair(key, current[key]))
127
142
  return 0
128
143
  base = change_base(root, args.base_ref)
129
- before = scan(root, base, scratch / "before", executable)
144
+ before = scan(root, base, scratch / "before", executable, baseline=True)
130
145
  after = scan(
131
146
  root, jscpd_gate._after_tree(root, base), scratch / "after", executable
132
147
  )
@@ -8,7 +8,7 @@ import sys
8
8
  from pathlib import Path
9
9
 
10
10
  MANIFEST = ".config/generated-schema-policy.json"
11
- MANIFEST_SHA256 = "45e7d3189eaf67b5a3d17a360f6fb7f02db0fec2640fe07ce68ab802962317c4"
11
+ MANIFEST_SHA256 = "dd1149e1c804a7684863c8e1ccd095ad19a3666d96199ac5b55007ce20487e96"
12
12
  INVENTORY = "immich_api/openapi_inventory.json"
13
13
 
14
14
 
@@ -10,6 +10,7 @@ Follow the [shared spec standard](https://github.com/Knuckles-Team/pipelines/blo
10
10
  | `IMMICH` | This repository's concept registry |
11
11
 
12
12
  - [`CONN-IMMICH-API`](immich-api/spec.md) — Integrate Immich Api through the shared connector contracts.
13
+ - [`CONN-IMMICH-API-CONNECTOR-CONTENT`](connector-content/spec.md) — The connector serves its packaged content.
13
14
 
14
15
  The lifecycle generator owns delivery receipts in `status.json`.
15
16
  Run `pipelines-hook spec-status --write` after reviewed source changes enter Git history.
@@ -0,0 +1,7 @@
1
+ # CONN-IMMICH-API-CONNECTOR-CONTENT — Design and implementation plan
2
+
3
+ Governing spec: [spec.md](spec.md).
4
+
5
+ ## Architecture
6
+
7
+ `pyproject.toml` declares `immich` as the connector identity. `create_mcp_server` resolves the packaged content of `immich_api` from it.
@@ -0,0 +1,9 @@
1
+ # CONN-IMMICH-API-CONNECTOR-CONTENT — Requirements
2
+
3
+ Governing spec: [spec.md](spec.md).
4
+
5
+ Each row is one requirement. A row names the file it touches and the test that proves it. The generator sets each row's state in `status.json`.
6
+
7
+ | ID | Requirement | Acceptance |
8
+ |---|---|---|
9
+ | `CONN-IMMICH-API-CONNECTOR-CONTENT-R001` | **Default content.** `pyproject.toml` declares `immich` as the single `agent_connector_sdk.connector` entry point. The server lists the packaged `skill://` and `ontology://` resources and the packaged prompts with no `content=` argument. Proving test: `tests/test_default_content_surfaces.py`. | `resources/list` includes `skill://` and `ontology://`; `prompts/list` includes each packaged prompt. |
@@ -0,0 +1,11 @@
1
+ # CONN-IMMICH-API-CONNECTOR-CONTENT — The connector serves its packaged content
2
+
3
+ Owner: immich-api. Cross-repo IDs: `SDK-CONNECTOR-CONTROL-R071`, `SDK-CONNECTOR-CONTROL-R073`.
4
+
5
+ ## Purpose and user stories
6
+
7
+ The `immich` server serves its packaged skills, prompts and ontology to any client, with no wiring of its own.
8
+
9
+ ## Requirements and acceptance
10
+
11
+ See [requirements.md](requirements.md).
@@ -0,0 +1,22 @@
1
+ {
2
+ "schema_version": 2,
3
+ "spec_id": "CONN-IMMICH-API-CONNECTOR-CONTENT",
4
+ "owner_repo": "immich-api",
5
+ "delivery_state": "VERIFIED",
6
+ "requirement_ids": [
7
+ "CONN-IMMICH-API-CONNECTOR-CONTENT-R001"
8
+ ],
9
+ "requirements": [
10
+ {
11
+ "id": "CONN-IMMICH-API-CONNECTOR-CONTENT-R001",
12
+ "title": "Default content",
13
+ "delivery_state": "VERIFIED",
14
+ "landed_in": [
15
+ "9c7f32a3d826"
16
+ ],
17
+ "verified_by": [
18
+ "tests/test_default_content_surfaces.py:15"
19
+ ]
20
+ }
21
+ ]
22
+ }
@@ -0,0 +1,5 @@
1
+ # CONN-IMMICH-API-CONNECTOR-CONTENT — Implementation tasks
2
+
3
+ Governing spec: [spec.md](spec.md). Design: [plan.md](plan.md). Rows: [requirements.md](requirements.md).
4
+
5
+ - [x] **CONN-IMMICH-API-CONNECTOR-CONTENT-R001:** Declare the fleet identity and serve the packaged content by default.
@@ -0,0 +1,7 @@
1
+ # CONN-IMMICH-API-CONNECTOR-CONTENT — Test specification
2
+
3
+ Governing spec: [spec.md](spec.md).
4
+
5
+ | Test ID | Requirement | Proving test | Expected observation |
6
+ |---|---|---|---|
7
+ | T-001 | `CONN-IMMICH-API-CONNECTOR-CONTENT-R001` | `tests/test_default_content_surfaces.py` | The listings include the packaged skills, ontology and prompts. |
@@ -0,0 +1,43 @@
1
+ """CONN-IMMICH-API-CONNECTOR-CONTENT-R001: the server lists its packaged skills, ontology and prompts by default."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import asyncio
6
+ import importlib
7
+ from pathlib import Path
8
+
9
+ import pytest
10
+ from fastmcp import Client
11
+
12
+ PACKAGE = "immich_api"
13
+ ROOT = Path(list(importlib.import_module(PACKAGE).__path__)[0])
14
+
15
+ pytestmark = pytest.mark.spec("CONN-IMMICH-API-CONNECTOR-CONTENT-R001")
16
+
17
+
18
+ def _server():
19
+ namespace = {"__name__": PACKAGE + ".mcp_server"}
20
+ exec(
21
+ "from agent_connector_sdk.mcp.server import create_mcp_server\n"
22
+ "result = create_mcp_server('immich', version='0', command_args=[])",
23
+ namespace,
24
+ )
25
+ return namespace["result"][1]
26
+
27
+
28
+ async def _listings():
29
+ async with Client(_server()) as client:
30
+ resources = {str(r.uri) for r in await client.list_resources()}
31
+ prompts = {p.name for p in await client.list_prompts()}
32
+ return resources, prompts
33
+
34
+
35
+ def test_default_content_surfaces() -> None:
36
+ resources, prompts = asyncio.run(_listings())
37
+ if list(ROOT.glob("skills/*/SKILL.md")):
38
+ assert any(u.startswith("skill://") for u in resources)
39
+ if list(ROOT.glob("ontology/*.ttl")):
40
+ assert any(u.startswith("ontology://immich/") for u in resources)
41
+ for path in ROOT.glob("prompts/*.json"):
42
+ if not path.name.startswith("_"):
43
+ assert path.stem in prompts
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