fluncle 0.155.0 → 0.156.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 +52 -2
  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.155.0".trim() ? "0.155.0".trim() : "0.1.0";
564
+ currentVersion = "0.156.0".trim() ? "0.156.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.155.0".trim() ? "0.155.0".trim() : "0.1.0";
2192
+ currentVersion2 = "0.156.0".trim() ? "0.156.0".trim() : "0.1.0";
2193
2193
  });
2194
2194
 
2195
2195
  // ../../packages/registry/src/index.ts
@@ -3025,6 +3025,28 @@ var init_src = __esm(() => {
3025
3025
  probeConfig: { cadenceMs: 10 * MINUTE_MS, cronName: "fluncle-note", kind: "cron" },
3026
3026
  weights: { status: "hidden" }
3027
3027
  },
3028
+ {
3029
+ command: "fluncle admin artists describe --queue",
3030
+ exposedContent: [
3031
+ "auto-author the /artist/<slug> voiced bio, fill-empty-only (hybrid: one claude -p call)"
3032
+ ],
3033
+ kind: "cron",
3034
+ name: "cron.artist-bio",
3035
+ operatorNotes: "every 30m. Hybrid --no-agent; one claude -p authors the paragraph off best-effort Firecrawl facts + identity. Never clobbers an operator bio. Box activation operator-gated. Source: docs/agents/hermes/scripts/{entity-bio-sweep.ts,artist-bio-sweep.sh}.",
3036
+ probeConfig: { cadenceMs: 30 * MINUTE_MS, cronName: "fluncle-artist-bio", kind: "cron" },
3037
+ weights: { status: "hidden" }
3038
+ },
3039
+ {
3040
+ command: "fluncle admin labels describe --queue",
3041
+ exposedContent: [
3042
+ "auto-author the /label/<slug> voiced bio, fill-empty-only (hybrid: one claude -p call)"
3043
+ ],
3044
+ kind: "cron",
3045
+ name: "cron.label-bio",
3046
+ operatorNotes: "every 30m. Hybrid --no-agent; one claude -p authors the paragraph off best-effort Firecrawl facts + identity. Never clobbers an operator bio. Box activation operator-gated. Source: docs/agents/hermes/scripts/{entity-bio-sweep.ts,label-bio-sweep.sh}.",
3047
+ probeConfig: { cadenceMs: 30 * MINUTE_MS, cronName: "fluncle-label-bio", kind: "cron" },
3048
+ weights: { status: "hidden" }
3049
+ },
3028
3050
  {
3029
3051
  command: "fluncle admin submissions triage",
3030
3052
  exposedContent: [
@@ -5896,6 +5918,7 @@ var exports_admin_artists = {};
5896
5918
  __export(exports_admin_artists, {
5897
5919
  resolveArtistCommand: () => resolveArtistCommand,
5898
5920
  listArtistsCommand: () => listArtistsCommand,
5921
+ draftArtistBioCommand: () => draftArtistBioCommand,
5899
5922
  describeArtistCommand: () => describeArtistCommand,
5900
5923
  buildBioBody: () => buildBioBody,
5901
5924
  backfillArtistsCommand: () => backfillArtistsCommand,
@@ -5915,6 +5938,9 @@ function buildBioBody(options) {
5915
5938
  async function describeArtistCommand(slug, options) {
5916
5939
  return adminApiPost(`/api/admin/artists/${encodeURIComponent(slug)}/bio`, buildBioBody(options));
5917
5940
  }
5941
+ async function draftArtistBioCommand(slug) {
5942
+ return adminApiGet(`/api/admin/artists/${encodeURIComponent(slug)}/bio-draft`);
5943
+ }
5918
5944
  async function artistsBioQueueCommand(limit) {
5919
5945
  const response = await adminApiGet(`/api/admin/artists/bio-queue?limit=${limit}`);
5920
5946
  return response.artists;
@@ -5966,12 +5992,16 @@ var init_admin_artists2 = __esm(() => {
5966
5992
  var exports_admin_labels = {};
5967
5993
  __export(exports_admin_labels, {
5968
5994
  labelsBioQueueCommand: () => labelsBioQueueCommand,
5995
+ draftLabelBioCommand: () => draftLabelBioCommand,
5969
5996
  describeLabelCommand: () => describeLabelCommand,
5970
5997
  backfillLabelImagesCommand: () => backfillLabelImagesCommand
5971
5998
  });
5972
5999
  async function describeLabelCommand(slug, options) {
5973
6000
  return adminApiPost(`/api/admin/labels/${encodeURIComponent(slug)}/bio`, buildBioBody2(options));
5974
6001
  }
6002
+ async function draftLabelBioCommand(slug) {
6003
+ return adminApiGet(`/api/admin/labels/${encodeURIComponent(slug)}/bio-draft`);
6004
+ }
5975
6005
  async function labelsBioQueueCommand(limit) {
5976
6006
  const response = await adminApiGet(`/api/admin/labels/bio-queue?limit=${limit}`);
5977
6007
  return response.labels;
@@ -9175,6 +9205,10 @@ function addAdminCommands(program2) {
9175
9205
  const { describeArtistCommand: describeArtistCommand2 } = await Promise.resolve().then(() => (init_admin_artists(), exports_admin_artists));
9176
9206
  await runEntityDescribe("artist", slug, options, describeArtistCommand2);
9177
9207
  });
9208
+ artists.command("draft-bio").description("Assemble the Worker-grounded bio prompt for an artist (the sweep's trigger)").argument("<slug>").option("--json", "Print JSON", false).allowExcessArguments().action(async (slug, options) => {
9209
+ const { draftArtistBioCommand: draftArtistBioCommand2 } = await Promise.resolve().then(() => (init_admin_artists(), exports_admin_artists));
9210
+ await runEntityBioDraft("artist", slug, options, draftArtistBioCommand2);
9211
+ });
9178
9212
  const labels = configureCommand(admin.command("labels").description("Label entity commands (the voiced bio)"));
9179
9213
  labels.action(() => {
9180
9214
  labels.outputHelp();
@@ -9188,6 +9222,10 @@ function addAdminCommands(program2) {
9188
9222
  const { describeLabelCommand: describeLabelCommand2 } = await Promise.resolve().then(() => (init_admin_labels(), exports_admin_labels));
9189
9223
  await runEntityDescribe("label", slug, options, describeLabelCommand2);
9190
9224
  });
9225
+ labels.command("draft-bio").description("Assemble the Worker-grounded bio prompt for a label (the sweep's trigger)").argument("<slug>").option("--json", "Print JSON", false).allowExcessArguments().action(async (slug, options) => {
9226
+ const { draftLabelBioCommand: draftLabelBioCommand2 } = await Promise.resolve().then(() => (init_admin_labels(), exports_admin_labels));
9227
+ await runEntityBioDraft("label", slug, options, draftLabelBioCommand2);
9228
+ });
9191
9229
  const migrations = configureCommand(admin.command("migrations").description("One-off operator data migrations"));
9192
9230
  migrations.action(() => {
9193
9231
  migrations.outputHelp();
@@ -9352,6 +9390,18 @@ async function runEntityBioQueue(kind, options, queueCommand2) {
9352
9390
  console.log(` ${item.slug} ${item.name}`);
9353
9391
  }
9354
9392
  }
9393
+ async function runEntityBioDraft(kind, slug, options, draftCommand) {
9394
+ const draft = await draftCommand(slug);
9395
+ if (options.json) {
9396
+ printJson(draft);
9397
+ return;
9398
+ }
9399
+ if (!draft.found) {
9400
+ console.log(`No ${kind} with slug ${slug}.`);
9401
+ return;
9402
+ }
9403
+ console.log(`Drafted a bio prompt for ${draft.name} (${draft.findingCount} finding(s), facts: ${draft.hasFacts ? "yes" : "none"}, prompt v${draft.promptVersion}).`);
9404
+ }
9355
9405
  async function runTrackSimilar(idOrLogId, options, trackSimilarCommand2) {
9356
9406
  if (!idOrLogId) {
9357
9407
  throw new Error("Missing id. Usage: fluncle tracks similar <track_id|log_id> [--limit <n>] [--json]");
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.155.0"
34
+ "version": "0.156.0"
35
35
  }