fluncle 0.66.0 → 0.67.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 +29 -9
  2. package/package.json +1 -1
package/bin/fluncle.mjs CHANGED
@@ -423,7 +423,7 @@ function parseVersion(version) {
423
423
  var currentVersion;
424
424
  var init_version = __esm(() => {
425
425
  init_output();
426
- currentVersion = "0.66.0".trim() ? "0.66.0".trim() : "0.1.0";
426
+ currentVersion = "0.67.0".trim() ? "0.67.0".trim() : "0.1.0";
427
427
  });
428
428
 
429
429
  // src/update-notifier.ts
@@ -2138,10 +2138,13 @@ function parseVersion2(version) {
2138
2138
  var currentVersion2, latestReleaseUrl = "https://api.github.com/repos/mauricekleine/fluncle/releases/latest";
2139
2139
  var init_version2 = __esm(() => {
2140
2140
  init_output();
2141
- currentVersion2 = "0.66.0".trim() ? "0.66.0".trim() : "0.1.0";
2141
+ currentVersion2 = "0.67.0".trim() ? "0.67.0".trim() : "0.1.0";
2142
2142
  });
2143
2143
 
2144
2144
  // ../../packages/registry/src/index.ts
2145
+ function liveSurfaces() {
2146
+ return SURFACES.filter((surface) => surface.pending !== true);
2147
+ }
2145
2148
  var SITE = "https://www.fluncle.com", PROBE_CADENCE_MS, PROBE_TIMEOUT_MS, MINUTE_MS, SURFACES;
2146
2149
  var init_src = __esm(() => {
2147
2150
  PROBE_CADENCE_MS = 10 * 60 * 1000;
@@ -2664,6 +2667,18 @@ var init_src = __esm(() => {
2664
2667
  operatorNotes: "Authenticated admin/agent tier. The enrichment crons drive a subset of these.",
2665
2668
  weights: { cli: "hidden" }
2666
2669
  },
2670
+ {
2671
+ exposedContent: [
2672
+ "Fluncle Lens — the browser extension that finds fluncle:// coordinates on any page and links each to its /log/<coord> finding (with a hover card from the public API)"
2673
+ ],
2674
+ kind: "extension",
2675
+ name: "extension.lens",
2676
+ operatorNotes: "Fluncle Lens (apps/extension), MV3. PENDING Chrome Web Store review — DARK until approval, then flip `pending` + set the assigned listing URL. The placeholder `url` is the store search for the listing; probeConfig is the post-approval /status check.",
2677
+ pending: true,
2678
+ probeConfig: { cadenceMs: PROBE_CADENCE_MS, kind: "http", timeoutMs: PROBE_TIMEOUT_MS },
2679
+ url: "https://chromewebstore.google.com/search/Fluncle%20Lens",
2680
+ weights: { web: "secondary" }
2681
+ },
2667
2682
  {
2668
2683
  command: "fluncle admin tracks enrich --queue",
2669
2684
  exposedContent: [
@@ -2820,7 +2835,7 @@ var init_status = __esm(() => {
2820
2835
  init_api();
2821
2836
  serviceLabels = (() => {
2822
2837
  const labels = new Map;
2823
- for (const surface of SURFACES) {
2838
+ for (const surface of liveSurfaces()) {
2824
2839
  const match = surface.operatorNotes?.match(/service `([a-z0-9-]+)`/);
2825
2840
  const id = match?.[1];
2826
2841
  const label = surface.exposedContent[0];
@@ -3044,7 +3059,7 @@ __export(exports_admin_tracks, {
3044
3059
  backfillDiscogsCommand: () => backfillDiscogsCommand
3045
3060
  });
3046
3061
  async function fetchAdminTracks(options) {
3047
- const { hasContext, hasNote, hasObservation, hasVideo, max, order, status } = options;
3062
+ const { hasContext, hasNote, hasObservation, hasVideo, max, order, retryEmptyContext, status } = options;
3048
3063
  const results = [];
3049
3064
  let cursor;
3050
3065
  do {
@@ -3055,6 +3070,9 @@ async function fetchAdminTracks(options) {
3055
3070
  if (hasContext !== undefined) {
3056
3071
  params.set("hasContext", String(hasContext));
3057
3072
  }
3073
+ if (retryEmptyContext) {
3074
+ params.set("retryEmptyContext", "true");
3075
+ }
3058
3076
  if (hasNote !== undefined) {
3059
3077
  params.set("hasNote", String(hasNote));
3060
3078
  }
@@ -3094,8 +3112,8 @@ async function queueCommand(limit, filters = {}) {
3094
3112
  async function enrichQueueCommand(limit) {
3095
3113
  return fetchAdminTracks({ max: limit, order: "asc", status: "queue" });
3096
3114
  }
3097
- async function contextQueueCommand(limit) {
3098
- return fetchAdminTracks({ hasContext: false, max: limit, order: "asc" });
3115
+ async function contextQueueCommand(limit, retryEmptyContext = false) {
3116
+ return fetchAdminTracks({ hasContext: false, max: limit, order: "asc", retryEmptyContext });
3099
3117
  }
3100
3118
  async function observeQueueCommand(limit) {
3101
3119
  return fetchAdminTracks({
@@ -6471,7 +6489,7 @@ function addAdminCommands(program2) {
6471
6489
  const { trackObserveCommand: trackObserveCommand2 } = await Promise.resolve().then(() => (init_track(), exports_track));
6472
6490
  await runTrackObserve(idOrLogId, options, trackObserveCommand2);
6473
6491
  });
6474
- adminTrack.command("context").description("Gather the field notes for a finding (facts only; observe speaks from them)").argument("[idOrLogId]").option("--queue", "Show the context worklist (findings missing field notes), oldest first", false).option("--limit <limit>", "Number of findings to show with --queue", "10").option("--query <text>", "Override the fact-search query (else the Worker builds one)").option("--refresh", "Re-run the fetch even if a note exists (backfill/sharpen)", false).option("--json", "Print JSON", false).allowExcessArguments().action(async (idOrLogId, options) => {
6492
+ adminTrack.command("context").description("Gather the field notes for a finding (facts only; observe speaks from them)").argument("[idOrLogId]").option("--queue", "Show the context worklist (findings missing field notes), oldest first", false).option("--retry-empty", "With --queue: also re-pick finds confirmed empty last pass (widen the net)", false).option("--limit <limit>", "Number of findings to show with --queue", "10").option("--query <text>", "Override the fact-search query (else the Worker builds one)").option("--refresh", "Re-run the fetch even if a note exists (backfill/sharpen)", false).option("--json", "Print JSON", false).allowExcessArguments().action(async (idOrLogId, options) => {
6475
6493
  if (options.queue) {
6476
6494
  const { contextQueueCommand: contextQueueCommand2 } = await Promise.resolve().then(() => (init_admin_tracks(), exports_admin_tracks));
6477
6495
  await runAdminContextQueue(options, contextQueueCommand2);
@@ -7281,7 +7299,8 @@ async function runAdminQueue(options, queueCommand2) {
7281
7299
  }
7282
7300
  async function runAdminContextQueue(options, contextQueueCommand2) {
7283
7301
  const limit = parseListLimit(options.limit);
7284
- const tracks = await contextQueueCommand2(limit);
7302
+ const retryEmpty = options.retryEmpty === true;
7303
+ const tracks = await contextQueueCommand2(limit, retryEmpty);
7285
7304
  if (options.json) {
7286
7305
  printJson({
7287
7306
  ok: true,
@@ -7295,7 +7314,8 @@ async function runAdminContextQueue(options, contextQueueCommand2) {
7295
7314
  }
7296
7315
  const { trackRows: trackRows2 } = await Promise.resolve().then(() => (init_format2(), exports_format));
7297
7316
  const noun = tracks.length === 1 ? "finding" : "findings";
7298
- console.log(`${tracks.length} ${noun} missing field notes, oldest first:`);
7317
+ const scope = retryEmpty ? " (incl. empty retries)" : "";
7318
+ console.log(`${tracks.length} ${noun} missing field notes${scope}, oldest first:`);
7299
7319
  console.log(trackRows2(tracks).join(`
7300
7320
  `));
7301
7321
  }
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.66.0"
34
+ "version": "0.67.0"
35
35
  }