fluncle 0.195.0 → 0.196.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.
Files changed (2) hide show
  1. package/bin/fluncle.mjs +32 -16
  2. package/package.json +1 -1
package/bin/fluncle.mjs CHANGED
@@ -561,7 +561,7 @@ function parseVersion(version) {
561
561
  var currentVersion;
562
562
  var init_version = __esm(() => {
563
563
  init_output();
564
- currentVersion = "0.195.0".trim() ? "0.195.0".trim() : "0.1.0";
564
+ currentVersion = "0.196.0".trim() ? "0.196.0".trim() : "0.1.0";
565
565
  });
566
566
 
567
567
  // src/update-notifier.ts
@@ -2443,7 +2443,7 @@ function parseVersion2(version) {
2443
2443
  var currentVersion2, latestReleaseUrl = "https://api.github.com/repos/mauricekleine/fluncle/releases/latest";
2444
2444
  var init_version2 = __esm(() => {
2445
2445
  init_output();
2446
- currentVersion2 = "0.195.0".trim() ? "0.195.0".trim() : "0.1.0";
2446
+ currentVersion2 = "0.196.0".trim() ? "0.196.0".trim() : "0.1.0";
2447
2447
  });
2448
2448
 
2449
2449
  // ../../packages/registry/src/index.ts
@@ -3685,27 +3685,26 @@ var init_src = __esm(() => {
3685
3685
  },
3686
3686
  {
3687
3687
  exposedContent: [
3688
- "cut each pending operator-framed 9:16 clip out of its set video ship to R2 (--no-agent, ffmpeg)"
3688
+ "poll Twitch for the live set POST the live state that lights the cross-surface callout (--no-agent)"
3689
3689
  ],
3690
3690
  kind: "cron",
3691
- name: "cron.studio-clip",
3692
- operatorNotes: "every 15m. Pure-trigger, zero LLM tokens: a deterministic ffmpeg cut driven by the fluncle CLI (`admin clips list` `admin clips cut`), agent-scoped (list_clips + the agent-tier presign_clip_upload / finalize_clip_cut). Cuts the operator-framed 9:16 clips from the /admin/studio editor (keyed by Log ID) out of the set video ships `<clipId>/footage.mp4` to R2 for the /admin/clips library + the clip drip-feed. The box runs the standalone bun BINARY (the npm thin client can't spawn ffmpeg). Source: docs/agents/hermes/scripts/clip-sweep.sh. Probed on /status as cron.studio-clip.",
3693
- probeConfig: { cadenceMs: 15 * MINUTE_MS, cronName: "fluncle-studio-clip", kind: "cron" },
3694
- statusDescription: "cuts set videos into 9:16 clips",
3695
- title: "Studio clips",
3691
+ name: "cron.live",
3692
+ operatorNotes: "every 1m, run by a rave-02 host systemd timer (docs/agents/hermes/live-timer/). Pure polling, zero LLM tokens. Mints/reuses a cached Twitch client-credentials app token, asks Helix whether the channel is streaming, and POSTs the raw state to the agent-tier record_live_state op the Worker owns the transition detection and the crew callout. The poller is deliberately dumb and idempotent; auto-clear is READ-side (every surface treats a flag older than ~5m as offline), so a dead poller can never strand a permanent LIVE banner. Source: docs/agents/hermes/scripts/fluncle-live.sh. Probed on /status as cron.live.",
3693
+ probeConfig: { cadenceMs: MINUTE_MS, cronName: "fluncle-live", kind: "cron" },
3694
+ statusDescription: "watches for the live set",
3695
+ title: "Live poller",
3696
3696
  weights: { status: "hidden" }
3697
3697
  },
3698
3698
  {
3699
- command: "fluncle admin clips drip-pause",
3700
3699
  exposedContent: [
3701
- "post the due, cut clips to Instagram on a jittered ~daily cadence via Postiz (--no-agent, Worker HTTP)"
3700
+ "cut each pending operator-framed 9:16 clip out of its set video ship to R2 (--no-agent, ffmpeg)"
3702
3701
  ],
3703
3702
  kind: "cron",
3704
- name: "cron.clip-drip",
3705
- operatorNotes: "every 20m. Pure HTTP trigger, zero LLM tokens. Admin tier (needs the Worker's Postiz key, which the box never sees the box only triggers; the `finalize_clip_cut` / `record_health` precedent). The Worker checks the global kill switch FIRST (paused no-op), then posts due clips bounded by a per-tick cap AND a rolling-24h IG cap. Every clip auto-enters the schedule at a jittered ~23-25h after the queue tail. The operator pauses/resumes with `fluncle admin clips drip-pause` / `drip-resume`. Source: docs/agents/hermes/scripts/clip-drip-sweep.sh. Probed on /status as cron.clip-drip.",
3706
- probeConfig: { cadenceMs: 20 * MINUTE_MS, cronName: "fluncle-clip-drip", kind: "cron" },
3707
- statusDescription: "drip-feeds set clips to Instagram",
3708
- title: "Clip drip-feed",
3703
+ name: "cron.studio-clip",
3704
+ operatorNotes: "every 15m. Pure-trigger, zero LLM tokens: a deterministic ffmpeg cut driven by the fluncle CLI (`admin clips list` `admin clips cut`), agent-scoped (list_clips + the agent-tier presign_clip_upload / finalize_clip_cut). Cuts the operator-framed 9:16 clips from the /admin/studio editor (keyed by Log ID) out of the set video → ships `<clipId>/footage.mp4` to R2 for the /admin/clips library + the clip drip-feed. The box runs the standalone bun BINARY (the npm thin client can't spawn ffmpeg). Source: docs/agents/hermes/scripts/clip-sweep.sh. Probed on /status as cron.studio-clip.",
3705
+ probeConfig: { cadenceMs: 15 * MINUTE_MS, cronName: "fluncle-studio-clip", kind: "cron" },
3706
+ statusDescription: "cuts set videos into 9:16 clips",
3707
+ title: "Studio clips",
3709
3708
  weights: { status: "hidden" }
3710
3709
  },
3711
3710
  {
@@ -3781,6 +3780,23 @@ var init_src = __esm(() => {
3781
3780
  title: "Database backup",
3782
3781
  weights: { status: "secondary" }
3783
3782
  },
3783
+ {
3784
+ exposedContent: [
3785
+ "nightly hub-counts reconciliation — re-derives renderable_track_count / certified_finding_count for every label/album/artist and corrects only the rows that drifted (--no-agent)"
3786
+ ],
3787
+ kind: "cron",
3788
+ name: "cron.reconcile-hub-counts",
3789
+ operatorNotes: "04:10 Amsterdam (after the 04:00 reach snapshot, before the 04:40 demand tick), a rave-02 host systemd timer (docs/agents/hermes/reconcile-hub-counts-timer/). The SELF-HEALING BACKSTOP under keystone 2's maintained hub counts: they are moved as DELTAS by every edge-writing path (recompute-from-truth measured 27,400 ms at 150k hosted vs ~200 ms for the delta form), and a maintained counter drifts silently — a missed write path, a non-atomic bulk op, or an out-of-band write (the catalogue-prune skill deletes tracks straight out of the database). Keystone 2's own rollout proved it on day one: the deploy-window skew left 44 artists / 3 albums / 1 label wrong until a manual reconcile. A bare trigger (the funnel-snapshot shape): fires the AGENT-tier reconcile_hub_counts op once and the Worker runs two statements per table — a grouped `UPDATE … FROM (… GROUP BY fk)` guarded by a counts-DIFFER predicate (so rowsAffected IS the corrected-row count) plus a zero-truth pass for an entity whose last track vanished. The artists source is PINNED to `track_artists JOIN tracks` so orphaned edges never count. Idempotent; zero LLM tokens; no new secret. The corrected-row numbers are the operator's DRIFT AUDIT — journalctl -u fluncle-reconcile-hub-counts.service | grep AUDIT. Source: docs/agents/hermes/scripts/reconcile-hub-counts.*.",
3790
+ probeConfig: {
3791
+ cadenceMs: 24 * 60 * MINUTE_MS,
3792
+ cronName: "fluncle-reconcile-hub-counts",
3793
+ kind: "cron",
3794
+ schedule: { time: "04:10", tz: "Europe/Amsterdam" }
3795
+ },
3796
+ statusDescription: "keeps the archive's counts adding up",
3797
+ title: "Count check",
3798
+ weights: { status: "hidden" }
3799
+ },
3784
3800
  {
3785
3801
  command: "fluncle admin reach collect",
3786
3802
  exposedContent: [
@@ -6445,7 +6461,7 @@ ${response2.sessionKey}
6445
6461
 
6446
6462
  bun run --cwd apps/web wrangler secret put LASTFM_SESSION_KEY
6447
6463
 
6448
- Also store it in 1Password (Fluncle vault) alongside the API key + shared secret.`);
6464
+ Also store it in your password manager alongside the API key + shared secret.`);
6449
6465
  return;
6450
6466
  }
6451
6467
  const response = await adminApiGet("/api/v1/admin/lastfm/auth/start");
package/package.json CHANGED
@@ -31,5 +31,5 @@
31
31
  "url": "git+https://github.com/mauricekleine/fluncle.git"
32
32
  },
33
33
  "type": "module",
34
- "version": "0.195.0"
34
+ "version": "0.196.0"
35
35
  }