@vaia-lab/sdk 0.3.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -772,207 +772,6 @@ function toManifest(config) {
772
772
  };
773
773
  }
774
774
 
775
- // src/agent-mount.ts
776
- var HANDEIA_POR_DEFECTO = "https://handeia.com";
777
- var RUTA_TURNO = "/api/agent/space";
778
- var CSS = `
779
- .hdi-agent-root{position:fixed;z-index:2147483000;bottom:20px;right:20px;font-family:ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif}
780
- .hdi-agent-orb{width:44px;height:44px;border-radius:9999px;border:0;cursor:pointer;background:#000;color:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 10px 30px -6px rgba(0,0,0,.4);transition:transform .15s}
781
- .hdi-agent-orb:hover{transform:scale(1.05)}
782
- .hdi-agent-orb:active{transform:scale(.95)}
783
- .hdi-agent-panel{position:absolute;bottom:56px;right:0;width:min(360px,calc(100vw - 40px));background:#fff;color:#111;border:1px solid rgba(0,0,0,.09);border-radius:18px;box-shadow:0 24px 60px -18px rgba(0,0,0,.32);overflow:hidden;display:flex;flex-direction:column;max-height:min(60vh,460px)}
784
- .hdi-agent-head{display:flex;align-items:center;gap:8px;padding:12px 14px;border-bottom:1px solid rgba(0,0,0,.06);font-size:12.5px;font-weight:600}
785
- .hdi-agent-dot{width:7px;height:7px;border-radius:9999px;background:#8b5cf6}
786
- .hdi-agent-log{flex:1;overflow-y:auto;padding:12px 14px;display:flex;flex-direction:column;gap:10px;font-size:13px;line-height:1.55}
787
- .hdi-agent-turn{white-space:pre-wrap}
788
- .hdi-agent-q{font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:rgba(0,0,0,.34)}
789
- .hdi-agent-form{display:flex;gap:8px;padding:10px 12px;border-top:1px solid rgba(0,0,0,.06)}
790
- .hdi-agent-input{flex:1;border:1px solid rgba(0,0,0,.12);border-radius:10px;padding:8px 10px;font:inherit;font-size:13px;outline:none}
791
- .hdi-agent-input:focus{border-color:rgba(0,0,0,.34)}
792
- .hdi-agent-send{border:0;border-radius:10px;padding:0 12px;background:#000;color:#fff;cursor:pointer;font-size:12.5px}
793
- .hdi-agent-confirm{display:flex;gap:8px;margin-top:4px}
794
- .hdi-agent-btn{border:1px solid rgba(0,0,0,.14);background:#fff;border-radius:9999px;padding:5px 12px;font-size:12px;cursor:pointer}
795
- .hdi-agent-btn-primary{background:#000;color:#fff;border-color:#000}
796
- @media (prefers-color-scheme:dark){
797
- .hdi-agent-orb{background:#fff;color:#000}
798
- .hdi-agent-panel{background:#171717;color:#f5f5f5;border-color:rgba(255,255,255,.13)}
799
- .hdi-agent-head,.hdi-agent-form{border-color:rgba(255,255,255,.1)}
800
- .hdi-agent-q{color:rgba(255,255,255,.5)}
801
- .hdi-agent-input{background:transparent;color:inherit;border-color:rgba(255,255,255,.16)}
802
- .hdi-agent-send{background:#fff;color:#000}
803
- .hdi-agent-btn{background:transparent;color:inherit;border-color:rgba(255,255,255,.18)}
804
- .hdi-agent-btn-primary{background:#fff;color:#000}
805
- }`;
806
- function el(tag, cls, text) {
807
- const n = document.createElement(tag);
808
- if (cls) n.className = cls;
809
- if (text !== void 0) n.textContent = text;
810
- return n;
811
- }
812
- function mountAgent(opts) {
813
- if (typeof document === "undefined") {
814
- throw new Error("[@vaia-lab/sdk] mountAgent solo corre en el navegador.");
815
- }
816
- const base = (opts.handeiaUrl ?? HANDEIA_POR_DEFECTO).replace(/\/$/, "");
817
- const contenedor = opts.container ?? document.body;
818
- const previo = contenedor.querySelector(".hdi-agent-root");
819
- if (previo) previo.remove();
820
- if (!document.getElementById("hdi-agent-css")) {
821
- const estilo = el("style");
822
- estilo.id = "hdi-agent-css";
823
- estilo.textContent = CSS;
824
- document.head.appendChild(estilo);
825
- }
826
- const raiz = el("div", "hdi-agent-root");
827
- const orbe = el("button", "hdi-agent-orb");
828
- orbe.type = "button";
829
- orbe.setAttribute("aria-label", "Abrir asistente de Handeia");
830
- orbe.textContent = "\u2726";
831
- const panel = el("div", "hdi-agent-panel");
832
- panel.hidden = true;
833
- panel.setAttribute("role", "dialog");
834
- panel.setAttribute("aria-label", "Asistente de Handeia");
835
- const cabeza = el("div", "hdi-agent-head");
836
- cabeza.appendChild(el("span", "hdi-agent-dot"));
837
- cabeza.appendChild(el("span", void 0, "Handeia"));
838
- const registro = el("div", "hdi-agent-log");
839
- if (opts.greeting) registro.appendChild(el("div", "hdi-agent-turn", opts.greeting));
840
- const forma = el("form", "hdi-agent-form");
841
- const entrada = el("input", "hdi-agent-input");
842
- entrada.type = "text";
843
- entrada.placeholder = "Preg\xFAntale a Handeia\u2026";
844
- entrada.autocomplete = "off";
845
- const enviar = el("button", "hdi-agent-send", "Enviar");
846
- enviar.type = "submit";
847
- forma.append(entrada, enviar);
848
- panel.append(cabeza, registro, forma);
849
- raiz.append(panel, orbe);
850
- contenedor.appendChild(raiz);
851
- const historial = [];
852
- const decir = (texto, clase = "hdi-agent-turn") => {
853
- const n = el("div", clase, texto);
854
- registro.appendChild(n);
855
- registro.scrollTop = registro.scrollHeight;
856
- return n;
857
- };
858
- async function turno(mensaje, actionResult) {
859
- let context;
860
- try {
861
- context = await opts.getContext?.();
862
- } catch {
863
- context = void 0;
864
- }
865
- let res;
866
- try {
867
- res = await fetch(`${base}${RUTA_TURNO}`, {
868
- method: "POST",
869
- // La identidad va en la cookie de sesión de Handeia. El espacio nunca
870
- // toca ni ve el token del usuario.
871
- credentials: "include",
872
- headers: { "Content-Type": "application/json; charset=utf-8" },
873
- body: JSON.stringify({
874
- protocol: AGENT_PROTOCOL_VERSION,
875
- capId: opts.capabilityId,
876
- message: mensaje,
877
- context,
878
- actions: opts.actions ?? [],
879
- history: historial.slice(-12),
880
- actionResult
881
- })
882
- });
883
- } catch {
884
- decir("No pude comunicarme con Handeia. Revisa tu conexi\xF3n.");
885
- return;
886
- }
887
- let data;
888
- try {
889
- data = await res.json();
890
- } catch {
891
- decir("Handeia respondi\xF3 algo que no pude leer.");
892
- return;
893
- }
894
- if (!res.ok || data.ok === false) {
895
- decir(
896
- data.error === "no_autenticado" ? "Inicia sesi\xF3n en Handeia para usar el asistente." : data.error === "espacio_no_instalado" ? "Este espacio no est\xE1 instalado en tu Handeia." : "Handeia no pudo responder ahora mismo."
897
- );
898
- return;
899
- }
900
- if (data.text) {
901
- decir(data.text);
902
- historial.push({ role: "agent", text: data.text });
903
- }
904
- if (!data.action) return;
905
- if (!opts.onAction) {
906
- decir("Esto requiere una acci\xF3n que este espacio todav\xEDa no sabe ejecutar.");
907
- return;
908
- }
909
- const ejecutar = async () => {
910
- let resultado;
911
- try {
912
- resultado = await opts.onAction(data.action.name, data.action.args ?? {});
913
- } catch (e) {
914
- resultado = { action: data.action.name, ok: false, error: e instanceof Error ? e.message : "fall\xF3" };
915
- }
916
- await turno(mensaje, resultado);
917
- };
918
- if (data.confirm) {
919
- const fila = el("div", "hdi-agent-confirm");
920
- const si = el("button", "hdi-agent-btn hdi-agent-btn-primary", "Hacerlo");
921
- const no = el("button", "hdi-agent-btn", "Cancelar");
922
- si.type = "button";
923
- no.type = "button";
924
- si.onclick = () => {
925
- fila.remove();
926
- void ejecutar();
927
- };
928
- no.onclick = () => {
929
- fila.remove();
930
- decir("Cancelado.");
931
- };
932
- fila.append(si, no);
933
- registro.appendChild(fila);
934
- registro.scrollTop = registro.scrollHeight;
935
- return;
936
- }
937
- await ejecutar();
938
- }
939
- forma.onsubmit = async (e) => {
940
- e.preventDefault();
941
- const texto = entrada.value.trim();
942
- if (!texto) return;
943
- entrada.value = "";
944
- decir(texto, "hdi-agent-q");
945
- historial.push({ role: "user", text: texto });
946
- enviar.disabled = true;
947
- try {
948
- await turno(texto);
949
- } finally {
950
- enviar.disabled = false;
951
- entrada.focus();
952
- }
953
- };
954
- const abrir = () => {
955
- panel.hidden = false;
956
- entrada.focus();
957
- };
958
- const cerrar = () => {
959
- panel.hidden = true;
960
- };
961
- orbe.onclick = () => panel.hidden ? abrir() : cerrar();
962
- const alTeclear = (e) => {
963
- if (e.key === "Escape") cerrar();
964
- };
965
- document.addEventListener("keydown", alTeclear);
966
- return {
967
- open: abrir,
968
- close: cerrar,
969
- destroy: () => {
970
- document.removeEventListener("keydown", alTeclear);
971
- raiz.remove();
972
- }
973
- };
974
- }
975
-
976
775
  // src/capabilities.ts
977
776
  async function conAutoridad(tools, call, ejecutar) {
978
777
  const tool = tools.find((t) => t.name === call.name);
@@ -1266,7 +1065,6 @@ export {
1266
1065
  httpTransport,
1267
1066
  local,
1268
1067
  mcp,
1269
- mountAgent,
1270
1068
  requiresApproval,
1271
1069
  toMCPTool,
1272
1070
  toMCPTools,