Add app pricing comparison, global keyword list, more mcp tools#8
Open
akshaynexus wants to merge 9 commits into
Open
Add app pricing comparison, global keyword list, more mcp tools#8akshaynexus wants to merge 9 commits into
akshaynexus wants to merge 9 commits into
Conversation
- New pricing comparison feature: AppPricingSnapshot model, AppPricingPersistence, AppPricingView, and per-storefront price fetching with USD/tax-adjusted comparisons - Migrate SwiftData schema to OpenASOSchemaV2 - Expand MCP server with workspace/app resources, global keyword CRUD, keyword track mutations, pricing comparison, ranking and rating history tools - Add rankingDifficulty metrics source, batched storefront popularity fetching, and reworked ranking refresh coordination Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Fetch storefront reviews with a 6-wide task group instead of a serial per-country loop - Run keywords and ratings/reviews refreshes concurrently; overlap ratings and reviews fetch legs - Keep the ranking fetch window saturated during persistence flushes - Dedup daily stale-track refreshes by query key so shared keywords are fetched once - Batch keyword popularity persistence into one write per storefront batch; raise storefront concurrency to 4; retry transient rate-limit/network errors with backoff; fetch >100-term chunks in parallel - Debounce keyword search and split heavy row materialization from in-memory filters in AppKeywordsView - Cache reusable-keyword JSON, hoist count grouping out of the sort comparator, and batch KeywordQuery resolution in AddKeywordsSheet - Move ranking-list sheet enrichment joins into a single background read - Merge redundant background reads in MCP refreshKeywordMetrics - Update tests for schema V2 migration plan and concurrent chunk ordering Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ng to apps - Global keywords are now plain reusable terms (no per-country/device copies); legacy per-storefront entries collapse to unique terms on load - Applying global keywords in Add Keywords fans them out across the currently selected countries and device - Remove ensureGlobalKeywordTracks so refreshes never silently add global keywords to an app; they are only added explicitly - Manage Keyword Lists edits global terms without country/device pickers - Simplify MCP global keyword tools (list/add/update) to term-only Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- New Apply to Apps sheet on the Global keyword list: adds every global keyword to all tracked apps for chosen countries and device - Replace mode removes keywords in the selected countries/device that are not in the global list (clears their ranking history), enabling a clean reset of legacy US-only tracks - Keyword queries resolved with one batch fetch shared across apps Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Extract the global keyword list editor into a shared GlobalKeywordListEditorView - New sidebar footer entry opens the global list manager directly, without going through an app - Per-app Keyword Lists sheet embeds the same editor on its Global tab; its local scope logic is now local-only Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…market insights - Global keyword add/edit/delete/reset (UI and MCP) now reconciles every tracked app's keyword tracks automatically across all bundled storefronts; sync-created tracks carry a marker note so manual keywords are never touched - New tracks get rankings and metrics fetched in the background through one deduplicated coordinator pass (shared keyword+market queries fetched once, not per app), with sidebar progress - Remove the manual Apply to Apps sheet, now obsolete - New Market Insights sheet in the keywords toolbar: per keyword, best and worst ranking market, spread, average rank, and ranked-market coverage - New MCP tool list_keyword_market_rankings exposing the same best/worst market data per keyword; global keyword mutation results now include a sync summary Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
SwiftData traps with "Couldn't find \TrackedApp.name" when a FetchDescriptor or @query sorts on TrackedApp.name, which is computed rather than a schema field. Sort GlobalKeywordSync's app fetch and GlobalKeywordsSheet's query by appStoreID instead, and add a GlobalKeywordSync regression test covering cross-storefront insert and removal through the background store. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…etch The sync's ranking fetch ran on the main-context coordinator while user-triggered app refreshes persisted the same unique-keyed crawls on the background context; CoreData's merge policy throws on the resulting to-many union merge (NSMergePolicy _mergeToManyUnionRelationships) and aborts. Route the post-sync fetch through the AppDetailRefreshService queue as one combined request instead: all persistence stays serialized on the background store, shared keyword+market queries across apps are fetched once, and the sidebar shows a single "Global keywords" progress card. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
TODO : Write pr desciption detailing features/changes added
NOTE: This works but is inefficient and buggy specially the global keyword list
wip to fix these issues right now