fluncle 0.241.0 → 0.243.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 +222 -11
  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.243.0".trim() ? "0.243.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.243.0".trim() ? "0.243.0".trim() : "0.1.0";
2339
2339
  });
2340
2340
 
2341
2341
  // ../../packages/registry/src/index.ts
@@ -3909,7 +3909,7 @@ var init_src = __esm(() => {
3909
3909
  weights: { status: "hidden" }
3910
3910
  },
3911
3911
  {
3912
- command: "fluncle admin projections get --json; fluncle admin projections advance --target <track_due_work|crawl_due_work> --action repair --limit 500 --max-steps 20 --no-terminal-status --json; fluncle admin projections advance --target <public_aggregates|artist_qualification> --action repair --limit 500 --max-steps 4 --no-terminal-status --json",
3912
+ command: "fluncle admin projections get --json; fluncle admin projections advance --target <track_due_work|crawl_due_work> --action repair --limit 500 --max-steps <adaptive> --no-terminal-status --json; fluncle admin projections advance --target <public_aggregates|artist_qualification> --action repair --limit 500 --max-steps <adaptive> --no-terminal-status --json",
3913
3913
  exposedContent: [
3914
3914
  "keep all four runtime projection families converged after their cutovers with one-read, serial, bounded repair (--no-agent)"
3915
3915
  ],
@@ -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",
@@ -15000,10 +15167,13 @@ var init_admin_tracks = __esm(() => {
15000
15167
  tags: ["Admin"]
15001
15168
  }).input(object({
15002
15169
  count: string2().optional(),
15170
+ debtAware: string2().optional(),
15003
15171
  kind: TrackWorkKindSchema,
15004
15172
  limit: number3().int().min(1).max(250).default(50),
15005
15173
  scope: TrackWorkScopeSchema.default("all")
15006
15174
  })).output(object({
15175
+ capabilities: TrackWorkCapabilitiesSchema.optional(),
15176
+ debtPending: boolean2().optional(),
15007
15177
  ok: literal(true),
15008
15178
  queued: number2().optional(),
15009
15179
  tracks: array(TrackWorkItemSchema)
@@ -15044,6 +15214,7 @@ var init_admin_tracks = __esm(() => {
15044
15214
  adminTracksContract = {
15045
15215
  authorize_track_capture: authorizeTrackCapture,
15046
15216
  commit_track_capture: commitTrackCapture,
15217
+ commit_track_captures: commitTrackCaptures,
15047
15218
  context_track: contextTrack,
15048
15219
  finalize_track_video: finalizeTrackVideo,
15049
15220
  get_mixable_order: getMixableOrder,
@@ -15053,11 +15224,13 @@ var init_admin_tracks = __esm(() => {
15053
15224
  note_track: noteTrack,
15054
15225
  observe_track: observeTrack,
15055
15226
  prepare_track_capture: prepareTrackCapture,
15227
+ prepare_track_captures: prepareTrackCaptures,
15056
15228
  presign_track_video_uploads: presignTrackVideoUploads,
15057
15229
  publish_track: publishTrack,
15058
15230
  purge_video: purgeVideo,
15059
15231
  requeue_video: requeueVideo,
15060
- update_track: updateTrack
15232
+ update_track: updateTrack,
15233
+ update_track_embeddings: updateTrackEmbeddings
15061
15234
  };
15062
15235
  });
15063
15236
 
@@ -17012,9 +17185,14 @@ async function trackWorkCommand(options) {
17012
17185
  });
17013
17186
  if (options.count) {
17014
17187
  params.set("count", "true");
17188
+ params.set("debtAware", "true");
17015
17189
  }
17016
17190
  const response = await adminApiGet(`/api/v1/admin/tracks/work?${params.toString()}`);
17017
- return { queued: response.queued, tracks: response.tracks ?? [] };
17191
+ return {
17192
+ debtPending: response.debtPending,
17193
+ queued: response.queued,
17194
+ tracks: response.tracks ?? []
17195
+ };
17018
17196
  }
17019
17197
  async function requeueAnalysisCommand(options) {
17020
17198
  const findings = await fetchAdminTracks({ max: options.max, order: "asc" });
@@ -17157,6 +17335,15 @@ async function mixableOrderCommand(logIds, seed) {
17157
17335
  }
17158
17336
  return adminApiGet(`/api/v1/admin/tracks/mixable-order?${params.toString()}`);
17159
17337
  }
17338
+ async function prepareTrackCapturesCommand(body) {
17339
+ return adminApiPost("/api/v1/admin/tracks/captures/prepare", body);
17340
+ }
17341
+ async function commitTrackCapturesCommand(body) {
17342
+ return adminApiPost("/api/v1/admin/tracks/captures/commit", body);
17343
+ }
17344
+ async function updateTrackEmbeddingsCommand(body) {
17345
+ return adminApiPost("/api/v1/admin/tracks/embeddings", body);
17346
+ }
17160
17347
  var pageSize3 = 48;
17161
17348
  var init_admin_tracks2 = __esm(() => {
17162
17349
  init_api();
@@ -18603,6 +18790,9 @@ async function crawlCatalogueCommand(limit, maxHop, dryRun) {
18603
18790
  async function crawlCataloguePhaseCommand(body) {
18604
18791
  return adminApiPost("/api/v1/admin/catalogue/crawl", body);
18605
18792
  }
18793
+ async function commitCrawlNodesCommand(body) {
18794
+ return adminApiPost("/api/v1/admin/catalogue/crawl/commits", body);
18795
+ }
18606
18796
  async function crawlStatusCommand() {
18607
18797
  return adminApiGet("/api/v1/admin/catalogue/crawl");
18608
18798
  }
@@ -21749,6 +21939,18 @@ JSON field reference:
21749
21939
  await Promise.resolve().then(() => init_admin_tracks2());
21750
21940
  await runAdminTrackWork(options, trackWorkCommand);
21751
21941
  });
21942
+ 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) => {
21943
+ await Promise.resolve().then(() => init_admin_tracks2());
21944
+ printJson(await prepareTrackCapturesCommand(JSON.parse(readFileSync6(options.file, "utf8"))));
21945
+ });
21946
+ 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) => {
21947
+ await Promise.resolve().then(() => init_admin_tracks2());
21948
+ printJson(await commitTrackCapturesCommand(JSON.parse(readFileSync6(options.file, "utf8"))));
21949
+ });
21950
+ 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) => {
21951
+ await Promise.resolve().then(() => init_admin_tracks2());
21952
+ printJson(await updateTrackEmbeddingsCommand(JSON.parse(readFileSync6(options.file, "utf8"))));
21953
+ });
21752
21954
  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
21955
  await Promise.resolve().then(() => init_admin_tracks2());
21754
21956
  await runAdminRequeueAnalysis(options, requeueAnalysisCommand);
@@ -22339,6 +22541,11 @@ JSON field reference:
22339
22541
  }
22340
22542
  await runCrawlCatalogue(options, crawlCatalogueCommand);
22341
22543
  });
22544
+ 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) => {
22545
+ await Promise.resolve().then(() => init_admin_catalogue2());
22546
+ const body = JSON.parse(readFileSync6(options.file, "utf8"));
22547
+ printJson(await commitCrawlNodesCommand(body));
22548
+ });
22342
22549
  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
22550
  await Promise.resolve().then(() => init_admin_catalogue2());
22344
22551
  await runCrawlStatus(options, crawlStatusCommand);
@@ -25135,14 +25342,18 @@ async function runAdminTrackWork(options, trackWorkCommand) {
25135
25342
  process.exitCode = 1;
25136
25343
  return;
25137
25344
  }
25138
- const { queued, tracks } = await trackWorkCommand({
25345
+ const { debtPending, queued, tracks } = await trackWorkCommand({
25139
25346
  count: options.count,
25140
25347
  kind,
25141
25348
  limit: parseListLimit(options.limit),
25142
25349
  scope
25143
25350
  });
25144
25351
  if (options.json) {
25145
- printJson({ ok: true, queued, tracks });
25352
+ printJson({ debtPending, ok: true, queued, tracks });
25353
+ return;
25354
+ }
25355
+ if (debtPending === true) {
25356
+ console.log(`${queued ?? 0} queued to ${kind} (${scope}) \u2014 page held back, due-work repair is still converging.`);
25146
25357
  return;
25147
25358
  }
25148
25359
  if (tracks.length === 0) {
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.243.0"
35
35
  }