agentshim 0.18.3__tar.gz → 0.19.0__tar.gz

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 (114) hide show
  1. {agentshim-0.18.3 → agentshim-0.19.0}/CHANGELOG.md +12 -0
  2. {agentshim-0.18.3 → agentshim-0.19.0}/PKG-INFO +1 -1
  3. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/__init__.py +1 -1
  4. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/core/models.py +88 -26
  5. {agentshim-0.18.3 → agentshim-0.19.0}/pyproject.toml +1 -1
  6. {agentshim-0.18.3 → agentshim-0.19.0}/.gitignore +0 -0
  7. {agentshim-0.18.3 → agentshim-0.19.0}/LICENSE +0 -0
  8. {agentshim-0.18.3 → agentshim-0.19.0}/README.md +0 -0
  9. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/agent.py +0 -0
  10. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/core/__init__.py +0 -0
  11. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/core/_files.py +0 -0
  12. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/core/auth.py +0 -0
  13. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/core/checkpoints.py +0 -0
  14. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/core/clock.py +0 -0
  15. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/core/conversation.py +0 -0
  16. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/core/env.py +0 -0
  17. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/core/errors.py +0 -0
  18. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/core/events.py +0 -0
  19. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/core/home.py +0 -0
  20. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/core/ids.py +0 -0
  21. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/core/mcp.py +0 -0
  22. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/core/permissions.py +0 -0
  23. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/core/pricing.py +0 -0
  24. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/core/profile.py +0 -0
  25. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/core/provider.py +0 -0
  26. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/core/schema.py +0 -0
  27. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/core/session_policy.py +0 -0
  28. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/core/skills.py +0 -0
  29. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/core/status.py +0 -0
  30. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/core/stream.py +0 -0
  31. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/core/turn.py +0 -0
  32. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/core/usage.py +0 -0
  33. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/execution/__init__.py +0 -0
  34. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/execution/confinement.py +0 -0
  35. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/execution/docker.py +0 -0
  36. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/execution/executor.py +0 -0
  37. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/execution/host.py +0 -0
  38. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/execution/process.py +0 -0
  39. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/execution/transform.py +0 -0
  40. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/oneshot.py +0 -0
  41. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/probe.py +0 -0
  42. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/__init__.py +0 -0
  43. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/claude/__init__.py +0 -0
  44. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/claude/events.py +0 -0
  45. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/claude/failures.py +0 -0
  46. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/claude/hooks/__init__.py +0 -0
  47. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/claude/hooks/confine_reads.py +0 -0
  48. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/claude/parser.py +0 -0
  49. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/claude/probe.py +0 -0
  50. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/claude/provider.py +0 -0
  51. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/claude/rate_limits.py +0 -0
  52. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/claude/sandbox.py +0 -0
  53. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/claude/scripted.py +0 -0
  54. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/claude/stream_argv.py +0 -0
  55. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/claude/stream_transport.py +0 -0
  56. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/claude/user_hooks.py +0 -0
  57. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/codex/__init__.py +0 -0
  58. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/codex/_toml.py +0 -0
  59. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/codex/app_server/__init__.py +0 -0
  60. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/codex/app_server/_wire.py +0 -0
  61. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/codex/app_server/approvals.py +0 -0
  62. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/codex/app_server/channel.py +0 -0
  63. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/codex/app_server/errors.py +0 -0
  64. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/codex/app_server/items.py +0 -0
  65. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/codex/app_server/mcp.py +0 -0
  66. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/codex/app_server/permissions.py +0 -0
  67. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/codex/app_server/profile.py +0 -0
  68. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/codex/app_server/protocol.py +0 -0
  69. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/codex/app_server/rate_limits.py +0 -0
  70. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/codex/app_server/transport.py +0 -0
  71. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/codex/app_server/usage.py +0 -0
  72. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/codex/events.py +0 -0
  73. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/codex/failures.py +0 -0
  74. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/codex/mcp_scope.py +0 -0
  75. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/codex/parser.py +0 -0
  76. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/codex/probe.py +0 -0
  77. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/codex/provider.py +0 -0
  78. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/codex/rules.py +0 -0
  79. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/codex/sandbox.py +0 -0
  80. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/codex/scripted.py +0 -0
  81. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/codex/skills.py +0 -0
  82. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/copilot/__init__.py +0 -0
  83. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/copilot/events.py +0 -0
  84. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/copilot/parser.py +0 -0
  85. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/copilot/probe.py +0 -0
  86. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/copilot/provider.py +0 -0
  87. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/copilot/scripted.py +0 -0
  88. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/gemini/__init__.py +0 -0
  89. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/gemini/events.py +0 -0
  90. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/gemini/parser.py +0 -0
  91. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/gemini/probe.py +0 -0
  92. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/gemini/provider.py +0 -0
  93. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/gemini/scripted.py +0 -0
  94. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/opencode/__init__.py +0 -0
  95. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/opencode/events.py +0 -0
  96. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/opencode/parser.py +0 -0
  97. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/opencode/probe.py +0 -0
  98. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/opencode/provider.py +0 -0
  99. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/providers/opencode/scripted.py +0 -0
  100. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/py.typed +0 -0
  101. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/runtime.py +0 -0
  102. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/session.py +0 -0
  103. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/testing/__init__.py +0 -0
  104. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/testing/claude_stream.py +0 -0
  105. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/testing/clock.py +0 -0
  106. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/testing/codex_app_server.py +0 -0
  107. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/testing/confinement.py +0 -0
  108. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/testing/contracts.py +0 -0
  109. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/testing/conversation.py +0 -0
  110. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/testing/probe.py +0 -0
  111. {agentshim-0.18.3 → agentshim-0.19.0}/agentshim/testing/process.py +0 -0
  112. {agentshim-0.18.3 → agentshim-0.19.0}/tests/fixtures/claude_stream/README.md +0 -0
  113. {agentshim-0.18.3 → agentshim-0.19.0}/tests/fixtures/codex/README.md +0 -0
  114. {agentshim-0.18.3 → agentshim-0.19.0}/tests/fixtures/codex_app_server/README.md +0 -0
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.19.0 (2026-10-17)
4
+
5
+ ### Added
6
+
7
+ - `ModelSpec` carries what a model picker needs: `display_name` (`"Opus 5.5"`), `family`
8
+ (`"Claude"`, `"GPT"`, `"Gemini"`), and a within-family ladder, `tier` (a rank, `1` the
9
+ smallest) with `tier_name` (`"Opus"`). Haiku < Sonnet < Opus < Fable; Luna < Terra < Sol <
10
+ Astra. All four fields default to `None`, so a caller-built `ModelSpec` keeps working;
11
+ every shipped entry has a name and family, and every one but `gpt-5.5` a tier.
12
+ Read them with `model_spec(provider, model)`. A provider's readable name was already
13
+ `ProviderProfile.display_name`.
14
+
3
15
  ## 0.18.3 (2026-10-16)
4
16
 
5
17
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: agentshim
3
- Version: 0.18.3
3
+ Version: 0.19.0
4
4
  Summary: Provider-agnostic coding-agent CLI shims
5
5
  License-Expression: MIT
6
6
  License-File: LICENSE
@@ -176,7 +176,7 @@ from .providers.opencode import OpencodeProvider
176
176
  from .runtime import Agent
177
177
  from .session import Session, Turn, TurnTicket, map_mcp_servers
178
178
 
179
- __version__ = "0.18.3"
179
+ __version__ = "0.19.0"
180
180
 
181
181
  __all__ = [
182
182
  "Agent",
@@ -60,6 +60,15 @@ class ModelSpec:
60
60
  output together), at the vendor's default for that id.
61
61
  source: URL of the official page the number was read from.
62
62
  checked: Date the number was last checked against ``source``.
63
+ display_name: A readable name for the model (``"Opus 5.5"``), or
64
+ ``None`` for a caller-built entry that has none.
65
+ family: The model line the model belongs to (``"Claude"``, ``"GPT"``,
66
+ ``"Gemini"``); set together with ``display_name``.
67
+ tier: The model's rank within its family, ``1`` the smallest and
68
+ cheapest; versions of one tier share a rank. ``None`` for a model
69
+ that sits on no tier ladder.
70
+ tier_name: The tier's readable name (``"Opus"``); set together with
71
+ ``tier``.
63
72
  """
64
73
 
65
74
  vendor: str
@@ -67,6 +76,10 @@ class ModelSpec:
67
76
  context_window: int
68
77
  source: str
69
78
  checked: dt.date
79
+ display_name: str | None = None
80
+ family: str | None = None
81
+ tier: int | None = None
82
+ tier_name: str | None = None
70
83
 
71
84
  def __post_init__(self) -> None:
72
85
  """Reject a missing name, source or date, and a window that is not a positive int."""
@@ -87,6 +100,26 @@ class ModelSpec:
87
100
  if isinstance(window, bool) or not isinstance(window, int) or window <= 0:
88
101
  msg = f"{self.vendor}/{self.model}: context_window must be a positive int"
89
102
  raise ValueError(msg)
103
+ self._check_presentation()
104
+
105
+ def _check_presentation(self) -> None:
106
+ """Reject a half-set name pair or tier pair, and a tier that is not a positive int."""
107
+ for first, second in (("display_name", "family"), ("tier", "tier_name")):
108
+ if (getattr(self, first) is None) != (getattr(self, second) is None):
109
+ msg = f"{self.vendor}/{self.model}: {first} and {second} are set together"
110
+ raise ValueError(msg)
111
+ for name in ("display_name", "family", "tier_name"):
112
+ value: object = getattr(self, name)
113
+ if value is not None and (not isinstance(value, str) or not value.strip()):
114
+ msg = f"{self.vendor}/{self.model}: {name} must be a non-empty string"
115
+ raise ValueError(msg)
116
+ tier = cast("object", self.tier)
117
+ if tier is not None and (isinstance(tier, bool) or not isinstance(tier, int) or tier < 1):
118
+ msg = f"{self.vendor}/{self.model}: tier must be a positive int"
119
+ raise ValueError(msg)
120
+ if self.tier is not None and self.family is None:
121
+ msg = f"{self.vendor}/{self.model}: tier needs a family"
122
+ raise ValueError(msg)
90
123
 
91
124
  @property
92
125
  def key(self) -> tuple[str, str]:
@@ -197,10 +230,15 @@ def default_models() -> ModelTable:
197
230
  return DEFAULT_MODELS
198
231
 
199
232
 
200
- _CHECKED = dt.date(2026, 10, 16)
233
+ _CHECKED = dt.date(2026, 10, 17)
201
234
 
202
235
 
203
- def _openai(model: str, context_window: int) -> ModelSpec:
236
+ def _openai(
237
+ model: str,
238
+ context_window: int,
239
+ display_name: str,
240
+ tier: tuple[int, str] | None = None,
241
+ ) -> ModelSpec:
204
242
  # Each model's page under OPENAI_MODELS_URL ("<n> context window").
205
243
  return ModelSpec(
206
244
  vendor="openai",
@@ -208,10 +246,14 @@ def _openai(model: str, context_window: int) -> ModelSpec:
208
246
  context_window=context_window,
209
247
  source=f"{OPENAI_MODELS_URL}/{model}",
210
248
  checked=_CHECKED,
249
+ display_name=display_name,
250
+ family="GPT",
251
+ tier=None if tier is None else tier[0],
252
+ tier_name=None if tier is None else tier[1],
211
253
  )
212
254
 
213
255
 
214
- def _anthropic(model: str, context_window: int) -> ModelSpec:
256
+ def _anthropic(model: str, context_window: int, tier: tuple[int, str], version: str) -> ModelSpec:
215
257
  # "Context window sizes by model": the 1M models list 1M as the default
216
258
  # with no beta header; "other Claude models ... have a 200k-token" window.
217
259
  return ModelSpec(
@@ -220,10 +262,14 @@ def _anthropic(model: str, context_window: int) -> ModelSpec:
220
262
  context_window=context_window,
221
263
  source=ANTHROPIC_CONTEXT_WINDOWS_URL,
222
264
  checked=_CHECKED,
265
+ display_name=f"{tier[1]} {version}",
266
+ family="Claude",
267
+ tier=tier[0],
268
+ tier_name=tier[1],
223
269
  )
224
270
 
225
271
 
226
- def _google(model: str, context_window: int) -> ModelSpec:
272
+ def _google(model: str, context_window: int, display_name: str, tier: tuple[int, str]) -> ModelSpec:
227
273
  # Each model's page under GOOGLE_MODELS_URL ("Input token limit"), which
228
274
  # is the window Google publishes for the model.
229
275
  return ModelSpec(
@@ -232,9 +278,25 @@ def _google(model: str, context_window: int) -> ModelSpec:
232
278
  context_window=context_window,
233
279
  source=f"{GOOGLE_MODELS_URL}/{model}",
234
280
  checked=_CHECKED,
281
+ display_name=display_name,
282
+ family="Gemini",
283
+ tier=tier[0],
284
+ tier_name=tier[1],
235
285
  )
236
286
 
237
287
 
288
+ # Tier ladders, smallest and cheapest first. Anthropic ranks its lines
289
+ # Haiku < Sonnet < Opus < Fable; Codex's GPT lines Luna < Terra < Sol < Astra.
290
+ _HAIKU = (1, "Haiku")
291
+ _SONNET = (2, "Sonnet")
292
+ _OPUS = (3, "Opus")
293
+ _FABLE = (4, "Fable")
294
+ _LUNA = (1, "Luna")
295
+ _TERRA = (2, "Terra")
296
+ _SOL = (3, "Sol")
297
+ _ASTRA = (4, "Astra")
298
+ _PRO = (1, "Pro")
299
+
238
300
  _ONE_MILLION = 1_000_000
239
301
  _GOOGLE_1M = 1_048_576
240
302
  _OPENAI_1_05M = 1_050_000
@@ -242,32 +304,32 @@ _OPENAI_1_05M = 1_050_000
242
304
  #: The table agentshim ships. Update it as described in ``docs/models.md``.
243
305
  #: A model whose window could not be read from its vendor's page is left out.
244
306
  DEFAULT_MODELS = ModelTable(
245
- version="2026-10-16.1",
307
+ version="2026-10-17.1",
246
308
  last_updated=_CHECKED,
247
309
  entries=(
248
310
  # OpenAI (Codex): each model page reads "1,050,000 context window".
249
- _openai("gpt-6-astra", _OPENAI_1_05M),
250
- _openai("gpt-6.1-sol", _OPENAI_1_05M),
251
- _openai("gpt-6-sol", _OPENAI_1_05M),
252
- _openai("gpt-6-luna", _OPENAI_1_05M),
253
- _openai("gpt-5.6-sol", _OPENAI_1_05M),
254
- _openai("gpt-5.6-terra", _OPENAI_1_05M),
255
- _openai("gpt-5.6-luna", _OPENAI_1_05M),
256
- _openai("gpt-5.5", _OPENAI_1_05M),
311
+ _openai("gpt-6-astra", _OPENAI_1_05M, "GPT-6 Astra", _ASTRA),
312
+ _openai("gpt-6.1-sol", _OPENAI_1_05M, "GPT-6.1 Sol", _SOL),
313
+ _openai("gpt-6-sol", _OPENAI_1_05M, "GPT-6 Sol", _SOL),
314
+ _openai("gpt-6-luna", _OPENAI_1_05M, "GPT-6 Luna", _LUNA),
315
+ _openai("gpt-5.6-sol", _OPENAI_1_05M, "GPT-5.6 Sol", _SOL),
316
+ _openai("gpt-5.6-terra", _OPENAI_1_05M, "GPT-5.6 Terra", _TERRA),
317
+ _openai("gpt-5.6-luna", _OPENAI_1_05M, "GPT-5.6 Luna", _LUNA),
318
+ _openai("gpt-5.5", _OPENAI_1_05M, "GPT-5.5"),
257
319
  # Anthropic (Claude).
258
- _anthropic("claude-fable-5-1", _ONE_MILLION),
259
- _anthropic("claude-fable-5", _ONE_MILLION),
260
- _anthropic("claude-opus-5-5", _ONE_MILLION),
261
- _anthropic("claude-opus-5", _ONE_MILLION),
262
- _anthropic("claude-opus-4-8", _ONE_MILLION),
263
- _anthropic("claude-opus-4-7", _ONE_MILLION),
264
- _anthropic("claude-opus-4-6", _ONE_MILLION),
265
- _anthropic("claude-sonnet-5-5", _ONE_MILLION),
266
- _anthropic("claude-sonnet-5", _ONE_MILLION),
267
- _anthropic("claude-sonnet-4-6", _ONE_MILLION),
268
- _anthropic("claude-haiku-5-5", _ONE_MILLION),
269
- _anthropic("claude-haiku-4-5", 200_000),
320
+ _anthropic("claude-fable-5-1", _ONE_MILLION, _FABLE, "5.1"),
321
+ _anthropic("claude-fable-5", _ONE_MILLION, _FABLE, "5"),
322
+ _anthropic("claude-opus-5-5", _ONE_MILLION, _OPUS, "5.5"),
323
+ _anthropic("claude-opus-5", _ONE_MILLION, _OPUS, "5"),
324
+ _anthropic("claude-opus-4-8", _ONE_MILLION, _OPUS, "4.8"),
325
+ _anthropic("claude-opus-4-7", _ONE_MILLION, _OPUS, "4.7"),
326
+ _anthropic("claude-opus-4-6", _ONE_MILLION, _OPUS, "4.6"),
327
+ _anthropic("claude-sonnet-5-5", _ONE_MILLION, _SONNET, "5.5"),
328
+ _anthropic("claude-sonnet-5", _ONE_MILLION, _SONNET, "5"),
329
+ _anthropic("claude-sonnet-4-6", _ONE_MILLION, _SONNET, "4.6"),
330
+ _anthropic("claude-haiku-5-5", _ONE_MILLION, _HAIKU, "5.5"),
331
+ _anthropic("claude-haiku-4-5", 200_000, _HAIKU, "4.5"),
270
332
  # Google (opencode): the page reads "Input token limit 1,048,576".
271
- _google("gemini-3-pro-preview", _GOOGLE_1M),
333
+ _google("gemini-3-pro-preview", _GOOGLE_1M, "Gemini 3 Pro Preview", _PRO),
272
334
  ),
273
335
  )
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "agentshim"
3
- version = "0.18.3"
3
+ version = "0.19.0"
4
4
  description = "Provider-agnostic coding-agent CLI shims"
5
5
  readme = "README.md"
6
6
  license = "MIT"
File without changes
File without changes
File without changes