{"version":3,"file":"ai-model/workflows/planning/locate-normalization.mjs","sources":["../../../../../src/ai-model/workflows/planning/locate-normalization.ts"],"sourcesContent":["import { findAllMidsceneLocatorField } from '@/common';\nimport type { DeviceAction } from '@/device';\nimport type { PlanningAction } from '@/types';\nimport { getDebug } from '@midscene/shared/logger';\nimport { assert } from '@midscene/shared/utils';\nimport type {\n  LocateResultAdapter,\n  LocateResultContext,\n} from '../../shared/model-locate-result/types';\n\nconst debug = getDebug('planning');\n\nexport function normalizePlanningActionLocateFields(\n  actions: PlanningAction[],\n  {\n    actionSpace,\n    includeLocateInPlanning,\n    locateResultAdapter,\n    locateResultContext,\n  }: {\n    actionSpace: DeviceAction[];\n    includeLocateInPlanning: boolean;\n    locateResultAdapter?: LocateResultAdapter;\n    locateResultContext: LocateResultContext;\n  },\n): void {\n  actions.forEach((action) => {\n    const actionInActionSpace = actionSpace.find(\n      (actionInSpace) => actionInSpace.name === action.type,\n    );\n    if (!actionInActionSpace) {\n      debug('skip locate normalization for action outside actionSpace', action);\n      return;\n    }\n\n    debug('actionInActionSpace matched', actionInActionSpace);\n    const locateFields = actionInActionSpace\n      ? findAllMidsceneLocatorField(actionInActionSpace.paramSchema)\n      : [];\n\n    debug('locateFields', locateFields);\n\n    locateFields.forEach((field) => {\n      const locateResult = action.param?.[field];\n      if (!locateResult) {\n        return;\n      }\n\n      if (!includeLocateInPlanning) {\n        if (typeof locateResult === 'object') {\n          // In prompt-only planning mode, ignore any accidental coordinates from the model.\n          action.param[field] = { prompt: locateResult.prompt };\n        }\n        return;\n      }\n\n      assert(\n        locateResultAdapter,\n        'planning locate normalization requires a locate result adapter',\n      );\n      action.param[field] = {\n        ...locateResult,\n        locatedPixelBbox: locateResultAdapter.adaptPlanningParamToPixelBbox(\n          locateResult,\n          locateResultContext,\n        ),\n      };\n    });\n  });\n}\n"],"names":["debug","getDebug","normalizePlanningActionLocateFields","actions","actionSpace","includeLocateInPlanning","locateResultAdapter","locateResultContext","action","actionInActionSpace","actionInSpace","locateFields","findAllMidsceneLocatorField","field","locateResult","assert"],"mappings":";;;AAUA,MAAMA,QAAQC,SAAS;AAEhB,SAASC,oCACdC,OAAyB,EACzB,EACEC,WAAW,EACXC,uBAAuB,EACvBC,mBAAmB,EACnBC,mBAAmB,EAMpB;IAEDJ,QAAQ,OAAO,CAAC,CAACK;QACf,MAAMC,sBAAsBL,YAAY,IAAI,CAC1C,CAACM,gBAAkBA,cAAc,IAAI,KAAKF,OAAO,IAAI;QAEvD,IAAI,CAACC,qBAAqB,YACxBT,MAAM,4DAA4DQ;QAIpER,MAAM,+BAA+BS;QACrC,MAAME,eAAeF,sBACjBG,4BAA4BH,oBAAoB,WAAW,IAC3D,EAAE;QAENT,MAAM,gBAAgBW;QAEtBA,aAAa,OAAO,CAAC,CAACE;YACpB,MAAMC,eAAeN,OAAO,KAAK,EAAE,CAACK,MAAM;YAC1C,IAAI,CAACC,cACH;YAGF,IAAI,CAACT,yBAAyB;gBAC5B,IAAI,AAAwB,YAAxB,OAAOS,cAETN,OAAO,KAAK,CAACK,MAAM,GAAG;oBAAE,QAAQC,aAAa,MAAM;gBAAC;gBAEtD;YACF;YAEAC,OACET,qBACA;YAEFE,OAAO,KAAK,CAACK,MAAM,GAAG;gBACpB,GAAGC,YAAY;gBACf,kBAAkBR,oBAAoB,6BAA6B,CACjEQ,cACAP;YAEJ;QACF;IACF;AACF"}