synth-agent-sdk 2.0.0__tar.gz → 2.2.0__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.
- synth_agent_sdk-2.2.0/.dockerignore +27 -0
- synth_agent_sdk-2.2.0/.github/CODEOWNERS +34 -0
- synth_agent_sdk-2.2.0/.github/workflows/observability-doc-idempotence.yml +52 -0
- synth_agent_sdk-2.2.0/.github/workflows/pricing-feed-validation.yml +102 -0
- synth_agent_sdk-2.2.0/.github/workflows/pricing-freshness.yml +129 -0
- synth_agent_sdk-2.2.0/.github/workflows/spec-metadata-lint.yml +137 -0
- synth_agent_sdk-2.2.0/.gitignore +68 -0
- synth_agent_sdk-2.0.0/README.md → synth_agent_sdk-2.2.0/PKG-INFO +229 -2
- synth_agent_sdk-2.0.0/PKG-INFO → synth_agent_sdk-2.2.0/README.md +121 -84
- synth_agent_sdk-2.2.0/install.ps1 +307 -0
- synth_agent_sdk-2.2.0/install.sh +468 -0
- synth_agent_sdk-2.2.0/pyproject.toml +170 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/CHANGELOG.md +173 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/__init__.py +41 -1
- synth_agent_sdk-2.2.0/synth/agent.py +3161 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/audit/log.py +163 -17
- synth_agent_sdk-2.2.0/synth/cache/middleware.py +305 -0
- synth_agent_sdk-2.2.0/synth/checkpointing/__init__.py +7 -0
- synth_agent_sdk-2.2.0/synth/checkpointing/base.py +120 -0
- synth_agent_sdk-2.2.0/synth/checkpointing/dynamo.py +223 -0
- synth_agent_sdk-2.2.0/synth/checkpointing/encryption.py +139 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/checkpointing/local.py +22 -5
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/checkpointing/redis.py +28 -8
- synth_agent_sdk-2.2.0/synth/cli/_doc_gen/__init__.py +8 -0
- synth_agent_sdk-2.2.0/synth/cli/_doc_gen/observability_html.py +727 -0
- synth_agent_sdk-2.2.0/synth/cli/_error_formatter.py +265 -0
- synth_agent_sdk-2.2.0/synth/cli/_init_back_nav.py +292 -0
- synth_agent_sdk-2.2.0/synth/cli/_init_catalog.py +1372 -0
- synth_agent_sdk-2.2.0/synth/cli/_init_enterprise.py +2336 -0
- synth_agent_sdk-2.2.0/synth/cli/_init_generators.py +3840 -0
- synth_agent_sdk-2.2.0/synth/cli/_init_helpers.py +5389 -0
- synth_agent_sdk-2.2.0/synth/cli/_ui_assets/__init__.py +6 -0
- synth_agent_sdk-2.2.0/synth/cli/_ui_assets/agentcore_history.py +515 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/_ui_assets/app.js +1108 -26
- synth_agent_sdk-2.2.0/synth/cli/_ui_assets/conversation_agents.json +324 -0
- synth_agent_sdk-2.2.0/synth/cli/_ui_assets/conversations.json +62 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/_ui_assets/index.html +105 -44
- synth_agent_sdk-2.2.0/synth/cli/_ui_assets/provenance.py +166 -0
- synth_agent_sdk-2.2.0/synth/cli/_ui_assets/registry_ui.py +646 -0
- synth_agent_sdk-2.2.0/synth/cli/_ui_assets/server.py +9221 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/_ui_assets/static/app.js +2213 -52
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/_ui_assets/static/index.html +197 -51
- synth_agent_sdk-2.2.0/synth/cli/_ui_assets/static/login.html +316 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/_ui_assets/static/style.css +1001 -1
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/_ui_assets/style.css +521 -1
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/agents_cmd.py +470 -3
- synth_agent_sdk-2.2.0/synth/cli/cloud_cmd.py +2475 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/create_cmd.py +892 -4
- synth_agent_sdk-2.2.0/synth/cli/deploy_cmd.py +5668 -0
- synth_agent_sdk-2.2.0/synth/cli/destroy_cmd.py +1005 -0
- synth_agent_sdk-2.2.0/synth/cli/dev.py +401 -0
- synth_agent_sdk-2.2.0/synth/cli/dev_ui_contract.py +195 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/doctor.py +271 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/edit_cmd.py +3 -3
- synth_agent_sdk-2.2.0/synth/cli/init_cmd.py +3416 -0
- synth_agent_sdk-2.2.0/synth/cli/inspect_cmd.py +374 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/main.py +303 -10
- synth_agent_sdk-2.2.0/synth/cli/mcp_cmd.py +961 -0
- synth_agent_sdk-2.2.0/synth/cli/migrate_cmd.py +1090 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/package_info.py +4 -4
- synth_agent_sdk-2.2.0/synth/cli/pricing.py +471 -0
- synth_agent_sdk-2.2.0/synth/cli/registry_prompt.py +831 -0
- synth_agent_sdk-2.2.0/synth/cli/route_cmd.py +403 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/shell.py +17 -0
- synth_agent_sdk-2.2.0/synth/cli/tools_cmd.py +464 -0
- synth_agent_sdk-2.2.0/synth/cloud/__init__.py +73 -0
- synth_agent_sdk-2.2.0/synth/cloud/auth.py +599 -0
- synth_agent_sdk-2.2.0/synth/cloud/cache.py +300 -0
- synth_agent_sdk-2.2.0/synth/cloud/client.py +1592 -0
- synth_agent_sdk-2.2.0/synth/cloud/config.py +146 -0
- synth_agent_sdk-2.2.0/synth/cloud/errors.py +120 -0
- synth_agent_sdk-2.2.0/synth/cloud/manifest.py +197 -0
- synth_agent_sdk-2.2.0/synth/cloud/packaging.py +569 -0
- synth_agent_sdk-2.2.0/synth/cloud/types.py +327 -0
- synth_agent_sdk-2.2.0/synth/config.py +376 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/deploy/agentcore/__init__.py +37 -1
- synth_agent_sdk-2.2.0/synth/deploy/agentcore/adapter.py +719 -0
- synth_agent_sdk-2.2.0/synth/deploy/agentcore/evaluations.py +663 -0
- synth_agent_sdk-2.2.0/synth/deploy/agentcore/gateway.py +756 -0
- synth_agent_sdk-2.2.0/synth/deploy/agentcore/handler.py +151 -0
- synth_agent_sdk-2.2.0/synth/deploy/agentcore/memory.py +1186 -0
- synth_agent_sdk-2.2.0/synth/deploy/agentcore/observability.py +527 -0
- synth_agent_sdk-2.2.0/synth/deploy/agentcore/schema_translator.py +200 -0
- synth_agent_sdk-2.2.0/synth/deploy/agentcore/team_handler.py +507 -0
- synth_agent_sdk-2.2.0/synth/deploy/agentcore/types.py +163 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/deploy/packager.py +40 -3
- synth_agent_sdk-2.2.0/synth/deploy/pipeline/__init__.py +86 -0
- synth_agent_sdk-2.2.0/synth/deploy/pipeline/base.py +406 -0
- synth_agent_sdk-2.2.0/synth/deploy/pipeline/cost_estimator.py +335 -0
- synth_agent_sdk-2.2.0/synth/deploy/pipeline/dry_run.py +218 -0
- synth_agent_sdk-2.2.0/synth/deploy/pipeline/phase_container_build.py +214 -0
- synth_agent_sdk-2.2.0/synth/deploy/pipeline/phase_endpoint_wiring.py +177 -0
- synth_agent_sdk-2.2.0/synth/deploy/pipeline/phase_post_deploy.py +178 -0
- synth_agent_sdk-2.2.0/synth/deploy/pipeline/phase_preflight.py +240 -0
- synth_agent_sdk-2.2.0/synth/deploy/pipeline/phase_registry_publish.py +966 -0
- synth_agent_sdk-2.2.0/synth/deploy/pipeline/phase_runtime_provisioning.py +309 -0
- synth_agent_sdk-2.2.0/synth/deploy/pipeline/phase_state_infra.py +683 -0
- synth_agent_sdk-2.2.0/synth/deploy/pipeline/progress.py +366 -0
- synth_agent_sdk-2.2.0/synth/deploy/pipeline/runner.py +493 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/durable/__init__.py +3 -0
- synth_agent_sdk-2.2.0/synth/durable/runner.py +397 -0
- synth_agent_sdk-2.2.0/synth/durable/wrappers.py +440 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/errors.py +144 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/eval/__init__.py +7 -1
- synth_agent_sdk-2.2.0/synth/eval/scorers.py +261 -0
- synth_agent_sdk-2.2.0/synth/events/__init__.py +62 -0
- synth_agent_sdk-2.2.0/synth/events/base.py +174 -0
- synth_agent_sdk-2.2.0/synth/events/budget.py +58 -0
- synth_agent_sdk-2.2.0/synth/events/deploy.py +58 -0
- synth_agent_sdk-2.2.0/synth/events/executor.py +132 -0
- synth_agent_sdk-2.2.0/synth/events/routing.py +68 -0
- synth_agent_sdk-2.2.0/synth/events/runtime.py +41 -0
- synth_agent_sdk-2.2.0/synth/events/scrub.py +165 -0
- synth_agent_sdk-2.2.0/synth/events/state.py +98 -0
- synth_agent_sdk-2.2.0/synth/guards/__init__.py +7 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/guards/base.py +75 -7
- synth_agent_sdk-2.2.0/synth/guards/composed.py +195 -0
- synth_agent_sdk-2.2.0/synth/guards/cost.py +103 -0
- synth_agent_sdk-2.2.0/synth/guards/pii.py +127 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/guards/rate_limit.py +34 -7
- synth_agent_sdk-2.2.0/synth/hooks/__init__.py +12 -0
- synth_agent_sdk-2.2.0/synth/hooks/base.py +240 -0
- synth_agent_sdk-2.2.0/synth/hooks/types.py +90 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/infra/constructs.py +292 -24
- synth_agent_sdk-2.2.0/synth/knowledge/__init__.py +33 -0
- synth_agent_sdk-2.2.0/synth/knowledge/base.py +73 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/knowledge/bedrock_kb.py +60 -6
- synth_agent_sdk-2.2.0/synth/knowledge/expanders.py +123 -0
- synth_agent_sdk-2.2.0/synth/knowledge/ingestion.py +305 -0
- synth_agent_sdk-2.2.0/synth/knowledge/knowledge.py +360 -0
- synth_agent_sdk-2.2.0/synth/knowledge/pipeline.py +303 -0
- synth_agent_sdk-2.2.0/synth/knowledge/query_expander.py +35 -0
- synth_agent_sdk-2.2.0/synth/knowledge/reranker.py +41 -0
- synth_agent_sdk-2.2.0/synth/knowledge/rerankers.py +184 -0
- synth_agent_sdk-2.2.0/synth/knowledge/s3.py +174 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/knowledge/types.py +13 -0
- synth_agent_sdk-2.2.0/synth/knowledge/vector.py +111 -0
- synth_agent_sdk-2.2.0/synth/loops/__init__.py +16 -0
- synth_agent_sdk-2.2.0/synth/loops/ralph.py +529 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/memory/__init__.py +4 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/memory/base.py +67 -2
- synth_agent_sdk-2.2.0/synth/memory/bedrock_vector_store.py +147 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/memory/conversation.py +82 -8
- synth_agent_sdk-2.2.0/synth/memory/dynamo.py +201 -0
- synth_agent_sdk-2.2.0/synth/memory/local_vector_store.py +128 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/memory/persistent.py +29 -2
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/memory/semantic.py +70 -1
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/memory/thread.py +31 -5
- synth_agent_sdk-2.2.0/synth/memory/vector_store.py +84 -0
- synth_agent_sdk-2.2.0/synth/observability/cloudwatch_sink.py +734 -0
- synth_agent_sdk-2.2.0/synth/observability/trace_endpoint_sink.py +778 -0
- synth_agent_sdk-2.2.0/synth/observability/xray_sink.py +1004 -0
- synth_agent_sdk-2.2.0/synth/orchestration/_session_ids.py +81 -0
- synth_agent_sdk-2.2.0/synth/orchestration/dispatcher.py +1224 -0
- synth_agent_sdk-2.2.0/synth/orchestration/event_bus.py +366 -0
- synth_agent_sdk-2.2.0/synth/orchestration/executors/__init__.py +69 -0
- synth_agent_sdk-2.2.0/synth/orchestration/executors/a2a_bus.py +993 -0
- synth_agent_sdk-2.2.0/synth/orchestration/executors/base.py +454 -0
- synth_agent_sdk-2.2.0/synth/orchestration/executors/blackboard.py +899 -0
- synth_agent_sdk-2.2.0/synth/orchestration/executors/consensus.py +1086 -0
- synth_agent_sdk-2.2.0/synth/orchestration/executors/critic_review.py +834 -0
- synth_agent_sdk-2.2.0/synth/orchestration/executors/debate.py +1006 -0
- synth_agent_sdk-2.2.0/synth/orchestration/executors/direct.py +299 -0
- synth_agent_sdk-2.2.0/synth/orchestration/executors/graph_exec.py +630 -0
- synth_agent_sdk-2.2.0/synth/orchestration/executors/parallel.py +718 -0
- synth_agent_sdk-2.2.0/synth/orchestration/executors/peer_questions.py +539 -0
- synth_agent_sdk-2.2.0/synth/orchestration/executors/pipeline_exec.py +964 -0
- synth_agent_sdk-2.2.0/synth/orchestration/executors/registry.py +347 -0
- synth_agent_sdk-2.2.0/synth/orchestration/executors/single_delegate.py +447 -0
- synth_agent_sdk-2.2.0/synth/orchestration/executors/termination.py +457 -0
- synth_agent_sdk-2.2.0/synth/orchestration/feature_flags.py +81 -0
- synth_agent_sdk-2.2.0/synth/orchestration/governance/__init__.py +30 -0
- synth_agent_sdk-2.2.0/synth/orchestration/governance/budget.py +231 -0
- synth_agent_sdk-2.2.0/synth/orchestration/governance/downgrade.py +134 -0
- synth_agent_sdk-2.2.0/synth/orchestration/governance/policy.py +217 -0
- synth_agent_sdk-2.2.0/synth/orchestration/governance/predicate.py +501 -0
- synth_agent_sdk-2.2.0/synth/orchestration/governance/toml_loader.py +405 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/orchestration/graph.py +346 -37
- synth_agent_sdk-2.2.0/synth/orchestration/interrupt.py +298 -0
- synth_agent_sdk-2.2.0/synth/orchestration/ledgers.py +245 -0
- synth_agent_sdk-2.2.0/synth/orchestration/memory.py +285 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/orchestration/message_bus.py +261 -46
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/orchestration/pipeline.py +204 -11
- synth_agent_sdk-2.2.0/synth/orchestration/plan.py +300 -0
- synth_agent_sdk-2.2.0/synth/orchestration/record_payload.py +210 -0
- synth_agent_sdk-2.2.0/synth/orchestration/record_publisher.py +2209 -0
- synth_agent_sdk-2.2.0/synth/orchestration/registry_audit.py +705 -0
- synth_agent_sdk-2.2.0/synth/orchestration/registry_resolver.py +375 -0
- synth_agent_sdk-2.2.0/synth/orchestration/routing/__init__.py +34 -0
- synth_agent_sdk-2.2.0/synth/orchestration/routing/base.py +252 -0
- synth_agent_sdk-2.2.0/synth/orchestration/routing/decision.py +346 -0
- synth_agent_sdk-2.2.0/synth/orchestration/routing/heuristic_router.py +637 -0
- synth_agent_sdk-2.2.0/synth/orchestration/routing/hybrid_router.py +554 -0
- synth_agent_sdk-2.2.0/synth/orchestration/routing/llm_router.py +597 -0
- synth_agent_sdk-2.2.0/synth/orchestration/routing/prompts.py +275 -0
- synth_agent_sdk-2.2.0/synth/orchestration/routing/replay.py +326 -0
- synth_agent_sdk-2.2.0/synth/orchestration/routing/request.py +180 -0
- synth_agent_sdk-2.2.0/synth/orchestration/routing/rule_router.py +477 -0
- synth_agent_sdk-2.2.0/synth/orchestration/routing/team_descriptor.py +266 -0
- synth_agent_sdk-2.2.0/synth/orchestration/routing/transparency.py +73 -0
- synth_agent_sdk-2.2.0/synth/orchestration/state/__init__.py +38 -0
- synth_agent_sdk-2.2.0/synth/orchestration/state/adapters/__init__.py +14 -0
- synth_agent_sdk-2.2.0/synth/orchestration/state/adapters/dynamodb.py +933 -0
- synth_agent_sdk-2.2.0/synth/orchestration/state/adapters/inmem.py +146 -0
- synth_agent_sdk-2.2.0/synth/orchestration/state/adapters/memory.py +1228 -0
- synth_agent_sdk-2.2.0/synth/orchestration/state/adapters/s3.py +781 -0
- synth_agent_sdk-2.2.0/synth/orchestration/state/agentcore.py +637 -0
- synth_agent_sdk-2.2.0/synth/orchestration/state/base.py +370 -0
- synth_agent_sdk-2.2.0/synth/orchestration/state/local.py +338 -0
- synth_agent_sdk-2.2.0/synth/orchestration/state/schemas.py +362 -0
- synth_agent_sdk-2.2.0/synth/orchestration/state/termination_adapter.py +213 -0
- synth_agent_sdk-2.2.0/synth/orchestration/team.py +6008 -0
- synth_agent_sdk-2.2.0/synth/orchestration/team_registry.py +2383 -0
- synth_agent_sdk-2.2.0/synth/orchestration/topology.py +93 -0
- synth_agent_sdk-2.2.0/synth/plugins.py +246 -0
- synth_agent_sdk-2.2.0/synth/presets/__init__.py +175 -0
- synth_agent_sdk-2.2.0/synth/presets/_loader.py +127 -0
- synth_agent_sdk-2.2.0/synth/presets/back_compat.py +166 -0
- synth_agent_sdk-2.2.0/synth/presets/budgets/enterprise.toml +14 -0
- synth_agent_sdk-2.2.0/synth/presets/budgets/free_tier.toml +13 -0
- synth_agent_sdk-2.2.0/synth/presets/budgets/production.toml +13 -0
- synth_agent_sdk-2.2.0/synth/presets/budgets/safety_rails.toml +14 -0
- synth_agent_sdk-2.2.0/synth/presets/checkpoints/durable.toml +21 -0
- synth_agent_sdk-2.2.0/synth/presets/checkpoints/hitl.toml +18 -0
- synth_agent_sdk-2.2.0/synth/presets/checkpoints/off.toml +9 -0
- synth_agent_sdk-2.2.0/synth/presets/memory/analysis.toml +18 -0
- synth_agent_sdk-2.2.0/synth/presets/memory/assistant.toml +23 -0
- synth_agent_sdk-2.2.0/synth/presets/memory/balanced.toml +23 -0
- synth_agent_sdk-2.2.0/synth/presets/memory/research.toml +21 -0
- synth_agent_sdk-2.2.0/synth/presets/memory/workflow.toml +18 -0
- synth_agent_sdk-2.2.0/synth/presets/resolve.py +247 -0
- synth_agent_sdk-2.2.0/synth/presets/run_history/compliance.toml +21 -0
- synth_agent_sdk-2.2.0/synth/presets/run_history/debug.toml +14 -0
- synth_agent_sdk-2.2.0/synth/presets/run_history/off.toml +9 -0
- synth_agent_sdk-2.2.0/synth/presets/run_history/standard.toml +23 -0
- synth_agent_sdk-2.2.0/synth/pricing/__init__.py +182 -0
- synth_agent_sdk-2.2.0/synth/pricing/data/.gitkeep +3 -0
- synth_agent_sdk-2.2.0/synth/pricing/data/pricing_feed_2026-05-13.json +345 -0
- synth_agent_sdk-2.2.0/synth/pricing/data/signing_public_key.pem +1 -0
- synth_agent_sdk-2.2.0/synth/pricing/data/sources/.gitkeep +5 -0
- synth_agent_sdk-2.2.0/synth/pricing/data/sources/litellm_id_map.json +56 -0
- synth_agent_sdk-2.2.0/synth/pricing/data/sources/litellm_sha.txt +2 -0
- synth_agent_sdk-2.2.0/synth/pricing/data/sources/overrides.json +154 -0
- synth_agent_sdk-2.2.0/synth/pricing/data/sources/required_models.txt +38 -0
- synth_agent_sdk-2.2.0/synth/pricing/loader.py +1329 -0
- synth_agent_sdk-2.2.0/synth/pricing/schema.py +582 -0
- synth_agent_sdk-2.2.0/synth/pricing/signing.py +276 -0
- synth_agent_sdk-2.2.0/synth/pricing/warnings.py +116 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/providers/__init__.py +3 -0
- synth_agent_sdk-2.2.0/synth/providers/_timeout.py +85 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/providers/anthropic.py +124 -16
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/providers/base.py +21 -1
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/providers/bedrock.py +365 -18
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/providers/google.py +61 -6
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/providers/ollama.py +111 -4
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/providers/openai.py +122 -4
- synth_agent_sdk-2.2.0/synth/providers/pricing.py +108 -0
- synth_agent_sdk-2.2.0/synth/providers/retry.py +214 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/providers/router.py +71 -6
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/providers/smart_router.py +182 -5
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/structured/output.py +7 -4
- synth_agent_sdk-2.2.0/synth/tasks/__init__.py +9 -0
- synth_agent_sdk-2.2.0/synth/tasks/runner.py +238 -0
- synth_agent_sdk-2.2.0/synth/tenancy/__init__.py +25 -0
- synth_agent_sdk-2.2.0/synth/tenancy/context.py +76 -0
- synth_agent_sdk-2.2.0/synth/tenancy/cost_attribution.py +394 -0
- synth_agent_sdk-2.2.0/synth/tenancy/credentials.py +251 -0
- synth_agent_sdk-2.2.0/synth/tenancy/middleware.py +287 -0
- synth_agent_sdk-2.2.0/synth/tenancy/quota.py +160 -0
- synth_agent_sdk-2.2.0/synth/testing/__init__.py +27 -0
- synth_agent_sdk-2.2.0/synth/testing/harness.py +375 -0
- synth_agent_sdk-2.2.0/synth/testing/mocks.py +127 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/testing/vcr.py +90 -3
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/tools/__init__.py +4 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/tools/a2a.py +327 -10
- synth_agent_sdk-2.2.0/synth/tools/agent_registry.py +373 -0
- synth_agent_sdk-2.2.0/synth/tools/agent_tool.py +187 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/tools/context.py +13 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/tools/decorator.py +86 -10
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/tools/executor.py +212 -1
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/tools/mcp.py +195 -4
- synth_agent_sdk-2.2.0/synth/tools/mcp_auth.py +1073 -0
- synth_agent_sdk-2.2.0/synth/tools/mcp_callback_server.py +243 -0
- synth_agent_sdk-2.2.0/synth/tools/mcp_config.py +561 -0
- synth_agent_sdk-2.2.0/synth/tools/mcp_registry.py +415 -0
- synth_agent_sdk-2.2.0/synth/tools/mcp_token_cache.py +183 -0
- synth_agent_sdk-2.2.0/synth/tools/tool_registry.py +373 -0
- synth_agent_sdk-2.2.0/synth/tracing/attributes.py +377 -0
- synth_agent_sdk-2.2.0/synth/tracing/exporter.py +496 -0
- synth_agent_sdk-2.2.0/synth/tracing/exporters/otel.py +385 -0
- synth_agent_sdk-2.2.0/synth/tracing/trace.py +545 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/triggers/__init__.py +2 -0
- synth_agent_sdk-2.2.0/synth/triggers/runtime.py +563 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/types.py +107 -1
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/versioning/canary.py +138 -0
- synth_agent_sdk-2.0.0/.gitignore +0 -12
- synth_agent_sdk-2.0.0/dummy.json +0 -1
- synth_agent_sdk-2.0.0/pyproject.toml +0 -119
- synth_agent_sdk-2.0.0/synth/agent.py +0 -1435
- synth_agent_sdk-2.0.0/synth/cache/middleware.py +0 -160
- synth_agent_sdk-2.0.0/synth/checkpointing/__init__.py +0 -6
- synth_agent_sdk-2.0.0/synth/checkpointing/base.py +0 -58
- synth_agent_sdk-2.0.0/synth/cli/_ui_assets/conversations.json +0 -20
- synth_agent_sdk-2.0.0/synth/cli/_ui_assets/server.py +0 -4724
- synth_agent_sdk-2.0.0/synth/cli/deploy_cmd.py +0 -3274
- synth_agent_sdk-2.0.0/synth/cli/dev.py +0 -153
- synth_agent_sdk-2.0.0/synth/cli/init_cmd.py +0 -9053
- synth_agent_sdk-2.0.0/synth/deploy/agentcore/adapter.py +0 -211
- synth_agent_sdk-2.0.0/synth/deploy/agentcore/gateway.py +0 -201
- synth_agent_sdk-2.0.0/synth/deploy/agentcore/handler.py +0 -97
- synth_agent_sdk-2.0.0/synth/deploy/agentcore/memory.py +0 -302
- synth_agent_sdk-2.0.0/synth/deploy/agentcore/team_handler.py +0 -218
- synth_agent_sdk-2.0.0/synth/durable/runner.py +0 -283
- synth_agent_sdk-2.0.0/synth/eval/scorers.py +0 -103
- synth_agent_sdk-2.0.0/synth/guards/__init__.py +0 -7
- synth_agent_sdk-2.0.0/synth/guards/composed.py +0 -112
- synth_agent_sdk-2.0.0/synth/guards/cost.py +0 -52
- synth_agent_sdk-2.0.0/synth/guards/pii.py +0 -61
- synth_agent_sdk-2.0.0/synth/knowledge/__init__.py +0 -18
- synth_agent_sdk-2.0.0/synth/knowledge/base.py +0 -37
- synth_agent_sdk-2.0.0/synth/knowledge/knowledge.py +0 -116
- synth_agent_sdk-2.0.0/synth/knowledge/s3.py +0 -80
- synth_agent_sdk-2.0.0/synth/knowledge/vector.py +0 -53
- synth_agent_sdk-2.0.0/synth/orchestration/memory.py +0 -126
- synth_agent_sdk-2.0.0/synth/orchestration/team.py +0 -3200
- synth_agent_sdk-2.0.0/synth/providers/pricing.py +0 -97
- synth_agent_sdk-2.0.0/synth/providers/retry.py +0 -99
- synth_agent_sdk-2.0.0/synth/tenancy/__init__.py +0 -7
- synth_agent_sdk-2.0.0/synth/tenancy/context.py +0 -33
- synth_agent_sdk-2.0.0/synth/testing/__init__.py +0 -18
- synth_agent_sdk-2.0.0/synth/tools/agent_tool.py +0 -82
- synth_agent_sdk-2.0.0/synth/tracing/exporter.py +0 -224
- synth_agent_sdk-2.0.0/synth/tracing/exporters/otel.py +0 -216
- synth_agent_sdk-2.0.0/synth/tracing/trace.py +0 -196
- synth_agent_sdk-2.0.0/tool.yaml +0 -17
- synth_agent_sdk-2.0.0/tools.py +0 -1
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/requirements.txt +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/README.md +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/__main__.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/_compat.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/audit/__init__.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/audit/backends/__init__.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/audit/backends/cloudwatch.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/audit/backends/dynamo.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/audit/backends/local.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/audit/backends/s3.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/audit/chain.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/audit/types.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cache/__init__.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cache/base.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cache/dynamo.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cache/local.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cache/redis.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cache/types.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/__init__.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/_agent_ops.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/_colors.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/_platform_assets/app.js +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/_platform_assets/easter_eggs.js +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/_platform_assets/index.html +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/_platform_assets/style.css +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/_render.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/_tui.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/_ui_assets/README.md +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/_ui_assets/easter_eggs.js +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/_ui_assets/static/easter_eggs.js +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/_ui_templates.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/aws_auth.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/banner.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/bench_cmd.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/discover.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/eval_cmd.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/help_cmd.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/platform_cmd.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/registry.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/run_cmd.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/trace_cmd.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/cli/welcome.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/deploy/__init__.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/deploy/agentcore/auth.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/deploy/agentcore/browser.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/deploy/agentcore/code_interpreter.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/deploy/agentcore/credentials.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/deploy/agentcore/manifest.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/deploy/agentcore/model_catalog.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/deploy/agentcore/ssm.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/deploy/agentcore/tool_registry.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/durable/base.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/durable/dynamo.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/durable/local.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/durable/redis.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/durable/types.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/eval/eval.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/eval/report.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/eval/suites/__init__.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/eval/suites/base.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/eval/suites/grounding.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/eval/suites/guard_compliance.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/eval/suites/hallucination.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/eval/suites/multi_step.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/eval/suites/tool_selection.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/eval/trace_to_eval.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/guards/custom.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/guards/tool_filter.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/infra/__init__.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/infra/app_template.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/infra/enterprise_constructs.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/infra/enterprise_stack.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/infra/stack.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/observability/__init__.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/observability/cloudwatch.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/observability/metrics.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/orchestration/__init__.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/orchestration/export.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/orchestration/human_in_loop.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/orchestration/time_travel.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/platform/__init__.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/platform/bootstrap.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/platform/catalog.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/platform/cedar.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/platform/deploy_profile.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/platform/drift.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/platform/infra.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/platform/manifest.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/platform/planner.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/platform/preflight.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/platform/publisher.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/platform/rbac.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/platform/registry_provisioner.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/platform/resource_publisher.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/platform/secret_resolver.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/platform/state.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/platform/template_generator.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/platform/validator.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/platform/versioning.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/providers/test.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/secrets/__init__.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/secrets/resolver.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/structured/__init__.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/tenancy/isolation.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/tools/builtins.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/tools/media.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/tools/middleware.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/tools/toolkit.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/tools/web_search.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/tracing/__init__.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/tracing/exporters/__init__.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/tracing/exporters/base.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/tracing/exporters/datadog.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/tracing/exporters/honeycomb.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/tracing/exporters/langfuse.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/tracing/integrations.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/triggers/handler.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/triggers/trigger.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/triggers/types.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/versioning/__init__.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/versioning/manifest.py +0 -0
- {synth_agent_sdk-2.0.0 → synth_agent_sdk-2.2.0}/synth/versioning/store.py +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
.git/
|
|
2
|
+
.github/
|
|
3
|
+
.hypothesis/
|
|
4
|
+
.bedrock_agentcore/
|
|
5
|
+
*.env
|
|
6
|
+
.env*
|
|
7
|
+
**/.aws/
|
|
8
|
+
**/__pycache__/
|
|
9
|
+
**/*.pyc
|
|
10
|
+
**/*.pyo
|
|
11
|
+
*.egg-info/
|
|
12
|
+
dist/
|
|
13
|
+
build/
|
|
14
|
+
.coverage
|
|
15
|
+
htmlcov/
|
|
16
|
+
.pytest_cache/
|
|
17
|
+
node_modules/
|
|
18
|
+
Legal Team/
|
|
19
|
+
agent/
|
|
20
|
+
tests/
|
|
21
|
+
docs/
|
|
22
|
+
*.log
|
|
23
|
+
agentcore.yaml
|
|
24
|
+
.bedrock_agentcore.yaml
|
|
25
|
+
**/.synth/
|
|
26
|
+
.kiro/
|
|
27
|
+
Synth Website/
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Synth SDK CODEOWNERS
|
|
2
|
+
#
|
|
3
|
+
# This file assigns mandatory reviewers to PRs touching the given
|
|
4
|
+
# paths. See https://docs.github.com/en/repositories/managing-your-
|
|
5
|
+
# repositories-settings-and-features/customizing-your-repository/
|
|
6
|
+
# about-code-owners for syntax.
|
|
7
|
+
|
|
8
|
+
# ---------------------------------------------------------------------------
|
|
9
|
+
# UI surfaces — Task 8.2 of telemetry-and-ui-architecture spec (R6.4).
|
|
10
|
+
#
|
|
11
|
+
# The Dev Space UI server and its assets are thin-presenter surfaces
|
|
12
|
+
# per design §2.2 and the AgentCore Native Execution Principle
|
|
13
|
+
# (rule 9). Every change to these paths must be reviewed by the
|
|
14
|
+
# observability team so UI changes that would re-introduce
|
|
15
|
+
# authoritative state caching or bypass the `_sse_emit` provenance
|
|
16
|
+
# funnel are caught at review time.
|
|
17
|
+
# ---------------------------------------------------------------------------
|
|
18
|
+
|
|
19
|
+
synth/cli/_ui_assets/ @observability-team
|
|
20
|
+
synth/cli/_ui_assets/provenance.py @observability-team
|
|
21
|
+
synth/cli/_ui_assets/agentcore_history.py @observability-team
|
|
22
|
+
synth/cli/_ui_assets/server.py @observability-team
|
|
23
|
+
synth/cli/_ui_assets/static/ @observability-team
|
|
24
|
+
|
|
25
|
+
# ---------------------------------------------------------------------------
|
|
26
|
+
# Observability sinks — Tasks 2.x, 3.x, 4.x (R2, R3, R4).
|
|
27
|
+
#
|
|
28
|
+
# First-party sinks share a stats() contract (NFR.4) and a set of
|
|
29
|
+
# wire-format invariants that the observability team owns.
|
|
30
|
+
# ---------------------------------------------------------------------------
|
|
31
|
+
|
|
32
|
+
synth/observability/ @observability-team
|
|
33
|
+
synth/tracing/attributes.py @observability-team
|
|
34
|
+
synth/cli/_doc_gen/ @observability-team
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
name: Observability Doc Idempotence
|
|
2
|
+
|
|
3
|
+
# Task 7.4 of the telemetry-and-ui-architecture spec.
|
|
4
|
+
#
|
|
5
|
+
# Re-runs the deterministic observability HTML generator and asserts
|
|
6
|
+
# the committed `Synth Website/docs/observability.html` is identical
|
|
7
|
+
# to what the generator produces now. If anyone edits the span
|
|
8
|
+
# dataclasses in `synth/tracing/attributes.py` or the generator
|
|
9
|
+
# itself without regenerating the page, this job fails the PR with
|
|
10
|
+
# a clear "run the generator" message.
|
|
11
|
+
|
|
12
|
+
on:
|
|
13
|
+
pull_request:
|
|
14
|
+
paths:
|
|
15
|
+
- 'synth/cli/_doc_gen/**'
|
|
16
|
+
- 'synth/tracing/attributes.py'
|
|
17
|
+
- 'Synth Website/docs/observability.html'
|
|
18
|
+
|
|
19
|
+
jobs:
|
|
20
|
+
check:
|
|
21
|
+
name: Verify observability.html is up to date
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
timeout-minutes: 5
|
|
24
|
+
|
|
25
|
+
steps:
|
|
26
|
+
- name: Checkout PR
|
|
27
|
+
uses: actions/checkout@v4
|
|
28
|
+
|
|
29
|
+
- name: Setup Python
|
|
30
|
+
uses: actions/setup-python@v5
|
|
31
|
+
with:
|
|
32
|
+
python-version: '3.12'
|
|
33
|
+
|
|
34
|
+
- name: Install SDK (editable)
|
|
35
|
+
# The generator imports from ``synth.tracing.attributes``; an
|
|
36
|
+
# editable install is the fastest way to make that import
|
|
37
|
+
# resolve without shipping a wheel.
|
|
38
|
+
run: pip install --quiet -e .
|
|
39
|
+
|
|
40
|
+
- name: Regenerate observability.html
|
|
41
|
+
run: python -m synth.cli._doc_gen.observability_html
|
|
42
|
+
|
|
43
|
+
- name: Assert no diff
|
|
44
|
+
run: |
|
|
45
|
+
if ! git diff --exit-code -- 'Synth Website/docs/observability.html'; then
|
|
46
|
+
echo "::error::Synth Website/docs/observability.html is out of"
|
|
47
|
+
echo "::error::date relative to the generator. Run"
|
|
48
|
+
echo "::error::'python -m synth.cli._doc_gen.observability_html'"
|
|
49
|
+
echo "::error::locally, commit the regenerated HTML, and"
|
|
50
|
+
echo "::error::push again."
|
|
51
|
+
exit 1
|
|
52
|
+
fi
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
name: ci-pricing-feed-validation
|
|
2
|
+
|
|
3
|
+
# Anchored by Task 17.2 of
|
|
4
|
+
# .kiro/specs/active/foundational/cost-and-pricing-accuracy/tasks.md.
|
|
5
|
+
#
|
|
6
|
+
# Runs on every PR that touches the pricing pipeline: schema-validates
|
|
7
|
+
# the bundled feed (Req 1.3) and runs the refresh script in dry-run
|
|
8
|
+
# mode to produce a delta summary for PR reviewers (Req 10.7).
|
|
9
|
+
|
|
10
|
+
on:
|
|
11
|
+
pull_request:
|
|
12
|
+
paths:
|
|
13
|
+
- "synth/pricing/**"
|
|
14
|
+
- "scripts/refresh_pricing_feed.py"
|
|
15
|
+
- "scripts/aws_bulk_parser.py"
|
|
16
|
+
- "scripts/litellm_parser.py"
|
|
17
|
+
- "synth/pricing/data/sources/**"
|
|
18
|
+
workflow_dispatch: {}
|
|
19
|
+
|
|
20
|
+
permissions:
|
|
21
|
+
contents: read
|
|
22
|
+
pull-requests: write
|
|
23
|
+
|
|
24
|
+
jobs:
|
|
25
|
+
validate-feed:
|
|
26
|
+
name: Validate bundled pricing feed + dry-run delta
|
|
27
|
+
runs-on: ubuntu-latest
|
|
28
|
+
steps:
|
|
29
|
+
- name: Checkout repository
|
|
30
|
+
uses: actions/checkout@v4
|
|
31
|
+
|
|
32
|
+
- name: Set up Python
|
|
33
|
+
uses: actions/setup-python@v5
|
|
34
|
+
with:
|
|
35
|
+
python-version: "3.12"
|
|
36
|
+
|
|
37
|
+
- name: Install SDK with pricing-refresh extra
|
|
38
|
+
run: |
|
|
39
|
+
python -m pip install --upgrade pip
|
|
40
|
+
python -m pip install -e '.[pricing-refresh]'
|
|
41
|
+
|
|
42
|
+
- name: Run bundled-feed schema validation
|
|
43
|
+
run: |
|
|
44
|
+
python -m pytest tests/unit/test_pricing_feed_bundled.py -v --tb=short
|
|
45
|
+
|
|
46
|
+
- name: Run refresh script in dry-run mode
|
|
47
|
+
id: dry_run
|
|
48
|
+
continue-on-error: true
|
|
49
|
+
run: |
|
|
50
|
+
set +e
|
|
51
|
+
OUTPUT_FILE="/tmp/refresh_dry_run_output.txt"
|
|
52
|
+
python -m scripts.refresh_pricing_feed --dry-run 2>&1 | tee "$OUTPUT_FILE"
|
|
53
|
+
RC=${PIPESTATUS[0]}
|
|
54
|
+
echo "exit_code=$RC" >> "$GITHUB_OUTPUT"
|
|
55
|
+
# Extract the "Pricing feed refresh — delta summary" block
|
|
56
|
+
# by anchoring on the header and the trailing blank line.
|
|
57
|
+
awk '/Pricing feed refresh/,/^$/' "$OUTPUT_FILE" > /tmp/delta_summary.txt || true
|
|
58
|
+
{
|
|
59
|
+
echo "delta_summary<<DELTA_EOF"
|
|
60
|
+
cat /tmp/delta_summary.txt
|
|
61
|
+
echo "DELTA_EOF"
|
|
62
|
+
} >> "$GITHUB_OUTPUT"
|
|
63
|
+
exit $RC
|
|
64
|
+
|
|
65
|
+
- name: Post delta summary as PR comment
|
|
66
|
+
if: ${{ github.event_name == 'pull_request' }}
|
|
67
|
+
uses: actions/github-script@v7
|
|
68
|
+
env:
|
|
69
|
+
DELTA_SUMMARY: ${{ steps.dry_run.outputs.delta_summary }}
|
|
70
|
+
DRY_RUN_EXIT: ${{ steps.dry_run.outputs.exit_code }}
|
|
71
|
+
with:
|
|
72
|
+
script: |
|
|
73
|
+
const summary = process.env.DELTA_SUMMARY || "(no delta summary captured)";
|
|
74
|
+
const exitCode = process.env.DRY_RUN_EXIT || "unknown";
|
|
75
|
+
const status = exitCode === "0"
|
|
76
|
+
? "✅ Dry-run passed"
|
|
77
|
+
: `❌ Dry-run failed (exit ${exitCode})`;
|
|
78
|
+
const body = [
|
|
79
|
+
"## Pricing feed refresh — dry-run delta",
|
|
80
|
+
"",
|
|
81
|
+
status,
|
|
82
|
+
"",
|
|
83
|
+
"```",
|
|
84
|
+
summary,
|
|
85
|
+
"```",
|
|
86
|
+
"",
|
|
87
|
+
"_Posted by ci-pricing-feed-validation (Task 17.2). "
|
|
88
|
+
+ "Reviewers: confirm the model/resource deltas against "
|
|
89
|
+
+ "the PR's intended scope before merge._",
|
|
90
|
+
].join("\n");
|
|
91
|
+
await github.rest.issues.createComment({
|
|
92
|
+
owner: context.repo.owner,
|
|
93
|
+
repo: context.repo.repo,
|
|
94
|
+
issue_number: context.issue.number,
|
|
95
|
+
body,
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
- name: Fail job if dry-run failed
|
|
99
|
+
if: ${{ steps.dry_run.outputs.exit_code != '0' }}
|
|
100
|
+
run: |
|
|
101
|
+
echo "::error::Refresh script dry-run failed with exit code ${{ steps.dry_run.outputs.exit_code }}. See the job log or PR comment for the delta summary."
|
|
102
|
+
exit 1
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
name: ci-pricing-freshness
|
|
2
|
+
|
|
3
|
+
# Anchored by Task 17.1 of
|
|
4
|
+
# .kiro/specs/active/foundational/cost-and-pricing-accuracy/tasks.md.
|
|
5
|
+
#
|
|
6
|
+
# Fails the build when the bundled pricing feed is older than
|
|
7
|
+
# 120 days (Req 2.3 — buffer over the 90-day release target) or
|
|
8
|
+
# when an entry in synth/pricing/data/sources/overrides.json has a
|
|
9
|
+
# sunset_date in the past (Req 10.4).
|
|
10
|
+
|
|
11
|
+
on:
|
|
12
|
+
push:
|
|
13
|
+
branches: [main]
|
|
14
|
+
schedule:
|
|
15
|
+
# Nightly at 02:30 UTC so a newly-stale feed is caught before
|
|
16
|
+
# the next release cut.
|
|
17
|
+
- cron: "30 2 * * *"
|
|
18
|
+
workflow_dispatch: {}
|
|
19
|
+
|
|
20
|
+
permissions:
|
|
21
|
+
contents: read
|
|
22
|
+
|
|
23
|
+
jobs:
|
|
24
|
+
check-freshness:
|
|
25
|
+
name: Check bundled pricing feed freshness
|
|
26
|
+
runs-on: ubuntu-latest
|
|
27
|
+
steps:
|
|
28
|
+
- name: Checkout repository
|
|
29
|
+
uses: actions/checkout@v4
|
|
30
|
+
|
|
31
|
+
- name: Set up Python
|
|
32
|
+
uses: actions/setup-python@v5
|
|
33
|
+
with:
|
|
34
|
+
python-version: "3.12"
|
|
35
|
+
|
|
36
|
+
- name: Check bundled-feed age
|
|
37
|
+
shell: python {0}
|
|
38
|
+
run: |
|
|
39
|
+
import datetime as _dt
|
|
40
|
+
import glob
|
|
41
|
+
import json
|
|
42
|
+
import os
|
|
43
|
+
import re
|
|
44
|
+
import sys
|
|
45
|
+
|
|
46
|
+
FEED_GLOB = "synth/pricing/data/pricing_feed_*.json"
|
|
47
|
+
MAX_AGE_DAYS = 120
|
|
48
|
+
|
|
49
|
+
matches = sorted(glob.glob(FEED_GLOB))
|
|
50
|
+
if not matches:
|
|
51
|
+
print(f"::error::No bundled pricing feed found under {FEED_GLOB}. "
|
|
52
|
+
f"Run 'scripts/refresh_pricing_feed.py' to generate one.")
|
|
53
|
+
sys.exit(1)
|
|
54
|
+
if len(matches) > 1:
|
|
55
|
+
print(f"::error::Multiple bundled pricing feeds found: {matches}. "
|
|
56
|
+
f"A release should contain exactly one; delete stale feeds.")
|
|
57
|
+
sys.exit(1)
|
|
58
|
+
|
|
59
|
+
feed_path = matches[0]
|
|
60
|
+
with open(feed_path, "r", encoding="utf-8") as f:
|
|
61
|
+
feed = json.load(f)
|
|
62
|
+
|
|
63
|
+
pricing_date_str = feed["pricing_data_date"]
|
|
64
|
+
pricing_date = _dt.date.fromisoformat(pricing_date_str)
|
|
65
|
+
today = _dt.datetime.now(_dt.UTC).date()
|
|
66
|
+
age_days = (today - pricing_date).days
|
|
67
|
+
|
|
68
|
+
print(f"Bundled pricing feed: {feed_path}")
|
|
69
|
+
print(f" pricing_data_date: {pricing_date_str}")
|
|
70
|
+
print(f" age (days): {age_days}")
|
|
71
|
+
print(f" max allowed: {MAX_AGE_DAYS}")
|
|
72
|
+
|
|
73
|
+
if age_days > MAX_AGE_DAYS:
|
|
74
|
+
print(f"::error file={feed_path}::"
|
|
75
|
+
f"Bundled pricing feed is {age_days} days old; "
|
|
76
|
+
f"exceeds the {MAX_AGE_DAYS}-day cap (Req 2.3). "
|
|
77
|
+
f"Run 'python -m scripts.refresh_pricing_feed' to regenerate, "
|
|
78
|
+
f"then commit the new feed file.")
|
|
79
|
+
sys.exit(1)
|
|
80
|
+
|
|
81
|
+
print(f"::notice file={feed_path}::"
|
|
82
|
+
f"Bundled pricing feed is {age_days} days old (under "
|
|
83
|
+
f"{MAX_AGE_DAYS}-day cap).")
|
|
84
|
+
|
|
85
|
+
- name: Check overrides sunset dates
|
|
86
|
+
shell: python {0}
|
|
87
|
+
run: |
|
|
88
|
+
import datetime as _dt
|
|
89
|
+
import json
|
|
90
|
+
import sys
|
|
91
|
+
|
|
92
|
+
OVERRIDES_PATH = "synth/pricing/data/sources/overrides.json"
|
|
93
|
+
|
|
94
|
+
with open(OVERRIDES_PATH, "r", encoding="utf-8") as f:
|
|
95
|
+
overrides = json.load(f)
|
|
96
|
+
|
|
97
|
+
overrides.pop("_schema_comment", None)
|
|
98
|
+
today = _dt.datetime.now(_dt.UTC).date()
|
|
99
|
+
|
|
100
|
+
expired: list[tuple[str, str, str]] = []
|
|
101
|
+
for section in ("models", "resources"):
|
|
102
|
+
entries = overrides.get(section, {}) or {}
|
|
103
|
+
for key, entry in entries.items():
|
|
104
|
+
if not isinstance(entry, dict):
|
|
105
|
+
continue
|
|
106
|
+
sunset_raw = entry.get("sunset_date")
|
|
107
|
+
if not isinstance(sunset_raw, str):
|
|
108
|
+
continue
|
|
109
|
+
try:
|
|
110
|
+
sunset = _dt.date.fromisoformat(sunset_raw)
|
|
111
|
+
except ValueError:
|
|
112
|
+
print(f"::error file={OVERRIDES_PATH}::"
|
|
113
|
+
f"Override {section}['{key}'] has invalid "
|
|
114
|
+
f"sunset_date {sunset_raw!r}.")
|
|
115
|
+
sys.exit(1)
|
|
116
|
+
if sunset < today:
|
|
117
|
+
expired.append((section, key, sunset_raw))
|
|
118
|
+
|
|
119
|
+
if expired:
|
|
120
|
+
for section, key, sunset_raw in expired:
|
|
121
|
+
days_expired = (today - _dt.date.fromisoformat(sunset_raw)).days
|
|
122
|
+
print(f"::error file={OVERRIDES_PATH}::"
|
|
123
|
+
f"Override {section}['{key}'] expired "
|
|
124
|
+
f"{days_expired} days ago (sunset_date={sunset_raw}). "
|
|
125
|
+
f"Either extend the sunset_date or remove the override.")
|
|
126
|
+
sys.exit(1)
|
|
127
|
+
|
|
128
|
+
print(f"::notice file={OVERRIDES_PATH}::"
|
|
129
|
+
f"All overrides are within their sunset_date windows.")
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
name: Spec Metadata Lint
|
|
2
|
+
|
|
3
|
+
# Task 6.2 — Telemetry and UI Architecture spec R7.1 / R7.3 / R7.4.
|
|
4
|
+
# Validates that every `.kiro/specs/**/requirements.md` modified in a PR
|
|
5
|
+
# carries the metadata header required by
|
|
6
|
+
# `.kiro/steering/Spec Metadata Convention.md`. Uses the
|
|
7
|
+
# `--check --file …` mode added to `regenerate_spec_index.py` in Task 6.1
|
|
8
|
+
# so the validator only inspects the PR's changed files.
|
|
9
|
+
|
|
10
|
+
on:
|
|
11
|
+
pull_request:
|
|
12
|
+
paths:
|
|
13
|
+
- '.kiro/specs/**/requirements.md'
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
lint:
|
|
17
|
+
name: Validate spec metadata headers
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
timeout-minutes: 5
|
|
20
|
+
|
|
21
|
+
steps:
|
|
22
|
+
- name: Checkout PR
|
|
23
|
+
uses: actions/checkout@v4
|
|
24
|
+
with:
|
|
25
|
+
# Fetch two commits so `git diff HEAD^ HEAD` resolves the
|
|
26
|
+
# changed-file list below.
|
|
27
|
+
fetch-depth: 2
|
|
28
|
+
|
|
29
|
+
- name: Setup Python
|
|
30
|
+
uses: actions/setup-python@v5
|
|
31
|
+
with:
|
|
32
|
+
python-version: '3.12'
|
|
33
|
+
|
|
34
|
+
- name: Install PyYAML
|
|
35
|
+
# The validator is self-contained apart from PyYAML (used by
|
|
36
|
+
# the companion `update_cross_references.py` script imported
|
|
37
|
+
# indirectly). No SDK install needed — R7.4 calls for
|
|
38
|
+
# completion inside 30 seconds on a 5-file diff.
|
|
39
|
+
run: pip install --quiet pyyaml
|
|
40
|
+
|
|
41
|
+
- name: Collect changed requirements.md files
|
|
42
|
+
id: changed
|
|
43
|
+
run: |
|
|
44
|
+
# Prefer GitHub's PR base-ref resolution; fall back to
|
|
45
|
+
# `HEAD^` when the action is re-run outside the PR context.
|
|
46
|
+
if [ -n "$GITHUB_BASE_REF" ]; then
|
|
47
|
+
git fetch --depth=1 origin "$GITHUB_BASE_REF"
|
|
48
|
+
base="origin/$GITHUB_BASE_REF"
|
|
49
|
+
else
|
|
50
|
+
base="HEAD^"
|
|
51
|
+
fi
|
|
52
|
+
files=$(git diff --name-only --diff-filter=AMR "$base" HEAD \
|
|
53
|
+
-- '.kiro/specs/**/requirements.md' || true)
|
|
54
|
+
if [ -z "$files" ]; then
|
|
55
|
+
echo "no changed requirements.md files — skipping."
|
|
56
|
+
echo "files=" >> "$GITHUB_OUTPUT"
|
|
57
|
+
else
|
|
58
|
+
echo "$files"
|
|
59
|
+
# Emit a multi-line output for the next step.
|
|
60
|
+
{
|
|
61
|
+
echo "files<<EOF"
|
|
62
|
+
echo "$files"
|
|
63
|
+
echo "EOF"
|
|
64
|
+
} >> "$GITHUB_OUTPUT"
|
|
65
|
+
fi
|
|
66
|
+
|
|
67
|
+
- name: Validate metadata (timed)
|
|
68
|
+
id: validate
|
|
69
|
+
if: steps.changed.outputs.files != ''
|
|
70
|
+
run: |
|
|
71
|
+
# Task 6.4 — workflow completion time check. The validator
|
|
72
|
+
# itself runs inside `time`; we fail the step if it ever
|
|
73
|
+
# takes longer than 30s on a 5-file diff (R7.4 / NFR.3).
|
|
74
|
+
args=()
|
|
75
|
+
while IFS= read -r file; do
|
|
76
|
+
[ -z "$file" ] && continue
|
|
77
|
+
args+=("--file" "$file")
|
|
78
|
+
done <<< "${{ steps.changed.outputs.files }}"
|
|
79
|
+
|
|
80
|
+
start=$(date +%s)
|
|
81
|
+
set +e
|
|
82
|
+
# Capture stderr so we can post it verbatim to the PR comment
|
|
83
|
+
# (R7.3 / Task 6.5 — "actionable field list").
|
|
84
|
+
python .kiro/scripts/regenerate_spec_index.py \
|
|
85
|
+
--check "${args[@]}" 2> /tmp/lint-stderr.log
|
|
86
|
+
status=$?
|
|
87
|
+
set -e
|
|
88
|
+
end=$(date +%s)
|
|
89
|
+
elapsed=$((end - start))
|
|
90
|
+
|
|
91
|
+
echo "elapsed=$elapsed" >> "$GITHUB_OUTPUT"
|
|
92
|
+
echo "status=$status" >> "$GITHUB_OUTPUT"
|
|
93
|
+
|
|
94
|
+
if [ "$elapsed" -gt 30 ]; then
|
|
95
|
+
echo "::error::Spec metadata lint exceeded 30s cap (actual: ${elapsed}s)."
|
|
96
|
+
exit 1
|
|
97
|
+
fi
|
|
98
|
+
|
|
99
|
+
if [ "$status" -ne 0 ]; then
|
|
100
|
+
cat /tmp/lint-stderr.log
|
|
101
|
+
exit "$status"
|
|
102
|
+
fi
|
|
103
|
+
|
|
104
|
+
- name: Post actionable failure comment
|
|
105
|
+
if: failure() && steps.validate.outputs.status != '0'
|
|
106
|
+
uses: actions/github-script@v7
|
|
107
|
+
with:
|
|
108
|
+
script: |
|
|
109
|
+
const fs = require('fs');
|
|
110
|
+
let body;
|
|
111
|
+
try {
|
|
112
|
+
body = fs.readFileSync('/tmp/lint-stderr.log', 'utf8');
|
|
113
|
+
} catch (e) {
|
|
114
|
+
body = '(validator produced no stderr output)';
|
|
115
|
+
}
|
|
116
|
+
const link = (
|
|
117
|
+
'.kiro/steering/Spec Metadata Convention.md'
|
|
118
|
+
);
|
|
119
|
+
const msg = [
|
|
120
|
+
'### Spec metadata validation failed',
|
|
121
|
+
'',
|
|
122
|
+
'The `regenerate_spec_index.py --check` validator reported:',
|
|
123
|
+
'',
|
|
124
|
+
'```',
|
|
125
|
+
body.trim(),
|
|
126
|
+
'```',
|
|
127
|
+
'',
|
|
128
|
+
`See [${link}](${link}) for the required metadata header format.`,
|
|
129
|
+
'',
|
|
130
|
+
'Run `python .kiro/scripts/regenerate_spec_index.py --check` locally to reproduce.',
|
|
131
|
+
].join('\n');
|
|
132
|
+
await github.rest.issues.createComment({
|
|
133
|
+
owner: context.repo.owner,
|
|
134
|
+
repo: context.repo.repo,
|
|
135
|
+
issue_number: context.issue.number,
|
|
136
|
+
body: msg,
|
|
137
|
+
});
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Python build artifacts
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.pyc
|
|
4
|
+
*.pyo
|
|
5
|
+
*.pyd
|
|
6
|
+
*.egg-info/
|
|
7
|
+
*.egg
|
|
8
|
+
dist/
|
|
9
|
+
build/
|
|
10
|
+
*.whl
|
|
11
|
+
*.tar.gz
|
|
12
|
+
MANIFEST
|
|
13
|
+
|
|
14
|
+
# Virtual environments
|
|
15
|
+
.venv/
|
|
16
|
+
venv/
|
|
17
|
+
env/
|
|
18
|
+
.env
|
|
19
|
+
|
|
20
|
+
# Test & coverage
|
|
21
|
+
.hypothesis/
|
|
22
|
+
.pytest_cache/
|
|
23
|
+
.coverage
|
|
24
|
+
.coverage.*
|
|
25
|
+
htmlcov/
|
|
26
|
+
coverage.xml
|
|
27
|
+
*.cover
|
|
28
|
+
|
|
29
|
+
# IDE & editor
|
|
30
|
+
.vscode/
|
|
31
|
+
.idea/
|
|
32
|
+
*.swp
|
|
33
|
+
*.swo
|
|
34
|
+
*~
|
|
35
|
+
|
|
36
|
+
# Local dev state
|
|
37
|
+
.synth/
|
|
38
|
+
.bedrock_agentcore/
|
|
39
|
+
*.log
|
|
40
|
+
|
|
41
|
+
# CDK build artifacts
|
|
42
|
+
synth-ui-deploy/cdk.out/
|
|
43
|
+
synth-ui-deploy/cdk.out.*/
|
|
44
|
+
synth-ui-deploy/.venv/
|
|
45
|
+
synth-ui-deploy/team-configs/
|
|
46
|
+
|
|
47
|
+
# Secrets & credentials
|
|
48
|
+
.env
|
|
49
|
+
*.env
|
|
50
|
+
.aws/
|
|
51
|
+
|
|
52
|
+
# macOS
|
|
53
|
+
.DS_Store
|
|
54
|
+
.AppleDouble
|
|
55
|
+
.LSOverride
|
|
56
|
+
|
|
57
|
+
# Jupyter
|
|
58
|
+
.ipynb_checkpoints/
|
|
59
|
+
*.ipynb
|
|
60
|
+
|
|
61
|
+
# Type checking
|
|
62
|
+
.mypy_cache/
|
|
63
|
+
.dmypy.json
|
|
64
|
+
.pytype/
|
|
65
|
+
|
|
66
|
+
# Docs build
|
|
67
|
+
docs/_build/
|
|
68
|
+
site/
|