@nectarcrm/ccx 0.5.4 → 0.5.5
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/bin/ccx.js +20 -2
- package/package.json +1 -1
package/bin/ccx.js
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
// A conta escolhida vai pro settings.json do Claude Code, então qualquer `claude` aberto
|
|
18
18
|
// (terminal, VS Code, JetBrains) usa essa conta. Claudes já abertos continuam na anterior.
|
|
19
19
|
// O vigia roda sozinho a cada 5 min: avisa o app, atualiza o token se o admin trocou
|
|
20
|
-
// e tira a conta se o acesso for removido.
|
|
20
|
+
// e tira a conta se o acesso for removido. Conta em 100%: troca sozinho pra uma com folga e avisa.
|
|
21
21
|
// O resumo dos projetos vai sozinho depois das 12h00 e das 17h30; ccx sync manda na hora.
|
|
22
22
|
// Uma vez por dia o vigia confere se há ccx novo no npm e se atualiza.
|
|
23
23
|
|
|
@@ -237,7 +237,16 @@ function uninstallAgent() {
|
|
|
237
237
|
catch {}
|
|
238
238
|
}
|
|
239
239
|
|
|
240
|
-
//
|
|
240
|
+
// Aviso do sistema: o vigia roda sem terminal. Windows: fica só no vigia.log.
|
|
241
|
+
function notify(msg) {
|
|
242
|
+
try {
|
|
243
|
+
if (MAC) execFileSync('osascript', ['-e', `display notification ${JSON.stringify(msg)} with title "ccx"`], { stdio: 'ignore' })
|
|
244
|
+
else if (!WIN) execFileSync('notify-send', ['ccx', msg], { stdio: 'ignore' })
|
|
245
|
+
}
|
|
246
|
+
catch {}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// Uma passada do vigia: avisa o app, atualiza o token, troca a conta que chegou em 100% ou tira a conta
|
|
241
250
|
async function agentOnce() {
|
|
242
251
|
const app = readJson(APP, null)
|
|
243
252
|
const key = app && secretGet()
|
|
@@ -259,6 +268,15 @@ async function agentOnce() {
|
|
|
259
268
|
writeJson(APP, removeAccount(app))
|
|
260
269
|
return log(`conta ${app.account.label} não está mais liberada: tirada deste computador`)
|
|
261
270
|
}
|
|
271
|
+
if (r.data.switch_to) {
|
|
272
|
+
const s = await api(app, key, 'POST', '/api/cli/session', { account: r.data.switch_to, auto: true }, 30_000)
|
|
273
|
+
if (s.status === 200) {
|
|
274
|
+
writeJson(APP, applyAccount(app, key, s.data.account, s.data.token))
|
|
275
|
+
log(`conta ${app.account.label} chegou em 100%: trocada para ${s.data.account.label}`)
|
|
276
|
+
notify(`A conta ${app.account.label} chegou em 100%. Troquei para ${s.data.account.label}. Feche o claude e abra de novo com: claude --continue`)
|
|
277
|
+
return
|
|
278
|
+
}
|
|
279
|
+
}
|
|
262
280
|
if (r.data.token_fp !== app.token_fp) {
|
|
263
281
|
const s = await api(app, key, 'POST', '/api/cli/session', { account: app.account.slug }, 30_000)
|
|
264
282
|
if (s.status === 200) {
|