pawmode 1.5.0 → 1.5.1
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.
|
@@ -393,6 +393,7 @@ function generateFocusTimerHTML(theme, botName, endsAt, duration) {
|
|
|
393
393
|
const safeBotName = botName.replace(/[&<>"']/g, "");
|
|
394
394
|
const safeEndsAt = endsAt.replace(/[&<>"']/g, "");
|
|
395
395
|
const safeDuration = duration.replace(/[^0-9]/g, "");
|
|
396
|
+
const catArt = "⠀⠀⠀⠀⠀⠀⣀⡠⠄⠒⠠⢄⠀⣀⠤⠒⠂⠤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⠤⠐⠒⠤⡀⢀⡠⠔⠂⠠⢄⣀⠀⠀⠀⠀⠀⠀\n⠀⠀⠀⠀⣠⠞⠂⢀⣀⣀⠀⠀⠉⠁⠀⣀⣀⣀⠀⠑⣤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⠋⠀⣀⣀⣀⠀⠈⠉⠀⢀⣀⣀⠀⠈⠲⡀⠀⠀⠀⠀\n⠀⠀⠀⣸⡏⠀⣴⢋⠤⢌⠙⠆⠀⢠⠎⢁⠤⠍⢧⠀⠀⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡿⠁⢠⡞⡡⠤⡉⠳⠀⠀⡴⠉⡠⠬⡹⡄⠀⢸⡄⠀⠀⠀\n⠀⠀⢀⣽⡁⠀⣿⡀⢀⡘⡄⡇⠀⢸⢢⠇⢀⢢⣺⠀⠀⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣨⣇⠀⢸⣏⠀⡐⢣⢸⠀⠀⡗⡜⢀⠐⣄⣧⠀⢸⣇⠀⠀⠀\n⠀⣰⠉⠙⠷⠀⢛⣟⣦⣄⣣⡇⠀⠘⣎⣰⣤⣾⡿⠁⠴⠋⠈⠱⡀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡎⠉⠻⠆⠈⣿⣳⣤⣙⣼⠂⠀⢻⣁⣦⣼⣿⠇⠠⠞⠁⠙⣆⠀\n⣺⠁⠀⣠⠒⠶⣄⠉⠓⢚⣣⡠⠤⢤⣈⡓⠛⠋⢠⠖⠲⢤⡀⠀⢷⠀⠀⠀⠀⠀⠀⠀⢐⡟⠀⢀⠔⠲⢦⡈⠑⠛⣋⣡⠤⠤⣄⣙⠚⠛⢁⡴⠒⠦⣄⠀⠨⡆\n⣽⠀⢸⠄⠣⡐⢹⠀⡤⠏⢁⢀⢀⠠⢀⠉⢦⡀⢹⡁⠔⡁⣗⠀⢸⡅⠀⠀⠀⠀⠀⠀⢸⡇⠀⡗⠘⢄⢈⡇⢠⠖⠉⡀⣀⠠⠄⡈⠳⣄⠈⣟⠠⢈⢸⠀⠀⣿\n⠹⣄⠸⣷⣤⣧⠞⣾⢁⠐⢀⠀⠠⠄⣀⠑⠄⢱⡸⣧⣴⣶⡟⢠⡟⠁⠀⠀⠀⠀⠀⠀⠈⢷⡀⢿⣦⣾⡼⢳⡏⡠⠁⡀⠠⠠⢄⠈⠢⠈⣆⢿⣤⢶⣾⠃⣼⠃\n⠀⡸⢷⠈⠉⠉⢸⡟⣆⠀⢂⠌⣁⠒⡈⠢⢈⣾⣧⠈⠉⠉⢴⢏⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠿⡆⠉⠉⠁⣾⣳⠀⡀⠆⡑⠄⢂⠙⠄⣱⣿⠀⠉⠉⠡⡾⡅⠀\n⠐⡇⠀⠀⠀⠀⠘⣿⡞⣦⣅⣂⣄⣂⣰⣵⣻⣽⠏⠀⠀⠀⠀⢰⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⢺⠀⠀⠀⠀⠀⢻⣷⢳⣴⣈⣐⣈⣄⣮⣞⣯⡿⠂⠀⠀⠀⠀⣸⠀\n⠀⠘⢄⠀⠀⠀⠀⠈⠻⠶⣝⣮⣳⣭⣳⣧⠟⠋⠀⠀⠀⠀⣠⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠣⡀⠀⠀⠀⠀⠙⠷⢮⣽⣭⣻⣜⣷⠾⠛⠁⠀⠀⠀⠀⡼⠃⠀\n⠀⠀⠈⡗⢠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⡠⢾⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⢀⠴⣟⠁⠀⠀\n⠀⠀⠀⢸⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠨⡷⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢻⠇⠀⠀⠀\n⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡅⠀⠀⠀\n⠀⠀⠀⢽⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢨⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡇⠀⠀⠀";
|
|
396
397
|
return `<!DOCTYPE html>
|
|
397
398
|
<html lang="en">
|
|
398
399
|
<head>
|
|
@@ -410,63 +411,39 @@ min-height:100vh;display:flex;flex-direction:column;
|
|
|
410
411
|
align-items:center;justify-content:center;
|
|
411
412
|
overflow:hidden;
|
|
412
413
|
}
|
|
413
|
-
.container{text-align:center;position:relative;z-index:1}
|
|
414
|
-
.
|
|
415
|
-
.
|
|
416
|
-
.
|
|
417
|
-
.
|
|
418
|
-
.
|
|
419
|
-
.
|
|
420
|
-
.
|
|
421
|
-
.
|
|
422
|
-
.trail span:nth-child(2){animation-delay:.25s}
|
|
423
|
-
.trail span:nth-child(3){animation-delay:.5s}
|
|
424
|
-
.trail span:nth-child(4){animation-delay:.75s}
|
|
425
|
-
.trail span:nth-child(5){animation-delay:1s}
|
|
426
|
-
.label{font-size:12px;text-transform:uppercase;letter-spacing:3px;color:${t.accent};font-weight:600;margin-bottom:24px}
|
|
427
|
-
.timer{font-size:64px;font-weight:700;letter-spacing:4px;color:${t.text};line-height:1;margin-bottom:12px;font-variant-numeric:tabular-nums}
|
|
428
|
-
.sub{font-size:12px;color:${t.textDim};margin-bottom:20px}
|
|
429
|
-
.quote{font-size:11px;color:${t.textDim};font-style:italic;height:16px;transition:opacity .8s}
|
|
430
|
-
.session-info{font-size:11px;color:${t.textDim};display:flex;gap:20px;justify-content:center;margin-top:20px}
|
|
414
|
+
.container{text-align:center;position:relative;z-index:1;padding:12px 16px}
|
|
415
|
+
.cat{font-size:7px;line-height:1.2;color:${t.accent};white-space:pre;margin:0 auto 14px;animation:breathe 4s ease-in-out infinite;text-shadow:0 0 0 transparent}
|
|
416
|
+
.label{font-size:11px;text-transform:uppercase;letter-spacing:3px;color:${t.accent};font-weight:600;margin-bottom:8px}
|
|
417
|
+
.timer{font-size:48px;font-weight:700;letter-spacing:4px;color:${t.text};line-height:1;margin-bottom:8px;font-variant-numeric:tabular-nums}
|
|
418
|
+
.progress{width:200px;height:3px;background:${t.border};border-radius:2px;margin:0 auto 10px;overflow:hidden}
|
|
419
|
+
.progress-fill{height:100%;background:${t.accent};border-radius:2px;width:0%;transition:width 1s linear}
|
|
420
|
+
.sub{font-size:11px;color:${t.textDim};margin-bottom:12px}
|
|
421
|
+
.quote{font-size:10px;color:${t.textDim};font-style:italic;height:14px;transition:opacity .8s}
|
|
422
|
+
.session-info{font-size:10px;color:${t.textDim};display:flex;gap:16px;justify-content:center;margin-top:12px}
|
|
431
423
|
.session-info span{display:flex;align-items:center;gap:5px}
|
|
432
424
|
.dot{width:5px;height:5px;border-radius:50%;background:${t.accent};animation:pulse 2s ease-in-out infinite}
|
|
425
|
+
.complete .cat{color:${t.done};animation:none;text-shadow:0 0 12px ${t.done}40}
|
|
433
426
|
.complete .label{color:${t.done}}
|
|
434
427
|
.complete .timer{color:${t.done}}
|
|
435
428
|
.complete .dot{background:${t.done};animation:none}
|
|
436
|
-
.complete .
|
|
437
|
-
|
|
438
|
-
.complete .trail span{animation:none;color:${t.done}}
|
|
439
|
-
@keyframes breathe{0%,100%{opacity:.6;transform:translate(-50%,-50%) scale(.95)}50%{opacity:1;transform:translate(-50%,-50%) scale(1.05)}}
|
|
440
|
-
@keyframes walk{0%,100%{opacity:.3;transform:translateY(0)}50%{opacity:1;transform:translateY(-3px)}}
|
|
429
|
+
.complete .progress-fill{background:${t.done}}
|
|
430
|
+
@keyframes breathe{0%,100%{opacity:.6;text-shadow:0 0 0 transparent}50%{opacity:1;text-shadow:0 0 15px ${t.accent}30}}
|
|
441
431
|
@keyframes pulse{0%,100%{opacity:.4}50%{opacity:1}}
|
|
442
432
|
@keyframes flash{0%,100%{opacity:1}50%{opacity:.3}}
|
|
443
433
|
.flash .timer{animation:flash .5s ease-in-out 3}
|
|
444
|
-
.glow{position:fixed;width:
|
|
445
|
-
.glow-1{top:-
|
|
446
|
-
.glow-2{bottom:-
|
|
447
|
-
.glow-3{top:50%;left:50%;transform:translate(-50%,-50%);opacity:.015}
|
|
434
|
+
.glow{position:fixed;width:200px;height:200px;border-radius:50%;background:${t.accent};opacity:.03;filter:blur(80px);pointer-events:none}
|
|
435
|
+
.glow-1{top:-60px;left:-60px}
|
|
436
|
+
.glow-2{bottom:-60px;right:-60px}
|
|
448
437
|
</style>
|
|
449
438
|
</head>
|
|
450
439
|
<body>
|
|
451
440
|
<div class="glow glow-1"></div>
|
|
452
441
|
<div class="glow glow-2"></div>
|
|
453
|
-
<div class="glow glow-3"></div>
|
|
454
442
|
<div class="container" id="container">
|
|
455
|
-
<
|
|
456
|
-
<svg class="ring-svg" viewBox="0 0 200 200">
|
|
457
|
-
<circle class="ring-bg" cx="100" cy="100" r="90"/>
|
|
458
|
-
<circle class="ring-fg" id="ring" cx="100" cy="100" r="90" stroke-dasharray="565.49" stroke-dashoffset="565.49"/>
|
|
459
|
-
</svg>
|
|
460
|
-
<pre class="paw-ascii" id="paw"> __
|
|
461
|
-
/ \\
|
|
462
|
-
| .. |
|
|
463
|
-
\\ -- /
|
|
464
|
-
\\__/
|
|
465
|
-
||</pre>
|
|
466
|
-
</div>
|
|
467
|
-
<div class="trail" id="trail"><span>.</span><span>o</span><span>O</span><span>o</span><span>.</span></div>
|
|
443
|
+
<pre class="cat" id="cat"></pre>
|
|
468
444
|
<div class="label" id="label">Locked In</div>
|
|
469
445
|
<div class="timer" id="timer">--:--</div>
|
|
446
|
+
<div class="progress"><div class="progress-fill" id="progress"></div></div>
|
|
470
447
|
<div class="sub" id="sub">${safeDuration} min session</div>
|
|
471
448
|
<div class="quote" id="quote"></div>
|
|
472
449
|
<div class="session-info">
|
|
@@ -474,49 +451,45 @@ overflow:hidden;
|
|
|
474
451
|
</div>
|
|
475
452
|
</div>
|
|
476
453
|
<script>
|
|
454
|
+
var catArt = ${JSON.stringify(catArt)};
|
|
455
|
+
document.getElementById("cat").textContent = catArt;
|
|
456
|
+
|
|
477
457
|
var endsAt = "${safeEndsAt}";
|
|
478
458
|
var durationMs = ${safeDuration} * 60000;
|
|
479
459
|
var endTime = endsAt ? new Date(endsAt).getTime() : 0;
|
|
480
460
|
var startTime = endTime - durationMs;
|
|
481
|
-
var circumference = 2 * Math.PI * 90;
|
|
482
461
|
var done = false;
|
|
483
|
-
var
|
|
462
|
+
var progressEl = document.getElementById("progress");
|
|
484
463
|
var quotes = [
|
|
485
464
|
"Deep work is the superpower of the 21st century.",
|
|
486
|
-
"Focus is not about saying yes. It
|
|
465
|
+
"Focus is not about saying yes. It\u2019s about saying no.",
|
|
487
466
|
"The successful warrior is the average person with laser focus.",
|
|
488
467
|
"What you stay focused on will grow.",
|
|
489
468
|
"Starve your distractions. Feed your focus.",
|
|
490
469
|
"Small daily improvements lead to stunning results.",
|
|
491
|
-
"You don
|
|
470
|
+
"You don\u2019t need more time. You need more focus.",
|
|
492
471
|
"Discipline is choosing what you want most over what you want now."
|
|
493
472
|
];
|
|
494
473
|
var qIdx = 0;
|
|
495
474
|
|
|
496
475
|
function pad(n) { return n < 10 ? "0" + n : "" + n; }
|
|
497
476
|
|
|
498
|
-
function updateRing(progress) {
|
|
499
|
-
var offset = circumference * (1 - progress);
|
|
500
|
-
ring.style.strokeDashoffset = Math.max(0, offset);
|
|
501
|
-
}
|
|
502
|
-
|
|
503
477
|
function tick() {
|
|
504
478
|
if (!endTime || done) return;
|
|
505
479
|
var now = Date.now();
|
|
506
480
|
var diff = endTime - now;
|
|
507
481
|
var elapsed = now - startTime;
|
|
508
|
-
var
|
|
509
|
-
|
|
482
|
+
var pct = Math.min(100, Math.max(0, (elapsed / durationMs) * 100));
|
|
483
|
+
progressEl.style.width = pct + "%";
|
|
510
484
|
|
|
511
485
|
if (diff <= 0) {
|
|
512
486
|
done = true;
|
|
513
487
|
document.getElementById("timer").textContent = "00:00";
|
|
514
488
|
document.getElementById("label").textContent = "Session Complete";
|
|
515
489
|
document.getElementById("sub").textContent = "Great work! Take a break.";
|
|
516
|
-
document.getElementById("paw").textContent = " __\\n / \\\\\\n| ^^ |\\n\\\\ \\u2323 /\\n \\\\__/\\n ||";
|
|
517
490
|
document.getElementById("container").classList.add("complete", "flash");
|
|
518
|
-
document.title = "${safeBotName}
|
|
519
|
-
|
|
491
|
+
document.title = "${safeBotName} \u2014 Done!";
|
|
492
|
+
progressEl.style.width = "100%";
|
|
520
493
|
return;
|
|
521
494
|
}
|
|
522
495
|
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { accent, addJob, bold, dim, getTodaysCost, installSystemJob, listJobs, parseHumanSchedule, pawPulse, pawStep, readCostTracker, readScheduleConfig, readTelegramConfig, removeJob, runJob, showBanner, showMini, showPuppyDisclaimer, startTelegramBot, subtle, telegramConfigExists, telegramQuestionnaire, toggleJob, writeScheduleConfig, writeTelegramConfig } from "./scheduler-DAmd0GzB.js";
|
|
3
3
|
import { getDefaultSkillsDir, installSkill, isSkillInstalled, listInstalledSkills, removeSkill } from "./skills-CMqq9k1-.js";
|
|
4
4
|
import { addPermissions, readSettings, removePermissions, writeSettings } from "./permissions-BlGEHCXO.js";
|
|
5
|
-
import { readConfig, startDashboard, writeConfig } from "./dashboard-server-
|
|
5
|
+
import { readConfig, startDashboard, writeConfig } from "./dashboard-server-BbQKUZiM.js";
|
|
6
6
|
import { Command } from "commander";
|
|
7
7
|
import * as p$13 from "@clack/prompts";
|
|
8
8
|
import * as p$12 from "@clack/prompts";
|
|
@@ -2384,7 +2384,7 @@ async function setupCommand(opts = {}) {
|
|
|
2384
2384
|
console.log(` ${subtle("\"Go to hacker news and summarize the top posts\"")}`);
|
|
2385
2385
|
console.log("");
|
|
2386
2386
|
if (wantDashboard) {
|
|
2387
|
-
const { startDashboard: startDashboard$1 } = await import("./dashboard-server-
|
|
2387
|
+
const { startDashboard: startDashboard$1 } = await import("./dashboard-server-DNp8nytI.js");
|
|
2388
2388
|
startDashboard$1({
|
|
2389
2389
|
theme: dashboardTheme,
|
|
2390
2390
|
botName
|
|
@@ -4047,7 +4047,7 @@ async function scheduleSetCapCommand(amount) {
|
|
|
4047
4047
|
//#endregion
|
|
4048
4048
|
//#region src/index.ts
|
|
4049
4049
|
const program = new Command();
|
|
4050
|
-
program.name("openpaw").description("Personal Assistant Wizard for Claude Code").version("1.5.
|
|
4050
|
+
program.name("openpaw").description("Personal Assistant Wizard for Claude Code").version("1.5.1");
|
|
4051
4051
|
program.command("setup", { isDefault: true }).description("Interactive setup wizard — pick skills, install tools, configure Claude Code").option("-p, --preset <name>", "Use a preset (everything, essentials, productivity, developer, creative, smart-home)").option("-y, --yes", "Skip confirmations, use defaults").option("--dry-run", "Show what would be installed without making changes").action(setupCommand);
|
|
4052
4052
|
program.command("add").description("Add skill(s) by name").argument("<skills...>", "Skill IDs to add (e.g. notes music email)").action(addCommand);
|
|
4053
4053
|
program.command("remove").description("Remove skill(s) by name").argument("<skills...>", "Skill IDs to remove").action(removeCommand);
|