@myk794/adly 1.2.0 → 1.4.2
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/adly.js +71 -27
- package/package.json +1 -1
package/adly.js
CHANGED
|
@@ -180,16 +180,17 @@ async function cmdLine() {
|
|
|
180
180
|
// Önceki reklamı bu turun token'ıyla faturala.
|
|
181
181
|
if (st.impressionToken && tokens > 0) {
|
|
182
182
|
const imp = await api("/api/ads/impression", { method: "POST", token, body: { impressionToken: st.impressionToken, tokens } });
|
|
183
|
-
if (imp && imp.ok) { st.balance = imp.balance_try; st.lastTokens = tokens; }
|
|
183
|
+
if (imp && imp.ok) { st.balance = imp.balance_try; all._balance = imp.balance_try; st.lastTokens = tokens; }
|
|
184
184
|
}
|
|
185
185
|
// Sonraki tur için yeni reklam al.
|
|
186
186
|
const s = await api("/api/ads/serve", { token });
|
|
187
187
|
if (s && !s.empty && s.campaign) {
|
|
188
188
|
st.line = s.campaign.text; st.url = s.campaign.url; st.impressionToken = s.impressionToken; st.clickPath = s.click_path || null;
|
|
189
|
-
// Gösterilen reklamın tıklama linki — `adly open`
|
|
189
|
+
// Gösterilen reklamın tıklama linki — `adly open` bunu kullanır.
|
|
190
190
|
if (s.click_path) all._lastClick = { path: s.click_path, text: st.line, url: st.url };
|
|
191
|
+
setSpinnerVerb(s.campaign.text); // reklamı düşünme spinner'ına yaz (sonraki oturum)
|
|
191
192
|
}
|
|
192
|
-
else { st.line =
|
|
193
|
+
else { st.line = null; st.impressionToken = null; st.clickPath = null; }
|
|
193
194
|
st.lastSig = sig;
|
|
194
195
|
all[sessionId] = st; writeJSON(STATE_PATH, all);
|
|
195
196
|
} else if (!st.impressionToken) {
|
|
@@ -198,6 +199,7 @@ async function cmdLine() {
|
|
|
198
199
|
if (s && !s.empty && s.campaign) {
|
|
199
200
|
st.line = s.campaign.text; st.url = s.campaign.url; st.impressionToken = s.impressionToken; st.clickPath = s.click_path || null;
|
|
200
201
|
if (s.click_path) all._lastClick = { path: s.click_path, text: st.line, url: st.url };
|
|
202
|
+
setSpinnerVerb(s.campaign.text); // reklamı düşünme spinner'ına yaz (sonraki oturum)
|
|
201
203
|
}
|
|
202
204
|
if (sig != null) st.lastSig = sig;
|
|
203
205
|
all[sessionId] = st; writeJSON(STATE_PATH, all);
|
|
@@ -206,29 +208,42 @@ async function cmdLine() {
|
|
|
206
208
|
// Ağ hatası: son bilinen satırı bas, çökme yok.
|
|
207
209
|
}
|
|
208
210
|
|
|
209
|
-
|
|
211
|
+
// Kimlik + bakiye önbelleği: e-posta config'te (ham), bakiye state'te global tutulur.
|
|
212
|
+
// (loadConfig() yalnız api/token döndürür; email'i ham dosyadan okuruz.)
|
|
213
|
+
// Eksikse bir kez /me'den çekip kaydet → sonraki render'lar ağ çağrısı yapmaz.
|
|
214
|
+
let raw = readJSON(CONFIG_PATH, {});
|
|
215
|
+
if (!raw.email || all._balance == null) {
|
|
216
|
+
try {
|
|
217
|
+
const me = await api("/api/developer/me", { token });
|
|
218
|
+
if (me && !me.error) {
|
|
219
|
+
if (me.email && !raw.email) { raw = { ...raw, email: me.email }; writeJSON(CONFIG_PATH, raw); }
|
|
220
|
+
if (me.balance_try != null) { all._balance = me.balance_try; writeJSON(STATE_PATH, all); }
|
|
221
|
+
}
|
|
222
|
+
} catch { /* ağ hatası: önbellek neyse onu göster */ }
|
|
223
|
+
}
|
|
224
|
+
|
|
210
225
|
const fx = useFx();
|
|
211
226
|
const frame = Math.floor(Date.now() / 130); // ~7-8 fps; statusLine yenilemesi arası kare ilerler
|
|
212
227
|
|
|
213
|
-
//
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
228
|
+
// statusLine = KAZANÇ + İPUCU. (Reklam artık düşünme spinner'ında — spinnerVerbs.)
|
|
229
|
+
// 1) Kazanç: nabız atan ikon + yeşil bakiye rozeti (oturum üstü global önbellek).
|
|
230
|
+
const bal = st.balance || all._balance;
|
|
231
|
+
let earn = "";
|
|
232
|
+
if (bal) {
|
|
233
|
+
earn = fx
|
|
234
|
+
? `${pulse(S.money, frame)} ${badge(`${S.lira}${bal}`, frame)}`
|
|
235
|
+
: `${S.money} ${S.lira}${bal}`;
|
|
219
236
|
}
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
//
|
|
223
|
-
const
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
}
|
|
231
|
-
process.stdout.write(`${lead}${icon} ${line}${tw}${bal}`);
|
|
237
|
+
|
|
238
|
+
// 2) İpucu/marka: detay için komutu söyler + satırın Adly'ye ait olduğunu belirtir.
|
|
239
|
+
// "adly status" ember'la vurgulanır; gerisi sönük.
|
|
240
|
+
const hint = fx
|
|
241
|
+
? dim("use ") + rgb(168, 120, 72) + "adly status" + RST + dim(" for info")
|
|
242
|
+
: "use 'adly status' for info";
|
|
243
|
+
|
|
244
|
+
const sep = ` ${fx ? dim(S.sep) : S.sep} `;
|
|
245
|
+
const out = [earn, hint].filter(Boolean).join(sep);
|
|
246
|
+
process.stdout.write(out);
|
|
232
247
|
}
|
|
233
248
|
|
|
234
249
|
// OSC 8 tıklanabilir link: env ADLY_LINKS → config.links → varsayılan KAPALI.
|
|
@@ -257,6 +272,7 @@ function useFx() {
|
|
|
257
272
|
const RST = "\x1b[0m";
|
|
258
273
|
const BOLD = "\x1b[1m";
|
|
259
274
|
function rgb(r, g, b) { return `\x1b[38;2;${r | 0};${g | 0};${b | 0}m`; }
|
|
275
|
+
function dim(s) { return rgb(140, 138, 148) + s + RST; }
|
|
260
276
|
function mix(a, b, t) { return [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t, a[2] + (b[2] - a[2]) * t]; }
|
|
261
277
|
// Metni soldan sağa kayan ember parıltısıyla boya (sönük gri zemin, sıcak hale).
|
|
262
278
|
function shimmer(text, frame) {
|
|
@@ -350,10 +366,28 @@ async function cmdWatch() {
|
|
|
350
366
|
}
|
|
351
367
|
}
|
|
352
368
|
|
|
353
|
-
|
|
369
|
+
// Reklamı Claude Code'un DÜŞÜNME SPINNER'INA koy. CC 2.1.143+ resmi ayarı:
|
|
370
|
+
// settings.json'daki `spinnerVerbs` fiil havuzunu ("Baking…") verilen listeyle
|
|
371
|
+
// değiştirir. CC açılışta okur → spinner reklamı sonraki oturumda görünür.
|
|
372
|
+
// Güvenli: settings.json düz JSON değilse (yorum/JSONC → parse hatası) DOKUNMAZ;
|
|
373
|
+
// eski CC sürümü anahtarı sessizce yok sayar. Yalnız değişince yazar.
|
|
374
|
+
function setSpinnerVerb(adText) {
|
|
375
|
+
if (!adText) return;
|
|
376
|
+
try {
|
|
377
|
+
if (!fs.existsSync(CLAUDE_SETTINGS)) return;
|
|
378
|
+
const s = JSON.parse(fs.readFileSync(CLAUDE_SETTINGS, "utf8"));
|
|
379
|
+
const desired = { mode: "replace", verbs: [adText] };
|
|
380
|
+
if (JSON.stringify(s.spinnerVerbs) === JSON.stringify(desired)) return;
|
|
381
|
+
s.spinnerVerbs = desired;
|
|
382
|
+
fs.writeFileSync(CLAUDE_SETTINGS, JSON.stringify(s, null, 2));
|
|
383
|
+
} catch { /* statusLine'ı asla kırma */ }
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
async function cmdInstallStatusline() {
|
|
354
387
|
const selfPath = path.resolve(__filename);
|
|
355
388
|
const settings = readJSON(CLAUDE_SETTINGS, {});
|
|
356
|
-
|
|
389
|
+
// Yedeği YALNIZ bir kez al (yoksa) — tekrar kurulum temiz/orijinal yedeği ezmesin.
|
|
390
|
+
if (fs.existsSync(CLAUDE_SETTINGS) && !fs.existsSync(CLAUDE_SETTINGS + ".adly-bak")) {
|
|
357
391
|
fs.copyFileSync(CLAUDE_SETTINGS, CLAUDE_SETTINGS + ".adly-bak");
|
|
358
392
|
}
|
|
359
393
|
settings.statusLine = {
|
|
@@ -361,19 +395,29 @@ function cmdInstallStatusline() {
|
|
|
361
395
|
command: `node "${selfPath}" line`,
|
|
362
396
|
padding: 0,
|
|
363
397
|
};
|
|
398
|
+
// İlk reklamı spinner'a yerleştir (girişliyse) → ilk yeni oturumda görünür.
|
|
399
|
+
const { token } = loadConfig();
|
|
400
|
+
if (token) {
|
|
401
|
+
try {
|
|
402
|
+
const s = await api("/api/ads/serve", { token });
|
|
403
|
+
if (s && !s.empty && s.campaign) settings.spinnerVerbs = { mode: "replace", verbs: [s.campaign.text] };
|
|
404
|
+
} catch { /* ağ yoksa adly line sonra doldurur */ }
|
|
405
|
+
}
|
|
364
406
|
fs.mkdirSync(path.dirname(CLAUDE_SETTINGS), { recursive: true });
|
|
365
407
|
fs.writeFileSync(CLAUDE_SETTINGS, JSON.stringify(settings, null, 2));
|
|
366
|
-
console.log(`${sym().ok} Claude Code
|
|
408
|
+
console.log(`${sym().ok} Claude Code'a Adly eklendi.`);
|
|
367
409
|
console.log(" Ayar: " + CLAUDE_SETTINGS + " (yedek: .adly-bak)");
|
|
368
|
-
console.log("
|
|
410
|
+
console.log(" statusLine (alt satır) = e-posta + kazanç · spinner (düşünme fiili) = reklam.");
|
|
411
|
+
console.log(" Yeni bir Claude Code oturumu başlat — spinner'da reklam, altta kazanç görünür.");
|
|
369
412
|
}
|
|
370
413
|
|
|
371
414
|
function cmdUninstallStatusline() {
|
|
372
415
|
const settings = readJSON(CLAUDE_SETTINGS, null);
|
|
373
416
|
if (!settings) return fail("settings.json yok");
|
|
374
417
|
delete settings.statusLine;
|
|
418
|
+
delete settings.spinnerVerbs; // spinner reklamını da kaldır → CC stock fiillere döner
|
|
375
419
|
fs.writeFileSync(CLAUDE_SETTINGS, JSON.stringify(settings, null, 2));
|
|
376
|
-
console.log(`${sym().ok} statusLine
|
|
420
|
+
console.log(`${sym().ok} Adly kaldırıldı (statusLine + spinner reklamı). Yeni oturumda CC'nin kendi fiilleri döner.`);
|
|
377
421
|
}
|
|
378
422
|
|
|
379
423
|
// ---------- yardımcılar ----------
|