tradingcodex 1.2.1__tar.gz → 1.2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/CHANGELOG.md +12 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/PKG-INFO +1 -1
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/docs/codex-native-orchestration.md +11 -6
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/docs/generated-workspaces.md +22 -13
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/docs/roles-skills-and-workflows.md +6 -3
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/docs/validation-and-test-plan.md +12 -8
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/installation.md +5 -5
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_codex_cli_compat.py +8 -4
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_codex_native_orchestration.py +28 -4
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_datasets.py +51 -1
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_release_contract.py +2 -1
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_research_forecast_surfaces.py +4 -1
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex.egg-info/PKG-INFO +1 -1
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/commands/doctor.py +12 -3
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/agents.py +1 -1
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/mcp_runtime.py +25 -0
- tradingcodex-1.2.2/tradingcodex_service/version.py +1 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/codex-base/files/.codex/config.toml +0 -3
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/codex-base/files/.codex/prompts/base_instructions/fixed-role.md +1 -1
- tradingcodex-1.2.1/tradingcodex_service/version.py +0 -1
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/CONTRIBUTING.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/LICENSE +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/MANIFEST.in +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/NOTICE +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/README.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/TRADEMARKS.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/__init__.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/audit/__init__.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/audit/admin.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/audit/apps.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/audit/migrations/0001_v1_initial.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/audit/migrations/__init__.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/audit/models.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/harness/__init__.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/harness/admin.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/harness/apps.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/harness/migrations/0001_v1_initial.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/harness/migrations/__init__.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/harness/models.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/harness/templatetags/__init__.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/integrations/__init__.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/integrations/admin.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/integrations/apps.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/integrations/migrations/0001_v1_initial.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/integrations/migrations/__init__.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/integrations/models.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/mcp/__init__.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/mcp/admin.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/mcp/apps.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/mcp/migrations/0001_v1_initial.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/mcp/migrations/0002_remove_external_mcp_gate.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/mcp/migrations/__init__.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/mcp/models.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/mcp/services.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/orders/__init__.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/orders/admin.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/orders/apps.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/orders/migrations/0001_v1_initial.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/orders/migrations/__init__.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/orders/models.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/orders/services.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/policy/__init__.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/policy/admin.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/policy/apps.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/policy/migrations/0001_v1_initial.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/policy/migrations/__init__.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/policy/models.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/policy/services.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/portfolio/__init__.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/portfolio/admin.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/portfolio/apps.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/portfolio/migrations/0001_v1_initial.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/portfolio/migrations/__init__.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/apps/portfolio/models.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/assets/tradingcodex-banner-v1.png +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/assets/tradingcodex-banner-v2.png +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/assets/tradingcodex-banner-v3.png +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/assets/tradingcodex-banner.svg +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/docs/README.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/docs/data-sources-and-openbb.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/docs/decision-memory.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/docs/deployment.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/docs/financial-workflow-references.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/docs/guardrails.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/docs/harness.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/docs/improvement-loop.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/docs/interfaces-and-surfaces.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/docs/investment-brain-plugins.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/docs/knowledge-wikis.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/docs/licensing-and-commercialization.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/docs/product-direction.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/docs/release-readiness.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/docs/research-memory-and-artifacts.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/docs/safety-policy-and-execution.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/docs/system-architecture.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/docs/user-facing-skills.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/frontend/index.html +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/frontend/package-lock.json +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/frontend/package.json +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/frontend/src/App.tsx +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/frontend/src/ViewerShell.tsx +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/frontend/src/api.ts +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/frontend/src/domain.ts +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/frontend/src/features/LibraryPage.tsx +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/frontend/src/features/SystemPage.tsx +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/frontend/src/features/WikiPage.tsx +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/frontend/src/main.tsx +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/frontend/src/navigation.js +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/frontend/src/navigation.test.js +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/frontend/src/styles.css +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/frontend/src/ui.tsx +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/frontend/src/viewer-data.js +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/frontend/tsconfig.json +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/frontend/vite.config.ts +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/install.sh +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/pyproject.toml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/setup.cfg +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_artifact_authentication.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_artifact_catalog.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_brain_skill.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_broker_center_prd.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_build_contract_metadata.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_build_hook.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_build_turn_grant.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_calculation_runner.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_clean_v1_cli_audit.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_codex_capabilities.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_codex_cli_contract.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_decision_memory_core.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_dev_bootstrap.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_dynamic_artifact_quality.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_e2e_user_scenarios.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_evaluation_lab_hardening.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_evaluation_profiles.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_guidebook_contract.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_investment_analysis.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_investment_brain_cli.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_investment_brain_prompt_layers.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_investment_brain_provenance.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_investment_brain_registry.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_investor_context.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_knowledge_wikis.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_mcp_broker_release_health.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_native_execution_gateway.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_order_turn_grant.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_platform_runtime.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_provider_source_approval.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_research_object_catalog.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_research_objects.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_research_spec_profiles.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_runtime_paths.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_runtime_profile.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_security_invariants.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_skill_runtime_boundaries.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_source_snapshot_agent_contract.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_v1_migrations.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_v1_state_integrity.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_viewer.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tests/test_workspace_git_contract.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex.egg-info/SOURCES.txt +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex.egg-info/dependency_links.txt +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex.egg-info/entry_points.txt +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex.egg-info/requires.txt +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex.egg-info/top_level.txt +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/__init__.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/__main__.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/calculation-runtime-lock.json +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/calculation-runtime-requirements.txt +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/calculation_runner.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/commands/__init__.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/commands/bootstrap.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/commands/build.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/commands/connectors.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/commands/data_sources.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/commands/db.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/commands/decision.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/commands/evaluation.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/commands/forecast.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/commands/home.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/commands/investment_brains.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/commands/investor_context.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/commands/mcp.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/commands/orders.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/commands/policy.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/commands/profile.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/commands/research.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/commands/skills.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/commands/strategies.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/commands/subagents.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/commands/utils.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/commands/wikis.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/commands/workflow.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/commands/workspaces.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/generator.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/mcp_stdio.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/package_source.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/service_autostart.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/startup_status.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_cli/versioning.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/__init__.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/admin.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/api.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/__init__.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/analysis_runs.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/artifact_bindings.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/artifact_catalog.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/artifact_quality.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/audit.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/brokers.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/build_gateway.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/calculations.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/codex_capabilities.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/common.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/data_sources.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/datasets.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/decision_packages.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/evaluation_lab.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/execution_gateway.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/forecasting.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/git_subprocess.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/harness.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/health.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/investment_analysis.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/investment_brains.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/investor_context.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/knowledge_wikis.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/managed_package_sources.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/markdown_preview.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/operator_authority.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/orders.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/policy.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/portfolio.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/postmortems.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/research.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/research_object_catalog.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/research_objects.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/research_specs.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/runtime.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/skill_invocations.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/source_snapshots.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/viewer.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/wiki_viewer.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/workspace_git.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/application/workspaces.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/asgi.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/log_safety.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/runtime_profile.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/settings.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/static/tradingcodex_admin/favicon.svg +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/static/tradingcodex_web/assets/allPaths-DJ5oy6Ot.js +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/static/tradingcodex_web/assets/allPathsLoader-CRlwLu1z.js +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/static/tradingcodex_web/assets/index-c5e0ZsDr.js +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/static/tradingcodex_web/assets/index-y2v9zCLQ.css +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/static/tradingcodex_web/assets/paths-BDuITqPr.js +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/static/tradingcodex_web/assets/paths-CoispWSv.js +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/static/tradingcodex_web/assets/splitPathsBySizeLoader-x57jFwA3.js +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/static/tradingcodex_web/index.html +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/urls.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/viewer_api.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/web.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/tradingcodex_service/wsgi.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/__init__.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/audit/files/.tradingcodex/audit/README.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/audit/files/trading/audit/.gitkeep +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/audit/module.json +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/codex-base/files/.codex/hooks/tradingcodex_hook.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/codex-base/files/.codex/hooks.json +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/codex-base/files/.codex/prompts/base_instructions/head-manager.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/codex-base/files/.codex/rules/tradingcodex.rules +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/codex-base/files/.tradingcodex/cli.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/codex-base/files/.tradingcodex/config.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/codex-base/files/AGENTS.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/codex-base/files/pyproject.toml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/codex-base/files/tcx +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/codex-base/files/tcx-calc +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/codex-base/files/tcx-calc.cmd +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/codex-base/files/tcx.cmd +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/codex-base/module.json +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/policies/restricted-list.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/approval_receipt.schema.json +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/audit_event.schema.json +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/evidence_pack.schema.json +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/execution_result.schema.json +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/fundamental_report.schema.json +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/news_report.schema.json +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/order_ticket.schema.json +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/portfolio_review.schema.json +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/postmortem_report.schema.json +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/research_artifact.schema.json +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/risk_report.schema.json +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/technical_report.schema.json +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/thesis.schema.json +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/valuation.schema.json +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/enforcement-guardrails/module.json +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/fundamental-analyst.toml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/instrument-analyst.toml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/judgment-reviewer.toml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/macro-analyst.toml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/news-analyst.toml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/portfolio-manager.toml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/risk-manager.toml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/technical-analyst.toml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/valuation-analyst.toml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/fixed-subagents/files/.tradingcodex/mainagent/skill-change-proposals/.gitkeep +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/fixed-subagents/module.json +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/guidance-guardrails/files/.tradingcodex/guidance/guardrails.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/guidance-guardrails/files/.tradingcodex/guidance/task-quality-checklist.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/guidance-guardrails/module.json +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/information-barriers/files/.tradingcodex/secrets.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/information-barriers/files/trading/forecasts/.gitkeep +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/information-barriers/files/trading/market-data/.gitkeep +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/information-barriers/files/trading/portfolio/.gitkeep +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/information-barriers/files/trading/reports/fundamental/.gitkeep +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/information-barriers/files/trading/reports/instrument/.gitkeep +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/information-barriers/files/trading/reports/macro/.gitkeep +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/information-barriers/files/trading/reports/news/.gitkeep +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/information-barriers/files/trading/reports/policy/.gitkeep +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/information-barriers/files/trading/reports/portfolio/.gitkeep +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/information-barriers/files/trading/reports/postmortem/.gitkeep +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/information-barriers/files/trading/reports/risk/.gitkeep +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/information-barriers/files/trading/reports/technical/.gitkeep +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/information-barriers/files/trading/reports/valuation/.gitkeep +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/information-barriers/files/trading/research/.gitkeep +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/information-barriers/module.json +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/paper-trading/module.json +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-automate/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-automate/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-brain/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-brain/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-brain/references/bundle-contract.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-build/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-build/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-investor-context/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-investor-context/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-memory/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-memory/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-allow/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-allow/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-cancel/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-cancel/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-submit/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-submit/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-plan/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-plan/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-server/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-server/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-strategy/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-strategy/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-wiki/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-wiki/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-wiki/references/bundle-contract.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/fundamental-analyst/tcx-fundamental/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/fundamental-analyst/tcx-fundamental/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/instrument-analyst/tcx-instrument/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/instrument-analyst/tcx-instrument/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/judgment-reviewer/tcx-judgment/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/judgment-reviewer/tcx-judgment/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/macro-analyst/tcx-macro/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/macro-analyst/tcx-macro/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/news-analyst/tcx-news/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/news-analyst/tcx-news/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/tcx-order-draft/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/tcx-order-draft/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/tcx-portfolio/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/tcx-portfolio/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-order-approve/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-order-approve/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-policy/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-policy/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-risk/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-risk/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-anti-overfit/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-anti-overfit/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-artifact/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-artifact/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-calculation/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-calculation/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-calculation/references/data-runtime.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-calculation/references/finance-methods.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-data-qc/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-data-qc/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-evidence/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-evidence/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-forecast/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-forecast/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-scenarios/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-scenarios/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-source-gate/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-source-gate/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-source-gate/references/openbb-mcp.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/technical-analyst/tcx-technical/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/technical-analyst/tcx-technical/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/valuation-analyst/tcx-valuation/SKILL.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/valuation-analyst/tcx-valuation/agents/openai.yaml +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/repo-skills/module.json +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/enforcer/README.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/gateway/README.md +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/server.py +0 -0
- {tradingcodex-1.2.1 → tradingcodex-1.2.2}/workspace_templates/modules/tradingcodex-mcp/module.json +0 -0
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 1.2.2 - 2026-07-22
|
|
6
|
+
|
|
7
|
+
- Validate Codex CLI 0.145.0 as the current reference while retaining 0.144.4
|
|
8
|
+
as the compatibility floor; adopt its stable MultiAgent V2 schema by leaving
|
|
9
|
+
nesting and concurrency to native Codex while preserving strict config,
|
|
10
|
+
permission, hook, MCP, and role-model projection checks.
|
|
11
|
+
- Restore the Head Manager's generated `export_dataset_csv` projection by
|
|
12
|
+
registering its canonical MCP schema, role boundary, and export capability,
|
|
13
|
+
with a generated-config-to-registry regression check.
|
|
14
|
+
- Stop automated GitHub Release notes at the next changelog heading so a
|
|
15
|
+
release contains only its matching version section.
|
|
16
|
+
|
|
5
17
|
## 1.2.1 - 2026-07-21
|
|
6
18
|
|
|
7
19
|
- Create or refresh the GitHub Release from the exact verified distributions
|
|
@@ -81,7 +81,8 @@ conflicts with Strategy.
|
|
|
81
81
|
|
|
82
82
|
## Delegation Contract
|
|
83
83
|
|
|
84
|
-
MultiAgent V2 exposes the generated role profiles
|
|
84
|
+
MultiAgent V2 exposes the generated role profiles through native Codex
|
|
85
|
+
delegation.
|
|
85
86
|
Head Manager prefers an exact profile when its specialty is useful and passes a
|
|
86
87
|
compact role-owned brief rather than the full root history. Role TOML supplies
|
|
87
88
|
the direct fixed model settings; their values and fallback eligibility are owned
|
|
@@ -98,11 +99,15 @@ Use `followup_task` when a live child still owns a correction or clarification.
|
|
|
98
99
|
Start another child for a new specialty, an unavailable session, or independent
|
|
99
100
|
review. Apply the canonical fallback boundary in
|
|
100
101
|
[Roles, Skills, And Workflows](roles-skills-and-workflows.md). A child cannot
|
|
101
|
-
approve, execute, access a broker, or emulate Head Manager.
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
102
|
+
approve, execute, access a broker, or emulate Head Manager. Whether to delegate
|
|
103
|
+
a distinct child-owned subtask further is a native Codex decision, not a
|
|
104
|
+
TradingCodex workflow requirement. Every descendant remains subject to its
|
|
105
|
+
selected projected role and the shared evidence, authority, and safety
|
|
106
|
+
boundaries. Head Manager
|
|
107
|
+
waits only while a live child has useful work and reports lifecycle events only
|
|
108
|
+
from native tool and child-lifecycle results in the current run. Native wait is
|
|
109
|
+
wait-any and may serialize with no explicit target list; that representation is
|
|
110
|
+
not failure by itself.
|
|
106
111
|
|
|
107
112
|
When a Brain applies, the assignment contains the question Head Manager derived
|
|
108
113
|
from it, not the Brain body or a delegation of Brain authority. Brain content is
|
|
@@ -534,7 +534,7 @@ That explicit overlay rule applies to external skill procedures, not to
|
|
|
534
534
|
read-only app, connector, MCP, or data tools used as evidence. A role whose
|
|
535
535
|
assignment needs external data or preserves a user-named provider first checks
|
|
536
536
|
the current task's callable tool surface and uses the runtime's available
|
|
537
|
-
deferred-tool discovery surface when needed. The Codex 0.
|
|
537
|
+
deferred-tool discovery surface when needed. The Codex 0.145.0 reference
|
|
538
538
|
contract first resolves at most 12 names with
|
|
539
539
|
`text(ALL_TOOLS.filter(x => x.name.includes("<provider-or-keyword>")).slice(0, 12).map(x => x.name))`.
|
|
540
540
|
One supported query may combine one to four literal `name.includes`
|
|
@@ -586,14 +586,22 @@ runs, hard-failure checks, blind review, and resolved outcomes.
|
|
|
586
586
|
Generated `.codex/config.toml` enables MultiAgent V2 with visible spawn
|
|
587
587
|
metadata and the `agents` tool namespace. It keeps every
|
|
588
588
|
`.codex/agents/*.toml` role discoverable while setting
|
|
589
|
-
`features.multi_agent_v2.enabled = true
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
589
|
+
`features.multi_agent_v2.enabled = true`. TradingCodex does not set
|
|
590
|
+
`agents.max_depth`, `agents.max_threads`, or
|
|
591
|
+
`agents.max_concurrent_threads_per_session`; Codex 0.145.0 ignores
|
|
592
|
+
`agents.max_depth` for V2, retains `agents.max_threads` as a compatibility
|
|
593
|
+
alias, and owns nesting, concurrency, and scheduling. Head Manager chooses
|
|
594
|
+
useful profiles and follows up with an owner when appropriate. Role eligibility
|
|
595
|
+
and fallback are defined in [Roles, Skills, And Workflows](roles-skills-and-workflows.md).
|
|
596
|
+
Whether to delegate distinct child-owned work further is a native Codex
|
|
597
|
+
decision, not a TradingCodex workflow requirement. Every descendant remains
|
|
598
|
+
subject to its selected projected role and TradingCodex safety and service
|
|
599
|
+
gates. Root model and reasoning settings are inherited, and direct fixed-role
|
|
600
|
+
TOML model settings are projected, but `doctor` does not duplicate native model
|
|
601
|
+
availability or lifecycle checks. Codex 0.145.0 exposes optional per-spawn model
|
|
602
|
+
and reasoning overrides by default; TradingCodex neither disables nor requires
|
|
603
|
+
them. A spawn without an explicit override follows native inheritance and role
|
|
604
|
+
config resolution.
|
|
597
605
|
|
|
598
606
|
Workspace template modules are deployment projections. Agent and skill
|
|
599
607
|
ownership comes from the Python agent registry and is projected
|
|
@@ -868,10 +876,11 @@ Generated root config sets `default_permissions = "trading-research"` and
|
|
|
868
876
|
defines two custom profiles. It deliberately omits legacy `sandbox_mode` from
|
|
869
877
|
the root and every fixed-role TOML because any loaded `sandbox_mode` overrides
|
|
870
878
|
custom permission profiles in Codex. This contract requires Codex CLI 0.144.4
|
|
871
|
-
or later on a locally supported platform. Version 0.
|
|
879
|
+
or later on a locally supported platform. Version 0.145.0 is the current
|
|
872
880
|
release-validation reference for permission profiles, hooks, required MCP,
|
|
873
|
-
deferred MCP calls, and the explicit V2 feature table.
|
|
874
|
-
Codex runtime doctor check
|
|
881
|
+
deferred MCP calls, and the explicit V2 feature table. Versions below the
|
|
882
|
+
compatibility floor fail the Codex runtime doctor check; compatible non-reference
|
|
883
|
+
versions warn. These remain version-sensitive
|
|
875
884
|
surfaces, so release validation includes strict config/feature inspection and
|
|
876
885
|
a real native smoke.
|
|
877
886
|
See the [Codex permissions reference](https://learn.chatgpt.com/docs/permissions).
|
|
@@ -1582,7 +1591,7 @@ Codex-native bootstrap verification:
|
|
|
1582
1591
|
workspace. The canonical workspace must
|
|
1583
1592
|
either be interactively trusted or receive the one-run `projects={...}` trust
|
|
1584
1593
|
override shown in `AGENTS.md`. A full fixed-role lifecycle smoke must use
|
|
1585
|
-
persisted trust for all five generated project hooks. Codex 0.
|
|
1594
|
+
persisted trust for all five generated project hooks. Codex 0.145.0 does not
|
|
1586
1595
|
carry the one-run `--dangerously-bypass-hook-trust` flag through the role
|
|
1587
1596
|
config reload used by an exact V2 child, so that flag may be used only for
|
|
1588
1597
|
root/config diagnostics and is not lifecycle acceptance. It also does not
|
|
@@ -226,8 +226,11 @@ Start a fresh child for a new specialty, an unavailable session, or independent
|
|
|
226
226
|
review. The Dynamic Workflow fallback boundary applies here. A generic child
|
|
227
227
|
retains the same research-only scope, evidence standard, no-secret boundary,
|
|
228
228
|
and no-order boundary; it cannot approve, execute, access a broker, or act as
|
|
229
|
-
Head Manager.
|
|
230
|
-
|
|
229
|
+
Head Manager. Whether to delegate a distinct child-owned subtask further is a
|
|
230
|
+
native Codex decision, not a workflow requirement. Each descendant remains
|
|
231
|
+
subject to its selected projected role and the shared evidence, authority, and
|
|
232
|
+
safety boundaries. Wait only while a live child has useful work.
|
|
233
|
+
Native
|
|
231
234
|
wait-any may serialize without explicit targets; verify lifecycle through the
|
|
232
235
|
native tool result and child session events rather than treating that as failure.
|
|
233
236
|
|
|
@@ -260,7 +263,7 @@ same contract error repeats.
|
|
|
260
263
|
The same bounded rule applies across role MCP use: a documented terminal
|
|
261
264
|
outcome such as stored, updated, existing, reused, or prepared ends that call;
|
|
262
265
|
an unchanged deterministic failure is never blindly resubmitted. Under the
|
|
263
|
-
Codex 0.
|
|
266
|
+
Codex 0.145.0 deferred-tool contract, unknown-provider resolution starts with
|
|
264
267
|
the canonical names-only query
|
|
265
268
|
`text(ALL_TOOLS.filter(x => x.name.includes("<provider-or-keyword>")).slice(0, 12).map(x => x.name))`.
|
|
266
269
|
One names-only query may combine at most four literal `name.includes`
|
|
@@ -266,8 +266,9 @@ Smoke coverage should verify:
|
|
|
266
266
|
Manager and role-owned live research for the six evidence producers without
|
|
267
267
|
treating a host finance skill as a dependency
|
|
268
268
|
- generated `.codex/config.toml` explicitly enables MultiAgent V2, reports it
|
|
269
|
-
enabled through `codex features list`, leaves concurrency to
|
|
270
|
-
|
|
269
|
+
enabled through `codex features list`, leaves nesting and concurrency to
|
|
270
|
+
Codex, and omits TradingCodex-owned `agents.max_depth`,
|
|
271
|
+
`agents.max_threads`, and `agents.max_concurrent_threads_per_session`
|
|
271
272
|
- skill/projection manifests identify the finite managed inventory, declare
|
|
272
273
|
runtime discovery incomplete, and resolve exact root/role skill paths
|
|
273
274
|
- two generated workspaces have different workspace ids
|
|
@@ -816,7 +817,7 @@ stop without an order, approval, execution, cancellation, broker mutation, or
|
|
|
816
817
|
secret action. Record an unavailable Codex/auth blocker rather than replacing this with a
|
|
817
818
|
claim based only on the fake subprocess test.
|
|
818
819
|
|
|
819
|
-
Reference acceptance uses Codex CLI 0.
|
|
820
|
+
Reference acceptance uses Codex CLI 0.145.0. Run
|
|
820
821
|
`python tests/codex_cli_contract.py --workspace <workspace>
|
|
821
822
|
--require-reference --require-hook-trust` first, after opening the disposable
|
|
822
823
|
workspace in interactive Codex and persistently trusting all five generated
|
|
@@ -826,7 +827,7 @@ configuration, readable sandbox settings, the expected enabled/disabled
|
|
|
826
827
|
feature states, and trusted lifecycle hooks. Native `codex exec` smokes must
|
|
827
828
|
also pass `--strict-config`, so a newly unknown or removed project key fails
|
|
828
829
|
before model behavior is accepted. Do not use `--ignore-user-config` or
|
|
829
|
-
`--dangerously-bypass-hook-trust` for lifecycle acceptance: in 0.
|
|
830
|
+
`--dangerously-bypass-hook-trust` for lifecycle acceptance: in 0.145.0 the
|
|
830
831
|
one-run bypass is not inherited when a V2 child reloads an exact role config.
|
|
831
832
|
On platforms where a temporary directory has a symlinked alias, resolve the
|
|
832
833
|
workspace once with `realpath` or `Path.resolve()` and use that same physical
|
|
@@ -839,10 +840,13 @@ Run native CLI smokes that inspect observable tool calls and child lifecycle
|
|
|
839
840
|
results from Codex. Cover the direct fast path, one exact profile, a same-owner
|
|
840
841
|
`followup_task`, and a bounded evidence-role generic fallback when a profile is
|
|
841
842
|
unavailable. Briefs must stay compact, generated TOML must retain the fixed
|
|
842
|
-
model settings and the project-wide `trading-research` profile
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
843
|
+
model settings and the project-wide `trading-research` profile. When native
|
|
844
|
+
Codex delegates a child-owned subtask further, inspect the descendant lifecycle
|
|
845
|
+
and verify that its effective role, model, permission profile, MCP principal,
|
|
846
|
+
evidence boundary, and no-order boundary match the selected role. A missing independent risk or judgment
|
|
847
|
+
profile must remain explicit rather than becoming a generic review. Run a
|
|
848
|
+
sequential two-child smoke plus one artifact-to-synthesis workflow because
|
|
849
|
+
lifecycle failures may appear only after the first child exits.
|
|
846
850
|
|
|
847
851
|
For a full research smoke, inspect root and child JSONL as observable behavior,
|
|
848
852
|
not private chain of thought. Require a compact bounded child brief; reject broad
|
|
@@ -49,7 +49,7 @@ initialized is fine, as is an empty directory inside an existing parent
|
|
|
49
49
|
worktree.
|
|
50
50
|
|
|
51
51
|
Use Codex CLI 0.144.4 or later on macOS, Linux, WSL, or native Windows. Version
|
|
52
|
-
0.
|
|
52
|
+
0.145.0 is the current TradingCodex reference for custom permission profiles,
|
|
53
53
|
hooks, required MCP startup, and explicit MultiAgent V2 configuration. Verify
|
|
54
54
|
with `codex --version`; `./tcx doctor --layer guidance` fails below the
|
|
55
55
|
compatibility floor and warns when the installed CLI is older or newer than the
|
|
@@ -375,10 +375,10 @@ Generated root work inherits the user's active Codex model and reasoning
|
|
|
375
375
|
settings. All nine fixed subagents use `gpt-5.6-terra` with `high` reasoning.
|
|
376
376
|
Final execution is service-owned and runs no model.
|
|
377
377
|
MultiAgent V2 exposes exact custom-role routing through the `agents` namespace;
|
|
378
|
-
|
|
379
|
-
V2 table explicitly sets `enabled = true`
|
|
380
|
-
|
|
381
|
-
|
|
378
|
+
exact custom-role dispatch uses `fork_turns="none"` so Codex applies the fresh
|
|
379
|
+
role-bound config layer. The generated V2 table explicitly sets `enabled = true`
|
|
380
|
+
but does not set nesting or concurrency controls; native Codex and user/host
|
|
381
|
+
configuration own those choices.
|
|
382
382
|
Inspect `.codex/config.toml`, `.codex/agents/`, and `./tcx doctor` after an
|
|
383
383
|
update to verify the generated Codex contract. There is no model-policy
|
|
384
384
|
manifest, runtime model fallback, or rollout control.
|
|
@@ -14,8 +14,10 @@ from tradingcodex_cli.commands import doctor
|
|
|
14
14
|
("0.144.0", False, False),
|
|
15
15
|
("0.144.1", False, False),
|
|
16
16
|
("0.144.2", False, False),
|
|
17
|
-
("0.144.4", True,
|
|
18
|
-
("0.
|
|
17
|
+
("0.144.4", True, True),
|
|
18
|
+
("0.144.5", True, True),
|
|
19
|
+
("0.145.0", True, False),
|
|
20
|
+
("0.145.1", True, True),
|
|
19
21
|
],
|
|
20
22
|
)
|
|
21
23
|
def test_codex_cli_reference_version_check(
|
|
@@ -42,10 +44,12 @@ def test_codex_cli_reference_version_check(
|
|
|
42
44
|
assert bool(result.get("warn")) is warn
|
|
43
45
|
assert f"installed={installed}" in result["detail"]
|
|
44
46
|
assert "required>=0.144.4" in result["detail"]
|
|
45
|
-
assert "reference=0.
|
|
47
|
+
assert "reference=0.145.0" in result["detail"]
|
|
46
48
|
if installed in {"0.144.1", "0.144.2"}:
|
|
47
49
|
assert "older than required" in result["detail"]
|
|
48
|
-
if installed
|
|
50
|
+
if installed in {"0.144.4", "0.144.5"}:
|
|
51
|
+
assert "older than reference" in result["detail"]
|
|
52
|
+
if installed == "0.145.1":
|
|
49
53
|
assert "newer client requires harness revalidation" in result["detail"]
|
|
50
54
|
|
|
51
55
|
|
|
@@ -418,8 +418,8 @@ def test_generated_contract_inherits_root_model_and_keeps_role_profiles_optional
|
|
|
418
418
|
assert '[features.multi_agent_v2]' in config
|
|
419
419
|
assert 'enabled = true' in config
|
|
420
420
|
assert "max_concurrent_threads_per_session" not in config
|
|
421
|
-
assert "max_depth
|
|
422
|
-
assert
|
|
421
|
+
assert "max_depth" not in config_values.get("agents", {})
|
|
422
|
+
assert "max_threads" not in config_values.get("agents", {})
|
|
423
423
|
assert "required = true" in config
|
|
424
424
|
assert '"begin_analysis_run"' in config
|
|
425
425
|
assert "record_workflow_plan" not in config
|
|
@@ -432,8 +432,8 @@ def test_generated_contract_inherits_root_model_and_keeps_role_profiles_optional
|
|
|
432
432
|
assert "You are the `head-manager` agent" not in fixed_role
|
|
433
433
|
assert "# Role And Safety" in fixed_role
|
|
434
434
|
assert "authenticated TradingCodex MCP" in fixed_role
|
|
435
|
-
assert "
|
|
436
|
-
assert "
|
|
435
|
+
assert "Whether to delegate" not in fixed_role
|
|
436
|
+
assert "All work performed on your behalf remains subject" in fixed_role
|
|
437
437
|
assert "$tcx-source-gate" in fixed_role
|
|
438
438
|
assert "Snapshot/Dataset/Artifact IDs" in fixed_role
|
|
439
439
|
assert "do not duplicate or invent provider policy here" in fixed_role
|
|
@@ -484,6 +484,13 @@ def test_generated_contract_inherits_root_model_and_keeps_role_profiles_optional
|
|
|
484
484
|
enabled_tools = set(role_config["mcp_servers"]["tradingcodex"]["enabled_tools"])
|
|
485
485
|
assert role_config["model"] == "gpt-5.6-terra"
|
|
486
486
|
assert role_config["model_reasoning_effort"] == "high"
|
|
487
|
+
assert role_config.get("agents", {}).get("enabled") is not False
|
|
488
|
+
assert (
|
|
489
|
+
role_config.get("features", {})
|
|
490
|
+
.get("multi_agent_v2", {})
|
|
491
|
+
.get("enabled")
|
|
492
|
+
is not False
|
|
493
|
+
)
|
|
487
494
|
assert "get_research_artifact" in enabled_tools
|
|
488
495
|
assert ARTIFACT_DISCOVERY_TOOLS.isdisjoint(enabled_tools)
|
|
489
496
|
assert role_config["model_instructions_file"] == FIXED_ROLE_MODEL_INSTRUCTIONS
|
|
@@ -494,6 +501,23 @@ def test_generated_contract_inherits_root_model_and_keeps_role_profiles_optional
|
|
|
494
501
|
assert "Artifact handoff:" not in role_instructions
|
|
495
502
|
|
|
496
503
|
|
|
504
|
+
def test_generated_mcp_allowlists_reference_only_registered_tools(workspace: Path) -> None:
|
|
505
|
+
config_paths = [
|
|
506
|
+
workspace / ".codex/config.toml",
|
|
507
|
+
*(workspace / ".codex/agents").glob("*.toml"),
|
|
508
|
+
]
|
|
509
|
+
|
|
510
|
+
for config_path in config_paths:
|
|
511
|
+
config = tomllib.loads(config_path.read_text(encoding="utf-8"))
|
|
512
|
+
enabled_tools = set(
|
|
513
|
+
config["mcp_servers"]["tradingcodex"]["enabled_tools"]
|
|
514
|
+
)
|
|
515
|
+
assert enabled_tools <= TOOL_REGISTRY.keys(), (
|
|
516
|
+
f"{config_path.relative_to(workspace)} references unregistered "
|
|
517
|
+
f"TradingCodex MCP tools: {sorted(enabled_tools - TOOL_REGISTRY.keys())}"
|
|
518
|
+
)
|
|
519
|
+
|
|
520
|
+
|
|
497
521
|
def test_doctor_requires_fixed_role_base_and_per_role_override(workspace: Path) -> None:
|
|
498
522
|
doctor = subprocess.run(
|
|
499
523
|
[str(workspace / "tcx"), "doctor", "--verbose"],
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import csv
|
|
4
4
|
import hmac
|
|
5
|
+
import json
|
|
5
6
|
import os
|
|
6
7
|
from pathlib import Path
|
|
7
8
|
|
|
@@ -20,6 +21,7 @@ from tradingcodex_service.application.datasets import (
|
|
|
20
21
|
)
|
|
21
22
|
from tradingcodex_service.application.research import record_source_snapshot
|
|
22
23
|
from tradingcodex_service.application.runtime import ensure_workspace_manifest
|
|
24
|
+
from tradingcodex_service.mcp_runtime import call_mcp_tool
|
|
23
25
|
|
|
24
26
|
|
|
25
27
|
pytest.importorskip("pyarrow", reason="dataset tests require the pinned PyArrow runtime")
|
|
@@ -167,6 +169,54 @@ def test_dataset_ingest_is_immutable_idempotent_searchable_and_sliceable(
|
|
|
167
169
|
)
|
|
168
170
|
|
|
169
171
|
|
|
172
|
+
def test_dataset_csv_export_is_registered_idempotent_and_license_gated(
|
|
173
|
+
workspace_and_scratch: tuple[Path, Path, str],
|
|
174
|
+
) -> None:
|
|
175
|
+
root, scratch, snapshot_id = workspace_and_scratch
|
|
176
|
+
exportable = record_dataset_snapshot(
|
|
177
|
+
root,
|
|
178
|
+
{**_args(snapshot_id), "redistribution": "allowed"},
|
|
179
|
+
scratch_root=scratch,
|
|
180
|
+
)
|
|
181
|
+
export_args = {
|
|
182
|
+
"principal_id": "head-manager",
|
|
183
|
+
"dataset_id": exportable["dataset_id"],
|
|
184
|
+
"columns": ["timestamp", "close"],
|
|
185
|
+
"export_path": "trading/research/datasets/exports/btc-close.csv",
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
exported = call_mcp_tool(root, "export_dataset_csv", export_args)
|
|
189
|
+
assert exported["status"] == "exported"
|
|
190
|
+
assert exported["columns"] == ["timestamp", "close"]
|
|
191
|
+
assert exported["row_count"] == 3
|
|
192
|
+
export_path = root / exported["export_path"]
|
|
193
|
+
with export_path.open(encoding="utf-8", newline="") as handle:
|
|
194
|
+
assert list(csv.DictReader(handle)) == [
|
|
195
|
+
{"timestamp": "2026-01-01 00:00:00.000000Z", "close": "100"},
|
|
196
|
+
{"timestamp": "2026-01-02 00:00:00.000000Z", "close": "110"},
|
|
197
|
+
{"timestamp": "2026-01-03 00:00:00.000000Z", "close": "121"},
|
|
198
|
+
]
|
|
199
|
+
|
|
200
|
+
repeated = call_mcp_tool(root, "export_dataset_csv", export_args)
|
|
201
|
+
assert repeated["status"] == "existing"
|
|
202
|
+
assert repeated["content_hash"] == exported["content_hash"]
|
|
203
|
+
|
|
204
|
+
restricted = record_dataset_snapshot(
|
|
205
|
+
root,
|
|
206
|
+
_args(snapshot_id, title="Restricted BTC daily prices"),
|
|
207
|
+
scratch_root=scratch,
|
|
208
|
+
)
|
|
209
|
+
with pytest.raises(PermissionError, match="redistribution is not explicitly allowed"):
|
|
210
|
+
call_mcp_tool(
|
|
211
|
+
root,
|
|
212
|
+
"export_dataset_csv",
|
|
213
|
+
{
|
|
214
|
+
"principal_id": "head-manager",
|
|
215
|
+
"dataset_id": restricted["dataset_id"],
|
|
216
|
+
},
|
|
217
|
+
)
|
|
218
|
+
|
|
219
|
+
|
|
170
220
|
def test_dataset_rejects_unsafe_sources_and_withdrawal_is_explicit(
|
|
171
221
|
workspace_and_scratch: tuple[Path, Path, str],
|
|
172
222
|
) -> None:
|
|
@@ -118,7 +118,7 @@ def test_cli_hook_dispatch_preserves_standard_input_and_output(
|
|
|
118
118
|
def test_v1_package_metadata_has_one_stable_version_source() -> None:
|
|
119
119
|
project = tomllib.loads((ROOT / "pyproject.toml").read_text(encoding="utf-8"))
|
|
120
120
|
|
|
121
|
-
assert TRADINGCODEX_VERSION == "1.2.
|
|
121
|
+
assert TRADINGCODEX_VERSION == "1.2.2"
|
|
122
122
|
assert str(Version(TRADINGCODEX_VERSION)) == TRADINGCODEX_VERSION
|
|
123
123
|
assert project["project"]["dynamic"] == ["version"]
|
|
124
124
|
assert "version" not in project["project"]
|
|
@@ -711,6 +711,7 @@ def test_release_publish_is_tag_bound_and_reuses_one_verified_build() -> None:
|
|
|
711
711
|
assert any("download-artifact" in step.get("uses", "") for step in github_release["steps"])
|
|
712
712
|
assert "CHANGELOG.md" in release_job_steps
|
|
713
713
|
assert "release-notes.md" in release_job_steps
|
|
714
|
+
assert ' - [^\\n]*$\\n.*?(?=^## |\\Z)' in release_job_steps
|
|
714
715
|
assert "gh release create" in release_job_steps
|
|
715
716
|
assert "gh release edit" in release_job_steps
|
|
716
717
|
assert "gh release upload" in release_job_steps
|
|
@@ -275,6 +275,7 @@ def test_generated_projection_and_registry_keep_evidence_roles_narrow(tmp_path:
|
|
|
275
275
|
"list_artifact_catalog",
|
|
276
276
|
"search_artifact_catalog",
|
|
277
277
|
"rebuild_artifact_catalog",
|
|
278
|
+
"export_dataset_csv",
|
|
278
279
|
}
|
|
279
280
|
assert expected.issubset(TOOL_REGISTRY)
|
|
280
281
|
assert TOOL_REGISTRY["create_causal_equity_analysis"].allowed_roles == {"valuation-analyst"}
|
|
@@ -284,6 +285,8 @@ def test_generated_projection_and_registry_keep_evidence_roles_narrow(tmp_path:
|
|
|
284
285
|
assert TOOL_REGISTRY["create_evaluation_corpus"].allowed_roles == {"head-manager"}
|
|
285
286
|
assert TOOL_REGISTRY["record_blind_human_review"].allowed_roles == {"judgment-reviewer"}
|
|
286
287
|
assert TOOL_REGISTRY["rebuild_artifact_catalog"].allowed_roles == {"head-manager"}
|
|
288
|
+
assert TOOL_REGISTRY["export_dataset_csv"].allowed_roles == {"head-manager"}
|
|
289
|
+
assert TOOL_REGISTRY["export_dataset_csv"].capability_required == "dataset.export"
|
|
287
290
|
assert all("execution-operator" not in TOOL_REGISTRY[name].allowed_roles for name in expected)
|
|
288
291
|
assert {"get_research_spec", "list_research_specs", "get_forecast", "list_forecasts", "get_forecast_calibration_report", "list_artifact_catalog", "search_artifact_catalog"}.issubset(SAFE_HOME_TOOL_NAMES)
|
|
289
292
|
snapshot_schema = TOOL_REGISTRY["record_source_snapshot"].input_schema
|
|
@@ -297,7 +300,7 @@ def test_generated_projection_and_registry_keep_evidence_roles_narrow(tmp_path:
|
|
|
297
300
|
valuation_tools = set(tomllib.loads((workspace / ".codex/agents/valuation-analyst.toml").read_text(encoding="utf-8"))["mcp_servers"]["tradingcodex"]["enabled_tools"])
|
|
298
301
|
judgment_tools = set(tomllib.loads((workspace / ".codex/agents/judgment-reviewer.toml").read_text(encoding="utf-8"))["mcp_servers"]["tradingcodex"]["enabled_tools"])
|
|
299
302
|
assert not (workspace / ".codex/agents/execution-operator.toml").exists()
|
|
300
|
-
assert {"create_research_spec", "create_evaluation_corpus", "score_forecast", "list_artifact_catalog", "search_artifact_catalog", "rebuild_artifact_catalog"}.issubset(root_tools)
|
|
303
|
+
assert {"create_research_spec", "create_evaluation_corpus", "score_forecast", "list_artifact_catalog", "search_artifact_catalog", "rebuild_artifact_catalog", "export_dataset_csv"}.issubset(root_tools)
|
|
301
304
|
assert {"create_causal_equity_analysis", "issue_forecast"}.issubset(valuation_tools)
|
|
302
305
|
assert {"record_blind_judgment_prior", "complete_judgment_review", "resolve_forecast", "promote_lesson", "record_blind_human_review"}.issubset(judgment_tools)
|
|
303
306
|
artifact_discovery_tools = {
|
|
@@ -366,13 +366,22 @@ def _fixed_role_dispatch_checks(root: Path) -> list[dict[str, Any]]:
|
|
|
366
366
|
}]
|
|
367
367
|
features = config.get("features") if isinstance(config.get("features"), dict) else {}
|
|
368
368
|
multi_agent_v2 = features.get("multi_agent_v2") if isinstance(features.get("multi_agent_v2"), dict) else {}
|
|
369
|
+
agents = config.get("agents") if isinstance(config.get("agents"), dict) else {}
|
|
370
|
+
orchestration_overrides = {
|
|
371
|
+
key: agents[key]
|
|
372
|
+
for key in (
|
|
373
|
+
"max_depth",
|
|
374
|
+
"max_threads",
|
|
375
|
+
"max_concurrent_threads_per_session",
|
|
376
|
+
)
|
|
377
|
+
if key in agents
|
|
378
|
+
}
|
|
369
379
|
exact_runtime = (
|
|
370
380
|
features.get("multi_agent") is True
|
|
371
381
|
and multi_agent_v2.get("enabled") is True
|
|
372
382
|
and multi_agent_v2.get("hide_spawn_agent_metadata") is False
|
|
373
383
|
and multi_agent_v2.get("tool_namespace") == "agents"
|
|
374
|
-
and
|
|
375
|
-
and "max_threads" not in (config.get("agents") or {})
|
|
384
|
+
and not orchestration_overrides
|
|
376
385
|
)
|
|
377
386
|
workflow_path = root / ".agents" / "skills" / "tcx-workflow" / "SKILL.md"
|
|
378
387
|
workflow = workflow_path.read_text(encoding="utf-8") if workflow_path.is_file() else ""
|
|
@@ -396,7 +405,7 @@ def _fixed_role_dispatch_checks(root: Path) -> list[dict[str, Any]]:
|
|
|
396
405
|
f"multi_agent_v2={multi_agent_v2.get('enabled')}, "
|
|
397
406
|
f"hide_spawn_agent_metadata={multi_agent_v2.get('hide_spawn_agent_metadata')}, "
|
|
398
407
|
f"tool_namespace={multi_agent_v2.get('tool_namespace')}, "
|
|
399
|
-
f"
|
|
408
|
+
f"orchestration_overrides={orchestration_overrides}"
|
|
400
409
|
),
|
|
401
410
|
},
|
|
402
411
|
{
|
|
@@ -46,7 +46,7 @@ class AgentSpec:
|
|
|
46
46
|
forbidden_skill_tags: tuple[str, ...] = ()
|
|
47
47
|
MODEL_TOOL_PROFILE_REVISION = "2026-07-role-allowlists-v1"
|
|
48
48
|
MINIMUM_CODEX_VERSION = "0.144.4"
|
|
49
|
-
REFERENCE_CODEX_VERSION = "0.
|
|
49
|
+
REFERENCE_CODEX_VERSION = "0.145.0"
|
|
50
50
|
|
|
51
51
|
|
|
52
52
|
RESEARCH_ROLES = (
|
|
@@ -1373,6 +1373,31 @@ TOOL_SPECS: tuple[McpToolSpec, ...] = (
|
|
|
1373
1373
|
additional_properties=False,
|
|
1374
1374
|
),
|
|
1375
1375
|
),
|
|
1376
|
+
McpToolSpec(
|
|
1377
|
+
name="export_dataset_csv",
|
|
1378
|
+
description=(
|
|
1379
|
+
"Export selected columns from an immutable Dataset to a workspace-managed CSV "
|
|
1380
|
+
"only when its manifest explicitly permits redistribution."
|
|
1381
|
+
),
|
|
1382
|
+
category="research",
|
|
1383
|
+
risk_level="write",
|
|
1384
|
+
allowed_roles=roles_with_mcp_tool("export_dataset_csv"),
|
|
1385
|
+
handler_name="export_dataset_csv",
|
|
1386
|
+
input_schema=object_schema(
|
|
1387
|
+
{
|
|
1388
|
+
"dataset_id": {"type": "string"},
|
|
1389
|
+
"columns": {
|
|
1390
|
+
"type": "array",
|
|
1391
|
+
"items": {"type": "string"},
|
|
1392
|
+
"maxItems": 100,
|
|
1393
|
+
},
|
|
1394
|
+
"export_path": {"type": "string"},
|
|
1395
|
+
},
|
|
1396
|
+
["dataset_id"],
|
|
1397
|
+
additional_properties=False,
|
|
1398
|
+
),
|
|
1399
|
+
capability_required="dataset.export",
|
|
1400
|
+
),
|
|
1376
1401
|
McpToolSpec(
|
|
1377
1402
|
name="profile_dataset",
|
|
1378
1403
|
description="Profile selected Dataset columns and return bounded statistics plus at most 20 sample rows.",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
TRADINGCODEX_VERSION = "1.2.2"
|
|
@@ -2,7 +2,7 @@ You are a fixed-role child in TradingCodex, a local-first investment OS built on
|
|
|
2
2
|
|
|
3
3
|
# Role And Safety
|
|
4
4
|
|
|
5
|
-
- Stay within the assigned role and question.
|
|
5
|
+
- Stay within the assigned role and question. All work performed on your behalf remains subject to the applicable projected evidence, authority, and safety boundaries. Do not begin a run, synthesize the Head Manager's decision, use Build/Brain/Strategy/order-turn authority, or emulate another role.
|
|
6
6
|
- Read only task-relevant projected skills. Skills are procedures, not authority.
|
|
7
7
|
- Keep disposable work under `$TRADINGCODEX_SCRATCH`. Use authenticated TradingCodex MCP for durable research; never access secrets, broker APIs, private services, approvals, orders, audit records, or protected state.
|
|
8
8
|
- Never submit/cancel an order or mutate a broker. Language, assignments, skills, and tools do not grant that authority.
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
TRADINGCODEX_VERSION = "1.2.1"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|