UNPKG

mahler

Version:

A automated task composer and HTN based planner for building autonomous system agents

121 lines 4.11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NullLogger = void 0; exports.readableTrace = readableTrace; const agent_1 = require("../agent"); const planner_1 = require("../planner"); const distance_1 = require("../distance"); const DAG = require("../dag"); exports.NullLogger = { debug: () => { /* noop*/ }, info: () => { /* noop*/ }, warn: () => { /* noop*/ }, error: () => { /* noop*/ }, }; /** * Create a human readable tracer of events during agent runtime */ function readableTrace(logger) { const log = { ...exports.NullLogger, ...logger, }; const toLog = (o) => { if (o.op === 'create') { return ['create', o.path, 'with value', o.target]; } if (o.op === 'update') { return ['update', o.path, 'from', o.source, 'to', o.target]; } return ['delete', o.path]; }; return function (e) { switch (e.event) { case 'start': { log.info('applying new target state'); return; } case 'find-plan': log.info('looking for a plan'); { // avoid no-case-declarations const changes = (0, distance_1.diff)(e.state, e.target); log.debug(`pending changes:${changes.length > 0 ? '' : ' none'}`); changes.map(toLog).forEach((change) => { log.debug('-', ...change); }); } break; case 'plan-found': log.info(`plan found after ${e.stats.iterations} iterations in ${e.stats.time.toFixed(1)}ms`); log.debug('will execute the following actions:'); DAG.toString(e.start, (a) => a.action.description) .split('\n') .map((action) => { log.debug(action); }); break; case 'plan-not-found': if (e.cause !== planner_1.SearchFailed) { log.error('no plan found, reason:', e.cause.message ?? e.cause); } else { log.warn('no plan found'); } break; case 'plan-timeout': log.error(`planning timed-out after ${e.timeout}(ms), this might be a bug`); return; case 'plan-executed': { log.info('plan executed successfully'); return; } case 'action-condition-failed': { log.warn(`${e.action.description}: condition failed`); return; } case 'action-start': { log.info(`${e.action.description}: running ...`); return; } case 'action-success': { log.info(`${e.action.description}: success`); return; } case 'action-failure': { log.error(`${e.action.description}: failed`, e.cause); return; } case 'backoff': { log.debug(`waiting ${e.delayMs / 1000}s before re - planning`); return; } case 'success': { log.info('nothing else to do: target state reached'); return; } case 'failure': if (e.cause instanceof agent_1.Failure) { log.error(`aborting target apply after ${e.cause.tries} failed attempts`); } else if (e.cause instanceof agent_1.Stopped) { log.warn('plan execution cancelled'); } else { log.error(`unknown error occured while applying target state:`, e?.message ?? e); } break; default: break; } }; } //# sourceMappingURL=logger.js.map