fluncle 0.198.0 → 0.199.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 +139 -3
- 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.
|
|
564
|
+
currentVersion = "0.199.0".trim() ? "0.199.0".trim() : "0.1.0";
|
|
565
565
|
});
|
|
566
566
|
|
|
567
567
|
// src/update-notifier.ts
|
|
@@ -2443,7 +2443,7 @@ function parseVersion2(version) {
|
|
|
2443
2443
|
var currentVersion2, latestReleaseUrl = "https://api.github.com/repos/mauricekleine/fluncle/releases/latest";
|
|
2444
2444
|
var init_version2 = __esm(() => {
|
|
2445
2445
|
init_output();
|
|
2446
|
-
currentVersion2 = "0.
|
|
2446
|
+
currentVersion2 = "0.199.0".trim() ? "0.199.0".trim() : "0.1.0";
|
|
2447
2447
|
});
|
|
2448
2448
|
|
|
2449
2449
|
// ../../packages/registry/src/index.ts
|
|
@@ -2489,7 +2489,7 @@ var init_src = __esm(() => {
|
|
|
2489
2489
|
probeConfig: { cadenceMs: PROBE_CADENCE_MS, kind: "http", timeoutMs: PROBE_TIMEOUT_MS },
|
|
2490
2490
|
route: "/logbook",
|
|
2491
2491
|
url: `${SITE}/logbook`,
|
|
2492
|
-
weights: {
|
|
2492
|
+
weights: { web: "primary" }
|
|
2493
2493
|
},
|
|
2494
2494
|
{
|
|
2495
2495
|
exposedContent: ["Fluncle's own DJ mixtapes — each a checkpoint set with an F-marked Log ID"],
|
|
@@ -2680,6 +2680,56 @@ var init_src = __esm(() => {
|
|
|
2680
2680
|
url: `${SITE}/galaxies`,
|
|
2681
2681
|
weights: { ssh: "secondary", web: "secondary" }
|
|
2682
2682
|
},
|
|
2683
|
+
{
|
|
2684
|
+
exposedContent: [
|
|
2685
|
+
"the signed-in account door: a listener's Galaxy progress, the findings and sets they saved, the tracks they submitted, and their account settings"
|
|
2686
|
+
],
|
|
2687
|
+
kind: "web_route",
|
|
2688
|
+
name: "web.account",
|
|
2689
|
+
operatorNotes: "A WORKSTATION, not a lore page (VOICE.md §5 The Three Areas): chrome register throughout. PUBLIC and always 200 — signed out it serves the sign-in / join door, so it is honestly HTTP-probeable; every door's data is session-scoped and read on the server. `noindex` (a private per-user surface, self-canonical), so it stays out of the sitemap and llms.txt while remaining a registered, advertised surface: the nav's `Your account` CTA points here. Source: apps/web/src/routes/account.tsx + components/account.",
|
|
2690
|
+
probeConfig: { cadenceMs: PROBE_CADENCE_MS, kind: "http", timeoutMs: PROBE_TIMEOUT_MS },
|
|
2691
|
+
route: "/account",
|
|
2692
|
+
url: `${SITE}/account`,
|
|
2693
|
+
weights: { web: "secondary" }
|
|
2694
|
+
},
|
|
2695
|
+
{
|
|
2696
|
+
exposedContent: [
|
|
2697
|
+
"ChatDnB — a chat with Fluncle over his own archive; he answers from his certified findings"
|
|
2698
|
+
],
|
|
2699
|
+
kind: "web_route",
|
|
2700
|
+
name: "web.chat",
|
|
2701
|
+
operatorNotes: "The public face of ChatDnB. Gated to verified-email accounts (the rollout cohort); the server route re-checks the session, the verification, the origin/CSRF, and the rate dials on every turn. PENDING = registered but dark until the rollout opens to everyone.",
|
|
2702
|
+
pending: true,
|
|
2703
|
+
probeConfig: { cadenceMs: PROBE_CADENCE_MS, kind: "http", timeoutMs: PROBE_TIMEOUT_MS },
|
|
2704
|
+
route: "/chat",
|
|
2705
|
+
url: `${SITE}/chat`,
|
|
2706
|
+
weights: { web: "secondary" }
|
|
2707
|
+
},
|
|
2708
|
+
{
|
|
2709
|
+
exposedContent: [
|
|
2710
|
+
"the per-listener recommendations door: a signed-in listener names the tracks they love, the Ear lines the catalogue up against those seeds, and the result lands as a playlist on Fluncle's own Spotify, refreshed weekly"
|
|
2711
|
+
],
|
|
2712
|
+
kind: "web_route",
|
|
2713
|
+
name: "web.recommendations",
|
|
2714
|
+
operatorNotes: "E1/E2, the recommendation machine's public door. Three states off the session (anonymous pitch, unverified pointer, verified surface); the DRAFT read is the one place the live vector scan sits on a read path, rate-limited per user and degrading to empty rather than blocking the door. PENDING = registered but dark until the rollout opens.",
|
|
2715
|
+
pending: true,
|
|
2716
|
+
probeConfig: { cadenceMs: PROBE_CADENCE_MS, kind: "http", timeoutMs: PROBE_TIMEOUT_MS },
|
|
2717
|
+
route: "/recommendations",
|
|
2718
|
+
url: `${SITE}/recommendations`,
|
|
2719
|
+
weights: { web: "secondary" }
|
|
2720
|
+
},
|
|
2721
|
+
{
|
|
2722
|
+
exposedContent: [
|
|
2723
|
+
"the galaxy factory — a draggable map of a finding's whole life, from the first CMD+F through the enrichment sweeps to the launch into the Galaxy"
|
|
2724
|
+
],
|
|
2725
|
+
kind: "web_route",
|
|
2726
|
+
name: "web.pipeline",
|
|
2727
|
+
operatorNotes: "A public console page (VOICE.md §5 The Three Areas), written in the builder's-tour register. Client-only DOM/SVG/canvas — the whole map is a chunk loaded in useEffect, so it costs the archive's bundle nothing — over an SSR shell that answers 200, so it is HTTP-probeable. `noindex` (a for-the-nerds machinery view, not a search surface), so it stays out of the sitemap; the nav's Crew section links it. Source: apps/web/src/routes/pipeline.tsx + src/pipeline.",
|
|
2728
|
+
probeConfig: { cadenceMs: PROBE_CADENCE_MS, kind: "http", timeoutMs: PROBE_TIMEOUT_MS },
|
|
2729
|
+
route: "/pipeline",
|
|
2730
|
+
url: `${SITE}/pipeline`,
|
|
2731
|
+
weights: { web: "tertiary" }
|
|
2732
|
+
},
|
|
2683
2733
|
{
|
|
2684
2734
|
exposedContent: ["the privacy policy"],
|
|
2685
2735
|
kind: "web_route",
|
|
@@ -3156,6 +3206,20 @@ var init_src = __esm(() => {
|
|
|
3156
3206
|
url: `${SITE}/oembed`,
|
|
3157
3207
|
weights: { web: "tertiary" }
|
|
3158
3208
|
},
|
|
3209
|
+
{
|
|
3210
|
+
apiFormat: "text/x-shellscript",
|
|
3211
|
+
discoveryUrl: `${SITE}/llms.txt`,
|
|
3212
|
+
exposedContent: [
|
|
3213
|
+
"the one-line CLI installer: picks the right `fluncle` binary for the machine off the latest GitHub release and drops it in place"
|
|
3214
|
+
],
|
|
3215
|
+
kind: "discovery",
|
|
3216
|
+
name: "discovery.cli-installer",
|
|
3217
|
+
operatorNotes: "`curl -fsSL https://www.fluncle.com/cli/latest.sh | sh`, the install path the /docs/cli page, the rave terminal's Install CLI screen, the CLI's own update hint, and llms.txt (§Tools) all point at. A machine-FETCHED document rather than a page, which is why it is catalogued as `discovery` next to robots.txt and llms.txt: nothing about it is browsable, and its only reader is a shell. Always 200 (it is generated in the route, no upstream call), so the post-deploy probe asserts a non-empty body on it. Source: apps/web/src/routes/cli/latest[.]sh.ts.",
|
|
3218
|
+
probeConfig: { cadenceMs: PROBE_CADENCE_MS, kind: "http", timeoutMs: PROBE_TIMEOUT_MS },
|
|
3219
|
+
route: "/cli/latest.sh",
|
|
3220
|
+
url: `${SITE}/cli/latest.sh`,
|
|
3221
|
+
weights: { web: "tertiary" }
|
|
3222
|
+
},
|
|
3159
3223
|
{
|
|
3160
3224
|
apiFormat: "application/json",
|
|
3161
3225
|
discoveryUrl: `${SITE}/.well-known/mcp/server-card.json`,
|
|
@@ -3239,6 +3303,15 @@ var init_src = __esm(() => {
|
|
|
3239
3303
|
name: "cli.labels",
|
|
3240
3304
|
weights: { cli: "secondary" }
|
|
3241
3305
|
},
|
|
3306
|
+
{
|
|
3307
|
+
command: "fluncle galaxies",
|
|
3308
|
+
exposedContent: [
|
|
3309
|
+
"wander Fluncle's sonic galaxies, the browse-by-feel lens (bare `slug` opens one)"
|
|
3310
|
+
],
|
|
3311
|
+
kind: "cli",
|
|
3312
|
+
name: "cli.galaxies",
|
|
3313
|
+
weights: { cli: "secondary" }
|
|
3314
|
+
},
|
|
3242
3315
|
{
|
|
3243
3316
|
command: "fluncle search",
|
|
3244
3317
|
exposedContent: ["search the archive by coordinate, track, artist, label, or album"],
|
|
@@ -3274,6 +3347,27 @@ var init_src = __esm(() => {
|
|
|
3274
3347
|
name: "cli.submit",
|
|
3275
3348
|
weights: { cli: "secondary" }
|
|
3276
3349
|
},
|
|
3350
|
+
{
|
|
3351
|
+
command: "fluncle login",
|
|
3352
|
+
exposedContent: ["link this device to your Fluncle account, so your Galaxy progress syncs"],
|
|
3353
|
+
kind: "cli",
|
|
3354
|
+
name: "cli.login",
|
|
3355
|
+
weights: { cli: "secondary" }
|
|
3356
|
+
},
|
|
3357
|
+
{
|
|
3358
|
+
command: "fluncle me",
|
|
3359
|
+
exposedContent: ["your account and Galaxy progress (sign in with `fluncle login`)"],
|
|
3360
|
+
kind: "cli",
|
|
3361
|
+
name: "cli.me",
|
|
3362
|
+
weights: { cli: "secondary" }
|
|
3363
|
+
},
|
|
3364
|
+
{
|
|
3365
|
+
command: "fluncle logout",
|
|
3366
|
+
exposedContent: ["unlink this device from your account"],
|
|
3367
|
+
kind: "cli",
|
|
3368
|
+
name: "cli.logout",
|
|
3369
|
+
weights: { cli: "tertiary" }
|
|
3370
|
+
},
|
|
3277
3371
|
{
|
|
3278
3372
|
command: "fluncle tracks get",
|
|
3279
3373
|
exposedContent: ["look up one finding by id or Log ID (group alias `track`)"],
|
|
@@ -3304,6 +3398,14 @@ var init_src = __esm(() => {
|
|
|
3304
3398
|
name: "cli.version",
|
|
3305
3399
|
weights: { cli: "tertiary" }
|
|
3306
3400
|
},
|
|
3401
|
+
{
|
|
3402
|
+
command: "fluncle status",
|
|
3403
|
+
exposedContent: ["how Fluncle's services are holding up (the /status board, in the terminal)"],
|
|
3404
|
+
kind: "cli",
|
|
3405
|
+
name: "cli.status",
|
|
3406
|
+
operatorNotes: "Reads the public status snapshot and labels each service off `liveSurfaces()` — a registry CONSUMER as well as a registry entry. Source: apps/cli/src/commands/status.ts.",
|
|
3407
|
+
weights: { cli: "tertiary" }
|
|
3408
|
+
},
|
|
3307
3409
|
{
|
|
3308
3410
|
command: "fluncle admin",
|
|
3309
3411
|
exposedContent: [
|
|
@@ -3324,6 +3426,17 @@ var init_src = __esm(() => {
|
|
|
3324
3426
|
url: "https://chromewebstore.google.com/detail/efkkceaofendabikblfjhoepgejfpakk",
|
|
3325
3427
|
weights: { web: "secondary" }
|
|
3326
3428
|
},
|
|
3429
|
+
{
|
|
3430
|
+
exposedContent: [
|
|
3431
|
+
"Fluncle for iOS — the archive as a native app: the Feed, the Archive, the Decks, the Radio, and the Mixtapes, each finding opening its own /log screen, plus a submit door and push when a new banger lands"
|
|
3432
|
+
],
|
|
3433
|
+
kind: "app",
|
|
3434
|
+
name: "app.ios",
|
|
3435
|
+
operatorNotes: "Fluncle for iOS (apps/mobile). PENDING App Store review — DARK until approval, then flip `pending` + set the assigned listing URL. No probeConfig: a vendor store listing is not one of our own health-probeable endpoints (the box prober walks web/r2/dns/ssh + the crons, never an external GET), and Apple would bot-block or redirect a bare GET and read back as a false 'down' — the extension.lens ruling, which dropped its probeConfig on going live for the same reason.",
|
|
3436
|
+
pending: true,
|
|
3437
|
+
url: "https://apps.apple.com/search?term=fluncle",
|
|
3438
|
+
weights: { web: "secondary" }
|
|
3439
|
+
},
|
|
3327
3440
|
{
|
|
3328
3441
|
command: "fluncle admin tracks enrich --queue",
|
|
3329
3442
|
exposedContent: [
|
|
@@ -6446,6 +6559,25 @@ var init_auth_tiktok = __esm(() => {
|
|
|
6446
6559
|
init_api();
|
|
6447
6560
|
});
|
|
6448
6561
|
|
|
6562
|
+
// src/commands/auth-revoke-grants.ts
|
|
6563
|
+
var exports_auth_revoke_grants = {};
|
|
6564
|
+
__export(exports_auth_revoke_grants, {
|
|
6565
|
+
authRevokeGrantsCommand: () => authRevokeGrantsCommand
|
|
6566
|
+
});
|
|
6567
|
+
async function authRevokeGrantsCommand(options = {}) {
|
|
6568
|
+
const response = await adminApiPost("/api/v1/admin/auth/revoke-grants");
|
|
6569
|
+
if (options.json) {
|
|
6570
|
+
console.log(JSON.stringify(response, null, 2));
|
|
6571
|
+
return;
|
|
6572
|
+
}
|
|
6573
|
+
console.log(`Every admin browser session is out. Grant epoch is now ${response.epoch}.
|
|
6574
|
+
|
|
6575
|
+
Sign back in at /admin/login. Your CLI and the agent box are unaffected.`);
|
|
6576
|
+
}
|
|
6577
|
+
var init_auth_revoke_grants = __esm(() => {
|
|
6578
|
+
init_api();
|
|
6579
|
+
});
|
|
6580
|
+
|
|
6449
6581
|
// src/commands/auth-lastfm.ts
|
|
6450
6582
|
var exports_auth_lastfm = {};
|
|
6451
6583
|
__export(exports_auth_lastfm, {
|
|
@@ -9804,6 +9936,10 @@ function addAdminCommands(program2) {
|
|
|
9804
9936
|
const { authTikTokCommand: authTikTokCommand2 } = await Promise.resolve().then(() => (init_auth_tiktok(), exports_auth_tiktok));
|
|
9805
9937
|
await authTikTokCommand2();
|
|
9806
9938
|
});
|
|
9939
|
+
auth.command("revoke-grants").description("Sign every admin browser session out (bump the grant epoch)").option("--json", "Output raw JSON").action(async (options) => {
|
|
9940
|
+
const { authRevokeGrantsCommand: authRevokeGrantsCommand2 } = await Promise.resolve().then(() => (init_auth_revoke_grants(), exports_auth_revoke_grants));
|
|
9941
|
+
await authRevokeGrantsCommand2(options);
|
|
9942
|
+
});
|
|
9807
9943
|
auth.command("lastfm").description("Authorize Last.fm access (love-on-add). Run once for the URL, then again with --token").option("--token <token>", "The approved request token, to mint the session key").action(async (options) => {
|
|
9808
9944
|
const { authLastfmCommand: authLastfmCommand2 } = await Promise.resolve().then(() => (init_auth_lastfm(), exports_auth_lastfm));
|
|
9809
9945
|
await authLastfmCommand2(options);
|
package/package.json
CHANGED