fluncle 0.240.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.
- package/bin/fluncle.mjs +229 -11
- 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.
|
|
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.
|
|
2338
|
+
currentVersion2 = "0.242.0".trim() ? "0.242.0".trim() : "0.1.0";
|
|
2339
2339
|
});
|
|
2340
2340
|
|
|
2341
2341
|
// ../../packages/registry/src/index.ts
|
|
@@ -3967,7 +3967,7 @@ var init_src = __esm(() => {
|
|
|
3967
3967
|
],
|
|
3968
3968
|
kind: "cron",
|
|
3969
3969
|
name: "cron.funnel-snapshot",
|
|
3970
|
-
operatorNotes: "23:45 UTC daily (end of the UTC day the snapshot is keyed on). A bare trigger (the reach/anchor shape): fires the AGENT-tier record_catalogue_snapshot op once — the Worker computes every stage total + queue depth + frontier count through the SAME predicates the sweeps run (lib/server/funnel.ts) and UPSERTS one idempotent row per UTC day (a same-day re-run overwrites, never doubles a bar). Zero LLM tokens; the box's agent token drives it and calls the oRPC HTTP endpoint directly (no new CLI command the pinned box CLI would lack), so no new secret. Source: docs/agents/hermes/scripts/funnel-snapshot-sweep.*. See docs/admin-shell.md.",
|
|
3970
|
+
operatorNotes: "23:45 UTC daily (end of the UTC day the snapshot is keyed on), with a retry slot at 23:57 UTC still inside that day. A bare trigger (the reach/anchor shape): fires the AGENT-tier record_catalogue_snapshot op once — the Worker computes every stage total + queue depth + frontier count through the SAME predicates the sweeps run (lib/server/funnel.ts) and UPSERTS one idempotent row per UTC day (a same-day re-run overwrites, never doubles a bar). A missed day cannot be recomputed later, so the tick is defended three ways: an in-tick retry ladder for a transient Worker fault, the second timer slot for a database-admission yield, and the Worker's catch-up grace window for a box that slept through the slot (it fills a missing previous day and names it as backfilledDays). Zero LLM tokens; the box's agent token drives it and calls the oRPC HTTP endpoint directly (no new CLI command the pinned box CLI would lack), so no new secret. Source: docs/agents/hermes/scripts/funnel-snapshot-sweep.*. See docs/admin-shell.md.",
|
|
3971
3971
|
probeConfig: {
|
|
3972
3972
|
cadenceMs: 24 * 60 * MINUTE_MS,
|
|
3973
3973
|
cronName: "fluncle-funnel-snapshot",
|
|
@@ -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({
|
|
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({
|
|
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({
|
|
@@ -11751,7 +11809,9 @@ var init_admin_catalogue = __esm(() => {
|
|
|
11751
11809
|
}),
|
|
11752
11810
|
labelsUndecided: number2(),
|
|
11753
11811
|
seedLabels: array(string2()),
|
|
11754
|
-
storablePending: number2()
|
|
11812
|
+
storablePending: number2(),
|
|
11813
|
+
undecidedLabelsQueued: number2(),
|
|
11814
|
+
unstorablePending: number2()
|
|
11755
11815
|
}).meta({ id: "CrawlStatus" });
|
|
11756
11816
|
crawlCatalogue = oc.route({
|
|
11757
11817
|
inputStructure: "detailed",
|
|
@@ -11768,6 +11828,19 @@ var init_admin_catalogue = __esm(() => {
|
|
|
11768
11828
|
maxHop: string2().optional()
|
|
11769
11829
|
})
|
|
11770
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
|
+
}));
|
|
11771
11844
|
getCrawlStatus = oc.route({
|
|
11772
11845
|
method: "GET",
|
|
11773
11846
|
operationId: "getCrawlStatus",
|
|
@@ -11947,6 +12020,7 @@ var init_admin_catalogue = __esm(() => {
|
|
|
11947
12020
|
anchor_track: anchorTrack,
|
|
11948
12021
|
certify_track: certifyTrack,
|
|
11949
12022
|
clear_wrong_audio: clearWrongAudio,
|
|
12023
|
+
commit_crawl_nodes: commitCrawlNodes,
|
|
11950
12024
|
crawl_catalogue: crawlCatalogue,
|
|
11951
12025
|
flag_wrong_audio: flagWrongAudio,
|
|
11952
12026
|
force_capture: forceCapture,
|
|
@@ -13118,7 +13192,7 @@ var init_admin_frontier = __esm(() => {
|
|
|
13118
13192
|
});
|
|
13119
13193
|
|
|
13120
13194
|
// ../../packages/contracts/src/orpc/admin-funnel.ts
|
|
13121
|
-
var FunnelStagesSchema, FunnelQueuesSchema, FunnelLiveQueuesSchema, PublicSurfaceCountsSchema, FunnelMetersSchema, CatalogueSnapshotRowSchema, recordCatalogueSnapshot, getFunnel, adminFunnelContract;
|
|
13195
|
+
var FunnelStagesSchema, FunnelQueuesSchema, FunnelLiveQueuesSchema, PublicSurfaceCountsSchema, CaptureBacklogSchema, FunnelMetersSchema, CatalogueSnapshotRowSchema, recordCatalogueSnapshot, getFunnel, adminFunnelContract;
|
|
13122
13196
|
var init_admin_funnel = __esm(() => {
|
|
13123
13197
|
init_dist3();
|
|
13124
13198
|
init_zod();
|
|
@@ -13149,6 +13223,16 @@ var init_admin_funnel = __esm(() => {
|
|
|
13149
13223
|
labels: number2().int(),
|
|
13150
13224
|
tracks: number2().int()
|
|
13151
13225
|
}).meta({ id: "PublicSurfaceCounts" });
|
|
13226
|
+
CaptureBacklogSchema = object({
|
|
13227
|
+
authorized: number2().int(),
|
|
13228
|
+
authorizedAnchored: number2().int(),
|
|
13229
|
+
budgetOpen: boolean2(),
|
|
13230
|
+
tiers: array(object({
|
|
13231
|
+
anchored: number2().int(),
|
|
13232
|
+
tier: number2().int(),
|
|
13233
|
+
unanchored: number2().int()
|
|
13234
|
+
}))
|
|
13235
|
+
}).meta({ id: "CaptureBacklog" });
|
|
13152
13236
|
FunnelMetersSchema = object({
|
|
13153
13237
|
anchorBackoff: number2().int(),
|
|
13154
13238
|
captureBudget: object({
|
|
@@ -13187,7 +13271,11 @@ var init_admin_funnel = __esm(() => {
|
|
|
13187
13271
|
path: "/admin/funnel/snapshot",
|
|
13188
13272
|
summary: "Record today's catalogue-funnel snapshot (idempotent per UTC day)",
|
|
13189
13273
|
tags: ["Admin"]
|
|
13190
|
-
}).input(object({})).output(object({
|
|
13274
|
+
}).input(object({})).output(object({
|
|
13275
|
+
backfilledDays: array(string2()),
|
|
13276
|
+
ok: literal(true),
|
|
13277
|
+
snapshot: CatalogueSnapshotRowSchema
|
|
13278
|
+
}));
|
|
13191
13279
|
getFunnel = oc.route({
|
|
13192
13280
|
method: "GET",
|
|
13193
13281
|
operationId: "getFunnel",
|
|
@@ -13196,6 +13284,7 @@ var init_admin_funnel = __esm(() => {
|
|
|
13196
13284
|
tags: ["Admin"]
|
|
13197
13285
|
}).input(object({ windowDays: string2().optional() })).output(object({
|
|
13198
13286
|
live: object({
|
|
13287
|
+
captureBacklog: CaptureBacklogSchema,
|
|
13199
13288
|
meters: FunnelMetersSchema,
|
|
13200
13289
|
publicSurfaces: PublicSurfaceCountsSchema,
|
|
13201
13290
|
queues: FunnelLiveQueuesSchema,
|
|
@@ -14549,7 +14638,7 @@ var init_admin_tokens = __esm(() => {
|
|
|
14549
14638
|
});
|
|
14550
14639
|
|
|
14551
14640
|
// ../../packages/contracts/src/orpc/admin-tracks.ts
|
|
14552
|
-
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;
|
|
14553
14642
|
var init_admin_tracks = __esm(() => {
|
|
14554
14643
|
init_dist3();
|
|
14555
14644
|
init_zod();
|
|
@@ -14692,6 +14781,7 @@ var init_admin_tracks = __esm(() => {
|
|
|
14692
14781
|
});
|
|
14693
14782
|
CapturePreparedTrackSchema = strictObject({
|
|
14694
14783
|
analyzedFrom: _enum(["full", "preview"]).optional(),
|
|
14784
|
+
anchored: boolean2().optional(),
|
|
14695
14785
|
artists: array(string2().max(512)).max(64),
|
|
14696
14786
|
bpm: number2().optional(),
|
|
14697
14787
|
certified: boolean2(),
|
|
@@ -14790,6 +14880,100 @@ var init_admin_tracks = __esm(() => {
|
|
|
14790
14880
|
replayed: boolean2()
|
|
14791
14881
|
})
|
|
14792
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
|
+
}));
|
|
14793
14977
|
observeTrack = oc.route({
|
|
14794
14978
|
method: "POST",
|
|
14795
14979
|
operationId: "observeTrack",
|
|
@@ -14987,6 +15171,7 @@ var init_admin_tracks = __esm(() => {
|
|
|
14987
15171
|
limit: number3().int().min(1).max(250).default(50),
|
|
14988
15172
|
scope: TrackWorkScopeSchema.default("all")
|
|
14989
15173
|
})).output(object({
|
|
15174
|
+
capabilities: TrackWorkCapabilitiesSchema.optional(),
|
|
14990
15175
|
ok: literal(true),
|
|
14991
15176
|
queued: number2().optional(),
|
|
14992
15177
|
tracks: array(TrackWorkItemSchema)
|
|
@@ -15027,6 +15212,7 @@ var init_admin_tracks = __esm(() => {
|
|
|
15027
15212
|
adminTracksContract = {
|
|
15028
15213
|
authorize_track_capture: authorizeTrackCapture,
|
|
15029
15214
|
commit_track_capture: commitTrackCapture,
|
|
15215
|
+
commit_track_captures: commitTrackCaptures,
|
|
15030
15216
|
context_track: contextTrack,
|
|
15031
15217
|
finalize_track_video: finalizeTrackVideo,
|
|
15032
15218
|
get_mixable_order: getMixableOrder,
|
|
@@ -15036,11 +15222,13 @@ var init_admin_tracks = __esm(() => {
|
|
|
15036
15222
|
note_track: noteTrack,
|
|
15037
15223
|
observe_track: observeTrack,
|
|
15038
15224
|
prepare_track_capture: prepareTrackCapture,
|
|
15225
|
+
prepare_track_captures: prepareTrackCaptures,
|
|
15039
15226
|
presign_track_video_uploads: presignTrackVideoUploads,
|
|
15040
15227
|
publish_track: publishTrack,
|
|
15041
15228
|
purge_video: purgeVideo,
|
|
15042
15229
|
requeue_video: requeueVideo,
|
|
15043
|
-
update_track: updateTrack
|
|
15230
|
+
update_track: updateTrack,
|
|
15231
|
+
update_track_embeddings: updateTrackEmbeddings
|
|
15044
15232
|
};
|
|
15045
15233
|
});
|
|
15046
15234
|
|
|
@@ -17140,6 +17328,15 @@ async function mixableOrderCommand(logIds, seed) {
|
|
|
17140
17328
|
}
|
|
17141
17329
|
return adminApiGet(`/api/v1/admin/tracks/mixable-order?${params.toString()}`);
|
|
17142
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
|
+
}
|
|
17143
17340
|
var pageSize3 = 48;
|
|
17144
17341
|
var init_admin_tracks2 = __esm(() => {
|
|
17145
17342
|
init_api();
|
|
@@ -18586,6 +18783,9 @@ async function crawlCatalogueCommand(limit, maxHop, dryRun) {
|
|
|
18586
18783
|
async function crawlCataloguePhaseCommand(body) {
|
|
18587
18784
|
return adminApiPost("/api/v1/admin/catalogue/crawl", body);
|
|
18588
18785
|
}
|
|
18786
|
+
async function commitCrawlNodesCommand(body) {
|
|
18787
|
+
return adminApiPost("/api/v1/admin/catalogue/crawl/commits", body);
|
|
18788
|
+
}
|
|
18589
18789
|
async function crawlStatusCommand() {
|
|
18590
18790
|
return adminApiGet("/api/v1/admin/catalogue/crawl");
|
|
18591
18791
|
}
|
|
@@ -21732,6 +21932,18 @@ JSON field reference:
|
|
|
21732
21932
|
await Promise.resolve().then(() => init_admin_tracks2());
|
|
21733
21933
|
await runAdminTrackWork(options, trackWorkCommand);
|
|
21734
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
|
+
});
|
|
21735
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) => {
|
|
21736
21948
|
await Promise.resolve().then(() => init_admin_tracks2());
|
|
21737
21949
|
await runAdminRequeueAnalysis(options, requeueAnalysisCommand);
|
|
@@ -22322,6 +22534,11 @@ JSON field reference:
|
|
|
22322
22534
|
}
|
|
22323
22535
|
await runCrawlCatalogue(options, crawlCatalogueCommand);
|
|
22324
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
|
+
});
|
|
22325
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) => {
|
|
22326
22543
|
await Promise.resolve().then(() => init_admin_catalogue2());
|
|
22327
22544
|
await runCrawlStatus(options, crawlStatusCommand);
|
|
@@ -22963,6 +23180,7 @@ async function runCrawlStatus(options, crawlStatusCommand) {
|
|
|
22963
23180
|
console.log(`Catalogue: ${result.catalogueTracks} uncertified track(s); ${result.anchorsPending} awaiting a Spotify anchor.`);
|
|
22964
23181
|
console.log(`Frontier: ${frontier.pending} pending, ${frontier.done} done, ${frontier.failed} failed, ${frontier.skipped} skipped (${frontierByKind.label} label, ${frontierByKind.artist} artist, ${frontierByKind.release} release).`);
|
|
22965
23182
|
console.log(`Ready to write: ${result.storablePending} storable release node(s) claimable now.`);
|
|
23183
|
+
console.log(`Held by the storage gate: ${result.unstorablePending} claimable release node(s) \u2014 ${result.undecidedLabelsQueued} undecided label(s) hold queued work.`);
|
|
22966
23184
|
console.log(`Seeds (${result.seedLabels.length}): ${result.seedLabels.join(", ") || "none enabled"}.`);
|
|
22967
23185
|
console.log(`Awaiting your ruling: ${result.labelsUndecided} label(s).`);
|
|
22968
23186
|
}
|
package/package.json
CHANGED