fivetech commited on
Commit
7c59fea
·
verified ·
1 Parent(s): 217f918

Update core/commands.mjs

Browse files
Files changed (1) hide show
  1. core/commands.mjs +3 -2
core/commands.mjs CHANGED
@@ -69,11 +69,12 @@ export const APCommands = {
69
  if(/producci|fabricaci|materiales|taller/i.test(req))ctx.production=AP.query('SELECT * FROM production_jobs ORDER BY due_at');
70
  if(/planific|tareas|prioridad|calendario|programaci/i.test(req))ctx.planning=AP.query('SELECT * FROM planning_tasks ORDER BY due_at');
71
  let webSources='';
72
- if(!quiet){AP.append('🔎 Buscando contexto web…','ai');try{const web=await APCommands.webSearch(req);ctx.web=web;webSources=web.map(x=>'· '+x.title+' · '+x.url).join('\n');}catch(e){webSources='Búsqueda web no disponible: '+String(e&&e.message||e).slice(0,140)+'. La respuesta se basa solo en los datos locales.';}}
 
73
  const messages=[{role:'system',content:APCorePrompts[who]},{role:'user',content:'Modo actual: '+AP.mode+'. Datos vigentes: '+JSON.stringify(ctx)+'\nSolicitud: '+text}];
74
  let m=await AP.modelCall(messages,who==='ALPHA'?tools:undefined);
75
  if(who==='ALPHA'&&m.tool_calls?.length){messages.push(m);for(const c of m.tool_calls.slice(0,2)){let result;try{if(c.function.name!=='proponer_reposicion')throw Error('Herramienta no admitida');result=await AP.command({cmd:'propuesta_crear',payload:JSON.parse(c.function.arguments),actor:who});}catch(e){result='Error: '+e.message;}messages.push({role:'tool',tool_call_id:c.id,content:result});}m=await AP.modelCall(messages);}
76
- if(!quiet){AP.append(m.content||'No hubo respuesta del agente.','ai');AP.append('📚 Fuentes\n'+webSources,'ai');}AP.audit(who,'analisis_completado','agent',who,{model:AP.activeModel||AP.model});if(!quiet)AP.audit(who,'respuesta_modelo','chat',who,{text:String(m.content||'').slice(0,500)});await AP.persist();AP.render();AP.setAgentState(st,'Disponible',false);AP.note('Análisis finalizado · '+AP.query("SELECT count(*) AS n FROM approval_queue WHERE status='pendiente'")[0].n+' pendientes');
77
  }catch(e){if(!quiet)AP.append('No se pudo contactar al agente. Tus datos y propuestas locales siguen disponibles.','ai');if(!quiet)AP.audit(who,'chat_sin_respuesta','chat',who,{error:String(e&&e.message||e).slice(0,200)});AP.setAgentState(st,'Sin respuesta',false);AP.note('Agente no disponible: '+e.message,true);}finally{AP.busy=false;}
78
  },
79
  async cycle(){
 
69
  if(/producci|fabricaci|materiales|taller/i.test(req))ctx.production=AP.query('SELECT * FROM production_jobs ORDER BY due_at');
70
  if(/planific|tareas|prioridad|calendario|programaci/i.test(req))ctx.planning=AP.query('SELECT * FROM planning_tasks ORDER BY due_at');
71
  let webSources='';
72
+ const webOn=!quiet&&localStorage.getItem('adaptapro-web-search')==='true';
73
+ if(webOn){AP.append('🔎 Buscando contexto web en Tavily y Wikipedia…','ai');try{const web=await APCommands.webSearch(req);ctx.web=web;webSources=web.map(x=>'· '+x.title+' · '+x.url).join('\n');}catch(e){webSources='Búsqueda web no disponible: '+String(e&&e.message||e).slice(0,140)+'. La respuesta se basa solo en los datos locales.';}}
74
  const messages=[{role:'system',content:APCorePrompts[who]},{role:'user',content:'Modo actual: '+AP.mode+'. Datos vigentes: '+JSON.stringify(ctx)+'\nSolicitud: '+text}];
75
  let m=await AP.modelCall(messages,who==='ALPHA'?tools:undefined);
76
  if(who==='ALPHA'&&m.tool_calls?.length){messages.push(m);for(const c of m.tool_calls.slice(0,2)){let result;try{if(c.function.name!=='proponer_reposicion')throw Error('Herramienta no admitida');result=await AP.command({cmd:'propuesta_crear',payload:JSON.parse(c.function.arguments),actor:who});}catch(e){result='Error: '+e.message;}messages.push({role:'tool',tool_call_id:c.id,content:result});}m=await AP.modelCall(messages);}
77
+ if(!quiet){AP.append(m.content||'No hubo respuesta del agente.','ai');if(webOn)AP.append('📚 Fuentes\n'+webSources,'ai');}AP.audit(who,'analisis_completado','agent',who,{model:AP.activeModel||AP.model});if(!quiet)AP.audit(who,'respuesta_modelo','chat',who,{text:String(m.content||'').slice(0,500)});await AP.persist();AP.render();AP.setAgentState(st,'Disponible',false);AP.note('Análisis finalizado · '+AP.query("SELECT count(*) AS n FROM approval_queue WHERE status='pendiente'")[0].n+' pendientes');
78
  }catch(e){if(!quiet)AP.append('No se pudo contactar al agente. Tus datos y propuestas locales siguen disponibles.','ai');if(!quiet)AP.audit(who,'chat_sin_respuesta','chat',who,{error:String(e&&e.message||e).slice(0,200)});AP.setAgentState(st,'Sin respuesta',false);AP.note('Agente no disponible: '+e.message,true);}finally{AP.busy=false;}
79
  },
80
  async cycle(){