@threadcrumbs/common 0.1.4 → 0.1.5
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/NOTICES.md +96 -0
- package/README.md +9 -2
- package/lib/claude-transcript.mjs +37 -5
- package/lib/context-breakdown.mjs +25 -17
- package/lib/jsonl-follower.mjs +15 -1
- package/lib/opencode-store.mjs +60 -21
- package/lib/telemetry-fields.mjs +4 -0
- package/package.json +18 -3
- package/telemetry/README.md +18 -4
- package/telemetry/antigravity.mjs +2 -1
- package/telemetry/claude-code.mjs +14 -8
- package/telemetry/codex.mjs +34 -24
- package/telemetry/cursor.mjs +2 -1
- package/telemetry/hermes.mjs +2 -1
- package/ui/fonts/inter-latin-ext-wght-normal.woff2 +0 -0
- package/ui/fonts/inter-latin-wght-normal.woff2 +0 -0
- package/ui/fonts/inter-tight-latin-ext-wght-normal.woff2 +0 -0
- package/ui/fonts/inter-tight-latin-wght-normal.woff2 +0 -0
- package/ui/fonts/jetbrains-mono-latin-ext-wght-normal.woff2 +0 -0
- package/ui/fonts/jetbrains-mono-latin-wght-normal.woff2 +0 -0
- package/ui/fonts.css +48 -0
- package/ui/gauge.css +75 -0
- package/ui/gauge.mjs +14 -0
- package/ui/html.mjs +1 -0
- package/ui/icons.mjs +98 -0
- package/ui/status.css +75 -0
- package/ui/status.mjs +36 -0
- package/ui/theme.css +104 -0
- package/ui/where.css +43 -0
- package/ui/where.mjs +24 -0
package/ui/theme.css
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
--bg: #14161b;
|
|
3
|
+
--pane: #1b1e25;
|
|
4
|
+
--raise: #272a33;
|
|
5
|
+
--sunk: #111318;
|
|
6
|
+
--line: rgba(255, 255, 255, 0.17);
|
|
7
|
+
--line2: rgba(255, 255, 255, 0.1);
|
|
8
|
+
--text: #e6e4df;
|
|
9
|
+
--text2: #c6c5cc;
|
|
10
|
+
--text3: #9f9ea8;
|
|
11
|
+
--accent: #c96442;
|
|
12
|
+
--accent-text: #e3865f;
|
|
13
|
+
--on-accent: #ffffff;
|
|
14
|
+
--focus: #e3865f;
|
|
15
|
+
--primary: #252833;
|
|
16
|
+
--on-primary: #f2f0ec;
|
|
17
|
+
|
|
18
|
+
--lamp: #f4cf50;
|
|
19
|
+
--lamp-ink: #f4cf50;
|
|
20
|
+
--lamp-wash: #2c2510;
|
|
21
|
+
--sign: #f4cf50;
|
|
22
|
+
--sign-ink: #15191d;
|
|
23
|
+
--knock: #101117;
|
|
24
|
+
--work: #79c2f4;
|
|
25
|
+
--wait: #a784eb;
|
|
26
|
+
--done: #9be6bd;
|
|
27
|
+
--err: #f87d7c;
|
|
28
|
+
--idle: #81878d;
|
|
29
|
+
--warn: #ffb56e;
|
|
30
|
+
--work-plate: #12293a;
|
|
31
|
+
--wait-plate: #241f3d;
|
|
32
|
+
--done-plate: #14301f;
|
|
33
|
+
--err-plate: #3a1d1b;
|
|
34
|
+
--idle-plate: #1a1c25;
|
|
35
|
+
--err-wash: #3a1d1b;
|
|
36
|
+
|
|
37
|
+
--add: #9be6bd;
|
|
38
|
+
--del: #f87d7c;
|
|
39
|
+
--add-bg: #14301f;
|
|
40
|
+
--del-bg: #3a1d1b;
|
|
41
|
+
|
|
42
|
+
--c0: #2a2d38;
|
|
43
|
+
--c1: #5cacf7;
|
|
44
|
+
--c2: #3cd0bc;
|
|
45
|
+
--c3: #b9a6ff;
|
|
46
|
+
--c4: #ff8fc8;
|
|
47
|
+
--chart: #7ccbff;
|
|
48
|
+
--chart-fill: rgba(124, 203, 255, 0.13);
|
|
49
|
+
--inst: #b9b8c0;
|
|
50
|
+
--inst-soft: #b9b8c0;
|
|
51
|
+
--dial: #101727;
|
|
52
|
+
--dial-track: #2f4466;
|
|
53
|
+
--needle: #eef8ff;
|
|
54
|
+
--needle-glow: rgba(127, 207, 255, 0.55);
|
|
55
|
+
--hub: #e8ecf2;
|
|
56
|
+
|
|
57
|
+
--shadow: 0 12px 40px rgba(0, 0, 0, 0.55), 0 2px 8px rgba(0, 0, 0, 0.4);
|
|
58
|
+
--scrim: rgba(0, 0, 0, 0.55);
|
|
59
|
+
|
|
60
|
+
--fs-1: 12px;
|
|
61
|
+
--fs-2: 12.5px;
|
|
62
|
+
--fs-3: 13px;
|
|
63
|
+
--fs-4: 13.5px;
|
|
64
|
+
--fs-5: 14px;
|
|
65
|
+
--fs-6: 14.5px;
|
|
66
|
+
--fs-7: 15px;
|
|
67
|
+
--fs-8: 15.5px;
|
|
68
|
+
--fs-9: 16px;
|
|
69
|
+
--fs-10: 17px;
|
|
70
|
+
--fs-11: 21.5px;
|
|
71
|
+
--fs-12: 28px;
|
|
72
|
+
--lh-tight: 1.24;
|
|
73
|
+
--lh-ui: 1.42;
|
|
74
|
+
--lh-body: 1.5;
|
|
75
|
+
|
|
76
|
+
--sp-1: 2px;
|
|
77
|
+
--sp-2: 4px;
|
|
78
|
+
--sp-3: 6px;
|
|
79
|
+
--sp-4: 8px;
|
|
80
|
+
--sp-5: 10px;
|
|
81
|
+
--sp-6: 12px;
|
|
82
|
+
--sp-7: 16px;
|
|
83
|
+
--sp-8: 24px;
|
|
84
|
+
--gl: max(16px, env(safe-area-inset-left, 0px));
|
|
85
|
+
--gr: max(16px, env(safe-area-inset-right, 0px));
|
|
86
|
+
|
|
87
|
+
--r-1: 2px;
|
|
88
|
+
--r-2: 4px;
|
|
89
|
+
--r-3: 6px;
|
|
90
|
+
--r-4: 8px;
|
|
91
|
+
--r-round: 999px;
|
|
92
|
+
|
|
93
|
+
--sans: 'Inter Variable', system-ui, -apple-system, 'Segoe UI', sans-serif;
|
|
94
|
+
--cond: 'Inter Tight Variable', 'Inter Variable', system-ui, sans-serif;
|
|
95
|
+
--mono: 'JetBrains Mono Variable', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;
|
|
96
|
+
|
|
97
|
+
font-size-adjust: 0.51;
|
|
98
|
+
color-scheme: dark;
|
|
99
|
+
}
|
|
100
|
+
:root *,
|
|
101
|
+
:root *::before,
|
|
102
|
+
:root *::after {
|
|
103
|
+
font-size-adjust: 0.51 !important;
|
|
104
|
+
}
|
package/ui/where.css
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
.w {
|
|
2
|
+
display: inline-flex;
|
|
3
|
+
align-items: center;
|
|
4
|
+
gap: 5px;
|
|
5
|
+
min-width: 0;
|
|
6
|
+
}
|
|
7
|
+
.w > span {
|
|
8
|
+
min-width: 0;
|
|
9
|
+
overflow-wrap: anywhere;
|
|
10
|
+
}
|
|
11
|
+
.w .ico {
|
|
12
|
+
color: var(--text3);
|
|
13
|
+
}
|
|
14
|
+
.w-folder {
|
|
15
|
+
color: var(--text);
|
|
16
|
+
font-weight: 500;
|
|
17
|
+
}
|
|
18
|
+
.hmark {
|
|
19
|
+
display: inline-grid;
|
|
20
|
+
place-items: center;
|
|
21
|
+
width: 20px;
|
|
22
|
+
height: 18px;
|
|
23
|
+
border: 1px solid var(--line);
|
|
24
|
+
border-radius: var(--r-2);
|
|
25
|
+
color: var(--text2);
|
|
26
|
+
font: 600 var(--fs-1) / 1.04 var(--mono);
|
|
27
|
+
}
|
|
28
|
+
.eff .eb-on {
|
|
29
|
+
fill: var(--text2);
|
|
30
|
+
}
|
|
31
|
+
.eff .eb-off {
|
|
32
|
+
fill: var(--line);
|
|
33
|
+
}
|
|
34
|
+
.tk {
|
|
35
|
+
display: inline-flex;
|
|
36
|
+
vertical-align: -2px;
|
|
37
|
+
margin-right: 6px;
|
|
38
|
+
color: var(--text3);
|
|
39
|
+
}
|
|
40
|
+
.tk .ico {
|
|
41
|
+
width: 14px;
|
|
42
|
+
height: 14px;
|
|
43
|
+
}
|
package/ui/where.mjs
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { esc } from './html.mjs'
|
|
2
|
+
import { ICO } from './icons.mjs'
|
|
3
|
+
|
|
4
|
+
export function repoName(name, org) {
|
|
5
|
+
const scoped = /^@([^/]+)\/(.+)$/.exec(name || '')
|
|
6
|
+
return scoped && org && scoped[1].toLowerCase() === String(org).toLowerCase() ? scoped[2] : name
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function whereHTML(s) {
|
|
10
|
+
const org = s.org ? `<span class="w w-org" title="${esc(`Organization ${s.org}`)}">${ICO('org')}<span>${esc(s.org)}</span></span>` : ''
|
|
11
|
+
return `${org}<span class="w w-folder" title="${esc(s.projectPath || s.project || '')}">${ICO('folder')}<span>${esc(repoName(s.project, s.org) || 'unknown')}</span></span>`
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function whereFullHTML(s) {
|
|
15
|
+
const chip = (icon, text) => `<span class="w">${ICO(icon)}<span>${esc(text)}</span></span>`
|
|
16
|
+
return [
|
|
17
|
+
s.org && chip('org', s.org),
|
|
18
|
+
`<span class="w w-folder">${ICO('folder')}<span>${esc(repoName(s.project, s.org) || 'unknown')}</span></span>`,
|
|
19
|
+
s.worktree && chip('worktree', s.worktree),
|
|
20
|
+
s.gitBranch && chip('branch', s.gitBranch),
|
|
21
|
+
]
|
|
22
|
+
.filter(Boolean)
|
|
23
|
+
.join('')
|
|
24
|
+
}
|