fluncle 0.241.0 → 0.242.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 +207 -7
  2. package/package.json +1 -1
package/bin/fluncle.mjs CHANGED
@@ -622,7 +622,7 @@ function parseVersion(version) {
622
622
  var currentVersion;
623
623
  var init_version = __esm(() => {
624
624
  init_output();
625
- currentVersion = "0.241.0".trim() ? "0.241.0".trim() : "0.1.0";
625
+ currentVersion = "0.242.0".trim() ? "0.242.0".trim() : "0.1.0";
626
626
  });
627
627
 
628
628
  // src/update-notifier.ts
@@ -2335,7 +2335,7 @@ function parseVersion2(version) {
2335
2335
  var currentVersion2, latestReleaseUrl = "https://api.github.com/repos/mauricekleine/fluncle/releases/latest";
2336
2336
  var init_version2 = __esm(() => {
2337
2337
  init_output();
2338
- currentVersion2 = "0.241.0".trim() ? "0.241.0".trim() : "0.1.0";
2338
+ currentVersion2 = "0.242.0".trim() ? "0.242.0".trim() : "0.1.0";
2339
2339
  });
2340
2340
 
2341
2341
  // ../../packages/registry/src/index.ts
@@ -11435,7 +11435,7 @@ var init_admin_bios = __esm(() => {
11435
11435
  });
11436
11436
 
11437
11437
  // ../../packages/contracts/src/orpc/admin-catalogue.ts
11438
- var CatalogueLensSchema, CapturePriorityReasonSchema, CatalogueMatchSchema, CatalogueTrackItemSchema, CatalogueSummarySchema, listCatalogueTracks, rankCatalogue, recordDemand, clearWrongAudio, requeueUnmatchedCaptures, requeueAnchor, requeueIsrcRecovery, flagWrongAudio, forceCapture, certifyTrack, setTrackDismissed, CaptureVerifyItemSchema, listUnverifiedCaptures, verifyCapture, CrawlPassSchema, CrawlPhaseInitializationSchema, MAX_CRAWL_PREPARE_LIMIT = 6, CrawlPhaseInputSchema, CrawlPhaseOutputSchema, CrawlStatusSchema, crawlCatalogue, getCrawlStatus, ANCHOR_CANDIDATE_LIMIT = 100, ANCHOR_ARTIST_LIMIT = 20, ANCHOR_TEXT_MAX = 300, ANCHOR_ISRC_MAX = 64, ANCHOR_ID_MAX = 64, ANCHOR_URL_MAX = 2048, AnchorCandidateSchema, anchorTrack, DEEZER_CANDIDATE_LIMIT = 5, DEEZER_TEXT_MAX = 300, DEEZER_ISRC_MAX = 64, DEEZER_TRACK_ID_MAX = 32, DeezerIsrcCandidateSchema, resolveAnchor, resolveAnchorReview, setAnchorSearch, setAnchorApify, CaptureBudgetStateSchema, getCaptureBudget, setCaptureBudget, SpotifyAnchorBreakerStateSchema, AnchorRungFlagsSchema, getSpotifyAnchorBreaker, resetSpotifyAnchorBreaker, AppleBreakerStateSchema, resetAppleBreaker, adminCatalogueContract;
11438
+ var CatalogueLensSchema, CapturePriorityReasonSchema, CatalogueMatchSchema, CatalogueTrackItemSchema, CatalogueSummarySchema, listCatalogueTracks, rankCatalogue, recordDemand, clearWrongAudio, requeueUnmatchedCaptures, requeueAnchor, requeueIsrcRecovery, flagWrongAudio, forceCapture, certifyTrack, setTrackDismissed, CaptureVerifyItemSchema, listUnverifiedCaptures, verifyCapture, CrawlPassSchema, CrawlPhaseInitializationSchema, MAX_CRAWL_PREPARE_LIMIT = 6, CrawlFetchPlanSchema, SuppliedCrawlBodySchema, MAX_CRAWL_COMMIT_BATCH, CRAWL_COMMIT_TOKEN_MAX_BYTES, CRAWL_COMMIT_BATCH_MAX_TOTAL_BYTES, CrawlCommitItemSchema, CrawlCommitReceiptSchema, CrawlPhaseCapabilitiesSchema, CrawlPhaseInputSchema, CrawlPhaseOutputSchema, CrawlStatusSchema, crawlCatalogue, commitCrawlNodes, getCrawlStatus, ANCHOR_CANDIDATE_LIMIT = 100, ANCHOR_ARTIST_LIMIT = 20, ANCHOR_TEXT_MAX = 300, ANCHOR_ISRC_MAX = 64, ANCHOR_ID_MAX = 64, ANCHOR_URL_MAX = 2048, AnchorCandidateSchema, anchorTrack, DEEZER_CANDIDATE_LIMIT = 5, DEEZER_TEXT_MAX = 300, DEEZER_ISRC_MAX = 64, DEEZER_TRACK_ID_MAX = 32, DeezerIsrcCandidateSchema, resolveAnchor, resolveAnchorReview, setAnchorSearch, setAnchorApify, CaptureBudgetStateSchema, getCaptureBudget, setCaptureBudget, SpotifyAnchorBreakerStateSchema, AnchorRungFlagsSchema, getSpotifyAnchorBreaker, resetSpotifyAnchorBreaker, AppleBreakerStateSchema, resetAppleBreaker, adminCatalogueContract;
11439
11439
  var init_admin_catalogue = __esm(() => {
11440
11440
  init_dist3();
11441
11441
  init_zod();
@@ -11677,6 +11677,53 @@ var init_admin_catalogue = __esm(() => {
11677
11677
  seeded: number2(),
11678
11678
  seedsRearmed: number2()
11679
11679
  });
11680
+ CrawlFetchPlanSchema = discriminatedUnion("kind", [
11681
+ object({ kind: literal("none") }),
11682
+ object({ kind: literal("single"), url: string2().max(2048) }),
11683
+ object({
11684
+ countField: literal("release-count"),
11685
+ kind: literal("tail"),
11686
+ pageSize: number2().int().positive(),
11687
+ pageUrlTemplate: string2().max(2048),
11688
+ probeUrl: string2().max(2048)
11689
+ })
11690
+ ]);
11691
+ SuppliedCrawlBodySchema = object({
11692
+ body: json().optional(),
11693
+ outcome: _enum(["body", "empty", "invalid", "oversize", "throttled"]),
11694
+ url: string2().max(2048)
11695
+ });
11696
+ MAX_CRAWL_COMMIT_BATCH = MAX_CRAWL_PREPARE_LIMIT;
11697
+ CRAWL_COMMIT_TOKEN_MAX_BYTES = 2 * 1024 * 1024;
11698
+ CRAWL_COMMIT_BATCH_MAX_TOTAL_BYTES = 8 * 1024 * 1024;
11699
+ CrawlCommitItemSchema = strictObject({
11700
+ commitToken: string2().max(CRAWL_COMMIT_TOKEN_MAX_BYTES),
11701
+ operationId: literal("catalogue.crawl"),
11702
+ operationKey: string2().max(128),
11703
+ requestDigest: string2().regex(/^[0-9a-f]{64}$/)
11704
+ });
11705
+ CrawlCommitReceiptSchema = object({
11706
+ elapsedMs: number2().int().min(0).optional(),
11707
+ error: string2().max(500).optional(),
11708
+ operationKey: string2().max(128),
11709
+ outcome: _enum([
11710
+ "committed",
11711
+ "conflict",
11712
+ "failed",
11713
+ "in-progress",
11714
+ "lookup-failed",
11715
+ "rejected",
11716
+ "safely-retryable"
11717
+ ]),
11718
+ replayed: boolean2(),
11719
+ result: json().optional(),
11720
+ resultIdentity: string2().optional(),
11721
+ state: _enum(["accepted", "committed", "rejected"]).optional()
11722
+ }).meta({ id: "CrawlCommitReceipt" });
11723
+ CrawlPhaseCapabilitiesSchema = strictObject({
11724
+ commitBatchLimit: number2().int().min(1).max(MAX_CRAWL_COMMIT_BATCH),
11725
+ commitBatchMaxTotalBytes: number2().int().min(1)
11726
+ });
11680
11727
  CrawlPhaseInputSchema = discriminatedUnion("phase", [
11681
11728
  object({ phase: literal("initialize") }),
11682
11729
  object({
@@ -11684,7 +11731,11 @@ var init_admin_catalogue = __esm(() => {
11684
11731
  maxHop: number2().int().min(0).max(3).default(2),
11685
11732
  phase: literal("prepare")
11686
11733
  }),
11687
- object({ phase: literal("fetch"), preparedToken: string2().max(2 * 1024 * 1024) }),
11734
+ object({
11735
+ phase: literal("fetch"),
11736
+ preparedToken: string2().max(2 * 1024 * 1024),
11737
+ supplied: array(SuppliedCrawlBodySchema).max(2).optional()
11738
+ }),
11688
11739
  object({
11689
11740
  commitToken: string2().max(2 * 1024 * 1024),
11690
11741
  operationId: literal("catalogue.crawl"),
@@ -11701,9 +11752,15 @@ var init_admin_catalogue = __esm(() => {
11701
11752
  phase: literal("initialize")
11702
11753
  }),
11703
11754
  object({
11755
+ boxFetch: boolean2(),
11756
+ capabilities: CrawlPhaseCapabilitiesSchema.optional(),
11704
11757
  frontierPending: number2(),
11705
11758
  initialization: CrawlPhaseInitializationSchema,
11706
- items: array(object({ nodeId: string2(), preparedToken: string2() })).max(MAX_CRAWL_PREPARE_LIMIT),
11759
+ items: array(object({
11760
+ fetchPlan: CrawlFetchPlanSchema,
11761
+ nodeId: string2(),
11762
+ preparedToken: string2()
11763
+ })).max(MAX_CRAWL_PREPARE_LIMIT),
11707
11764
  kind: _enum(["drained", "prepared", "unavailable"]),
11708
11765
  ok: literal(true),
11709
11766
  phase: literal("prepare")
@@ -11714,6 +11771,7 @@ var init_admin_catalogue = __esm(() => {
11714
11771
  operationId: literal("catalogue.crawl"),
11715
11772
  operationKey: string2(),
11716
11773
  phase: literal("fetch"),
11774
+ rateLimited: boolean2().optional(),
11717
11775
  requestDigest: string2()
11718
11776
  }),
11719
11777
  object({
@@ -11770,6 +11828,19 @@ var init_admin_catalogue = __esm(() => {
11770
11828
  maxHop: string2().optional()
11771
11829
  })
11772
11830
  })).output(union([CrawlPassSchema.extend({ ok: literal(true) }), CrawlPhaseOutputSchema]));
11831
+ commitCrawlNodes = oc.route({
11832
+ method: "POST",
11833
+ operationId: "commitCrawlNodes",
11834
+ path: "/admin/catalogue/crawl/commits",
11835
+ summary: "Commit one claim's fetched crawl nodes in a single admitted phase",
11836
+ tags: ["Admin"]
11837
+ }).input(strictObject({
11838
+ items: array(CrawlCommitItemSchema).min(1).max(MAX_CRAWL_COMMIT_BATCH)
11839
+ })).output(strictObject({
11840
+ deferred: number2().int().min(0),
11841
+ ok: literal(true),
11842
+ receipts: array(CrawlCommitReceiptSchema).max(MAX_CRAWL_COMMIT_BATCH)
11843
+ }));
11773
11844
  getCrawlStatus = oc.route({
11774
11845
  method: "GET",
11775
11846
  operationId: "getCrawlStatus",
@@ -11949,6 +12020,7 @@ var init_admin_catalogue = __esm(() => {
11949
12020
  anchor_track: anchorTrack,
11950
12021
  certify_track: certifyTrack,
11951
12022
  clear_wrong_audio: clearWrongAudio,
12023
+ commit_crawl_nodes: commitCrawlNodes,
11952
12024
  crawl_catalogue: crawlCatalogue,
11953
12025
  flag_wrong_audio: flagWrongAudio,
11954
12026
  force_capture: forceCapture,
@@ -14566,7 +14638,7 @@ var init_admin_tokens = __esm(() => {
14566
14638
  });
14567
14639
 
14568
14640
  // ../../packages/contracts/src/orpc/admin-tracks.ts
14569
- var UpdateTrackBodySchema, ObserveTrackBodySchema, ContextTrackBodySchema, NoteTrackBodySchema, NoteEchoSchema, PresignVideoUploadsBodySchema, FinalizeVideoBodySchema, VideoUploadSchema, updateTrack, CaptureReconciliationKindSchema, CaptureExternalResultSchema, CaptureReceiptCoordinatesSchema, CapturePreparedTrackSchema, CaptureCommittedReceiptResultSchema, CaptureRejectedReceiptResultSchema, prepareTrackCapture, authorizeTrackCapture, commitTrackCapture, observeTrack, contextTrack, noteTrack, presignTrackVideoUploads, finalizeTrackVideo, requeueVideo, purgeVideo, PublishTrackResultSchema, getTrackAdmin, listTracksAdmin, TrackWorkKindSchema, TrackWorkScopeSchema, TrackWorkItemSchema, listTrackWork, publishTrack, MixOrderStopSchema, getMixableOrder, adminTracksContract;
14641
+ var UpdateTrackBodySchema, ObserveTrackBodySchema, ContextTrackBodySchema, NoteTrackBodySchema, NoteEchoSchema, PresignVideoUploadsBodySchema, FinalizeVideoBodySchema, VideoUploadSchema, updateTrack, CaptureReconciliationKindSchema, CaptureExternalResultSchema, CaptureReceiptCoordinatesSchema, CapturePreparedTrackSchema, CaptureCommittedReceiptResultSchema, CaptureRejectedReceiptResultSchema, prepareTrackCapture, authorizeTrackCapture, commitTrackCapture, MAX_CAPTURE_PREPARE_BATCH = 12, MAX_CAPTURE_COMMIT_BATCH = 6, MAX_EMBEDDING_WRITE_BATCH = 6, EMBEDDING_DIMENSIONS = 1024, TrackWorkCapabilitiesSchema, ItemElapsedMsSchema, CapturePreparedItemSchema, prepareTrackCaptures, CaptureCommitReceiptSchema, commitTrackCaptures, updateTrackEmbeddings, observeTrack, contextTrack, noteTrack, presignTrackVideoUploads, finalizeTrackVideo, requeueVideo, purgeVideo, PublishTrackResultSchema, getTrackAdmin, listTracksAdmin, TrackWorkKindSchema, TrackWorkScopeSchema, TrackWorkItemSchema, listTrackWork, publishTrack, MixOrderStopSchema, getMixableOrder, adminTracksContract;
14570
14642
  var init_admin_tracks = __esm(() => {
14571
14643
  init_dist3();
14572
14644
  init_zod();
@@ -14709,6 +14781,7 @@ var init_admin_tracks = __esm(() => {
14709
14781
  });
14710
14782
  CapturePreparedTrackSchema = strictObject({
14711
14783
  analyzedFrom: _enum(["full", "preview"]).optional(),
14784
+ anchored: boolean2().optional(),
14712
14785
  artists: array(string2().max(512)).max(64),
14713
14786
  bpm: number2().optional(),
14714
14787
  certified: boolean2(),
@@ -14807,6 +14880,100 @@ var init_admin_tracks = __esm(() => {
14807
14880
  replayed: boolean2()
14808
14881
  })
14809
14882
  ]));
14883
+ TrackWorkCapabilitiesSchema = strictObject({
14884
+ commitTrackCaptures: number2().int().min(1).max(MAX_CAPTURE_COMMIT_BATCH).optional(),
14885
+ prepareTrackCaptures: number2().int().min(1).max(MAX_CAPTURE_PREPARE_BATCH).optional(),
14886
+ updateTrackEmbeddings: number2().int().min(1).max(MAX_EMBEDDING_WRITE_BATCH).optional()
14887
+ });
14888
+ ItemElapsedMsSchema = number2().int().min(0).optional();
14889
+ CapturePreparedItemSchema = union([
14890
+ strictObject({
14891
+ elapsedMs: ItemElapsedMsSchema,
14892
+ prepared: literal(false),
14893
+ reason: _enum(["deferred", "ineligible", "not-found", "stale"]),
14894
+ trackId: string2().min(1).max(256)
14895
+ }),
14896
+ strictObject({
14897
+ elapsedMs: ItemElapsedMsSchema,
14898
+ prepared: literal(true),
14899
+ snapshotToken: string2().min(1).max(65536),
14900
+ track: CapturePreparedTrackSchema,
14901
+ trackId: string2().min(1).max(256)
14902
+ })
14903
+ ]);
14904
+ prepareTrackCaptures = oc.route({
14905
+ method: "POST",
14906
+ operationId: "prepareTrackCaptures",
14907
+ path: "/admin/tracks/captures/prepare",
14908
+ summary: "Prepare a batch of capture reconciliation snapshots in one admitted phase",
14909
+ tags: ["Admin"]
14910
+ }).input(strictObject({
14911
+ items: array(strictObject({
14912
+ kind: CaptureReconciliationKindSchema,
14913
+ priorSnapshotToken: string2().min(1).max(65536).optional(),
14914
+ trackId: string2().min(1).max(256)
14915
+ })).min(1).max(MAX_CAPTURE_PREPARE_BATCH),
14916
+ reservedThisTick: number2().int().min(0).max(1e4).optional()
14917
+ })).output(strictObject({
14918
+ deferred: number2().int().min(0),
14919
+ ok: literal(true),
14920
+ reserved: number2().int().min(0),
14921
+ results: array(CapturePreparedItemSchema).max(MAX_CAPTURE_PREPARE_BATCH)
14922
+ }));
14923
+ CaptureCommitReceiptSchema = object({
14924
+ elapsedMs: ItemElapsedMsSchema,
14925
+ error: string2().max(500).optional(),
14926
+ outcome: _enum([
14927
+ "committed",
14928
+ "conflict",
14929
+ "failed",
14930
+ "in-progress",
14931
+ "lookup-failed",
14932
+ "rejected",
14933
+ "safely-retryable"
14934
+ ]),
14935
+ replayed: boolean2(),
14936
+ result: union([CaptureCommittedReceiptResultSchema, CaptureRejectedReceiptResultSchema]).optional(),
14937
+ trackId: string2().min(1).max(256)
14938
+ }).meta({ id: "CaptureCommitReceipt" });
14939
+ commitTrackCaptures = oc.route({
14940
+ method: "POST",
14941
+ operationId: "commitTrackCaptures",
14942
+ path: "/admin/tracks/captures/commit",
14943
+ summary: "Commit a batch of prepared capture results in one admitted phase",
14944
+ tags: ["Admin"]
14945
+ }).input(strictObject({
14946
+ items: array(CaptureReceiptCoordinatesSchema.extend({
14947
+ commitToken: string2().min(1).max(65536),
14948
+ trackId: string2().min(1).max(256)
14949
+ })).min(1).max(MAX_CAPTURE_COMMIT_BATCH)
14950
+ })).output(strictObject({
14951
+ deferred: number2().int().min(0),
14952
+ ok: literal(true),
14953
+ receipts: array(CaptureCommitReceiptSchema).max(MAX_CAPTURE_COMMIT_BATCH)
14954
+ }));
14955
+ updateTrackEmbeddings = oc.route({
14956
+ method: "POST",
14957
+ operationId: "updateTrackEmbeddings",
14958
+ path: "/admin/tracks/embeddings",
14959
+ summary: "Write a batch of audio embeddings in one admitted phase",
14960
+ tags: ["Admin"]
14961
+ }).input(strictObject({
14962
+ items: array(strictObject({
14963
+ embedding: array(number2()).length(EMBEDDING_DIMENSIONS),
14964
+ trackId: string2().min(1).max(256)
14965
+ })).min(1).max(MAX_EMBEDDING_WRITE_BATCH)
14966
+ })).output(strictObject({
14967
+ deferred: number2().int().min(0),
14968
+ ok: literal(true),
14969
+ results: array(strictObject({
14970
+ elapsedMs: ItemElapsedMsSchema,
14971
+ error: string2().max(500).optional(),
14972
+ fields: array(string2()).optional(),
14973
+ outcome: _enum(["deferred", "failed", "updated"]),
14974
+ trackId: string2().min(1).max(256)
14975
+ })).max(MAX_EMBEDDING_WRITE_BATCH)
14976
+ }));
14810
14977
  observeTrack = oc.route({
14811
14978
  method: "POST",
14812
14979
  operationId: "observeTrack",
@@ -15004,6 +15171,7 @@ var init_admin_tracks = __esm(() => {
15004
15171
  limit: number3().int().min(1).max(250).default(50),
15005
15172
  scope: TrackWorkScopeSchema.default("all")
15006
15173
  })).output(object({
15174
+ capabilities: TrackWorkCapabilitiesSchema.optional(),
15007
15175
  ok: literal(true),
15008
15176
  queued: number2().optional(),
15009
15177
  tracks: array(TrackWorkItemSchema)
@@ -15044,6 +15212,7 @@ var init_admin_tracks = __esm(() => {
15044
15212
  adminTracksContract = {
15045
15213
  authorize_track_capture: authorizeTrackCapture,
15046
15214
  commit_track_capture: commitTrackCapture,
15215
+ commit_track_captures: commitTrackCaptures,
15047
15216
  context_track: contextTrack,
15048
15217
  finalize_track_video: finalizeTrackVideo,
15049
15218
  get_mixable_order: getMixableOrder,
@@ -15053,11 +15222,13 @@ var init_admin_tracks = __esm(() => {
15053
15222
  note_track: noteTrack,
15054
15223
  observe_track: observeTrack,
15055
15224
  prepare_track_capture: prepareTrackCapture,
15225
+ prepare_track_captures: prepareTrackCaptures,
15056
15226
  presign_track_video_uploads: presignTrackVideoUploads,
15057
15227
  publish_track: publishTrack,
15058
15228
  purge_video: purgeVideo,
15059
15229
  requeue_video: requeueVideo,
15060
- update_track: updateTrack
15230
+ update_track: updateTrack,
15231
+ update_track_embeddings: updateTrackEmbeddings
15061
15232
  };
15062
15233
  });
15063
15234
 
@@ -17157,6 +17328,15 @@ async function mixableOrderCommand(logIds, seed) {
17157
17328
  }
17158
17329
  return adminApiGet(`/api/v1/admin/tracks/mixable-order?${params.toString()}`);
17159
17330
  }
17331
+ async function prepareTrackCapturesCommand(body) {
17332
+ return adminApiPost("/api/v1/admin/tracks/captures/prepare", body);
17333
+ }
17334
+ async function commitTrackCapturesCommand(body) {
17335
+ return adminApiPost("/api/v1/admin/tracks/captures/commit", body);
17336
+ }
17337
+ async function updateTrackEmbeddingsCommand(body) {
17338
+ return adminApiPost("/api/v1/admin/tracks/embeddings", body);
17339
+ }
17160
17340
  var pageSize3 = 48;
17161
17341
  var init_admin_tracks2 = __esm(() => {
17162
17342
  init_api();
@@ -18603,6 +18783,9 @@ async function crawlCatalogueCommand(limit, maxHop, dryRun) {
18603
18783
  async function crawlCataloguePhaseCommand(body) {
18604
18784
  return adminApiPost("/api/v1/admin/catalogue/crawl", body);
18605
18785
  }
18786
+ async function commitCrawlNodesCommand(body) {
18787
+ return adminApiPost("/api/v1/admin/catalogue/crawl/commits", body);
18788
+ }
18606
18789
  async function crawlStatusCommand() {
18607
18790
  return adminApiGet("/api/v1/admin/catalogue/crawl");
18608
18791
  }
@@ -21749,6 +21932,18 @@ JSON field reference:
21749
21932
  await Promise.resolve().then(() => init_admin_tracks2());
21750
21933
  await runAdminTrackWork(options, trackWorkCommand);
21751
21934
  });
21935
+ adminTracks.command("prepare-captures").description("Freeze a batch of capture snapshots in one admitted phase").requiredOption("--file <path>", "JSON file holding the batch body ({ items: [...] })").option("--json", "Print JSON", false).action(async (options) => {
21936
+ await Promise.resolve().then(() => init_admin_tracks2());
21937
+ printJson(await prepareTrackCapturesCommand(JSON.parse(readFileSync6(options.file, "utf8"))));
21938
+ });
21939
+ adminTracks.command("commit-captures").description("Commit a batch of prepared capture results in one admitted phase").requiredOption("--file <path>", "JSON file holding the batch body ({ items: [...] })").option("--json", "Print JSON", false).action(async (options) => {
21940
+ await Promise.resolve().then(() => init_admin_tracks2());
21941
+ printJson(await commitTrackCapturesCommand(JSON.parse(readFileSync6(options.file, "utf8"))));
21942
+ });
21943
+ adminTracks.command("update-embeddings").description("Write a batch of audio embeddings in one admitted phase").requiredOption("--file <path>", "JSON file holding the batch body ({ items: [...] })").option("--json", "Print JSON", false).action(async (options) => {
21944
+ await Promise.resolve().then(() => init_admin_tracks2());
21945
+ printJson(await updateTrackEmbeddingsCommand(JSON.parse(readFileSync6(options.file, "utf8"))));
21946
+ });
21752
21947
  adminTracks.command("requeue-analysis").description("Re-queue findings whose BPM/key are preview-grade (dry-run; --apply to flip)").option("--apply", "Actually flip statuses (default is a dry-run preview)", false).option("--limit <limit>", "Cap the archive walk (default: the whole archive)").option("--json", "Print JSON", false).action(async (options) => {
21753
21948
  await Promise.resolve().then(() => init_admin_tracks2());
21754
21949
  await runAdminRequeueAnalysis(options, requeueAnalysisCommand);
@@ -22339,6 +22534,11 @@ JSON field reference:
22339
22534
  }
22340
22535
  await runCrawlCatalogue(options, crawlCatalogueCommand);
22341
22536
  });
22537
+ catalogue.command("commit-nodes").description("Commit one claim's fetched crawl nodes in a single admitted phase").requiredOption("--file <path>", "JSON file holding the batch body ({ items: [...] })").option("--json", "Print JSON", false).action(async (options) => {
22538
+ await Promise.resolve().then(() => init_admin_catalogue2());
22539
+ const body = JSON.parse(readFileSync6(options.file, "utf8"));
22540
+ printJson(await commitCrawlNodesCommand(body));
22541
+ });
22342
22542
  catalogue.command("status").description("The crawl frontier's state, the catalogue's size, and the seed set").option("--json", "Print JSON", false).action(async (options) => {
22343
22543
  await Promise.resolve().then(() => init_admin_catalogue2());
22344
22544
  await runCrawlStatus(options, crawlStatusCommand);
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.241.0"
34
+ "version": "0.242.0"
35
35
  }