aukeys-opscli 0.0.22__tar.gz → 0.0.23__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.
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/PKG-INFO +1 -1
- aukeys_opscli-0.0.23/docs/change-log-pending.md +76 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/query/services/manager.py +37 -5
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/templates/ops-dataset-query/SKILL_MCP.md +198 -0
- aukeys_opscli-0.0.23/opscli/skills/templates/ops-dataset-query/scripts/chart_analyze_mcp.py +663 -0
- aukeys_opscli-0.0.23/opscli/skills/templates/ops-dataset-query/scripts/chart_map_mcp.py +383 -0
- aukeys_opscli-0.0.23/opscli/skills/templates/ops-dataset-query/scripts/excel_export_mcp.py +367 -0
- aukeys_opscli-0.0.23/opscli/skills/templates/ops-dataset-query/scripts/query_mcp.py +583 -0
- aukeys_opscli-0.0.23/opscli/skills/templates/ops-dataset-query/scripts/updater_mcp.py +137 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/pyproject.toml +1 -1
- aukeys_opscli-0.0.22/docs/change-log-pending.md +0 -102
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/.agents/plugins/marketplace.json +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/.agents/skills/super-dev/SKILL.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/.agents/skills/super-dev-seeai/SKILL.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/.claude/CLAUDE.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/.claude/agents/super-dev.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/.claude/commands/super-dev-seeai.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/.claude/commands/super-dev.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/.claude/settings.local.json +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/.claude/skills/super-dev/SKILL.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/.claude/skills/super-dev-seeai/SKILL.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/.claude-plugin/marketplace.json +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/.github/workflows/cross-platform-preflight.yml +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/.gitignore +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/.super-dev/install-manifest.json +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/AGENTS.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/CLAUDE.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/README.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/README_MCP.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/analysis/amazon-monitor/346/216/245/345/205/245/345/210/206/346/236/220.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/analysis//346/216/210/346/235/203/346/250/241/345/274/217/345/257/271/346/257/224/345/210/206/346/236/220/346/212/245/345/221/212.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/design/AI/345/217/226/346/225/260/350/203/275/345/212/233/345/272/225/345/272/247/345/274/200/345/217/221/351/234/200/346/261/202.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/design/CLI/345/212/250/346/200/201/346/250/241/345/235/227/345/212/240/350/275/275/346/224/271/351/200/240/345/256/236/346/226/275/346/226/271/346/241/210.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/design/Skills/345/244/232/345/267/245/345/205/267/350/260/203/347/240/224/350/247/204/345/210/222.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/design/amazon/345/273/272/350/241/250SQL/350/215/211/346/241/210/344/270/216ops API/350/257/267/346/261/202/344/275/223/345/256/232/344/271/211.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/design/amazon/346/225/260/346/215/256/346/250/241/345/236/213/344/270/216API/351/242/204/347/225/231/346/226/271/346/241/210.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/design/ops-amazon Skill/350/247/204/345/210/222/346/226/271/346/241/210.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/design/opscli-session/345/205/261/347/224/250/346/200/247/345/210/206/346/236/220/344/270/216/344/274/230/345/214/226/346/226/271/346/241/210/346/212/245/345/221/212.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/design/opscli/346/216/210/346/235/203/346/265/201/347/250/213/346/267/261/345/272/246/345/210/206/346/236/220.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/design/query/346/250/241/345/235/227/350/256/276/350/256/241.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/design//346/225/260/346/215/256/346/237/245/350/257/242/346/234/215/345/212/241/345/274/200/345/217/221/350/257/264/346/230/216/346/226/207/346/241/243.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/design//346/225/260/346/215/256/351/233/206/345/255/227/346/256/265/346/212/200/350/203/275/347/263/273/347/273/237/346/212/200/346/234/257/346/226/271/346/241/210.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/design//346/250/241/345/235/227/345/215/217/350/256/256/344/270/216/346/217/222/344/273/266/346/263/250/345/206/214/346/216/245/345/217/243/350/256/276/350/256/241.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/design//346/250/241/345/235/227/345/256/211/350/243/205/345/210/206/345/261/202/344/270/216/351/273/230/350/256/244/345/217/221/350/241/214/346/226/271/346/241/210.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/design//346/250/241/345/235/227/346/217/222/344/273/266/345/214/226/344/270/216/345/244/232/345/233/242/351/230/237/346/262/273/347/220/206/346/226/271/346/241/210.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/design//346/250/241/345/235/227/347/233/256/345/275/225/345/210/206/345/261/202/350/247/204/350/214/203.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/design//351/200/232/347/224/250Skill/347/211/210/346/234/254/346/216/247/345/210/266/346/236/266/346/236/204.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/guide/Skills/345/237/272/347/241/200/345/274/200/345/217/221/345/237/271/350/256/255/346/211/213/345/206/214.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/guide/opscli/345/221/275/344/273/244/347/224/250/344/276/213/346/211/213/345/206/214.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/guide//344/273/216/351/233/266/345/256/211/350/243/205/351/203/250/347/275/262/346/214/207/345/215/227.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/guide//350/256/244/350/257/201/346/250/241/345/235/227/344/275/277/347/224/250/346/214/207/345/215/227.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/guide//350/267/250/345/271/263/345/217/260/345/217/221/345/270/203/345/211/215/346/243/200/346/237/245.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/plans/2026-04-22-p1-contract-version-governance.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/plans/MCP/346/234/215/345/212/241/345/256/214/345/226/204/346/225/264/346/224/271/350/256/241/345/210/222/344/271/246.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/plans//345/217/226/346/225/260/345/272/225/345/272/247/344/270/200/346/234/237/345/211/251/344/275/231/344/273/273/345/212/241.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/plans//345/217/226/346/225/260/345/272/225/345/272/247/344/270/200/346/234/237/345/217/221/345/270/203/346/243/200/346/237/245/346/270/205/345/215/225.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/plans//345/217/226/346/225/260/345/272/225/345/272/247/344/270/200/346/234/237/345/274/200/345/217/221/350/256/241/345/210/222.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/plans//345/217/226/346/225/260/345/272/225/345/272/247/344/270/200/346/234/237/350/201/224/350/260/203/350/256/260/345/275/225.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/plans//345/217/226/346/225/260/345/272/225/345/272/247/344/270/200/346/234/237/351/252/214/346/224/266/346/211/213/345/206/214.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/plans//350/256/244/350/257/201/346/250/241/345/235/227/345/256/236/346/226/275/350/256/241/345/210/222.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/plans//350/256/244/350/257/201/346/250/241/345/235/227/350/256/276/350/256/241/346/226/271/346/241/210.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/release//345/244/232/345/214/205/345/217/221/345/270/203/344/270/216/350/201/232/345/220/210/345/217/221/350/241/214/347/255/226/347/225/245.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/release//346/211/223/345/214/205/345/217/221/345/270/203/346/214/207/345/215/227.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/spec/MCP/346/250/241/345/235/227/346/216/245/345/205/245/350/247/204/350/214/203.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/docs/spec//345/274/200/345/217/221/350/247/204/350/214/203.md" +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/amazon/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/amazon/cli.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/amazon/client.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/amazon/commands/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/amazon/commands/cli.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/amazon/domain/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/amazon/domain/exceptions.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/amazon/domain/models.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/amazon/exceptions.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/amazon/manager.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/amazon/models.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/amazon/parser.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/amazon/scraper.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/amazon/scraping/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/amazon/scraping/parser.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/amazon/scraping/scraper.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/amazon/services/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/amazon/services/manager.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/amazon/transport/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/amazon/transport/client.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/auth/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/auth/cli.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/auth/commands/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/auth/commands/cli.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/auth/config.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/auth/core/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/auth/core/device_flow.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/auth/core/system_registry.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/auth/core/token_manager.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/auth/domain/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/auth/domain/exceptions.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/auth/exceptions.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/auth/storage/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/auth/storage/credential_store.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/auth/storage/crypto.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/cli.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/config.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/mcp/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/mcp/auth_middleware.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/mcp/cli.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/mcp/context.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/mcp/credential_cache.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/mcp/server.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/mcp/tools/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/mcp/tools/amazon.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/mcp/tools/auth.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/mcp/tools/chatgpt.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/mcp/tools/helpers.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/mcp/tools/query.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/mcp/tools/skills.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/mcp/user_store.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/query/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/query/cli.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/query/client.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/query/commands/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/query/commands/cli.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/query/domain/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/query/domain/exceptions.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/query/domain/models.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/query/exceptions.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/query/manager.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/query/models.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/query/services/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/query/transport/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/query/transport/client.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/cli.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/commands/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/commands/cli.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/detector.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/discovery/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/discovery/detector.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/domain/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/domain/exceptions.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/domain/models.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/exceptions.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/manager.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/models.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/services/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/services/manager.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/sync/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/sync/updater.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/templates/ops-amazon/SKILL.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/templates/ops-amazon/SKILL_MCP.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/templates/ops-amazon/data/VERSION.json +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/templates/ops-auth/SKILL.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/templates/ops-auth/SKILL_MCP.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/templates/ops-auth/data/VERSION.json +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/templates/ops-dataset-query/SKILL.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/templates/ops-dataset-query/data/VERSION.json +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/templates/ops-dataset-query/data/dataset_fields.csv +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/templates/ops-dataset-query/data/datasets.csv +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/templates/ops-dataset-query/data/query_metadata.json +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/templates/ops-dataset-query/references/data-query-service-dev-guide.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/templates/ops-dataset-query/scripts/chart_analyze.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/templates/ops-dataset-query/scripts/chart_map.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/templates/ops-dataset-query/scripts/core.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/templates/ops-dataset-query/scripts/excel_export.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/templates/ops-dataset-query/scripts/query.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/templates/ops-dataset-query/scripts/search.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/templates/ops-dataset-query/scripts/updater.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/templates/ops-mcp/SKILL.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/templates/ops-mcp/data/VERSION.json +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/templates/ops-skills/SKILL.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/templates/ops-skills/data/VERSION.json +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/updater.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/version.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/output/amazon-payload-sample-shell.json +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/output/amazon-payload-sample.json +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/output/amazon-scrape-sample-shell.json +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/output/amazon-scrape-sample.json +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/output/amazon-search-sample-shell.json +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/output/amazon-search-sample.json +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/output/maintenance/host-onboard-smoke-20260423-082206.json +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/output/maintenance/host-onboard-smoke-20260423-082206.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/output/opscli-codebase/SKILL.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/output/opscli-codebase/code_analysis.json +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/output/opscli-codebase/references/config_patterns/config_patterns.json +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/output/opscli-codebase/references/config_patterns/config_patterns.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/output/opscli-codebase/references/dependencies/dependency_graph.dot +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/output/opscli-codebase/references/dependencies/dependency_graph.json +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/output/opscli-codebase/references/dependencies/dependency_graph.mmd +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/output/opscli-codebase/references/dependencies/statistics.json +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/output/opscli-codebase/references/documentation/documentation_index.json +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/output/opscli-codebase/references/documentation/extraction_summary.json +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/output/opscli-codebase/references/documentation/templates/SKILL.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/plugins/super-dev-claude/.claude-plugin/plugin.json +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/plugins/super-dev-claude/README.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/plugins/super-dev-claude/skills/super-dev/SKILL.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/plugins/super-dev-claude/skills/super-dev-seeai/SKILL.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/plugins/super-dev-codex/.codex-plugin/plugin.json +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/plugins/super-dev-codex/README.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/plugins/super-dev-codex/skills/super-dev/SKILL.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/plugins/super-dev-codex/skills/super-dev-seeai/SKILL.md +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/publish.sh +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/scripts/release_preflight.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/amazon/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/amazon/test_cli.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/amazon/test_client.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/amazon/test_manager.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/amazon/test_parser.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/auth/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/auth/test_credential_store.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/auth/test_crypto.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/auth/test_device_flow.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/auth/test_system_registry.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/auth/test_token_manager.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/benchmark_credential_read.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/mcp/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/mcp/conftest.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/mcp/test_cli.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/mcp/test_context.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/mcp/test_credential_cache.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/mcp/test_multi_user_isolation.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/mcp/test_tools.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/mcp/test_user_store.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/query/test_cli.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/query/test_client.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/query/test_manager.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/skills/__init__.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/skills/test_cli.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/skills/test_detector.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/skills/test_manager.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/skills/test_ops_dataset_query_search.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/skills/test_updater.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/test_session_sharing.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/tests/test_version_consistency.py +0 -0
- {aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/uv.lock +0 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# 待归档变更记录
|
|
2
|
+
|
|
3
|
+
## 2026-04-27 opscli - 新增 chart_analyze_mcp.py
|
|
4
|
+
|
|
5
|
+
**变更原因**:为 ops-dataset-query Skill 新增 MCP 无状态模式的图表异常检测脚本,原 `chart_analyze.py` 依赖 `opscli` CLI(subprocess),无法在纯 MCP 环境中使用。
|
|
6
|
+
|
|
7
|
+
**改动点**:
|
|
8
|
+
- 新增 `opscli/skills/templates/ops-dataset-query/scripts/chart_analyze_mcp.py`
|
|
9
|
+
- 移除所有 `subprocess` 调用 `opscli` 的逻辑
|
|
10
|
+
- 数据获取改为纯文件输入(`--input` / `--dc-input`),由 MCP Agent 预先通过 `query_chart` / `query_build_and_run` Tool 获取后传入
|
|
11
|
+
- 移除自动 `upgrade` 兜底,改为返回错误并提示调用 MCP `skills_upgrade`
|
|
12
|
+
- 文件头部添加详细 MCP 调用指南注释(含前置 session 检查、Tool 调用示例、dataComparison 用法)
|
|
13
|
+
- 核心异常检测逻辑(5 类规则)与 `chart_analyze.py` 完全一致
|
|
14
|
+
|
|
15
|
+
**验证结果**:`python -m py_compile` 语法检查通过
|
|
16
|
+
|
|
17
|
+
**影响范围**:不影响现有 `chart_analyze.py`,为 MCP 环境提供独立入口
|
|
18
|
+
|
|
19
|
+
**回滚方式**:删除 `chart_analyze_mcp.py` 即可
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 2026-04-27 opscli - 新增 chart_map_mcp.py / excel_export_mcp.py / query_mcp.py / updater_mcp.py
|
|
24
|
+
|
|
25
|
+
**变更原因**:为 ops-dataset-query Skill 的 4 个核心脚本创建 MCP 无状态模式版本,原脚本均依赖 opscli CLI(subprocess 或直接导入内部模块),无法在纯 MCP 环境中使用。
|
|
26
|
+
|
|
27
|
+
### chart_map_mcp.py
|
|
28
|
+
- 新增 `opscli/skills/templates/ops-dataset-query/scripts/chart_map_mcp.py`
|
|
29
|
+
- 移除 `subprocess` 调用 `opscli query chart`(原 `--uuid`/`--run` 参数)
|
|
30
|
+
- 移除 `_try_upgrade()` 自动升级逻辑,映射失败时提示调用 MCP `skills_upgrade`
|
|
31
|
+
- 数据入口改为纯 `--input` 文件(由 MCP `query_chart` 获取后保存)
|
|
32
|
+
- 保留核心映射函数:`discover_data_dir`、`load_local_index`、`map_chart_queries`、`map_query_results`
|
|
33
|
+
|
|
34
|
+
### excel_export_mcp.py
|
|
35
|
+
- 新增 `opscli/skills/templates/ops-dataset-query/scripts/excel_export_mcp.py`
|
|
36
|
+
- 不再从 `chart_analyze.py` 导入 CLI 函数(`_check_mapping_hit`、`_try_upgrade`、`load_chart_data`)
|
|
37
|
+
- 自行实现文件版 `load_chart_data()` 和 `_check_mapping_hit()`
|
|
38
|
+
- 移除 `--uuid` 和 `--no-auto-upgrade` 参数
|
|
39
|
+
- 保留 Excel 导出核心逻辑:样式、行列类型判断、百分比列识别、列宽自适应
|
|
40
|
+
|
|
41
|
+
### query_mcp.py
|
|
42
|
+
- 新增 `opscli/skills/templates/ops-dataset-query/scripts/query_mcp.py`
|
|
43
|
+
- 原 `query.py` 为纯 opscli 转发脚本(`subprocess` 调用 CLI),MCP 模式下无直接价值
|
|
44
|
+
- 改造为**本地 Payload 构造器**:使用本地 CSV 索引实现字段别名解析(`global_alias > field_name > verbose_name`),构造标准 query payload JSON
|
|
45
|
+
- 支持 `build` 子命令(dimensions/metrics/where/order_by/limit/offset/data_comparison)和 `metadata` 子命令
|
|
46
|
+
- 输出 payload JSON 文件,供 MCP `query_run` Tool 使用
|
|
47
|
+
- 实现字段歧义自动消歧(`_pick_primary_field`,优先选取原始字段)
|
|
48
|
+
|
|
49
|
+
### updater_mcp.py
|
|
50
|
+
- 新增 `opscli/skills/templates/ops-dataset-query/scripts/updater_mcp.py`
|
|
51
|
+
- 移除对 `opscli.skills.models.SkillRecord` 和 `opscli.skills.updater.SkillsUpdater` 的依赖
|
|
52
|
+
- 改为仅检查本地 `VERSION.json` 和数据文件(`datasets.csv`、`dataset_fields.csv`、`query_metadata.json`)完整性的轻量脚本
|
|
53
|
+
- 更新操作提示通过 MCP `skills_upgrade` Tool 执行
|
|
54
|
+
|
|
55
|
+
**验证结果**:`python -m py_compile` 语法检查全部通过(4/4)
|
|
56
|
+
|
|
57
|
+
**影响范围**:不影响现有 CLI 版本脚本,为 MCP 环境提供独立入口
|
|
58
|
+
|
|
59
|
+
**回滚方式**:删除 4 个 `*_mcp.py` 文件即可
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 2026-04-27 opscli - 更新 SKILL_MCP.md 文档
|
|
64
|
+
|
|
65
|
+
**变更原因**:将新增的 5 个 MCP 版本脚本(`query_mcp.py`、`chart_map_mcp.py`、`chart_analyze_mcp.py`、`excel_export_mcp.py`、`updater_mcp.py`)的调用方式及用法补充到 SKILL_MCP.md 中,方便 MCP Agent 查阅。
|
|
66
|
+
|
|
67
|
+
**改动点**:
|
|
68
|
+
- 在 `opscli/skills/templates/ops-dataset-query/SKILL_MCP.md` 的"辅助脚本"章节中新增"MCP 环境辅助脚本"小节
|
|
69
|
+
- 每个脚本包含:功能说明、用法示例、输入来源(对应哪个 MCP Tool)、输出格式
|
|
70
|
+
- `query_mcp.py` 单独说明与 `query_run` Tool 的配合使用流程
|
|
71
|
+
- `chart_analyze_mcp.py` 包含 5 类异常检测规则速查表
|
|
72
|
+
- `excel_export_mcp.py` 包含格式规范说明
|
|
73
|
+
|
|
74
|
+
**影响范围**:仅文档更新,不影响代码
|
|
75
|
+
|
|
76
|
+
**回滚方式**:回退 SKILL_MCP.md 修改即可
|
|
@@ -447,13 +447,25 @@ class QueryManager:
|
|
|
447
447
|
raise InvalidPayloadError(f"无效的 --dimension 定义: {raw}")
|
|
448
448
|
|
|
449
449
|
def _parse_metric_spec(self, raw: str) -> _FieldSpec:
|
|
450
|
-
"""解析指标定义:field_name:aggregation[:alias]。
|
|
450
|
+
"""解析指标定义:field_name[:aggregation[:alias]]。
|
|
451
|
+
|
|
452
|
+
支持三种格式:
|
|
453
|
+
- field_name 公式字段(has_formula_config=1),由 _resolve_metric_expr 自动使用 summary_expression
|
|
454
|
+
- field_name:aggregation 普通聚合字段
|
|
455
|
+
- field_name:aggregation:alias 普通聚合字段 + 自定义别名
|
|
456
|
+
- field_name::alias 公式字段 + 自定义别名(aggregation 留空)
|
|
457
|
+
"""
|
|
451
458
|
parts = [item.strip() for item in raw.split(":")]
|
|
459
|
+
# 仅有字段名:公式字段,aggregation=None 由 _resolve_metric_expr 处理
|
|
460
|
+
if len(parts) == 1 and parts[0]:
|
|
461
|
+
return _FieldSpec(field_name=parts[0], aggregation=None, alias=None)
|
|
452
462
|
if len(parts) == 2 and parts[0] and parts[1]:
|
|
453
463
|
return _FieldSpec(field_name=parts[0], aggregation=parts[1].upper(), alias=None)
|
|
454
|
-
if len(parts) == 3 and parts[0] and parts[
|
|
455
|
-
|
|
456
|
-
|
|
464
|
+
if len(parts) == 3 and parts[0] and parts[2]:
|
|
465
|
+
# 第二段为空时表示公式字段 + 自定义别名(如 gross_profit_percent::gpp)
|
|
466
|
+
agg = parts[1].upper() if parts[1] else None
|
|
467
|
+
return _FieldSpec(field_name=parts[0], aggregation=agg, alias=parts[2])
|
|
468
|
+
raise InvalidPayloadError(f"无效的 --metric 定义: {raw},格式: field_name[:aggregation[:alias]]")
|
|
457
469
|
|
|
458
470
|
def _build_order_by(self, items: list[str], *, alias_map: dict[str, str] | None = None) -> list[dict]:
|
|
459
471
|
"""解析排序定义:expr[:asc|desc],自动映射到 select 输出别名。"""
|
|
@@ -511,8 +523,25 @@ class QueryManager:
|
|
|
511
523
|
raise InvalidPayloadError("where 必须是 JSON 对象")
|
|
512
524
|
return payload
|
|
513
525
|
|
|
526
|
+
# 操作符标准化映射:将 Python/SQL 风格符号转换为服务端语义操作符
|
|
527
|
+
_WHERE_OP_MAP: dict[str, str] = {
|
|
528
|
+
">=": "gte",
|
|
529
|
+
"<=": "lte",
|
|
530
|
+
">": "gt",
|
|
531
|
+
"<": "lt",
|
|
532
|
+
"=": "eq",
|
|
533
|
+
"==": "eq",
|
|
534
|
+
"!=": "neq",
|
|
535
|
+
"<>": "neq",
|
|
536
|
+
}
|
|
537
|
+
|
|
514
538
|
def _parse_where_condition(self, raw: str, *, dataset_alias: str) -> dict:
|
|
515
|
-
"""解析 where 简写条件:field|operator|value_json。
|
|
539
|
+
"""解析 where 简写条件:field|operator|value_json。
|
|
540
|
+
|
|
541
|
+
操作符支持两种写法:
|
|
542
|
+
- 语义操作符(服务端原生):between, eq, neq, gt, gte, lt, lte, in
|
|
543
|
+
- 符号操作符(自动转换):>=, <=, >, <, =, ==, !=, <>
|
|
544
|
+
"""
|
|
516
545
|
parts = raw.split("|", 2)
|
|
517
546
|
if len(parts) != 3:
|
|
518
547
|
raise InvalidPayloadError(f"无效的 --where 定义: {raw}")
|
|
@@ -521,6 +550,9 @@ class QueryManager:
|
|
|
521
550
|
if not field or not operator or not value_raw:
|
|
522
551
|
raise InvalidPayloadError(f"无效的 --where 定义: {raw}")
|
|
523
552
|
|
|
553
|
+
# 将符号操作符标准化为服务端语义操作符
|
|
554
|
+
operator = self._WHERE_OP_MAP.get(operator, operator)
|
|
555
|
+
|
|
524
556
|
expr = field if "." in field else f"{dataset_alias}.{field}"
|
|
525
557
|
try:
|
|
526
558
|
value = json.loads(value_raw)
|
{aukeys_opscli-0.0.22 → aukeys_opscli-0.0.23}/opscli/skills/templates/ops-dataset-query/SKILL_MCP.md
RENAMED
|
@@ -182,6 +182,204 @@ print(format_pct(pct)) # +23.46%
|
|
|
182
182
|
|
|
183
183
|
---
|
|
184
184
|
|
|
185
|
+
### MCP 环境辅助脚本(无状态模式,不依赖 opscli)
|
|
186
|
+
|
|
187
|
+
以下脚本位于 `scripts/` 目录,**专为 MCP 无状态模式设计**,零 opscli 依赖,仅通过文件输入/输出与 MCP Tool 配合。
|
|
188
|
+
|
|
189
|
+
#### `query_mcp.py` — 本地 Payload 构造器
|
|
190
|
+
|
|
191
|
+
使用本地 CSV 索引将简化参数转换为标准 query payload JSON 文件,供 `query_run` 使用。
|
|
192
|
+
|
|
193
|
+
**特点**:
|
|
194
|
+
- 字段别名解析(`global_alias > field_name > verbose_name`)
|
|
195
|
+
- 字段歧义自动消歧(优先选取原始字段)
|
|
196
|
+
- 支持 `data_comparison` 自动构造 `dataComparison` 对象
|
|
197
|
+
|
|
198
|
+
**子命令**:
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
# build:构造 payload 并写入 JSON 文件
|
|
202
|
+
python scripts/query_mcp.py build \
|
|
203
|
+
--dataset sales_order_d \
|
|
204
|
+
--dimension date_id \
|
|
205
|
+
--metric "order_cost:sum:total_cost" \
|
|
206
|
+
--where "date_id|>=|\"2024-01-01\"" \
|
|
207
|
+
--order-by "total_cost:desc" \
|
|
208
|
+
--output /tmp/query.json
|
|
209
|
+
|
|
210
|
+
# 附带 dataComparison 环比
|
|
211
|
+
python scripts/query_mcp.py build \
|
|
212
|
+
--dataset sales_order_d \
|
|
213
|
+
--dimension dept_name \
|
|
214
|
+
--metric "price:sum:total_price" \
|
|
215
|
+
--where "date_id|>=|\"2026-04-01\"" \
|
|
216
|
+
--data-comparison "date_id,2026-03-01,2026-03-22" \
|
|
217
|
+
--output /tmp/query.json
|
|
218
|
+
|
|
219
|
+
# metadata:查看本地数据集 metadata(无需认证)
|
|
220
|
+
python scripts/query_mcp.py metadata --dataset sales_order_d --pretty
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
**输出**(`build` 成功时):
|
|
224
|
+
```json
|
|
225
|
+
{
|
|
226
|
+
"success": true,
|
|
227
|
+
"data": {
|
|
228
|
+
"output": "/tmp/query.json",
|
|
229
|
+
"payload": {
|
|
230
|
+
"tableId": 1,
|
|
231
|
+
"query": {
|
|
232
|
+
"select": [...],
|
|
233
|
+
"groupBy": [...],
|
|
234
|
+
"where": {...},
|
|
235
|
+
"orderBy": [...],
|
|
236
|
+
"limit": 20,
|
|
237
|
+
"offset": 0
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
**配合 MCP Tool 使用**:
|
|
245
|
+
```python
|
|
246
|
+
# 1. 先用 query_mcp.py 构造 payload JSON(无需认证)
|
|
247
|
+
# 2. 再通过 query_run 执行查询(需要认证)
|
|
248
|
+
query_run(
|
|
249
|
+
payload_path="/tmp/query.json",
|
|
250
|
+
session_id="860b0636485b5188a2b9b4ed5210e736"
|
|
251
|
+
)
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
#### `chart_map_mcp.py` — chart 字段映射
|
|
257
|
+
|
|
258
|
+
将 MCP `query_chart` 返回的 chart 结果中的 `global_alias` 映射为可读的 `verbose_name` / `field_name`。
|
|
259
|
+
|
|
260
|
+
**用法**:
|
|
261
|
+
```bash
|
|
262
|
+
# 仅映射查询结构
|
|
263
|
+
python scripts/chart_map_mcp.py --input /tmp/chart_result.json --pretty
|
|
264
|
+
|
|
265
|
+
# 映射查询结构 + 结果行数据列名
|
|
266
|
+
python scripts/chart_map_mcp.py --input /tmp/chart_result.json --map-results --pretty
|
|
267
|
+
|
|
268
|
+
# 映射为 field_name
|
|
269
|
+
python scripts/chart_map_mcp.py --input /tmp/chart_result.json --map-to field_name --pretty
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
**输入来源**:先通过 MCP `query_chart` 获取并保存为 JSON:
|
|
273
|
+
```python
|
|
274
|
+
query_chart(
|
|
275
|
+
chart_uuid="4NQ5f66sU9",
|
|
276
|
+
run=True,
|
|
277
|
+
session_id="860b0636485b5188a2b9b4ed5210e736"
|
|
278
|
+
)
|
|
279
|
+
# → 保存到 /tmp/chart_result.json
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
**输出**:每条 query 添加 `_mapping` 字段,包含 `dataset_alias`、`dataset_info`、`field_mappings`(含 `alias`、`expr`、`mapped_name`、`field_info`)。
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
#### `chart_analyze_mcp.py` — 图表异常检测
|
|
287
|
+
|
|
288
|
+
对 chart 查询结果执行 5 类异常规则检测,输出结构化 JSON 报告。
|
|
289
|
+
|
|
290
|
+
**用法**:
|
|
291
|
+
```bash
|
|
292
|
+
# 仅分析当期数据
|
|
293
|
+
python scripts/chart_analyze_mcp.py --input /tmp/chart_result.json --pretty
|
|
294
|
+
|
|
295
|
+
# 附带 dataComparison 环比数据(增强趋势检测)
|
|
296
|
+
python scripts/chart_analyze_mcp.py \
|
|
297
|
+
--input /tmp/chart_result.json \
|
|
298
|
+
--dc-input /tmp/dc_result.json \
|
|
299
|
+
--pretty
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
**输入来源**:
|
|
303
|
+
- `--input`:MCP `query_chart(chart_uuid="...", run=True)` 结果
|
|
304
|
+
- `--dc-input`:MCP `query_build_and_run(..., data_comparison="...")` 结果
|
|
305
|
+
|
|
306
|
+
**检测规则**:
|
|
307
|
+
| 规则 | 触发条件 |
|
|
308
|
+
|------|---------|
|
|
309
|
+
| `negative_margin` | 毛利率 < 0 |
|
|
310
|
+
| `profit_drop` | 毛利环比下降 > 30% |
|
|
311
|
+
| `revenue_cliff` | 原价金额环比下降 > 20% |
|
|
312
|
+
| `ad_roi_decline` | 广告费上升 + 毛利下降 |
|
|
313
|
+
| `zero_orders` | 当期订单量归零(对比期 > 0) |
|
|
314
|
+
|
|
315
|
+
**输出**:包含 `summary`(汇总统计)、`anomalies`(异常列表,按 severity 排序)、`findings`(人类可读关键发现)。
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|
|
319
|
+
#### `excel_export_mcp.py` — 图表数据 Excel 导出
|
|
320
|
+
|
|
321
|
+
从 chart 查询结果中提取明细、小计、总计数据,按透视表格式写入 Excel。
|
|
322
|
+
|
|
323
|
+
**前置依赖**:`pip install openpyxl`
|
|
324
|
+
|
|
325
|
+
**用法**:
|
|
326
|
+
```bash
|
|
327
|
+
python scripts/excel_export_mcp.py \
|
|
328
|
+
--input /tmp/chart_result.json \
|
|
329
|
+
--output /tmp/output.xlsx \
|
|
330
|
+
--sheet-name 销售数据
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
**格式规范**:
|
|
334
|
+
- 表头:蓝色背景(4472C4)白色粗体字,冻结首行
|
|
335
|
+
- 明细行:数值列千分位格式,百分比列 0.00% 格式
|
|
336
|
+
- 小计行:灰色背景(D9E2F3),粗体字
|
|
337
|
+
- 总计行:深蓝背景白色粗体字
|
|
338
|
+
- 负值:红色字体(FF0000)
|
|
339
|
+
- 列宽:自适应(最大 50 字符)
|
|
340
|
+
|
|
341
|
+
**输出**:
|
|
342
|
+
```json
|
|
343
|
+
{
|
|
344
|
+
"success": true,
|
|
345
|
+
"output": "/tmp/output.xlsx",
|
|
346
|
+
"rows": 150,
|
|
347
|
+
"columns": ["日期", "部门", "销售额", "订单量"]
|
|
348
|
+
}
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
#### `updater_mcp.py` — 本地状态检查
|
|
354
|
+
|
|
355
|
+
检查本地数据文件完整性,更新操作需通过 MCP `skills_upgrade` 执行。
|
|
356
|
+
|
|
357
|
+
**用法**:
|
|
358
|
+
```bash
|
|
359
|
+
python scripts/updater_mcp.py --check --pretty
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
**输出**:
|
|
363
|
+
```json
|
|
364
|
+
{
|
|
365
|
+
"success": true,
|
|
366
|
+
"data": {
|
|
367
|
+
"data_dir": "/Users/mask/.config/opencode/skills/ops-dataset-query/data",
|
|
368
|
+
"version": "v1.2.3",
|
|
369
|
+
"healthy": true,
|
|
370
|
+
"files": {
|
|
371
|
+
"VERSION.json": {"exists": true, "version": "v1.2.3"},
|
|
372
|
+
"datasets.csv": {"exists": true, "size": 12345},
|
|
373
|
+
"dataset_fields.csv": {"exists": true, "size": 67890},
|
|
374
|
+
"query_metadata.json": {"exists": true, "size": 4567}
|
|
375
|
+
}
|
|
376
|
+
},
|
|
377
|
+
"mcp_hint": "如需更新,调用 skills_upgrade(name='ops-dataset-query')"
|
|
378
|
+
}
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
---
|
|
382
|
+
|
|
185
383
|
## MCP Tool 调用参考
|
|
186
384
|
|
|
187
385
|
### `query_metadata`
|