ctxpool 0.1.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/dist/util.js ADDED
@@ -0,0 +1,74 @@
1
+ import { createHash } from "node:crypto";
2
+ import { execFileSync } from "node:child_process";
3
+ import { existsSync, readdirSync, statSync } from "node:fs";
4
+ import { join } from "node:path";
5
+ export function slugify(value) {
6
+ return value
7
+ .trim()
8
+ .toLowerCase()
9
+ .replace(/['"]/g, "")
10
+ .replace(/[^a-z0-9]+/g, "-")
11
+ .replace(/^-+|-+$/g, "")
12
+ .slice(0, 80) || "current-task";
13
+ }
14
+ export function hashText(value) {
15
+ return createHash("sha256").update(value).digest("hex").slice(0, 16);
16
+ }
17
+ export function runOptional(cmd, args, cwd) {
18
+ try {
19
+ return execFileSync(cmd, args, {
20
+ cwd,
21
+ encoding: "utf8",
22
+ stdio: ["ignore", "pipe", "ignore"]
23
+ }).trim();
24
+ }
25
+ catch {
26
+ return "";
27
+ }
28
+ }
29
+ export function unique(values) {
30
+ return Array.from(new Set(values.map((value) => value.trim()).filter(Boolean)));
31
+ }
32
+ export function limit(values, count) {
33
+ return unique(values).slice(0, count);
34
+ }
35
+ export function findRecentFiles(root, maxFiles = 8) {
36
+ if (!existsSync(root))
37
+ return [];
38
+ const files = [];
39
+ const stack = [root];
40
+ while (stack.length > 0) {
41
+ const current = stack.pop();
42
+ if (!current)
43
+ continue;
44
+ let entries;
45
+ try {
46
+ entries = readdirSync(current);
47
+ }
48
+ catch {
49
+ continue;
50
+ }
51
+ for (const entry of entries) {
52
+ const fullPath = join(current, entry);
53
+ let stats;
54
+ try {
55
+ stats = statSync(fullPath);
56
+ }
57
+ catch {
58
+ continue;
59
+ }
60
+ if (stats.isDirectory()) {
61
+ if (!["node_modules", ".git", "dist"].includes(entry))
62
+ stack.push(fullPath);
63
+ }
64
+ else if (/\.(jsonl|json|md|txt|log)$/i.test(entry)) {
65
+ files.push({ path: fullPath, mtimeMs: stats.mtimeMs });
66
+ }
67
+ }
68
+ }
69
+ return files
70
+ .sort((a, b) => b.mtimeMs - a.mtimeMs)
71
+ .slice(0, maxFiles)
72
+ .map((file) => file.path);
73
+ }
74
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
2
+ <defs>
3
+ <linearGradient id="ctxpool-mark" x1="7" y1="6" x2="25" y2="26" gradientUnits="userSpaceOnUse">
4
+ <stop stop-color="#67e8f9"/>
5
+ <stop offset="1" stop-color="#22c55e"/>
6
+ </linearGradient>
7
+ </defs>
8
+ <rect x="2" y="2" width="28" height="28" rx="8" fill="#09090b"/>
9
+ <path d="M10 11.5h5.3c2.8 0 4.9 2.3 4.9 5.1v1.2" fill="none" stroke="url(#ctxpool-mark)" stroke-width="1.9" stroke-linecap="round"/>
10
+ <path d="M10 20.5h4.3c1.6 0 3-.7 4-1.9l2.1-2.7" fill="none" stroke="#f8fafc" stroke-width="1.9" stroke-linecap="round"/>
11
+ <path d="M12.8 16h8.4" fill="none" stroke="#94a3b8" stroke-width="1.5" stroke-linecap="round" stroke-dasharray="1 3"/>
12
+ <circle cx="9" cy="11.5" r="2.5" fill="#09090b" stroke="#f8fafc" stroke-width="1.6"/>
13
+ <circle cx="9" cy="20.5" r="2.5" fill="#09090b" stroke="url(#ctxpool-mark)" stroke-width="1.6"/>
14
+ <circle cx="22.5" cy="16" r="4" fill="#09090b" stroke="url(#ctxpool-mark)" stroke-width="1.8"/>
15
+ <circle cx="22.5" cy="16" r="1.45" fill="#f8fafc"/>
16
+ </svg>