scion-sdk 0.5.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.
- scion_sdk-0.5.6/LICENSE +21 -0
- scion_sdk-0.5.6/PKG-INFO +198 -0
- scion_sdk-0.5.6/README.md +136 -0
- scion_sdk-0.5.6/agent_connector_sdk/__init__.py +23 -0
- scion_sdk-0.5.6/agent_connector_sdk/_contract_fields.py +92 -0
- scion_sdk-0.5.6/agent_connector_sdk/_extras.py +22 -0
- scion_sdk-0.5.6/agent_connector_sdk/_turtle.py +116 -0
- scion_sdk-0.5.6/agent_connector_sdk/_version.py +8 -0
- scion_sdk-0.5.6/agent_connector_sdk/a2a/__init__.py +46 -0
- scion_sdk-0.5.6/agent_connector_sdk/a2a/app.py +83 -0
- scion_sdk-0.5.6/agent_connector_sdk/a2a/client.py +117 -0
- scion_sdk-0.5.6/agent_connector_sdk/a2a/models.py +112 -0
- scion_sdk-0.5.6/agent_connector_sdk/access_contract.py +125 -0
- scion_sdk-0.5.6/agent_connector_sdk/adapters/__init__.py +1 -0
- scion_sdk-0.5.6/agent_connector_sdk/adapters/document_sources.py +441 -0
- scion_sdk-0.5.6/agent_connector_sdk/adapters/event_envelope.py +109 -0
- scion_sdk-0.5.6/agent_connector_sdk/adapters/event_errors.py +51 -0
- scion_sdk-0.5.6/agent_connector_sdk/adapters/event_feed.py +192 -0
- scion_sdk-0.5.6/agent_connector_sdk/adapters/event_feed_bindings.py +27 -0
- scion_sdk-0.5.6/agent_connector_sdk/adapters/event_feed_records.py +171 -0
- scion_sdk-0.5.6/agent_connector_sdk/adapters/event_identity.py +46 -0
- scion_sdk-0.5.6/agent_connector_sdk/adapters/mcp_tool.py +253 -0
- scion_sdk-0.5.6/agent_connector_sdk/adapters/mcp_tool_extract.py +130 -0
- scion_sdk-0.5.6/agent_connector_sdk/adapters/mcp_tool_fanout.py +198 -0
- scion_sdk-0.5.6/agent_connector_sdk/adapters/mcp_tool_lifecycle.py +246 -0
- scion_sdk-0.5.6/agent_connector_sdk/adapters/mcp_tool_paging.py +173 -0
- scion_sdk-0.5.6/agent_connector_sdk/adapters/mcp_tool_records.py +111 -0
- scion_sdk-0.5.6/agent_connector_sdk/adapters/tool_contract.py +77 -0
- scion_sdk-0.5.6/agent_connector_sdk/adapters/web_fetch.py +221 -0
- scion_sdk-0.5.6/agent_connector_sdk/adapters/web_fetch_helpers.py +73 -0
- scion_sdk-0.5.6/agent_connector_sdk/artifacts/__init__.py +17 -0
- scion_sdk-0.5.6/agent_connector_sdk/artifacts/annotations.py +109 -0
- scion_sdk-0.5.6/agent_connector_sdk/artifacts/common.py +57 -0
- scion_sdk-0.5.6/agent_connector_sdk/artifacts/ontology_imports.py +132 -0
- scion_sdk-0.5.6/agent_connector_sdk/artifacts/pack.py +199 -0
- scion_sdk-0.5.6/agent_connector_sdk/artifacts/prompts.py +129 -0
- scion_sdk-0.5.6/agent_connector_sdk/artifacts/prompts_helpers.py +128 -0
- scion_sdk-0.5.6/agent_connector_sdk/artifacts/resource_derivation.py +313 -0
- scion_sdk-0.5.6/agent_connector_sdk/artifacts/resource_descriptor.py +252 -0
- scion_sdk-0.5.6/agent_connector_sdk/artifacts/resources.py +70 -0
- scion_sdk-0.5.6/agent_connector_sdk/artifacts/skills.py +64 -0
- scion_sdk-0.5.6/agent_connector_sdk/artifacts/tools.py +74 -0
- scion_sdk-0.5.6/agent_connector_sdk/auth/__init__.py +22 -0
- scion_sdk-0.5.6/agent_connector_sdk/auth/browser.py +570 -0
- scion_sdk-0.5.6/agent_connector_sdk/auth/client_credentials.py +165 -0
- scion_sdk-0.5.6/agent_connector_sdk/auth/declare.py +393 -0
- scion_sdk-0.5.6/agent_connector_sdk/auth/delegation.py +266 -0
- scion_sdk-0.5.6/agent_connector_sdk/auth/oidc.py +151 -0
- scion_sdk-0.5.6/agent_connector_sdk/auth/refresh_token.py +101 -0
- scion_sdk-0.5.6/agent_connector_sdk/auth/rotating.py +117 -0
- scion_sdk-0.5.6/agent_connector_sdk/auth/static.py +85 -0
- scion_sdk-0.5.6/agent_connector_sdk/auth/tokens.py +96 -0
- scion_sdk-0.5.6/agent_connector_sdk/auth/values.py +33 -0
- scion_sdk-0.5.6/agent_connector_sdk/certify/__init__.py +1 -0
- scion_sdk-0.5.6/agent_connector_sdk/certify/certification.py +102 -0
- scion_sdk-0.5.6/agent_connector_sdk/certify/checkout.py +58 -0
- scion_sdk-0.5.6/agent_connector_sdk/certify/cli.py +185 -0
- scion_sdk-0.5.6/agent_connector_sdk/certify/declared_coverage.py +50 -0
- scion_sdk-0.5.6/agent_connector_sdk/certify/fingerprints.py +106 -0
- scion_sdk-0.5.6/agent_connector_sdk/certify/listing.py +65 -0
- scion_sdk-0.5.6/agent_connector_sdk/certify/options.py +46 -0
- scion_sdk-0.5.6/agent_connector_sdk/certify/verdicts.py +90 -0
- scion_sdk-0.5.6/agent_connector_sdk/cli.py +27 -0
- scion_sdk-0.5.6/agent_connector_sdk/compute/__init__.py +25 -0
- scion_sdk-0.5.6/agent_connector_sdk/compute/engine.py +203 -0
- scion_sdk-0.5.6/agent_connector_sdk/config.py +274 -0
- scion_sdk-0.5.6/agent_connector_sdk/config_git.py +20 -0
- scion_sdk-0.5.6/agent_connector_sdk/config_mounts.py +137 -0
- scion_sdk-0.5.6/agent_connector_sdk/connector.py +355 -0
- scion_sdk-0.5.6/agent_connector_sdk/connector_hooks.py +196 -0
- scion_sdk-0.5.6/agent_connector_sdk/connector_identity.py +249 -0
- scion_sdk-0.5.6/agent_connector_sdk/contracts.py +146 -0
- scion_sdk-0.5.6/agent_connector_sdk/credentials/__init__.py +17 -0
- scion_sdk-0.5.6/agent_connector_sdk/credentials/openbao.py +128 -0
- scion_sdk-0.5.6/agent_connector_sdk/credentials/provider.py +68 -0
- scion_sdk-0.5.6/agent_connector_sdk/credentials/provider_profile.py +315 -0
- scion_sdk-0.5.6/agent_connector_sdk/credentials/references.py +93 -0
- scion_sdk-0.5.6/agent_connector_sdk/credentials/resolution.py +86 -0
- scion_sdk-0.5.6/agent_connector_sdk/credentials/resolver.py +55 -0
- scion_sdk-0.5.6/agent_connector_sdk/credentials/runtime_references.py +105 -0
- scion_sdk-0.5.6/agent_connector_sdk/credentials/sensitivity.py +111 -0
- scion_sdk-0.5.6/agent_connector_sdk/credentials/source.py +487 -0
- scion_sdk-0.5.6/agent_connector_sdk/current_plan.py +67 -0
- scion_sdk-0.5.6/agent_connector_sdk/data_prep/__init__.py +128 -0
- scion_sdk-0.5.6/agent_connector_sdk/data_prep/_base.py +11 -0
- scion_sdk-0.5.6/agent_connector_sdk/data_prep/_classification.py +14 -0
- scion_sdk-0.5.6/agent_connector_sdk/data_prep/certification/__init__.py +47 -0
- scion_sdk-0.5.6/agent_connector_sdk/data_prep/certification/adapters.py +128 -0
- scion_sdk-0.5.6/agent_connector_sdk/data_prep/certification/job.py +226 -0
- scion_sdk-0.5.6/agent_connector_sdk/data_prep/certification/models.py +242 -0
- scion_sdk-0.5.6/agent_connector_sdk/data_prep/kernel.py +1285 -0
- scion_sdk-0.5.6/agent_connector_sdk/data_prep/models.py +516 -0
- scion_sdk-0.5.6/agent_connector_sdk/data_prep/profiling.py +178 -0
- scion_sdk-0.5.6/agent_connector_sdk/decide/__init__.py +110 -0
- scion_sdk-0.5.6/agent_connector_sdk/decide/consumers.py +115 -0
- scion_sdk-0.5.6/agent_connector_sdk/decide/epistemic_graph.py +190 -0
- scion_sdk-0.5.6/agent_connector_sdk/decide/options.py +78 -0
- scion_sdk-0.5.6/agent_connector_sdk/decide/outcome.py +137 -0
- scion_sdk-0.5.6/agent_connector_sdk/decide/points.py +121 -0
- scion_sdk-0.5.6/agent_connector_sdk/decide/transport.py +120 -0
- scion_sdk-0.5.6/agent_connector_sdk/discovery.py +170 -0
- scion_sdk-0.5.6/agent_connector_sdk/earth_observations/__init__.py +8 -0
- scion_sdk-0.5.6/agent_connector_sdk/earth_observations/records.py +113 -0
- scion_sdk-0.5.6/agent_connector_sdk/embeddings.py +264 -0
- scion_sdk-0.5.6/agent_connector_sdk/entitlements.py +217 -0
- scion_sdk-0.5.6/agent_connector_sdk/exceptions.py +69 -0
- scion_sdk-0.5.6/agent_connector_sdk/exposure.py +22 -0
- scion_sdk-0.5.6/agent_connector_sdk/file_lock.py +263 -0
- scion_sdk-0.5.6/agent_connector_sdk/finance/__init__.py +7 -0
- scion_sdk-0.5.6/agent_connector_sdk/finance/account.py +79 -0
- scion_sdk-0.5.6/agent_connector_sdk/finance/alpaca_account.py +71 -0
- scion_sdk-0.5.6/agent_connector_sdk/finance/alpaca_stocks.py +107 -0
- scion_sdk-0.5.6/agent_connector_sdk/finance/banking.py +206 -0
- scion_sdk-0.5.6/agent_connector_sdk/finance/central_bank_calendar.py +106 -0
- scion_sdk-0.5.6/agent_connector_sdk/finance/crypto.py +99 -0
- scion_sdk-0.5.6/agent_connector_sdk/finance/csv_import.py +189 -0
- scion_sdk-0.5.6/agent_connector_sdk/finance/errors.py +29 -0
- scion_sdk-0.5.6/agent_connector_sdk/finance/etf_flows.py +89 -0
- scion_sdk-0.5.6/agent_connector_sdk/finance/feeds.py +244 -0
- scion_sdk-0.5.6/agent_connector_sdk/finance/fred_series.py +109 -0
- scion_sdk-0.5.6/agent_connector_sdk/finance/market_data.py +286 -0
- scion_sdk-0.5.6/agent_connector_sdk/finance/multi_asset.py +103 -0
- scion_sdk-0.5.6/agent_connector_sdk/finance/records.py +134 -0
- scion_sdk-0.5.6/agent_connector_sdk/finance/strategy_export.py +297 -0
- scion_sdk-0.5.6/agent_connector_sdk/http/__init__.py +20 -0
- scion_sdk-0.5.6/agent_connector_sdk/http/bodies.py +81 -0
- scion_sdk-0.5.6/agent_connector_sdk/http/client.py +142 -0
- scion_sdk-0.5.6/agent_connector_sdk/http/egress.py +508 -0
- scion_sdk-0.5.6/agent_connector_sdk/http/errors.py +136 -0
- scion_sdk-0.5.6/agent_connector_sdk/http/flow.py +112 -0
- scion_sdk-0.5.6/agent_connector_sdk/http/options.py +124 -0
- scion_sdk-0.5.6/agent_connector_sdk/http/pagination.py +139 -0
- scion_sdk-0.5.6/agent_connector_sdk/http/problems.py +126 -0
- scion_sdk-0.5.6/agent_connector_sdk/http/redaction.py +54 -0
- scion_sdk-0.5.6/agent_connector_sdk/http/responses.py +112 -0
- scion_sdk-0.5.6/agent_connector_sdk/http/retry.py +145 -0
- scion_sdk-0.5.6/agent_connector_sdk/http/safe_post.py +70 -0
- scion_sdk-0.5.6/agent_connector_sdk/http/support.py +453 -0
- scion_sdk-0.5.6/agent_connector_sdk/http/transport.py +136 -0
- scion_sdk-0.5.6/agent_connector_sdk/httpsupport/__init__.py +11 -0
- scion_sdk-0.5.6/agent_connector_sdk/httpsupport/auth.py +137 -0
- scion_sdk-0.5.6/agent_connector_sdk/httpsupport/client_protocol.py +176 -0
- scion_sdk-0.5.6/agent_connector_sdk/httpsupport/pagination.py +434 -0
- scion_sdk-0.5.6/agent_connector_sdk/httpsupport/rate_limit.py +246 -0
- scion_sdk-0.5.6/agent_connector_sdk/httpsupport/redaction.py +145 -0
- scion_sdk-0.5.6/agent_connector_sdk/identifiers.py +55 -0
- scion_sdk-0.5.6/agent_connector_sdk/identity.py +87 -0
- scion_sdk-0.5.6/agent_connector_sdk/ingest/__init__.py +162 -0
- scion_sdk-0.5.6/agent_connector_sdk/ingest/channel.py +64 -0
- scion_sdk-0.5.6/agent_connector_sdk/ingest/engine.py +170 -0
- scion_sdk-0.5.6/agent_connector_sdk/ingest/errors.py +17 -0
- scion_sdk-0.5.6/agent_connector_sdk/ingest/for_each.py +67 -0
- scion_sdk-0.5.6/agent_connector_sdk/ingest/live_declaration.py +298 -0
- scion_sdk-0.5.6/agent_connector_sdk/ingest/mapping.py +272 -0
- scion_sdk-0.5.6/agent_connector_sdk/ingest/model.py +196 -0
- scion_sdk-0.5.6/agent_connector_sdk/ingest/paging.py +143 -0
- scion_sdk-0.5.6/agent_connector_sdk/ingest/privacy.py +122 -0
- scion_sdk-0.5.6/agent_connector_sdk/ingest/records.py +48 -0
- scion_sdk-0.5.6/agent_connector_sdk/ingest/request.py +227 -0
- scion_sdk-0.5.6/agent_connector_sdk/ingest/service.py +196 -0
- scion_sdk-0.5.6/agent_connector_sdk/ingest/source_sync.py +671 -0
- scion_sdk-0.5.6/agent_connector_sdk/ingest/sources.py +126 -0
- scion_sdk-0.5.6/agent_connector_sdk/ingest/stream.py +424 -0
- scion_sdk-0.5.6/agent_connector_sdk/ingest/tools.py +126 -0
- scion_sdk-0.5.6/agent_connector_sdk/ingest/transport.py +82 -0
- scion_sdk-0.5.6/agent_connector_sdk/library_state.py +76 -0
- scion_sdk-0.5.6/agent_connector_sdk/manifest/__init__.py +1 -0
- scion_sdk-0.5.6/agent_connector_sdk/manifest/declaration.py +123 -0
- scion_sdk-0.5.6/agent_connector_sdk/manifest/live_contract.py +229 -0
- scion_sdk-0.5.6/agent_connector_sdk/manifest/model.py +64 -0
- scion_sdk-0.5.6/agent_connector_sdk/manifest/presets.py +272 -0
- scion_sdk-0.5.6/agent_connector_sdk/manifest/provider_runtime.py +64 -0
- scion_sdk-0.5.6/agent_connector_sdk/manifest/tool_schema.py +174 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/__init__.py +9 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/action_dispatch.py +235 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/action_split.py +753 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/auth/__init__.py +14 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/auth/factory.py +60 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/auth/jwt.py +140 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/auth/policy.py +103 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/auth/proxies.py +127 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/auth/static.py +113 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/auth/verifiers.py +74 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/body_boundary.py +99 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/change_events.py +78 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/concurrency.py +98 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/confirmation.py +141 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/content.py +322 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/context.py +145 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/env_drift.py +619 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/exposure.py +7 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/graphql.py +107 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/http_boundary.py +126 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/method_tools.py +655 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/middleware.py +51 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/network.py +225 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/network_inputs.py +197 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/network_validation.py +133 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/parser.py +134 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/registry.py +162 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/schema_disclosure.py +157 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/schema_disclosure_models.py +62 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/schema_disclosure_provider.py +112 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/served_security.py +166 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/server.py +187 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/tool_surface.py +443 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/versioning.py +33 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/visibility.py +62 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/visibility_filters.py +61 -0
- scion_sdk-0.5.6/agent_connector_sdk/mcp/visibility_policy.py +148 -0
- scion_sdk-0.5.6/agent_connector_sdk/ontology/access_contract.ttl +50 -0
- scion_sdk-0.5.6/agent_connector_sdk/paths.py +185 -0
- scion_sdk-0.5.6/agent_connector_sdk/payments.py +289 -0
- scion_sdk-0.5.6/agent_connector_sdk/ports/__init__.py +21 -0
- scion_sdk-0.5.6/agent_connector_sdk/ports/artifact_kind.py +27 -0
- scion_sdk-0.5.6/agent_connector_sdk/ports/audit_reservation.py +26 -0
- scion_sdk-0.5.6/agent_connector_sdk/ports/authorization_verifier.py +23 -0
- scion_sdk-0.5.6/agent_connector_sdk/ports/change_source.py +43 -0
- scion_sdk-0.5.6/agent_connector_sdk/ports/connector_registry.py +30 -0
- scion_sdk-0.5.6/agent_connector_sdk/ports/decide_runner.py +80 -0
- scion_sdk-0.5.6/agent_connector_sdk/ports/errors.py +39 -0
- scion_sdk-0.5.6/agent_connector_sdk/ports/repair_proposals.py +28 -0
- scion_sdk-0.5.6/agent_connector_sdk/ports/session.py +103 -0
- scion_sdk-0.5.6/agent_connector_sdk/ports/sink.py +59 -0
- scion_sdk-0.5.6/agent_connector_sdk/ports/source_adapter.py +44 -0
- scion_sdk-0.5.6/agent_connector_sdk/ports/transport.py +23 -0
- scion_sdk-0.5.6/agent_connector_sdk/ports/web_source.py +318 -0
- scion_sdk-0.5.6/agent_connector_sdk/ports/writeback.py +36 -0
- scion_sdk-0.5.6/agent_connector_sdk/ports/writeback_ledger.py +50 -0
- scion_sdk-0.5.6/agent_connector_sdk/ports/writeback_transport.py +46 -0
- scion_sdk-0.5.6/agent_connector_sdk/privacy.py +169 -0
- scion_sdk-0.5.6/agent_connector_sdk/privacy_pii.py +82 -0
- scion_sdk-0.5.6/agent_connector_sdk/privacy_reference.py +44 -0
- scion_sdk-0.5.6/agent_connector_sdk/privacy_rules.py +251 -0
- scion_sdk-0.5.6/agent_connector_sdk/progress.py +38 -0
- scion_sdk-0.5.6/agent_connector_sdk/py.typed +0 -0
- scion_sdk-0.5.6/agent_connector_sdk/repository/__init__.py +54 -0
- scion_sdk-0.5.6/agent_connector_sdk/repository/errors.py +7 -0
- scion_sdk-0.5.6/agent_connector_sdk/repository/identity.py +43 -0
- scion_sdk-0.5.6/agent_connector_sdk/repository/indexing.py +107 -0
- scion_sdk-0.5.6/agent_connector_sdk/repository/local_git.py +178 -0
- scion_sdk-0.5.6/agent_connector_sdk/repository/manifest.py +65 -0
- scion_sdk-0.5.6/agent_connector_sdk/repository/models.py +163 -0
- scion_sdk-0.5.6/agent_connector_sdk/repository/provider.py +37 -0
- scion_sdk-0.5.6/agent_connector_sdk/repository/ref_walk_provider.py +42 -0
- scion_sdk-0.5.6/agent_connector_sdk/repository/refs.py +59 -0
- scion_sdk-0.5.6/agent_connector_sdk/repository/transport.py +144 -0
- scion_sdk-0.5.6/agent_connector_sdk/repository/tree_batch.py +117 -0
- scion_sdk-0.5.6/agent_connector_sdk/repository/walk.py +104 -0
- scion_sdk-0.5.6/agent_connector_sdk/runner/__init__.py +16 -0
- scion_sdk-0.5.6/agent_connector_sdk/runner/backoff.py +26 -0
- scion_sdk-0.5.6/agent_connector_sdk/runner/cli.py +189 -0
- scion_sdk-0.5.6/agent_connector_sdk/runner/composition.py +212 -0
- scion_sdk-0.5.6/agent_connector_sdk/runner/credentialed_endpoint.py +31 -0
- scion_sdk-0.5.6/agent_connector_sdk/runner/descriptors.py +107 -0
- scion_sdk-0.5.6/agent_connector_sdk/runner/endpoints.py +99 -0
- scion_sdk-0.5.6/agent_connector_sdk/runner/errors.py +57 -0
- scion_sdk-0.5.6/agent_connector_sdk/runner/health_reporting.py +58 -0
- scion_sdk-0.5.6/agent_connector_sdk/runner/health_server.py +142 -0
- scion_sdk-0.5.6/agent_connector_sdk/runner/health_state.py +185 -0
- scion_sdk-0.5.6/agent_connector_sdk/runner/logs.py +53 -0
- scion_sdk-0.5.6/agent_connector_sdk/runner/plans.py +196 -0
- scion_sdk-0.5.6/agent_connector_sdk/runner/provisioning.py +85 -0
- scion_sdk-0.5.6/agent_connector_sdk/runner/services.py +34 -0
- scion_sdk-0.5.6/agent_connector_sdk/runner/sink_probe.py +25 -0
- scion_sdk-0.5.6/agent_connector_sdk/runner/static_registry.py +63 -0
- scion_sdk-0.5.6/agent_connector_sdk/runner/supervisor.py +126 -0
- scion_sdk-0.5.6/agent_connector_sdk/runner/syncing.py +226 -0
- scion_sdk-0.5.6/agent_connector_sdk/runner/worker.py +203 -0
- scion_sdk-0.5.6/agent_connector_sdk/schema_contract.py +108 -0
- scion_sdk-0.5.6/agent_connector_sdk/schema_drift.py +202 -0
- scion_sdk-0.5.6/agent_connector_sdk/schema_repair.py +61 -0
- scion_sdk-0.5.6/agent_connector_sdk/signing.py +110 -0
- scion_sdk-0.5.6/agent_connector_sdk/sinks/__init__.py +1 -0
- scion_sdk-0.5.6/agent_connector_sdk/sinks/epistemic_graph.py +198 -0
- scion_sdk-0.5.6/agent_connector_sdk/skills/__init__.py +9 -0
- scion_sdk-0.5.6/agent_connector_sdk/skills/agent-connector-sdk-development/SKILL.md +203 -0
- scion_sdk-0.5.6/agent_connector_sdk/source_connectors/__init__.py +71 -0
- scion_sdk-0.5.6/agent_connector_sdk/source_connectors/base.py +224 -0
- scion_sdk-0.5.6/agent_connector_sdk/source_connectors/checkpoint.py +73 -0
- scion_sdk-0.5.6/agent_connector_sdk/source_connectors/connectors/__init__.py +21 -0
- scion_sdk-0.5.6/agent_connector_sdk/source_connectors/connectors/arxiv.py +294 -0
- scion_sdk-0.5.6/agent_connector_sdk/source_connectors/connectors/database.py +350 -0
- scion_sdk-0.5.6/agent_connector_sdk/source_connectors/connectors/graphql_document.py +2943 -0
- scion_sdk-0.5.6/agent_connector_sdk/source_connectors/connectors/mcp_package.py +326 -0
- scion_sdk-0.5.6/agent_connector_sdk/source_connectors/connectors/package_manifest.py +262 -0
- scion_sdk-0.5.6/agent_connector_sdk/source_connectors/connectors/rest.py +259 -0
- scion_sdk-0.5.6/agent_connector_sdk/source_connectors/connectors/rss.py +252 -0
- scion_sdk-0.5.6/agent_connector_sdk/source_connectors/connectors/web.py +195 -0
- scion_sdk-0.5.6/agent_connector_sdk/source_connectors/http_safety.py +1114 -0
- scion_sdk-0.5.6/agent_connector_sdk/source_connectors/registry.py +173 -0
- scion_sdk-0.5.6/agent_connector_sdk/source_connectors/universal.py +977 -0
- scion_sdk-0.5.6/agent_connector_sdk/streaming.py +271 -0
- scion_sdk-0.5.6/agent_connector_sdk/taxonomy/__init__.py +8 -0
- scion_sdk-0.5.6/agent_connector_sdk/taxonomy/records.py +78 -0
- scion_sdk-0.5.6/agent_connector_sdk/testing/__init__.py +19 -0
- scion_sdk-0.5.6/agent_connector_sdk/testing/artifact_kinds.py +125 -0
- scion_sdk-0.5.6/agent_connector_sdk/testing/certificates.py +113 -0
- scion_sdk-0.5.6/agent_connector_sdk/testing/conformance.py +287 -0
- scion_sdk-0.5.6/agent_connector_sdk/testing/duplicate_symbol_scan.py +88 -0
- scion_sdk-0.5.6/agent_connector_sdk/testing/fleet_migration.py +106 -0
- scion_sdk-0.5.6/agent_connector_sdk/testing/http_clients.py +144 -0
- scion_sdk-0.5.6/agent_connector_sdk/testing/http_server.py +198 -0
- scion_sdk-0.5.6/agent_connector_sdk/testing/ontology_rollup.py +80 -0
- scion_sdk-0.5.6/agent_connector_sdk/testing/plugin.py +85 -0
- scion_sdk-0.5.6/agent_connector_sdk/testing/readiness.py +10 -0
- scion_sdk-0.5.6/agent_connector_sdk/testing/repair_proposals.py +27 -0
- scion_sdk-0.5.6/agent_connector_sdk/testing/results.py +41 -0
- scion_sdk-0.5.6/agent_connector_sdk/testing/sinks.py +278 -0
- scion_sdk-0.5.6/agent_connector_sdk/testing/source_adapters.py +174 -0
- scion_sdk-0.5.6/agent_connector_sdk/testing/web_source_conformance.py +250 -0
- scion_sdk-0.5.6/agent_connector_sdk/testing/writeback.py +219 -0
- scion_sdk-0.5.6/agent_connector_sdk/testing/writeback_audit.py +41 -0
- scion_sdk-0.5.6/agent_connector_sdk/tls/__init__.py +16 -0
- scion_sdk-0.5.6/agent_connector_sdk/tls/context.py +62 -0
- scion_sdk-0.5.6/agent_connector_sdk/tls/errors.py +13 -0
- scion_sdk-0.5.6/agent_connector_sdk/tls/material.py +108 -0
- scion_sdk-0.5.6/agent_connector_sdk/tls/profile.py +116 -0
- scion_sdk-0.5.6/agent_connector_sdk/tls/resolve.py +244 -0
- scion_sdk-0.5.6/agent_connector_sdk/tls/selection.py +205 -0
- scion_sdk-0.5.6/agent_connector_sdk/transports/__init__.py +1 -0
- scion_sdk-0.5.6/agent_connector_sdk/transports/graphql.py +329 -0
- scion_sdk-0.5.6/agent_connector_sdk/transports/mcp.py +91 -0
- scion_sdk-0.5.6/agent_connector_sdk/transports/mcp_changes.py +130 -0
- scion_sdk-0.5.6/agent_connector_sdk/transports/mcp_session.py +140 -0
- scion_sdk-0.5.6/agent_connector_sdk/utilities.py +134 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/__init__.py +36 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/_records.py +66 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/a2a.py +125 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/a2a_helpers.py +101 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/ansible.py +70 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/archer.py +118 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/archimate.py +103 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/aris.py +110 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/caddy.py +93 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/camunda.py +169 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/ciso_assistant.py +167 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/ciso_assistant_helpers.py +73 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/contract.py +97 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/egeria.py +254 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/egeria_helpers.py +79 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/emerald.py +126 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/erpnext.py +113 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/erpnext_helpers.py +196 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/grafana.py +152 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/grafana_helpers.py +50 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/home_assistant.py +86 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/infra.py +105 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/infra_helpers.py +95 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/kafka.py +98 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/keycloak.py +121 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/leanix.py +226 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/lgtm.py +129 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/mealie.py +128 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/microsoft.py +106 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/nextcloud.py +136 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/odoo.py +127 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/okta.py +161 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/portainer.py +136 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/salesforce.py +102 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/servicenow.py +163 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/servicenow_helpers.py +111 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/social.py +201 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/technitium_dns.py +111 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/twenty.py +122 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/twenty_helpers.py +88 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/uptime_kuma.py +74 -0
- scion_sdk-0.5.6/agent_connector_sdk/vendor_extractors/wger.py +140 -0
- scion_sdk-0.5.6/agent_connector_sdk/voice_supply_chain/__init__.py +14 -0
- scion_sdk-0.5.6/agent_connector_sdk/voice_supply_chain/license_registry.py +110 -0
- scion_sdk-0.5.6/agent_connector_sdk/voice_supply_chain/manifest.py +178 -0
- scion_sdk-0.5.6/agent_connector_sdk/voice_supply_chain/store.py +14 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback/__init__.py +1 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback/authorization.py +95 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback/connector.py +122 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback/durable_files.py +33 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback/durable_ledger.py +151 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback/durable_transport.py +167 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback/epistemic_graph.py +121 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback/errors.py +56 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback/memory.py +184 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback/models.py +33 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback/recovery.py +175 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback/service.py +152 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback/validation.py +97 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback_sinks/__init__.py +63 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback_sinks/_env.py +66 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback_sinks/core.py +506 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback_sinks/governed.py +420 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback_sinks/models.py +15 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback_sinks/sinks/__init__.py +1 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback_sinks/sinks/ansible.py +64 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback_sinks/sinks/archimate.py +93 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback_sinks/sinks/capability.py +215 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback_sinks/sinks/ciso_assistant.py +95 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback_sinks/sinks/egeria.py +92 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback_sinks/sinks/emerald.py +103 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback_sinks/sinks/erpnext.py +144 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback_sinks/sinks/home_assistant.py +74 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback_sinks/sinks/identity.py +158 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback_sinks/sinks/issue_tracker.py +258 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback_sinks/sinks/leanix.py +195 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback_sinks/sinks/legal.py +81 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback_sinks/sinks/mealie.py +90 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback_sinks/sinks/nextcloud.py +108 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback_sinks/sinks/ops.py +155 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback_sinks/sinks/process.py +438 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback_sinks/sinks/salesforce.py +98 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback_sinks/sinks/servicenow.py +271 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback_sinks/sinks/twenty.py +105 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback_sinks/sinks/wger.py +108 -0
- scion_sdk-0.5.6/agent_connector_sdk/writeback_sinks/spec_link.py +262 -0
- scion_sdk-0.5.6/pyproject.toml +502 -0
- scion_sdk-0.5.6/scion_sdk.egg-info/PKG-INFO +198 -0
- scion_sdk-0.5.6/scion_sdk.egg-info/SOURCES.txt +571 -0
- scion_sdk-0.5.6/scion_sdk.egg-info/dependency_links.txt +1 -0
- scion_sdk-0.5.6/scion_sdk.egg-info/entry_points.txt +25 -0
- scion_sdk-0.5.6/scion_sdk.egg-info/requires.txt +54 -0
- scion_sdk-0.5.6/scion_sdk.egg-info/top_level.txt +1 -0
- scion_sdk-0.5.6/setup.cfg +4 -0
- scion_sdk-0.5.6/tests/test_a2a_protocol.py +147 -0
- scion_sdk-0.5.6/tests/test_access_contract.py +125 -0
- scion_sdk-0.5.6/tests/test_access_contract_helpers.py +24 -0
- scion_sdk-0.5.6/tests/test_action_split.py +130 -0
- scion_sdk-0.5.6/tests/test_action_split_dedupe.py +415 -0
- scion_sdk-0.5.6/tests/test_adapters_web_fetch.py +70 -0
- scion_sdk-0.5.6/tests/test_adapters_web_fetch_source_adapter.py +122 -0
- scion_sdk-0.5.6/tests/test_agent_config.py +60 -0
- scion_sdk-0.5.6/tests/test_artifacts_discovery.py +510 -0
- scion_sdk-0.5.6/tests/test_au_helper_parity.py +73 -0
- scion_sdk-0.5.6/tests/test_auth_declarations.py +331 -0
- scion_sdk-0.5.6/tests/test_base_install_mcp_free.py +95 -0
- scion_sdk-0.5.6/tests/test_centralized_extras.py +54 -0
- scion_sdk-0.5.6/tests/test_certify_declared_coverage.py +31 -0
- scion_sdk-0.5.6/tests/test_certify_surface.py +129 -0
- scion_sdk-0.5.6/tests/test_change_subscriptions.py +183 -0
- scion_sdk-0.5.6/tests/test_check_public_specs_gate.py +51 -0
- scion_sdk-0.5.6/tests/test_client_credentials_literal_secret.py +78 -0
- scion_sdk-0.5.6/tests/test_compatibility_distribution.py +59 -0
- scion_sdk-0.5.6/tests/test_compute_adapter.py +144 -0
- scion_sdk-0.5.6/tests/test_conformance_plugin.py +166 -0
- scion_sdk-0.5.6/tests/test_connector_hooks.py +407 -0
- scion_sdk-0.5.6/tests/test_connector_identity.py +86 -0
- scion_sdk-0.5.6/tests/test_connector_run.py +231 -0
- scion_sdk-0.5.6/tests/test_connector_runtime_adds.py +299 -0
- scion_sdk-0.5.6/tests/test_connector_runtime_from_au.py +134 -0
- scion_sdk-0.5.6/tests/test_contracts_and_sink.py +608 -0
- scion_sdk-0.5.6/tests/test_credential_provider.py +42 -0
- scion_sdk-0.5.6/tests/test_credential_sensitivity.py +45 -0
- scion_sdk-0.5.6/tests/test_credentials.py +160 -0
- scion_sdk-0.5.6/tests/test_current_plan.py +134 -0
- scion_sdk-0.5.6/tests/test_decide_consumers.py +248 -0
- scion_sdk-0.5.6/tests/test_decide_epistemic_graph.py +347 -0
- scion_sdk-0.5.6/tests/test_default_content.py +50 -0
- scion_sdk-0.5.6/tests/test_doc_privacy_scanner.py +51 -0
- scion_sdk-0.5.6/tests/test_document_sources.py +328 -0
- scion_sdk-0.5.6/tests/test_duplicate_symbol_scan.py +91 -0
- scion_sdk-0.5.6/tests/test_earth_observation_records.py +99 -0
- scion_sdk-0.5.6/tests/test_eg_pack_entry_kinds.py +108 -0
- scion_sdk-0.5.6/tests/test_embeddings.py +157 -0
- scion_sdk-0.5.6/tests/test_entitlement_catalogs.py +57 -0
- scion_sdk-0.5.6/tests/test_entitlements.py +110 -0
- scion_sdk-0.5.6/tests/test_event_feeds.py +584 -0
- scion_sdk-0.5.6/tests/test_extraction.py +399 -0
- scion_sdk-0.5.6/tests/test_finance_account_read.py +76 -0
- scion_sdk-0.5.6/tests/test_finance_alpaca_stocks.py +90 -0
- scion_sdk-0.5.6/tests/test_finance_banking.py +75 -0
- scion_sdk-0.5.6/tests/test_finance_central_bank_calendar.py +99 -0
- scion_sdk-0.5.6/tests/test_finance_crypto.py +79 -0
- scion_sdk-0.5.6/tests/test_finance_csv_import.py +96 -0
- scion_sdk-0.5.6/tests/test_finance_etf_flows.py +78 -0
- scion_sdk-0.5.6/tests/test_finance_feeds.py +68 -0
- scion_sdk-0.5.6/tests/test_finance_fred_series.py +96 -0
- scion_sdk-0.5.6/tests/test_finance_market_data.py +116 -0
- scion_sdk-0.5.6/tests/test_finance_records.py +220 -0
- scion_sdk-0.5.6/tests/test_finance_strategy_export.py +82 -0
- scion_sdk-0.5.6/tests/test_fleet_migration_scan.py +106 -0
- scion_sdk-0.5.6/tests/test_for_each.py +270 -0
- scion_sdk-0.5.6/tests/test_foundation.py +180 -0
- scion_sdk-0.5.6/tests/test_graphql_client.py +213 -0
- scion_sdk-0.5.6/tests/test_http_client.py +552 -0
- scion_sdk-0.5.6/tests/test_http_dns_pinned_egress.py +223 -0
- scion_sdk-0.5.6/tests/test_http_egress.py +68 -0
- scion_sdk-0.5.6/tests/test_http_units.py +215 -0
- scion_sdk-0.5.6/tests/test_identifiers.py +47 -0
- scion_sdk-0.5.6/tests/test_ingest.py +391 -0
- scion_sdk-0.5.6/tests/test_ingest_citable_fields.py +78 -0
- scion_sdk-0.5.6/tests/test_ingest_mapping.py +113 -0
- scion_sdk-0.5.6/tests/test_ingest_strategies.py +337 -0
- scion_sdk-0.5.6/tests/test_ingest_stream.py +250 -0
- scion_sdk-0.5.6/tests/test_library_state.py +67 -0
- scion_sdk-0.5.6/tests/test_load_declaration.py +83 -0
- scion_sdk-0.5.6/tests/test_mcp_client_credentials.py +274 -0
- scion_sdk-0.5.6/tests/test_mcp_confirmation_roundtrip.py +233 -0
- scion_sdk-0.5.6/tests/test_mcp_dispatch.py +228 -0
- scion_sdk-0.5.6/tests/test_mcp_graphql_context.py +94 -0
- scion_sdk-0.5.6/tests/test_mcp_native_primitives.py +103 -0
- scion_sdk-0.5.6/tests/test_method_tools.py +92 -0
- scion_sdk-0.5.6/tests/test_network_serving.py +221 -0
- scion_sdk-0.5.6/tests/test_operation_tools.py +418 -0
- scion_sdk-0.5.6/tests/test_outbound_auth.py +362 -0
- scion_sdk-0.5.6/tests/test_pack_ontology_imports.py +114 -0
- scion_sdk-0.5.6/tests/test_pack_resource_schema.py +52 -0
- scion_sdk-0.5.6/tests/test_pagination_modes.py +193 -0
- scion_sdk-0.5.6/tests/test_paths_mcp_config.py +25 -0
- scion_sdk-0.5.6/tests/test_payments.py +119 -0
- scion_sdk-0.5.6/tests/test_platform_config_dir.py +124 -0
- scion_sdk-0.5.6/tests/test_privacy.py +94 -0
- scion_sdk-0.5.6/tests/test_progress_and_http_conformance.py +85 -0
- scion_sdk-0.5.6/tests/test_prompt_content.py +328 -0
- scion_sdk-0.5.6/tests/test_provider_runtime.py +52 -0
- scion_sdk-0.5.6/tests/test_public_docs_structure.py +50 -0
- scion_sdk-0.5.6/tests/test_public_surface_source_ingest.py +102 -0
- scion_sdk-0.5.6/tests/test_public_surface_writeback_sinks.py +64 -0
- scion_sdk-0.5.6/tests/test_registry_visibility_content.py +284 -0
- scion_sdk-0.5.6/tests/test_release_quality_r001_r005.py +481 -0
- scion_sdk-0.5.6/tests/test_repository_models.py +163 -0
- scion_sdk-0.5.6/tests/test_repository_refs.py +107 -0
- scion_sdk-0.5.6/tests/test_repository_refwalk_fastpath.py +155 -0
- scion_sdk-0.5.6/tests/test_repository_transport.py +320 -0
- scion_sdk-0.5.6/tests/test_resource_declarations.py +262 -0
- scion_sdk-0.5.6/tests/test_runner_cli.py +315 -0
- scion_sdk-0.5.6/tests/test_runner_config.py +180 -0
- scion_sdk-0.5.6/tests/test_runner_end_to_end.py +224 -0
- scion_sdk-0.5.6/tests/test_runner_health.py +505 -0
- scion_sdk-0.5.6/tests/test_runner_supervision.py +227 -0
- scion_sdk-0.5.6/tests/test_safe_post.py +57 -0
- scion_sdk-0.5.6/tests/test_schema_disclosure.py +113 -0
- scion_sdk-0.5.6/tests/test_schema_disclosure_artifacts.py +66 -0
- scion_sdk-0.5.6/tests/test_schema_disclosure_provider.py +163 -0
- scion_sdk-0.5.6/tests/test_schema_drift.py +484 -0
- scion_sdk-0.5.6/tests/test_schema_repair.py +169 -0
- scion_sdk-0.5.6/tests/test_served_security_and_provider_profile.py +293 -0
- scion_sdk-0.5.6/tests/test_server_and_auth.py +314 -0
- scion_sdk-0.5.6/tests/test_signing.py +58 -0
- scion_sdk-0.5.6/tests/test_single_declaration.py +338 -0
- scion_sdk-0.5.6/tests/test_source_credentials.py +177 -0
- scion_sdk-0.5.6/tests/test_source_sync.py +271 -0
- scion_sdk-0.5.6/tests/test_source_sync_edges.py +202 -0
- scion_sdk-0.5.6/tests/test_source_sync_served.py +113 -0
- scion_sdk-0.5.6/tests/test_streaming.py +126 -0
- scion_sdk-0.5.6/tests/test_taxonomy_records.py +67 -0
- scion_sdk-0.5.6/tests/test_tls_profiles.py +381 -0
- scion_sdk-0.5.6/tests/test_tool_surface.py +209 -0
- scion_sdk-0.5.6/tests/test_vendor_extractors_ansible.py +75 -0
- scion_sdk-0.5.6/tests/test_vendor_extractors_archer_infra_a2a.py +120 -0
- scion_sdk-0.5.6/tests/test_vendor_extractors_archimate.py +95 -0
- scion_sdk-0.5.6/tests/test_vendor_extractors_aris_egeria_camunda.py +124 -0
- scion_sdk-0.5.6/tests/test_vendor_extractors_caddy.py +81 -0
- scion_sdk-0.5.6/tests/test_vendor_extractors_contract.py +58 -0
- scion_sdk-0.5.6/tests/test_vendor_extractors_emerald.py +91 -0
- scion_sdk-0.5.6/tests/test_vendor_extractors_grafana_leanix_erpnext.py +154 -0
- scion_sdk-0.5.6/tests/test_vendor_extractors_home_assistant.py +80 -0
- scion_sdk-0.5.6/tests/test_vendor_extractors_kafka.py +84 -0
- scion_sdk-0.5.6/tests/test_vendor_extractors_keycloak.py +98 -0
- scion_sdk-0.5.6/tests/test_vendor_extractors_lgtm.py +98 -0
- scion_sdk-0.5.6/tests/test_vendor_extractors_mealie.py +104 -0
- scion_sdk-0.5.6/tests/test_vendor_extractors_microsoft.py +83 -0
- scion_sdk-0.5.6/tests/test_vendor_extractors_nextcloud.py +111 -0
- scion_sdk-0.5.6/tests/test_vendor_extractors_odoo.py +78 -0
- scion_sdk-0.5.6/tests/test_vendor_extractors_portainer.py +99 -0
- scion_sdk-0.5.6/tests/test_vendor_extractors_salesforce.py +79 -0
- scion_sdk-0.5.6/tests/test_vendor_extractors_servicenow_ciso_social.py +154 -0
- scion_sdk-0.5.6/tests/test_vendor_extractors_technitium_dns.py +81 -0
- scion_sdk-0.5.6/tests/test_vendor_extractors_uptime_kuma.py +83 -0
- scion_sdk-0.5.6/tests/test_vendor_extractors_wger_okta_twenty.py +169 -0
- scion_sdk-0.5.6/tests/test_web_source_contract.py +257 -0
- scion_sdk-0.5.6/tests/test_writeback.py +145 -0
- scion_sdk-0.5.6/tests/test_writeback_audit_reservation.py +47 -0
- scion_sdk-0.5.6/tests/test_writeback_durable.py +293 -0
- scion_sdk-0.5.6/tests/test_writeback_process_restart.py +148 -0
- scion_sdk-0.5.6/tests/test_writeback_sink_process.py +196 -0
- scion_sdk-0.5.6/tests/test_writeback_sinks.py +519 -0
scion_sdk-0.5.6/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Knuckles Team
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
scion_sdk-0.5.6/PKG-INFO
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: scion-sdk
|
|
3
|
+
Version: 0.5.6
|
|
4
|
+
Summary: Scion SDK for the Arbora ecosystem: MCP server scaffolding, connector manifests, and typed source/content extension ports
|
|
5
|
+
Author-email: Repository Maintainers <maintainers@knuckles.team>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/Knuckles-Team/scion-sdk
|
|
8
|
+
Project-URL: Documentation, https://knuckles-team.github.io/scion-sdk/
|
|
9
|
+
Classifier: Development Status :: 4 - Beta
|
|
10
|
+
Classifier: Environment :: Console
|
|
11
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
16
|
+
Requires-Python: >=3.12
|
|
17
|
+
Description-Content-Type: text/markdown
|
|
18
|
+
License-File: LICENSE
|
|
19
|
+
Requires-Dist: epistemic-graph<3.0.0,>=2.27.6
|
|
20
|
+
Requires-Dist: mcp-types<3,>=2.3.0
|
|
21
|
+
Requires-Dist: pydantic<3,>=2.14.1
|
|
22
|
+
Requires-Dist: PyYAML>=6.0.3
|
|
23
|
+
Requires-Dist: httpx>=0.28.1
|
|
24
|
+
Requires-Dist: httpx2>=2.13.1
|
|
25
|
+
Requires-Dist: anyio>=4.15.1
|
|
26
|
+
Requires-Dist: cryptography>=50.0.2
|
|
27
|
+
Provides-Extra: integrity
|
|
28
|
+
Requires-Dist: rdflib>=7.1.0; extra == "integrity"
|
|
29
|
+
Provides-Extra: mcp
|
|
30
|
+
Requires-Dist: fastmcp<5,>=4.1.0; extra == "mcp"
|
|
31
|
+
Requires-Dist: mcp<3,>=2.3.0; extra == "mcp"
|
|
32
|
+
Provides-Extra: a2a
|
|
33
|
+
Requires-Dist: fasta2a[pydantic-ai]<1.0.0,>=0.6.1; extra == "a2a"
|
|
34
|
+
Requires-Dist: starlette<2,>=1.8.0; extra == "a2a"
|
|
35
|
+
Provides-Extra: feeds
|
|
36
|
+
Requires-Dist: feedparser>=6.0.12; extra == "feeds"
|
|
37
|
+
Provides-Extra: dataprep
|
|
38
|
+
Requires-Dist: pyarrow>=24.0.0; extra == "dataprep"
|
|
39
|
+
Provides-Extra: db
|
|
40
|
+
Requires-Dist: psycopg[binary]>=3.2.0; extra == "db"
|
|
41
|
+
Requires-Dist: PyMySQL>=1.1.1; extra == "db"
|
|
42
|
+
Requires-Dist: pymongo>=4.10.0; extra == "db"
|
|
43
|
+
Requires-Dist: oracledb>=2.5.0; extra == "db"
|
|
44
|
+
Provides-Extra: mssql
|
|
45
|
+
Requires-Dist: pyodbc>=5.2.0; extra == "mssql"
|
|
46
|
+
Provides-Extra: graphql
|
|
47
|
+
Requires-Dist: gql[requests]>=4.4.0; extra == "graphql"
|
|
48
|
+
Requires-Dist: graphql-core>=3.2.5; extra == "graphql"
|
|
49
|
+
Provides-Extra: market
|
|
50
|
+
Requires-Dist: pandas>=2.2.0; extra == "market"
|
|
51
|
+
Requires-Dist: yfinance>=0.2.50; extra == "market"
|
|
52
|
+
Provides-Extra: stream
|
|
53
|
+
Requires-Dist: websockets>=14.0; extra == "stream"
|
|
54
|
+
Provides-Extra: vector
|
|
55
|
+
Requires-Dist: qdrant-client>=1.18.0; extra == "vector"
|
|
56
|
+
Requires-Dist: psycopg[binary,pool]>=3.2.0; extra == "vector"
|
|
57
|
+
Requires-Dist: pymongo>=4.10.0; extra == "vector"
|
|
58
|
+
Provides-Extra: vector-chroma
|
|
59
|
+
Requires-Dist: chromadb>=1.5.0; extra == "vector-chroma"
|
|
60
|
+
Requires-Dist: llama-index-vector-stores-chroma>=0.5.0; extra == "vector-chroma"
|
|
61
|
+
Dynamic: license-file
|
|
62
|
+
|
|
63
|
+
# Scion SDK
|
|
64
|
+
|
|
65
|
+
<p align="center">
|
|
66
|
+
<img src="docs/assets/brands/agent-connector-sdk-logo-v1.png" alt="Scion SDK logo" width="180">
|
|
67
|
+
</p>
|
|
68
|
+
|
|
69
|
+
<p align="center">
|
|
70
|
+
<b>Build secure connectors once. Serve, synchronize, and write back through one governed contract.</b><br>
|
|
71
|
+
<sub>The typed source-integration boundary for MCP services and Medulla.</sub>
|
|
72
|
+
</p>
|
|
73
|
+
|
|
74
|
+
[](https://pypi.org/project/scion-sdk/)
|
|
75
|
+
[](https://github.com/Knuckles-Team/scion-sdk/actions/workflows/release.yml)
|
|
76
|
+
[](https://knuckles-team.github.io/scion-sdk/)
|
|
77
|
+
[](https://github.com/Knuckles-Team/scion-sdk/stargazers)
|
|
78
|
+
[](https://github.com/Knuckles-Team/scion-sdk/forks)
|
|
79
|
+
[](https://github.com/Knuckles-Team/scion-sdk/graphs/contributors)
|
|
80
|
+
[](LICENSE)
|
|
81
|
+
[](https://github.com/Knuckles-Team/scion-sdk/commits/main)
|
|
82
|
+
[](https://github.com/Knuckles-Team/scion-sdk/pulls)
|
|
83
|
+
[](https://github.com/Knuckles-Team/scion-sdk/pulls?q=is%3Apr+is%3Aclosed)
|
|
84
|
+
[](https://github.com/Knuckles-Team/scion-sdk/issues)
|
|
85
|
+
[](https://github.com/Knuckles-Team/scion-sdk)
|
|
86
|
+
[](https://github.com/Knuckles-Team/scion-sdk)
|
|
87
|
+
[](https://github.com/Knuckles-Team/scion-sdk)
|
|
88
|
+
[](https://github.com/Knuckles-Team/scion-sdk)
|
|
89
|
+
[](https://pypi.org/project/scion-sdk/)
|
|
90
|
+
[](https://pypi.org/project/scion-sdk/)
|
|
91
|
+
[](https://pypi.org/project/scion-sdk/)
|
|
92
|
+
[](https://pypi.org/project/scion-sdk/)
|
|
93
|
+
|
|
94
|
+
<p align="center">
|
|
95
|
+
<a href="https://knuckles-team.github.io/scion-sdk/">Documentation</a> ·
|
|
96
|
+
<a href="https://knuckles-team.github.io/scion-sdk/capabilities/">Capabilities</a> ·
|
|
97
|
+
<a href="https://knuckles-team.github.io/scion-sdk/extension-ports/">Interfaces</a> ·
|
|
98
|
+
<a href="https://knuckles-team.github.io/scion-sdk/status/">Status</a>
|
|
99
|
+
</p>
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Quick Start
|
|
104
|
+
|
|
105
|
+
Install Scion SDK as `scion-sdk` and import it as
|
|
106
|
+
`agent_connector_sdk`. The repository is `scion-sdk`; package, CLI and API
|
|
107
|
+
identifiers remain unchanged.
|
|
108
|
+
|
|
109
|
+
Create a project and install the SDK:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
uv init --bare demo-connector
|
|
113
|
+
cd demo-connector
|
|
114
|
+
uv add scion-sdk
|
|
115
|
+
uv sync
|
|
116
|
+
uv run connector-sync --help
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
The command prints the supervised synchronization options without opening a
|
|
120
|
+
source session. Continue with the
|
|
121
|
+
[connector tutorial](https://knuckles-team.github.io/scion-sdk/tutorial/)
|
|
122
|
+
to build and run a one-file MCP connector, observe its health response, add
|
|
123
|
+
declarative content, certify the live schema, and join source synchronization.
|
|
124
|
+
|
|
125
|
+
## Overview
|
|
126
|
+
|
|
127
|
+
Scion SDK is the ecosystem's source-integration boundary. It turns
|
|
128
|
+
vendor APIs and domain tools into secure MCP connectors, transports bounded
|
|
129
|
+
source evidence into Medulla, indexes immutable repository snapshots,
|
|
130
|
+
and applies authorized changes back to source systems.
|
|
131
|
+
|
|
132
|
+
Connector packages retain vendor behavior. The SDK owns transport, lifecycle,
|
|
133
|
+
certification, and effect execution. Generated Medulla contracts own
|
|
134
|
+
durable graph records, checkpoints, content identity, and receipts.
|
|
135
|
+
|
|
136
|
+
## Key Capabilities
|
|
137
|
+
|
|
138
|
+
- Build FastMCP servers with authentication, safe exposure, health, visibility,
|
|
139
|
+
rate limits, change subscriptions, and consistent tool surfaces.
|
|
140
|
+
- Publish skills, prompts, ontologies, SHACL shapes, and connector manifests as
|
|
141
|
+
typed MCP content.
|
|
142
|
+
- Extract bounded source pages and advance checkpoints only from matching
|
|
143
|
+
durable Medulla receipts.
|
|
144
|
+
- Import deterministic ConnectorPack archives without copying graph DTOs or
|
|
145
|
+
digest algorithms into connector packages.
|
|
146
|
+
- Stream authenticated immutable repository snapshots into the generated
|
|
147
|
+
`IndexRepository` boundary without becoming a semantic writer.
|
|
148
|
+
- Govern write-back through dry-run, authorization, source-version checks,
|
|
149
|
+
idempotency, and uncertain-effect reconciliation.
|
|
150
|
+
- Certify extension identity, live MCP schemas, pagination, and safety behavior
|
|
151
|
+
before activation.
|
|
152
|
+
|
|
153
|
+
## Documentation
|
|
154
|
+
|
|
155
|
+
Start with [Build the operator's first connector](https://knuckles-team.github.io/scion-sdk/tutorial/),
|
|
156
|
+
then choose the reference that matches the work:
|
|
157
|
+
|
|
158
|
+
- [Documentation home](https://knuckles-team.github.io/scion-sdk/)
|
|
159
|
+
- [Capabilities](https://knuckles-team.github.io/scion-sdk/capabilities/)
|
|
160
|
+
- [Architecture](https://knuckles-team.github.io/scion-sdk/architecture/)
|
|
161
|
+
- [Connector servers](https://knuckles-team.github.io/scion-sdk/connector-servers/)
|
|
162
|
+
- [Schema disclosure](https://knuckles-team.github.io/scion-sdk/schema-disclosure/)
|
|
163
|
+
- [Source synchronization](https://knuckles-team.github.io/scion-sdk/connector-sync/)
|
|
164
|
+
- [Repository ingestion](https://knuckles-team.github.io/scion-sdk/repository-ingestion/)
|
|
165
|
+
- [Extension interfaces](https://knuckles-team.github.io/scion-sdk/extension-ports/)
|
|
166
|
+
- [Current status](https://knuckles-team.github.io/scion-sdk/status/)
|
|
167
|
+
|
|
168
|
+
Sibling authorities: [Medulla](https://knuckles-team.github.io/medulla/)
|
|
169
|
+
owns durable graph state and generated contracts; [Arbora](https://knuckles-team.github.io/arbora/)
|
|
170
|
+
owns authenticated runtime composition.
|
|
171
|
+
|
|
172
|
+
## Architecture
|
|
173
|
+
|
|
174
|
+
[](https://knuckles-team.github.io/.github/architecture/#sdk)
|
|
175
|
+
|
|
176
|
+
[Explore the live architecture](https://knuckles-team.github.io/.github/architecture/#sdk)
|
|
177
|
+
|
|
178
|
+
| Boundary | Owned here | Owned elsewhere |
|
|
179
|
+
|---|---|---|
|
|
180
|
+
| Connector service | MCP lifecycle, exposure policy, content capture, certification | Vendor models and business semantics stay in the connector package. |
|
|
181
|
+
| Source ingest | Discovery, bounded extraction, transport, receipt verification | Medulla owns mapping, checkpoints, provenance, and commit receipts. |
|
|
182
|
+
| Repository ingest | Authenticated snapshots, stable manifests, bounded object transport | Medulla owns indexing, graph projection, and semantic interpretation. |
|
|
183
|
+
| Write-back | Preview, source-version checks, apply, and reconciliation | Medulla owns change sets, authorization decisions, and durable outcomes. |
|
|
184
|
+
| Runtime composition | Typed ports and checked dependency requirements | Arbora supplies authenticated identity, clients, and live authority. |
|
|
185
|
+
|
|
186
|
+
The SDK depends directly on `epistemic-graph>=2.27.6`. Generated SourceIngest,
|
|
187
|
+
ConnectorPack, IndexRepository, and WriteBack clients and models are the graph
|
|
188
|
+
boundary; the SDK adds no parallel graph contract.
|
|
189
|
+
|
|
190
|
+
## Contributing
|
|
191
|
+
|
|
192
|
+
Issues and pull requests are welcome. Follow [AGENTS.md](AGENTS.md) for ownership,
|
|
193
|
+
isolation, and validation rules, and run the affected tests and public-surface
|
|
194
|
+
gates before submitting a change.
|
|
195
|
+
|
|
196
|
+
## License
|
|
197
|
+
|
|
198
|
+
Scion SDK is released under the [MIT License](LICENSE).
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# Scion SDK
|
|
2
|
+
|
|
3
|
+
<p align="center">
|
|
4
|
+
<img src="docs/assets/brands/agent-connector-sdk-logo-v1.png" alt="Scion SDK logo" width="180">
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<b>Build secure connectors once. Serve, synchronize, and write back through one governed contract.</b><br>
|
|
9
|
+
<sub>The typed source-integration boundary for MCP services and Medulla.</sub>
|
|
10
|
+
</p>
|
|
11
|
+
|
|
12
|
+
[](https://pypi.org/project/scion-sdk/)
|
|
13
|
+
[](https://github.com/Knuckles-Team/scion-sdk/actions/workflows/release.yml)
|
|
14
|
+
[](https://knuckles-team.github.io/scion-sdk/)
|
|
15
|
+
[](https://github.com/Knuckles-Team/scion-sdk/stargazers)
|
|
16
|
+
[](https://github.com/Knuckles-Team/scion-sdk/forks)
|
|
17
|
+
[](https://github.com/Knuckles-Team/scion-sdk/graphs/contributors)
|
|
18
|
+
[](LICENSE)
|
|
19
|
+
[](https://github.com/Knuckles-Team/scion-sdk/commits/main)
|
|
20
|
+
[](https://github.com/Knuckles-Team/scion-sdk/pulls)
|
|
21
|
+
[](https://github.com/Knuckles-Team/scion-sdk/pulls?q=is%3Apr+is%3Aclosed)
|
|
22
|
+
[](https://github.com/Knuckles-Team/scion-sdk/issues)
|
|
23
|
+
[](https://github.com/Knuckles-Team/scion-sdk)
|
|
24
|
+
[](https://github.com/Knuckles-Team/scion-sdk)
|
|
25
|
+
[](https://github.com/Knuckles-Team/scion-sdk)
|
|
26
|
+
[](https://github.com/Knuckles-Team/scion-sdk)
|
|
27
|
+
[](https://pypi.org/project/scion-sdk/)
|
|
28
|
+
[](https://pypi.org/project/scion-sdk/)
|
|
29
|
+
[](https://pypi.org/project/scion-sdk/)
|
|
30
|
+
[](https://pypi.org/project/scion-sdk/)
|
|
31
|
+
|
|
32
|
+
<p align="center">
|
|
33
|
+
<a href="https://knuckles-team.github.io/scion-sdk/">Documentation</a> ·
|
|
34
|
+
<a href="https://knuckles-team.github.io/scion-sdk/capabilities/">Capabilities</a> ·
|
|
35
|
+
<a href="https://knuckles-team.github.io/scion-sdk/extension-ports/">Interfaces</a> ·
|
|
36
|
+
<a href="https://knuckles-team.github.io/scion-sdk/status/">Status</a>
|
|
37
|
+
</p>
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Quick Start
|
|
42
|
+
|
|
43
|
+
Install Scion SDK as `scion-sdk` and import it as
|
|
44
|
+
`agent_connector_sdk`. The repository is `scion-sdk`; package, CLI and API
|
|
45
|
+
identifiers remain unchanged.
|
|
46
|
+
|
|
47
|
+
Create a project and install the SDK:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
uv init --bare demo-connector
|
|
51
|
+
cd demo-connector
|
|
52
|
+
uv add scion-sdk
|
|
53
|
+
uv sync
|
|
54
|
+
uv run connector-sync --help
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
The command prints the supervised synchronization options without opening a
|
|
58
|
+
source session. Continue with the
|
|
59
|
+
[connector tutorial](https://knuckles-team.github.io/scion-sdk/tutorial/)
|
|
60
|
+
to build and run a one-file MCP connector, observe its health response, add
|
|
61
|
+
declarative content, certify the live schema, and join source synchronization.
|
|
62
|
+
|
|
63
|
+
## Overview
|
|
64
|
+
|
|
65
|
+
Scion SDK is the ecosystem's source-integration boundary. It turns
|
|
66
|
+
vendor APIs and domain tools into secure MCP connectors, transports bounded
|
|
67
|
+
source evidence into Medulla, indexes immutable repository snapshots,
|
|
68
|
+
and applies authorized changes back to source systems.
|
|
69
|
+
|
|
70
|
+
Connector packages retain vendor behavior. The SDK owns transport, lifecycle,
|
|
71
|
+
certification, and effect execution. Generated Medulla contracts own
|
|
72
|
+
durable graph records, checkpoints, content identity, and receipts.
|
|
73
|
+
|
|
74
|
+
## Key Capabilities
|
|
75
|
+
|
|
76
|
+
- Build FastMCP servers with authentication, safe exposure, health, visibility,
|
|
77
|
+
rate limits, change subscriptions, and consistent tool surfaces.
|
|
78
|
+
- Publish skills, prompts, ontologies, SHACL shapes, and connector manifests as
|
|
79
|
+
typed MCP content.
|
|
80
|
+
- Extract bounded source pages and advance checkpoints only from matching
|
|
81
|
+
durable Medulla receipts.
|
|
82
|
+
- Import deterministic ConnectorPack archives without copying graph DTOs or
|
|
83
|
+
digest algorithms into connector packages.
|
|
84
|
+
- Stream authenticated immutable repository snapshots into the generated
|
|
85
|
+
`IndexRepository` boundary without becoming a semantic writer.
|
|
86
|
+
- Govern write-back through dry-run, authorization, source-version checks,
|
|
87
|
+
idempotency, and uncertain-effect reconciliation.
|
|
88
|
+
- Certify extension identity, live MCP schemas, pagination, and safety behavior
|
|
89
|
+
before activation.
|
|
90
|
+
|
|
91
|
+
## Documentation
|
|
92
|
+
|
|
93
|
+
Start with [Build the operator's first connector](https://knuckles-team.github.io/scion-sdk/tutorial/),
|
|
94
|
+
then choose the reference that matches the work:
|
|
95
|
+
|
|
96
|
+
- [Documentation home](https://knuckles-team.github.io/scion-sdk/)
|
|
97
|
+
- [Capabilities](https://knuckles-team.github.io/scion-sdk/capabilities/)
|
|
98
|
+
- [Architecture](https://knuckles-team.github.io/scion-sdk/architecture/)
|
|
99
|
+
- [Connector servers](https://knuckles-team.github.io/scion-sdk/connector-servers/)
|
|
100
|
+
- [Schema disclosure](https://knuckles-team.github.io/scion-sdk/schema-disclosure/)
|
|
101
|
+
- [Source synchronization](https://knuckles-team.github.io/scion-sdk/connector-sync/)
|
|
102
|
+
- [Repository ingestion](https://knuckles-team.github.io/scion-sdk/repository-ingestion/)
|
|
103
|
+
- [Extension interfaces](https://knuckles-team.github.io/scion-sdk/extension-ports/)
|
|
104
|
+
- [Current status](https://knuckles-team.github.io/scion-sdk/status/)
|
|
105
|
+
|
|
106
|
+
Sibling authorities: [Medulla](https://knuckles-team.github.io/medulla/)
|
|
107
|
+
owns durable graph state and generated contracts; [Arbora](https://knuckles-team.github.io/arbora/)
|
|
108
|
+
owns authenticated runtime composition.
|
|
109
|
+
|
|
110
|
+
## Architecture
|
|
111
|
+
|
|
112
|
+
[](https://knuckles-team.github.io/.github/architecture/#sdk)
|
|
113
|
+
|
|
114
|
+
[Explore the live architecture](https://knuckles-team.github.io/.github/architecture/#sdk)
|
|
115
|
+
|
|
116
|
+
| Boundary | Owned here | Owned elsewhere |
|
|
117
|
+
|---|---|---|
|
|
118
|
+
| Connector service | MCP lifecycle, exposure policy, content capture, certification | Vendor models and business semantics stay in the connector package. |
|
|
119
|
+
| Source ingest | Discovery, bounded extraction, transport, receipt verification | Medulla owns mapping, checkpoints, provenance, and commit receipts. |
|
|
120
|
+
| Repository ingest | Authenticated snapshots, stable manifests, bounded object transport | Medulla owns indexing, graph projection, and semantic interpretation. |
|
|
121
|
+
| Write-back | Preview, source-version checks, apply, and reconciliation | Medulla owns change sets, authorization decisions, and durable outcomes. |
|
|
122
|
+
| Runtime composition | Typed ports and checked dependency requirements | Arbora supplies authenticated identity, clients, and live authority. |
|
|
123
|
+
|
|
124
|
+
The SDK depends directly on `epistemic-graph>=2.27.6`. Generated SourceIngest,
|
|
125
|
+
ConnectorPack, IndexRepository, and WriteBack clients and models are the graph
|
|
126
|
+
boundary; the SDK adds no parallel graph contract.
|
|
127
|
+
|
|
128
|
+
## Contributing
|
|
129
|
+
|
|
130
|
+
Issues and pull requests are welcome. Follow [AGENTS.md](AGENTS.md) for ownership,
|
|
131
|
+
isolation, and validation rules, and run the affected tests and public-surface
|
|
132
|
+
gates before submitting a change.
|
|
133
|
+
|
|
134
|
+
## License
|
|
135
|
+
|
|
136
|
+
Scion SDK is released under the [MIT License](LICENSE).
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"""Scion SDK: the connector-facing SDK for the agent-packages fleet.
|
|
2
|
+
|
|
3
|
+
Public modules are imported by their own path (``agent_connector_sdk.mcp.server``,
|
|
4
|
+
``agent_connector_sdk.ports`` and so on). The package root exports the version
|
|
5
|
+
and, lazily, :class:`Connector` and :func:`run`, so importing it never pulls in
|
|
6
|
+
the MCP server stack.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from typing import Any
|
|
12
|
+
|
|
13
|
+
from agent_connector_sdk._version import __version__
|
|
14
|
+
|
|
15
|
+
__all__ = ["Connector", "__version__", "run"]
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def __getattr__(name: str) -> Any:
|
|
19
|
+
if name in ("Connector", "run"):
|
|
20
|
+
from agent_connector_sdk import connector
|
|
21
|
+
|
|
22
|
+
return getattr(connector, name)
|
|
23
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"""Typed field readers for ``ac:AccessContract`` subjects."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from ._turtle import AccessContractError, Term
|
|
6
|
+
from .credentials.references import SecretReferenceError, parse_secret_reference
|
|
7
|
+
|
|
8
|
+
AC = "https://knuckles-team.github.io/agent-connector-sdk/access#"
|
|
9
|
+
ACCESS_KINDS = frozenset({"mcp_tool", "http_endpoint", "graphql_query", "a2a_skill"})
|
|
10
|
+
PAGINATION_MODES = frozenset({"none", "cursor", "offset", "page"})
|
|
11
|
+
PUSHDOWN_OPS = frozenset({"filter", "sort", "limit", "project"})
|
|
12
|
+
COST_HINTS = frozenset({"low", "medium", "high"})
|
|
13
|
+
|
|
14
|
+
Props = dict[str, list[Term]]
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def _one(props: Props, name: str, subject: str) -> Term | None:
|
|
18
|
+
values = props.get(AC + name, [])
|
|
19
|
+
if len(values) > 1:
|
|
20
|
+
raise AccessContractError(f"{subject}: ac:{name} appears more than once")
|
|
21
|
+
return values[0] if values else None
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def text(props: Props, name: str, subject: str) -> str:
|
|
25
|
+
"""Return a required non-empty string property."""
|
|
26
|
+
value = _one(props, name, subject)
|
|
27
|
+
if not isinstance(value, str) or not value.strip():
|
|
28
|
+
raise AccessContractError(f"{subject}: missing ac:{name}")
|
|
29
|
+
return value
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def integer(props: Props, name: str, subject: str) -> int | None:
|
|
33
|
+
"""Return an optional non-negative integer property."""
|
|
34
|
+
value = _one(props, name, subject)
|
|
35
|
+
if value is not None and (not isinstance(value, int) or value < 0):
|
|
36
|
+
raise AccessContractError(
|
|
37
|
+
f"{subject}: ac:{name} must be a non-negative integer"
|
|
38
|
+
)
|
|
39
|
+
return value
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def choice(
|
|
43
|
+
props: Props,
|
|
44
|
+
name: str,
|
|
45
|
+
subject: str,
|
|
46
|
+
*,
|
|
47
|
+
allowed: frozenset[str],
|
|
48
|
+
default: str | None = None,
|
|
49
|
+
) -> str:
|
|
50
|
+
"""Return a property constrained to ``allowed``; ``default`` makes it optional."""
|
|
51
|
+
raw = _one(props, name, subject) if default is not None else None
|
|
52
|
+
value = text(props, name, subject) if default is None else str(raw or default)
|
|
53
|
+
if value not in allowed:
|
|
54
|
+
raise AccessContractError(f"{subject}: unknown ac:{name} {value!r}")
|
|
55
|
+
return value
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def pushdown(props: Props, subject: str) -> frozenset[str]:
|
|
59
|
+
"""Return the declared pushdown operations, refusing unknown ones."""
|
|
60
|
+
ops = frozenset(str(op) for op in props.get(AC + "pushdown", []))
|
|
61
|
+
unknown = sorted(ops - PUSHDOWN_OPS)
|
|
62
|
+
if unknown:
|
|
63
|
+
raise AccessContractError(f"{subject}: unknown ac:pushdown {unknown}")
|
|
64
|
+
return ops
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def parameters(props: Props) -> tuple[str, ...]:
|
|
68
|
+
"""Return the declared operation parameters in sorted order."""
|
|
69
|
+
return tuple(sorted(str(p) for p in props.get(AC + "parameter", [])))
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def auth_ref(props: Props, subject: str) -> str | None:
|
|
73
|
+
"""Return a rendered credential reference, refusing a literal secret."""
|
|
74
|
+
value = _one(props, "authRef", subject)
|
|
75
|
+
if value is None:
|
|
76
|
+
return None
|
|
77
|
+
try:
|
|
78
|
+
return parse_secret_reference(str(value)).render()
|
|
79
|
+
except SecretReferenceError:
|
|
80
|
+
raise AccessContractError(
|
|
81
|
+
f"{subject}: ac:authRef must be a credential reference, not a secret"
|
|
82
|
+
) from None
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def bindings(graph: dict[str, Props], contract: str) -> tuple[tuple[str, str], ...]:
|
|
86
|
+
"""Return the sorted (property, field) pairs bound to ``contract``."""
|
|
87
|
+
pairs = []
|
|
88
|
+
for subject, props in graph.items():
|
|
89
|
+
if contract in props.get(AC + "contract", []):
|
|
90
|
+
prop = text(props, "property", subject)
|
|
91
|
+
pairs.append((prop, text(props, "field", subject)))
|
|
92
|
+
return tuple(sorted(pairs))
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""Clear errors for features that need an optional extra of the base install."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import importlib
|
|
6
|
+
|
|
7
|
+
__all__ = ["require_mcp_extra"]
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def require_mcp_extra(feature: str) -> None:
|
|
11
|
+
"""Raise ``ImportError`` naming the ``mcp`` extra when fastmcp or mcp is absent."""
|
|
12
|
+
missing = []
|
|
13
|
+
for name in ("fastmcp", "mcp"):
|
|
14
|
+
try:
|
|
15
|
+
importlib.import_module(name)
|
|
16
|
+
except ImportError:
|
|
17
|
+
missing.append(name)
|
|
18
|
+
if missing:
|
|
19
|
+
raise ImportError(
|
|
20
|
+
f"{feature} needs {' and '.join(missing)}, which the base install of "
|
|
21
|
+
'scion-sdk leaves out; install "scion-sdk[mcp]"'
|
|
22
|
+
)
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"""Flat Turtle reader used by the access-contract parser.
|
|
2
|
+
|
|
3
|
+
It tokenizes one restricted profile (see :mod:`agent_connector_sdk.access_contract`)
|
|
4
|
+
and raises :class:`AccessContractError` on anything outside it.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import re
|
|
10
|
+
from collections import defaultdict
|
|
11
|
+
|
|
12
|
+
RDF_TYPE = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"
|
|
13
|
+
|
|
14
|
+
_TOKEN_RE = re.compile(
|
|
15
|
+
r"(?P<ws>\s+|#[^\n]*)"
|
|
16
|
+
r"|(?P<iri><[^<>\s]*>)"
|
|
17
|
+
r'|(?P<str>"(?:[^"\\\n]|\\.)*")'
|
|
18
|
+
r"|(?P<int>-?\d+)"
|
|
19
|
+
r"|(?P<prefix>@prefix)"
|
|
20
|
+
r"|(?P<pname>[A-Za-z_]?[\w-]*:(?:[\w-](?:[\w.-]*[\w-])?)?)"
|
|
21
|
+
r"|(?P<a>a(?=\s))"
|
|
22
|
+
r"|(?P<punct>[;,.])"
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
Term = str | int
|
|
26
|
+
Triple = tuple[str, str, Term]
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class AccessContractError(ValueError):
|
|
30
|
+
"""A connector ontology declares an invalid access contract."""
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _tokens(text: str) -> list[tuple[str, str]]:
|
|
34
|
+
out: list[tuple[str, str]] = []
|
|
35
|
+
pos = 0
|
|
36
|
+
while pos < len(text):
|
|
37
|
+
match = _TOKEN_RE.match(text, pos)
|
|
38
|
+
if match is None or match.end() == pos:
|
|
39
|
+
raise AccessContractError(f"unsupported Turtle at offset {pos}")
|
|
40
|
+
kind = match.lastgroup or ""
|
|
41
|
+
if kind != "ws":
|
|
42
|
+
out.append((kind, match.group()))
|
|
43
|
+
pos = match.end()
|
|
44
|
+
return out
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class _Reader:
|
|
48
|
+
def __init__(self, text: str) -> None:
|
|
49
|
+
self.toks = _tokens(text)
|
|
50
|
+
self.pos = 0
|
|
51
|
+
self.prefixes: dict[str, str] = {}
|
|
52
|
+
self.triples: list[Triple] = []
|
|
53
|
+
|
|
54
|
+
def next(self) -> tuple[str, str]:
|
|
55
|
+
if self.pos >= len(self.toks):
|
|
56
|
+
raise AccessContractError("unexpected end of Turtle")
|
|
57
|
+
self.pos += 1
|
|
58
|
+
return self.toks[self.pos - 1]
|
|
59
|
+
|
|
60
|
+
def expect(self, value: str) -> None:
|
|
61
|
+
if self.next()[1] != value:
|
|
62
|
+
raise AccessContractError(f"expected {value!r}")
|
|
63
|
+
|
|
64
|
+
def term(self) -> Term:
|
|
65
|
+
kind, value = self.next()
|
|
66
|
+
if kind == "iri":
|
|
67
|
+
return value[1:-1]
|
|
68
|
+
if kind == "a":
|
|
69
|
+
return RDF_TYPE
|
|
70
|
+
if kind == "pname":
|
|
71
|
+
prefix, _, local = value.partition(":")
|
|
72
|
+
if prefix not in self.prefixes:
|
|
73
|
+
raise AccessContractError(f"undeclared prefix {prefix!r}")
|
|
74
|
+
return self.prefixes[prefix] + local
|
|
75
|
+
if kind == "str":
|
|
76
|
+
return value[1:-1].replace('\\"', '"').replace("\\\\", "\\")
|
|
77
|
+
if kind == "int":
|
|
78
|
+
return int(value)
|
|
79
|
+
raise AccessContractError(f"unexpected token {value!r}")
|
|
80
|
+
|
|
81
|
+
def prefix(self) -> None:
|
|
82
|
+
kind, name = self.next()
|
|
83
|
+
iri = self.next()
|
|
84
|
+
if kind != "pname" or not name.endswith(":") or iri[0] != "iri":
|
|
85
|
+
raise AccessContractError("malformed @prefix")
|
|
86
|
+
self.prefixes[name[:-1]] = iri[1][1:-1]
|
|
87
|
+
self.expect(".")
|
|
88
|
+
|
|
89
|
+
def statement(self) -> None:
|
|
90
|
+
subject = str(self.term())
|
|
91
|
+
sep = ";"
|
|
92
|
+
while sep == ";":
|
|
93
|
+
predicate = str(self.term())
|
|
94
|
+
sep = ","
|
|
95
|
+
while sep == ",":
|
|
96
|
+
self.triples.append((subject, predicate, self.term()))
|
|
97
|
+
sep = self.next()[1]
|
|
98
|
+
if sep != ".":
|
|
99
|
+
raise AccessContractError("statement must end with '.'")
|
|
100
|
+
|
|
101
|
+
def read(self) -> list[Triple]:
|
|
102
|
+
while self.pos < len(self.toks):
|
|
103
|
+
if self.toks[self.pos][0] == "prefix":
|
|
104
|
+
self.pos += 1
|
|
105
|
+
self.prefix()
|
|
106
|
+
else:
|
|
107
|
+
self.statement()
|
|
108
|
+
return self.triples
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def parse_graph(text: str) -> dict[str, dict[str, list[Term]]]:
|
|
112
|
+
"""Read flat Turtle into a subject -> predicate -> objects index."""
|
|
113
|
+
graph: dict[str, dict[str, list[Term]]] = defaultdict(lambda: defaultdict(list))
|
|
114
|
+
for subject, predicate, obj in _Reader(text).read():
|
|
115
|
+
graph[subject][predicate].append(obj)
|
|
116
|
+
return graph
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"""The SDK version, read from installed package metadata.
|
|
2
|
+
|
|
3
|
+
``pyproject.toml`` is the only file that spells it (SDK-CONNECTOR-CONTROL-R071.2).
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from agent_connector_sdk.connector_identity import distribution_version
|
|
7
|
+
|
|
8
|
+
__version__ = distribution_version("scion-sdk")
|