fluncle 0.265.0 → 0.266.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 +67 -8
- package/package.json +1 -1
package/bin/fluncle.mjs
CHANGED
|
@@ -632,7 +632,7 @@ function parseVersion(version) {
|
|
|
632
632
|
var currentVersion;
|
|
633
633
|
var init_version = __esm(() => {
|
|
634
634
|
init_output();
|
|
635
|
-
currentVersion = "0.
|
|
635
|
+
currentVersion = "0.266.0".trim() ? "0.266.0".trim() : "0.1.0";
|
|
636
636
|
});
|
|
637
637
|
|
|
638
638
|
// src/update-notifier.ts
|
|
@@ -2345,7 +2345,7 @@ function parseVersion2(version) {
|
|
|
2345
2345
|
var currentVersion2, latestReleaseUrl = "https://api.github.com/repos/mauricekleine/fluncle/releases/latest";
|
|
2346
2346
|
var init_version2 = __esm(() => {
|
|
2347
2347
|
init_output();
|
|
2348
|
-
currentVersion2 = "0.
|
|
2348
|
+
currentVersion2 = "0.266.0".trim() ? "0.266.0".trim() : "0.1.0";
|
|
2349
2349
|
});
|
|
2350
2350
|
|
|
2351
2351
|
// ../../packages/registry/src/index.ts
|
|
@@ -3725,13 +3725,15 @@ var init_src = __esm(() => {
|
|
|
3725
3725
|
},
|
|
3726
3726
|
{
|
|
3727
3727
|
command: "fluncle admin labels list --seed-state undecided",
|
|
3728
|
-
exposedContent: [
|
|
3728
|
+
exposedContent: [
|
|
3729
|
+
"read the undecided crawl-seed pile and, once a round is due, research it into proposals"
|
|
3730
|
+
],
|
|
3729
3731
|
kind: "cron",
|
|
3730
3732
|
name: "cron.label-triage",
|
|
3731
|
-
operatorNotes: "daily.
|
|
3733
|
+
operatorNotes: "daily. The gate is one countless admin read and a sort; it fires only when 40+ NEVER-LOOKED labels with a MusicBrainz identity and no artist rules have accumulated, and stale ones ride along. A fired round runs one claude -p per batch of 10 labels (capped at 3 batches and 30 labels) whose only fetcher is `fluncle admin labels evidence`; the model holds no Fluncle token, and the script records each verdict with record_label_triage (agent tier). It cannot rule: update_label is operator tier and 403s the box token. Labels a round left unfinished (a failed batch, or past the cap) are carried and fire the next day. The model runs --restricted with dontAsk permissions, confined to its batch directory and the skill. A fired round that records zero proposals, or any failed batch, exits non-zero, reads failed on /status and posts to Discord. Source: docs/agents/hermes/scripts/{label-triage-sweep.ts,label-triage-sweep.sh}.",
|
|
3732
3734
|
probeConfig: { cadenceMs: 24 * 60 * MINUTE_MS, cronName: "fluncle-label-triage", kind: "cron" },
|
|
3733
|
-
statusDescription: "
|
|
3734
|
-
title: "Label triage
|
|
3735
|
+
statusDescription: "researches the label pile when it needs a round",
|
|
3736
|
+
title: "Label triage",
|
|
3735
3737
|
weights: { status: "hidden" }
|
|
3736
3738
|
},
|
|
3737
3739
|
{
|
|
@@ -11190,7 +11192,7 @@ var init_admin_albums = __esm(() => {
|
|
|
11190
11192
|
});
|
|
11191
11193
|
|
|
11192
11194
|
// ../../packages/contracts/src/orpc/admin-artifacts.ts
|
|
11193
|
-
var ARTIFACT_CHANGE_API_MAX_LIMIT = 500, ARTIFACT_SNAPSHOT_API_MAX_LIMIT = 200, ARTIFACT_COMPACTION_API_MAX_LIMIT = 1000, ARTIFACT_SUPPORTED_CONTRACTS, ArtifactStreamSchema, ArtifactContractSchema, ConsumerIdSchema, DigestSchema, SequenceSchema, ArtifactRebuildCheckpointSchema, ArtifactConsumerStatusSchema, ArtifactChangeEventSchema, ArtifactSnapshotItemSchema, ArtifactSnapshotPageSchema, ArtifactChangePageSchema, ArtifactCompactionResultSchema, registerArtifactConsumer, getArtifactConsumer, listArtifactSnapshot, checkpointArtifactRebuild, activateArtifactConsumer, listArtifactChanges, acknowledgeArtifactChanges, inactivateArtifactConsumer, compactArtifactChanges, adminArtifactsContract;
|
|
11195
|
+
var ARTIFACT_CHANGE_API_MAX_LIMIT = 500, ARTIFACT_SNAPSHOT_API_MAX_LIMIT = 200, ARTIFACT_COMPACTION_API_MAX_LIMIT = 1000, ARTIFACT_SUPPORTED_CONTRACTS, ArtifactStreamSchema, ArtifactContractSchema, ConsumerIdSchema, DigestSchema, SequenceSchema, ArtifactRebuildCheckpointSchema, ArtifactConsumerStatusSchema, ArtifactChangeEventSchema, ArtifactSnapshotItemSchema, ArtifactSnapshotPageSchema, ArtifactChangePageSchema, ArtifactCompactionResultSchema, SonarSourceAfterSchema, SonarSourceLimitSchema, SonarSourceIdsSchema, listSonarTrackDigests, listSonarTracks, listSonarCentroidDigests, listSonarCentroids, registerArtifactConsumer, getArtifactConsumer, listArtifactSnapshot, checkpointArtifactRebuild, activateArtifactConsumer, listArtifactChanges, acknowledgeArtifactChanges, inactivateArtifactConsumer, compactArtifactChanges, adminArtifactsContract;
|
|
11194
11196
|
var init_admin_artifacts = __esm(() => {
|
|
11195
11197
|
init_dist3();
|
|
11196
11198
|
init_zod();
|
|
@@ -11304,6 +11306,57 @@ var init_admin_artifacts = __esm(() => {
|
|
|
11304
11306
|
ok: literal(true),
|
|
11305
11307
|
reason: _enum(["compacted", "empty", "no_safe_barrier"])
|
|
11306
11308
|
});
|
|
11309
|
+
SonarSourceAfterSchema = string2().min(1).max(1024).optional();
|
|
11310
|
+
SonarSourceLimitSchema = number3().int().min(1).max(2000).default(1000);
|
|
11311
|
+
SonarSourceIdsSchema = array(string2().min(1).max(1024)).min(1).max(200).refine((ids) => new Set(ids).size === ids.length);
|
|
11312
|
+
listSonarTrackDigests = oc.route({
|
|
11313
|
+
method: "GET",
|
|
11314
|
+
operationId: "listSonarTrackDigests",
|
|
11315
|
+
path: "/admin/sonar/source/tracks",
|
|
11316
|
+
summary: "List source track digests and revisions",
|
|
11317
|
+
tags: ["Admin"]
|
|
11318
|
+
}).input(strictObject({ after: SonarSourceAfterSchema, limit: SonarSourceLimitSchema })).output(strictObject({
|
|
11319
|
+
items: array(strictObject({
|
|
11320
|
+
payloadDigest: DigestSchema,
|
|
11321
|
+
revision: SequenceSchema,
|
|
11322
|
+
subjectId: string2().min(1).max(1024)
|
|
11323
|
+
})),
|
|
11324
|
+
nextAfter: string2().nullable(),
|
|
11325
|
+
ok: literal(true)
|
|
11326
|
+
}));
|
|
11327
|
+
listSonarTracks = oc.route({
|
|
11328
|
+
method: "POST",
|
|
11329
|
+
operationId: "listSonarTracks",
|
|
11330
|
+
path: "/admin/sonar/source/tracks/items",
|
|
11331
|
+
summary: "Read selected source tracks",
|
|
11332
|
+
tags: ["Admin"]
|
|
11333
|
+
}).input(strictObject({ subjectIds: SonarSourceIdsSchema })).output(strictObject({
|
|
11334
|
+
absentIds: array(string2()),
|
|
11335
|
+
items: array(ArtifactSnapshotItemSchema.extend({ revision: SequenceSchema })),
|
|
11336
|
+
ok: literal(true)
|
|
11337
|
+
}));
|
|
11338
|
+
listSonarCentroidDigests = oc.route({
|
|
11339
|
+
method: "GET",
|
|
11340
|
+
operationId: "listSonarCentroidDigests",
|
|
11341
|
+
path: "/admin/sonar/source/centroids",
|
|
11342
|
+
summary: "List source artist centroid digests",
|
|
11343
|
+
tags: ["Admin"]
|
|
11344
|
+
}).input(strictObject({ after: SonarSourceAfterSchema, limit: SonarSourceLimitSchema })).output(strictObject({
|
|
11345
|
+
items: array(strictObject({ artistId: string2(), digest: DigestSchema })),
|
|
11346
|
+
nextAfter: string2().nullable(),
|
|
11347
|
+
ok: literal(true)
|
|
11348
|
+
}));
|
|
11349
|
+
listSonarCentroids = oc.route({
|
|
11350
|
+
method: "POST",
|
|
11351
|
+
operationId: "listSonarCentroids",
|
|
11352
|
+
path: "/admin/sonar/source/centroids/items",
|
|
11353
|
+
summary: "Read selected artist centroids",
|
|
11354
|
+
tags: ["Admin"]
|
|
11355
|
+
}).input(strictObject({ artistIds: SonarSourceIdsSchema })).output(strictObject({
|
|
11356
|
+
absentIds: array(string2()),
|
|
11357
|
+
items: array(strictObject({ artistId: string2(), blobBase64: string2(), digest: DigestSchema })),
|
|
11358
|
+
ok: literal(true)
|
|
11359
|
+
}));
|
|
11307
11360
|
registerArtifactConsumer = oc.route({
|
|
11308
11361
|
method: "POST",
|
|
11309
11362
|
operationId: "registerArtifactConsumer",
|
|
@@ -11404,6 +11457,10 @@ var init_admin_artifacts = __esm(() => {
|
|
|
11404
11457
|
inactivate_artifact_consumer: inactivateArtifactConsumer,
|
|
11405
11458
|
list_artifact_changes: listArtifactChanges,
|
|
11406
11459
|
list_artifact_snapshot: listArtifactSnapshot,
|
|
11460
|
+
list_sonar_centroid_digests: listSonarCentroidDigests,
|
|
11461
|
+
list_sonar_centroids: listSonarCentroids,
|
|
11462
|
+
list_sonar_track_digests: listSonarTrackDigests,
|
|
11463
|
+
list_sonar_tracks: listSonarTracks,
|
|
11407
11464
|
register_artifact_consumer: registerArtifactConsumer
|
|
11408
11465
|
};
|
|
11409
11466
|
});
|
|
@@ -14033,6 +14090,7 @@ var init_admin_labels = __esm(() => {
|
|
|
14033
14090
|
LabelSeedStateSchema = _enum(["disabled", "enabled", "undecided"]).meta({ id: "LabelSeedState" });
|
|
14034
14091
|
LabelTriageVerdictSchema = _enum(["dnb", "dnb_partial", "not_dnb", "unclear"]).meta({ id: "LabelTriageVerdict" });
|
|
14035
14092
|
LabelAdminItemSchema = object({
|
|
14093
|
+
carriesArtistRules: boolean2().optional(),
|
|
14036
14094
|
createdAt: string2(),
|
|
14037
14095
|
disambiguation: string2().nullable().optional(),
|
|
14038
14096
|
findingCount: number2(),
|
|
@@ -25013,7 +25071,8 @@ JSON field reference:
|
|
|
25013
25071
|
}
|
|
25014
25072
|
for (const label of labels) {
|
|
25015
25073
|
const looked = label.triageCheckedAt ? label.triageVerdict : "never looked";
|
|
25016
|
-
|
|
25074
|
+
const rules = label.carriesArtistRules ? " artist rules" : "";
|
|
25075
|
+
console.log(`${label.slug} ${label.seedState} ${looked ?? ""}${rules}`.trimEnd());
|
|
25017
25076
|
}
|
|
25018
25077
|
});
|
|
25019
25078
|
labels.command("evidence").description("Gather a label's MusicBrainz, Discogs, Beatport and Apple evidence for triage (cached, rate-limited)").argument("<label>", "The label's MusicBrainz MBID, slug, or lbl_\u2026 id").option("--census", "Also count FIRST credits per recording over the label's releases", false).option("--census-pages <n>", "MusicBrainz pages the census may read, 1-5", "5").option("--sources <list>", "Comma list of musicbrainz,discogs,beatport,apple (default all)").option("--refresh", "Ignore cached responses and fetch fresh", false).option("--json", "Print JSON", false).action(async (input, options) => {
|
package/package.json
CHANGED