Ignore dormant apps: per-app and per-store 'ignored' in the app list; apps ignore/unignore, watch, ws and apps list skip them; MCP tools

This commit is contained in:
CRTkafa 2026-10-23 00:57:42 +08:00
parent 75bf62e125
commit 13b91dd423
7 changed files with 278 additions and 30 deletions

View file

@ -321,6 +321,17 @@ export const TOOLS: ToolDef[] = [
props: { dir: { type: 'string', pattern: '^(?!/)(?!.*\\.\\.)(?!.*,/)[A-Za-z0-9._ /,-]{1,400}$', description: 'fastlane folder(s) relative to the project, comma-separated (default: fastlane, ios/fastlane, android/fastlane)' },
profile: { type: 'string', enum: ['app', 'game', 'subscription-app'], description: 'Default: game for the GAMES category, else app' } },
args: i => [...opt('dir', i.dir), ...opt('profile', i.profile)] },
{ name: 'apps_ignore', title: 'Ignore an app', command: ['apps', 'ignore'], write: true, network: false, idempotent: true,
description: 'Ignores one app in the storebound app list (~/.storebound/projects.json), the whole app or one store side. Ignored apps are skipped by watch, events and portfolio reads and hidden from the desktop lists. Storebound-side visibility only: nothing changes in App Store Connect or Google Play (no removal from sale). dry_run shows the change.',
props: { app: { type: 'string', pattern: '^[A-Za-z0-9][A-Za-z0-9 ._:/\\-]{0,200}$', description: 'App name, id, folder, apple:<app id> or play:<package>' }, store: { type: 'string', enum: ['apple', 'play'], description: 'Only this store side (default: the whole app)' } },
required: ['app'], args: i => [String(i.app), ...opt('store', i.store)] },
{ name: 'apps_unignore', title: 'Restore an ignored app', command: ['apps', 'unignore'], write: true, network: false, idempotent: true,
description: 'Restores (stops ignoring) one app in the storebound app list (~/.storebound/projects.json), the whole app or one store side. Ignored apps are skipped by watch, events and portfolio reads and hidden from the desktop lists. Storebound-side visibility only: nothing changes in App Store Connect or Google Play (no removal from sale). dry_run shows the change.',
props: { app: { type: 'string', pattern: '^[A-Za-z0-9][A-Za-z0-9 ._:/\\-]{0,200}$', description: 'App name, id, folder, apple:<app id> or play:<package>' }, store: { type: 'string', enum: ['apple', 'play'], description: 'Only this store side (default: the whole app)' } },
required: ['app'], args: i => [String(i.app), ...opt('store', i.store)] },
{ name: 'apps_folders', title: 'App list of this machine', command: ['apps', 'folders'], write: false, network: false,
description: 'Offline: the app folders and store-only apps of this machine (~/.storebound/projects.json) with which are ignored (whole app or per store side).',
props: { json: { type: 'boolean', default: true } }, args: () => ['--json'] },
{ name: 'workspace_list', title: 'Workspace apps', command: ['ws', 'list'], write: false, network: false,
description: 'Offline: the apps of the storebound.workspace.json above the project (app folders from its globs, store-only apps from `ws apps import`), paired across iOS and Android by the desktop\'s rules, with studios and accounts (credential profile names and whether their keys are there; never a key).',
props: { all: { type: 'boolean', default: false, description: 'Also the ignored apps' }, json: { type: 'boolean', default: false } },