fluncle 0.268.0 → 0.270.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 +16 -13
- package/package.json +1 -1
package/bin/fluncle.mjs
CHANGED
|
@@ -651,7 +651,7 @@ function parseVersion(version) {
|
|
|
651
651
|
var currentVersion;
|
|
652
652
|
var init_version = __esm(() => {
|
|
653
653
|
init_output();
|
|
654
|
-
currentVersion = "0.
|
|
654
|
+
currentVersion = "0.270.0".trim() ? "0.270.0".trim() : "0.1.0";
|
|
655
655
|
});
|
|
656
656
|
|
|
657
657
|
// src/update-notifier.ts
|
|
@@ -2013,13 +2013,13 @@ var init_subscribe = __esm(() => {
|
|
|
2013
2013
|
|
|
2014
2014
|
// src/commands/submit.ts
|
|
2015
2015
|
async function submitCommand(input) {
|
|
2016
|
-
const query = input?.trim() || await promptLine("
|
|
2016
|
+
const query = input?.trim() || await promptLine("Track or Spotify link: ", PROMPT_NON_INTERACTIVE_MESSAGE2);
|
|
2017
2017
|
if (!query) {
|
|
2018
2018
|
throw new CliError2("missing_query", "Missing search input");
|
|
2019
2019
|
}
|
|
2020
2020
|
const response = await publicApiGet(`/api/v1/search?q=${encodeURIComponent(query)}`);
|
|
2021
2021
|
if (response.results.length === 0) {
|
|
2022
|
-
throw new CliError2("no_results", "
|
|
2022
|
+
throw new CliError2("no_results", "Nothing came back for that search. Try the artist and the title.");
|
|
2023
2023
|
}
|
|
2024
2024
|
const selected = await selectCandidate(response.results);
|
|
2025
2025
|
if (!selected) {
|
|
@@ -2035,8 +2035,7 @@ async function submitCommand(input) {
|
|
|
2035
2035
|
honeypot: "",
|
|
2036
2036
|
note,
|
|
2037
2037
|
source: "cli",
|
|
2038
|
-
spotifyTrackId: selected.id,
|
|
2039
|
-
spotifyUrl: selected.spotifyUrl,
|
|
2038
|
+
...selected.provider === "deezer" ? { deezerTrackId: selected.id } : selected.provider === "catalogue" ? { catalogueTrackId: selected.id } : { spotifyTrackId: selected.id, spotifyUrl: selected.spotifyUrl },
|
|
2040
2039
|
title: selected.title
|
|
2041
2040
|
});
|
|
2042
2041
|
console.log("Logged. I'll give it a listen.");
|
|
@@ -2364,7 +2363,7 @@ function parseVersion2(version) {
|
|
|
2364
2363
|
var currentVersion2, latestReleaseUrl = "https://api.github.com/repos/mauricekleine/fluncle/releases/latest";
|
|
2365
2364
|
var init_version2 = __esm(() => {
|
|
2366
2365
|
init_output();
|
|
2367
|
-
currentVersion2 = "0.
|
|
2366
|
+
currentVersion2 = "0.270.0".trim() ? "0.270.0".trim() : "0.1.0";
|
|
2368
2367
|
});
|
|
2369
2368
|
|
|
2370
2369
|
// ../../packages/registry/src/index.ts
|
|
@@ -3218,7 +3217,7 @@ var init_src = __esm(() => {
|
|
|
3218
3217
|
apiFormat: "application/json",
|
|
3219
3218
|
discoveryUrl: `${SITE}/.well-known/mcp/server-card.json`,
|
|
3220
3219
|
exposedContent: [
|
|
3221
|
-
"the archive as MCP tools (Streamable HTTP, no auth): list_findings, list_tracks, list_fresh, get_track, get_random_track, get_status, search_archive, get_artist, get_label, build_set, list_similar_artists, list_album_catalogue, list_artist_catalogue, list_label_catalogue, list_artists, list_albums, list_labels, submit_track, subscribe_newsletter, plus the MCP-only search_tracks (
|
|
3220
|
+
"the archive as MCP tools (Streamable HTTP, no auth): list_findings, list_tracks, list_fresh, get_track, get_random_track, get_status, search_archive, get_artist, get_label, build_set, list_similar_artists, list_album_catalogue, list_artist_catalogue, list_label_catalogue, list_artists, list_albums, list_labels, submit_track, subscribe_newsletter, plus the MCP-only search_tracks (track search for submissions, not an archive read)",
|
|
3222
3221
|
"the archive as MCP resources: each finding/mixtape at fluncle://finding/<logId> or fluncle://mixtape/<logId> (its public record)",
|
|
3223
3222
|
"Fluncle-voiced MCP prompts: recommend_finding, walk_recent_night, decode_coordinate"
|
|
3224
3223
|
],
|
|
@@ -11694,7 +11693,7 @@ var init_admin_artists = __esm(() => {
|
|
|
11694
11693
|
method: "POST",
|
|
11695
11694
|
operationId: "backfillArtistImages",
|
|
11696
11695
|
path: "/admin/backfill/artist-images",
|
|
11697
|
-
summary: "Back-fill artist
|
|
11696
|
+
summary: "Back-fill artist avatars (image_url) for existing artists (bounded)",
|
|
11698
11697
|
tags: ["Admin"]
|
|
11699
11698
|
}).input(object({
|
|
11700
11699
|
query: object({
|
|
@@ -13435,7 +13434,9 @@ var init__shared = __esm(() => {
|
|
|
13435
13434
|
artists: array(string2()),
|
|
13436
13435
|
artworkUrl: string2().optional(),
|
|
13437
13436
|
durationMs: number2().optional(),
|
|
13437
|
+
externalUrl: string2().optional(),
|
|
13438
13438
|
id: string2(),
|
|
13439
|
+
provider: _enum(["catalogue", "deezer", "spotify"]).optional(),
|
|
13439
13440
|
spotifyArtistIds: array(string2()).optional(),
|
|
13440
13441
|
spotifyUrl: string2(),
|
|
13441
13442
|
title: string2()
|
|
@@ -17479,7 +17480,7 @@ var init_search2 = __esm(() => {
|
|
|
17479
17480
|
method: "GET",
|
|
17480
17481
|
operationId: "searchTracks",
|
|
17481
17482
|
path: "/search",
|
|
17482
|
-
summary: "Search
|
|
17483
|
+
summary: "Search for track candidates to submit",
|
|
17483
17484
|
tags: ["Search"]
|
|
17484
17485
|
}).input(object({ q: string2().max(512).optional() })).output(object({ ok: literal(true), results: array(TrackSearchResultSchema) }));
|
|
17485
17486
|
SearchFiltersSchema = object({
|
|
@@ -17579,7 +17580,9 @@ var init_submissions = __esm(() => {
|
|
|
17579
17580
|
album: unknown().optional(),
|
|
17580
17581
|
artists: unknown().optional(),
|
|
17581
17582
|
artworkUrl: unknown().optional(),
|
|
17583
|
+
catalogueTrackId: unknown().optional(),
|
|
17582
17584
|
contact: unknown().optional(),
|
|
17585
|
+
deezerTrackId: unknown().optional(),
|
|
17583
17586
|
honeypot: unknown().optional(),
|
|
17584
17587
|
note: unknown().optional(),
|
|
17585
17588
|
source: unknown().optional(),
|
|
@@ -25079,7 +25082,7 @@ JSON field reference:
|
|
|
25079
25082
|
await Promise.resolve().then(() => init_admin_artists2());
|
|
25080
25083
|
await runBackfillArtists(options, backfillArtistsCommand);
|
|
25081
25084
|
});
|
|
25082
|
-
backfill.command("artist-images").description("Back-fill artist
|
|
25085
|
+
backfill.command("artist-images").description("Back-fill artist avatars (image_url) for existing artists").option("--dry-run", "Report which artists would be filled without touching the DB", false).option("--limit <limit>", "Max artists to check", "20").option("--json", "Print JSON", false).action(async (options) => {
|
|
25083
25086
|
await Promise.resolve().then(() => init_admin_artists2());
|
|
25084
25087
|
await runBackfillArtistImages(options, backfillArtistImagesCommand);
|
|
25085
25088
|
});
|
|
@@ -26171,8 +26174,8 @@ async function runBackfillArtistImages(options, backfillArtistImagesCommand) {
|
|
|
26171
26174
|
let dryRun = options.dryRun;
|
|
26172
26175
|
let queueDepth = 0;
|
|
26173
26176
|
let rateLimited = false;
|
|
26174
|
-
while (
|
|
26175
|
-
const remaining = limit -
|
|
26177
|
+
while (checkedCount < limit) {
|
|
26178
|
+
const remaining = limit - checkedCount;
|
|
26176
26179
|
const result = await backfillArtistImagesCommand(remaining, options.dryRun, cursor);
|
|
26177
26180
|
budgetLimited ||= result.budgetLimited;
|
|
26178
26181
|
checkedCount += result.checkedCount;
|
|
@@ -26207,7 +26210,7 @@ async function runBackfillArtistImages(options, backfillArtistImagesCommand) {
|
|
|
26207
26210
|
return;
|
|
26208
26211
|
}
|
|
26209
26212
|
const verb = dryRun ? "Would fill" : "Filled";
|
|
26210
|
-
console.log(`${verb} ${filled.length} artist avatar(s); checked ${checkedCount}; ${failed.length} failed; ${skipped.length} without
|
|
26213
|
+
console.log(`${verb} ${filled.length} artist avatar(s); checked ${checkedCount}; ${failed.length} failed; ${skipped.length} without an image; ${queueDepth} queued.`);
|
|
26211
26214
|
for (const artistId of filled) {
|
|
26212
26215
|
console.log(` ${artistId}`);
|
|
26213
26216
|
}
|
package/package.json
CHANGED