fluncle 0.138.0 → 0.139.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/bin/fluncle.mjs +17 -4
- 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.
|
|
564
|
+
currentVersion = "0.139.0".trim() ? "0.139.0".trim() : "0.1.0";
|
|
565
565
|
});
|
|
566
566
|
|
|
567
567
|
// src/update-notifier.ts
|
|
@@ -2189,7 +2189,7 @@ function parseVersion2(version) {
|
|
|
2189
2189
|
var currentVersion2, latestReleaseUrl = "https://api.github.com/repos/mauricekleine/fluncle/releases/latest";
|
|
2190
2190
|
var init_version2 = __esm(() => {
|
|
2191
2191
|
init_output();
|
|
2192
|
-
currentVersion2 = "0.
|
|
2192
|
+
currentVersion2 = "0.139.0".trim() ? "0.139.0".trim() : "0.1.0";
|
|
2193
2193
|
});
|
|
2194
2194
|
|
|
2195
2195
|
// ../../packages/registry/src/index.ts
|
|
@@ -2945,6 +2945,17 @@ var init_src = __esm(() => {
|
|
|
2945
2945
|
probeConfig: { cadenceMs: 30 * MINUTE_MS, cronName: "fluncle-rank", kind: "cron" },
|
|
2946
2946
|
weights: { status: "hidden" }
|
|
2947
2947
|
},
|
|
2948
|
+
{
|
|
2949
|
+
command: "fluncle admin backfills label-images",
|
|
2950
|
+
exposedContent: [
|
|
2951
|
+
"resolve each pending label's own logo (Discogs → Wikidata → cover floor) → its own R2 image"
|
|
2952
|
+
],
|
|
2953
|
+
kind: "cron",
|
|
2954
|
+
name: "cron.label-images",
|
|
2955
|
+
operatorNotes: "every 60m, run by a rave-02 HOST systemd timer (docs/agents/hermes/label-images-timer/). The DURABLE other half of the label entity: the crawler MINTS new labels every few minutes (each `image_state='pending'`) and the one-shot operator backfill only seeded the labels that already existed, so this cron is what gives every freshly-minted label its OWN logo instead of a borrowed album cover. METADATA ONLY — a label logo is internal, reversible, nominative-use trademark (the album-art posture); it certifies nothing and publishes nothing (agent tier, the `backfill_discogs` precedent). Worker-paced (the box holds no Discogs key / MusicBrainz budget): one bounded batch per tick walks each label's MB identity → its curated Discogs/Wikidata url-rels → downloads the logo once into R2, up the ladder Discogs → Wikidata → none (the freshest-cover floor). The `labels` row carries the durable reliability state (image_state/image_attempted_at/image_failures), so a resolved/none label is terminal and a vendor throttle just circuit-breaks and resumes next tick. Zero LLM tokens. Source: docs/agents/hermes/scripts/label-images-sweep.*. See docs/label-entity.md.",
|
|
2956
|
+
probeConfig: { cadenceMs: 60 * MINUTE_MS, cronName: "fluncle-label-images", kind: "cron" },
|
|
2957
|
+
weights: { status: "hidden" }
|
|
2958
|
+
},
|
|
2948
2959
|
{
|
|
2949
2960
|
command: "fluncle admin tracks capture-audio --queue",
|
|
2950
2961
|
exposedContent: [
|
|
@@ -10286,15 +10297,17 @@ async function runCatalogueList(options, catalogueListCommand2) {
|
|
|
10286
10297
|
}
|
|
10287
10298
|
for (const track of tracks) {
|
|
10288
10299
|
const identity = `${track.artists.join(", ")} \u2014 ${track.title}`;
|
|
10300
|
+
const dup = track.duplicateOf;
|
|
10301
|
+
const dupWhy = dup ? `already in the archive \u2014 ${dup.logId ? `${dup.logId} ` : ""}${dup.artists.join(", ")} \u2014 ${dup.title}` : null;
|
|
10289
10302
|
if (options.lens === "capture") {
|
|
10290
10303
|
const reason = track.captureReason;
|
|
10291
|
-
const why2 = reason?.kind === "artist" ? `${reason.name} is already in the archive` : reason?.kind === "label" ? `${reason.name} already carries a finding` : reason?.kind === "seed-label" ? `${reason.name} is a label the crawler digs from` : reason?.kind === "skipped-label" ? `${reason.name} is not your lane \u2014 ranked last, kept anyway` : "nothing ties it to the archive yet";
|
|
10304
|
+
const why2 = dupWhy ?? (reason?.kind === "artist" ? `${reason.name} is already in the archive` : reason?.kind === "label" ? `${reason.name} already carries a finding` : reason?.kind === "seed-label" ? `${reason.name} is a label the crawler digs from` : reason?.kind === "skipped-label" ? `${reason.name} is not your lane \u2014 ranked last, kept anyway` : "nothing ties it to the archive yet");
|
|
10292
10305
|
console.log(`${String(track.capturePriority ?? 0)} ${identity.padEnd(52)} ${why2}`);
|
|
10293
10306
|
continue;
|
|
10294
10307
|
}
|
|
10295
10308
|
const match = track.nearestFinding;
|
|
10296
10309
|
const score = track.nearestFindingScore?.toFixed(2) ?? "\u2014";
|
|
10297
|
-
const why = match ? `closest to ${match.logId ? `${match.logId} ` : ""}${match.artists.join(", ")} \u2014 ${match.title}` : "nothing to compare it to yet";
|
|
10310
|
+
const why = dupWhy ?? (match ? `closest to ${match.logId ? `${match.logId} ` : ""}${match.artists.join(", ")} \u2014 ${match.title}` : "nothing to compare it to yet");
|
|
10298
10311
|
console.log(`${score} ${identity.padEnd(52)} ${why}`);
|
|
10299
10312
|
}
|
|
10300
10313
|
}
|
package/package.json
CHANGED