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.
Files changed (399) hide show
  1. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/CHANGELOG.md +92 -2
  2. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/MANIFEST.in +2 -0
  3. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/PKG-INFO +12 -11
  4. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/README.md +10 -10
  5. tradingcodex-1.1.2/apps/mcp/admin.py +20 -0
  6. tradingcodex-1.1.2/apps/mcp/migrations/0002_remove_external_mcp_gate.py +22 -0
  7. tradingcodex-1.1.2/apps/mcp/models.py +45 -0
  8. tradingcodex-1.1.2/apps/mcp/services.py +103 -0
  9. tradingcodex-1.1.2/assets/tradingcodex-banner-v3.png +0 -0
  10. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/README.md +3 -3
  11. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/components.md +3 -2
  12. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/decision-memory.md +10 -0
  13. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/deployment.md +35 -23
  14. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/execution-without-subagent-plan.md +2 -2
  15. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/generated-workspaces.md +147 -69
  16. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/harness.md +44 -14
  17. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/interfaces-and-surfaces.md +110 -49
  18. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/release-readiness.md +53 -28
  19. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/research-memory-and-artifacts.md +221 -9
  20. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/roles-skills-and-workflows.md +59 -3
  21. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/safety-policy-and-execution.md +66 -92
  22. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/system-architecture.md +65 -16
  23. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/user-facing-skills.md +9 -5
  24. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/validation-and-test-plan.md +108 -25
  25. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/src/App.tsx +5 -2
  26. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/src/domain.ts +43 -0
  27. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/src/features/LibraryPage.tsx +50 -3
  28. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/src/features/SystemPage.tsx +6 -3
  29. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/installation.md +18 -10
  30. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/pyproject.toml +2 -0
  31. tradingcodex-1.1.2/tests/test_artifact_catalog.py +203 -0
  32. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_broker_center_prd.py +0 -79
  33. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_build_contract_metadata.py +5 -40
  34. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_build_hook.py +54 -66
  35. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_build_turn_grant.py +14 -37
  36. tradingcodex-1.1.2/tests/test_calculation_runner.py +1290 -0
  37. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_clean_v1_cli_audit.py +0 -88
  38. tradingcodex-1.1.2/tests/test_codex_capabilities.py +202 -0
  39. tradingcodex-1.1.2/tests/test_datasets.py +358 -0
  40. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_dynamic_artifact_quality.py +100 -1
  41. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_e2e_user_scenarios.py +4 -3
  42. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_mcp_broker_release_health.py +3 -236
  43. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_native_execution_gateway.py +191 -1
  44. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_platform_runtime.py +151 -75
  45. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_release_contract.py +71 -131
  46. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_research_forecast_surfaces.py +19 -4
  47. tradingcodex-1.1.2/tests/test_research_object_catalog.py +272 -0
  48. tradingcodex-1.1.2/tests/test_research_objects.py +48 -0
  49. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_skill_runtime_boundaries.py +64 -1
  50. tradingcodex-1.1.2/tests/test_v1_migrations.py +106 -0
  51. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_viewer.py +13 -3
  52. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_workspace_git_contract.py +3 -0
  53. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex.egg-info/PKG-INFO +12 -11
  54. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex.egg-info/SOURCES.txt +24 -3
  55. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex.egg-info/requires.txt +1 -0
  56. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/__main__.py +3 -3
  57. tradingcodex-1.1.2/tradingcodex_cli/calculation-runtime-lock.json +31 -0
  58. tradingcodex-1.1.2/tradingcodex_cli/calculation-runtime-requirements.txt +297 -0
  59. tradingcodex-1.1.2/tradingcodex_cli/calculation_runner.py +828 -0
  60. tradingcodex-1.1.2/tradingcodex_cli/commands/build.py +61 -0
  61. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/doctor.py +149 -17
  62. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/mcp.py +13 -266
  63. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/research.py +37 -0
  64. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/generator.py +550 -15
  65. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/api.py +50 -0
  66. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/agents.py +91 -10
  67. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/artifact_bindings.py +86 -5
  68. tradingcodex-1.1.2/tradingcodex_service/application/artifact_catalog.py +764 -0
  69. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/artifact_quality.py +31 -1
  70. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/brokers.py +3 -262
  71. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/build_gateway.py +2 -10
  72. tradingcodex-1.1.2/tradingcodex_service/application/calculations.py +1642 -0
  73. tradingcodex-1.1.2/tradingcodex_service/application/codex_capabilities.py +322 -0
  74. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/common.py +3 -3
  75. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/components.py +78 -18
  76. tradingcodex-1.1.2/tradingcodex_service/application/datasets.py +1306 -0
  77. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/operator_authority.py +1 -89
  78. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/portfolio.py +76 -0
  79. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/research.py +118 -29
  80. tradingcodex-1.1.2/tradingcodex_service/application/research_object_catalog.py +1096 -0
  81. tradingcodex-1.1.2/tradingcodex_service/application/research_objects.py +214 -0
  82. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/research_specs.py +31 -29
  83. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/runtime.py +9 -0
  84. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/source_snapshots.py +6 -4
  85. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/viewer.py +37 -4
  86. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/workspace_git.py +1 -0
  87. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/mcp_runtime.py +402 -161
  88. tradingcodex-1.1.2/tradingcodex_service/static/tradingcodex_web/assets/index-gUVw-08l.js +9 -0
  89. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/static/tradingcodex_web/index.html +1 -1
  90. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/urls.py +6 -0
  91. tradingcodex-1.1.2/tradingcodex_service/version.py +1 -0
  92. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/viewer_api.py +25 -0
  93. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/codex-base/files/.codex/config.toml +8 -4
  94. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/codex-base/files/.codex/hooks/tradingcodex_hook.py +74 -89
  95. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/codex-base/files/.codex/prompts/base_instructions/head-manager.md +70 -16
  96. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/codex-base/files/AGENTS.md +7 -3
  97. tradingcodex-1.1.2/workspace_templates/modules/codex-base/files/tcx-calc +13 -0
  98. tradingcodex-1.1.2/workspace_templates/modules/codex-base/files/tcx-calc.cmd +11 -0
  99. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/codex-base/module.json +1 -0
  100. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/research_artifact.schema.json +21 -0
  101. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/fundamental-analyst.toml +2 -1
  102. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/instrument-analyst.toml +1 -0
  103. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/judgment-reviewer.toml +2 -0
  104. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/macro-analyst.toml +2 -1
  105. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/news-analyst.toml +1 -0
  106. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/portfolio-manager.toml +3 -1
  107. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/risk-manager.toml +3 -1
  108. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/technical-analyst.toml +2 -1
  109. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/valuation-analyst.toml +2 -1
  110. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/guidance-guardrails/files/.tradingcodex/guidance/task-quality-checklist.md +1 -1
  111. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-build/SKILL.md +15 -17
  112. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-dashboard/SKILL.md +2 -2
  113. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-server/SKILL.md +12 -1
  114. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/SKILL.md +21 -8
  115. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-artifact/SKILL.md +2 -0
  116. tradingcodex-1.1.2/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-calculation/SKILL.md +56 -0
  117. tradingcodex-1.1.2/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-calculation/agents/openai.yaml +6 -0
  118. tradingcodex-1.1.2/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-calculation/references/data-runtime.md +65 -0
  119. tradingcodex-1.1.2/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-calculation/references/finance-methods.md +72 -0
  120. {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
  121. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/module.json +1 -0
  122. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/tradingcodex-mcp/module.json +0 -1
  123. tradingcodex-1.1.0/apps/mcp/admin.py +0 -40
  124. tradingcodex-1.1.0/apps/mcp/models.py +0 -182
  125. tradingcodex-1.1.0/apps/mcp/services.py +0 -1381
  126. tradingcodex-1.1.0/tests/test_mcp_operator_authority.py +0 -524
  127. tradingcodex-1.1.0/tests/test_v1_migrations.py +0 -46
  128. tradingcodex-1.1.0/tradingcodex_cli/commands/build.py +0 -129
  129. tradingcodex-1.1.0/tradingcodex_service/application/customization.py +0 -463
  130. tradingcodex-1.1.0/tradingcodex_service/static/tradingcodex_web/assets/index-CFoXYUtq.js +0 -9
  131. tradingcodex-1.1.0/tradingcodex_service/version.py +0 -1
  132. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/CONTRIBUTING.md +0 -0
  133. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/LICENSE +0 -0
  134. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/NOTICE +0 -0
  135. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/TRADEMARKS.md +0 -0
  136. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/__init__.py +0 -0
  137. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/audit/__init__.py +0 -0
  138. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/audit/admin.py +0 -0
  139. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/audit/apps.py +0 -0
  140. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/audit/migrations/0001_v1_initial.py +0 -0
  141. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/audit/migrations/__init__.py +0 -0
  142. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/audit/models.py +0 -0
  143. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/harness/__init__.py +0 -0
  144. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/harness/admin.py +0 -0
  145. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/harness/apps.py +0 -0
  146. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/harness/migrations/0001_v1_initial.py +0 -0
  147. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/harness/migrations/__init__.py +0 -0
  148. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/harness/models.py +0 -0
  149. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/harness/templatetags/__init__.py +0 -0
  150. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/integrations/__init__.py +0 -0
  151. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/integrations/admin.py +0 -0
  152. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/integrations/apps.py +0 -0
  153. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/integrations/migrations/0001_v1_initial.py +0 -0
  154. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/integrations/migrations/__init__.py +0 -0
  155. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/integrations/models.py +0 -0
  156. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/mcp/__init__.py +0 -0
  157. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/mcp/apps.py +0 -0
  158. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/mcp/migrations/0001_v1_initial.py +0 -0
  159. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/mcp/migrations/__init__.py +0 -0
  160. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/orders/__init__.py +0 -0
  161. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/orders/admin.py +0 -0
  162. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/orders/apps.py +0 -0
  163. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/orders/migrations/0001_v1_initial.py +0 -0
  164. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/orders/migrations/__init__.py +0 -0
  165. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/orders/models.py +0 -0
  166. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/orders/services.py +0 -0
  167. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/policy/__init__.py +0 -0
  168. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/policy/admin.py +0 -0
  169. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/policy/apps.py +0 -0
  170. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/policy/migrations/0001_v1_initial.py +0 -0
  171. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/policy/migrations/__init__.py +0 -0
  172. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/policy/models.py +0 -0
  173. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/policy/services.py +0 -0
  174. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/portfolio/__init__.py +0 -0
  175. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/portfolio/admin.py +0 -0
  176. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/portfolio/apps.py +0 -0
  177. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/portfolio/migrations/0001_v1_initial.py +0 -0
  178. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/portfolio/migrations/__init__.py +0 -0
  179. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/apps/portfolio/models.py +0 -0
  180. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/assets/tradingcodex-banner.svg +0 -0
  181. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/codex-native-orchestration.md +0 -0
  182. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/core-concepts-and-rules.md +0 -0
  183. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/financial-workflow-references.md +0 -0
  184. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/guardrails.md +0 -0
  185. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/improvement-loop.md +0 -0
  186. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/investment-brain-plugins.md +0 -0
  187. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/licensing-and-commercialization.md +0 -0
  188. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/docs/product-direction.md +0 -0
  189. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/index.html +0 -0
  190. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/package-lock.json +0 -0
  191. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/package.json +0 -0
  192. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/src/api.ts +0 -0
  193. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/src/features/SkillsPage.tsx +0 -0
  194. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/src/main.tsx +0 -0
  195. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/src/navigation.js +0 -0
  196. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/src/navigation.test.js +0 -0
  197. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/src/styles.css +0 -0
  198. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/src/ui.tsx +0 -0
  199. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/src/viewer-data.js +0 -0
  200. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/tsconfig.json +0 -0
  201. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/frontend/vite.config.ts +0 -0
  202. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/install.sh +0 -0
  203. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/setup.cfg +0 -0
  204. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_artifact_authentication.py +0 -0
  205. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_brain_skill.py +0 -0
  206. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_codex_cli_compat.py +0 -0
  207. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_codex_cli_contract.py +0 -0
  208. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_codex_native_orchestration.py +0 -0
  209. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_dashboard_skill.py +0 -0
  210. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_decision_memory_core.py +0 -0
  211. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_dev_bootstrap.py +0 -0
  212. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_evaluation_lab_hardening.py +0 -0
  213. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_evaluation_profiles.py +0 -0
  214. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_guidebook_contract.py +0 -0
  215. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_investment_analysis.py +0 -0
  216. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_investment_brain_cli.py +0 -0
  217. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_investment_brain_prompt_layers.py +0 -0
  218. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_investment_brain_provenance.py +0 -0
  219. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_investment_brain_registry.py +0 -0
  220. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_investor_context.py +0 -0
  221. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_order_turn_grant.py +0 -0
  222. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_provider_source_approval.py +0 -0
  223. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_research_spec_profiles.py +0 -0
  224. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_runtime_paths.py +0 -0
  225. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_runtime_profile.py +0 -0
  226. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_security_invariants.py +0 -0
  227. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_source_snapshot_agent_contract.py +0 -0
  228. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tests/test_v1_state_integrity.py +0 -0
  229. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex.egg-info/dependency_links.txt +0 -0
  230. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex.egg-info/entry_points.txt +0 -0
  231. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex.egg-info/top_level.txt +0 -0
  232. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/__init__.py +0 -0
  233. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/__init__.py +0 -0
  234. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/bootstrap.py +0 -0
  235. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/connectors.py +0 -0
  236. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/db.py +0 -0
  237. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/decision.py +0 -0
  238. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/evaluation.py +0 -0
  239. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/forecast.py +0 -0
  240. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/home.py +0 -0
  241. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/investment_brains.py +0 -0
  242. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/investor_context.py +0 -0
  243. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/mode.py +0 -0
  244. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/orders.py +0 -0
  245. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/policy.py +0 -0
  246. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/profile.py +0 -0
  247. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/skills.py +0 -0
  248. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/strategies.py +0 -0
  249. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/subagents.py +0 -0
  250. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/utils.py +0 -0
  251. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/workflow.py +0 -0
  252. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/commands/workspaces.py +0 -0
  253. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/mcp_stdio.py +0 -0
  254. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/package_source.py +0 -0
  255. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/service_autostart.py +0 -0
  256. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/startup_status.py +0 -0
  257. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_cli/versioning.py +0 -0
  258. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/__init__.py +0 -0
  259. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/admin.py +0 -0
  260. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/__init__.py +0 -0
  261. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/analysis_runs.py +0 -0
  262. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/audit.py +0 -0
  263. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/context_budget.py +0 -0
  264. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/decision_packages.py +0 -0
  265. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/evaluation_lab.py +0 -0
  266. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/execution_gateway.py +0 -0
  267. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/forecasting.py +0 -0
  268. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/git_subprocess.py +0 -0
  269. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/harness.py +0 -0
  270. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/health.py +0 -0
  271. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/investment_analysis.py +0 -0
  272. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/investment_brains.py +0 -0
  273. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/investor_context.py +0 -0
  274. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/markdown_preview.py +0 -0
  275. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/orders.py +0 -0
  276. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/policy.py +0 -0
  277. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/postmortems.py +0 -0
  278. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/runtime_mode.py +0 -0
  279. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/skill_invocations.py +0 -0
  280. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/application/workspaces.py +0 -0
  281. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/asgi.py +0 -0
  282. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/log_safety.py +0 -0
  283. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/runtime_profile.py +0 -0
  284. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/settings.py +0 -0
  285. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/static/tradingcodex_admin/favicon.svg +0 -0
  286. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/static/tradingcodex_web/assets/index-DYzj_xRR.css +0 -0
  287. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/web.py +0 -0
  288. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/tradingcodex_service/wsgi.py +0 -0
  289. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/__init__.py +0 -0
  290. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/audit/files/.tradingcodex/audit/README.md +0 -0
  291. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/audit/files/trading/audit/.gitkeep +0 -0
  292. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/audit/module.json +0 -0
  293. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/codex-base/files/.codex/hooks.json +0 -0
  294. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/codex-base/files/.codex/rules/tradingcodex.rules +0 -0
  295. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/codex-base/files/.tradingcodex/cli.py +0 -0
  296. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/codex-base/files/.tradingcodex/config.yaml +0 -0
  297. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/codex-base/files/pyproject.toml +0 -0
  298. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/codex-base/files/tcx +0 -0
  299. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/codex-base/files/tcx.cmd +0 -0
  300. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/policies/restricted-list.yaml +0 -0
  301. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/approval_receipt.schema.json +0 -0
  302. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/audit_event.schema.json +0 -0
  303. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/evidence_pack.schema.json +0 -0
  304. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/execution_result.schema.json +0 -0
  305. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/fundamental_report.schema.json +0 -0
  306. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/news_report.schema.json +0 -0
  307. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/order_ticket.schema.json +0 -0
  308. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/portfolio_review.schema.json +0 -0
  309. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/postmortem_report.schema.json +0 -0
  310. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/risk_report.schema.json +0 -0
  311. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/technical_report.schema.json +0 -0
  312. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/thesis.schema.json +0 -0
  313. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/valuation.schema.json +0 -0
  314. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/enforcement-guardrails/module.json +0 -0
  315. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/fixed-subagents/files/.tradingcodex/mainagent/skill-change-proposals/.gitkeep +0 -0
  316. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/fixed-subagents/module.json +0 -0
  317. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/guidance-guardrails/files/.tradingcodex/guidance/guardrails.md +0 -0
  318. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/guidance-guardrails/module.json +0 -0
  319. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/.tradingcodex/secrets.md +0 -0
  320. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/trading/forecasts/.gitkeep +0 -0
  321. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/trading/market-data/.gitkeep +0 -0
  322. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/trading/portfolio/.gitkeep +0 -0
  323. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/fundamental/.gitkeep +0 -0
  324. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/instrument/.gitkeep +0 -0
  325. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/macro/.gitkeep +0 -0
  326. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/news/.gitkeep +0 -0
  327. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/policy/.gitkeep +0 -0
  328. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/portfolio/.gitkeep +0 -0
  329. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/postmortem/.gitkeep +0 -0
  330. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/risk/.gitkeep +0 -0
  331. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/technical/.gitkeep +0 -0
  332. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/valuation/.gitkeep +0 -0
  333. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/files/trading/research/.gitkeep +0 -0
  334. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/information-barriers/module.json +0 -0
  335. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/paper-trading/module.json +0 -0
  336. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-automate/SKILL.md +0 -0
  337. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-automate/agents/openai.yaml +0 -0
  338. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-brain/SKILL.md +0 -0
  339. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-brain/agents/openai.yaml +0 -0
  340. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-brain/references/bundle-contract.md +0 -0
  341. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-build/agents/openai.yaml +0 -0
  342. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-dashboard/agents/openai.yaml +0 -0
  343. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-investor-context/SKILL.md +0 -0
  344. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-investor-context/agents/openai.yaml +0 -0
  345. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-memory/SKILL.md +0 -0
  346. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-memory/agents/openai.yaml +0 -0
  347. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-allow/SKILL.md +0 -0
  348. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-allow/agents/openai.yaml +0 -0
  349. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-cancel/SKILL.md +0 -0
  350. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-cancel/agents/openai.yaml +0 -0
  351. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-submit/SKILL.md +0 -0
  352. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-submit/agents/openai.yaml +0 -0
  353. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-plan/SKILL.md +0 -0
  354. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-plan/agents/openai.yaml +0 -0
  355. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-server/agents/openai.yaml +0 -0
  356. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-strategy/SKILL.md +0 -0
  357. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-strategy/agents/openai.yaml +0 -0
  358. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/agents/openai.yaml +0 -0
  359. {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
  360. {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
  361. {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
  362. {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
  363. {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
  364. {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
  365. {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
  366. {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
  367. {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
  368. {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
  369. {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
  370. {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
  371. {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
  372. {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
  373. {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
  374. {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
  375. {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
  376. {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
  377. {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
  378. {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
  379. {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
  380. {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
  381. {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
  382. {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
  383. {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
  384. {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
  385. {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
  386. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-evidence/SKILL.md +0 -0
  387. {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
  388. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-forecast/SKILL.md +0 -0
  389. {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
  390. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-scenarios/SKILL.md +0 -0
  391. {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
  392. {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
  393. {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
  394. {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
  395. {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
  396. {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
  397. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/enforcer/README.md +0 -0
  398. {tradingcodex-1.1.0 → tradingcodex-1.1.2}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/gateway/README.md +0 -0
  399. {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
- External MCP lifecycle/consent and provider-source approval remain
172
- interactive operator actions protected by one-use service capabilities.
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.0
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
- # TradingCodex
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
- # TradingCodex
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)
@@ -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, external MCP gate, blocked actions, and secret handling. |
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 external MCP surface. |
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, external MCP gate, or secret handling | `safety-policy-and-execution.md`, `guardrails.md`, `core-concepts-and-rules.md` |
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 exports. | `improvement.research_memory` |
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
- | `external-mcp-proxy-gate` | Registers external MCP connections, imports metadata, classifies risk, manages lifecycle/review state, and blocks unsafe direct connection paths. | `guardrail.enforcement`, `guardrail.information_barrier` |
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. The hosted CI budget runs
113
- the complete source, frontend, and package gates once on Python 3.11 instead
114
- of multiplying every push across the supported Python range and native
115
- platforms. Maintainers run additional supported-version or native-platform
116
- checks locally or through an explicit temporary/manual workflow when a change
117
- touches compatibility-sensitive code. Node is a maintainer-only build
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 build, complete Python suite and framework gates, clean package
176
- construction, the wheel smoke, and the prior-release update smoke. Guide-only
177
- pushes skip this workflow because
178
- the Pages workflow validates and deploys only static guide files. CI never
179
- publishes.
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. When publication is
196
- requested, one protected PyPI job downloads that exact artifact and uploads it;
197
- no job rebuilds the distribution after verification. Native macOS and Windows
198
- release smokes are local or explicitly scheduled maintainer gates rather than
199
- automatic jobs on every release.
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` uses one job to configure, upload,
211
- and deploy only `guidebook/` to GitHub Pages after a push to `main` that changes
212
- the guide or its workflow. It can also be run manually. It does not build or
213
- deploy the Python package, the Django service, or a production Node runtime.
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.0"
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 32 skills,
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, external MCP proxy, or Head Manager tool call.
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,