sf-m3 0.2.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.
Files changed (113) hide show
  1. m3/__init__.py +373 -0
  2. m3/_agent_selection.py +636 -0
  3. m3/_check_recording.py +525 -0
  4. m3/_default_store.py +109 -0
  5. m3/_exports.py +761 -0
  6. m3/_mrtr.py +228 -0
  7. m3/_test_runs.py +267 -0
  8. m3/_types/__init__.py +1 -0
  9. m3/_types/agent_identity.py +98 -0
  10. m3/_types/base.py +513 -0
  11. m3/_types/evals.py +155 -0
  12. m3/_types/events.py +333 -0
  13. m3/_types/results.py +298 -0
  14. m3/_types/specs.py +642 -0
  15. m3/_types/state.py +181 -0
  16. m3/agent_session.py +2576 -0
  17. m3/aggregations.py +774 -0
  18. m3/async_api.py +1701 -0
  19. m3/configuration.py +349 -0
  20. m3/direct_client.py +1552 -0
  21. m3/direct_trace.py +711 -0
  22. m3/domain/__init__.py +0 -0
  23. m3/domain/validation.py +119 -0
  24. m3/elicitation.py +730 -0
  25. m3/errors.py +166 -0
  26. m3/evaluations.py +740 -0
  27. m3/events.py +265 -0
  28. m3/execution_runtime.py +1691 -0
  29. m3/execution_trace.py +914 -0
  30. m3/feedback.py +2354 -0
  31. m3/fixtures/acp_agent.py +374 -0
  32. m3/fixtures/echo_http.py +110 -0
  33. m3/fixtures/echo_server.py +45 -0
  34. m3/fixtures/structured_cli.py +24 -0
  35. m3/harness/__init__.py +197 -0
  36. m3/harness/_rpc_native.py +642 -0
  37. m3/harness/acp.py +2868 -0
  38. m3/harness/characterize.py +157 -0
  39. m3/harness/claude.py +1413 -0
  40. m3/harness/cli.py +118 -0
  41. m3/harness/codex.py +813 -0
  42. m3/harness/contracts.py +790 -0
  43. m3/harness/fakes.py +106 -0
  44. m3/harness/group_launcher.py +24 -0
  45. m3/harness/manifest.py +146 -0
  46. m3/harness/native.py +598 -0
  47. m3/harness/observation_sink.py +406 -0
  48. m3/harness/observations.py +381 -0
  49. m3/harness/opencode.py +1932 -0
  50. m3/harness/pi.py +1146 -0
  51. m3/harness/pi_control.py +700 -0
  52. m3/harness/pi_extension/__init__.py +1 -0
  53. m3/harness/pi_extension/bridge.py +1266 -0
  54. m3/harness/pi_extension/extension.ts +523 -0
  55. m3/harness/process_group.py +136 -0
  56. m3/interaction_handlers.py +841 -0
  57. m3/judges.py +657 -0
  58. m3/managed_input_api.py +149 -0
  59. m3/managed_runtime.py +682 -0
  60. m3/matchers.py +1529 -0
  61. m3/matrix.py +939 -0
  62. m3/observability.py +1059 -0
  63. m3/policy.py +269 -0
  64. m3/py.typed +0 -0
  65. m3/pytest_plugin.py +1591 -0
  66. m3/runtime/__init__.py +28 -0
  67. m3/runtime/core.py +1446 -0
  68. m3/runtime/recipes.py +68 -0
  69. m3/schemas/m3.event.v0.2.schema.json +514 -0
  70. m3/schemas/m3.harness.v1.schema.json +20 -0
  71. m3/server_group.py +678 -0
  72. m3/services/__init__.py +51 -0
  73. m3/services/acp_probes.py +467 -0
  74. m3/services/persistent.py +189 -0
  75. m3/services/probes.py +1027 -0
  76. m3/services/profiles.py +336 -0
  77. m3/snapshots.py +202 -0
  78. m3/storage/__init__.py +105 -0
  79. m3/storage/blobs.py +358 -0
  80. m3/storage/ephemeral.py +1819 -0
  81. m3/storage/evidence.py +222 -0
  82. m3/storage/managed_input.py +1219 -0
  83. m3/storage/serialization.py +325 -0
  84. m3/storage/sqlite.py +5082 -0
  85. m3/suites.py +31 -0
  86. m3/sync_api.py +2065 -0
  87. m3/testing.py +2019 -0
  88. m3/testing_property.py +443 -0
  89. m3/testing_wire.py +228 -0
  90. m3/trace/__init__.py +6 -0
  91. m3/trace/acp.py +868 -0
  92. m3/trace/builder.py +5 -0
  93. m3/trace/capture.py +100 -0
  94. m3/trace/claude.py +758 -0
  95. m3/trace/counts.py +134 -0
  96. m3/trace/model_steps.py +159 -0
  97. m3/trace/normalized.py +644 -0
  98. m3/trace/projector.py +3347 -0
  99. m3/trace/redaction.py +810 -0
  100. m3/transport/__init__.py +12 -0
  101. m3/transport/_http_pinning.py +324 -0
  102. m3/transport/capture_proxy.py +605 -0
  103. m3/transport/direct.py +799 -0
  104. m3/transport/http_proxy.py +546 -0
  105. m3/transport/local.py +600 -0
  106. m3/transport/stdio_proxy.py +326 -0
  107. m3/transport/tool_policy.py +196 -0
  108. m3/types.py +344 -0
  109. m3/workspace.py +603 -0
  110. sf_m3-0.2.0.dist-info/METADATA +178 -0
  111. sf_m3-0.2.0.dist-info/RECORD +113 -0
  112. sf_m3-0.2.0.dist-info/WHEEL +4 -0
  113. sf_m3-0.2.0.dist-info/licenses/LICENSE +197 -0
m3/__init__.py ADDED
@@ -0,0 +1,373 @@
1
+ """M3 public value and type boundary.
2
+
3
+ Importing this module loads only standard-library metadata, Pydantic value
4
+ models, and protocol/type declarations. It does not initialize application
5
+ settings, databases, transports, workers, or event loops.
6
+ """
7
+
8
+ from importlib.metadata import version as _distribution_version
9
+
10
+ from . import types as _types_module
11
+ from .aggregations import (
12
+ EvaluationGroup as EvaluationGroup,
13
+ )
14
+ from .aggregations import (
15
+ EvaluationQuery as EvaluationQuery,
16
+ )
17
+ from .aggregations import (
18
+ EvaluationReport as EvaluationReport,
19
+ )
20
+ from .aggregations import (
21
+ EvaluationStats as EvaluationStats,
22
+ )
23
+ from .aggregations import (
24
+ HealthStats as HealthStats,
25
+ )
26
+ from .aggregations import (
27
+ LatencyStats as LatencyStats,
28
+ )
29
+ from .aggregations import (
30
+ ToolCallStats as ToolCallStats,
31
+ )
32
+ from .elicitation import (
33
+ ElicitationPlan as ElicitationPlan,
34
+ )
35
+ from .elicitation import (
36
+ ElicitationResponse as ElicitationResponse,
37
+ )
38
+ from .elicitation import (
39
+ FormElicitationRequest as FormElicitationRequest,
40
+ )
41
+ from .elicitation import (
42
+ PendingElicitationRound as PendingElicitationRound,
43
+ )
44
+ from .elicitation import (
45
+ UrlElicitationRequest as UrlElicitationRequest,
46
+ )
47
+ from .elicitation import (
48
+ expect_form as expect_form,
49
+ )
50
+ from .elicitation import (
51
+ expect_url as expect_url,
52
+ )
53
+ from .elicitation import (
54
+ maybe_form as maybe_form,
55
+ )
56
+ from .elicitation import (
57
+ maybe_url as maybe_url,
58
+ )
59
+ from .elicitation import (
60
+ one_of as one_of,
61
+ )
62
+ from .elicitation import (
63
+ optional as optional,
64
+ )
65
+ from .elicitation import (
66
+ round_of as round_of,
67
+ )
68
+ from .elicitation import (
69
+ sequence as sequence,
70
+ )
71
+ from .errors import (
72
+ CleanupError as CleanupError,
73
+ )
74
+ from .errors import (
75
+ ElicitationExpectationError as ElicitationExpectationError,
76
+ )
77
+ from .errors import (
78
+ ElicitationRoundLimitError as ElicitationRoundLimitError,
79
+ )
80
+ from .errors import (
81
+ ExecutionNotFound as ExecutionNotFound,
82
+ )
83
+ from .errors import (
84
+ InvalidTransitionError as InvalidTransitionError,
85
+ )
86
+ from .errors import (
87
+ KitClosed as KitClosed,
88
+ )
89
+ from .errors import (
90
+ MCPError as MCPError,
91
+ )
92
+ from .errors import (
93
+ ModelValidationError as ModelValidationError,
94
+ )
95
+ from .errors import (
96
+ OperationCancelled as OperationCancelled,
97
+ )
98
+ from .errors import (
99
+ OperationTimeout as OperationTimeout,
100
+ )
101
+ from .errors import (
102
+ ProtocolError as ProtocolError,
103
+ )
104
+ from .errors import (
105
+ RawEvidenceIntegrityError as RawEvidenceIntegrityError,
106
+ )
107
+ from .errors import (
108
+ RawEvidenceUnavailable as RawEvidenceUnavailable,
109
+ )
110
+ from .errors import (
111
+ SessionBusy as SessionBusy,
112
+ )
113
+ from .errors import (
114
+ SessionStillOpen as SessionStillOpen,
115
+ )
116
+ from .errors import (
117
+ TraceNotFinalized as TraceNotFinalized,
118
+ )
119
+ from .errors import (
120
+ TraceUnavailable as TraceUnavailable,
121
+ )
122
+ from .errors import (
123
+ TransportError as TransportError,
124
+ )
125
+ from .errors import (
126
+ UnsupportedFeature as UnsupportedFeature,
127
+ )
128
+ from .evaluations import (
129
+ AsyncEvaluator as AsyncEvaluator,
130
+ )
131
+ from .evaluations import (
132
+ EvaluationDecision as EvaluationDecision,
133
+ )
134
+ from .evaluations import (
135
+ EvaluationRunner as EvaluationRunner,
136
+ )
137
+ from .evaluations import (
138
+ EvaluationStore as EvaluationStore,
139
+ )
140
+ from .evaluations import (
141
+ EvaluationVerdict as EvaluationVerdict,
142
+ )
143
+ from .evaluations import (
144
+ Evaluator as Evaluator,
145
+ )
146
+ from .evaluations import (
147
+ EvaluatorCallable as EvaluatorCallable,
148
+ )
149
+ from .evaluations import (
150
+ EvaluatorRegistration as EvaluatorRegistration,
151
+ )
152
+ from .evaluations import (
153
+ EvaluatorRegistry as EvaluatorRegistry,
154
+ )
155
+ from .evaluations import (
156
+ InMemoryEvaluationStore as InMemoryEvaluationStore,
157
+ )
158
+ from .evaluations import (
159
+ RequiredEvaluationError as RequiredEvaluationError,
160
+ )
161
+ from .feedback import (
162
+ Comparison as Comparison,
163
+ )
164
+ from .feedback import (
165
+ Feedback as Feedback,
166
+ )
167
+ from .feedback import (
168
+ build_feedback as build_feedback,
169
+ )
170
+ from .feedback import (
171
+ export_feedback as export_feedback,
172
+ )
173
+ from .interaction_handlers import (
174
+ AllowedCommands as AllowedCommands,
175
+ )
176
+ from .interaction_handlers import (
177
+ FilesystemHandler as FilesystemHandler,
178
+ )
179
+ from .interaction_handlers import (
180
+ FilesystemRequest as FilesystemRequest,
181
+ )
182
+ from .interaction_handlers import (
183
+ FilesystemResult as FilesystemResult,
184
+ )
185
+ from .interaction_handlers import (
186
+ InteractionHandlers as InteractionHandlers,
187
+ )
188
+ from .interaction_handlers import (
189
+ InteractionReceipt as InteractionReceipt,
190
+ )
191
+ from .interaction_handlers import (
192
+ Interactions as Interactions,
193
+ )
194
+ from .interaction_handlers import (
195
+ PermissionHandler as PermissionHandler,
196
+ )
197
+ from .interaction_handlers import (
198
+ PermissionRequest as PermissionRequest,
199
+ )
200
+ from .interaction_handlers import (
201
+ PermissionResult as PermissionResult,
202
+ )
203
+ from .interaction_handlers import (
204
+ SamplingHandler as SamplingHandler,
205
+ )
206
+ from .interaction_handlers import (
207
+ SamplingRequest as SamplingRequest,
208
+ )
209
+ from .interaction_handlers import (
210
+ SamplingResult as SamplingResult,
211
+ )
212
+ from .interaction_handlers import (
213
+ TerminalHandler as TerminalHandler,
214
+ )
215
+ from .interaction_handlers import (
216
+ TerminalRequest as TerminalRequest,
217
+ )
218
+ from .interaction_handlers import (
219
+ TerminalResult as TerminalResult,
220
+ )
221
+ from .interaction_handlers import (
222
+ WorkspaceFiles as WorkspaceFiles,
223
+ )
224
+ from .matchers import check as check
225
+ from .matchers import expect as expect
226
+ from .matrix import (
227
+ HarnessCase as HarnessCase,
228
+ )
229
+ from .matrix import (
230
+ HarnessMatrix as HarnessMatrix,
231
+ )
232
+ from .matrix import (
233
+ HarnessMatrixCase as HarnessMatrixCase,
234
+ )
235
+ from .matrix import (
236
+ ServerCase as ServerCase,
237
+ )
238
+ from .matrix import (
239
+ ToolCase as ToolCase,
240
+ )
241
+ from .matrix import (
242
+ ToolMatrix as ToolMatrix,
243
+ )
244
+ from .matrix import (
245
+ ToolMatrixCase as ToolMatrixCase,
246
+ )
247
+ from .observability import * # noqa: F403 - module declares its public exports
248
+ from .policy import (
249
+ ToolDescriptor as ToolDescriptor,
250
+ )
251
+ from .policy import (
252
+ ToolPolicyDecision as ToolPolicyDecision,
253
+ )
254
+ from .policy import (
255
+ ToolPolicyEvaluator as ToolPolicyEvaluator,
256
+ )
257
+ from .policy import (
258
+ ToolPolicyEvidence as ToolPolicyEvidence,
259
+ )
260
+ from .policy import (
261
+ evaluate_tool_policy as evaluate_tool_policy,
262
+ )
263
+ from .services.acp_probes import (
264
+ ACPAgentIdentity as ACPAgentIdentity,
265
+ )
266
+ from .services.acp_probes import (
267
+ ACPAgentMode as ACPAgentMode,
268
+ )
269
+ from .services.acp_probes import (
270
+ ACPProbeDimension as ACPProbeDimension,
271
+ )
272
+ from .services.acp_probes import (
273
+ ACPProbeHistory as ACPProbeHistory,
274
+ )
275
+ from .services.acp_probes import (
276
+ ACPProbeKind as ACPProbeKind,
277
+ )
278
+ from .services.acp_probes import (
279
+ ACPProbeRequest as ACPProbeRequest,
280
+ )
281
+ from .services.acp_probes import (
282
+ ACPProbeResult as ACPProbeResult,
283
+ )
284
+ from .services.acp_probes import (
285
+ ACPProbeStatus as ACPProbeStatus,
286
+ )
287
+ from .services.acp_probes import (
288
+ ACPProbeStore as ACPProbeStore,
289
+ )
290
+ from .services.acp_probes import (
291
+ redact_probe as redact_probe,
292
+ )
293
+ from .services.acp_probes import (
294
+ run_acp_probe as run_acp_probe,
295
+ )
296
+ from .snapshots import SnapshotOptions as SnapshotOptions
297
+ from .snapshots import snapshot as snapshot
298
+ from .sync_api import (
299
+ AgentSession as AgentSession,
300
+ )
301
+ from .sync_api import (
302
+ Config as Config,
303
+ )
304
+ from .sync_api import (
305
+ ConfigError as ConfigError,
306
+ )
307
+ from .sync_api import (
308
+ ConfigOrigin as ConfigOrigin,
309
+ )
310
+ from .sync_api import (
311
+ ConfigSource as ConfigSource,
312
+ )
313
+ from .sync_api import (
314
+ ExecutionHandle as ExecutionHandle,
315
+ )
316
+ from .sync_api import (
317
+ HarnessAdapter as HarnessAdapter,
318
+ )
319
+ from .sync_api import (
320
+ MCPTestKit as MCPTestKit,
321
+ )
322
+ from .sync_api import (
323
+ ProbeEvidence as ProbeEvidence,
324
+ )
325
+ from .sync_api import (
326
+ ProbeKind as ProbeKind,
327
+ )
328
+ from .sync_api import (
329
+ ProbeReport as ProbeReport,
330
+ )
331
+ from .sync_api import (
332
+ ProbeRequest as ProbeRequest,
333
+ )
334
+ from .sync_api import (
335
+ ProbeResult as ProbeResult,
336
+ )
337
+ from .sync_api import (
338
+ Probes as Probes,
339
+ )
340
+ from .sync_api import (
341
+ load_config as load_config,
342
+ )
343
+ from .types import * # noqa: F403 - module declares its public exports
344
+
345
+ # Explicit legacy imports remain supported during the wildcard-surface
346
+ # migration. They are intentionally absent from ``__all__``.
347
+ from .types import (
348
+ ACPAgent, # noqa: F401
349
+ ClaudeCode, # noqa: F401
350
+ Codex, # noqa: F401
351
+ EvaluationId, # noqa: F401
352
+ ExecutionSpec, # noqa: F401
353
+ FullToolPolicy, # noqa: F401
354
+ HarnessProfileRef, # noqa: F401
355
+ HarnessSpec, # noqa: F401
356
+ HarnessValue, # noqa: F401
357
+ NativeToolPolicy, # noqa: F401
358
+ OpenCode, # noqa: F401
359
+ Pi, # noqa: F401
360
+ RestrictiveToolPolicy, # noqa: F401
361
+ )
362
+
363
+ for _compat_name in getattr(_types_module, "_COMPAT_EXPORTS", ()):
364
+ if _compat_name not in globals() and hasattr(_types_module, _compat_name):
365
+ globals()[_compat_name] = getattr(_types_module, _compat_name)
366
+ del _compat_name, _types_module
367
+
368
+ __version__ = _distribution_version("sf-m3")
369
+
370
+ # Explicit manifest keeps the public re-exports intentional.
371
+ from ._exports import PUBLIC_EXPORTS as _PUBLIC_EXPORTS
372
+
373
+ __all__ = list(_PUBLIC_EXPORTS["m3"])