| 256 | await self.task(abilities, obfuscator='plain-text', deadman=True) |
| 257 | |
| 258 | async def task(self, abilities, obfuscator, facts=(), deadman=False): |
| 259 | if not self.executors: |
| 260 | return [] |
| 261 | |
| 262 | bps = BasePlanningService() |
| 263 | preferred_executor_name = self._get_preferred_executor_name() |
| 264 | |
| 265 | links = [] |
| 266 | for ability in await self.capabilities(abilities): |
| 267 | executors = ability.find_executors(self.executors, self.platform) |
| 268 | executors = sorted(executors, key=lambda ex: ex.name == preferred_executor_name, reverse=True) |
| 269 | |
| 270 | for executor in executors: |
| 271 | ex_links = [Link.load(dict(command=self.encode_string(executor.test), paw=self.paw, ability=ability, |
| 272 | executor=executor, deadman=deadman))] |
| 273 | valid_links = await bps.add_test_variants(links=ex_links, agent=self, facts=facts, trim_unset_variables=True) |
| 274 | if valid_links: |
| 275 | links.extend(valid_links) |
| 276 | break |
| 277 | |
| 278 | links = await bps.obfuscate_commands(self, obfuscator, links) |
| 279 | knowledge_svc_handle = BaseService.get_service('knowledge_svc') |
| 280 | for fact in facts: |
| 281 | fact.source = self.paw |
| 282 | fact.origin_type = OriginType.SEEDED |
| 283 | await knowledge_svc_handle.add_fact(fact) |
| 284 | self.links.extend(links) |
| 285 | return links |
| 286 | |
| 287 | async def all_facts(self): |
| 288 | knowledge_svc_handle = BaseService.get_service('knowledge_svc') |