tradingcodex 0.2.4__tar.gz → 0.2.5__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-0.2.4 → tradingcodex-0.2.5}/MANIFEST.in +1 -1
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/PKG-INFO +1 -1
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/deployment.md +5 -3
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/generated-workspaces.md +7 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/roles-skills-and-workflows.md +1 -1
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/pyproject.toml +2 -1
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tests/test_python_migration.py +72 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex.egg-info/PKG-INFO +1 -1
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex.egg-info/SOURCES.txt +6 -6
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/startup_status.py +56 -12
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/components.py +2 -2
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/settings.py +3 -2
- tradingcodex-0.2.5/tradingcodex_service/version.py +1 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/files/.codex/hooks/tradingcodex_hook.py +8 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/files/.codex/prompts/base_instructions/head-manager.md +6 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-server/SKILL.md +1 -0
- tradingcodex-0.2.4/tradingcodex_service/version.py +0 -1
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/CONTRIBUTING.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/LICENSE +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/NOTICE +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/README.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/TRADEMARKS.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/__init__.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/audit/__init__.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/audit/admin.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/audit/apps.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/audit/migrations/0001_initial.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/audit/migrations/__init__.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/audit/models.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/harness/__init__.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/harness/admin.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/harness/apps.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/harness/migrations/0001_initial.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/harness/migrations/__init__.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/harness/models.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/harness/templatetags/__init__.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/integrations/__init__.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/integrations/admin.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/integrations/apps.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/integrations/migrations/0001_initial.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/integrations/migrations/0002_brokerconnection_brokeraccount_instrumentmap.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/integrations/migrations/__init__.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/integrations/models.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/integrations/services.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/mcp/__init__.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/mcp/admin.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/mcp/apps.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/mcp/migrations/0001_initial.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/mcp/migrations/__init__.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/mcp/models.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/mcp/services.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/orders/__init__.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/orders/admin.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/orders/apps.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/orders/migrations/0001_initial.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/orders/migrations/0002_approvalreceipt_approved_order_type_and_more.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/orders/migrations/0003_migrate_orderintent_to_orderticket.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/orders/migrations/0004_remove_order_intent_compat_fields.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/orders/migrations/__init__.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/orders/models.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/orders/services.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/policy/__init__.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/policy/admin.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/policy/apps.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/policy/migrations/0001_initial.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/policy/migrations/__init__.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/policy/models.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/policy/services.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/portfolio/__init__.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/portfolio/admin.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/portfolio/apps.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/portfolio/migrations/0001_initial.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/portfolio/migrations/0002_brokersyncrun_portfolioledgerevent_reconciliationrun.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/portfolio/migrations/__init__.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/portfolio/models.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/research/__init__.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/research/admin.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/research/apps.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/research/migrations/__init__.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/research/models.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/workflows/__init__.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/workflows/admin.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/workflows/apps.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/workflows/migrations/0001_initial.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/workflows/migrations/__init__.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/workflows/models.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/assets/tradingcodex-banner.svg +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/README.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/components.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/core-concepts-and-rules.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/financial-workflow-references.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/guardrails.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/harness.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/improvement-loop.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/interfaces-and-surfaces.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/licensing-and-commercialization.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/product-direction.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/research-memory-and-artifacts.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/safety-policy-and-execution.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/system-architecture.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/validation-and-test-plan.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/install.sh +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/installation.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/setup.cfg +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tests/test_broker_center_prd.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tests/test_e2e_user_scenarios.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex.egg-info/dependency_links.txt +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex.egg-info/entry_points.txt +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex.egg-info/requires.txt +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex.egg-info/top_level.txt +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/__init__.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/__main__.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/__init__.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/bootstrap.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/connectors.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/db.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/doctor.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/mcp.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/mode.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/orders.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/policy.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/profile.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/research.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/skills.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/strategies.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/subagents.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/utils.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/workspaces.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/generator.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/mcp_stdio.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/service_autostart.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/__init__.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/admin.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/api.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/__init__.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/agents.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/artifact_quality.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/audit.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/brokers.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/common.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/context_budget.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/harness.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/markdown_preview.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/orders.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/policy.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/portfolio.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/research.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/runtime.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/runtime_mode.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/asgi.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/mcp_http.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/mcp_runtime.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5/tradingcodex_service}/static/tradingcodex_admin/favicon.svg +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5/tradingcodex_service}/static/tradingcodex_web/app.css +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5/tradingcodex_service}/static/tradingcodex_web/app.js +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5/tradingcodex_service}/static/tradingcodex_web/workbench.css +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5/tradingcodex_service}/static/vendor/alpine/alpine.min.js +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5/tradingcodex_service}/static/vendor/htmx/htmx.min.js +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/activity.html +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/agent_skills.html +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/agents.html +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/base.html +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/brokers.html +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/dashboard.html +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/fragments/role_inspector.html +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/fragments/starter_prompt.html +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/fragments/topology_canvas.html +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/fragments/workspace_card.html +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/harness.html +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/mcp_router.html +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/orders.html +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/policy.html +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/portfolio.html +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/research.html +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/starter_prompt.html +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/strategies.html +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/urls.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/web.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/wsgi.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/__init__.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/audit/files/.tradingcodex/audit/README.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/audit/files/trading/audit/.gitkeep +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/audit/module.json +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/files/.codex/config.toml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/files/.codex/hooks.json +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/files/.codex/rules/tradingcodex.rules +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/files/.tradingcodex/capabilities.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/files/.tradingcodex/cli.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/files/.tradingcodex/config.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/files/.tradingcodex/policies/policy-bindings.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/files/.tradingcodex/policies/principals.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/files/.tradingcodex/policies/roles.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/files/AGENTS.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/files/pyproject.toml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/files/tcx +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/module.json +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/policies/access-policies.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/policies/restricted-list.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/approval_receipt.schema.json +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/audit_event.schema.json +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/evidence_pack.schema.json +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/execution_result.schema.json +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/fundamental_report.schema.json +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/news_report.schema.json +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/order_ticket.schema.json +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/portfolio_review.schema.json +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/postmortem_report.schema.json +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/research_artifact.schema.json +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/risk_report.schema.json +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/technical_report.schema.json +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/thesis.schema.json +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/valuation.schema.json +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/module.json +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/fixed-subagents/files/.codex/agents/execution-operator.toml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/fixed-subagents/files/.codex/agents/fundamental-analyst.toml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/fixed-subagents/files/.codex/agents/instrument-analyst.toml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/fixed-subagents/files/.codex/agents/macro-analyst.toml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/fixed-subagents/files/.codex/agents/news-analyst.toml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/fixed-subagents/files/.codex/agents/portfolio-manager.toml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/fixed-subagents/files/.codex/agents/risk-manager.toml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/fixed-subagents/files/.codex/agents/technical-analyst.toml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/fixed-subagents/files/.codex/agents/valuation-analyst.toml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/fixed-subagents/files/.tradingcodex/mainagent/head-manager.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/fixed-subagents/files/.tradingcodex/mainagent/skill-change-proposals/.gitkeep +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/fixed-subagents/files/.tradingcodex/mainagent/subagent-registry.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/fixed-subagents/module.json +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/guidance-guardrails/files/.tradingcodex/guidance/guardrails.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/guidance-guardrails/files/.tradingcodex/guidance/task-quality-checklist.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/guidance-guardrails/module.json +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/.tradingcodex/policies/information-barriers.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/.tradingcodex/secrets.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/approvals/.gitkeep +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/market-data/.gitkeep +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/orders/approved/.gitkeep +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/orders/draft/.gitkeep +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/orders/executed/.gitkeep +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/orders/rejected/.gitkeep +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/portfolio/.gitkeep +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/reports/fundamental/.gitkeep +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/reports/instrument/.gitkeep +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/reports/macro/.gitkeep +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/reports/news/.gitkeep +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/reports/policy/.gitkeep +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/reports/portfolio/.gitkeep +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/reports/postmortem/.gitkeep +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/reports/risk/.gitkeep +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/reports/technical/.gitkeep +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/reports/valuation/.gitkeep +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/research/.gitkeep +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/module.json +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/paper-trading/files/.tradingcodex/mcp/adapters/paper-trading.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/paper-trading/module.json +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/postmortem/files/.tradingcodex/workflows/postmortem.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/postmortem/module.json +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.agents/skills/postmortem/SKILL.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.agents/skills/postmortem/agents/openai.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.agents/skills/strategy-creator/SKILL.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.agents/skills/strategy-creator/agents/openai.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-build/SKILL.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-build/agents/openai.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-server/agents/openai.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/SKILL.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/agents/openai.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/execution-operator/execute-paper-order/SKILL.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/execution-operator/execute-paper-order/agents/openai.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/fundamental-analyst/fundamental-analysis/SKILL.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/fundamental-analyst/fundamental-analysis/agents/openai.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/instrument-analyst/instrument-analysis/SKILL.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/instrument-analyst/instrument-analysis/agents/openai.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/macro-analyst/macro-analysis/SKILL.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/macro-analyst/macro-analysis/agents/openai.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/news-analyst/news-analysis/SKILL.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/news-analyst/news-analysis/agents/openai.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/create-order-ticket/SKILL.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/create-order-ticket/agents/openai.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/portfolio-review/SKILL.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/portfolio-review/agents/openai.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/approve-order/SKILL.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/approve-order/agents/openai.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/policy-review/SKILL.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/policy-review/agents/openai.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/review-risk/SKILL.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/review-risk/agents/openai.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/collect-evidence/SKILL.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/collect-evidence/agents/openai.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/external-data-source-gate/SKILL.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/external-data-source-gate/agents/openai.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/technical-analyst/technical-analysis/SKILL.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/technical-analyst/technical-analysis/agents/openai.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/valuation-analyst/valuation-review/SKILL.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/valuation-analyst/valuation-review/agents/openai.yaml +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/module.json +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/stub-execution/files/.tradingcodex/mcp/adapters/stub-execution.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/stub-execution/module.json +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/adapters/live-adapter.contract.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/enforcer/README.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/gateway/README.md +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/server.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/smoke-call.py +0 -0
- {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/tradingcodex-mcp/module.json +0 -0
|
@@ -9,5 +9,5 @@ recursive-include docs *
|
|
|
9
9
|
recursive-include workspace_templates *
|
|
10
10
|
recursive-include workspace_templates .*
|
|
11
11
|
recursive-include tradingcodex_service/templates *
|
|
12
|
-
recursive-include static *
|
|
12
|
+
recursive-include tradingcodex_service/static *
|
|
13
13
|
global-exclude *.py[cod]
|
|
@@ -140,7 +140,7 @@ python3.11 -m venv /tmp/tcx-testpypi
|
|
|
140
140
|
/tmp/tcx-testpypi/bin/pip install \
|
|
141
141
|
--index-url https://test.pypi.org/simple/ \
|
|
142
142
|
--extra-index-url https://pypi.org/simple/ \
|
|
143
|
-
tradingcodex==0.2.
|
|
143
|
+
tradingcodex==0.2.5
|
|
144
144
|
rm -rf /tmp/tcx-testpypi-smoke
|
|
145
145
|
mkdir -p /tmp/tcx-testpypi-smoke
|
|
146
146
|
cd /tmp/tcx-testpypi-smoke
|
|
@@ -169,7 +169,7 @@ After the PyPI workflow completes:
|
|
|
169
169
|
|
|
170
170
|
```bash
|
|
171
171
|
python3.11 -m venv /tmp/tcx-pypi
|
|
172
|
-
/tmp/tcx-pypi/bin/pip install tradingcodex==0.2.
|
|
172
|
+
/tmp/tcx-pypi/bin/pip install tradingcodex==0.2.5
|
|
173
173
|
rm -rf /tmp/tcx-pypi-smoke
|
|
174
174
|
mkdir -p /tmp/tcx-pypi-smoke
|
|
175
175
|
cd /tmp/tcx-pypi-smoke
|
|
@@ -251,7 +251,9 @@ Use PEP 440 versions:
|
|
|
251
251
|
ticket isolation, workspace-scoped transition audit, and startup/status fixes
|
|
252
252
|
- `0.2.4` for the operate/build/execution plane rewrite, compact startup
|
|
253
253
|
context, build-mode updates, and connector scaffold workflow
|
|
254
|
-
-
|
|
254
|
+
- `0.2.5` for packaged web static assets and startup service mismatch notices
|
|
255
|
+
reaching head-manager compact context
|
|
256
|
+
- later patch releases for compatible fixes after `0.2.5`
|
|
255
257
|
- pre-releases such as `0.3.0a1`, `0.3.0b1`, or `0.3.0rc1` when preparing
|
|
256
258
|
the next minor contract
|
|
257
259
|
|
|
@@ -308,6 +308,13 @@ when explicitly asked. If project MCP config was created or changed, the user
|
|
|
308
308
|
must fully quit and restart Codex and start a new thread because Codex may not
|
|
309
309
|
hot reload project MCP config.
|
|
310
310
|
|
|
311
|
+
Startup context preserves incompatible service detail from `./tcx service
|
|
312
|
+
status`, including `service_issue`, service/package versions, DB paths, and the
|
|
313
|
+
recorded next action. If the issue is `version_mismatch`, `db_mismatch`, or
|
|
314
|
+
`port_occupied`, `head-manager` must mention the startup notice in its first
|
|
315
|
+
user-facing response and avoid presenting the dashboard as ready until the
|
|
316
|
+
recovery path is handled.
|
|
317
|
+
|
|
311
318
|
Startup health may compare the generated workspace version in
|
|
312
319
|
`.tradingcodex/generated/module-lock.json` with the installed/running `tcx`
|
|
313
320
|
package version and the latest known TradingCodex release. If update is needed
|
|
@@ -352,7 +352,7 @@ and service-layer policy.
|
|
|
352
352
|
## Hooks Are Guidance
|
|
353
353
|
|
|
354
354
|
- `UserPromptSubmit` handles prompt classification, secret warnings, direct-answer prevention context, and duplicate marker management.
|
|
355
|
-
- `SessionStart` writes compact TradingCodex mode, permission, update, server/MCP, and routing diagnostics for `head-manager`; startup recovery and dashboard URL guidance stay in `$tcx-server`, while self-update and connector implementation stay in `$tcx-build`.
|
|
355
|
+
- `SessionStart` writes compact TradingCodex mode, permission, update, server/MCP, and routing diagnostics for `head-manager`; incompatible service details such as version mismatch, DB mismatch, and occupied ports must survive into compact context so `head-manager` can mention the startup notice before claiming dashboard readiness. Startup recovery and dashboard URL guidance stay in `$tcx-server`, while self-update and connector implementation stay in `$tcx-build`.
|
|
356
356
|
- Official `UserPromptSubmit` matchers are ignored, so classification happens inside the hook script.
|
|
357
357
|
- Hooks use command type only and do not rely on ordering or concurrency between hooks.
|
|
358
358
|
- Project-local hooks load only in trusted projects and may be disabled when `features.hooks=false`.
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "tradingcodex"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.5"
|
|
8
8
|
description = "Codex-native trading harness with a Django service plane and approved action boundary."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11,<3.15"
|
|
@@ -50,6 +50,7 @@ include-package-data = true
|
|
|
50
50
|
include = ["tradingcodex_cli*", "tradingcodex_service*", "apps*", "workspace_templates*"]
|
|
51
51
|
|
|
52
52
|
[tool.setuptools.package-data]
|
|
53
|
+
tradingcodex_service = ["templates/**/*", "static/**/*"]
|
|
53
54
|
workspace_templates = ["**/*", "**/.*", "**/.*/**/*"]
|
|
54
55
|
|
|
55
56
|
[tool.setuptools.exclude-package-data]
|
|
@@ -4,10 +4,12 @@ import importlib.util
|
|
|
4
4
|
import json
|
|
5
5
|
import os
|
|
6
6
|
import re
|
|
7
|
+
import shutil
|
|
7
8
|
import sqlite3
|
|
8
9
|
import subprocess
|
|
9
10
|
import sys
|
|
10
11
|
import tomllib
|
|
12
|
+
import zipfile
|
|
11
13
|
from pathlib import Path
|
|
12
14
|
|
|
13
15
|
import pytest
|
|
@@ -28,6 +30,7 @@ from tradingcodex_service.application.components import (
|
|
|
28
30
|
list_components_by_tag,
|
|
29
31
|
list_harness_components,
|
|
30
32
|
)
|
|
33
|
+
from tradingcodex_service.application.artifact_quality import estimate_tokens
|
|
31
34
|
from tradingcodex_service.application.harness import (
|
|
32
35
|
build_compact_dispatch_context,
|
|
33
36
|
build_subagent_starter_prompt,
|
|
@@ -246,6 +249,44 @@ def test_service_status_cli_supports_plain_and_json(monkeypatch, tmp_path: Path,
|
|
|
246
249
|
assert payload["issue"] == "version_mismatch"
|
|
247
250
|
|
|
248
251
|
|
|
252
|
+
def test_startup_status_preserves_service_mismatch_details(monkeypatch, tmp_path: Path) -> None:
|
|
253
|
+
from tradingcodex_cli import startup_status
|
|
254
|
+
|
|
255
|
+
workspace = make_workspace(tmp_path)
|
|
256
|
+
old_db = tmp_path / "old.sqlite3"
|
|
257
|
+
current_db = tmp_path / "current.sqlite3"
|
|
258
|
+
service_detail = {
|
|
259
|
+
"addr": "127.0.0.1:48267",
|
|
260
|
+
"url": "http://127.0.0.1:48267/",
|
|
261
|
+
"reachable": True,
|
|
262
|
+
"compatible": False,
|
|
263
|
+
"service": "tradingcodex",
|
|
264
|
+
"version": "0.2.1",
|
|
265
|
+
"package_version": TRADINGCODEX_VERSION,
|
|
266
|
+
"db_path": str(old_db),
|
|
267
|
+
"expected_db_path": str(current_db),
|
|
268
|
+
"issue": "version_mismatch",
|
|
269
|
+
"next_action": "Stop the older TradingCodex service or choose a free service address, then restart Codex if MCP uses the default address.",
|
|
270
|
+
}
|
|
271
|
+
monkeypatch.setattr(startup_status, "inspect_service_status", lambda addr: service_detail)
|
|
272
|
+
monkeypatch.setattr(
|
|
273
|
+
startup_status,
|
|
274
|
+
"_read_health",
|
|
275
|
+
lambda url: {"service": "tradingcodex", "version": "0.2.1", "db_path": str(old_db)},
|
|
276
|
+
)
|
|
277
|
+
|
|
278
|
+
status = startup_status.build_server_status(workspace)
|
|
279
|
+
|
|
280
|
+
assert status["service_status"] == "incompatible"
|
|
281
|
+
assert status["service_detail"]["issue"] == "version_mismatch"
|
|
282
|
+
assert status["service_detail"]["version"] == "0.2.1"
|
|
283
|
+
assert status["service_detail"]["package_version"] == TRADINGCODEX_VERSION
|
|
284
|
+
assert "service=0.2.1" in status["startup_notice"]
|
|
285
|
+
assert f"package={TRADINGCODEX_VERSION}" in status["startup_notice"]
|
|
286
|
+
assert status["recommended_action"] == service_detail["next_action"]
|
|
287
|
+
assert status["allowed_next_actions"][0] == service_detail["next_action"]
|
|
288
|
+
|
|
289
|
+
|
|
249
290
|
def test_manage_runserver_uses_fixed_port_and_skips_duplicate(monkeypatch, capsys) -> None:
|
|
250
291
|
from tradingcodex_cli import service_autostart
|
|
251
292
|
|
|
@@ -480,6 +521,30 @@ def test_workspace_template_module_contracts(tmp_path: Path) -> None:
|
|
|
480
521
|
assert not (workspace / ".tradingcodex" / "state" / "tradingcodex.sqlite3").exists()
|
|
481
522
|
|
|
482
523
|
|
|
524
|
+
def test_package_wheel_includes_web_static_assets(tmp_path: Path) -> None:
|
|
525
|
+
source = tmp_path / "source"
|
|
526
|
+
wheel_dir = tmp_path / "wheel"
|
|
527
|
+
shutil.copytree(
|
|
528
|
+
ROOT,
|
|
529
|
+
source,
|
|
530
|
+
ignore=shutil.ignore_patterns(".git", ".pytest_cache", "__pycache__", "*.pyc", "dist", "build", "*.egg-info"),
|
|
531
|
+
)
|
|
532
|
+
wheel_dir.mkdir()
|
|
533
|
+
|
|
534
|
+
run([sys.executable, "-m", "pip", "wheel", ".", "--no-deps", "--wheel-dir", str(wheel_dir)], source)
|
|
535
|
+
|
|
536
|
+
wheels = list(wheel_dir.glob("tradingcodex-*.whl"))
|
|
537
|
+
assert len(wheels) == 1
|
|
538
|
+
with zipfile.ZipFile(wheels[0]) as wheel:
|
|
539
|
+
names = set(wheel.namelist())
|
|
540
|
+
assert "tradingcodex_service/static/tradingcodex_web/app.css" in names
|
|
541
|
+
assert "tradingcodex_service/static/tradingcodex_web/workbench.css" in names
|
|
542
|
+
assert "tradingcodex_service/static/tradingcodex_web/app.js" in names
|
|
543
|
+
assert "tradingcodex_service/static/vendor/htmx/htmx.min.js" in names
|
|
544
|
+
assert "tradingcodex_service/static/vendor/alpine/alpine.min.js" in names
|
|
545
|
+
assert "tradingcodex_service/static/tradingcodex_admin/favicon.svg" in names
|
|
546
|
+
|
|
547
|
+
|
|
483
548
|
def test_investment_request_detection_avoids_repository_work() -> None:
|
|
484
549
|
assert is_investment_workflow_request("Analyze NVDA")
|
|
485
550
|
assert is_investment_workflow_request("Analyze Apple stock")
|
|
@@ -799,6 +864,7 @@ def test_repo_skill_templates_keep_instruction_boundary() -> None:
|
|
|
799
864
|
server_skill = (skill_root / "tcx-server" / "SKILL.md").read_text(encoding="utf-8")
|
|
800
865
|
assert "tcx service status" in server_skill
|
|
801
866
|
assert "tcx update status --json" in server_skill
|
|
867
|
+
assert "service_issue=version_mismatch" in server_skill
|
|
802
868
|
assert "Do not run `tcx update`" in server_skill
|
|
803
869
|
build_skill = (skill_root / "tcx-build" / "SKILL.md").read_text(encoding="utf-8")
|
|
804
870
|
assert "Build mode never enables `live_order`" in build_skill
|
|
@@ -920,6 +986,11 @@ def test_python_generator_creates_workspace_contract(tmp_path: Path) -> None:
|
|
|
920
986
|
assert session_start_payload["mode_status"]["mode"] == "operate"
|
|
921
987
|
assert session_start_payload["permission_status"]["codex_permission"] == "restricted"
|
|
922
988
|
assert session_start_payload["update_status"]["can_self_update"] is False
|
|
989
|
+
assert "service_issue" in session_start_payload["server_status"]
|
|
990
|
+
assert "startup_notice" in session_start_payload["server_status"]
|
|
991
|
+
assert "next_action" in session_start_payload["server_status"]
|
|
992
|
+
assert "service_detail" not in session_start_payload["server_status"]
|
|
993
|
+
assert estimate_tokens(json.dumps(session_start_payload, ensure_ascii=False)) <= 800
|
|
923
994
|
assert not (workspace / ".tradingcodex" / "state" / "tradingcodex.sqlite3").exists()
|
|
924
995
|
assert not (workspace / ".tradingcodex" / "state" / "paper-portfolio.json").exists()
|
|
925
996
|
db_path = run(["./tcx", "db", "path"], workspace).stdout.strip()
|
|
@@ -1001,6 +1072,7 @@ def test_python_generator_creates_workspace_contract(tmp_path: Path) -> None:
|
|
|
1001
1072
|
assert "tradingcodex-session-context" in head_manager_instructions
|
|
1002
1073
|
assert ".tradingcodex/mainagent/server-status.json" in head_manager_instructions
|
|
1003
1074
|
assert "Do not open the dashboard unless the user asks" in head_manager_instructions
|
|
1075
|
+
assert "server_status.service_issue" in head_manager_instructions
|
|
1004
1076
|
assert "update_status.can_self_update=true" in head_manager_instructions
|
|
1005
1077
|
assert "fully quit and restart Codex" in head_manager_instructions
|
|
1006
1078
|
assert "not an autonomous trading bot" not in head_manager_instructions
|
|
@@ -89,12 +89,6 @@ docs/roles-skills-and-workflows.md
|
|
|
89
89
|
docs/safety-policy-and-execution.md
|
|
90
90
|
docs/system-architecture.md
|
|
91
91
|
docs/validation-and-test-plan.md
|
|
92
|
-
static/tradingcodex_admin/favicon.svg
|
|
93
|
-
static/tradingcodex_web/app.css
|
|
94
|
-
static/tradingcodex_web/app.js
|
|
95
|
-
static/tradingcodex_web/workbench.css
|
|
96
|
-
static/vendor/alpine/alpine.min.js
|
|
97
|
-
static/vendor/htmx/htmx.min.js
|
|
98
92
|
tests/test_broker_center_prd.py
|
|
99
93
|
tests/test_e2e_user_scenarios.py
|
|
100
94
|
tests/test_python_migration.py
|
|
@@ -153,6 +147,12 @@ tradingcodex_service/application/portfolio.py
|
|
|
153
147
|
tradingcodex_service/application/research.py
|
|
154
148
|
tradingcodex_service/application/runtime.py
|
|
155
149
|
tradingcodex_service/application/runtime_mode.py
|
|
150
|
+
tradingcodex_service/static/tradingcodex_admin/favicon.svg
|
|
151
|
+
tradingcodex_service/static/tradingcodex_web/app.css
|
|
152
|
+
tradingcodex_service/static/tradingcodex_web/app.js
|
|
153
|
+
tradingcodex_service/static/tradingcodex_web/workbench.css
|
|
154
|
+
tradingcodex_service/static/vendor/alpine/alpine.min.js
|
|
155
|
+
tradingcodex_service/static/vendor/htmx/htmx.min.js
|
|
156
156
|
tradingcodex_service/templates/web/activity.html
|
|
157
157
|
tradingcodex_service/templates/web/agent_skills.html
|
|
158
158
|
tradingcodex_service/templates/web/agents.html
|
|
@@ -10,7 +10,7 @@ from datetime import datetime, timezone
|
|
|
10
10
|
from pathlib import Path
|
|
11
11
|
from typing import Any
|
|
12
12
|
|
|
13
|
-
from tradingcodex_cli.service_autostart import DEFAULT_SERVICE_ADDR, service_http_url
|
|
13
|
+
from tradingcodex_cli.service_autostart import DEFAULT_SERVICE_ADDR, service_http_url, service_status as inspect_service_status
|
|
14
14
|
from tradingcodex_service.application.runtime import tradingcodex_db_path, tradingcodex_home
|
|
15
15
|
from tradingcodex_service.application.runtime_mode import get_runtime_mode_status
|
|
16
16
|
from tradingcodex_service.version import TRADINGCODEX_VERSION
|
|
@@ -28,25 +28,26 @@ def build_server_status(workspace_root: Path | str, addr: str | None = None) ->
|
|
|
28
28
|
permission_status = detect_codex_permission_status(root)
|
|
29
29
|
mode_status = get_runtime_mode_status(root, full_access_detected=permission_status["full_access_detected"])
|
|
30
30
|
update_status = build_update_status(root, permission_status=permission_status, mode_status=mode_status)
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
service_status = "ok" if _is_compatible_health(health) else "incompatible"
|
|
31
|
+
service_detail = inspect_service_status(service_addr)
|
|
32
|
+
health = _read_health(health_url) if service_detail.get("reachable") else {}
|
|
33
|
+
service_state = _service_state_from_detail(service_detail)
|
|
35
34
|
mcp_config_present = _is_project_mcp_config_present(root)
|
|
36
35
|
restart_codex_required = not mcp_config_present
|
|
37
36
|
if restart_codex_required:
|
|
38
37
|
recommended_action = "Run ./tcx update or ./tcx attach ., then fully quit and restart Codex and start a new thread."
|
|
39
|
-
elif
|
|
38
|
+
elif service_state == "ok":
|
|
40
39
|
recommended_action = f"Open TradingCodex dashboard at {dashboard_url}"
|
|
41
|
-
elif
|
|
42
|
-
recommended_action = "Resolve the TradingCodex service
|
|
40
|
+
elif service_state == "incompatible":
|
|
41
|
+
recommended_action = service_detail.get("next_action") or "Resolve the TradingCodex service mismatch before using the dashboard."
|
|
43
42
|
else:
|
|
44
|
-
recommended_action = "./tcx service ensure"
|
|
43
|
+
recommended_action = service_detail.get("next_action") or "./tcx service ensure"
|
|
44
|
+
startup_notice = build_startup_notice(service_detail=service_detail, service_status=service_state)
|
|
45
45
|
allowed_next_actions = build_allowed_next_actions(
|
|
46
46
|
mode_status=mode_status,
|
|
47
47
|
permission_status=permission_status,
|
|
48
48
|
update_status=update_status,
|
|
49
|
-
service_status=
|
|
49
|
+
service_status=service_state,
|
|
50
|
+
service_detail=service_detail,
|
|
50
51
|
)
|
|
51
52
|
return {
|
|
52
53
|
"marker": "tradingcodex-session-context",
|
|
@@ -54,8 +55,10 @@ def build_server_status(workspace_root: Path | str, addr: str | None = None) ->
|
|
|
54
55
|
"service_addr": service_addr,
|
|
55
56
|
"dashboard_url": dashboard_url,
|
|
56
57
|
"health_url": health_url,
|
|
57
|
-
"service_status":
|
|
58
|
+
"service_status": service_state,
|
|
59
|
+
"service_detail": service_detail,
|
|
58
60
|
"service_health": health,
|
|
61
|
+
"startup_notice": startup_notice,
|
|
59
62
|
"mcp_config_present": mcp_config_present,
|
|
60
63
|
"restart_codex_required": restart_codex_required,
|
|
61
64
|
"permission_status": permission_status,
|
|
@@ -79,7 +82,16 @@ def fallback_server_status(workspace_root: Path | str, exc: Exception, addr: str
|
|
|
79
82
|
"dashboard_url": dashboard_url,
|
|
80
83
|
"health_url": f"{dashboard_url.rstrip('/')}/api/health",
|
|
81
84
|
"service_status": "unknown",
|
|
85
|
+
"service_detail": {
|
|
86
|
+
"addr": service_addr,
|
|
87
|
+
"url": dashboard_url,
|
|
88
|
+
"reachable": False,
|
|
89
|
+
"compatible": False,
|
|
90
|
+
"issue": "unknown",
|
|
91
|
+
"next_action": "./tcx doctor --layer service",
|
|
92
|
+
},
|
|
82
93
|
"service_health": {},
|
|
94
|
+
"startup_notice": f"TradingCodex startup status check failed: {exc}",
|
|
83
95
|
"mcp_config_present": _is_project_mcp_config_present(root),
|
|
84
96
|
"restart_codex_required": False,
|
|
85
97
|
"permission_status": permission_status,
|
|
@@ -256,10 +268,13 @@ def build_allowed_next_actions(
|
|
|
256
268
|
permission_status: dict[str, Any],
|
|
257
269
|
update_status: dict[str, Any],
|
|
258
270
|
service_status: str,
|
|
271
|
+
service_detail: dict[str, Any] | None = None,
|
|
259
272
|
) -> list[str]:
|
|
260
273
|
actions: list[str] = []
|
|
261
274
|
if service_status != "ok":
|
|
262
|
-
|
|
275
|
+
service_detail = service_detail or {}
|
|
276
|
+
next_action = str(service_detail.get("next_action") or "").strip()
|
|
277
|
+
actions.append(next_action or "./tcx service ensure")
|
|
263
278
|
if update_status.get("update_available"):
|
|
264
279
|
if update_status.get("can_self_update"):
|
|
265
280
|
actions.append(f"On explicit user request, run {update_status['command']} and then stop for Codex restart")
|
|
@@ -275,6 +290,35 @@ def build_allowed_next_actions(
|
|
|
275
290
|
return actions
|
|
276
291
|
|
|
277
292
|
|
|
293
|
+
def _service_state_from_detail(service_detail: dict[str, Any]) -> str:
|
|
294
|
+
if service_detail.get("compatible"):
|
|
295
|
+
return "ok"
|
|
296
|
+
if service_detail.get("reachable"):
|
|
297
|
+
return "incompatible"
|
|
298
|
+
return "not_running_or_unreachable"
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
def build_startup_notice(*, service_detail: dict[str, Any], service_status: str) -> str:
|
|
302
|
+
issue = str(service_detail.get("issue") or "").strip()
|
|
303
|
+
if service_status == "ok" or not issue:
|
|
304
|
+
return ""
|
|
305
|
+
next_action = str(service_detail.get("next_action") or "").strip()
|
|
306
|
+
if issue == "version_mismatch":
|
|
307
|
+
service_version = service_detail.get("version") or "unknown"
|
|
308
|
+
package_version = service_detail.get("package_version") or TRADINGCODEX_VERSION
|
|
309
|
+
return f"TradingCodex service version mismatch: service={service_version} package={package_version}. {next_action}"
|
|
310
|
+
if issue == "db_mismatch":
|
|
311
|
+
service_db = service_detail.get("db_path") or "unknown"
|
|
312
|
+
expected_db = service_detail.get("expected_db_path") or str(tradingcodex_db_path())
|
|
313
|
+
return f"TradingCodex service DB mismatch: service={service_db} package={expected_db}. {next_action}"
|
|
314
|
+
if issue == "port_occupied":
|
|
315
|
+
addr = service_detail.get("addr") or DEFAULT_SERVICE_ADDR
|
|
316
|
+
return f"TradingCodex service port is occupied by a non-TradingCodex process at {addr}. {next_action}"
|
|
317
|
+
if issue == "not_running":
|
|
318
|
+
return ""
|
|
319
|
+
return next_action
|
|
320
|
+
|
|
321
|
+
|
|
278
322
|
def latest_release_info() -> dict[str, str]:
|
|
279
323
|
override = os.environ.get("TRADINGCODEX_LATEST_RELEASE_VERSION", "").strip()
|
|
280
324
|
if override:
|
|
@@ -85,7 +85,7 @@ HARNESS_COMPONENTS: tuple[HarnessComponent, ...] = (
|
|
|
85
85
|
HarnessComponent(
|
|
86
86
|
id="runtime-mode-and-build-plane",
|
|
87
87
|
label="Runtime Mode And Build Plane",
|
|
88
|
-
summary="Separates operate, build, and execution planes; gates self-update and connector implementation behind full access plus explicit build mode.",
|
|
88
|
+
summary="Separates operate, build, and execution planes; preserves startup service/update mismatch guidance; gates self-update and connector implementation behind full access plus explicit build mode.",
|
|
89
89
|
status="core",
|
|
90
90
|
tags=("guardrail.guidance", "guardrail.enforcement", "improvement.workflow_quality"),
|
|
91
91
|
surfaces={
|
|
@@ -99,7 +99,7 @@ HARNESS_COMPONENTS: tuple[HarnessComponent, ...] = (
|
|
|
99
99
|
},
|
|
100
100
|
depends_on=("responsibility-boundary-contract", "broker-center", "execution-boundary"),
|
|
101
101
|
owned_capabilities=("runtime.mode", "build.self_update", "build.connector_scaffold"),
|
|
102
|
-
validation=("pytest", "generated workspace contract", "Codex smoke checks"),
|
|
102
|
+
validation=("pytest", "startup service mismatch diagnostics", "generated workspace contract", "Codex smoke checks"),
|
|
103
103
|
),
|
|
104
104
|
HarnessComponent(
|
|
105
105
|
id="artifact-quality-contract",
|
|
@@ -3,7 +3,8 @@ from __future__ import annotations
|
|
|
3
3
|
import os
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
SERVICE_DIR = Path(__file__).resolve().parent
|
|
7
|
+
BASE_DIR = SERVICE_DIR.parent
|
|
7
8
|
|
|
8
9
|
|
|
9
10
|
def default_db_name() -> str:
|
|
@@ -67,7 +68,7 @@ TIME_ZONE = "UTC"
|
|
|
67
68
|
USE_I18N = True
|
|
68
69
|
USE_TZ = True
|
|
69
70
|
STATIC_URL = "static/"
|
|
70
|
-
STATICFILES_DIRS = [
|
|
71
|
+
STATICFILES_DIRS = [SERVICE_DIR / "static"]
|
|
71
72
|
|
|
72
73
|
TEMPLATES = [
|
|
73
74
|
{
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
TRADINGCODEX_VERSION = "0.2.5"
|
|
@@ -66,6 +66,7 @@ def session_start(payload: dict) -> None:
|
|
|
66
66
|
server_status = fallback_server_status(ROOT, exc)
|
|
67
67
|
append_hook_audit({"event": "session-start", "warning": "server status check failed", "error": str(exc)})
|
|
68
68
|
update_status = server_status["update_status"]
|
|
69
|
+
service_detail = server_status.get("service_detail") or {}
|
|
69
70
|
readiness = {
|
|
70
71
|
"marker": "tradingcodex-session-context",
|
|
71
72
|
"mode_status": server_status["mode_status"],
|
|
@@ -83,6 +84,13 @@ def session_start(payload: dict) -> None:
|
|
|
83
84
|
"status_path": ".tradingcodex/mainagent/server-status.json",
|
|
84
85
|
"dashboard_url": server_status["dashboard_url"],
|
|
85
86
|
"service_status": server_status["service_status"],
|
|
87
|
+
"service_issue": service_detail.get("issue", ""),
|
|
88
|
+
"service_version": service_detail.get("version", ""),
|
|
89
|
+
"package_version": service_detail.get("package_version", ""),
|
|
90
|
+
"service_db_path": service_detail.get("db_path", ""),
|
|
91
|
+
"expected_db_path": service_detail.get("expected_db_path", ""),
|
|
92
|
+
"next_action": service_detail.get("next_action", ""),
|
|
93
|
+
"startup_notice": server_status.get("startup_notice", ""),
|
|
86
94
|
"restart_codex_required": server_status["restart_codex_required"],
|
|
87
95
|
"recommended_action": server_status["recommended_action"],
|
|
88
96
|
},
|
|
@@ -25,6 +25,12 @@ Use only these startup fields unless more detail is needed:
|
|
|
25
25
|
|
|
26
26
|
If the status file is missing, stale, or unhealthy, use `$tcx-server`. Do not open the dashboard unless the user asks.
|
|
27
27
|
|
|
28
|
+
If `server_status.service_issue` is `version_mismatch`, `db_mismatch`, or
|
|
29
|
+
`port_occupied`, mention the startup notice in your first user-facing response
|
|
30
|
+
before claiming the dashboard is ready. Give `server_status.next_action` or
|
|
31
|
+
`server_status.recommended_action` as the recovery path. Do not proceed as if
|
|
32
|
+
the old service is compatible.
|
|
33
|
+
|
|
28
34
|
If `update_status.update_available=true`:
|
|
29
35
|
|
|
30
36
|
- In restricted permission or operate mode, explain that self-update requires Codex full access plus `tcx mode set build --reason <reason>`, or give `update_status.command` for terminal use.
|
|
@@ -14,6 +14,7 @@ Use this skill for operate-plane TradingCodex status checks, service recovery, d
|
|
|
14
14
|
3. Use `./tcx mode status` and `./tcx update status --json` for mode/update posture.
|
|
15
15
|
4. Use read-only connector commands and MCP tools for broker profile, capability, instrument constraints, sync state, and order status.
|
|
16
16
|
5. If update or build work is requested but build is not enabled, explain that Codex full access plus `tcx mode set build --reason <reason>` is required, or give the terminal command.
|
|
17
|
+
6. If startup context reports `service_issue=version_mismatch`, `db_mismatch`, or `port_occupied`, report the issue with service/package versions or DB paths when present, and give the recorded next action before opening or recommending the dashboard.
|
|
17
18
|
|
|
18
19
|
## Hard Stops
|
|
19
20
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
TRADINGCODEX_VERSION = "0.2.4"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|