trade-compass-agent 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- trade_compass_agent-0.2.0/.cursor/rules/skill-design.mdc +72 -0
- trade_compass_agent-0.2.0/.env.example +95 -0
- trade_compass_agent-0.2.0/.github/CODEOWNERS +8 -0
- trade_compass_agent-0.2.0/.github/ISSUE_TEMPLATE/bug.yml +59 -0
- trade_compass_agent-0.2.0/.github/ISSUE_TEMPLATE/config.yml +8 -0
- trade_compass_agent-0.2.0/.github/ISSUE_TEMPLATE/feature.yml +35 -0
- trade_compass_agent-0.2.0/.github/dependabot.yml +38 -0
- trade_compass_agent-0.2.0/.github/pull_request_template.md +26 -0
- trade_compass_agent-0.2.0/.github/release.yml +23 -0
- trade_compass_agent-0.2.0/.github/workflows/ci.yml +107 -0
- trade_compass_agent-0.2.0/.github/workflows/release.yml +182 -0
- trade_compass_agent-0.2.0/.github/workflows/security.yml +61 -0
- trade_compass_agent-0.2.0/.github/workflows/test-publish.yml +107 -0
- trade_compass_agent-0.2.0/.gitignore +22 -0
- trade_compass_agent-0.2.0/.nvmrc +1 -0
- trade_compass_agent-0.2.0/.trade-compass/mcp.json.example +22 -0
- trade_compass_agent-0.2.0/.trade-compass/skills/catalyst-calendar-cn/SKILL.md +65 -0
- trade_compass_agent-0.2.0/.trade-compass/skills/idea-generation-cn/SKILL.md +78 -0
- trade_compass_agent-0.2.0/.trade-compass/skills/intraday-tech/SKILL.md +38 -0
- trade_compass_agent-0.2.0/.trade-compass/skills/investment-masters/SKILL.md +150 -0
- trade_compass_agent-0.2.0/.trade-compass/skills/investment-masters/references/buffett.md +400 -0
- trade_compass_agent-0.2.0/.trade-compass/skills/investment-masters/references/cross-insights.md +141 -0
- trade_compass_agent-0.2.0/.trade-compass/skills/investment-masters/references/dalio.md +386 -0
- trade_compass_agent-0.2.0/.trade-compass/skills/investment-masters/references/lynch.md +378 -0
- trade_compass_agent-0.2.0/.trade-compass/skills/investment-masters/references/marks.md +298 -0
- trade_compass_agent-0.2.0/.trade-compass/skills/investment-masters/references/munger.md +444 -0
- trade_compass_agent-0.2.0/AGENTS.md +168 -0
- trade_compass_agent-0.2.0/CHANGELOG.md +135 -0
- trade_compass_agent-0.2.0/CLAUDE.md +16 -0
- trade_compass_agent-0.2.0/CODE_OF_CONDUCT.md +44 -0
- trade_compass_agent-0.2.0/CONTRIBUTING.md +77 -0
- trade_compass_agent-0.2.0/LICENSE +21 -0
- trade_compass_agent-0.2.0/PKG-INFO +329 -0
- trade_compass_agent-0.2.0/PRIVACY.md +73 -0
- trade_compass_agent-0.2.0/README.en.md +256 -0
- trade_compass_agent-0.2.0/README.md +251 -0
- trade_compass_agent-0.2.0/README.zh-CN.md +5 -0
- trade_compass_agent-0.2.0/SECURITY.md +24 -0
- trade_compass_agent-0.2.0/SUPPORT.md +19 -0
- trade_compass_agent-0.2.0/THIRD_PARTY_NOTICES.md +32 -0
- trade_compass_agent-0.2.0/apps/web/.gitignore +6 -0
- trade_compass_agent-0.2.0/apps/web/.prettierrc +8 -0
- trade_compass_agent-0.2.0/apps/web/README.md +18 -0
- trade_compass_agent-0.2.0/apps/web/components.json +21 -0
- trade_compass_agent-0.2.0/apps/web/index.html +15 -0
- trade_compass_agent-0.2.0/apps/web/package.json +41 -0
- trade_compass_agent-0.2.0/apps/web/postcss.config.js +6 -0
- trade_compass_agent-0.2.0/apps/web/public/favicon.ico +0 -0
- trade_compass_agent-0.2.0/apps/web/public/favicon.svg +43 -0
- trade_compass_agent-0.2.0/apps/web/src/components/agent/ActivityTimeline.tsx +100 -0
- trade_compass_agent-0.2.0/apps/web/src/components/agent/ChatMessage.tsx +151 -0
- trade_compass_agent-0.2.0/apps/web/src/components/agent/SectionCard.tsx +91 -0
- trade_compass_agent-0.2.0/apps/web/src/components/agent/SessionSidebar.tsx +340 -0
- trade_compass_agent-0.2.0/apps/web/src/components/agent/SkillSlashMenu.tsx +155 -0
- trade_compass_agent-0.2.0/apps/web/src/components/agent/ToolTrace.tsx +78 -0
- trade_compass_agent-0.2.0/apps/web/src/components/charts/KlineMiniChart.tsx +399 -0
- trade_compass_agent-0.2.0/apps/web/src/components/layout/AppLayout.tsx +63 -0
- trade_compass_agent-0.2.0/apps/web/src/components/ui/MarkdownRenderer.tsx +6 -0
- trade_compass_agent-0.2.0/apps/web/src/components/ui/badge.tsx +34 -0
- trade_compass_agent-0.2.0/apps/web/src/components/ui/button.tsx +51 -0
- trade_compass_agent-0.2.0/apps/web/src/components/ui/card.tsx +55 -0
- trade_compass_agent-0.2.0/apps/web/src/components/ui/input.tsx +22 -0
- trade_compass_agent-0.2.0/apps/web/src/components/ui/new-badge.tsx +50 -0
- trade_compass_agent-0.2.0/apps/web/src/components/ui/skeleton.tsx +14 -0
- trade_compass_agent-0.2.0/apps/web/src/components/ui/table.tsx +67 -0
- trade_compass_agent-0.2.0/apps/web/src/components/ui/tabs.tsx +80 -0
- trade_compass_agent-0.2.0/apps/web/src/hooks/useAgentSSE.ts +176 -0
- trade_compass_agent-0.2.0/apps/web/src/index.css +51 -0
- trade_compass_agent-0.2.0/apps/web/src/lib/activity-labels.ts +78 -0
- trade_compass_agent-0.2.0/apps/web/src/lib/activity-trace.test.ts +20 -0
- trade_compass_agent-0.2.0/apps/web/src/lib/activity-trace.ts +130 -0
- trade_compass_agent-0.2.0/apps/web/src/lib/agent-api.ts +198 -0
- trade_compass_agent-0.2.0/apps/web/src/lib/agent-session-load.test.ts +55 -0
- trade_compass_agent-0.2.0/apps/web/src/lib/agent-session-load.ts +29 -0
- trade_compass_agent-0.2.0/apps/web/src/lib/agent-session-storage.test.ts +34 -0
- trade_compass_agent-0.2.0/apps/web/src/lib/agent-session-storage.ts +46 -0
- trade_compass_agent-0.2.0/apps/web/src/lib/freshness.test.ts +25 -0
- trade_compass_agent-0.2.0/apps/web/src/lib/freshness.ts +13 -0
- trade_compass_agent-0.2.0/apps/web/src/lib/sections.ts +34 -0
- trade_compass_agent-0.2.0/apps/web/src/lib/turn-outcome.ts +100 -0
- trade_compass_agent-0.2.0/apps/web/src/lib/types.ts +377 -0
- trade_compass_agent-0.2.0/apps/web/src/lib/utils.ts +6 -0
- trade_compass_agent-0.2.0/apps/web/src/lib/workbench-api.ts +374 -0
- trade_compass_agent-0.2.0/apps/web/src/main.tsx +25 -0
- trade_compass_agent-0.2.0/apps/web/src/router.tsx +62 -0
- trade_compass_agent-0.2.0/apps/web/src/routes/AgentPage.tsx +1201 -0
- trade_compass_agent-0.2.0/apps/web/src/routes/AuditPage.tsx +192 -0
- trade_compass_agent-0.2.0/apps/web/src/routes/JobsPage.tsx +987 -0
- trade_compass_agent-0.2.0/apps/web/src/routes/MemoryPage.tsx +469 -0
- trade_compass_agent-0.2.0/apps/web/src/routes/PortfolioPage.tsx +645 -0
- trade_compass_agent-0.2.0/apps/web/src/routes/RulesPage.tsx +211 -0
- trade_compass_agent-0.2.0/apps/web/src/routes/SettingsPage.tsx +172 -0
- trade_compass_agent-0.2.0/apps/web/src/routes/SkillsPage.tsx +199 -0
- trade_compass_agent-0.2.0/apps/web/src/vite-env.d.ts +1 -0
- trade_compass_agent-0.2.0/apps/web/tailwind.config.ts +58 -0
- trade_compass_agent-0.2.0/apps/web/tsconfig.json +23 -0
- trade_compass_agent-0.2.0/apps/web/vite.config.ts +41 -0
- trade_compass_agent-0.2.0/config/agent_skills.yaml +13 -0
- trade_compass_agent-0.2.0/config/agent_skills.yaml.example +22 -0
- trade_compass_agent-0.2.0/config/default.yaml +113 -0
- trade_compass_agent-0.2.0/config/packaged.yaml +106 -0
- trade_compass_agent-0.2.0/docs/README.md +17 -0
- trade_compass_agent-0.2.0/docs/architecture.md +45 -0
- trade_compass_agent-0.2.0/docs/assets/trade-compass-workbench.png +0 -0
- trade_compass_agent-0.2.0/docs/cli.md +68 -0
- trade_compass_agent-0.2.0/docs/configuration.md +124 -0
- trade_compass_agent-0.2.0/docs/getting-started.md +93 -0
- trade_compass_agent-0.2.0/docs/public-release-checklist.md +58 -0
- trade_compass_agent-0.2.0/docs/releasing.md +67 -0
- trade_compass_agent-0.2.0/docs/security-exceptions.md +20 -0
- trade_compass_agent-0.2.0/docs/skills.md +91 -0
- trade_compass_agent-0.2.0/docs/threat-model.md +73 -0
- trade_compass_agent-0.2.0/hatch_build.py +56 -0
- trade_compass_agent-0.2.0/install.sh +144 -0
- trade_compass_agent-0.2.0/package.json +4 -0
- trade_compass_agent-0.2.0/pnpm-lock.yaml +3358 -0
- trade_compass_agent-0.2.0/pnpm-workspace.yaml +13 -0
- trade_compass_agent-0.2.0/pyproject.toml +130 -0
- trade_compass_agent-0.2.0/schemas/readers/announcement_events.schema.json +31 -0
- trade_compass_agent-0.2.0/schemas/readers/kol_signal_extract.schema.json +17 -0
- trade_compass_agent-0.2.0/schemas/readers/news_extract.schema.json +17 -0
- trade_compass_agent-0.2.0/schemas/readers/reader_claims.schema.json +70 -0
- trade_compass_agent-0.2.0/schemas/readers/research_report_extract.schema.json +17 -0
- trade_compass_agent-0.2.0/schemas/readers/source_reference.schema.json +14 -0
- trade_compass_agent-0.2.0/schemas/workflows/catalyst_calendar_cn.schema.json +53 -0
- trade_compass_agent-0.2.0/schemas/workflows/idea_generation_cn.schema.json +66 -0
- trade_compass_agent-0.2.0/schemas/workflows/research_workflow.schema.json +52 -0
- trade_compass_agent-0.2.0/scripts/__init__.py +1 -0
- trade_compass_agent-0.2.0/scripts/check_assets.py +717 -0
- trade_compass_agent-0.2.0/scripts/check_dist.py +213 -0
- trade_compass_agent-0.2.0/scripts/ci_check.sh +38 -0
- trade_compass_agent-0.2.0/scripts/secret_scan.sh +48 -0
- trade_compass_agent-0.2.0/scripts/serve.sh +4 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/__init__.py +10 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/channels/__init__.py +25 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/channels/base.py +156 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/channels/feishu.py +427 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/channels/gateway.py +218 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/channels/inbound.py +133 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/channels/subscriber_store.py +40 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/channels/webhook.py +51 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/channels/wecom.py +294 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/channels/weixin.py +430 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/cli.py +1385 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/command_catalog.py +252 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/concurrency.py +45 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/config.py +567 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/daemon/__init__.py +1 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/daemon/cli.py +73 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/daemon/constants.py +7 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/daemon/launchd.py +233 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/daemon/log_rotation.py +162 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/daemon/program_args.py +73 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/daemon/status.py +271 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/daemon/systemd.py +260 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/data/__init__.py +5 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/data/cninfo.py +185 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/data/fund_flow.py +169 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/data/fundamentals.py +355 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/data/kronos/LICENSE +21 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/data/kronos/__init__.py +17 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/data/kronos/kronos.py +659 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/data/kronos/module.py +570 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/data/kronos_adapter.py +261 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/data/market_pulse.py +214 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/data/network.py +190 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/data/providers.py +841 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/data/quality.py +29 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/data/tushare_provider.py +116 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/diagnostics.py +116 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/domain/__init__.py +1 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/domain/models.py +258 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/domain/signals.py +146 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/evaluation/__init__.py +3 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/evaluation/backtester.py +330 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/evaluation/follow_through.py +140 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/evaluation/metrics.py +56 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/evaluation/rule_performance.py +106 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/evaluation/rule_refinement.py +153 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/evaluation/signal_tracker.py +215 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/evaluation/workflow_artifacts.py +268 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/llm/__init__.py +1 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/llm/providers.py +514 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/logging_config.py +153 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/memory/__init__.py +1 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/memory/capture_hooks.py +120 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/memory/consolidation.py +211 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/memory/contradiction.py +250 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/memory/decision_reconciler.py +240 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/memory/decision_store.py +278 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/memory/dream_diary.py +221 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/memory/enhanced.py +212 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/memory/insights.py +343 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/memory/instrument_store.py +183 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/memory/memory_store.py +881 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/memory/observation_store.py +512 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/memory/patterns.py +359 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/memory/promotion.py +527 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/memory/rules_store.py +283 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/memory/semantic_merge.py +170 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/memory/session_summary_store.py +230 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/memory/skill_quality.py +331 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/memory/skill_store.py +463 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/memory/time_tree.py +380 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/memory/tree/__init__.py +10 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/memory/tree/search.py +186 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/memory/tree/storage.py +79 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/memory/vault.py +21 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/memory/write_gate.py +181 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/ops/__init__.py +181 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/ops/agent_session.py +190 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/ops/audit.py +118 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/ops/builtin_job_delivery.py +62 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/ops/curator.py +106 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/ops/delivery.py +140 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/ops/hooks.py +173 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/ops/job_definition.py +190 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/ops/job_executor.py +213 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/ops/notifications.py +92 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/ops/outcome_feedback.py +623 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/ops/prompt_jobs.py +245 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/ops/reflection.py +239 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/ops/reflection_resolver.py +165 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/ops/run_content.py +119 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/ops/run_store.py +455 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/ops/session_cleanup.py +110 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/ops/tick_scheduler.py +463 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/ops/trading_calendar.py +92 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/ops/watch_plans.py +534 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/portability.py +409 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/portfolio/__init__.py +1 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/portfolio/accounts.py +139 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/portfolio/lot_sizing.py +199 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/portfolio/market_rules.py +64 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/portfolio/simulator.py +576 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/recovery.py +539 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/release_smoke.py +98 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/risk/__init__.py +3 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/risk/cooldown.py +98 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/__init__.py +5 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/activity_events.py +125 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/background_review.py +271 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/bootstrap.py +157 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/compression/__init__.py +43 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/compression/budget.py +220 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/compression/summarizer.py +341 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/compression/trim.py +374 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/context.py +137 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/exceptions.py +29 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/facts.py +84 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/intake.py +283 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/learning.py +93 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/loop.py +941 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/market_stack.py +44 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/mcp/__init__.py +10 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/mcp/client.py +497 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/mcp/loader.py +53 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/readers/__init__.py +21 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/readers/base.py +232 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/run_trace.py +85 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/schema_validator.py +129 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/session.py +501 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/session_title.py +36 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/skills.py +204 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/specialists/__init__.py +3 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/specialists/asset_runner.py +287 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/specialists/assets.py +164 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/specialists/multi_agent/__init__.py +17 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/specialists/multi_agent/assets.py +150 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/specialists/multi_agent/engine.py +68 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/specialists/multi_agent/strategies/__init__.py +1 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/specialists/multi_agent/strategies/debate_team.py +635 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/specialists/multi_agent/types.py +55 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/specialists/nested_loop.py +82 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/specialists/registry.py +11 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/specialists/risk_controls.py +80 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/specialists/run.py +34 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/specialists/signal_parsing.py +173 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/specialists/situation.py +115 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/stream_buffer.py +40 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/tools/__init__.py +3 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/tools/artifact_tracking.py +95 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/tools/batch.py +314 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/tools/builtin_operations.py +1415 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/tools/catalyst_calendar.py +176 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/tools/chart_pattern.py +652 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/tools/dispatch.py +202 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/tools/fetch_url.py +324 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/tools/idea_generation.py +133 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/tools/image_tools.py +227 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/tools/kline_forecast.py +111 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/tools/market.py +140 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/tools/memory.py +45 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/tools/operations.py +138 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/tools/policy.py +71 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/tools/portfolio.py +522 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/tools/readers.py +143 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/tools/registry.py +1593 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/tools/scheduler_tool.py +128 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/tools/search.py +1125 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/tools/self_improve.py +272 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/tools/signals.py +125 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/tools/skills.py +20 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/tools/stock_structure.py +592 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/tools/ta.py +233 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/turn_control.py +70 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/types.py +29 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/verifier.py +229 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/workflows/__init__.py +55 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/runtime/workflows/engine.py +976 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/screening/__init__.py +6 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/screening/config.py +71 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/screening/engine.py +112 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/screening/factors.py +159 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/screening/filters.py +77 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/screening/resonance.py +68 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/screening/triggers.py +149 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/screening/universe.py +154 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/setup_wizard.py +555 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/chokepoint_analyst/prompts/system.md +132 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/chokepoint_analyst/schemas/report.schema.json +46 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/chokepoint_analyst/specialist.yaml +36 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/debate/plans/debate_v2/prompts/bear_debater.md +17 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/debate/plans/debate_v2/prompts/bull_debater.md +17 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/debate/plans/debate_v2/prompts/fundamental_analyst.md +16 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/debate/plans/debate_v2/prompts/pm_defense.md +17 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/debate/plans/debate_v2/prompts/pm_judge.md +23 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/debate/plans/debate_v2/prompts/risk_challenger.md +19 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/debate/plans/debate_v2/prompts/sentiment_analyst.md +16 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/debate/plans/debate_v2/prompts/supply_chain_analyst.md +19 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/debate/plans/debate_v2/prompts/technical_analyst.md +16 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/debate/plans/debate_v2.yaml +110 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/debate/prompts/system.md +5 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/debate/schemas/report.schema.json +41 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/debate/specialist.yaml +47 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/equity_research/plans/debate_v2/prompts/bear_debater.md +17 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/equity_research/plans/debate_v2/prompts/bull_debater.md +17 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/equity_research/plans/debate_v2/prompts/fundamental_analyst.md +16 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/equity_research/plans/debate_v2/prompts/pm_defense.md +17 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/equity_research/plans/debate_v2/prompts/pm_judge.md +23 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/equity_research/plans/debate_v2/prompts/risk_challenger.md +19 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/equity_research/plans/debate_v2/prompts/sentiment_analyst.md +16 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/equity_research/plans/debate_v2/prompts/supply_chain_analyst.md +19 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/equity_research/plans/debate_v2/prompts/technical_analyst.md +16 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/equity_research/plans/debate_v2.yaml +110 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/equity_research/prompts/system.md +13 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/equity_research/schemas/report.schema.json +49 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/equity_research/specialist.yaml +44 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/intraday_tech/prompts/system.md +57 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/intraday_tech/schemas/report.schema.json +46 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/intraday_tech/specialist.yaml +38 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/macro_sentiment/prompts/system.md +52 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/macro_sentiment/schemas/report.schema.json +46 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/macro_sentiment/specialist.yaml +30 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/risk_advisor/prompts/system.md +68 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/risk_advisor/schemas/report.schema.json +46 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/risk_advisor/specialist.yaml +34 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/screener/prompts/system.md +64 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/screener/schemas/report.schema.json +41 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/specialists/screener/specialist.yaml +35 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web/__init__.py +1 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web/agent_api.py +661 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web/api.py +1543 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web/app.py +209 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web/dist.py +31 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web/monitoring.py +156 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web/schemas.py +389 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web/security.py +148 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web/serializers.py +210 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web_dist/assets/AuditPage-DQO9AWtH.js +1 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web_dist/assets/JobsPage-D-MC3R_1.js +21 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web_dist/assets/KlineMiniChart-CqsU2cXE.js +1 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web_dist/assets/MarkdownRenderer-BDox8QS1.js +1 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web_dist/assets/MemoryPage-Cq1W08vX.js +26 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web_dist/assets/PortfolioPage-BDbocnHb.js +6 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web_dist/assets/RulesPage-CjjeX6WS.js +2 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web_dist/assets/SettingsPage-Cuseplh6.js +6 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web_dist/assets/SkillsPage-C8gvPMZ4.js +11 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web_dist/assets/index--tyoBXdo.js +174 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web_dist/assets/index-QIGoAJhP.css +1 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web_dist/assets/save-B8xtQCmk.js +11 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web_dist/assets/skeleton-CYmxv80M.js +1 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web_dist/assets/table-CnZ40eAF.js +1 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web_dist/assets/vendor-charts-BHQhtJLd.js +37 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web_dist/assets/vendor-markdown-BofWF16D.js +29 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web_dist/assets/vendor-query-DoC2nhOp.js +17 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web_dist/assets/vendor-react-Dwu0DWuy.js +21 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web_dist/favicon.ico +0 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web_dist/favicon.svg +43 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/web_dist/index.html +18 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/workflows/catalyst_calendar_cn/workflow.yaml +64 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/workflows/close_check/workflow.yaml +62 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/workflows/eod_review/workflow.yaml +98 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/workflows/equity_research/schemas/output.schema.json +68 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/workflows/equity_research/workflow.yaml +36 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/workflows/idea_generation_cn/workflow.yaml +47 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/workflows/intraday_tech/schemas/output.schema.json +68 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/workflows/intraday_tech/workflow.yaml +36 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/workflows/morning_plan/workflow.yaml +108 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/workflows/postmarket_archive/workflow.yaml +105 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/workflows/premarket_briefing/workflow.yaml +96 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/workflows/risk_advisor/schemas/output.schema.json +68 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/workflows/risk_advisor/workflow.yaml +37 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/workflows/schemas/workflow_output.schema.json +69 -0
- trade_compass_agent-0.2.0/src/trade_compass_agent/workflows/weekend_review/workflow.yaml +108 -0
- trade_compass_agent-0.2.0/tests/conftest.py +43 -0
- trade_compass_agent-0.2.0/tests/runtime/compression/test_budget.py +180 -0
- trade_compass_agent-0.2.0/tests/runtime/compression/test_e2e.py +386 -0
- trade_compass_agent-0.2.0/tests/runtime/compression/test_summarizer.py +273 -0
- trade_compass_agent-0.2.0/tests/runtime/compression/test_trim.py +193 -0
- trade_compass_agent-0.2.0/tests/test_account_store.py +76 -0
- trade_compass_agent-0.2.0/tests/test_activity_events.py +35 -0
- trade_compass_agent-0.2.0/tests/test_agent_api.py +143 -0
- trade_compass_agent-0.2.0/tests/test_agent_control.py +92 -0
- trade_compass_agent-0.2.0/tests/test_agent_session.py +695 -0
- trade_compass_agent-0.2.0/tests/test_agent_stream_replay.py +77 -0
- trade_compass_agent-0.2.0/tests/test_agent_tool_timeout.py +28 -0
- trade_compass_agent-0.2.0/tests/test_agent_turn_outcome.py +187 -0
- trade_compass_agent-0.2.0/tests/test_anti_hallucination.py +185 -0
- trade_compass_agent-0.2.0/tests/test_api.py +299 -0
- trade_compass_agent-0.2.0/tests/test_audit.py +15 -0
- trade_compass_agent-0.2.0/tests/test_channel_subscribers.py +21 -0
- trade_compass_agent-0.2.0/tests/test_channels.py +108 -0
- trade_compass_agent-0.2.0/tests/test_chokepoint_analyst.py +314 -0
- trade_compass_agent-0.2.0/tests/test_cli_serve.py +110 -0
- trade_compass_agent-0.2.0/tests/test_cninfo.py +70 -0
- trade_compass_agent-0.2.0/tests/test_command_catalog.py +53 -0
- trade_compass_agent-0.2.0/tests/test_consolidation_singleton.py +20 -0
- trade_compass_agent-0.2.0/tests/test_contradiction.py +124 -0
- trade_compass_agent-0.2.0/tests/test_daemon_launchd.py +83 -0
- trade_compass_agent-0.2.0/tests/test_daemon_log_rotation.py +125 -0
- trade_compass_agent-0.2.0/tests/test_daemon_systemd.py +267 -0
- trade_compass_agent-0.2.0/tests/test_daemon_verify.py +130 -0
- trade_compass_agent-0.2.0/tests/test_decision_reconciliation.py +371 -0
- trade_compass_agent-0.2.0/tests/test_decision_reflection.py +60 -0
- trade_compass_agent-0.2.0/tests/test_decision_store.py +117 -0
- trade_compass_agent-0.2.0/tests/test_dotenv.py +57 -0
- trade_compass_agent-0.2.0/tests/test_dreaming.py +360 -0
- trade_compass_agent-0.2.0/tests/test_e2e_memory_system.py +333 -0
- trade_compass_agent-0.2.0/tests/test_e2e_trading_day.py +223 -0
- trade_compass_agent-0.2.0/tests/test_fetch_url_tool.py +184 -0
- trade_compass_agent-0.2.0/tests/test_follow_through.py +20 -0
- trade_compass_agent-0.2.0/tests/test_fts5_sanitizer.py +65 -0
- trade_compass_agent-0.2.0/tests/test_fundamentals.py +48 -0
- trade_compass_agent-0.2.0/tests/test_gateway_handler.py +40 -0
- trade_compass_agent-0.2.0/tests/test_hatch_build.py +85 -0
- trade_compass_agent-0.2.0/tests/test_install_script.py +256 -0
- trade_compass_agent-0.2.0/tests/test_installed_config.py +117 -0
- trade_compass_agent-0.2.0/tests/test_instrument_store.py +108 -0
- trade_compass_agent-0.2.0/tests/test_intake.py +74 -0
- trade_compass_agent-0.2.0/tests/test_job_executor.py +209 -0
- trade_compass_agent-0.2.0/tests/test_kronos_adapter.py +296 -0
- trade_compass_agent-0.2.0/tests/test_llm_deepseek.py +151 -0
- trade_compass_agent-0.2.0/tests/test_logging_config.py +79 -0
- trade_compass_agent-0.2.0/tests/test_lot_sizing.py +71 -0
- trade_compass_agent-0.2.0/tests/test_market_pulse.py +19 -0
- trade_compass_agent-0.2.0/tests/test_mcp.py +241 -0
- trade_compass_agent-0.2.0/tests/test_memory_governance.py +334 -0
- trade_compass_agent-0.2.0/tests/test_memory_recall.py +55 -0
- trade_compass_agent-0.2.0/tests/test_memory_tree.py +69 -0
- trade_compass_agent-0.2.0/tests/test_multimodal_api.py +36 -0
- trade_compass_agent-0.2.0/tests/test_new_content_metadata.py +77 -0
- trade_compass_agent-0.2.0/tests/test_notifications.py +21 -0
- trade_compass_agent-0.2.0/tests/test_oms_and_integrations.py +323 -0
- trade_compass_agent-0.2.0/tests/test_oms_guardrails.py +222 -0
- trade_compass_agent-0.2.0/tests/test_outcome_feedback.py +518 -0
- trade_compass_agent-0.2.0/tests/test_p0_p1_p2_fixes.py +268 -0
- trade_compass_agent-0.2.0/tests/test_phase2.py +207 -0
- trade_compass_agent-0.2.0/tests/test_phase5.py +444 -0
- trade_compass_agent-0.2.0/tests/test_portability.py +174 -0
- trade_compass_agent-0.2.0/tests/test_portfolio.py +179 -0
- trade_compass_agent-0.2.0/tests/test_portfolio_tools.py +269 -0
- trade_compass_agent-0.2.0/tests/test_providers.py +150 -0
- trade_compass_agent-0.2.0/tests/test_recovery.py +179 -0
- trade_compass_agent-0.2.0/tests/test_reflection_resolver.py +148 -0
- trade_compass_agent-0.2.0/tests/test_release_cli.py +164 -0
- trade_compass_agent-0.2.0/tests/test_rule_performance.py +46 -0
- trade_compass_agent-0.2.0/tests/test_rules_store.py +54 -0
- trade_compass_agent-0.2.0/tests/test_run_content.py +65 -0
- trade_compass_agent-0.2.0/tests/test_run_trace.py +74 -0
- trade_compass_agent-0.2.0/tests/test_runtime_skills.py +101 -0
- trade_compass_agent-0.2.0/tests/test_scheduler.py +443 -0
- trade_compass_agent-0.2.0/tests/test_scheduler_session_isolation.py +71 -0
- trade_compass_agent-0.2.0/tests/test_screening.py +182 -0
- trade_compass_agent-0.2.0/tests/test_search_tools.py +575 -0
- trade_compass_agent-0.2.0/tests/test_semantic_merge.py +105 -0
- trade_compass_agent-0.2.0/tests/test_session_cleanup.py +72 -0
- trade_compass_agent-0.2.0/tests/test_session_title.py +38 -0
- trade_compass_agent-0.2.0/tests/test_setup_wizard.py +261 -0
- trade_compass_agent-0.2.0/tests/test_signal_tracking.py +99 -0
- trade_compass_agent-0.2.0/tests/test_skill_curator.py +83 -0
- trade_compass_agent-0.2.0/tests/test_skill_quality.py +197 -0
- trade_compass_agent-0.2.0/tests/test_specialists.py +596 -0
- trade_compass_agent-0.2.0/tests/test_static_mount.py +125 -0
- trade_compass_agent-0.2.0/tests/test_stream_buffer.py +24 -0
- trade_compass_agent-0.2.0/tests/test_ta_tools.py +92 -0
- trade_compass_agent-0.2.0/tests/test_trading_signals.py +239 -0
- trade_compass_agent-0.2.0/tests/test_turn_outcome_state.py +74 -0
- trade_compass_agent-0.2.0/tests/test_tushare_provider.py +109 -0
- trade_compass_agent-0.2.0/tests/test_web_security.py +143 -0
- trade_compass_agent-0.2.0/tests/test_workflow_governance.py +1308 -0
- trade_compass_agent-0.2.0/tests/test_write_gate.py +205 -0
- trade_compass_agent-0.2.0/uv.lock +4426 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Skill 设计规范 — 编写/修改 memory_vault/skills/ 下的 SKILL.md 时遵循此格式
|
|
3
|
+
globs:
|
|
4
|
+
- memory_vault/skills/**/SKILL.md
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Skill 文件规范
|
|
8
|
+
|
|
9
|
+
## 文件位置
|
|
10
|
+
`memory_vault/skills/<skill-name>/SKILL.md`
|
|
11
|
+
|
|
12
|
+
## Frontmatter(必填)
|
|
13
|
+
|
|
14
|
+
```yaml
|
|
15
|
+
---
|
|
16
|
+
name: <skill-name> # 与目录名一致,kebab-case
|
|
17
|
+
description: <一句话描述> # 中文,20字以内核心功能 + 关键词
|
|
18
|
+
category: <分类> # 见下方分类列表
|
|
19
|
+
---
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### 分类(category)
|
|
23
|
+
|
|
24
|
+
| 值 | 含义 |
|
|
25
|
+
|---|---|
|
|
26
|
+
| `screening` | 选股/扫描类 |
|
|
27
|
+
| `execution` | 交易执行/事件驱动 |
|
|
28
|
+
| `analysis` | 分析/研判类 |
|
|
29
|
+
| `risk` | 风控/合规类 |
|
|
30
|
+
| `compliance` | 市场规则/合规约束 |
|
|
31
|
+
|
|
32
|
+
## 正文结构(按顺序)
|
|
33
|
+
|
|
34
|
+
### 1. `## 适用场景`
|
|
35
|
+
一段话描述何时应加载/使用此 Skill。
|
|
36
|
+
|
|
37
|
+
### 2. `## 触发条件` 或 `## 规则`(按需)
|
|
38
|
+
列出使用此 Skill 的前置条件或核心知识点。
|
|
39
|
+
|
|
40
|
+
### 3. `## 执行流程`
|
|
41
|
+
有序步骤,每步标注要调用的工具名(反引号),如:
|
|
42
|
+
```
|
|
43
|
+
1. `get_bars(symbol, timeframe="1d", limit=60)` → 获取K线
|
|
44
|
+
2. `get_market_pulse` → 确认大盘环境
|
|
45
|
+
3. 满足全部条件 → `emit_signal(rating="buy")`
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### 4. `## 参数`(可选)
|
|
49
|
+
关键阈值/配置参数,便于后续调优。
|
|
50
|
+
|
|
51
|
+
### 5. `## 排除条件`(可选)
|
|
52
|
+
不适用的场景或应跳过的标的。
|
|
53
|
+
|
|
54
|
+
## 编写原则
|
|
55
|
+
|
|
56
|
+
1. **中文优先**:描述和规则用中文,工具名/代码保持英文
|
|
57
|
+
2. **可执行**:每个 Skill 应能直接指导 Agent 行动,不是泛泛而谈
|
|
58
|
+
3. **无重复**:新建 Skill 前检查是否已有覆盖相同领域的 Skill
|
|
59
|
+
4. **短小精悍**:控制在 50 行以内;超出则考虑拆分
|
|
60
|
+
5. **注册**:新 Skill 需在 `config/agent_skills.yaml` 中添加描述
|
|
61
|
+
|
|
62
|
+
## 现有 Skills 列表
|
|
63
|
+
|
|
64
|
+
| 目录名 | category | 核心职责 |
|
|
65
|
+
|--------|----------|---------|
|
|
66
|
+
| compliance | compliance | A股结构性规则(T+1/涨跌幅/手数/停牌/费用) |
|
|
67
|
+
| risk-veto | risk | 信号否决 + 用户对话风控建议 |
|
|
68
|
+
| momentum-scan | screening | 量价共振筛选 |
|
|
69
|
+
| fund-flow-analysis | analysis | 资金流向分析 |
|
|
70
|
+
| earnings-play | execution | 财报事件驱动 |
|
|
71
|
+
| equity-research | analysis | 个股深度研究 |
|
|
72
|
+
| intraday-tech | analysis | 日内技术分析 |
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Trade Compass Agent — local settings template
|
|
2
|
+
# 本地配置模板:复制为 .env 后填入密钥(Copy to .env and fill in secrets)
|
|
3
|
+
#
|
|
4
|
+
# cp .env.example .env
|
|
5
|
+
|
|
6
|
+
# ── Paths / profile ──────────────────────────────────────────────────────────
|
|
7
|
+
# 数据目录 | Local data cache (bars, portfolio, audit)
|
|
8
|
+
TRADE_COMPASS_DATA_DIR=./data
|
|
9
|
+
# 记忆库目录 | Markdown memory vault (rulebooks, reviews, tree/)
|
|
10
|
+
TRADE_COMPASS_MEMORY_DIR=./memory_vault
|
|
11
|
+
# 配置 profile | Matches config/default.yaml profile key
|
|
12
|
+
TRADE_COMPASS_PROFILE=local
|
|
13
|
+
|
|
14
|
+
# ── Server (optional) ────────────────────────────────────────────────────────
|
|
15
|
+
# API 端口 | Default 19704; override --port or this env
|
|
16
|
+
# TRADE_COMPASS_PORT=19704
|
|
17
|
+
# 最大 HTTP 请求体(字节)| Default 10 MiB
|
|
18
|
+
# TRADE_COMPASS_MAX_REQUEST_BYTES=10485760
|
|
19
|
+
# 开发 CORS | Set 1 when Vite dev (:3000) talks to API (:19704)
|
|
20
|
+
# Also set automatically by `trade-compass serve --dev`
|
|
21
|
+
TRADE_COMPASS_DEV_CORS=
|
|
22
|
+
|
|
23
|
+
# ── Data providers (optional) ────────────────────────────────────────────────
|
|
24
|
+
# Tushare token — requires pip install -e ".[tushare]" and data.tushare_enabled: true
|
|
25
|
+
TUSHARE_TOKEN=
|
|
26
|
+
|
|
27
|
+
# 网络代理 | Network proxy — domestic finance APIs (eastmoney/sina) often fail through proxy
|
|
28
|
+
# 建议关闭系统代理,或设置 NO_PROXY 绕过:
|
|
29
|
+
# NO_PROXY=localhost,127.0.0.1,eastmoney.com,.eastmoney.com,push2.eastmoney.com,datacenter-web.eastmoney.com,sina.com.cn,.sina.com.cn
|
|
30
|
+
|
|
31
|
+
# ── LLM providers (optional) ─────────────────────────────────────────────────
|
|
32
|
+
# Default in config/default.yaml: provider deepseek, model deepseek-chat
|
|
33
|
+
OPENAI_API_KEY=
|
|
34
|
+
ANTHROPIC_API_KEY=
|
|
35
|
+
DEEPSEEK_API_KEY=
|
|
36
|
+
OPENROUTER_API_KEY=
|
|
37
|
+
|
|
38
|
+
# ── Vision (image attachment support) ────────────────────────────────────────
|
|
39
|
+
# DeepSeek is text-only; to enable image understanding, configure a vision model.
|
|
40
|
+
# Option A: Use OpenAI (requires OPENAI_API_KEY above)
|
|
41
|
+
# In config/default.yaml set: vision_model: gpt-4o-mini
|
|
42
|
+
# vision_provider: openai
|
|
43
|
+
# vision_api_key_env: OPENAI_API_KEY
|
|
44
|
+
# Option B: Use DashScope (Qwen-VL)
|
|
45
|
+
# DASHSCOPE_API_KEY=
|
|
46
|
+
# In config/default.yaml set: vision_model: qwen-vl-max
|
|
47
|
+
# vision_provider: dashscope
|
|
48
|
+
# vision_api_key_env: DASHSCOPE_API_KEY
|
|
49
|
+
|
|
50
|
+
# ── MCP (optional) ───────────────────────────────────────────────────────────
|
|
51
|
+
# MCP server tokens — keep secrets in gitignored .trade-compass/mcp.json (not in repo).
|
|
52
|
+
# Use ${VAR_NAME} in mcp.json url/headers to reference env vars defined here.
|
|
53
|
+
# EXAMPLE_API_TOKEN=
|
|
54
|
+
|
|
55
|
+
# ── Kronos K-line Forecast (optional) ────────────────────────────────────────
|
|
56
|
+
# Path to cloned Kronos repo — required for kline_forecast tool
|
|
57
|
+
# Install: pip install -e ".[forecast]" && git clone https://github.com/NeoQuasar/Kronos.git
|
|
58
|
+
KRONOS_PATH=
|
|
59
|
+
|
|
60
|
+
# ── Search (optional) ────────────────────────────────────────────────────────
|
|
61
|
+
# Tavily API key for enhanced web search — get one at https://tavily.com
|
|
62
|
+
TAVILY_API_KEY=
|
|
63
|
+
# xAI API key for X (Twitter) search via Grok — get one at https://console.x.ai
|
|
64
|
+
XAI_API_KEY=
|
|
65
|
+
|
|
66
|
+
# ── Notification channels (optional) ────────────────────────────────────────
|
|
67
|
+
# 飞书群 Webhook 推送 | Feishu group bot webhook (push-only)
|
|
68
|
+
FEISHU_WEBHOOK_URL=
|
|
69
|
+
FEISHU_WEBHOOK_SECRET=
|
|
70
|
+
# 飞书应用 Bot 双向 | Feishu app bot (bidirectional, requires lark_oapi)
|
|
71
|
+
FEISHU_APP_ID=
|
|
72
|
+
FEISHU_APP_SECRET=
|
|
73
|
+
# 主动推送目标会话(可选,oc_ 开头的 chat_id;不设则需先给 Bot 发一条消息)
|
|
74
|
+
FEISHU_PUSH_CHAT_ID=
|
|
75
|
+
# 企微群 Webhook 推送 | WeCom group robot webhook (push-only)
|
|
76
|
+
WECOM_WEBHOOK_URL=
|
|
77
|
+
# 企微应用 Bot 双向 | WeCom app bot (bidirectional)
|
|
78
|
+
WECOM_CORP_ID=
|
|
79
|
+
WECOM_AGENT_SECRET=
|
|
80
|
+
WECOM_AGENT_ID=
|
|
81
|
+
# 通用 Webhook | Generic webhook (any URL that accepts POST JSON)
|
|
82
|
+
WEBHOOK_NOTIFICATION_URL=
|
|
83
|
+
|
|
84
|
+
# ── Logging ───────────────────────────────────────────────────────────────────
|
|
85
|
+
# 日志级别 | DEBUG, INFO (default), WARNING, ERROR
|
|
86
|
+
LOG_LEVEL=INFO
|
|
87
|
+
# 日志格式 | "json" for structured JSON lines, empty for colored console
|
|
88
|
+
LOG_FORMAT=
|
|
89
|
+
# 模块级别覆盖 | Per-module override (e.g. LOG_LEVEL_SCREENING=DEBUG)
|
|
90
|
+
# LOG_LEVEL_OPS=DEBUG
|
|
91
|
+
# LOG_LEVEL_RUNTIME=DEBUG
|
|
92
|
+
|
|
93
|
+
# ── Privacy ──────────────────────────────────────────────────────────────────
|
|
94
|
+
# 隐私门控 | Allow memory/review snippets in external LLM calls (learning curator)
|
|
95
|
+
ALLOW_EXTERNAL_LLM_MEMORY=false
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
name: Bug report
|
|
2
|
+
description: Report a reproducible problem in Trade Compass Agent.
|
|
3
|
+
title: "[Bug]: "
|
|
4
|
+
labels:
|
|
5
|
+
- bug
|
|
6
|
+
body:
|
|
7
|
+
- type: markdown
|
|
8
|
+
attributes:
|
|
9
|
+
value: Do not include API keys, webhook secrets, portfolio exports, or other private trading data.
|
|
10
|
+
- type: input
|
|
11
|
+
id: version
|
|
12
|
+
attributes:
|
|
13
|
+
label: Version
|
|
14
|
+
description: Output from `trade-compass --version`.
|
|
15
|
+
validations:
|
|
16
|
+
required: true
|
|
17
|
+
- type: dropdown
|
|
18
|
+
id: install
|
|
19
|
+
attributes:
|
|
20
|
+
label: Installation method
|
|
21
|
+
options:
|
|
22
|
+
- PyPI / uv tool
|
|
23
|
+
- Editable source checkout
|
|
24
|
+
- Other
|
|
25
|
+
validations:
|
|
26
|
+
required: true
|
|
27
|
+
- type: textarea
|
|
28
|
+
id: expected
|
|
29
|
+
attributes:
|
|
30
|
+
label: Expected behavior
|
|
31
|
+
validations:
|
|
32
|
+
required: true
|
|
33
|
+
- type: textarea
|
|
34
|
+
id: actual
|
|
35
|
+
attributes:
|
|
36
|
+
label: Actual behavior
|
|
37
|
+
validations:
|
|
38
|
+
required: true
|
|
39
|
+
- type: textarea
|
|
40
|
+
id: reproduce
|
|
41
|
+
attributes:
|
|
42
|
+
label: Reproduction steps
|
|
43
|
+
description: Include the smallest safe example and relevant `trade-compass doctor` output.
|
|
44
|
+
validations:
|
|
45
|
+
required: true
|
|
46
|
+
- type: textarea
|
|
47
|
+
id: environment
|
|
48
|
+
attributes:
|
|
49
|
+
label: Environment
|
|
50
|
+
description: OS, Python version, browser, and enabled optional extras. Redact secrets.
|
|
51
|
+
validations:
|
|
52
|
+
required: true
|
|
53
|
+
- type: checkboxes
|
|
54
|
+
id: safety
|
|
55
|
+
attributes:
|
|
56
|
+
label: Safety check
|
|
57
|
+
options:
|
|
58
|
+
- label: I removed credentials and private financial data from this report.
|
|
59
|
+
required: true
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
blank_issues_enabled: false
|
|
2
|
+
contact_links:
|
|
3
|
+
- name: Security report
|
|
4
|
+
url: https://github.com/AdenChenCoder/trade-compass-agent/security/advisories/new
|
|
5
|
+
about: Report vulnerabilities privately. Do not disclose them in a public issue.
|
|
6
|
+
- name: Documentation
|
|
7
|
+
url: https://github.com/AdenChenCoder/trade-compass-agent/tree/main/docs
|
|
8
|
+
about: Read installation, configuration, CLI, Skill, architecture, and release guides.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
name: Feature request
|
|
2
|
+
description: Propose a user-visible improvement.
|
|
3
|
+
title: "[Feature]: "
|
|
4
|
+
labels:
|
|
5
|
+
- enhancement
|
|
6
|
+
body:
|
|
7
|
+
- type: textarea
|
|
8
|
+
id: outcome
|
|
9
|
+
attributes:
|
|
10
|
+
label: Desired user outcome
|
|
11
|
+
description: What should a user be able to observe or accomplish?
|
|
12
|
+
validations:
|
|
13
|
+
required: true
|
|
14
|
+
- type: textarea
|
|
15
|
+
id: current
|
|
16
|
+
attributes:
|
|
17
|
+
label: Current limitation
|
|
18
|
+
validations:
|
|
19
|
+
required: true
|
|
20
|
+
- type: textarea
|
|
21
|
+
id: proposal
|
|
22
|
+
attributes:
|
|
23
|
+
label: Proposed behavior
|
|
24
|
+
description: Describe behavior and compatibility expectations, not only implementation details.
|
|
25
|
+
validations:
|
|
26
|
+
required: true
|
|
27
|
+
- type: textarea
|
|
28
|
+
id: alternatives
|
|
29
|
+
attributes:
|
|
30
|
+
label: Alternatives considered
|
|
31
|
+
- type: textarea
|
|
32
|
+
id: contracts
|
|
33
|
+
attributes:
|
|
34
|
+
label: Compatibility and product contracts
|
|
35
|
+
description: Note any data, workflow, permission, or automation behavior that must remain unchanged.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
updates:
|
|
3
|
+
- package-ecosystem: pip
|
|
4
|
+
directory: "/"
|
|
5
|
+
schedule:
|
|
6
|
+
interval: weekly
|
|
7
|
+
day: monday
|
|
8
|
+
time: "09:00"
|
|
9
|
+
timezone: Asia/Shanghai
|
|
10
|
+
open-pull-requests-limit: 5
|
|
11
|
+
groups:
|
|
12
|
+
python-minor-patch:
|
|
13
|
+
update-types:
|
|
14
|
+
- minor
|
|
15
|
+
- patch
|
|
16
|
+
|
|
17
|
+
- package-ecosystem: npm
|
|
18
|
+
directory: "/"
|
|
19
|
+
schedule:
|
|
20
|
+
interval: weekly
|
|
21
|
+
day: monday
|
|
22
|
+
time: "09:15"
|
|
23
|
+
timezone: Asia/Shanghai
|
|
24
|
+
open-pull-requests-limit: 5
|
|
25
|
+
groups:
|
|
26
|
+
web-minor-patch:
|
|
27
|
+
update-types:
|
|
28
|
+
- minor
|
|
29
|
+
- patch
|
|
30
|
+
|
|
31
|
+
- package-ecosystem: github-actions
|
|
32
|
+
directory: "/"
|
|
33
|
+
schedule:
|
|
34
|
+
interval: weekly
|
|
35
|
+
day: monday
|
|
36
|
+
time: "09:30"
|
|
37
|
+
timezone: Asia/Shanghai
|
|
38
|
+
open-pull-requests-limit: 5
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
## User outcome
|
|
2
|
+
|
|
3
|
+
Describe the observable problem solved and who benefits.
|
|
4
|
+
|
|
5
|
+
## Changes
|
|
6
|
+
|
|
7
|
+
Summarize the smallest relevant implementation changes.
|
|
8
|
+
|
|
9
|
+
## Contracts and risk
|
|
10
|
+
|
|
11
|
+
- Existing behavior or data semantics preserved:
|
|
12
|
+
- Security, privacy, compatibility, or migration impact:
|
|
13
|
+
- Rollback or recovery path:
|
|
14
|
+
|
|
15
|
+
## Verification
|
|
16
|
+
|
|
17
|
+
- [ ] Python tests and governance checks pass (`scripts/ci_check.sh`).
|
|
18
|
+
- [ ] Web tests and typecheck pass when applicable.
|
|
19
|
+
- [ ] Consumer-facing behavior was exercised.
|
|
20
|
+
- [ ] Built wheel behavior was exercised when package assets or entry points changed.
|
|
21
|
+
- [ ] No secrets, generated runtime data, or private financial data were added.
|
|
22
|
+
- [ ] Documentation and changelog were updated when user-visible behavior changed.
|
|
23
|
+
|
|
24
|
+
## Release note
|
|
25
|
+
|
|
26
|
+
State the changelog entry, or explain why this change is not user-visible.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
changelog:
|
|
2
|
+
exclude:
|
|
3
|
+
labels:
|
|
4
|
+
- skip-changelog
|
|
5
|
+
authors:
|
|
6
|
+
- dependabot
|
|
7
|
+
categories:
|
|
8
|
+
- title: Breaking changes
|
|
9
|
+
labels:
|
|
10
|
+
- breaking-change
|
|
11
|
+
- title: Features
|
|
12
|
+
labels:
|
|
13
|
+
- enhancement
|
|
14
|
+
- title: Fixes
|
|
15
|
+
labels:
|
|
16
|
+
- bug
|
|
17
|
+
- bugfix
|
|
18
|
+
- title: Documentation
|
|
19
|
+
labels:
|
|
20
|
+
- documentation
|
|
21
|
+
- title: Other changes
|
|
22
|
+
labels:
|
|
23
|
+
- "*"
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches-ignore:
|
|
6
|
+
- "dependabot/**"
|
|
7
|
+
pull_request:
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
python-test:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
17
|
+
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
|
|
18
|
+
with:
|
|
19
|
+
python-version: "3.12"
|
|
20
|
+
- name: Install uv
|
|
21
|
+
run: python -m pip install "uv==0.11.32"
|
|
22
|
+
- name: Install locked project dependencies
|
|
23
|
+
run: uv sync --locked --extra dev
|
|
24
|
+
- name: Run Python governance checks
|
|
25
|
+
run: scripts/ci_check.sh
|
|
26
|
+
env:
|
|
27
|
+
PYTHONPATH: src
|
|
28
|
+
|
|
29
|
+
web-build:
|
|
30
|
+
runs-on: ubuntu-latest
|
|
31
|
+
steps:
|
|
32
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
33
|
+
- uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6
|
|
34
|
+
with:
|
|
35
|
+
version: 11.1.3
|
|
36
|
+
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
|
|
37
|
+
with:
|
|
38
|
+
node-version: "22"
|
|
39
|
+
cache: pnpm
|
|
40
|
+
- name: Install workspace dependencies
|
|
41
|
+
run: pnpm install --frozen-lockfile
|
|
42
|
+
- name: Build Vite web app
|
|
43
|
+
run: pnpm --dir apps/web build
|
|
44
|
+
- name: Typecheck web app
|
|
45
|
+
run: pnpm --dir apps/web typecheck
|
|
46
|
+
- name: Test web app
|
|
47
|
+
run: pnpm --dir apps/web test
|
|
48
|
+
|
|
49
|
+
wheel-smoke:
|
|
50
|
+
runs-on: ubuntu-latest
|
|
51
|
+
needs: [web-build]
|
|
52
|
+
steps:
|
|
53
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
54
|
+
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
|
|
55
|
+
with:
|
|
56
|
+
python-version: "3.12"
|
|
57
|
+
- uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6
|
|
58
|
+
with:
|
|
59
|
+
version: 11.1.3
|
|
60
|
+
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
|
|
61
|
+
with:
|
|
62
|
+
node-version: "22"
|
|
63
|
+
cache: pnpm
|
|
64
|
+
- name: Install workspace dependencies
|
|
65
|
+
run: pnpm install --frozen-lockfile
|
|
66
|
+
- name: Build distributions and verify installed quickstart
|
|
67
|
+
run: |
|
|
68
|
+
python -m pip install "uv==0.11.32"
|
|
69
|
+
uv build --no-sources
|
|
70
|
+
python scripts/check_dist.py
|
|
71
|
+
python -m pip install dist/*.whl
|
|
72
|
+
export TRADE_COMPASS_HOME="$RUNNER_TEMP/trade-compass-home"
|
|
73
|
+
export DEEPSEEK_API_KEY="ci-placeholder"
|
|
74
|
+
cd "$RUNNER_TEMP"
|
|
75
|
+
trade-compass --version
|
|
76
|
+
trade-compass commands --json
|
|
77
|
+
trade-compass setup
|
|
78
|
+
trade-compass doctor
|
|
79
|
+
python -m trade_compass_agent.release_smoke
|
|
80
|
+
python - <<'PY'
|
|
81
|
+
import os
|
|
82
|
+
from pathlib import Path
|
|
83
|
+
|
|
84
|
+
import trade_compass_agent.web.dist as dist
|
|
85
|
+
from trade_compass_agent.config import (
|
|
86
|
+
PACKAGE_ROOT,
|
|
87
|
+
load_app_config,
|
|
88
|
+
resolve_config_path,
|
|
89
|
+
resolve_schema_path,
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
path = dist.resolve_web_dist()
|
|
93
|
+
assert path is not None, "web_dist missing from installed wheel"
|
|
94
|
+
assert (path / "index.html").is_file()
|
|
95
|
+
print(f"web_dist ok: {path}")
|
|
96
|
+
assert (PACKAGE_ROOT / "workflows" / "catalyst_calendar_cn" / "workflow.yaml").is_file()
|
|
97
|
+
assert (PACKAGE_ROOT / "specialists" / "equity_research" / "specialist.yaml").is_file()
|
|
98
|
+
assert resolve_schema_path("readers/reader_claims.schema.json").is_file()
|
|
99
|
+
config = load_app_config()
|
|
100
|
+
home = Path(os.environ["TRADE_COMPASS_HOME"])
|
|
101
|
+
assert resolve_config_path().resolve() == (home / "config.yaml").resolve()
|
|
102
|
+
assert config.data_dir.resolve() == (home / "data").resolve()
|
|
103
|
+
assert config.memory_dir.resolve() == (home / "memory_vault").resolve()
|
|
104
|
+
assert config.llm.provider == "deepseek"
|
|
105
|
+
assert not str(config.data_dir).startswith(str(PACKAGE_ROOT))
|
|
106
|
+
print("installed config, runtime paths, and package assets ok")
|
|
107
|
+
PY
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
verify:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
16
|
+
with:
|
|
17
|
+
fetch-depth: 0
|
|
18
|
+
- name: Scan complete Git history
|
|
19
|
+
run: scripts/secret_scan.sh
|
|
20
|
+
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
|
|
21
|
+
with:
|
|
22
|
+
python-version: "3.12"
|
|
23
|
+
- uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6
|
|
24
|
+
with:
|
|
25
|
+
version: 11.1.3
|
|
26
|
+
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
|
|
27
|
+
with:
|
|
28
|
+
node-version: "22"
|
|
29
|
+
cache: pnpm
|
|
30
|
+
- name: Install workspace and project dependencies
|
|
31
|
+
run: |
|
|
32
|
+
pnpm install --frozen-lockfile
|
|
33
|
+
python -m pip install "uv==0.11.32"
|
|
34
|
+
uv sync --locked --extra dev
|
|
35
|
+
- name: Verify Python project
|
|
36
|
+
run: scripts/ci_check.sh
|
|
37
|
+
env:
|
|
38
|
+
PYTHONPATH: src
|
|
39
|
+
- name: Verify web app
|
|
40
|
+
run: |
|
|
41
|
+
pnpm --dir apps/web test
|
|
42
|
+
pnpm --dir apps/web typecheck
|
|
43
|
+
pnpm --dir apps/web build
|
|
44
|
+
|
|
45
|
+
build:
|
|
46
|
+
needs: verify
|
|
47
|
+
runs-on: ubuntu-latest
|
|
48
|
+
steps:
|
|
49
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
50
|
+
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
|
|
51
|
+
with:
|
|
52
|
+
python-version: "3.12"
|
|
53
|
+
- uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6
|
|
54
|
+
with:
|
|
55
|
+
version: 11.1.3
|
|
56
|
+
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
|
|
57
|
+
with:
|
|
58
|
+
node-version: "22"
|
|
59
|
+
cache: pnpm
|
|
60
|
+
- name: Install workspace dependencies
|
|
61
|
+
run: pnpm install --frozen-lockfile
|
|
62
|
+
- name: Build distributions
|
|
63
|
+
run: |
|
|
64
|
+
python -m pip install "uv==0.11.32"
|
|
65
|
+
uv build --no-sources
|
|
66
|
+
python scripts/check_dist.py
|
|
67
|
+
- name: Verify tag matches package version
|
|
68
|
+
run: |
|
|
69
|
+
python - <<'PY'
|
|
70
|
+
import os
|
|
71
|
+
import tomllib
|
|
72
|
+
|
|
73
|
+
with open("pyproject.toml", "rb") as handle:
|
|
74
|
+
version = tomllib.load(handle)["project"]["version"]
|
|
75
|
+
tag = os.environ["GITHUB_REF_NAME"]
|
|
76
|
+
if tag != f"v{version}":
|
|
77
|
+
raise SystemExit(f"tag {tag!r} does not match package version {version!r}")
|
|
78
|
+
PY
|
|
79
|
+
- name: Verify the exact wheel as an installed consumer
|
|
80
|
+
run: |
|
|
81
|
+
python -m venv "$RUNNER_TEMP/release-smoke"
|
|
82
|
+
"$RUNNER_TEMP/release-smoke/bin/python" -m pip install dist/*.whl
|
|
83
|
+
cd "$RUNNER_TEMP"
|
|
84
|
+
export TRADE_COMPASS_HOME="$RUNNER_TEMP/trade-compass-home"
|
|
85
|
+
"$RUNNER_TEMP/release-smoke/bin/trade-compass" --version
|
|
86
|
+
"$RUNNER_TEMP/release-smoke/bin/trade-compass" commands --json
|
|
87
|
+
"$RUNNER_TEMP/release-smoke/bin/python" -m trade_compass_agent.release_smoke
|
|
88
|
+
- name: Build release SBOM and checksums
|
|
89
|
+
run: |
|
|
90
|
+
mkdir -p release-assets
|
|
91
|
+
cp dist/* release-assets/
|
|
92
|
+
cp install.sh release-assets/
|
|
93
|
+
uv export --quiet \
|
|
94
|
+
--locked \
|
|
95
|
+
--format cyclonedx1.5 \
|
|
96
|
+
--all-extras \
|
|
97
|
+
--all-groups \
|
|
98
|
+
--no-emit-project \
|
|
99
|
+
--output-file release-assets/sbom.cdx.json
|
|
100
|
+
cd release-assets
|
|
101
|
+
sha256sum * > SHA256SUMS
|
|
102
|
+
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
103
|
+
with:
|
|
104
|
+
name: python-distributions
|
|
105
|
+
path: dist/
|
|
106
|
+
if-no-files-found: error
|
|
107
|
+
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
108
|
+
with:
|
|
109
|
+
name: release-assets
|
|
110
|
+
path: release-assets/
|
|
111
|
+
if-no-files-found: error
|
|
112
|
+
|
|
113
|
+
publish:
|
|
114
|
+
needs: build
|
|
115
|
+
runs-on: ubuntu-latest
|
|
116
|
+
environment:
|
|
117
|
+
name: pypi
|
|
118
|
+
url: https://pypi.org/project/trade-compass-agent/
|
|
119
|
+
permissions:
|
|
120
|
+
id-token: write
|
|
121
|
+
steps:
|
|
122
|
+
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
|
|
123
|
+
with:
|
|
124
|
+
name: python-distributions
|
|
125
|
+
path: dist
|
|
126
|
+
- uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # release/v1
|
|
127
|
+
|
|
128
|
+
postpublish:
|
|
129
|
+
needs: publish
|
|
130
|
+
runs-on: ubuntu-latest
|
|
131
|
+
steps:
|
|
132
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
133
|
+
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
|
|
134
|
+
with:
|
|
135
|
+
python-version: "3.12"
|
|
136
|
+
- name: Install and accept the published package
|
|
137
|
+
run: |
|
|
138
|
+
VERSION="${GITHUB_REF_NAME#v}"
|
|
139
|
+
python -m venv "$RUNNER_TEMP/postpublish"
|
|
140
|
+
for attempt in 1 2 3 4 5; do
|
|
141
|
+
if "$RUNNER_TEMP/postpublish/bin/python" -m pip install \
|
|
142
|
+
"trade-compass-agent==$VERSION"; then
|
|
143
|
+
break
|
|
144
|
+
fi
|
|
145
|
+
if [ "$attempt" = 5 ]; then
|
|
146
|
+
exit 1
|
|
147
|
+
fi
|
|
148
|
+
sleep 15
|
|
149
|
+
done
|
|
150
|
+
cd "$RUNNER_TEMP"
|
|
151
|
+
export TRADE_COMPASS_HOME="$RUNNER_TEMP/trade-compass-home"
|
|
152
|
+
"$RUNNER_TEMP/postpublish/bin/trade-compass" --version
|
|
153
|
+
"$RUNNER_TEMP/postpublish/bin/trade-compass" commands --json
|
|
154
|
+
"$RUNNER_TEMP/postpublish/bin/python" -m trade_compass_agent.release_smoke
|
|
155
|
+
- name: Accept the published one-command installer
|
|
156
|
+
run: |
|
|
157
|
+
export HOME="$RUNNER_TEMP/installer-home"
|
|
158
|
+
export TRADE_COMPASS_PACKAGE="trade-compass-agent==${GITHUB_REF_NAME#v}"
|
|
159
|
+
sh install.sh
|
|
160
|
+
test ! -e "$HOME/.trade-compass/config.yaml"
|
|
161
|
+
if command -v uv >/dev/null 2>&1; then
|
|
162
|
+
uv_bin="$(command -v uv)"
|
|
163
|
+
else
|
|
164
|
+
uv_bin="$HOME/.local/bin/uv"
|
|
165
|
+
fi
|
|
166
|
+
tool_bin="$("$uv_bin" tool dir --bin)"
|
|
167
|
+
"$tool_bin/trade-compass" --version
|
|
168
|
+
|
|
169
|
+
github-release:
|
|
170
|
+
needs: postpublish
|
|
171
|
+
runs-on: ubuntu-latest
|
|
172
|
+
permissions:
|
|
173
|
+
contents: write
|
|
174
|
+
steps:
|
|
175
|
+
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
|
|
176
|
+
with:
|
|
177
|
+
name: release-assets
|
|
178
|
+
path: release-assets
|
|
179
|
+
- uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65 # v2
|
|
180
|
+
with:
|
|
181
|
+
files: release-assets/*
|
|
182
|
+
generate_release_notes: true
|