agentshim 0.15.2__tar.gz → 0.15.4__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 (112) hide show
  1. {agentshim-0.15.2 → agentshim-0.15.4}/CHANGELOG.md +19 -0
  2. {agentshim-0.15.2 → agentshim-0.15.4}/PKG-INFO +1 -1
  3. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/__init__.py +3 -2
  4. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/core/profile.py +9 -1
  5. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/__init__.py +10 -0
  6. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/claude/provider.py +1 -0
  7. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/codex/provider.py +1 -0
  8. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/copilot/provider.py +3 -0
  9. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/gemini/provider.py +1 -0
  10. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/opencode/provider.py +1 -0
  11. {agentshim-0.15.2 → agentshim-0.15.4}/pyproject.toml +1 -1
  12. {agentshim-0.15.2 → agentshim-0.15.4}/.gitignore +0 -0
  13. {agentshim-0.15.2 → agentshim-0.15.4}/LICENSE +0 -0
  14. {agentshim-0.15.2 → agentshim-0.15.4}/README.md +0 -0
  15. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/agent.py +0 -0
  16. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/core/__init__.py +0 -0
  17. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/core/_files.py +0 -0
  18. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/core/checkpoints.py +0 -0
  19. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/core/clock.py +0 -0
  20. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/core/conversation.py +0 -0
  21. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/core/env.py +0 -0
  22. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/core/errors.py +0 -0
  23. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/core/events.py +0 -0
  24. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/core/home.py +0 -0
  25. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/core/ids.py +0 -0
  26. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/core/mcp.py +0 -0
  27. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/core/permissions.py +0 -0
  28. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/core/pricing.py +0 -0
  29. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/core/provider.py +0 -0
  30. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/core/schema.py +0 -0
  31. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/core/session_policy.py +0 -0
  32. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/core/skills.py +0 -0
  33. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/core/status.py +0 -0
  34. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/core/stream.py +0 -0
  35. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/core/turn.py +0 -0
  36. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/core/usage.py +0 -0
  37. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/execution/__init__.py +0 -0
  38. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/execution/confinement.py +0 -0
  39. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/execution/docker.py +0 -0
  40. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/execution/executor.py +0 -0
  41. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/execution/host.py +0 -0
  42. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/execution/process.py +0 -0
  43. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/execution/transform.py +0 -0
  44. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/oneshot.py +0 -0
  45. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/probe.py +0 -0
  46. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/claude/__init__.py +0 -0
  47. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/claude/events.py +0 -0
  48. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/claude/failures.py +0 -0
  49. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/claude/hooks/__init__.py +0 -0
  50. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/claude/hooks/confine_reads.py +0 -0
  51. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/claude/parser.py +0 -0
  52. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/claude/probe.py +0 -0
  53. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/claude/rate_limits.py +0 -0
  54. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/claude/sandbox.py +0 -0
  55. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/claude/scripted.py +0 -0
  56. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/claude/stream_argv.py +0 -0
  57. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/claude/stream_transport.py +0 -0
  58. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/claude/user_hooks.py +0 -0
  59. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/codex/__init__.py +0 -0
  60. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/codex/_toml.py +0 -0
  61. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/codex/app_server/__init__.py +0 -0
  62. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/codex/app_server/_wire.py +0 -0
  63. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/codex/app_server/approvals.py +0 -0
  64. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/codex/app_server/channel.py +0 -0
  65. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/codex/app_server/errors.py +0 -0
  66. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/codex/app_server/items.py +0 -0
  67. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/codex/app_server/mcp.py +0 -0
  68. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/codex/app_server/permissions.py +0 -0
  69. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/codex/app_server/profile.py +0 -0
  70. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/codex/app_server/protocol.py +0 -0
  71. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/codex/app_server/rate_limits.py +0 -0
  72. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/codex/app_server/transport.py +0 -0
  73. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/codex/app_server/usage.py +0 -0
  74. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/codex/events.py +0 -0
  75. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/codex/failures.py +0 -0
  76. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/codex/mcp_scope.py +0 -0
  77. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/codex/parser.py +0 -0
  78. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/codex/probe.py +0 -0
  79. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/codex/rules.py +0 -0
  80. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/codex/sandbox.py +0 -0
  81. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/codex/scripted.py +0 -0
  82. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/codex/skills.py +0 -0
  83. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/copilot/__init__.py +0 -0
  84. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/copilot/events.py +0 -0
  85. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/copilot/parser.py +0 -0
  86. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/copilot/probe.py +0 -0
  87. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/copilot/scripted.py +0 -0
  88. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/gemini/__init__.py +0 -0
  89. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/gemini/events.py +0 -0
  90. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/gemini/parser.py +0 -0
  91. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/gemini/probe.py +0 -0
  92. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/gemini/scripted.py +0 -0
  93. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/opencode/__init__.py +0 -0
  94. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/opencode/events.py +0 -0
  95. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/opencode/parser.py +0 -0
  96. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/opencode/probe.py +0 -0
  97. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/providers/opencode/scripted.py +0 -0
  98. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/py.typed +0 -0
  99. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/runtime.py +0 -0
  100. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/session.py +0 -0
  101. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/testing/__init__.py +0 -0
  102. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/testing/claude_stream.py +0 -0
  103. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/testing/clock.py +0 -0
  104. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/testing/codex_app_server.py +0 -0
  105. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/testing/confinement.py +0 -0
  106. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/testing/contracts.py +0 -0
  107. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/testing/conversation.py +0 -0
  108. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/testing/probe.py +0 -0
  109. {agentshim-0.15.2 → agentshim-0.15.4}/agentshim/testing/process.py +0 -0
  110. {agentshim-0.15.2 → agentshim-0.15.4}/tests/fixtures/claude_stream/README.md +0 -0
  111. {agentshim-0.15.2 → agentshim-0.15.4}/tests/fixtures/codex/README.md +0 -0
  112. {agentshim-0.15.2 → agentshim-0.15.4}/tests/fixtures/codex_app_server/README.md +0 -0
@@ -1,5 +1,24 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.15.4 (2026-10-09)
4
+
5
+ ### Added
6
+
7
+ - `stream_provider_names()`: the providers that have a long-lived transport
8
+ (today `claude` and `codex`), so a caller picks `TransportKind.STREAM` from
9
+ the registry instead of naming providers.
10
+
11
+ ## 0.15.3 (2026-10-09)
12
+
13
+ ### Added
14
+
15
+ - `ProviderProfile.credential_files` (default empty): the subset of `auth_files`
16
+ that holds refreshable login credentials, as opposed to settings. A caller that
17
+ lends a login to another process shares these files writable so a token
18
+ refresh there reaches the original login. Claude `.claude/.credentials.json`,
19
+ Codex `.codex/auth.json`, Gemini `.gemini/oauth_creds.json`, opencode
20
+ `.local/share/opencode/auth.json`, Copilot `.copilot/config.json`.
21
+
3
22
  ## 0.15.2 (2026-10-09)
4
23
 
5
24
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: agentshim
3
- Version: 0.15.2
3
+ Version: 0.15.4
4
4
  Summary: Provider-agnostic coding-agent CLI shims
5
5
  License-Expression: MIT
6
6
  License-File: LICENSE
@@ -146,7 +146,7 @@ from .execution import (
146
146
  )
147
147
  from .oneshot import OneShotTransport
148
148
  from .probe import probe_provider
149
- from .providers import get_provider, provider_names
149
+ from .providers import get_provider, provider_names, stream_provider_names
150
150
  from .providers.claude import ClaudeHook, ClaudeProvider, ClaudeStreamTransport, SandboxConfig
151
151
  from .providers.codex import CodexProvider, CodexSandboxConfig
152
152
  from .providers.codex.app_server import CodexAppServerTransport
@@ -156,7 +156,7 @@ from .providers.opencode import OpencodeProvider
156
156
  from .runtime import Agent
157
157
  from .session import Session, Turn, TurnTicket, map_mcp_servers
158
158
 
159
- __version__ = "0.15.2"
159
+ __version__ = "0.15.4"
160
160
 
161
161
  __all__ = [
162
162
  "Agent",
@@ -314,4 +314,5 @@ __all__ = [
314
314
  "price_for",
315
315
  "probe_provider",
316
316
  "provider_names",
317
+ "stream_provider_names",
317
318
  ]
@@ -152,7 +152,9 @@ class ProviderProfile:
152
152
  ``state_root_env`` is the documented variable that relocates
153
153
  ``state_dirs[0]``, or ``None`` when the CLI names none. ``auth_files`` are
154
154
  the home-relative paths, each inside a ``state_dirs`` entry, whose
155
- contents are the minimal set to copy so the CLI is logged in elsewhere.
155
+ contents are the minimal set to copy so the CLI is logged in elsewhere;
156
+ ``credential_files`` (0.15.3+, default empty) is the subset of them that
157
+ holds refreshable login credentials rather than settings.
156
158
  ``mcp_config_file`` is the workspace-relative path a ``CONFIG_FILE``
157
159
  provider writes its MCP config to for a turn, and ``None`` for
158
160
  ``CLI_FLAGS``/``NONE`` providers.
@@ -174,6 +176,12 @@ class ProviderProfile:
174
176
  container_env: Mapping[str, str] = field(default_factory=_no_container_env)
175
177
  state_root_env: str | None = None
176
178
  auth_files: tuple[str, ...] = ()
179
+ #: The subset of ``auth_files`` that holds login credentials (OAuth tokens
180
+ #: the CLI itself refreshes and rewrites), as opposed to settings. A caller
181
+ #: that lends a login to another process shares exactly these files
182
+ #: writable so a token refresh there is not lost, and keeps the rest of
183
+ #: ``auth_files`` read-only. Every entry is also in ``auth_files``.
184
+ credential_files: tuple[str, ...] = ()
177
185
  mcp_config_file: str | None = None
178
186
  #: Whether the stream lists the skills offered (``SkillsDiscovered``).
179
187
  skill_discovery: SkillSignal = SkillSignal.NONE
@@ -175,6 +175,15 @@ def provider_names() -> list[str]:
175
175
  return sorted(_FACTORIES)
176
176
 
177
177
 
178
+ def stream_provider_names() -> list[str]:
179
+ """Return the providers that have a long-lived transport, sorted.
180
+
181
+ These accept ``Agent(name, transport=TransportKind.STREAM)``; every other
182
+ provider in ``provider_names()`` is reached only one process per turn.
183
+ """
184
+ return sorted(_STREAM_TRANSPORTS)
185
+
186
+
178
187
  def get_provider(name: str) -> Provider:
179
188
  """Construct the provider registered under *name* with its defaults."""
180
189
  factory = _FACTORIES.get(name)
@@ -260,4 +269,5 @@ __all__ = [
260
269
  "get_scripted_lines",
261
270
  "get_stream_transport",
262
271
  "provider_names",
272
+ "stream_provider_names",
263
273
  ]
@@ -102,6 +102,7 @@ PROFILE = ProviderProfile(
102
102
  ".claude/settings.local.json",
103
103
  ".claude.json",
104
104
  ),
105
+ credential_files=(".claude/.credentials.json",),
105
106
  mcp_config_file=MCP_CONFIG_FILENAME,
106
107
  )
107
108
 
@@ -101,6 +101,7 @@ PROFILE = ProviderProfile(
101
101
  # policy and preferences, so consumers that copy or mount auth state must
102
102
  # not needlessly expose it to an agent process.
103
103
  auth_files=(".codex/auth.json",),
104
+ credential_files=(".codex/auth.json",),
104
105
  # CLI_FLAGS: Codex takes MCP servers as --config overrides, never a file.
105
106
  mcp_config_file=None,
106
107
  # A long Codex thread slows down and costs more per turn, so a session
@@ -58,6 +58,9 @@ PROFILE = ProviderProfile(
58
58
  # install held only ``versions.json``, which is not credential-bearing,
59
59
  # so it is left out.
60
60
  auth_files=(".copilot/config.json", ".copilot/settings.json"),
61
+ # config.json carries the logged-in users and, without a keychain, the
62
+ # tokens; the CLI rewrites it in place on login and refresh.
63
+ credential_files=(".copilot/config.json",),
61
64
  # CLI_FLAGS: Copilot takes MCP servers as one --additional-mcp-config
62
65
  # flag, never a file.
63
66
  mcp_config_file=None,
@@ -80,6 +80,7 @@ PROFILE = ProviderProfile(
80
80
  ".gemini/settings.json",
81
81
  ".gemini/.env",
82
82
  ),
83
+ credential_files=(".gemini/oauth_creds.json",),
83
84
  mcp_config_file=MCP_CONFIG_FILENAME,
84
85
  )
85
86
 
@@ -81,6 +81,7 @@ PROFILE = ProviderProfile(
81
81
  ".config/opencode/config.jsonc",
82
82
  ".config/opencode/.env",
83
83
  ),
84
+ credential_files=(".local/share/opencode/auth.json",),
84
85
  mcp_config_file=MCP_CONFIG_FILENAME,
85
86
  )
86
87
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "agentshim"
3
- version = "0.15.2"
3
+ version = "0.15.4"
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