polymath-society 0.2.23 → 0.2.24

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/dist/cli.js CHANGED
@@ -23421,6 +23421,76 @@ var init_remind = __esm({
23421
23421
  }
23422
23422
  });
23423
23423
 
23424
+ // src/banner.ts
23425
+ var banner_exports = {};
23426
+ __export(banner_exports, {
23427
+ banner: () => banner,
23428
+ printBanner: () => printBanner
23429
+ });
23430
+ function banner(version, out = process.stderr) {
23431
+ const tty = !!out.isTTY && !process.env.NO_COLOR;
23432
+ const cols = out.columns || 80;
23433
+ if (!tty) return `
23434
+ Polymath Society v${version}
23435
+ ${TAGLINE}
23436
+ ${PRIVACY}
23437
+ `;
23438
+ if (cols >= 74) {
23439
+ const lines = KEYBLOCK.map((l) => ` ${GOLD}${l}${RESET}`);
23440
+ lines.push(` ${DIM} \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 S O C I E T Y \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500${RESET}`);
23441
+ lines.push("");
23442
+ lines.push(` ${TAGLINE} ${DIM}v${version}${RESET}`);
23443
+ lines.push(` ${DIM}${PRIVACY}${RESET}`);
23444
+ return `
23445
+ ${lines.join("\n")}
23446
+ `;
23447
+ }
23448
+ const right = ["", "POLYMATH", "SOCIETY", "", `${DIM}v${version}${RESET}`, ""];
23449
+ const mark = MONOGRAM.map((l, i) => ` ${GOLD}${l}${RESET} ${right[i]}`.trimEnd());
23450
+ return `
23451
+ ${mark.join("\n")}
23452
+
23453
+ ${TAGLINE}
23454
+ ${DIM}${PRIVACY}${RESET}
23455
+ `;
23456
+ }
23457
+ async function printBanner(out = process.stderr) {
23458
+ if (bannerPrinted) return;
23459
+ bannerPrinted = true;
23460
+ let version = "0.0.0";
23461
+ try {
23462
+ const { promises: fs39 } = await import("fs");
23463
+ const path45 = await import("path");
23464
+ const { fileURLToPath: fileURLToPath6 } = await import("url");
23465
+ const here = path45.dirname(fileURLToPath6(import.meta.url));
23466
+ const pkg = JSON.parse(await fs39.readFile(path45.join(here, "..", "package.json"), "utf-8"));
23467
+ version = String(pkg.version || version);
23468
+ } catch {
23469
+ }
23470
+ out.write(banner(version, out));
23471
+ }
23472
+ var GOLD, DIM, RESET, KEYBLOCK, MONOGRAM, TAGLINE, PRIVACY, bannerPrinted;
23473
+ var init_banner = __esm({
23474
+ "src/banner.ts"() {
23475
+ "use strict";
23476
+ GOLD = "\x1B[38;5;179m";
23477
+ DIM = "\x1B[2m";
23478
+ RESET = "\x1B[0m";
23479
+ KEYBLOCK = [
23480
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557",
23481
+ "\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u255A\u2588\u2588\u2557 \u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D\u2588\u2588\u2551 \u2588\u2588\u2551",
23482
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2554\u255D \u2588\u2588\u2554\u2588\u2588\u2588\u2588\u2554\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551",
23483
+ "\u2588\u2588\u2554\u2550\u2550\u2550\u255D \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u255A\u2588\u2588\u2554\u255D \u2588\u2588\u2551\u255A\u2588\u2588\u2554\u255D\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551",
23484
+ "\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2551 \u255A\u2550\u255D \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551",
23485
+ "\u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D"
23486
+ ];
23487
+ MONOGRAM = ["\u2588\u2588\u2588\u2588\u2588\u2588\u2557 ", "\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557", "\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D", "\u2588\u2588\u2554\u2550\u2550\u2550\u255D ", "\u2588\u2588\u2551 ", "\u255A\u2550\u255D "];
23488
+ TAGLINE = "see how you actually work, from your own agent logs";
23489
+ PRIVACY = "private by construction \xB7 everything runs on this machine";
23490
+ bannerPrinted = false;
23491
+ }
23492
+ });
23493
+
23424
23494
  // src/exportScan.ts
23425
23495
  var exportScan_exports = {};
23426
23496
  __export(exportScan_exports, {
@@ -23912,73 +23982,6 @@ var init_reminderState = __esm({
23912
23982
  }
23913
23983
  });
23914
23984
 
23915
- // src/banner.ts
23916
- var banner_exports = {};
23917
- __export(banner_exports, {
23918
- banner: () => banner,
23919
- printBanner: () => printBanner
23920
- });
23921
- function banner(version, out = process.stderr) {
23922
- const tty = !!out.isTTY && !process.env.NO_COLOR;
23923
- const cols = out.columns || 80;
23924
- if (!tty) return `
23925
- Polymath Society v${version}
23926
- ${TAGLINE}
23927
- ${PRIVACY}
23928
- `;
23929
- if (cols >= 74) {
23930
- const lines = KEYBLOCK.map((l) => ` ${GOLD}${l}${RESET}`);
23931
- lines.push(` ${DIM} \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 S O C I E T Y \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500${RESET}`);
23932
- lines.push("");
23933
- lines.push(` ${TAGLINE} ${DIM}v${version}${RESET}`);
23934
- lines.push(` ${DIM}${PRIVACY}${RESET}`);
23935
- return `
23936
- ${lines.join("\n")}
23937
- `;
23938
- }
23939
- const right = ["", "POLYMATH", "SOCIETY", "", `${DIM}v${version}${RESET}`, ""];
23940
- const mark = MONOGRAM.map((l, i) => ` ${GOLD}${l}${RESET} ${right[i]}`.trimEnd());
23941
- return `
23942
- ${mark.join("\n")}
23943
-
23944
- ${TAGLINE}
23945
- ${DIM}${PRIVACY}${RESET}
23946
- `;
23947
- }
23948
- async function printBanner(out = process.stderr) {
23949
- let version = "0.0.0";
23950
- try {
23951
- const { promises: fs39 } = await import("fs");
23952
- const path45 = await import("path");
23953
- const { fileURLToPath: fileURLToPath6 } = await import("url");
23954
- const here = path45.dirname(fileURLToPath6(import.meta.url));
23955
- const pkg = JSON.parse(await fs39.readFile(path45.join(here, "..", "package.json"), "utf-8"));
23956
- version = String(pkg.version || version);
23957
- } catch {
23958
- }
23959
- out.write(banner(version, out));
23960
- }
23961
- var GOLD, DIM, RESET, KEYBLOCK, MONOGRAM, TAGLINE, PRIVACY;
23962
- var init_banner = __esm({
23963
- "src/banner.ts"() {
23964
- "use strict";
23965
- GOLD = "\x1B[38;5;179m";
23966
- DIM = "\x1B[2m";
23967
- RESET = "\x1B[0m";
23968
- KEYBLOCK = [
23969
- "\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557",
23970
- "\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u255A\u2588\u2588\u2557 \u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D\u2588\u2588\u2551 \u2588\u2588\u2551",
23971
- "\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2554\u255D \u2588\u2588\u2554\u2588\u2588\u2588\u2588\u2554\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551",
23972
- "\u2588\u2588\u2554\u2550\u2550\u2550\u255D \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u255A\u2588\u2588\u2554\u255D \u2588\u2588\u2551\u255A\u2588\u2588\u2554\u255D\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551",
23973
- "\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2551 \u255A\u2550\u255D \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551",
23974
- "\u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D"
23975
- ];
23976
- MONOGRAM = ["\u2588\u2588\u2588\u2588\u2588\u2588\u2557 ", "\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557", "\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D", "\u2588\u2588\u2554\u2550\u2550\u2550\u255D ", "\u2588\u2588\u2551 ", "\u255A\u2550\u255D "];
23977
- TAGLINE = "see how you actually work, from your own agent logs";
23978
- PRIVACY = "private by construction \xB7 everything runs on this machine";
23979
- }
23980
- });
23981
-
23982
23985
  // src/plan.ts
23983
23986
  var plan_exports = {};
23984
23987
  __export(plan_exports, {
@@ -24491,8 +24494,8 @@ async function runWizard() {
24491
24494
  reminderState = await recordQueued2(dataDir, reminderState, done.kinds);
24492
24495
  say(` ${green("\u2713")} Request an export above and we'll email ${notifyEmail} when it should be ready.`);
24493
24496
  } else {
24494
- const { spawn: spawn10 } = await import("node:child_process");
24495
- spawn10(process.execPath, [process.argv[1], "remind-exports", "--hours", "48", "--kinds", kinds.join(",")], { detached: true, stdio: "ignore" }).unref();
24497
+ const { spawn: spawn11 } = await import("node:child_process");
24498
+ spawn11(process.execPath, [process.argv[1], "remind-exports", "--hours", "48", "--kinds", kinds.join(",")], { detached: true, stdio: "ignore" }).unref();
24496
24499
  say(dim(` (couldn't reach the server \u2014 set a local notification instead)`));
24497
24500
  }
24498
24501
  }
@@ -24986,6 +24989,8 @@ try {
24986
24989
  import { promises as fs38, existsSync as existsSync7 } from "fs";
24987
24990
  import path44 from "path";
24988
24991
  import { fileURLToPath as fileURLToPath5 } from "url";
24992
+ import { spawnSync as spawnSync3 } from "child_process";
24993
+ import readline2 from "readline";
24989
24994
 
24990
24995
  // src/openBrowser.ts
24991
24996
  import { spawn } from "child_process";
@@ -28165,8 +28170,8 @@ PROJECTS`);
28165
28170
  log(``);
28166
28171
  }
28167
28172
  async function askYesNo(q, def = true) {
28168
- const readline2 = await import("node:readline/promises");
28169
- const rl = readline2.createInterface({ input: process.stdin, output: process.stderr });
28173
+ const readline3 = await import("node:readline/promises");
28174
+ const rl = readline3.createInterface({ input: process.stdin, output: process.stderr });
28170
28175
  try {
28171
28176
  for (; ; ) {
28172
28177
  const a = (await rl.question(`${q} `)).trim().toLowerCase();
@@ -28212,10 +28217,17 @@ async function main() {
28212
28217
  console.log(USAGE);
28213
28218
  return;
28214
28219
  }
28215
- console.error(` data home: ${DATA_ROOT}`);
28216
- await maybePrintUpdateNotice(opts2);
28217
28220
  const wantWizard = process.env.POLYMATH_WIZARD === "1" || process.env.POLYMATH_WIZARD !== "0" && process.argv.length <= 2 && (ASSUME_TTY || !!process.stdin.isTTY && !!process.stdout.isTTY);
28221
+ if (!wantWizard) {
28222
+ console.error(` data home: ${DATA_ROOT}`);
28223
+ await maybePrintUpdateNotice(opts2);
28224
+ }
28218
28225
  if (wantWizard) {
28226
+ const { printBanner: printBanner2 } = await Promise.resolve().then(() => (init_banner(), banner_exports));
28227
+ await printBanner2();
28228
+ console.error("");
28229
+ await maybePrintUpdateNotice(opts2);
28230
+ console.error(` data home: ${DATA_ROOT}`);
28219
28231
  console.error(" Checking for existing analysis\u2026");
28220
28232
  const prior = process.env.POLYMATH_WIZARD === "1" ? null : await readPriorAnalysis();
28221
28233
  if (prior) {
@@ -28661,11 +28673,64 @@ function compareVersions(a, b) {
28661
28673
  }
28662
28674
  return 0;
28663
28675
  }
28676
+ async function promptAutoUpdate(current, latest) {
28677
+ console.error(`
28678
+ New version available: polymath-society ${current} \u2192 ${latest}`);
28679
+ const answer = await new Promise((resolve2) => {
28680
+ const rl = readline2.createInterface({ input: process.stdin, output: process.stderr });
28681
+ const timer = setTimeout(() => {
28682
+ rl.close();
28683
+ resolve2("");
28684
+ }, 15e3);
28685
+ rl.question(` Update now? (Recommended) [Y/n] `, (a) => {
28686
+ clearTimeout(timer);
28687
+ rl.close();
28688
+ resolve2(a.trim().toLowerCase());
28689
+ });
28690
+ });
28691
+ if (answer === "n" || answer === "no") {
28692
+ console.error("");
28693
+ return;
28694
+ }
28695
+ console.error(`
28696
+ Updating\u2026
28697
+ `);
28698
+ const install = spawnSync3("npm", ["install", "-g", "polymath-society@latest"], {
28699
+ stdio: "inherit",
28700
+ shell: process.platform === "win32"
28701
+ });
28702
+ if (install.status !== 0) {
28703
+ console.error(`
28704
+ Update didn't go through \u2014 continuing on ${current}.`);
28705
+ console.error(` You can update manually any time: npm install -g polymath-society@latest
28706
+ `);
28707
+ return;
28708
+ }
28709
+ console.error(`
28710
+ Updated to ${latest}. Relaunching\u2026
28711
+ `);
28712
+ const relaunch = spawnSync3("polymath-society", process.argv.slice(2), {
28713
+ stdio: "inherit",
28714
+ shell: process.platform === "win32"
28715
+ });
28716
+ if (relaunch.error) {
28717
+ console.error(` Updated, but couldn't relaunch automatically \u2014 just run polymath-society again.`);
28718
+ process.exit(0);
28719
+ }
28720
+ process.exit(relaunch.status ?? 0);
28721
+ }
28664
28722
  async function maybePrintUpdateNotice(opts2) {
28665
28723
  if (process.env.POLYMATH_NO_UPDATE_CHECK === "1") return;
28666
28724
  if (!process.stderr.isTTY) return;
28667
28725
  if (opts2.json || opts2.out) return;
28668
28726
  if (opts2.cmd !== "profile" && opts2.cmd !== "serve" && opts2.cmd !== "grade") return;
28727
+ const canPrompt = !!process.stdin.isTTY;
28728
+ const notice = async (current, latest) => {
28729
+ if (canPrompt) return promptAutoUpdate(current, latest);
28730
+ console.error(` update available: polymath-society ${current} \u2192 ${latest}`);
28731
+ console.error(` run: npm install -g polymath-society@latest
28732
+ `);
28733
+ };
28669
28734
  const cacheFile = path44.join(DATA_ROOT, "update-check.json");
28670
28735
  const now = Date.now();
28671
28736
  const ttlMs = 12 * 60 * 60 * 1e3;
@@ -28673,11 +28738,7 @@ async function maybePrintUpdateNotice(opts2) {
28673
28738
  const cached2 = JSON.parse(await fs38.readFile(cacheFile, "utf8"));
28674
28739
  if (cached2.checkedAt && now - cached2.checkedAt < ttlMs) {
28675
28740
  const current = await pkgVersion();
28676
- if (cached2.latest && compareVersions(cached2.latest, current) > 0) {
28677
- console.error(` update available: polymath-society ${current} \u2192 ${cached2.latest}`);
28678
- console.error(` run: npm install -g polymath-society@latest
28679
- `);
28680
- }
28741
+ if (cached2.latest && compareVersions(cached2.latest, current) > 0) await notice(current, cached2.latest);
28681
28742
  return;
28682
28743
  }
28683
28744
  } catch {
@@ -28695,11 +28756,7 @@ async function maybePrintUpdateNotice(opts2) {
28695
28756
  if (!latest) return;
28696
28757
  await fs38.writeFile(cacheFile, JSON.stringify({ checkedAt: now, latest }, null, 2), "utf8").catch(() => {
28697
28758
  });
28698
- if (compareVersions(latest, current) > 0) {
28699
- console.error(` update available: polymath-society ${current} \u2192 ${latest}`);
28700
- console.error(` run: npm install -g polymath-society@latest
28701
- `);
28702
- }
28759
+ if (compareVersions(latest, current) > 0) await notice(current, latest);
28703
28760
  } catch {
28704
28761
  } finally {
28705
28762
  clearTimeout(timer);
@@ -15418,6 +15418,7 @@ function tick(ok) {
15418
15418
  if (!p) return;
15419
15419
  if (ok) p.done++;
15420
15420
  else p.failed++;
15421
+ console.log(` \u03A3 ${p.done + p.failed}/${p.total}`);
15421
15422
  if ((p.done + p.failed) % 25 === 0) progress("progress");
15422
15423
  }
15423
15424
  function progress(event = "progress") {
@@ -15327,6 +15327,7 @@ function tick(ok) {
15327
15327
  if (!p) return;
15328
15328
  if (ok) p.done++;
15329
15329
  else p.failed++;
15330
+ console.log(` \u03A3 ${p.done + p.failed}/${p.total}`);
15330
15331
  if ((p.done + p.failed) % 25 === 0) progress("progress");
15331
15332
  }
15332
15333
  function progress(event = "progress") {
@@ -15327,6 +15327,7 @@ function tick(ok) {
15327
15327
  if (!p) return;
15328
15328
  if (ok) p.done++;
15329
15329
  else p.failed++;
15330
+ console.log(` \u03A3 ${p.done + p.failed}/${p.total}`);
15330
15331
  if ((p.done + p.failed) % 25 === 0) progress("progress");
15331
15332
  }
15332
15333
  function progress(event = "progress") {
@@ -15327,6 +15327,7 @@ function tick(ok) {
15327
15327
  if (!p) return;
15328
15328
  if (ok) p.done++;
15329
15329
  else p.failed++;
15330
+ console.log(` \u03A3 ${p.done + p.failed}/${p.total}`);
15330
15331
  if ((p.done + p.failed) % 25 === 0) progress("progress");
15331
15332
  }
15332
15333
  function progress(event = "progress") {
@@ -15327,6 +15327,7 @@ function tick(ok) {
15327
15327
  if (!p) return;
15328
15328
  if (ok) p.done++;
15329
15329
  else p.failed++;
15330
+ console.log(` \u03A3 ${p.done + p.failed}/${p.total}`);
15330
15331
  if ((p.done + p.failed) % 25 === 0) progress("progress");
15331
15332
  }
15332
15333
  function progress(event = "progress") {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "polymath-society",
3
- "version": "0.2.23",
3
+ "version": "0.2.24",
4
4
  "description": "Deterministic metrics from your local Claude Code / Codex agent logs — parallelism, flow, throughput, projects. Zero LLM, zero server, on-device.",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",