@tech-leads-club/harness-toolkit 0.2.1 → 0.3.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/README.md +22 -26
- package/bin/tlc-build.mjs +93 -0
- package/bin/tlc-cli.ts +117 -58
- package/bin/tlc-exec.mjs +16 -13
- package/dist/compact-before.mjs +151 -15
- package/dist/doctor.mjs +288 -45
- package/dist/help-topic.mjs +0 -0
- package/dist/init-project.mjs +15 -14
- package/dist/install-runtime.mjs +100 -17
- package/dist/lessons-cli.mjs +152 -8
- package/dist/obs-cli.mjs +149 -8
- package/dist/price-lookup.mjs +45 -23
- package/dist/prompt-submit.mjs +151 -15
- package/dist/refresh-model-prices.mjs +7190 -46
- package/dist/response-after.mjs +151 -15
- package/dist/run.mjs +151 -15
- package/dist/session-end.mjs +151 -15
- package/dist/session-start.mjs +151 -15
- package/dist/shim.mjs +7040 -16
- package/dist/stop.mjs +151 -15
- package/dist/subagent-start.mjs +151 -15
- package/dist/subagent-stop.mjs +151 -15
- package/dist/support.mjs +149 -8
- package/dist/tlc-cli.mjs +289 -89
- package/dist/tool-after.mjs +196 -38
- package/dist/tool-before.mjs +151 -15
- package/dist/tool-failure.mjs +151 -15
- package/dist/uninstall-runtime.mjs +9 -10
- package/docs/log.md +7 -0
- package/docs/measure.md +35 -31
- package/package.json +6 -5
- package/src/core/core.facade.ts +18 -0
- package/src/core/index.ts +3 -0
- package/src/core/pricing/pricing.freshness.ts +118 -0
- package/src/core/release/release.version.ts +147 -0
- package/src/core/shim/shim.precedence.ts +72 -0
- package/src/core/skill/skill.link.ts +92 -0
- package/src/entrypoints/shim.ts +49 -11
- package/src/platform/fs-atomic.ts +61 -23
- package/src/platform/links.ts +73 -0
- package/src/platform/paths.ts +27 -0
- package/src/platform/pricing.ts +139 -31
- package/src/providers/cursor/cursor.wiring.ts +11 -8
- package/tools/doctor.ts +127 -10
- package/tools/init-project.ts +34 -14
- package/tools/install-runtime.ts +89 -6
- package/tools/refresh-model-prices.ts +242 -75
- package/tools/uninstall-runtime.ts +23 -19
- package/CHANGELOG.md +0 -95
- package/bin/tlc-build +0 -80
- package/bin/tlc-exec +0 -10
- package/bin/tlc-exec.cmd +0 -4
- package/docs/decisions/ad-001.md +0 -32
- package/docs/decisions/ad-002.md +0 -51
- package/docs/decisions/ad-003.md +0 -30
- package/docs/decisions/ad-004.md +0 -37
- package/docs/decisions/ad-005.md +0 -36
- package/docs/decisions/ad-006.md +0 -49
- package/docs/decisions/ad-007.md +0 -36
- package/docs/decisions/ad-008.md +0 -54
- package/docs/decisions/ad-009.md +0 -61
- package/docs/decisions/ad-010.md +0 -45
- package/docs/decisions/ad-011.md +0 -59
- package/docs/decisions/ad-012.md +0 -71
- package/docs/decisions/ad-013.md +0 -87
- package/docs/decisions/ad-014.md +0 -56
- package/docs/decisions/ad-015.md +0 -33
- package/docs/decisions/ad-016.md +0 -98
- package/docs/decisions/ad-017.md +0 -65
- package/docs/decisions/ad-018.md +0 -77
- package/docs/decisions/ad-019.md +0 -75
- package/docs/decisions/ad-020.md +0 -88
- package/docs/decisions/ad-021.md +0 -57
- package/docs/decisions/ad-022.md +0 -120
- package/docs/decisions/ad-023.md +0 -87
- package/docs/decisions/ad-024.md +0 -85
- package/docs/decisions/ad-025.md +0 -92
- package/docs/decisions/ad-026.md +0 -131
- package/docs/decisions/ad-027.md +0 -90
- package/docs/decisions/ad-028.md +0 -90
- package/docs/decisions/ad-029.md +0 -73
- package/docs/decisions/ad-030.md +0 -97
- package/docs/decisions/ad-031.md +0 -94
- package/docs/decisions/ad-032.md +0 -83
- package/docs/decisions/ad-033.md +0 -89
- package/docs/decisions/ad-034.md +0 -86
- package/docs/decisions/ad-035.md +0 -86
- package/docs/decisions/ad-036.md +0 -68
- package/docs/decisions/ad-037.md +0 -47
- package/docs/decisions/ad-038.md +0 -52
- package/docs/decisions/ad-039.md +0 -69
- package/docs/decisions/ad-040.md +0 -89
- package/docs/decisions/ad-041.md +0 -98
- package/docs/decisions/ad-042.md +0 -82
- package/docs/decisions/ad-043.md +0 -79
- package/docs/decisions/ad-044.md +0 -61
- package/docs/decisions/ad-045.md +0 -94
- package/docs/decisions/ad-046.md +0 -111
- package/docs/decisions/ad-047.md +0 -96
- package/docs/decisions/ad-048.md +0 -85
- package/docs/decisions/ad-049.md +0 -66
- package/docs/decisions/ad-050.md +0 -94
- package/docs/decisions/ad-051.md +0 -69
- package/docs/decisions/ad-052.md +0 -69
- package/docs/decisions/ad-053.md +0 -78
- package/docs/decisions/ad-054.md +0 -98
- package/docs/decisions/ad-055.md +0 -74
- package/docs/decisions/ad-056.md +0 -85
- package/docs/decisions/ad-057.md +0 -68
- package/docs/decisions/ad-058.md +0 -97
- package/docs/decisions/ad-059.md +0 -82
- package/docs/decisions/ad-060.md +0 -75
- package/docs/decisions/ad-061.md +0 -68
- package/docs/decisions/ad-062.md +0 -72
- package/docs/decisions/ad-063.md +0 -84
- package/docs/decisions/ad-064.md +0 -79
- package/docs/decisions/ad-065.md +0 -81
- package/docs/decisions/ad-066.md +0 -111
- package/docs/decisions/ad-067.md +0 -64
- package/docs/decisions/ad-068.md +0 -79
- package/docs/decisions/ad-069.md +0 -74
- package/docs/decisions/ad-070.md +0 -86
- package/docs/decisions/ad-071.md +0 -93
- package/docs/decisions/ad-072.md +0 -82
- package/docs/decisions/ad-073.md +0 -102
- package/docs/decisions/ad-074.md +0 -91
- package/docs/decisions/ad-075.md +0 -79
- package/docs/decisions/ad-076.md +0 -102
- package/docs/decisions/ad-077.md +0 -94
- package/docs/decisions/ad-078.md +0 -84
- package/docs/decisions/ad-079.md +0 -73
- package/docs/decisions/ad-080.md +0 -86
- package/docs/decisions/ad-081.md +0 -70
- package/docs/decisions/ad-082.md +0 -79
- package/docs/decisions/ad-083.md +0 -88
- package/docs/decisions/index.md +0 -111
- package/model-aliases.json +0 -12
- package/model-prices.cursor.json +0 -410
- package/model-prices.json +0 -1
- package/tools/test-env.mjs +0 -28
- package/tools/test-env.names.d.mts +0 -1
- package/tools/test-env.names.mjs +0 -14
package/model-prices.cursor.json
DELETED
|
@@ -1,410 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"_meta": {
|
|
3
|
-
"source": "https://cursor.com/docs/models-and-pricing.md",
|
|
4
|
-
"refreshedAt": "2026-07-27T14:51:17.065Z"
|
|
5
|
-
},
|
|
6
|
-
"auto-cost": {
|
|
7
|
-
"displayName": "Auto Cost",
|
|
8
|
-
"provider": "Cursor",
|
|
9
|
-
"promptPer1M": 1.25,
|
|
10
|
-
"completionPer1M": 6,
|
|
11
|
-
"cacheWritePer1M": 1.25,
|
|
12
|
-
"cacheReadPer1M": 0.25,
|
|
13
|
-
"pool": "auto",
|
|
14
|
-
"billing": "metered"
|
|
15
|
-
},
|
|
16
|
-
"claude-4-sonnet": {
|
|
17
|
-
"displayName": "Claude 4 Sonnet",
|
|
18
|
-
"provider": "Anthropic",
|
|
19
|
-
"promptPer1M": 3,
|
|
20
|
-
"completionPer1M": 15,
|
|
21
|
-
"cacheWritePer1M": 3.75,
|
|
22
|
-
"cacheReadPer1M": 0.3,
|
|
23
|
-
"pool": "other_models",
|
|
24
|
-
"billing": "metered"
|
|
25
|
-
},
|
|
26
|
-
"claude-4-sonnet-1m": {
|
|
27
|
-
"displayName": "Claude 4 Sonnet 1M",
|
|
28
|
-
"provider": "Anthropic",
|
|
29
|
-
"promptPer1M": 6,
|
|
30
|
-
"completionPer1M": 22.5,
|
|
31
|
-
"cacheWritePer1M": 7.5,
|
|
32
|
-
"cacheReadPer1M": 0.6,
|
|
33
|
-
"pool": "other_models",
|
|
34
|
-
"billing": "metered"
|
|
35
|
-
},
|
|
36
|
-
"claude-4.5-haiku": {
|
|
37
|
-
"displayName": "Claude 4.5 Haiku",
|
|
38
|
-
"provider": "Anthropic",
|
|
39
|
-
"promptPer1M": 1,
|
|
40
|
-
"completionPer1M": 5,
|
|
41
|
-
"cacheWritePer1M": 1.25,
|
|
42
|
-
"cacheReadPer1M": 0.1,
|
|
43
|
-
"pool": "other_models",
|
|
44
|
-
"billing": "metered"
|
|
45
|
-
},
|
|
46
|
-
"claude-4.5-opus": {
|
|
47
|
-
"displayName": "Claude 4.5 Opus",
|
|
48
|
-
"provider": "Anthropic",
|
|
49
|
-
"promptPer1M": 5,
|
|
50
|
-
"completionPer1M": 25,
|
|
51
|
-
"cacheWritePer1M": 6.25,
|
|
52
|
-
"cacheReadPer1M": 0.5,
|
|
53
|
-
"pool": "other_models",
|
|
54
|
-
"billing": "metered"
|
|
55
|
-
},
|
|
56
|
-
"claude-4.5-sonnet": {
|
|
57
|
-
"displayName": "Claude 4.5 Sonnet",
|
|
58
|
-
"provider": "Anthropic",
|
|
59
|
-
"promptPer1M": 3,
|
|
60
|
-
"completionPer1M": 15,
|
|
61
|
-
"cacheWritePer1M": 3.75,
|
|
62
|
-
"cacheReadPer1M": 0.3,
|
|
63
|
-
"pool": "other_models",
|
|
64
|
-
"billing": "metered"
|
|
65
|
-
},
|
|
66
|
-
"claude-4.6-opus": {
|
|
67
|
-
"displayName": "Claude 4.6 Opus",
|
|
68
|
-
"provider": "Anthropic",
|
|
69
|
-
"promptPer1M": 5,
|
|
70
|
-
"completionPer1M": 25,
|
|
71
|
-
"cacheWritePer1M": 6.25,
|
|
72
|
-
"cacheReadPer1M": 0.5,
|
|
73
|
-
"pool": "other_models",
|
|
74
|
-
"billing": "metered"
|
|
75
|
-
},
|
|
76
|
-
"claude-4.6-sonnet": {
|
|
77
|
-
"displayName": "Claude 4.6 Sonnet",
|
|
78
|
-
"provider": "Anthropic",
|
|
79
|
-
"promptPer1M": 3,
|
|
80
|
-
"completionPer1M": 15,
|
|
81
|
-
"cacheWritePer1M": 3.75,
|
|
82
|
-
"cacheReadPer1M": 0.3,
|
|
83
|
-
"pool": "other_models",
|
|
84
|
-
"billing": "metered"
|
|
85
|
-
},
|
|
86
|
-
"claude-4.7-opus": {
|
|
87
|
-
"displayName": "Claude 4.7 Opus",
|
|
88
|
-
"provider": "Anthropic",
|
|
89
|
-
"promptPer1M": 5,
|
|
90
|
-
"completionPer1M": 25,
|
|
91
|
-
"cacheWritePer1M": 6.25,
|
|
92
|
-
"cacheReadPer1M": 0.5,
|
|
93
|
-
"pool": "other_models",
|
|
94
|
-
"billing": "metered"
|
|
95
|
-
},
|
|
96
|
-
"claude-fable-5": {
|
|
97
|
-
"displayName": "Claude Fable 5",
|
|
98
|
-
"provider": "Anthropic",
|
|
99
|
-
"promptPer1M": 10,
|
|
100
|
-
"completionPer1M": 50,
|
|
101
|
-
"cacheWritePer1M": 12.5,
|
|
102
|
-
"cacheReadPer1M": 1,
|
|
103
|
-
"pool": "other_models",
|
|
104
|
-
"billing": "metered"
|
|
105
|
-
},
|
|
106
|
-
"claude-opus-4.7": {
|
|
107
|
-
"displayName": "Claude Opus 4.7 (fast mode)",
|
|
108
|
-
"provider": "Anthropic",
|
|
109
|
-
"promptPer1M": 30,
|
|
110
|
-
"completionPer1M": 150,
|
|
111
|
-
"cacheWritePer1M": 37.5,
|
|
112
|
-
"cacheReadPer1M": 3,
|
|
113
|
-
"pool": "other_models",
|
|
114
|
-
"billing": "metered"
|
|
115
|
-
},
|
|
116
|
-
"claude-opus-4.8": {
|
|
117
|
-
"displayName": "Claude Opus 4.8",
|
|
118
|
-
"provider": "Anthropic",
|
|
119
|
-
"promptPer1M": 5,
|
|
120
|
-
"completionPer1M": 25,
|
|
121
|
-
"cacheWritePer1M": 6.25,
|
|
122
|
-
"cacheReadPer1M": 0.5,
|
|
123
|
-
"pool": "other_models",
|
|
124
|
-
"billing": "metered"
|
|
125
|
-
},
|
|
126
|
-
"claude-opus-5": {
|
|
127
|
-
"displayName": "Claude Opus 5",
|
|
128
|
-
"provider": "Anthropic",
|
|
129
|
-
"promptPer1M": 5,
|
|
130
|
-
"completionPer1M": 25,
|
|
131
|
-
"cacheWritePer1M": 6.25,
|
|
132
|
-
"cacheReadPer1M": 0.5,
|
|
133
|
-
"pool": "other_models",
|
|
134
|
-
"billing": "metered"
|
|
135
|
-
},
|
|
136
|
-
"claude-sonnet-5": {
|
|
137
|
-
"displayName": "Claude Sonnet 5",
|
|
138
|
-
"provider": "Anthropic",
|
|
139
|
-
"promptPer1M": 3,
|
|
140
|
-
"completionPer1M": 15,
|
|
141
|
-
"cacheWritePer1M": 3.75,
|
|
142
|
-
"cacheReadPer1M": 0.3,
|
|
143
|
-
"pool": "other_models",
|
|
144
|
-
"billing": "metered"
|
|
145
|
-
},
|
|
146
|
-
"composer-1": {
|
|
147
|
-
"displayName": "Composer 1",
|
|
148
|
-
"provider": "Cursor",
|
|
149
|
-
"promptPer1M": 1.25,
|
|
150
|
-
"completionPer1M": 10,
|
|
151
|
-
"cacheReadPer1M": 0.125,
|
|
152
|
-
"pool": "cursor_models",
|
|
153
|
-
"billing": "metered"
|
|
154
|
-
},
|
|
155
|
-
"composer-2.5": {
|
|
156
|
-
"displayName": "Composer 2.5",
|
|
157
|
-
"provider": "Cursor",
|
|
158
|
-
"promptPer1M": 0.5,
|
|
159
|
-
"completionPer1M": 2.5,
|
|
160
|
-
"cacheReadPer1M": 0.2,
|
|
161
|
-
"pool": "cursor_models",
|
|
162
|
-
"billing": "metered"
|
|
163
|
-
},
|
|
164
|
-
"gemini-2.5-flash": {
|
|
165
|
-
"displayName": "Gemini 2.5 Flash",
|
|
166
|
-
"provider": "Google",
|
|
167
|
-
"promptPer1M": 0.3,
|
|
168
|
-
"completionPer1M": 2.5,
|
|
169
|
-
"cacheReadPer1M": 0.03,
|
|
170
|
-
"pool": "other_models",
|
|
171
|
-
"billing": "metered"
|
|
172
|
-
},
|
|
173
|
-
"gemini-3-flash": {
|
|
174
|
-
"displayName": "Gemini 3 Flash",
|
|
175
|
-
"provider": "Google",
|
|
176
|
-
"promptPer1M": 0.5,
|
|
177
|
-
"completionPer1M": 3,
|
|
178
|
-
"cacheReadPer1M": 0.05,
|
|
179
|
-
"pool": "other_models",
|
|
180
|
-
"billing": "metered"
|
|
181
|
-
},
|
|
182
|
-
"gemini-3-pro": {
|
|
183
|
-
"displayName": "Gemini 3 Pro",
|
|
184
|
-
"provider": "Google",
|
|
185
|
-
"promptPer1M": 2,
|
|
186
|
-
"completionPer1M": 12,
|
|
187
|
-
"cacheReadPer1M": 0.2,
|
|
188
|
-
"pool": "other_models",
|
|
189
|
-
"billing": "metered"
|
|
190
|
-
},
|
|
191
|
-
"gemini-3-pro-image-preview": {
|
|
192
|
-
"displayName": "Gemini 3 Pro Image Preview",
|
|
193
|
-
"provider": "Google",
|
|
194
|
-
"promptPer1M": 2,
|
|
195
|
-
"completionPer1M": 12,
|
|
196
|
-
"cacheReadPer1M": 0.2,
|
|
197
|
-
"pool": "other_models",
|
|
198
|
-
"billing": "metered"
|
|
199
|
-
},
|
|
200
|
-
"gemini-3.1-pro": {
|
|
201
|
-
"displayName": "Gemini 3.1 Pro",
|
|
202
|
-
"provider": "Google",
|
|
203
|
-
"promptPer1M": 2,
|
|
204
|
-
"completionPer1M": 12,
|
|
205
|
-
"cacheReadPer1M": 0.2,
|
|
206
|
-
"pool": "other_models",
|
|
207
|
-
"billing": "metered"
|
|
208
|
-
},
|
|
209
|
-
"gemini-3.5-flash": {
|
|
210
|
-
"displayName": "Gemini 3.5 Flash",
|
|
211
|
-
"provider": "Google",
|
|
212
|
-
"promptPer1M": 1.5,
|
|
213
|
-
"completionPer1M": 9,
|
|
214
|
-
"cacheReadPer1M": 0.15,
|
|
215
|
-
"pool": "other_models",
|
|
216
|
-
"billing": "metered"
|
|
217
|
-
},
|
|
218
|
-
"gemini-3.6-flash": {
|
|
219
|
-
"displayName": "Gemini 3.6 Flash",
|
|
220
|
-
"provider": "Google",
|
|
221
|
-
"promptPer1M": 1.5,
|
|
222
|
-
"completionPer1M": 7.5,
|
|
223
|
-
"cacheReadPer1M": 0.15,
|
|
224
|
-
"pool": "other_models",
|
|
225
|
-
"billing": "metered"
|
|
226
|
-
},
|
|
227
|
-
"glm-5.2": {
|
|
228
|
-
"displayName": "GLM 5.2",
|
|
229
|
-
"provider": "Z.ai",
|
|
230
|
-
"promptPer1M": 1.4,
|
|
231
|
-
"completionPer1M": 4.4,
|
|
232
|
-
"cacheReadPer1M": 0.26,
|
|
233
|
-
"pool": "other_models",
|
|
234
|
-
"billing": "metered"
|
|
235
|
-
},
|
|
236
|
-
"gpt-5": {
|
|
237
|
-
"displayName": "GPT-5",
|
|
238
|
-
"provider": "OpenAI",
|
|
239
|
-
"promptPer1M": 1.25,
|
|
240
|
-
"completionPer1M": 10,
|
|
241
|
-
"cacheReadPer1M": 0.125,
|
|
242
|
-
"pool": "other_models",
|
|
243
|
-
"billing": "metered"
|
|
244
|
-
},
|
|
245
|
-
"gpt-5-fast": {
|
|
246
|
-
"displayName": "GPT-5 Fast",
|
|
247
|
-
"provider": "OpenAI",
|
|
248
|
-
"promptPer1M": 2.5,
|
|
249
|
-
"completionPer1M": 20,
|
|
250
|
-
"cacheReadPer1M": 0.25,
|
|
251
|
-
"pool": "other_models",
|
|
252
|
-
"billing": "metered"
|
|
253
|
-
},
|
|
254
|
-
"gpt-5-mini": {
|
|
255
|
-
"displayName": "GPT-5 Mini",
|
|
256
|
-
"provider": "OpenAI",
|
|
257
|
-
"promptPer1M": 0.25,
|
|
258
|
-
"completionPer1M": 2,
|
|
259
|
-
"cacheReadPer1M": 0.025,
|
|
260
|
-
"pool": "other_models",
|
|
261
|
-
"billing": "metered"
|
|
262
|
-
},
|
|
263
|
-
"gpt-5-codex": {
|
|
264
|
-
"displayName": "GPT-5-Codex",
|
|
265
|
-
"provider": "OpenAI",
|
|
266
|
-
"promptPer1M": 1.25,
|
|
267
|
-
"completionPer1M": 10,
|
|
268
|
-
"cacheReadPer1M": 0.125,
|
|
269
|
-
"pool": "other_models",
|
|
270
|
-
"billing": "metered"
|
|
271
|
-
},
|
|
272
|
-
"gpt-5.1-codex": {
|
|
273
|
-
"displayName": "GPT-5.1 Codex",
|
|
274
|
-
"provider": "OpenAI",
|
|
275
|
-
"promptPer1M": 1.25,
|
|
276
|
-
"completionPer1M": 10,
|
|
277
|
-
"cacheReadPer1M": 0.125,
|
|
278
|
-
"pool": "other_models",
|
|
279
|
-
"billing": "metered"
|
|
280
|
-
},
|
|
281
|
-
"gpt-5.1-codex-max": {
|
|
282
|
-
"displayName": "GPT-5.1 Codex Max",
|
|
283
|
-
"provider": "OpenAI",
|
|
284
|
-
"promptPer1M": 1.25,
|
|
285
|
-
"completionPer1M": 10,
|
|
286
|
-
"cacheReadPer1M": 0.125,
|
|
287
|
-
"pool": "other_models",
|
|
288
|
-
"billing": "metered"
|
|
289
|
-
},
|
|
290
|
-
"gpt-5.1-codex-mini": {
|
|
291
|
-
"displayName": "GPT-5.1 Codex Mini",
|
|
292
|
-
"provider": "OpenAI",
|
|
293
|
-
"promptPer1M": 0.25,
|
|
294
|
-
"completionPer1M": 2,
|
|
295
|
-
"cacheReadPer1M": 0.025,
|
|
296
|
-
"pool": "other_models",
|
|
297
|
-
"billing": "metered"
|
|
298
|
-
},
|
|
299
|
-
"gpt-5.2": {
|
|
300
|
-
"displayName": "GPT-5.2",
|
|
301
|
-
"provider": "OpenAI",
|
|
302
|
-
"promptPer1M": 1.75,
|
|
303
|
-
"completionPer1M": 14,
|
|
304
|
-
"cacheReadPer1M": 0.175,
|
|
305
|
-
"pool": "other_models",
|
|
306
|
-
"billing": "metered"
|
|
307
|
-
},
|
|
308
|
-
"gpt-5.2-codex": {
|
|
309
|
-
"displayName": "GPT-5.2 Codex",
|
|
310
|
-
"provider": "OpenAI",
|
|
311
|
-
"promptPer1M": 1.75,
|
|
312
|
-
"completionPer1M": 14,
|
|
313
|
-
"cacheReadPer1M": 0.175,
|
|
314
|
-
"pool": "other_models",
|
|
315
|
-
"billing": "metered"
|
|
316
|
-
},
|
|
317
|
-
"gpt-5.3-codex": {
|
|
318
|
-
"displayName": "GPT-5.3 Codex",
|
|
319
|
-
"provider": "OpenAI",
|
|
320
|
-
"promptPer1M": 1.75,
|
|
321
|
-
"completionPer1M": 14,
|
|
322
|
-
"cacheReadPer1M": 0.175,
|
|
323
|
-
"pool": "other_models",
|
|
324
|
-
"billing": "metered"
|
|
325
|
-
},
|
|
326
|
-
"gpt-5.4": {
|
|
327
|
-
"displayName": "GPT-5.4",
|
|
328
|
-
"provider": "OpenAI",
|
|
329
|
-
"promptPer1M": 2.5,
|
|
330
|
-
"completionPer1M": 15,
|
|
331
|
-
"cacheReadPer1M": 0.25,
|
|
332
|
-
"pool": "other_models",
|
|
333
|
-
"billing": "metered"
|
|
334
|
-
},
|
|
335
|
-
"gpt-5.4-mini": {
|
|
336
|
-
"displayName": "GPT-5.4 Mini",
|
|
337
|
-
"provider": "OpenAI",
|
|
338
|
-
"promptPer1M": 0.75,
|
|
339
|
-
"completionPer1M": 4.5,
|
|
340
|
-
"cacheReadPer1M": 0.075,
|
|
341
|
-
"pool": "other_models",
|
|
342
|
-
"billing": "metered"
|
|
343
|
-
},
|
|
344
|
-
"gpt-5.4-nano": {
|
|
345
|
-
"displayName": "GPT-5.4 Nano",
|
|
346
|
-
"provider": "OpenAI",
|
|
347
|
-
"promptPer1M": 0.2,
|
|
348
|
-
"completionPer1M": 1.25,
|
|
349
|
-
"cacheReadPer1M": 0.02,
|
|
350
|
-
"pool": "other_models",
|
|
351
|
-
"billing": "metered"
|
|
352
|
-
},
|
|
353
|
-
"gpt-5.5": {
|
|
354
|
-
"displayName": "GPT-5.5",
|
|
355
|
-
"provider": "OpenAI",
|
|
356
|
-
"promptPer1M": 5,
|
|
357
|
-
"completionPer1M": 30,
|
|
358
|
-
"cacheReadPer1M": 0.5,
|
|
359
|
-
"pool": "other_models",
|
|
360
|
-
"billing": "metered"
|
|
361
|
-
},
|
|
362
|
-
"gpt-5.6-luna": {
|
|
363
|
-
"displayName": "GPT-5.6 Luna",
|
|
364
|
-
"provider": "OpenAI",
|
|
365
|
-
"promptPer1M": 1,
|
|
366
|
-
"completionPer1M": 6,
|
|
367
|
-
"cacheWritePer1M": 1.25,
|
|
368
|
-
"cacheReadPer1M": 0.1,
|
|
369
|
-
"pool": "other_models",
|
|
370
|
-
"billing": "metered"
|
|
371
|
-
},
|
|
372
|
-
"gpt-5.6-sol": {
|
|
373
|
-
"displayName": "GPT-5.6 Sol",
|
|
374
|
-
"provider": "OpenAI",
|
|
375
|
-
"promptPer1M": 5,
|
|
376
|
-
"completionPer1M": 30,
|
|
377
|
-
"cacheWritePer1M": 6.25,
|
|
378
|
-
"cacheReadPer1M": 0.5,
|
|
379
|
-
"pool": "other_models",
|
|
380
|
-
"billing": "metered"
|
|
381
|
-
},
|
|
382
|
-
"gpt-5.6-terra": {
|
|
383
|
-
"displayName": "GPT-5.6 Terra",
|
|
384
|
-
"provider": "OpenAI",
|
|
385
|
-
"promptPer1M": 2.5,
|
|
386
|
-
"completionPer1M": 15,
|
|
387
|
-
"cacheWritePer1M": 3.125,
|
|
388
|
-
"cacheReadPer1M": 0.25,
|
|
389
|
-
"pool": "other_models",
|
|
390
|
-
"billing": "metered"
|
|
391
|
-
},
|
|
392
|
-
"grok-4.5": {
|
|
393
|
-
"displayName": "Grok 4.5",
|
|
394
|
-
"provider": "Cursor",
|
|
395
|
-
"promptPer1M": 2,
|
|
396
|
-
"completionPer1M": 6,
|
|
397
|
-
"cacheReadPer1M": 0.5,
|
|
398
|
-
"pool": "cursor_models",
|
|
399
|
-
"billing": "metered"
|
|
400
|
-
},
|
|
401
|
-
"kimi-k2.7-code": {
|
|
402
|
-
"displayName": "Kimi K2.7 Code",
|
|
403
|
-
"provider": "Moonshot",
|
|
404
|
-
"promptPer1M": 0.95,
|
|
405
|
-
"completionPer1M": 4,
|
|
406
|
-
"cacheReadPer1M": 0.19,
|
|
407
|
-
"pool": "other_models",
|
|
408
|
-
"billing": "metered"
|
|
409
|
-
}
|
|
410
|
-
}
|
package/model-prices.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{}
|
package/tools/test-env.mjs
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Loaded with `node --import` before every test file, so the suite answers from its own fixtures instead of
|
|
3
|
-
* from the shell that happened to start it.
|
|
4
|
-
*
|
|
5
|
-
* hazard: `projectDirFor` prefers `CLAUDE_PROJECT_DIR` over the payload's `cwd`, which is correct in
|
|
6
|
-
* production — the env var is the project root and `cwd` can be a subdirectory. Inside a Claude Code hook that
|
|
7
|
-
* variable is always set, so 22 tests that build a fixture in a temp directory silently read policy and state
|
|
8
|
-
* from the real repository instead. The suite passed from a shell and failed from inside a hook.
|
|
9
|
-
*/
|
|
10
|
-
import { mkdtempSync } from "node:fs";
|
|
11
|
-
import { tmpdir } from "node:os";
|
|
12
|
-
import { join } from "node:path";
|
|
13
|
-
import { PROJECT_SCOPED_ENV } from "./test-env.names.mjs";
|
|
14
|
-
|
|
15
|
-
for (const name of PROJECT_SCOPED_ENV) {
|
|
16
|
-
delete process.env[name];
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* hazard: `TLC_HOME` was left alone on the reasoning that it names which runtime and CI sets it deliberately. That
|
|
21
|
-
* held only while nothing machine-wide lived under it. The global lesson tier does, so a test calling `allLessons`
|
|
22
|
-
* without pinning the home read whichever lessons the developer happened to have promoted — green on a fresh
|
|
23
|
-
* machine, green in CI, red on mine the moment I promoted five ([/decisions/ad-042.md](/decisions/ad-042.md)).
|
|
24
|
-
*
|
|
25
|
-
* invariant: hermetic by default, opt in by assignment. A test that wants a runtime home sets one; a test that
|
|
26
|
-
* forgets gets an empty directory rather than a person's machine.
|
|
27
|
-
*/
|
|
28
|
-
process.env.TLC_HOME = mkdtempSync(join(tmpdir(), "tlc-test-home-"));
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export const PROJECT_SCOPED_ENV: string[];
|
package/tools/test-env.names.mjs
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The names only, with no side effect, so a test can read them without performing the cleanup it is checking.
|
|
3
|
-
*
|
|
4
|
-
* hazard: this list lived in `test-env.mjs` next to the `delete` loop, and the guard test imported it from
|
|
5
|
-
* there. Importing that module runs the loop, so the guard cleaned the very environment it was asserting about
|
|
6
|
-
* and could never fail. Data and effect are separate for that reason.
|
|
7
|
-
*
|
|
8
|
-
* invariant: only variables that name WHICH project. `TLC_HOME` names which runtime, is set deliberately by
|
|
9
|
-
* CI, and is part of what the suite exercises.
|
|
10
|
-
*/
|
|
11
|
-
// hazard: `CURSOR_PROJECT_DIR` was absent while `cursor.inbound.ts` prefers it over the payload's workspace
|
|
12
|
-
// root — the same hole this list exists to close, for the other provider. A suite launched from inside a Cursor
|
|
13
|
-
// hook would have read the real repository exactly as the Claude case did.
|
|
14
|
-
export const PROJECT_SCOPED_ENV = ["CLAUDE_PROJECT_DIR", "CURSOR_PROJECT_DIR", "TLC_PROJECT_DIR"];
|