substrate-setup 0.1.0__py3-none-any.whl

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.
@@ -0,0 +1,301 @@
1
+ {
2
+ "object": "list",
3
+ "data": [
4
+ {
5
+ "id": "claude-opus-4-7",
6
+ "object": "model",
7
+ "created": 1776297600,
8
+ "owned_by": "anthropic",
9
+ "display_name": "Claude Opus 4.7",
10
+ "description": "Anthropic flagship (most capable, agentic coding)",
11
+ "context_length": 200000,
12
+ "max_completion_tokens": 32000,
13
+ "pricing": {
14
+ "input_per_million_usd": 5.0,
15
+ "output_per_million_usd": 25.0
16
+ },
17
+ "capabilities": {
18
+ "tools": true,
19
+ "vision": true,
20
+ "caching": true,
21
+ "json_mode": true,
22
+ "reasoning_effort_modes": []
23
+ }
24
+ },
25
+ {
26
+ "id": "claude-sonnet-4-6",
27
+ "object": "model",
28
+ "created": 1771372800,
29
+ "owned_by": "anthropic",
30
+ "display_name": "Claude Sonnet 4.6",
31
+ "description": "Balanced quality and speed",
32
+ "context_length": 200000,
33
+ "max_completion_tokens": 32000,
34
+ "pricing": {
35
+ "input_per_million_usd": 3.0,
36
+ "output_per_million_usd": 15.0
37
+ },
38
+ "capabilities": {
39
+ "tools": true,
40
+ "vision": true,
41
+ "caching": true,
42
+ "json_mode": true,
43
+ "reasoning_effort_modes": [
44
+ "low",
45
+ "medium",
46
+ "high"
47
+ ]
48
+ }
49
+ },
50
+ {
51
+ "id": "claude-haiku-4-5",
52
+ "object": "model",
53
+ "created": 1771372800,
54
+ "owned_by": "anthropic",
55
+ "display_name": "Claude Haiku 4.5",
56
+ "description": "Fastest Anthropic, cheapest input",
57
+ "context_length": 200000,
58
+ "max_completion_tokens": 8192,
59
+ "pricing": {
60
+ "input_per_million_usd": 1.0,
61
+ "output_per_million_usd": 5.0
62
+ },
63
+ "capabilities": {
64
+ "tools": true,
65
+ "vision": true,
66
+ "caching": true,
67
+ "json_mode": true,
68
+ "reasoning_effort_modes": [
69
+ "low",
70
+ "medium",
71
+ "high"
72
+ ]
73
+ }
74
+ },
75
+ {
76
+ "id": "gpt-5.5",
77
+ "object": "model",
78
+ "created": 1776988800,
79
+ "owned_by": "openai",
80
+ "display_name": "GPT-5.5",
81
+ "description": "OpenAI flagship (released 2026-04-24)",
82
+ "context_length": 1000000,
83
+ "max_completion_tokens": 128000,
84
+ "pricing": {
85
+ "input_per_million_usd": 5.0,
86
+ "output_per_million_usd": 30.0
87
+ },
88
+ "capabilities": {
89
+ "tools": true,
90
+ "vision": true,
91
+ "caching": true,
92
+ "json_mode": true,
93
+ "reasoning_effort_modes": [
94
+ "low",
95
+ "medium",
96
+ "high"
97
+ ]
98
+ }
99
+ },
100
+ {
101
+ "id": "gpt-5.4-mini",
102
+ "object": "model",
103
+ "created": 1772582400,
104
+ "owned_by": "openai",
105
+ "display_name": "GPT-5.4 mini",
106
+ "description": "Faster, cheaper than 5.5",
107
+ "context_length": 400000,
108
+ "max_completion_tokens": 128000,
109
+ "pricing": {
110
+ "input_per_million_usd": 0.75,
111
+ "output_per_million_usd": 4.5
112
+ },
113
+ "capabilities": {
114
+ "tools": true,
115
+ "vision": true,
116
+ "caching": true,
117
+ "json_mode": true,
118
+ "reasoning_effort_modes": [
119
+ "low",
120
+ "medium",
121
+ "high"
122
+ ]
123
+ }
124
+ },
125
+ {
126
+ "id": "gpt-5.4-nano",
127
+ "object": "model",
128
+ "created": 1772582400,
129
+ "owned_by": "openai",
130
+ "display_name": "GPT-5.4 nano",
131
+ "description": "Smallest GPT-5.4, cheapest",
132
+ "context_length": 400000,
133
+ "max_completion_tokens": 128000,
134
+ "pricing": {
135
+ "input_per_million_usd": 0.2,
136
+ "output_per_million_usd": 1.25
137
+ },
138
+ "capabilities": {
139
+ "tools": true,
140
+ "vision": false,
141
+ "caching": true,
142
+ "json_mode": true,
143
+ "reasoning_effort_modes": [
144
+ "low",
145
+ "medium",
146
+ "high"
147
+ ]
148
+ }
149
+ },
150
+ {
151
+ "id": "gemini-3.1-pro-preview",
152
+ "object": "model",
153
+ "created": 1775606400,
154
+ "owned_by": "google",
155
+ "display_name": "Gemini 3.1 Pro",
156
+ "description": "Google flagship, 2M-token context",
157
+ "context_length": 2000000,
158
+ "max_completion_tokens": 65536,
159
+ "pricing": {
160
+ "input_per_million_usd": 4.0,
161
+ "output_per_million_usd": 18.0
162
+ },
163
+ "capabilities": {
164
+ "tools": true,
165
+ "vision": true,
166
+ "caching": true,
167
+ "json_mode": true,
168
+ "reasoning_effort_modes": [
169
+ "low",
170
+ "medium",
171
+ "high"
172
+ ]
173
+ }
174
+ },
175
+ {
176
+ "id": "gemini-2.5-flash",
177
+ "object": "model",
178
+ "created": 1759190400,
179
+ "owned_by": "google",
180
+ "display_name": "Gemini 2.5 Flash",
181
+ "description": "Cheaper Gemini, free tier eligible",
182
+ "context_length": 1000000,
183
+ "max_completion_tokens": 65536,
184
+ "pricing": {
185
+ "input_per_million_usd": 0.3,
186
+ "output_per_million_usd": 2.5
187
+ },
188
+ "capabilities": {
189
+ "tools": true,
190
+ "vision": true,
191
+ "caching": true,
192
+ "json_mode": true,
193
+ "reasoning_effort_modes": [
194
+ "low",
195
+ "medium",
196
+ "high"
197
+ ]
198
+ }
199
+ },
200
+ {
201
+ "id": "deepseek-v4-pro",
202
+ "object": "model",
203
+ "created": 1776988800,
204
+ "owned_by": "deepseek",
205
+ "display_name": "DeepSeek V4 Pro",
206
+ "description": "DeepSeek flagship (75% launch discount through 2026-05-31)",
207
+ "context_length": 1048576,
208
+ "max_completion_tokens": 384000,
209
+ "pricing": {
210
+ "input_per_million_usd": 0.435,
211
+ "output_per_million_usd": 0.87
212
+ },
213
+ "capabilities": {
214
+ "tools": true,
215
+ "vision": false,
216
+ "caching": true,
217
+ "json_mode": true,
218
+ "reasoning_effort_modes": [
219
+ "low",
220
+ "medium",
221
+ "high"
222
+ ]
223
+ }
224
+ },
225
+ {
226
+ "id": "deepseek-v4-flash",
227
+ "object": "model",
228
+ "created": 1776988800,
229
+ "owned_by": "deepseek",
230
+ "display_name": "DeepSeek V4 Flash",
231
+ "description": "Cheapest, 1M-token context",
232
+ "context_length": 1048576,
233
+ "max_completion_tokens": 384000,
234
+ "pricing": {
235
+ "input_per_million_usd": 0.14,
236
+ "output_per_million_usd": 0.28
237
+ },
238
+ "capabilities": {
239
+ "tools": true,
240
+ "vision": false,
241
+ "caching": true,
242
+ "json_mode": true,
243
+ "reasoning_effort_modes": [
244
+ "low",
245
+ "medium",
246
+ "high"
247
+ ]
248
+ }
249
+ },
250
+ {
251
+ "id": "kimi-k2.6",
252
+ "object": "model",
253
+ "created": 1776643200,
254
+ "owned_by": "moonshot",
255
+ "display_name": "Kimi K2.6",
256
+ "description": "Chinese-first, strong on long-horizon agent tasks",
257
+ "context_length": 32768,
258
+ "max_completion_tokens": 32768,
259
+ "pricing": {
260
+ "input_per_million_usd": 0.74,
261
+ "output_per_million_usd": 3.5
262
+ },
263
+ "capabilities": {
264
+ "tools": true,
265
+ "vision": false,
266
+ "caching": false,
267
+ "json_mode": true,
268
+ "reasoning_effort_modes": [
269
+ "low",
270
+ "medium",
271
+ "high"
272
+ ]
273
+ }
274
+ },
275
+ {
276
+ "id": "kimi-k2.5",
277
+ "object": "model",
278
+ "created": 1770854400,
279
+ "owned_by": "moonshot",
280
+ "display_name": "Kimi K2.5",
281
+ "description": "Prior-gen Kimi, still supported",
282
+ "context_length": 262144,
283
+ "max_completion_tokens": 262144,
284
+ "pricing": {
285
+ "input_per_million_usd": 0.4,
286
+ "output_per_million_usd": 1.98
287
+ },
288
+ "capabilities": {
289
+ "tools": true,
290
+ "vision": false,
291
+ "caching": false,
292
+ "json_mode": true,
293
+ "reasoning_effort_modes": [
294
+ "low",
295
+ "medium",
296
+ "high"
297
+ ]
298
+ }
299
+ }
300
+ ]
301
+ }
@@ -0,0 +1,27 @@
1
+ """Sentinel marker for substrate-setup-owned config entries.
2
+
3
+ Marker discipline: every entry the script writes carries
4
+ ``{_substrate_managed: True}``. Re-runs / verify / remove use this to
5
+ identify Substrate-owned entries without disturbing user-authored ones.
6
+ """
7
+ from __future__ import annotations
8
+
9
+ from typing import Any
10
+
11
+ MARKER_KEY = "_substrate_managed"
12
+ MARKER_VALUE = True
13
+
14
+
15
+ def mark(entry: dict[str, Any]) -> dict[str, Any]:
16
+ """Return a new dict equal to ``entry`` plus the marker."""
17
+ return {**entry, MARKER_KEY: MARKER_VALUE}
18
+
19
+
20
+ def unmark(entry: dict[str, Any]) -> dict[str, Any]:
21
+ """Return a new dict equal to ``entry`` minus the marker."""
22
+ return {k: v for k, v in entry.items() if k != MARKER_KEY}
23
+
24
+
25
+ def is_substrate_managed(entry: dict[str, Any]) -> bool:
26
+ """True iff the entry was written by substrate-setup."""
27
+ return entry.get(MARKER_KEY) is MARKER_VALUE
@@ -0,0 +1,27 @@
1
+ Metadata-Version: 2.4
2
+ Name: substrate-setup
3
+ Version: 0.1.0
4
+ Summary: One-shot local configurator for coding agents against a Substrate gateway
5
+ Author: Substrate Solutions
6
+ License: MIT
7
+ Requires-Python: >=3.12
8
+ Requires-Dist: httpx>=0.27
9
+ Requires-Dist: ruamel-yaml>=0.18
10
+ Provides-Extra: dev
11
+ Requires-Dist: mypy<2,>=1.13; extra == 'dev'
12
+ Requires-Dist: pytest-httpx>=0.30; extra == 'dev'
13
+ Requires-Dist: pytest>=8.0; extra == 'dev'
14
+ Requires-Dist: ruff<1,>=0.7; extra == 'dev'
15
+ Description-Content-Type: text/markdown
16
+
17
+ # substrate-setup
18
+
19
+ One-shot configurator that points local coding agents at a Substrate gateway.
20
+
21
+ ```bash
22
+ pip install substrate-setup
23
+ export SUBSTRATE_API_KEY="sk-substrate-..." # or be prompted
24
+ python -m substrate_setup
25
+ ```
26
+
27
+ Run `python -m substrate_setup --help` for subcommands (`configure`, `verify`, `remove`).
@@ -0,0 +1,18 @@
1
+ substrate_setup/__init__.py,sha256=m2oBf6fSO2SKv9y2RKaTZYAgN5XyOY_WWyYqPLOZoqg,189
2
+ substrate_setup/__main__.py,sha256=CQFHu-XSoFVPTVt0_EX3yPDzEOqZWLLNOrLmoR5TWNE,156
3
+ substrate_setup/backup.py,sha256=T1-Es1HKKRQr4F4fvczJLOOELYDI2ZfBxJ8bro0cy9A,1031
4
+ substrate_setup/catalog.py,sha256=IyS0n9kDRvWpxuwJ8S4_TGtCZxKCqisAoJH0HflMlqk,3456
5
+ substrate_setup/cli.py,sha256=RYpO0gRsi6fy5IK20nUmZUZ2ssCQPQqiPkS-POppAbE,7102
6
+ substrate_setup/credentials.py,sha256=bGp93KDsPv3mRkzzJDAXD_vS0Ub7Mh-QdAqOv5eIW4c,2937
7
+ substrate_setup/markers.py,sha256=evZOLgpdNGOGwqfzSsmeI2q3AB-Hb_T_YNptiGDJ090,922
8
+ substrate_setup/agents/__init__.py,sha256=egIS1y2jYWvgB9b6Oa3VCrO4955cAlc4vpqwzM4H2HU,615
9
+ substrate_setup/agents/aider.py,sha256=B9RnGDEc-nJHULsw4yhr858hVstSizTEd-JwQgZ4r80,8665
10
+ substrate_setup/agents/base.py,sha256=sgmNMaKI9nkxgH14ZD1CXSYscjOfgVJNp8p9ca7PoRo,1632
11
+ substrate_setup/agents/continue_dev.py,sha256=jrH_emcgnp3XZz__VE3n2tBX9gwg82pMko0AWi2bO44,6285
12
+ substrate_setup/agents/cursor.py,sha256=FnDugscoSFa3dK0fepn3t0XjBHje1fNnAzkXTVBH2Js,3222
13
+ substrate_setup/agents/hermes.py,sha256=YZ9pS2WKNBuMfDCmzOMGs1joAsxGYBFXGcvTUY43Gmo,8943
14
+ substrate_setup/data/fallback_catalog.json,sha256=UeHBXxHlYPkPo_CtBZpoSOVevMZO2aY8VtiGKOb6jUs,7879
15
+ substrate_setup-0.1.0.dist-info/METADATA,sha256=i3ftOcTuU6H22aSKFDD6KTp_ZByUZ3pojyr_S7UWAeU,827
16
+ substrate_setup-0.1.0.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
17
+ substrate_setup-0.1.0.dist-info/entry_points.txt,sha256=JNFEbEH-QEfA8KyGEZCg13iV1-cIQ3ERefNP0UbcWJ4,61
18
+ substrate_setup-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.29.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ substrate-setup = substrate_setup.cli:main