@subvalue/cli 0.1.3 → 0.1.4

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 (37) hide show
  1. package/PRE_RELEASE.md +6 -6
  2. package/README.md +5 -3
  3. package/dist/PRICING.md +15 -16
  4. package/dist/packages/cli/src/index.js +109 -20
  5. package/dist/packages/cli/src/protocol.js +13 -0
  6. package/dist/packages/cli/src/runtime.js +44 -14
  7. package/dist/packages/cli/src/server.js +306 -62
  8. package/dist/packages/core/src/calendar.js +41 -18
  9. package/dist/packages/core/src/coverage.js +12 -0
  10. package/dist/packages/core/src/demo.js +61 -9
  11. package/dist/packages/core/src/metadata.js +52 -9
  12. package/dist/packages/core/src/pricing/current.js +346 -297
  13. package/dist/packages/core/src/pricing/index.js +373 -73
  14. package/dist/packages/core/src/providers/claude/index.js +93 -21
  15. package/dist/packages/core/src/providers/codex/index.js +213 -46
  16. package/dist/packages/core/src/scanner.js +226 -46
  17. package/dist/packages/core/src/security.js +127 -34
  18. package/dist/packages/core/src/storage.js +215 -47
  19. package/dist/packages/core/src/subscriptions.js +146 -21
  20. package/dist/packages/core/src/summary.js +408 -59
  21. package/dist/packages/core/src/types.js +71 -17
  22. package/dist/packages/core/src/usage-json.js +166 -47
  23. package/dist/packages/receipt/src/index.js +386 -82
  24. package/dist/packages/ui/src/brand.js +42 -27
  25. package/dist/public/app.css +2280 -61
  26. package/dist/public/apps/web/src/landing.js +200 -8
  27. package/dist/public/apps/web/src/main.js +1143 -98
  28. package/dist/public/index.html +24 -1
  29. package/dist/public/landing.css +3235 -80
  30. package/dist/public/landing.html +21 -1
  31. package/dist/public/packages/core/src/calendar.js +41 -18
  32. package/dist/public/packages/core/src/coverage.js +12 -0
  33. package/dist/public/packages/core/src/subscriptions.js +146 -21
  34. package/dist/public/packages/receipt/src/index.js +386 -82
  35. package/dist/public/packages/ui/src/brand.js +42 -27
  36. package/dist/public/privacy.css +197 -9
  37. package/package.json +1 -1
@@ -1,11 +1,199 @@
1
1
  /* Both the public page and local app use the same receipt renderer and tokens. */
2
- @font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:block;src:url('/fonts/inter-latin.woff2') format('woff2')}
3
- @font-face{font-family:'Plex Mono';font-style:normal;font-weight:400 700;font-display:block;src:url('/fonts/plex-mono.woff2') format('woff2')}
4
- .brand-name{display:inline-flex;align-items:center;position:relative;color:#eef2f4;font-family:Inter,sans-serif;font-weight:800;letter-spacing:-.055em}.brand-name-accent{color:#37ec85}
5
- .brand-name-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
6
- .brand-wordmark{display:block;width:92px;height:14px;overflow:visible}
7
- @media(forced-colors:active){.brand-name,.brand-name-accent{color:CanvasText}}
2
+ @font-face {
3
+ font-family: Inter;
4
+ font-style: normal;
5
+ font-weight: 100 900;
6
+ font-display: block;
7
+ src: url('/fonts/inter-latin.woff2') format('woff2');
8
+ }
9
+ @font-face {
10
+ font-family: 'Plex Mono';
11
+ font-style: normal;
12
+ font-weight: 400 700;
13
+ font-display: block;
14
+ src: url('/fonts/plex-mono.woff2') format('woff2');
15
+ }
16
+ .brand-name {
17
+ display: inline-flex;
18
+ align-items: center;
19
+ position: relative;
20
+ color: #eef2f4;
21
+ font-family: Inter, sans-serif;
22
+ font-weight: 800;
23
+ letter-spacing: -0.055em;
24
+ }
25
+ .brand-name-accent {
26
+ color: #37ec85;
27
+ }
28
+ .brand-name-label {
29
+ position: absolute;
30
+ width: 1px;
31
+ height: 1px;
32
+ padding: 0;
33
+ margin: -1px;
34
+ overflow: hidden;
35
+ clip-path: inset(50%);
36
+ white-space: nowrap;
37
+ }
38
+ .brand-wordmark {
39
+ display: block;
40
+ width: 92px;
41
+ height: 14px;
42
+ overflow: visible;
43
+ }
44
+ @media (forced-colors: active) {
45
+ .brand-name,
46
+ .brand-name-accent {
47
+ color: CanvasText;
48
+ }
49
+ }
8
50
 
9
- :root{color-scheme:dark;--bg:#080b0d;--text:#eff0f1;--muted:#b2b7bd;--border:#25282d;--green:#37ec85}
10
- *{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:15px Inter,"Segoe UI",Arial,sans-serif;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}a:focus-visible{outline:2px solid var(--green);outline-offset:5px}a:hover{color:var(--green)}.privacy-nav{max-width:880px;margin:auto;padding:28px 32px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--border)}.brand{display:flex;align-items:center;gap:11px;font-size:19px;font-weight:650;letter-spacing:-.5px}.privacy-back{color:var(--muted);font-size:13px;min-height:44px;display:flex;align-items:center}.privacy-document{max-width:784px;margin:auto;padding:50px 32px 40px}.privacy-document h1{font-size:32px;font-weight:550;letter-spacing:-1px;line-height:1.2;margin:0 0 22px}.privacy-document h2{font-size:18px;font-weight:550;letter-spacing:-.3px;margin:40px 0 16px;padding-top:26px;border-top:1px solid var(--border)}.privacy-document p,.privacy-document ul{color:var(--muted);line-height:1.85;margin:0 0 18px}.privacy-document ul{padding-left:21px}.privacy-document li{padding-left:4px;margin-bottom:8px}.privacy-document code{font:12px "Plex Mono",Consolas,monospace;color:var(--text);background:#13171c;padding:2px 5px;border:1px solid #22282e;border-radius:3px;overflow-wrap:anywhere}.privacy-document p a{color:var(--text);text-decoration:underline;text-underline-offset:4px}.privacy-document footer{margin-top:38px;padding-top:22px;border-top:1px solid var(--border);font-size:12px;color:var(--muted)}.privacy-skip{position:fixed;top:-100px;left:20px;background:var(--green);color:#080b0d;padding:12px;z-index:2}.privacy-skip:focus{top:12px}
11
- @media(max-width:600px){.privacy-nav{padding:14px 22px}.privacy-document{padding:32px 22px}.privacy-document h1{font-size:27px;max-width:280px}.privacy-document h2{font-size:17px;margin-top:30px;padding-top:22px}body{font-size:14px}.privacy-document code{font-size:11px}}
51
+ :root {
52
+ color-scheme: dark;
53
+ --bg: #080b0d;
54
+ --text: #eff0f1;
55
+ --muted: #b2b7bd;
56
+ --border: #25282d;
57
+ --green: #37ec85;
58
+ }
59
+ * {
60
+ box-sizing: border-box;
61
+ }
62
+ body {
63
+ margin: 0;
64
+ background: var(--bg);
65
+ color: var(--text);
66
+ font:
67
+ 15px Inter,
68
+ 'Segoe UI',
69
+ Arial,
70
+ sans-serif;
71
+ -webkit-font-smoothing: antialiased;
72
+ }
73
+ a {
74
+ color: inherit;
75
+ text-decoration: none;
76
+ }
77
+ a:focus-visible {
78
+ outline: 2px solid var(--green);
79
+ outline-offset: 5px;
80
+ }
81
+ a:hover {
82
+ color: var(--green);
83
+ }
84
+ .privacy-nav {
85
+ max-width: 880px;
86
+ margin: auto;
87
+ padding: 28px 32px;
88
+ display: flex;
89
+ justify-content: space-between;
90
+ align-items: center;
91
+ border-bottom: 1px solid var(--border);
92
+ }
93
+ .brand {
94
+ display: flex;
95
+ align-items: center;
96
+ gap: 11px;
97
+ font-size: 19px;
98
+ font-weight: 650;
99
+ letter-spacing: -0.5px;
100
+ }
101
+ .privacy-back {
102
+ color: var(--muted);
103
+ font-size: 13px;
104
+ min-height: 44px;
105
+ display: flex;
106
+ align-items: center;
107
+ }
108
+ .privacy-document {
109
+ max-width: 784px;
110
+ margin: auto;
111
+ padding: 50px 32px 40px;
112
+ }
113
+ .privacy-document h1 {
114
+ font-size: 32px;
115
+ font-weight: 550;
116
+ letter-spacing: -1px;
117
+ line-height: 1.2;
118
+ margin: 0 0 22px;
119
+ }
120
+ .privacy-document h2 {
121
+ font-size: 18px;
122
+ font-weight: 550;
123
+ letter-spacing: -0.3px;
124
+ margin: 40px 0 16px;
125
+ padding-top: 26px;
126
+ border-top: 1px solid var(--border);
127
+ }
128
+ .privacy-document p,
129
+ .privacy-document ul {
130
+ color: var(--muted);
131
+ line-height: 1.85;
132
+ margin: 0 0 18px;
133
+ }
134
+ .privacy-document ul {
135
+ padding-left: 21px;
136
+ }
137
+ .privacy-document li {
138
+ padding-left: 4px;
139
+ margin-bottom: 8px;
140
+ }
141
+ .privacy-document code {
142
+ font:
143
+ 12px 'Plex Mono',
144
+ Consolas,
145
+ monospace;
146
+ color: var(--text);
147
+ background: #13171c;
148
+ padding: 2px 5px;
149
+ border: 1px solid #22282e;
150
+ border-radius: 3px;
151
+ overflow-wrap: anywhere;
152
+ }
153
+ .privacy-document p a {
154
+ color: var(--text);
155
+ text-decoration: underline;
156
+ text-underline-offset: 4px;
157
+ }
158
+ .privacy-document footer {
159
+ margin-top: 38px;
160
+ padding-top: 22px;
161
+ border-top: 1px solid var(--border);
162
+ font-size: 12px;
163
+ color: var(--muted);
164
+ }
165
+ .privacy-skip {
166
+ position: fixed;
167
+ top: -100px;
168
+ left: 20px;
169
+ background: var(--green);
170
+ color: #080b0d;
171
+ padding: 12px;
172
+ z-index: 2;
173
+ }
174
+ .privacy-skip:focus {
175
+ top: 12px;
176
+ }
177
+ @media (max-width: 600px) {
178
+ .privacy-nav {
179
+ padding: 14px 22px;
180
+ }
181
+ .privacy-document {
182
+ padding: 32px 22px;
183
+ }
184
+ .privacy-document h1 {
185
+ font-size: 27px;
186
+ max-width: 280px;
187
+ }
188
+ .privacy-document h2 {
189
+ font-size: 17px;
190
+ margin-top: 30px;
191
+ padding-top: 22px;
192
+ }
193
+ body {
194
+ font-size: 14px;
195
+ }
196
+ .privacy-document code {
197
+ font-size: 11px;
198
+ }
199
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@subvalue/cli",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "description": "Local, read-only Codex and Claude Code API-equivalent usage dashboard",
5
5
  "type": "module",
6
6
  "license": "MIT",