tradingcodex 1.1.0__tar.gz → 1.1.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.1.0 → tradingcodex-1.1.2}/CHANGELOG.md +92 -2
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/MANIFEST.in +2 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/PKG-INFO +12 -11
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/README.md +10 -10
- tradingcodex-1.1.2/apps/mcp/admin.py +20 -0
- tradingcodex-1.1.2/apps/mcp/migrations/0002_remove_external_mcp_gate.py +22 -0
- tradingcodex-1.1.2/apps/mcp/models.py +45 -0
- tradingcodex-1.1.2/apps/mcp/services.py +103 -0
- tradingcodex-1.1.2/assets/tradingcodex-banner-v3.png +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/README.md +3 -3
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/components.md +3 -2
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/decision-memory.md +10 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/deployment.md +35 -23
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/execution-without-subagent-plan.md +2 -2
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/generated-workspaces.md +147 -69
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/harness.md +44 -14
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/interfaces-and-surfaces.md +110 -49
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/release-readiness.md +53 -28
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/research-memory-and-artifacts.md +221 -9
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/roles-skills-and-workflows.md +59 -3
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/safety-policy-and-execution.md +66 -92
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/system-architecture.md +65 -16
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/user-facing-skills.md +9 -5
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/validation-and-test-plan.md +108 -25
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/src/App.tsx +5 -2
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/src/domain.ts +43 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/src/features/LibraryPage.tsx +50 -3
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/src/features/SystemPage.tsx +6 -3
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/installation.md +18 -10
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/pyproject.toml +2 -0
- tradingcodex-1.1.2/tests/test_artifact_catalog.py +203 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_broker_center_prd.py +0 -79
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_build_contract_metadata.py +5 -40
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_build_hook.py +54 -66
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_build_turn_grant.py +14 -37
- tradingcodex-1.1.2/tests/test_calculation_runner.py +1290 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_clean_v1_cli_audit.py +0 -88
- tradingcodex-1.1.2/tests/test_codex_capabilities.py +202 -0
- tradingcodex-1.1.2/tests/test_datasets.py +358 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_dynamic_artifact_quality.py +100 -1
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_e2e_user_scenarios.py +4 -3
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_mcp_broker_release_health.py +3 -236
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_native_execution_gateway.py +191 -1
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_platform_runtime.py +151 -75
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_release_contract.py +71 -131
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_research_forecast_surfaces.py +19 -4
- tradingcodex-1.1.2/tests/test_research_object_catalog.py +272 -0
- tradingcodex-1.1.2/tests/test_research_objects.py +48 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_skill_runtime_boundaries.py +64 -1
- tradingcodex-1.1.2/tests/test_v1_migrations.py +106 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_viewer.py +13 -3
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_workspace_git_contract.py +3 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex.egg-info/PKG-INFO +12 -11
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex.egg-info/SOURCES.txt +24 -3
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex.egg-info/requires.txt +1 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/__main__.py +3 -3
- tradingcodex-1.1.2/tradingcodex_cli/calculation-runtime-lock.json +31 -0
- tradingcodex-1.1.2/tradingcodex_cli/calculation-runtime-requirements.txt +297 -0
- tradingcodex-1.1.2/tradingcodex_cli/calculation_runner.py +828 -0
- tradingcodex-1.1.2/tradingcodex_cli/commands/build.py +61 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/doctor.py +149 -17
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/mcp.py +13 -266
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/research.py +37 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/generator.py +550 -15
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/api.py +50 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/agents.py +91 -10
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/artifact_bindings.py +86 -5
- tradingcodex-1.1.2/tradingcodex_service/application/artifact_catalog.py +764 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/artifact_quality.py +31 -1
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/brokers.py +3 -262
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/build_gateway.py +2 -10
- tradingcodex-1.1.2/tradingcodex_service/application/calculations.py +1642 -0
- tradingcodex-1.1.2/tradingcodex_service/application/codex_capabilities.py +322 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/common.py +3 -3
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/components.py +78 -18
- tradingcodex-1.1.2/tradingcodex_service/application/datasets.py +1306 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/operator_authority.py +1 -89
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/portfolio.py +76 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/research.py +118 -29
- tradingcodex-1.1.2/tradingcodex_service/application/research_object_catalog.py +1096 -0
- tradingcodex-1.1.2/tradingcodex_service/application/research_objects.py +214 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/research_specs.py +31 -29
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/runtime.py +9 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/source_snapshots.py +6 -4
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/viewer.py +37 -4
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/workspace_git.py +1 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/mcp_runtime.py +402 -161
- tradingcodex-1.1.2/tradingcodex_service/static/tradingcodex_web/assets/index-gUVw-08l.js +9 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/static/tradingcodex_web/index.html +1 -1
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/urls.py +6 -0
- tradingcodex-1.1.2/tradingcodex_service/version.py +1 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/viewer_api.py +25 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/codex-base/files/.codex/config.toml +8 -4
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/codex-base/files/.codex/hooks/tradingcodex_hook.py +74 -89
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/codex-base/files/.codex/prompts/base_instructions/head-manager.md +70 -16
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/codex-base/files/AGENTS.md +7 -3
- tradingcodex-1.1.2/workspace_templates/modules/codex-base/files/tcx-calc +13 -0
- tradingcodex-1.1.2/workspace_templates/modules/codex-base/files/tcx-calc.cmd +11 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/codex-base/module.json +1 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/research_artifact.schema.json +21 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/fundamental-analyst.toml +2 -1
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/instrument-analyst.toml +1 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/judgment-reviewer.toml +2 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/macro-analyst.toml +2 -1
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/news-analyst.toml +1 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/portfolio-manager.toml +3 -1
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/risk-manager.toml +3 -1
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/technical-analyst.toml +2 -1
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/valuation-analyst.toml +2 -1
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/guidance-guardrails/files/.tradingcodex/guidance/task-quality-checklist.md +1 -1
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-build/SKILL.md +15 -17
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-dashboard/SKILL.md +2 -2
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-server/SKILL.md +12 -1
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/SKILL.md +21 -8
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-artifact/SKILL.md +2 -0
- tradingcodex-1.1.2/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-calculation/SKILL.md +56 -0
- tradingcodex-1.1.2/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-calculation/agents/openai.yaml +6 -0
- tradingcodex-1.1.2/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-calculation/references/data-runtime.md +65 -0
- tradingcodex-1.1.2/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-calculation/references/finance-methods.md +72 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-source-gate/SKILL.md +17 -5
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/module.json +1 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/tradingcodex-mcp/module.json +0 -1
- tradingcodex-1.1.0/apps/mcp/admin.py +0 -40
- tradingcodex-1.1.0/apps/mcp/models.py +0 -182
- tradingcodex-1.1.0/apps/mcp/services.py +0 -1381
- tradingcodex-1.1.0/tests/test_mcp_operator_authority.py +0 -524
- tradingcodex-1.1.0/tests/test_v1_migrations.py +0 -46
- tradingcodex-1.1.0/tradingcodex_cli/commands/build.py +0 -129
- tradingcodex-1.1.0/tradingcodex_service/application/customization.py +0 -463
- tradingcodex-1.1.0/tradingcodex_service/static/tradingcodex_web/assets/index-CFoXYUtq.js +0 -9
- tradingcodex-1.1.0/tradingcodex_service/version.py +0 -1
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/CONTRIBUTING.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/LICENSE +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/NOTICE +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/TRADEMARKS.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/__init__.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/audit/__init__.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/audit/admin.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/audit/apps.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/audit/migrations/0001_v1_initial.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/audit/migrations/__init__.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/audit/models.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/harness/__init__.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/harness/admin.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/harness/apps.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/harness/migrations/0001_v1_initial.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/harness/migrations/__init__.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/harness/models.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/harness/templatetags/__init__.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/integrations/__init__.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/integrations/admin.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/integrations/apps.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/integrations/migrations/0001_v1_initial.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/integrations/migrations/__init__.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/integrations/models.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/mcp/__init__.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/mcp/apps.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/mcp/migrations/0001_v1_initial.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/mcp/migrations/__init__.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/orders/__init__.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/orders/admin.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/orders/apps.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/orders/migrations/0001_v1_initial.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/orders/migrations/__init__.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/orders/models.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/orders/services.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/policy/__init__.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/policy/admin.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/policy/apps.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/policy/migrations/0001_v1_initial.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/policy/migrations/__init__.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/policy/models.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/policy/services.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/portfolio/__init__.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/portfolio/admin.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/portfolio/apps.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/portfolio/migrations/0001_v1_initial.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/portfolio/migrations/__init__.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/portfolio/models.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/assets/tradingcodex-banner.svg +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/codex-native-orchestration.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/core-concepts-and-rules.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/financial-workflow-references.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/guardrails.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/improvement-loop.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/investment-brain-plugins.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/licensing-and-commercialization.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/product-direction.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/index.html +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/package-lock.json +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/package.json +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/src/api.ts +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/src/features/SkillsPage.tsx +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/src/main.tsx +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/src/navigation.js +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/src/navigation.test.js +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/src/styles.css +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/src/ui.tsx +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/src/viewer-data.js +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/tsconfig.json +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/vite.config.ts +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/install.sh +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/setup.cfg +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_artifact_authentication.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_brain_skill.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_codex_cli_compat.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_codex_cli_contract.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_codex_native_orchestration.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_dashboard_skill.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_decision_memory_core.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_dev_bootstrap.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_evaluation_lab_hardening.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_evaluation_profiles.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_guidebook_contract.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_investment_analysis.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_investment_brain_cli.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_investment_brain_prompt_layers.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_investment_brain_provenance.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_investment_brain_registry.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_investor_context.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_order_turn_grant.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_provider_source_approval.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_research_spec_profiles.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_runtime_paths.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_runtime_profile.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_security_invariants.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_source_snapshot_agent_contract.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_v1_state_integrity.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex.egg-info/dependency_links.txt +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex.egg-info/entry_points.txt +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex.egg-info/top_level.txt +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/__init__.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/__init__.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/bootstrap.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/connectors.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/db.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/decision.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/evaluation.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/forecast.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/home.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/investment_brains.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/investor_context.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/mode.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/orders.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/policy.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/profile.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/skills.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/strategies.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/subagents.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/utils.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/workflow.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/workspaces.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/mcp_stdio.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/package_source.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/service_autostart.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/startup_status.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/versioning.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/__init__.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/admin.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/__init__.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/analysis_runs.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/audit.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/context_budget.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/decision_packages.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/evaluation_lab.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/execution_gateway.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/forecasting.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/git_subprocess.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/harness.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/health.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/investment_analysis.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/investment_brains.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/investor_context.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/markdown_preview.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/orders.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/policy.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/postmortems.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/runtime_mode.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/skill_invocations.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/workspaces.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/asgi.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/log_safety.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/runtime_profile.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/settings.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/static/tradingcodex_admin/favicon.svg +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/static/tradingcodex_web/assets/index-DYzj_xRR.css +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/web.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/wsgi.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/__init__.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/audit/files/.tradingcodex/audit/README.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/audit/files/trading/audit/.gitkeep +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/audit/module.json +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/codex-base/files/.codex/hooks.json +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/codex-base/files/.codex/rules/tradingcodex.rules +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/codex-base/files/.tradingcodex/cli.py +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/codex-base/files/.tradingcodex/config.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/codex-base/files/pyproject.toml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/codex-base/files/tcx +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/codex-base/files/tcx.cmd +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/policies/restricted-list.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/approval_receipt.schema.json +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/audit_event.schema.json +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/evidence_pack.schema.json +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/execution_result.schema.json +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/fundamental_report.schema.json +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/news_report.schema.json +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/order_ticket.schema.json +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/portfolio_review.schema.json +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/postmortem_report.schema.json +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/risk_report.schema.json +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/technical_report.schema.json +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/thesis.schema.json +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/valuation.schema.json +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/module.json +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/fixed-subagents/files/.tradingcodex/mainagent/skill-change-proposals/.gitkeep +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/fixed-subagents/module.json +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/guidance-guardrails/files/.tradingcodex/guidance/guardrails.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/guidance-guardrails/module.json +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/.tradingcodex/secrets.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/trading/forecasts/.gitkeep +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/trading/market-data/.gitkeep +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/trading/portfolio/.gitkeep +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/fundamental/.gitkeep +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/instrument/.gitkeep +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/macro/.gitkeep +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/news/.gitkeep +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/policy/.gitkeep +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/portfolio/.gitkeep +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/postmortem/.gitkeep +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/risk/.gitkeep +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/technical/.gitkeep +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/valuation/.gitkeep +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/trading/research/.gitkeep +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/module.json +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/paper-trading/module.json +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-automate/SKILL.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-automate/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-brain/SKILL.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-brain/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-brain/references/bundle-contract.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-build/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-dashboard/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-investor-context/SKILL.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-investor-context/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-memory/SKILL.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-memory/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-allow/SKILL.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-allow/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-cancel/SKILL.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-cancel/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-submit/SKILL.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-submit/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-plan/SKILL.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-plan/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-server/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-strategy/SKILL.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-strategy/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/references/context-and-override.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/references/decision-quality-spine.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/fundamental-analyst/tcx-fundamental/SKILL.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/fundamental-analyst/tcx-fundamental/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/instrument-analyst/tcx-instrument/SKILL.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/instrument-analyst/tcx-instrument/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/judgment-reviewer/tcx-judgment/SKILL.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/judgment-reviewer/tcx-judgment/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/macro-analyst/tcx-macro/SKILL.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/macro-analyst/tcx-macro/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/news-analyst/tcx-news/SKILL.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/news-analyst/tcx-news/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/tcx-order-draft/SKILL.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/tcx-order-draft/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/tcx-portfolio/SKILL.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/tcx-portfolio/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-order-approve/SKILL.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-order-approve/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-policy/SKILL.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-policy/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-risk/SKILL.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-risk/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-anti-overfit/SKILL.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-anti-overfit/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-artifact/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-data-qc/SKILL.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-data-qc/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-evidence/SKILL.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-evidence/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-forecast/SKILL.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-forecast/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-scenarios/SKILL.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-scenarios/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-source-gate/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/technical-analyst/tcx-technical/SKILL.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/technical-analyst/tcx-technical/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/valuation-analyst/tcx-valuation/SKILL.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/valuation-analyst/tcx-valuation/agents/openai.yaml +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/enforcer/README.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/gateway/README.md +0 -0
- {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/server.py +0 -0
|
@@ -2,6 +2,96 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 1.1.2 - 2026-07-17
|
|
6
|
+
|
|
7
|
+
- Add a cross-platform fixed-role calculation surface with generated
|
|
8
|
+
`tcx-calc`/`tcx-calc.cmd` launchers and a content-addressed runtime v2 outside
|
|
9
|
+
Django, MCP, the service home, DB, workspace, and scratch. Its wheel-only
|
|
10
|
+
per-artifact hash resource pins the complete 12-package direct/transitive
|
|
11
|
+
set around NumPy, pandas, SciPy, statsmodels, numpy-financial, and PyArrow.
|
|
12
|
+
The exact basename-only contract replaces host-dependent system
|
|
13
|
+
Python and heredocs, sanitizes environment and temp state before exposing the
|
|
14
|
+
verified runtime, rejects links and compound forms, applies resource bounds,
|
|
15
|
+
blocks child-process and network escape paths in prepared mode, verifies the
|
|
16
|
+
generated launcher hashes in doctor, and remains inside the native Codex OS
|
|
17
|
+
sandbox. Windows scratch now uses `TradingCodexScratch` so it cannot overlap
|
|
18
|
+
the default service home. Native Windows release smoke invokes both generated
|
|
19
|
+
batch launchers through tokenized `cmd /c call` commands so workspace paths
|
|
20
|
+
containing spaces retain their argument boundaries. Pinned packages may load
|
|
21
|
+
native libraries only from absolute paths inside the verified runtime and
|
|
22
|
+
only from an imported runtime-package frame; their process-local ctypes
|
|
23
|
+
bootstrap remains available, including CPython's exact Windows `kernel32`
|
|
24
|
+
import bootstrap. Scratch calls and external, other bare-name, or raw-integer-
|
|
25
|
+
handle loading remain denied. The explicit manual
|
|
26
|
+
release workflow gates the exact wheel through an x86-64 Linux/macOS/Windows
|
|
27
|
+
and Python 3.11-3.14 runtime matrix.
|
|
28
|
+
- Separate ordinary GitHub uploads from deployment work. Normal source CI keeps
|
|
29
|
+
source, framework, and deterministic frontend checks but does not build or
|
|
30
|
+
upload distributions, run release-upgrade or platform matrices, or publish.
|
|
31
|
+
Documentation-only pushes and pull requests skip source CI, GitHub Pages
|
|
32
|
+
becomes manual-only, and package build/publication remains confined to
|
|
33
|
+
explicit Manual Release dispatches.
|
|
34
|
+
- Add immutable Dataset memory with Source Snapshot lineage, explicit typed
|
|
35
|
+
manifests, content-addressed canonical Parquet payloads, append-only license
|
|
36
|
+
withdrawals, bounded card/manifest/profile/slice retrieval, and a managed
|
|
37
|
+
Git ignore rule for payload objects. A rebuildable SQLite+FTS v3 catalog now
|
|
38
|
+
unifies existing research artifacts with Dataset and Calculation objects,
|
|
39
|
+
reprojects only changed files, rebuilds after corruption, and continues the
|
|
40
|
+
legacy JSON exports for one compatibility release. Lineage timestamps cannot
|
|
41
|
+
predate their Source Snapshot or parent Dataset, withdrawn shared payloads
|
|
42
|
+
cannot be profiled, malformed manifests fail closed per object, and L0 cards
|
|
43
|
+
are size-bounded. Internally generated `Path` objects are normalized to the
|
|
44
|
+
portable forward-slash workspace form on native Windows while caller-supplied
|
|
45
|
+
backslash paths remain rejected.
|
|
46
|
+
- Add prepared CalculationSpec/Run memory around `tcx-calc`, including declared
|
|
47
|
+
scratch inputs/outputs, typed finite result envelopes, exact full-fingerprint
|
|
48
|
+
reuse with a current-workflow reuse Run, comparison by requested metric, and
|
|
49
|
+
private-ledger snapshot hash binding without durable input values. The new
|
|
50
|
+
shared `tcx-calculation` skill gives the six financial calculation roles the
|
|
51
|
+
bounded procedure; Head Manager receives card-only planning discovery and
|
|
52
|
+
the viewer remains read-only. Calculation cards also project bounded symbols
|
|
53
|
+
and immutable Dataset relations so instrument-scoped role searches do not
|
|
54
|
+
miss an existing exact calculation. Prepared recording independently
|
|
55
|
+
revalidates script/input/sidecar/runtime/output hashes and schemas; Dataset
|
|
56
|
+
materializations and private central-ledger snapshots are service-bound
|
|
57
|
+
rather than caller-asserted.
|
|
58
|
+
- Route legacy Source Snapshot, ResearchSpec, ReplayManifest, and ExperimentRun
|
|
59
|
+
path construction, regular-file reads, hash verification, and immutable
|
|
60
|
+
writes through the shared Research Object primitives while preserving their
|
|
61
|
+
released v1 hash encoding and IDs without migration.
|
|
62
|
+
- Enable Head Manager live web search for narrow workflow-planning
|
|
63
|
+
reconnaissance. Durable root instructions and `tcx-workflow` keep raw search
|
|
64
|
+
results untrusted and prohibit using them as accepted evidence or synthesis
|
|
65
|
+
support; material facts must be reacquired by producing roles. Portfolio,
|
|
66
|
+
risk, and judgment-review roles explicitly keep web search disabled, and the
|
|
67
|
+
existing Build hook continues to block native web and browser tools.
|
|
68
|
+
- Fix BYOR Codex capability use after the 1.1.1 gate removal. Head Manager and
|
|
69
|
+
fixed roles now distinguish explicit external skill overlays from read-only
|
|
70
|
+
app, connector, MCP, and data tools; inspect the current task's callable
|
|
71
|
+
surface before falling back or declaring a provider unavailable; and treat
|
|
72
|
+
the sanitized inventory as configuration evidence rather than runtime
|
|
73
|
+
callability proof. Capability inventory now names plugin app/MCP/hook
|
|
74
|
+
components from secret-free top-level identifiers and includes compatible
|
|
75
|
+
user skills discovered below `CODEX_HOME/skills`. Generated workspaces no
|
|
76
|
+
longer disable Codex apps, leaving app exposure to user, organization, and
|
|
77
|
+
host policy.
|
|
78
|
+
- Align observed E2E behavior with the workspace contract: fixed roles may edit
|
|
79
|
+
files in their dedicated private scratch root while arbitrary external paths
|
|
80
|
+
remain blocked; viewer write-shaped requests consistently return GET-only
|
|
81
|
+
`405` responses even with CSRF enforcement; managed Brain and Strategy proof
|
|
82
|
+
errors name their own entrypoints; and E2E hooks execute through the generated
|
|
83
|
+
launcher runtime.
|
|
84
|
+
|
|
85
|
+
## 1.1.1 - 2026-07-16
|
|
86
|
+
|
|
87
|
+
- Remove the legacy user-capability gate, its CLI and broker-import paths,
|
|
88
|
+
and its active database tables. User-installed MCP servers, skills, plugins,
|
|
89
|
+
apps, and hooks now remain BYOR native Codex capabilities for root and fixed
|
|
90
|
+
agents. Add a secret-free read-only capability inventory to MCP and System,
|
|
91
|
+
preserve non-reserved user Codex configuration across update, and keep all
|
|
92
|
+
TradingCodex principals, grants, protected proofs, and order effects behind
|
|
93
|
+
the existing service boundary.
|
|
94
|
+
|
|
5
95
|
## 1.1.0 - 2026-07-16
|
|
6
96
|
|
|
7
97
|
- Make managed skill invocation resilient without weakening authority: Build,
|
|
@@ -168,8 +258,8 @@
|
|
|
168
258
|
user-terminal handoffs instead of attempting a blocked model shell.
|
|
169
259
|
- Replace agent-side connector `connect`/write-style scaffold MCP operations
|
|
170
260
|
with read-only, content-addressed scaffold rendering plus native patching.
|
|
171
|
-
|
|
172
|
-
|
|
261
|
+
Provider-source approval remains an interactive operator action protected by
|
|
262
|
+
a one-use service capability.
|
|
173
263
|
- Add the explicit-only `tcx-order-allow` bundle and `OrderTurnGrant`: only a
|
|
174
264
|
physical first line `$tcx-order-allow --mode paper|validation|live` can admit one
|
|
175
265
|
later submit or cancel in that root turn. Grants bind workspace, session,
|
|
@@ -11,5 +11,7 @@ recursive-include frontend *.css *.html *.json *.js *.ts *.tsx
|
|
|
11
11
|
recursive-include workspace_templates *
|
|
12
12
|
recursive-include workspace_templates .*
|
|
13
13
|
recursive-include tradingcodex_service/static *
|
|
14
|
+
include tradingcodex_cli/calculation-runtime-lock.json
|
|
15
|
+
include tradingcodex_cli/calculation-runtime-requirements.txt
|
|
14
16
|
recursive-exclude frontend/node_modules *
|
|
15
17
|
global-exclude *.py[cod]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tradingcodex
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.2
|
|
4
4
|
Summary: Local-first investment operating system for Codex-native research and service-gated execution.
|
|
5
5
|
Author: TradingCodex Authors
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -29,13 +29,18 @@ Requires-Dist: markdown-it-py<5,>=3
|
|
|
29
29
|
Requires-Dist: nh3<0.4,>=0.3
|
|
30
30
|
Requires-Dist: packaging>=24
|
|
31
31
|
Requires-Dist: pydantic>=2
|
|
32
|
+
Requires-Dist: pyarrow==25.0.0
|
|
32
33
|
Requires-Dist: PyYAML>=6
|
|
33
34
|
Requires-Dist: whitenoise<7,>=6.12
|
|
34
35
|
Provides-Extra: dev
|
|
35
36
|
Requires-Dist: pytest>=8; extra == "dev"
|
|
36
37
|
Dynamic: license-file
|
|
37
38
|
|
|
38
|
-
|
|
39
|
+
<h1 align="center">TradingCodex</h1>
|
|
40
|
+
|
|
41
|
+
<p align="center">
|
|
42
|
+
<img src="assets/tradingcodex-banner-v3.png" alt="TradingCodex transforms fragmented investment tools into a native Codex research workflow" width="100%">
|
|
43
|
+
</p>
|
|
39
44
|
|
|
40
45
|
<div align="center">
|
|
41
46
|
<a href="https://pypi.org/project/tradingcodex/"><img alt="PyPI" src="https://img.shields.io/pypi/v/tradingcodex?label=PyPI"></a>
|
|
@@ -132,15 +137,6 @@ needs revision, or is blocked.
|
|
|
132
137
|
| **Django service** | Enforces artifact identity, policy, approval, broker, idempotency, execution, and audit rules through shared application services. | It does not replace Codex with a semantic router, preset team, or stored workflow DAG. |
|
|
133
138
|
| **Read-only viewer** | Lets you browse Library artifacts, Skills, System posture, and registered workspaces. | It does not launch Codex, write workspace files, or mutate orders, brokers, skills, or policy. |
|
|
134
139
|
|
|
135
|
-
```mermaid
|
|
136
|
-
flowchart LR
|
|
137
|
-
question[Your mandate] --> codex[Native Codex task]
|
|
138
|
-
codex --> team[Head Manager and fixed-role evidence]
|
|
139
|
-
team --> artifacts[Authenticated research artifacts]
|
|
140
|
-
artifacts --> viewer[Read-only Library and System viewer]
|
|
141
|
-
artifacts --> service[Policy, approval, broker, and audit gates]
|
|
142
|
-
```
|
|
143
|
-
|
|
144
140
|
## What You Keep
|
|
145
141
|
|
|
146
142
|
TradingCodex keeps the work inspectable after the chat ends:
|
|
@@ -165,6 +161,11 @@ that state in prompts or workspace files.
|
|
|
165
161
|
- Fixed roles have bounded tools and handoff responsibilities. A final order
|
|
166
162
|
path is available only from an exact root-native protocol, never from the
|
|
167
163
|
viewer, a subagent, public REST, generic CLI, or direct MCP call.
|
|
164
|
+
- User-installed MCP servers, skills, and plugins are BYOR native Codex
|
|
165
|
+
capabilities. TradingCodex neither recommends nor verifies them; their
|
|
166
|
+
licenses, data terms, costs, and side effects remain the user/provider's
|
|
167
|
+
responsibility, and TradingCodex guarantees cover only its own capabilities,
|
|
168
|
+
state, and actions.
|
|
168
169
|
- Raw credentials do not belong in prompts, workspace files, reports, API/MCP
|
|
169
170
|
output, or audit data.
|
|
170
171
|
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
<h1 align="center">TradingCodex</h1>
|
|
2
|
+
|
|
3
|
+
<p align="center">
|
|
4
|
+
<img src="assets/tradingcodex-banner-v3.png" alt="TradingCodex transforms fragmented investment tools into a native Codex research workflow" width="100%">
|
|
5
|
+
</p>
|
|
2
6
|
|
|
3
7
|
<div align="center">
|
|
4
8
|
<a href="https://pypi.org/project/tradingcodex/"><img alt="PyPI" src="https://img.shields.io/pypi/v/tradingcodex?label=PyPI"></a>
|
|
@@ -95,15 +99,6 @@ needs revision, or is blocked.
|
|
|
95
99
|
| **Django service** | Enforces artifact identity, policy, approval, broker, idempotency, execution, and audit rules through shared application services. | It does not replace Codex with a semantic router, preset team, or stored workflow DAG. |
|
|
96
100
|
| **Read-only viewer** | Lets you browse Library artifacts, Skills, System posture, and registered workspaces. | It does not launch Codex, write workspace files, or mutate orders, brokers, skills, or policy. |
|
|
97
101
|
|
|
98
|
-
```mermaid
|
|
99
|
-
flowchart LR
|
|
100
|
-
question[Your mandate] --> codex[Native Codex task]
|
|
101
|
-
codex --> team[Head Manager and fixed-role evidence]
|
|
102
|
-
team --> artifacts[Authenticated research artifacts]
|
|
103
|
-
artifacts --> viewer[Read-only Library and System viewer]
|
|
104
|
-
artifacts --> service[Policy, approval, broker, and audit gates]
|
|
105
|
-
```
|
|
106
|
-
|
|
107
102
|
## What You Keep
|
|
108
103
|
|
|
109
104
|
TradingCodex keeps the work inspectable after the chat ends:
|
|
@@ -128,6 +123,11 @@ that state in prompts or workspace files.
|
|
|
128
123
|
- Fixed roles have bounded tools and handoff responsibilities. A final order
|
|
129
124
|
path is available only from an exact root-native protocol, never from the
|
|
130
125
|
viewer, a subagent, public REST, generic CLI, or direct MCP call.
|
|
126
|
+
- User-installed MCP servers, skills, and plugins are BYOR native Codex
|
|
127
|
+
capabilities. TradingCodex neither recommends nor verifies them; their
|
|
128
|
+
licenses, data terms, costs, and side effects remain the user/provider's
|
|
129
|
+
responsibility, and TradingCodex guarantees cover only its own capabilities,
|
|
130
|
+
state, and actions.
|
|
131
131
|
- Raw credentials do not belong in prompts, workspace files, reports, API/MCP
|
|
132
132
|
output, or audit data.
|
|
133
133
|
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from django.contrib import admin
|
|
2
|
+
|
|
3
|
+
from apps.mcp.models import McpToolCall, McpToolDefinition
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class ReadOnlyAdmin(admin.ModelAdmin):
|
|
7
|
+
def get_readonly_fields(self, request, obj=None):
|
|
8
|
+
return tuple(field.name for field in self.model._meta.fields)
|
|
9
|
+
|
|
10
|
+
def has_add_permission(self, request) -> bool:
|
|
11
|
+
return False
|
|
12
|
+
|
|
13
|
+
def has_change_permission(self, request, obj=None) -> bool:
|
|
14
|
+
return False
|
|
15
|
+
|
|
16
|
+
def has_delete_permission(self, request, obj=None) -> bool:
|
|
17
|
+
return False
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
admin.site.register([McpToolDefinition, McpToolCall], ReadOnlyAdmin)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
from django.db import migrations
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def remove_gate_broker_connections(apps, schema_editor):
|
|
5
|
+
BrokerConnection = apps.get_model("integrations", "BrokerConnection")
|
|
6
|
+
BrokerConnection.objects.filter(provider_id="external-mcp", transport="mcp").delete()
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class Migration(migrations.Migration):
|
|
10
|
+
dependencies = [
|
|
11
|
+
("integrations", "0001_v1_initial"),
|
|
12
|
+
("mcp", "0001_v1_initial"),
|
|
13
|
+
]
|
|
14
|
+
|
|
15
|
+
operations = [
|
|
16
|
+
migrations.RunPython(remove_gate_broker_connections, migrations.RunPython.noop),
|
|
17
|
+
migrations.DeleteModel(name="McpExternalPermissionRequest"),
|
|
18
|
+
migrations.DeleteModel(name="McpExternalToolCall"),
|
|
19
|
+
migrations.DeleteModel(name="McpExternalToolPermission"),
|
|
20
|
+
migrations.DeleteModel(name="McpExternalTool"),
|
|
21
|
+
migrations.DeleteModel(name="McpRouter"),
|
|
22
|
+
]
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
from django.db import models
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class McpToolDefinition(models.Model):
|
|
5
|
+
name = models.CharField(max_length=160, unique=True)
|
|
6
|
+
description = models.TextField(blank=True)
|
|
7
|
+
category = models.CharField(max_length=64, default="general")
|
|
8
|
+
capability_required = models.CharField(max_length=160, blank=True)
|
|
9
|
+
input_schema = models.JSONField(default=dict, blank=True)
|
|
10
|
+
risk_level = models.CharField(max_length=32, default="read")
|
|
11
|
+
allowed_roles = models.JSONField(default=list, blank=True)
|
|
12
|
+
requires_approval = models.BooleanField(default=False)
|
|
13
|
+
audit_required = models.BooleanField(default=True)
|
|
14
|
+
experimental = models.BooleanField(default=False)
|
|
15
|
+
enabled = models.BooleanField(default=True)
|
|
16
|
+
updated_at = models.DateTimeField(auto_now=True)
|
|
17
|
+
|
|
18
|
+
class Meta:
|
|
19
|
+
verbose_name = "MCP tool definition"
|
|
20
|
+
verbose_name_plural = "MCP tool definitions"
|
|
21
|
+
|
|
22
|
+
def __str__(self) -> str:
|
|
23
|
+
return self.name
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class McpToolCall(models.Model):
|
|
27
|
+
created_at = models.DateTimeField(auto_now_add=True)
|
|
28
|
+
tool_name = models.CharField(max_length=160)
|
|
29
|
+
principal_id = models.CharField(max_length=128, default="unknown")
|
|
30
|
+
status = models.CharField(max_length=32, default="recorded")
|
|
31
|
+
request = models.JSONField(default=dict, blank=True)
|
|
32
|
+
response = models.JSONField(default=dict, blank=True)
|
|
33
|
+
workspace_context = models.JSONField(default=dict, blank=True)
|
|
34
|
+
request_hash = models.CharField(max_length=64, blank=True)
|
|
35
|
+
result_hash = models.CharField(max_length=64, blank=True)
|
|
36
|
+
error = models.TextField(blank=True)
|
|
37
|
+
duration_ms = models.PositiveIntegerField(default=0)
|
|
38
|
+
|
|
39
|
+
class Meta:
|
|
40
|
+
ordering = ["-created_at", "-id"]
|
|
41
|
+
verbose_name = "MCP tool call"
|
|
42
|
+
verbose_name_plural = "MCP tool calls"
|
|
43
|
+
|
|
44
|
+
def __str__(self) -> str:
|
|
45
|
+
return f"{self.tool_name} {self.status}"
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import re
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
from tradingcodex_service.log_safety import redact_log_text
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
REDACTED = "<redacted>"
|
|
10
|
+
SAFE_REFERENCE_RE = re.compile(r"^env:[A-Za-z_][A-Za-z0-9_]*$")
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def redact_sensitive_data(value: Any, *, secret_values: tuple[str, ...] = ()) -> Any:
|
|
14
|
+
"""Redact credentials from MCP requests, responses, audit data, and errors."""
|
|
15
|
+
|
|
16
|
+
secrets = tuple(secret for secret in secret_values if secret)
|
|
17
|
+
if isinstance(value, dict):
|
|
18
|
+
redacted: dict[str, Any] = {}
|
|
19
|
+
for raw_key, item in value.items():
|
|
20
|
+
key = str(raw_key)
|
|
21
|
+
if key.lower() == "env":
|
|
22
|
+
redacted[key] = _redact_environment(item)
|
|
23
|
+
elif key.lower() == "credential_ref" and _is_safe_reference(item):
|
|
24
|
+
redacted[key] = str(item)
|
|
25
|
+
elif _is_sensitive_field(key):
|
|
26
|
+
redacted[key] = REDACTED
|
|
27
|
+
else:
|
|
28
|
+
redacted[key] = redact_sensitive_data(item, secret_values=secrets)
|
|
29
|
+
return redacted
|
|
30
|
+
if isinstance(value, list):
|
|
31
|
+
redacted_items: list[Any] = []
|
|
32
|
+
redact_next = False
|
|
33
|
+
for item in value:
|
|
34
|
+
if redact_next:
|
|
35
|
+
redacted_items.append(REDACTED)
|
|
36
|
+
redact_next = False
|
|
37
|
+
continue
|
|
38
|
+
redacted_items.append(redact_sensitive_data(item, secret_values=secrets))
|
|
39
|
+
redact_next = isinstance(item, str) and bool(
|
|
40
|
+
re.fullmatch(
|
|
41
|
+
r"--?(?:api[_-]?key|token|secret|password|credential|authorization)",
|
|
42
|
+
item,
|
|
43
|
+
flags=re.I,
|
|
44
|
+
)
|
|
45
|
+
)
|
|
46
|
+
return redacted_items
|
|
47
|
+
if isinstance(value, tuple):
|
|
48
|
+
return [redact_sensitive_data(item, secret_values=secrets) for item in value]
|
|
49
|
+
if isinstance(value, str):
|
|
50
|
+
return _redact_sensitive_text(value, secrets)
|
|
51
|
+
return value
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def _redact_environment(value: Any) -> dict[str, str] | str:
|
|
55
|
+
if not isinstance(value, dict):
|
|
56
|
+
return REDACTED
|
|
57
|
+
result: dict[str, str] = {}
|
|
58
|
+
for key, item in value.items():
|
|
59
|
+
text = str(item or "")
|
|
60
|
+
result[str(key)] = text if SAFE_REFERENCE_RE.fullmatch(text) else REDACTED
|
|
61
|
+
return result
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def _is_safe_reference(value: Any) -> bool:
|
|
65
|
+
text = str(value or "")
|
|
66
|
+
return bool(
|
|
67
|
+
SAFE_REFERENCE_RE.fullmatch(text)
|
|
68
|
+
or re.fullmatch(r"(?:os-keychain|keyring|secret)://[A-Za-z0-9._~:/@+-]+", text)
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def _is_sensitive_field(key: str) -> bool:
|
|
73
|
+
normalized = re.sub(r"[^a-z0-9]", "", str(key).lower())
|
|
74
|
+
return normalized.endswith(
|
|
75
|
+
(
|
|
76
|
+
"secret",
|
|
77
|
+
"secrets",
|
|
78
|
+
"password",
|
|
79
|
+
"passphrase",
|
|
80
|
+
"credential",
|
|
81
|
+
"credentials",
|
|
82
|
+
"apikey",
|
|
83
|
+
"accesstoken",
|
|
84
|
+
"refreshtoken",
|
|
85
|
+
"token",
|
|
86
|
+
"authorization",
|
|
87
|
+
"cookie",
|
|
88
|
+
)
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def _redact_sensitive_text(value: str, secret_values: tuple[str, ...] = ()) -> str:
|
|
93
|
+
text = str(value or "")
|
|
94
|
+
for secret in sorted((item for item in secret_values if item), key=len, reverse=True):
|
|
95
|
+
text = text.replace(secret, REDACTED)
|
|
96
|
+
text = re.sub(r"(?i)(bearer\s+)[^\s,;]+", rf"\1{REDACTED}", text)
|
|
97
|
+
text = re.sub(
|
|
98
|
+
r"(?i)((?:api[_-]?key|token|secret|password|credential|authorization)\s*[:=]\s*)([^\s,;&]+)",
|
|
99
|
+
rf"\1{REDACTED}",
|
|
100
|
+
text,
|
|
101
|
+
)
|
|
102
|
+
text = re.sub(r"(?i)([a-z][a-z0-9+.-]*://)[^/@\s]+@", rf"\1{REDACTED}@", text)
|
|
103
|
+
return redact_log_text(text)
|
|
Binary file
|
|
@@ -65,7 +65,7 @@ If these layers disagree, treat `docs/` as the durable product intent and fix th
|
|
|
65
65
|
| Document | Owns |
|
|
66
66
|
| --- | --- |
|
|
67
67
|
| [guardrails.md](./guardrails.md) | Guardrail taxonomy: guidance, enforcement, and information barriers. |
|
|
68
|
-
| [safety-policy-and-execution.md](./safety-policy-and-execution.md) | Permission checks, approval rules, execution lifecycle, adapter boundary,
|
|
68
|
+
| [safety-policy-and-execution.md](./safety-policy-and-execution.md) | Permission checks, approval rules, execution lifecycle, adapter boundary, BYOR Codex capability boundary, blocked actions, and secret handling. |
|
|
69
69
|
| [improvement-loop.md](./improvement-loop.md) | Workflow quality, research memory, improve records, skill evolution, postmortem review, validation feedback, and quality-learning loops. |
|
|
70
70
|
|
|
71
71
|
## Implementation And Operations Documents
|
|
@@ -73,7 +73,7 @@ If these layers disagree, treat `docs/` as the durable product intent and fix th
|
|
|
73
73
|
| Document | Owns |
|
|
74
74
|
| --- | --- |
|
|
75
75
|
| [system-architecture.md](./system-architecture.md) | Django modular monolith, central DB ownership, app boundaries, runtime planes, service-layer use cases, and core models. |
|
|
76
|
-
| [interfaces-and-surfaces.md](./interfaces-and-surfaces.md) | Product web, Django Admin, Django Ninja API, MCP boundary, CLI, generated wrapper behavior, and
|
|
76
|
+
| [interfaces-and-surfaces.md](./interfaces-and-surfaces.md) | Product web, Django Admin, Django Ninja API, MCP boundary, CLI, generated wrapper behavior, and read-only Codex capability inventory. |
|
|
77
77
|
| [generated-workspaces.md](./generated-workspaces.md) | `tcx attach`, `tcx update`, generated files, project-scoped MCP config, hooks, workspace provenance, profile scope, and template rules. |
|
|
78
78
|
| [investment-brain-plugins.md](./investment-brain-plugins.md) | Product plan for high-freedom community TradingCodex Investment Brain plugins, Codex-skill projection, layer/override semantics, Decision Memory boundaries, and Git-managed user workspaces. |
|
|
79
79
|
| [validation-and-test-plan.md](./validation-and-test-plan.md) | Required validation commands, unit/API/generator/smoke coverage, MCP smokes, broker provider smokes, routing scenarios, and release-sensitive checks. |
|
|
@@ -89,7 +89,7 @@ If these layers disagree, treat `docs/` as the durable product intent and fix th
|
|
|
89
89
|
| User-facing request scoping, investor-context suitability, plain-English output, or professional finance framing | `financial-workflow-references.md`, `interfaces-and-surfaces.md`, `roles-skills-and-workflows.md` |
|
|
90
90
|
| Role roster, model policy, head-manager dispatch, skills, Investment Brain plugins, strategy behavior, routing, information barriers, or handoff quality | `release-readiness.md`, `investment-brain-plugins.md`, `codex-native-orchestration.md`, `roles-skills-and-workflows.md`, `harness.md`, `generated-workspaces.md`, `core-concepts-and-rules.md` |
|
|
91
91
|
| Research or decision memory, source snapshots, ResearchSpec/replay/ExperimentRun, forecast/calibration ledgers, postmortem lessons, search indexes, readiness labels, artifact paths, report quality, or markdown preview | `decision-memory.md`, `research-memory-and-artifacts.md`, `improvement-loop.md`, `codex-native-orchestration.md` |
|
|
92
|
-
| Policy, permissions, approvals, idempotency, execution, adapters, broker safety,
|
|
92
|
+
| Policy, permissions, approvals, idempotency, execution, adapters, broker safety, BYOR capabilities, or secret handling | `safety-policy-and-execution.md`, `guardrails.md`, `core-concepts-and-rules.md` |
|
|
93
93
|
| Django apps, models, service-layer contracts, central DB ownership, or runtime topology | `system-architecture.md` |
|
|
94
94
|
| Product web, Admin, REST, MCP, CLI, or generated wrapper behavior | `interfaces-and-surfaces.md` |
|
|
95
95
|
| Workspace templates, bootstrap, hooks, project MCP config, generated files, or update behavior | `generated-workspaces.md` |
|
|
@@ -60,14 +60,15 @@ clear.
|
|
|
60
60
|
| `investment-brain-plugins` | Supports privacy-reviewed user-owned local Brain authoring, strict community bundle validation, explicit Head Manager-only projection, immutable versions, and receipt-authenticated run/artifact/Decision Memory provenance. | `guardrail.guidance`, `improvement.skill_evolution`, `improvement.research_memory` |
|
|
61
61
|
| `fixed-role-dispatch` | Maintains head-manager, fixed subagent routing, and no-overlap handoff boundaries in native Codex. | `guardrail.guidance`, `guardrail.information_barrier`, `improvement.workflow_quality` |
|
|
62
62
|
| `versioned-workspace` | Keeps generated workspaces in user-owned Git worktrees with privacy-first ignores and no automatic stage, commit, remote, or publication. | `guardrail.guidance`, `guardrail.information_barrier`, `improvement.validation_feedback` |
|
|
63
|
-
| `research-memory` | Stores source-aware research artifacts, versions, snapshots, Evidence Run Cards, Validation Cards, and
|
|
63
|
+
| `research-memory` | Stores source-aware research artifacts, versions, snapshots, Evidence Run Cards, Validation Cards, and rebuildable research/cross-artifact search projections. | `improvement.research_memory` |
|
|
64
|
+
| `dataset-calculation-memory` | Stores immutable Dataset manifests/content-addressed Parquet payloads and conclusion-relevant CalculationSpec/Run records, projects them into the rebuildable SQLite+FTS v3 catalog, and reuses only exact successful fingerprints through the wheel-locked finance runtime v2. | `guardrail.information_barrier`, `improvement.research_memory`, `improvement.context_efficiency`, `improvement.validation_feedback` |
|
|
64
65
|
| `workflow-quality-gates` | Defines artifact quality, Decision Quality Spine, agent judgment review, claim discipline, and synthesis lineage without a Django workflow loop. | `guardrail.guidance`, `improvement.workflow_quality` |
|
|
65
66
|
| `decision-package` | Freezes run provenance, artifact paths, forecasts, investor-context gaps, and outcomes in Codex-readable workspace records. | `guardrail.guidance`, `improvement.workflow_quality`, `improvement.research_memory` |
|
|
66
67
|
| `artifact-quality-contract` | Evaluates workspace artifacts, Evidence Run Cards, Validation Cards, source snapshots, and forecast ledgers for source/as-of posture, source trust, data-boundary warnings, claim tags, handoff state, confidence, missing evidence, judgment-review fields, and next-recipient routing metadata. | `guardrail.guidance`, `improvement.workflow_quality`, `improvement.research_memory` |
|
|
67
68
|
| `context-efficiency-contract` | Keeps workflows bounded through compact briefs, artifact references, context summaries, source snapshot IDs, targeted full-artifact reads, and `subagents context-audit` validation. | `guardrail.guidance`, `guardrail.information_barrier`, `improvement.workflow_quality`, `improvement.context_efficiency` |
|
|
68
69
|
| `responsibility-boundary-contract` | Separates durable role identity, tool permissions, skill procedures, artifact contracts, and projection ownership so changes stay local. | `guardrail.guidance`, `guardrail.information_barrier`, `improvement.workflow_quality`, `improvement.skill_evolution` |
|
|
69
70
|
| `tcx-source-gate` | Keeps external evidence read-only and source-aware. | `guardrail.guidance`, `improvement.workflow_quality` |
|
|
70
|
-
| `
|
|
71
|
+
| `codex-capability-inventory` | Lists sanitized native Codex MCP, skill, plugin, app, and hook metadata without managing or endorsing user-installed capabilities. | `guardrail.guidance`, `guardrail.information_barrier` |
|
|
71
72
|
| `broker-center` | Acts as the local broker control plane for connector state, capability profiles, source drift, read-only account discovery, sync runs, mapping review, reconciliation, and service-gated execution. | `guardrail.enforcement`, `improvement.workflow_quality` |
|
|
72
73
|
| `secret-wall` | Blocks raw broker secrets from workspace files, prompts, shell paths, and role context. | `guardrail.enforcement`, `guardrail.information_barrier` |
|
|
73
74
|
| `policy-and-restricted-list` | Evaluates principals, capabilities, explicit deny rules, restricted symbols, and limits. | `guardrail.enforcement` |
|
|
@@ -71,6 +71,16 @@ The source of truth is the existing file-native record:
|
|
|
71
71
|
Existing events are not edited to make history look cleaner. Corrections,
|
|
72
72
|
revisions, supersession, disputes, and retirement are new records.
|
|
73
73
|
|
|
74
|
+
The rebuildable v2 artifact catalog provides a discovery projection across
|
|
75
|
+
these file-native records without becoming Decision Memory itself. New
|
|
76
|
+
type-specific service output projects with full canonical identity metadata;
|
|
77
|
+
older files remain unchanged and may project as `legacy_partial`. Malformed
|
|
78
|
+
records are quarantined as `invalid`. A point-in-time catalog query uses each
|
|
79
|
+
type's explicit `knowledge_cutoff` or `known_at` field and excludes missing,
|
|
80
|
+
malformed, or later values, so legacy discovery does not silently become
|
|
81
|
+
historical provenance. The catalog can be discarded and recreated from source
|
|
82
|
+
artifacts and verified forecast-ledger state.
|
|
83
|
+
|
|
74
84
|
### Time contract
|
|
75
85
|
|
|
76
86
|
Decision Memory needs more than a document `updated_at`. Records should
|
|
@@ -79,7 +79,6 @@ the backend listener private. Invalid remote settings fail before binding.
|
|
|
79
79
|
- service autostart, `tcx service status`, compatibility checks, and `doctor`
|
|
80
80
|
consume readiness rather than treating a reachable process as ready.
|
|
81
81
|
- service logs rotate at 5 MiB with three backups by default.
|
|
82
|
-
- external MCP stderr rotates separately at 1 MiB with two backups.
|
|
83
82
|
- persisted logs redact known secrets, authorization values,
|
|
84
83
|
credential-shaped fields, and URL user-info.
|
|
85
84
|
|
|
@@ -109,13 +108,20 @@ files are never replaced.
|
|
|
109
108
|
|
|
110
109
|
## Maintainer Prerequisites
|
|
111
110
|
|
|
112
|
-
Release verification uses Python 3.11 and Node 22
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
dependency
|
|
111
|
+
Release verification uses Python 3.11 and Node 22 for the complete source and
|
|
112
|
+
frontend gates. After that single quality job builds the candidate
|
|
113
|
+
distribution, the calculation-runtime matrix reuses the exact wheel on x86-64
|
|
114
|
+
Linux, Intel macOS, and native Windows under Python 3.11, 3.12, 3.13, and 3.14.
|
|
115
|
+
Each matrix job provisions the hash-locked runtime and exercises attach,
|
|
116
|
+
doctor, direct package imports, exploratory compatibility, prepared recording,
|
|
117
|
+
and exact reuse. Node remains a maintainer-only build dependency and is not
|
|
118
|
+
installed by matrix workspaces.
|
|
119
|
+
|
|
120
|
+
Calculation runtime changes are compatibility-sensitive even when the main
|
|
121
|
+
source suite is unchanged. Before release, resolve and verify every hash-locked
|
|
122
|
+
wheel for the complete 12-package `finance-*` runtime on supported Python
|
|
123
|
+
3.11–3.14 macOS, Linux, and native Windows x86-64 targets. Missing wheels fail
|
|
124
|
+
the target; release validation never permits a source build as fallback.
|
|
119
125
|
|
|
120
126
|
Configure PyPI Trusted Publishing for:
|
|
121
127
|
|
|
@@ -157,6 +163,9 @@ The wheel smoke installs only the built wheel into a clean virtual environment,
|
|
|
157
163
|
checks distribution metadata against the runtime version, attaches a workspace,
|
|
158
164
|
validates native launchers and generated configuration, runs hooks and MCP
|
|
159
165
|
stdio, exercises the local service, and loads the packaged SPA and assets.
|
|
166
|
+
It also provisions the content-addressed calculation runtime, verifies its
|
|
167
|
+
manifest/lock/launcher hashes and exact imports, and exercises prepared and
|
|
168
|
+
exploratory `tcx-calc` modes without importing Django from the runner.
|
|
160
169
|
The release-upgrade smoke starts from the published `1.0.2` package, updates
|
|
161
170
|
that attached workspace with the built candidate wheel, and verifies preserved
|
|
162
171
|
workspace and runtime identity, user-owned state, and explicit home, DB, and
|
|
@@ -172,11 +181,11 @@ also require the disposable-workspace and Codex-native checks documented in
|
|
|
172
181
|
## CI And Release Automation
|
|
173
182
|
|
|
174
183
|
`.github/workflows/ci.yml` is test-only. One Ubuntu/Python 3.11 job runs the
|
|
175
|
-
frontend
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
184
|
+
frontend determinism check, complete Python suite, and framework gates. It does
|
|
185
|
+
not construct or upload a wheel or source distribution, run release-upgrade or
|
|
186
|
+
native-runtime matrices, or publish anything. Documentation-, guide-, OpenWiki-,
|
|
187
|
+
and asset-only pushes or pull requests skip this workflow. Source-bearing pull
|
|
188
|
+
requests and pushes still receive the normal source-quality checks.
|
|
180
189
|
|
|
181
190
|
`.github/workflows/release.yml` is manual-only. Every run requires an explicit
|
|
182
191
|
`release_version`. A dry run may build from any selected ref with
|
|
@@ -192,11 +201,13 @@ publishes.
|
|
|
192
201
|
- the built wheel passes the Ubuntu wheel and prior-release update smokes
|
|
193
202
|
- the protected `pypi` environment approves Trusted Publishing
|
|
194
203
|
|
|
195
|
-
The release workflow has one build/verification job
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
204
|
+
The release workflow has one build/verification job followed by the required
|
|
205
|
+
Python 3.11-3.14 Linux, Intel-macOS, and native-Windows calculation-runtime
|
|
206
|
+
matrix. When publication is requested, one protected PyPI job downloads that
|
|
207
|
+
exact artifact and uploads it; no job rebuilds the distribution after
|
|
208
|
+
verification. These distribution and platform jobs run only after an explicit
|
|
209
|
+
`Manual Release` dispatch, never because a branch, tag, development commit, or
|
|
210
|
+
documentation change was pushed.
|
|
200
211
|
|
|
201
212
|
## User Guide Pages
|
|
202
213
|
|
|
@@ -207,10 +218,11 @@ prompts, workspace viewing, reusable skills, and everyday recovery. The detailed
|
|
|
207
218
|
product rules remain canonical in `README.md`, `installation.md`, and `docs/`;
|
|
208
219
|
the guide links back to those sources rather than replacing them.
|
|
209
220
|
|
|
210
|
-
`.github/workflows/deploy-user-guide.yml`
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
221
|
+
`.github/workflows/deploy-user-guide.yml` is manual-only. An explicit workflow
|
|
222
|
+
dispatch uses one job to configure, upload, and deploy only `guidebook/` to
|
|
223
|
+
GitHub Pages. A normal branch push or documentation-only change neither deploys
|
|
224
|
+
Pages nor builds or deploys the Python package, Django service, or a production
|
|
225
|
+
Node runtime.
|
|
214
226
|
|
|
215
227
|
GitHub Pages is configured to use **GitHub Actions** as its publishing source.
|
|
216
228
|
The guide for this repository is published at
|
|
@@ -271,7 +283,7 @@ sh "$SOURCE_ROOT/install.sh" \
|
|
|
271
283
|
On native Windows PowerShell:
|
|
272
284
|
|
|
273
285
|
```powershell
|
|
274
|
-
$ReleaseVersion = "1.1.
|
|
286
|
+
$ReleaseVersion = "1.1.2"
|
|
275
287
|
$Workspace = Join-Path $env:TEMP "tcx-pypi-$ReleaseVersion"
|
|
276
288
|
New-Item -ItemType Directory -Force $Workspace | Out-Null
|
|
277
289
|
Set-Location $Workspace
|
|
@@ -60,7 +60,7 @@ design, migration, and validation evidence.
|
|
|
60
60
|
- Provider canary regressions prove that submit/cancel results, health details,
|
|
61
61
|
account-sync exceptions, and successful account display metadata do not
|
|
62
62
|
reappear in DB rows, API/MCP projections, execution results, or audit events.
|
|
63
|
-
- A disposable generated workspace reports nine fixed roles and
|
|
63
|
+
- A disposable generated workspace reports nine fixed roles and 33 skills,
|
|
64
64
|
contains no retired execution role, and exposes no ungated submit, cancel, or
|
|
65
65
|
broker status-refresh mutation. Its one execution-risk MCP tool is
|
|
66
66
|
`use_order_turn_grant`, which has no authority without hook-injected proof.
|
|
@@ -257,7 +257,7 @@ normal analysis context:
|
|
|
257
257
|
canonical ids. If this audit is unavailable, fail closed before service
|
|
258
258
|
invocation.
|
|
259
259
|
4. Call the execution gateway synchronously and in-process. Do not launch a
|
|
260
|
-
shell, subprocess,
|
|
260
|
+
shell, subprocess, user-installed capability, or Head Manager tool call.
|
|
261
261
|
5. Emit only an allowlisted result projection as `UserPromptSubmit` additional
|
|
262
262
|
context with marker `tradingcodex-native-execution-result`.
|
|
263
263
|
6. Instruct Head Manager to report the recorded result without spawning roles,
|