fluncle 0.105.0 → 0.107.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 +3 -65
  2. package/package.json +1 -1
package/bin/fluncle.mjs CHANGED
@@ -557,7 +557,7 @@ function parseVersion(version) {
557
557
  var currentVersion;
558
558
  var init_version = __esm(() => {
559
559
  init_output();
560
- currentVersion = "0.105.0".trim() ? "0.105.0".trim() : "0.1.0";
560
+ currentVersion = "0.107.0".trim() ? "0.107.0".trim() : "0.1.0";
561
561
  });
562
562
 
563
563
  // src/update-notifier.ts
@@ -2207,7 +2207,7 @@ function parseVersion2(version) {
2207
2207
  var currentVersion2, latestReleaseUrl = "https://api.github.com/repos/mauricekleine/fluncle/releases/latest";
2208
2208
  var init_version2 = __esm(() => {
2209
2209
  init_output();
2210
- currentVersion2 = "0.105.0".trim() ? "0.105.0".trim() : "0.1.0";
2210
+ currentVersion2 = "0.107.0".trim() ? "0.107.0".trim() : "0.1.0";
2211
2211
  });
2212
2212
 
2213
2213
  // ../../packages/registry/src/index.ts
@@ -2864,17 +2864,6 @@ var init_src = __esm(() => {
2864
2864
  probeConfig: { cadenceMs: 60 * MINUTE_MS, cronName: "fluncle-artist-sweep", kind: "cron" },
2865
2865
  weights: { status: "hidden" }
2866
2866
  },
2867
- {
2868
- command: "fluncle admin artists follow",
2869
- exposedContent: [
2870
- "auto-follow high-confidence artists on Spotify + YouTube — the championing motion (--no-agent, Worker HTTP)"
2871
- ],
2872
- kind: "cron",
2873
- name: "cron.artist-follow",
2874
- operatorNotes: "every 6h. Pure HTTP trigger, zero LLM tokens. Agent tier (the box holds no Spotify/YouTube tokens; the Worker does the PUT /me/following + subscriptions.insert and stamps followed_at). Idempotent by followed_at IS NULL, acting only on status IN (auto, confirmed); quota-paced. Mixcloud is link-only (cut). Source: docs/agents/hermes/scripts/artist-follow-sweep.*. Probed on /status as cron.artist-follow.",
2875
- probeConfig: { cadenceMs: 6 * 60 * MINUTE_MS, cronName: "fluncle-artist-follow", kind: "cron" },
2876
- weights: { status: "hidden" }
2877
- },
2878
2867
  {
2879
2868
  command: "fluncle admin tracks social --capture",
2880
2869
  exposedContent: [
@@ -5205,7 +5194,6 @@ var exports_admin_artists = {};
5205
5194
  __export(exports_admin_artists, {
5206
5195
  resolveArtistCommand: () => resolveArtistCommand,
5207
5196
  listArtistsCommand: () => listArtistsCommand,
5208
- followArtistsCommand: () => followArtistsCommand,
5209
5197
  backfillArtistsCommand: () => backfillArtistsCommand
5210
5198
  });
5211
5199
  async function listArtistsCommand(limit, cursor) {
@@ -5225,10 +5213,6 @@ async function backfillArtistsCommand(limit, dryRun, cursor) {
5225
5213
  }
5226
5214
  return adminApiPost(`/api/admin/backfill/artists?${params.toString()}`);
5227
5215
  }
5228
- async function followArtistsCommand(limit, dryRun) {
5229
- const params = new URLSearchParams({ dryRun: String(dryRun), limit: String(limit) });
5230
- return adminApiPost(`/api/admin/artists/follow?${params.toString()}`);
5231
- }
5232
5216
  var init_admin_artists = __esm(() => {
5233
5217
  init_api();
5234
5218
  });
@@ -8047,14 +8031,10 @@ function addAdminCommands(program2) {
8047
8031
  const { authLastfmCommand: authLastfmCommand2 } = await Promise.resolve().then(() => (init_auth_lastfm(), exports_auth_lastfm));
8048
8032
  await authLastfmCommand2(options);
8049
8033
  });
8050
- const artists = configureCommand(admin.command("artists").description("Artist entity + championing commands"));
8034
+ const artists = configureCommand(admin.command("artists").description("Artist entity + resolution commands"));
8051
8035
  artists.action(() => {
8052
8036
  artists.outputHelp();
8053
8037
  });
8054
- artists.command("follow").description("Auto-follow high-confidence artists on YouTube (drains the queue)").option("--dry-run", "Report who WOULD be followed without calling the platform", false).option("--limit <limit>", "Max artists to follow this run", "20").option("--json", "Print JSON", false).action(async (options) => {
8055
- const { followArtistsCommand: followArtistsCommand2 } = await Promise.resolve().then(() => (init_admin_artists(), exports_admin_artists));
8056
- await runFollowArtists(options, followArtistsCommand2);
8057
- });
8058
8038
  const backfill = configureCommand(admin.command("backfills").description("Backfill operator-only archives"));
8059
8039
  backfill.action(() => {
8060
8040
  backfill.outputHelp();
@@ -8381,48 +8361,6 @@ async function runArtistResolve(artistId, options, resolveArtistCommand2) {
8381
8361
  console.log(` wikidata: ${result.wikidataQid}`);
8382
8362
  }
8383
8363
  }
8384
- async function runFollowArtists(options, followArtistsCommand2) {
8385
- const limit = parseListLimit(options.limit);
8386
- const followed = [];
8387
- const failed = [];
8388
- let dryRun = options.dryRun;
8389
- let remaining = 0;
8390
- while (followed.length + failed.length < limit) {
8391
- const batchLimit = Math.min(50, limit - (followed.length + failed.length));
8392
- const result = await followArtistsCommand2(batchLimit, options.dryRun);
8393
- dryRun = result.dryRun;
8394
- remaining = result.remaining;
8395
- followed.push(...result.followed);
8396
- failed.push(...result.failed);
8397
- if (!options.json) {
8398
- const verb2 = result.dryRun ? "would follow" : "followed";
8399
- console.log(` \u2026${verb2} ${result.followedCount}; ${result.failedCount} failed; ${result.remaining} remaining`);
8400
- }
8401
- if (remaining === 0 || result.dryRun || result.followedCount === 0) {
8402
- break;
8403
- }
8404
- }
8405
- if (options.json) {
8406
- printJson({
8407
- dryRun,
8408
- failed,
8409
- failedCount: failed.length,
8410
- followed,
8411
- followedCount: followed.length,
8412
- ok: true,
8413
- remaining
8414
- });
8415
- return;
8416
- }
8417
- const verb = dryRun ? "Would follow" : "Followed";
8418
- console.log(`${verb} ${followed.length} artist(s); ${failed.length} failed; ${remaining} remaining.`);
8419
- for (const item of followed) {
8420
- console.log(` ${item.platform}: ${item.artistName}`);
8421
- }
8422
- for (const item of failed) {
8423
- console.log(` ${item.platform} ${item.socialId}: ${item.error}`);
8424
- }
8425
- }
8426
8364
  async function runTrackVideo(idOrLogId, options, trackVideoCommand2) {
8427
8365
  if (!idOrLogId) {
8428
8366
  throw new Error("Missing id. Usage: fluncle admin tracks video <track_id|log_id> (--dir <dir> | --footage <file> [--footage-social <file>] [--footage-notext <file>] [--footage-landscape <file>] [--footage-landscape-social <file>] [--poster <file>] [--cover <file>] [--note <file>] [--composition <file>] [--props <file>] [--render <file>] [--intent <file>] [--metrics <file>] [--scene <file>] | --plate <file> [--plate-background <file>]) [--allow-partial]");
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.105.0"
34
+ "version": "0.107.0"
35
35
  }