@ghostystudio/cli 0.31.0 → 0.32.0
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/README.md +1 -0
- package/dist/index.js +71 -20
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -73,6 +73,7 @@ ghosty schedule rm <id> <schedule-id>
|
|
|
73
73
|
ghosty schedule add|ls|rm <id> … --teams <workspace>#<room>[/<thread-id>] # in a Teams room/thread: it answers there as if mentioned
|
|
74
74
|
|
|
75
75
|
ghosty me files ls|get|upload|rm [--q TEXT] [--kind image|video|audio|document|other] [--cursor C]
|
|
76
|
+
ghosty me memories ls|add|edit|rm [--agent A]
|
|
76
77
|
ghosty conversations archive|rm <id> --kind test|channel [--before 7d] [--dry-run]
|
|
77
78
|
ghosty agents docs dedupe [--dry-run] # your account: merge documents with the same content
|
|
78
79
|
# Ghosty staff
|
package/dist/index.js
CHANGED
|
@@ -8055,6 +8055,16 @@ var SERVER_MESSAGES = [
|
|
|
8055
8055
|
["~ WabaLink {}: s\xF3lo anuncios {} \u2192 {}", "~ WabaLink {}: ads only {} \u2192 {}"],
|
|
8056
8056
|
[" s\xF3lo anuncios: on (s\xF3lo abre tarjeta lo que viene de un anuncio)", " ads only: on (only what comes from an ad opens a card)"],
|
|
8057
8057
|
[" s\xF3lo anuncios: off", " ads only: off"],
|
|
8058
|
+
// — Memorias e hilo largo
|
|
8059
|
+
["no existe esa memoria (revisa memory_list)", "that memory doesn't exist (check memory_list)"],
|
|
8060
|
+
["no existe esa memoria", "that memory doesn't exist"],
|
|
8061
|
+
["la memoria est\xE1 vac\xEDa", "the memory is empty"],
|
|
8062
|
+
["una memoria cabe en {} caracteres", "a memory fits in {} characters"],
|
|
8063
|
+
["ya hay {} memorias; borra alguna antes de guardar otra", "there are already {} memories; delete one before saving another"],
|
|
8064
|
+
["no se pudo guardar la memoria", "couldn't save the memory"],
|
|
8065
|
+
["las memorias s\xF3lo se tocan en el chat personal de la persona", "memories can only be changed in the person's personal chat"],
|
|
8066
|
+
["la persona la ve y la edita en Memorias de su app", "the person sees and edits it in Memories in their app"],
|
|
8067
|
+
["No pude abrir el chat nuevo: {}", "Couldn't open the new chat: {}"],
|
|
8058
8068
|
// — Infra interna (casi nunca llega al CLI, pero por si acaso)
|
|
8059
8069
|
["SESSION_SECRET ausente en producci\xF3n \u2014 las cookies quedar\xEDan firmadas con un valor p\xFAblico. Inyectarlo con ./scripts/set_gs_secret.sh SESSION_SECRET (openssl rand -hex 32).", "SESSION_SECRET missing in production \u2014 cookies would be signed with a public value. Inject it with ./scripts/set_gs_secret.sh SESSION_SECRET (openssl rand -hex 32)."],
|
|
8060
8070
|
["sqld: fetch sin namespace", "sqld: fetch without namespace"],
|
|
@@ -8357,7 +8367,7 @@ async function postLong(path, body, timeoutMs = 9e5) {
|
|
|
8357
8367
|
const req = httpsRequest(`${base}${path}`, {
|
|
8358
8368
|
method: "POST",
|
|
8359
8369
|
timeout: timeoutMs,
|
|
8360
|
-
headers: { authorization: `Bearer ${token}`, "user-agent": `ghosty-cli/${"0.
|
|
8370
|
+
headers: { authorization: `Bearer ${token}`, "user-agent": `ghosty-cli/${"0.32.0"}`, "content-type": "application/json", "content-length": Buffer.byteLength(data) }
|
|
8361
8371
|
}, (res) => {
|
|
8362
8372
|
let buf = "";
|
|
8363
8373
|
res.on("data", (c) => buf += c);
|
|
@@ -8399,7 +8409,7 @@ async function request(path, opts = {}, retried = false) {
|
|
|
8399
8409
|
method: opts.method ?? (opts.body !== void 0 || opts.raw !== void 0 ? "POST" : "GET"),
|
|
8400
8410
|
headers: {
|
|
8401
8411
|
authorization: `Bearer ${token}`,
|
|
8402
|
-
"user-agent": `ghosty-cli/${"0.
|
|
8412
|
+
"user-agent": `ghosty-cli/${"0.32.0"}`,
|
|
8403
8413
|
"accept-language": lang(),
|
|
8404
8414
|
...opts.body !== void 0 ? { "content-type": "application/json" } : {},
|
|
8405
8415
|
...opts.headers
|
|
@@ -9251,6 +9261,36 @@ async function readAll() {
|
|
|
9251
9261
|
for await (const c of process.stdin) s += c;
|
|
9252
9262
|
return s;
|
|
9253
9263
|
}
|
|
9264
|
+
async function meMemories(sub, arg, text, v) {
|
|
9265
|
+
const ex = 'ghosty me memories ls [--agent A] | add "texto" [--agent A] | edit <id> "texto" | rm <id>';
|
|
9266
|
+
switch (sub ?? "ls") {
|
|
9267
|
+
case "ls": {
|
|
9268
|
+
const r = await api(`/api/v2/me/memories${v.agent ? `?agente=${enc3(v.agent)}` : ""}`);
|
|
9269
|
+
out(r, () => {
|
|
9270
|
+
const rows = r.memories.map((m) => ({ id: m.id, memory: m.content, agent: m.agentId ?? t("all", "todos"), from: m.source }));
|
|
9271
|
+
return rows.length ? table(rows, ["id", "memory", "agent", "from"]) : dim(t('Nothing yet. Add one: ghosty me memories add "I prefer short answers"', 'A\xFAn nada. Agrega una: ghosty me memories add "prefiero respuestas cortas"'));
|
|
9272
|
+
});
|
|
9273
|
+
return;
|
|
9274
|
+
}
|
|
9275
|
+
case "add": {
|
|
9276
|
+
if (!arg) throw usage(t("Missing the memory text.", "Falta el texto de la memoria."), ex);
|
|
9277
|
+
const r = await api(`/api/v2/me/memories`, { method: "POST", body: { content: arg, agentId: v.agent ?? null } });
|
|
9278
|
+
return out(r, () => `${lavender("\u2713")} ${t("Saved", "Guardada")} (${r.memory.id})`);
|
|
9279
|
+
}
|
|
9280
|
+
case "edit": {
|
|
9281
|
+
if (!arg || !text) throw usage(t("Missing the id or the new text.", "Falta el id o el texto nuevo."), ex);
|
|
9282
|
+
const r = await api(`/api/v2/me/memories/${enc3(arg)}`, { method: "PATCH", body: { content: text } });
|
|
9283
|
+
return out(r, () => `${lavender("\u2713")} ${t("Updated", "Actualizada")} (${r.memory.id})`);
|
|
9284
|
+
}
|
|
9285
|
+
case "rm": {
|
|
9286
|
+
if (!arg) throw usage(t("Missing the memory id.", "Falta el id de la memoria."), ex);
|
|
9287
|
+
const r = await api(`/api/v2/me/memories/${enc3(arg)}`, { method: "DELETE" });
|
|
9288
|
+
return out(r, () => `${lavender("\u2713")} ${t("Forgotten", "Olvidada")}`);
|
|
9289
|
+
}
|
|
9290
|
+
default:
|
|
9291
|
+
throw usage(t(`Unknown memories subcommand: ${sub}.`, `Subcomando de memories desconocido: ${sub}.`), ex);
|
|
9292
|
+
}
|
|
9293
|
+
}
|
|
9254
9294
|
async function meFiles(sub, arg, v) {
|
|
9255
9295
|
const ex = "ghosty me files ls [--q TEXT] [--kind image|video|audio|document|other] [--cursor C] | get <file-id> [--out FILE] | upload <file> | rm <file-id>";
|
|
9256
9296
|
switch (sub) {
|
|
@@ -9529,7 +9569,7 @@ async function call(path, v, init = {}) {
|
|
|
9529
9569
|
"x-ghosty-ts": ts,
|
|
9530
9570
|
"x-ghosty-sig": sig,
|
|
9531
9571
|
"content-type": "application/json",
|
|
9532
|
-
"user-agent": `ghosty-cli/${"0.
|
|
9572
|
+
"user-agent": `ghosty-cli/${"0.32.0"}`
|
|
9533
9573
|
},
|
|
9534
9574
|
body: method === "GET" ? void 0 : raw
|
|
9535
9575
|
});
|
|
@@ -10841,7 +10881,7 @@ var HELPS_ES = {
|
|
|
10841
10881
|
},
|
|
10842
10882
|
turns: {
|
|
10843
10883
|
summary: "Los turnos recientes de un agente: qu\xE9 contest\xF3, qu\xE9 fall\xF3 y por qu\xE9, y en qu\xE9 se fue el tiempo de un turno.",
|
|
10844
|
-
replace: [["# last turn: each tool, its seconds, output tokens", "# \xFAltimo turno: cada tool, sus segundos, tokens de salida"], ["# stop the turn AND its background jobs", "# detiene el turno Y sus encargos en fondo"], ["# staff: real failure rate by engine and error", "# staff: tasa real de fallos por motor y
|
|
10884
|
+
replace: [["# last turn: each tool, its seconds, output tokens", "# \xFAltimo turno: cada tool, sus segundos, tokens de salida"], ["# stop the turn AND its background jobs", "# detiene el turno Y sus encargos en fondo"], ["# staff: real failure rate by engine, channel (Teams/A2A too) and error", "# staff: tasa real de fallos por motor, canal (tambi\xE9n Teams y A2A) y error"]],
|
|
10845
10885
|
flags: [
|
|
10846
10886
|
["--errors", "s\xF3lo turnos fallidos (igual que --status error)"],
|
|
10847
10887
|
["--skipped", "ls: mensajes de clientes de WhatsApp Business que NO abrieron turno, y por qu\xE9 (operador activo, s\xF3lo registra, pausa, reacci\xF3n, canal apagado, sin saldo)"],
|
|
@@ -10897,7 +10937,10 @@ var HELPS_ES = {
|
|
|
10897
10937
|
replace: [['"what to do"', '"qu\xE9 hacer"'], ["# answers in that thread as if mentioned", "# contesta en ese hilo como si lo mencionaran"]],
|
|
10898
10938
|
notes: ["--teams: el agente tiene que estar activo en el Teams de ese espacio y t\xFA ser miembro. El id del hilo es el del mensaje con que empieza."]
|
|
10899
10939
|
},
|
|
10900
|
-
me: {
|
|
10940
|
+
me: {
|
|
10941
|
+
summary: "Tu cuenta: archivos, memorias y uso.",
|
|
10942
|
+
notes: ["Las memorias viajan a tus agentes s\xF3lo en tus chats personales (app, /c, notch), nunca a WhatsApp, Messenger ni demos. --agent la limita a ese agente."]
|
|
10943
|
+
},
|
|
10901
10944
|
credentials: {
|
|
10902
10945
|
summary: "Llaves de proveedores en la b\xF3veda de tu cuenta (cifradas; s\xF3lo regresan los \xFAltimos 4 caracteres).",
|
|
10903
10946
|
replace: [["# hidden prompt", "# pregunta oculta"]],
|
|
@@ -11073,7 +11116,7 @@ var HELPS_ES = {
|
|
|
11073
11116
|
},
|
|
11074
11117
|
novedades: {
|
|
11075
11118
|
summary: "Staff de Ghosty: las novedades de la app Android. Cada una con su ilustraci\xF3n; mismos frenos que el admin: pru\xE9bala en tu tel\xE9fono primero, push de 9 a 21 h CDMX, 72 h entre env\xEDos a todos.",
|
|
11076
|
-
notes: ["--image se publica en img.ghosty.studio (WebP 1200 px). --to vac\xEDo = todos. send sin --at la manda ya (pregunta); --at '' quita la programaci\xF3n."]
|
|
11119
|
+
notes: ["--image se publica en img.ghosty.studio (WebP 1200 px). --to vac\xEDo = todos. send sin --at la manda ya (pregunta); --at '' quita la programaci\xF3n.", "--min-version N (versionCode de Android): si la app del tester es m\xE1s vieja, el bot\xF3n dice \xABActualizar\xBB y lanza la actualizaci\xF3n de Play desde la app; '' la quita."]
|
|
11077
11120
|
},
|
|
11078
11121
|
spaces: {
|
|
11079
11122
|
summary: "Espacios: lista los tuyos (o, staff, los de cualquiera) y operaciones del staff de Ghosty \u2014 entrar/salir del espacio de un cliente, cambiar su combo, mover \xABpagado hasta\xBB, renombrar su slug. Cada cambio queda en la bit\xE1cora del espacio.",
|
|
@@ -11275,7 +11318,7 @@ var HELPS = {
|
|
|
11275
11318
|
},
|
|
11276
11319
|
turns: {
|
|
11277
11320
|
summary: "An agent's recent turns: what answered, what failed and why, and where one turn's time went.",
|
|
11278
|
-
usage: ["ghosty turns ls <agent-id> [--errors | --status STATE | --skipped] [--since 1h] [--limit N]", "ghosty turns ls --workspace <slug> --quota-hits [--days 14]", "ghosty turns show <agent-id> [turn-id | last] [--full]", "ghosty turns cancel <agent-id> <conversation-id> # stop the turn AND its background jobs", "ghosty turns stats [--since 14d] [--all] # staff: real failure rate by engine and error"],
|
|
11321
|
+
usage: ["ghosty turns ls <agent-id> [--errors | --status STATE | --skipped] [--since 1h] [--limit N]", "ghosty turns ls --workspace <slug> --quota-hits [--days 14]", "ghosty turns show <agent-id> [turn-id | last] [--full]", "ghosty turns cancel <agent-id> <conversation-id> # stop the turn AND its background jobs", "ghosty turns stats [--since 14d] [--all] # staff: real failure rate by engine, channel (Teams/A2A too) and error"],
|
|
11279
11322
|
flags: [
|
|
11280
11323
|
["--errors", "only failed turns (same as --status error)"],
|
|
11281
11324
|
["--skipped", "ls: WhatsApp Business customer messages that did NOT open a turn, and why (operator active, records only, paused, reaction, channel off, no balance)"],
|
|
@@ -11366,9 +11409,10 @@ var HELPS = {
|
|
|
11366
11409
|
learn: `${REF}#programar-turnos`
|
|
11367
11410
|
},
|
|
11368
11411
|
me: {
|
|
11369
|
-
summary: "Your account: files and usage.",
|
|
11370
|
-
usage: ["ghosty me files ls [--q TEXT] [--kind image|video|audio|document|other] [--cursor C]", "ghosty me files get <file-id> [--out FILE]", "ghosty me files upload <file> | rm <file-id>", "ghosty usage"],
|
|
11371
|
-
examples: ["ghosty me files ls --kind document", "ghosty me files ls --q contrato", "ghosty me files get <id> --out contrato.pdf", 'ghosty chat <agent> "res\xFAmelo" --file <id>'],
|
|
11412
|
+
summary: "Your account: files, memories and usage.",
|
|
11413
|
+
usage: ["ghosty me files ls [--q TEXT] [--kind image|video|audio|document|other] [--cursor C]", "ghosty me files get <file-id> [--out FILE]", "ghosty me files upload <file> | rm <file-id>", 'ghosty me memories ls [--agent A] | add "text" [--agent A] | edit <id> "text" | rm <id>', "ghosty usage"],
|
|
11414
|
+
examples: ["ghosty me files ls --kind document", "ghosty me files ls --q contrato", "ghosty me files get <id> --out contrato.pdf", 'ghosty chat <agent> "res\xFAmelo" --file <id>', 'ghosty me memories add "I prefer short answers"'],
|
|
11415
|
+
notes: ["Memories travel to your agents only in your personal chats (app, /c, notch), never to WhatsApp, Messenger or demo threads. --agent limits one to that agent."],
|
|
11372
11416
|
learn: `${REF}#tu-cuenta`
|
|
11373
11417
|
}
|
|
11374
11418
|
};
|
|
@@ -11626,14 +11670,14 @@ HELPS.novedades = {
|
|
|
11626
11670
|
summary: "Ghosty staff: the Android app's announcements (what's new). Each one needs its own illustration; same brakes as the admin: test on your phone first, push 9\u201321 h CDMX, 72 h between pushes to everyone.",
|
|
11627
11671
|
usage: [
|
|
11628
11672
|
"ghosty novedades ls",
|
|
11629
|
-
'ghosty novedades create --title T --body B --image hero.png [--link ruta] [--button "Abrir"] [--to a@x.com,b@y.com] [--publish]',
|
|
11630
|
-
"ghosty novedades set <id> [--title] [--body] [--image FILE] [--link] [--button] [--to] [--publish|--draft]",
|
|
11673
|
+
'ghosty novedades create --title T --body B --image hero.png [--link ruta] [--button "Abrir"] [--to a@x.com,b@y.com] [--min-version N] [--publish]',
|
|
11674
|
+
"ghosty novedades set <id> [--title] [--body] [--image FILE] [--link] [--button] [--to] [--min-version N] [--publish|--draft]",
|
|
11631
11675
|
"ghosty novedades test <id>",
|
|
11632
11676
|
'ghosty novedades send <id> [--at "2026-10-02T12:00"]',
|
|
11633
11677
|
"ghosty novedades rm <id>"
|
|
11634
11678
|
],
|
|
11635
11679
|
examples: ['ghosty novedades create --title "PDF y audio" --body "Ahora\u2026" --image hero.png --link chats --publish', "ghosty novedades test <id>", 'ghosty novedades send <id> --at "2026-10-02T12:00"'],
|
|
11636
|
-
notes: ["--image is published to img.ghosty.studio (WebP 1200 px). --to empty = everyone. send without --at pushes now (asks); --at '' removes the schedule."],
|
|
11680
|
+
notes: ["--image is published to img.ghosty.studio (WebP 1200 px). --to empty = everyone. send without --at pushes now (asks); --at '' removes the schedule.", "--min-version N (Android versionCode): if the tester's app is older, the button reads \xABActualizar\xBB and starts Play's in-app update; '' removes it."],
|
|
11637
11681
|
learn: `${REF}#soporte`
|
|
11638
11682
|
};
|
|
11639
11683
|
HELPS.spaces = {
|
|
@@ -12407,6 +12451,7 @@ async function turnStats(v) {
|
|
|
12407
12451
|
dim(Object.entries(r.byState).map(([k, n]) => `${k} ${n}`).join(" \xB7 ")),
|
|
12408
12452
|
"",
|
|
12409
12453
|
table(r.byEngine.map((e) => ({ engine: e.engine, turns: e.turns, failed: e.failed, rate: `${e.failRate}%` })), ["engine", "turns", "failed", "rate"]),
|
|
12454
|
+
...r.byCanal?.length ? ["", table(r.byCanal.map((c) => ({ canal: c.canal, turns: c.turns, failed: c.failed, rate: `${c.failRate}%` })), ["canal", "turns", "failed", "rate"])] : [],
|
|
12410
12455
|
...r.topErrors.length ? ["", table(r.topErrors.map((e) => ({ n: e.n, error: e.error })), ["n", "error"])] : []
|
|
12411
12456
|
].join("\n")
|
|
12412
12457
|
);
|
|
@@ -12432,7 +12477,7 @@ ${table(rows, ["at", "kind", "to", "status", "thread", "title", "detail"])}` : d
|
|
|
12432
12477
|
}
|
|
12433
12478
|
async function novedadesCmd(sub, id, v) {
|
|
12434
12479
|
const base = "/api/v2/support/announcements";
|
|
12435
|
-
const ex = 'ghosty novedades ls \xB7 create --title T --body B --image hero.png [--link ruta] [--button "Abrir"] [--to a@x.com,b@y.com] [--publish] \xB7 set <id> \u2026 \xB7 test <id> \xB7 send <id> [--at "2026-10-02T12:00"] \xB7 rm <id>';
|
|
12480
|
+
const ex = 'ghosty novedades ls \xB7 create --title T --body B --image hero.png [--link ruta] [--button "Abrir"] [--to a@x.com,b@y.com] [--min-version 12] [--publish] \xB7 set <id> \u2026 \xB7 test <id> \xB7 send <id> [--at "2026-10-02T12:00"] \xB7 rm <id>';
|
|
12436
12481
|
const fields = async () => ({
|
|
12437
12482
|
...v.title !== void 0 ? { title: v.title } : {},
|
|
12438
12483
|
...v.body !== void 0 ? { body: v.body } : {},
|
|
@@ -12440,10 +12485,12 @@ async function novedadesCmd(sub, id, v) {
|
|
|
12440
12485
|
...v.link !== void 0 ? { enlace: v.link || null } : {},
|
|
12441
12486
|
...v.button !== void 0 ? { boton: v.button || null } : {},
|
|
12442
12487
|
...v.to !== void 0 ? { destinatarios: v.to || null } : {},
|
|
12488
|
+
// «Requiere versión ≥ N» (versionCode de Android): el botón dice «Actualizar». Vacío = la quita.
|
|
12489
|
+
...v["min-version"] !== void 0 ? { minVersionCode: v["min-version"] ? Number(v["min-version"]) : null } : {},
|
|
12443
12490
|
...v.publish ? { published: true } : v.draft ? { published: false } : {}
|
|
12444
12491
|
});
|
|
12445
12492
|
const line2 = (a) => `${bold(a.title)} ${dim(a.id)}
|
|
12446
|
-
${a.published ? lavender(t("published", "publicada")) : dim(t("draft", "borrador"))} \xB7 ${a.pushedAt ? t(`pushed ${cdmx(a.pushedAt)} (${a.pushCount})`, `enviada ${cdmx(a.pushedAt)} (${a.pushCount})`) : a.schedule ? t(`push scheduled ${cdmx(a.schedule)} CDMX`, `push programado ${cdmx(a.schedule)} CDMX`) : t("not pushed", "sin enviar")} \xB7 ${a.destinatarios ? t(`to ${a.destinatarios.split(",").length}`, `para ${a.destinatarios.split(",").length}`) : t("everyone", "todos")}`;
|
|
12493
|
+
${a.published ? lavender(t("published", "publicada")) : dim(t("draft", "borrador"))} \xB7 ${a.pushedAt ? t(`pushed ${cdmx(a.pushedAt)} (${a.pushCount})`, `enviada ${cdmx(a.pushedAt)} (${a.pushCount})`) : a.schedule ? t(`push scheduled ${cdmx(a.schedule)} CDMX`, `push programado ${cdmx(a.schedule)} CDMX`) : t("not pushed", "sin enviar")} \xB7 ${a.destinatarios ? t(`to ${a.destinatarios.split(",").length}`, `para ${a.destinatarios.split(",").length}`) : t("everyone", "todos")}${a.minVersionCode ? t(` \xB7 needs v${a.minVersionCode}+`, ` \xB7 requiere v${a.minVersionCode}+`) : ""}`;
|
|
12447
12494
|
switch (sub ?? "ls") {
|
|
12448
12495
|
case "ls":
|
|
12449
12496
|
case "list": {
|
|
@@ -12575,7 +12622,7 @@ ${bold("Support")} ${dim("(Ghosty staff)")}
|
|
|
12575
12622
|
conversations show <id> <conv> --why A conversation: who sees it in their list / by link, and why
|
|
12576
12623
|
turns stats Real failure rate by engine and error [--since 14d] [--all]
|
|
12577
12624
|
push log --user EMAIL Pushes sent to someone and what Apple/Google answered [--since 2d]
|
|
12578
|
-
novedades ls|create|set|test|send|rm Android app announcements [--title] [--body] [--image FILE] [--link] [--to] [--publish] [--at]
|
|
12625
|
+
novedades ls|create|set|test|send|rm Android app announcements [--title] [--body] [--image FILE] [--link] [--to] [--min-version N] [--publish] [--at]
|
|
12579
12626
|
|
|
12580
12627
|
${bold("Demos")}
|
|
12581
12628
|
demos try <slug> "msg" ["msg2"\u2026] Try a public demo as a visitor (same thread across runs) [--new] [--recycle-between --agent X]
|
|
@@ -12605,6 +12652,7 @@ ${bold("Partners")} ${dim("(give an agent to each of YOUR customers \u2014 see:
|
|
|
12605
12652
|
|
|
12606
12653
|
${bold("Your account")}
|
|
12607
12654
|
me files ls|get|upload|rm Files in your account [--q TEXT] [--kind image|video|audio|document|other] [--cursor C] \xB7 get <id> [--out FILE]
|
|
12655
|
+
me memories ls|add|edit|rm What your agents remember about you (personal chats only) [--agent A] \xB7 add "text" \xB7 edit <id> "text" \xB7 rm <id>
|
|
12608
12656
|
credentials ls|set|rm [provider] Provider keys in your vault (hidden prompt, stdin or --from-env VAR; never as an argument)
|
|
12609
12657
|
docs [topic] Open the docs
|
|
12610
12658
|
|
|
@@ -12702,7 +12750,7 @@ ${bold("Soporte")} ${dim("(staff de Ghosty)")}
|
|
|
12702
12750
|
conversations show <id> <conv> --why Una conversaci\xF3n: qui\xE9n la ve en su lista / por liga, y por qu\xE9
|
|
12703
12751
|
turns stats Tasa real de fallos por motor y por error [--since 14d] [--all]
|
|
12704
12752
|
push log --user CORREO Avisos que se le mandaron a alguien y qu\xE9 contest\xF3 Apple/Google [--since 2d]
|
|
12705
|
-
novedades ls|create|set|test|send|rm Novedades de la app Android [--title] [--body] [--image ARCHIVO] [--link] [--to] [--publish] [--at]
|
|
12753
|
+
novedades ls|create|set|test|send|rm Novedades de la app Android [--title] [--body] [--image ARCHIVO] [--link] [--to] [--min-version N] [--publish] [--at]
|
|
12706
12754
|
|
|
12707
12755
|
${bold("Demos")}
|
|
12708
12756
|
demos try <slug> "msg" ["msg2"\u2026] Prueba un demo p\xFAblico como visitante (mismo hilo entre corridas) [--new] [--recycle-between --agent X]
|
|
@@ -12732,6 +12780,7 @@ ${bold("Partners")} ${dim("(dale un agente a cada uno de TUS clientes \u2014 ve
|
|
|
12732
12780
|
|
|
12733
12781
|
${bold("Tu cuenta")}
|
|
12734
12782
|
me files ls|get|upload|rm Archivos de tu cuenta [--q TEXTO] [--kind image|video|audio|document|other] [--cursor C] \xB7 get <id> [--out ARCHIVO]
|
|
12783
|
+
me memories ls|add|edit|rm Lo que tus agentes recuerdan de ti (s\xF3lo chats personales) [--agent A] \xB7 add "texto" \xB7 edit <id> "texto" \xB7 rm <id>
|
|
12735
12784
|
credentials ls|set|rm [proveedor] Llaves de proveedor en tu b\xF3veda (prompt oculto, stdin o --from-env VAR; nunca como argumento)
|
|
12736
12785
|
docs [tema] Abre la documentaci\xF3n
|
|
12737
12786
|
|
|
@@ -12928,6 +12977,7 @@ async function main() {
|
|
|
12928
12977
|
image: { type: "string" },
|
|
12929
12978
|
link: { type: "string" },
|
|
12930
12979
|
button: { type: "string" },
|
|
12980
|
+
"min-version": { type: "string" },
|
|
12931
12981
|
publish: { type: "boolean" },
|
|
12932
12982
|
draft: { type: "boolean" },
|
|
12933
12983
|
"ads-only": { type: "string" },
|
|
@@ -12952,7 +13002,7 @@ async function main() {
|
|
|
12952
13002
|
const tokens = splitTokens(pos, v);
|
|
12953
13003
|
globals.token = tokens.session;
|
|
12954
13004
|
globals.profile = v.profile;
|
|
12955
|
-
if (v.version) return out({ version: "0.
|
|
13005
|
+
if (v.version) return out({ version: "0.32.0" }, () => "0.32.0");
|
|
12956
13006
|
for (const n of normalizeArgs(pos, v)) if (!globals.json) info(dim(n));
|
|
12957
13007
|
const context = (await readConfig()).workspace;
|
|
12958
13008
|
if (!explicitToken()?.startsWith("gat_")) {
|
|
@@ -13085,8 +13135,9 @@ async function main() {
|
|
|
13085
13135
|
return planCmd(sub, a1, v, context);
|
|
13086
13136
|
case "me":
|
|
13087
13137
|
if (sub === "files") return meFiles(a1, a2, v);
|
|
13138
|
+
if (sub === "memories" || sub === "memory") return meMemories(a1, a2, pos[4], v);
|
|
13088
13139
|
if (sub === "usage") return meUsage();
|
|
13089
|
-
throw usage(t(`Unknown me subcommand: ${sub ?? "(none)"}.`, `Subcomando de me desconocido: ${sub ?? "(ninguno)"}.`), t("Try: ghosty me files ls", "Prueba: ghosty me files ls"));
|
|
13140
|
+
throw usage(t(`Unknown me subcommand: ${sub ?? "(none)"}.`, `Subcomando de me desconocido: ${sub ?? "(ninguno)"}.`), t("Try: ghosty me files ls | ghosty me memories ls", "Prueba: ghosty me files ls | ghosty me memories ls"));
|
|
13090
13141
|
case "docs": {
|
|
13091
13142
|
const url = `${await baseUrl()}/docs${sub ? `/${encodeURIComponent(sub)}` : "/cli"}`;
|
|
13092
13143
|
if (globals.json) return out({ url });
|
|
@@ -13097,7 +13148,7 @@ async function main() {
|
|
|
13097
13148
|
throw unknown(cmd, cmd, COMMANDS, "ghosty --help");
|
|
13098
13149
|
}
|
|
13099
13150
|
}
|
|
13100
|
-
var notice = updateNotice("0.
|
|
13151
|
+
var notice = updateNotice("0.32.0").catch(() => null);
|
|
13101
13152
|
main().then(
|
|
13102
13153
|
async () => {
|
|
13103
13154
|
const n = await notice;
|
package/package.json
CHANGED