evolve-sdk 0.0.55.dev1253__tar.gz → 0.0.55.dev1259__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 (44) hide show
  1. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/PKG-INFO +1 -1
  2. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/__init__.py +7 -1
  3. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/hosted.py +82 -26
  4. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve_sdk.egg-info/PKG-INFO +1 -1
  5. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/pyproject.toml +1 -1
  6. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/LICENSE +0 -0
  7. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/MANIFEST.in +0 -0
  8. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/README.md +0 -0
  9. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/bridge/__init__.py +0 -0
  10. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/bridge/dist/bridge.bundle.cjs +0 -0
  11. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/_http.py +0 -0
  12. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/agent.py +0 -0
  13. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/bridge.py +0 -0
  14. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/browser_credentials.py +0 -0
  15. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/browser_profiles.py +0 -0
  16. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/config.py +0 -0
  17. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/integrations.py +0 -0
  18. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/managed_secrets.py +0 -0
  19. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/pipeline/__init__.py +0 -0
  20. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/pipeline/pipeline.py +0 -0
  21. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/pipeline/types.py +0 -0
  22. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/prompts/__init__.py +0 -0
  23. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/prompts/agent_md/judge.md +0 -0
  24. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/prompts/agent_md/reduce.md +0 -0
  25. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/prompts/agent_md/verify.md +0 -0
  26. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/prompts/user/judge.md +0 -0
  27. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/prompts/user/retry_feedback.md +0 -0
  28. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/prompts/user/verify.md +0 -0
  29. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/py.typed +0 -0
  30. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/results.py +0 -0
  31. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/retry.py +0 -0
  32. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/schema.py +0 -0
  33. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/sessions_client.py +0 -0
  34. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/storage_client.py +0 -0
  35. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/swarm/__init__.py +0 -0
  36. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/swarm/results.py +0 -0
  37. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/swarm/swarm.py +0 -0
  38. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/swarm/types.py +0 -0
  39. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve/utils.py +0 -0
  40. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve_sdk.egg-info/SOURCES.txt +0 -0
  41. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve_sdk.egg-info/dependency_links.txt +0 -0
  42. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve_sdk.egg-info/requires.txt +0 -0
  43. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/evolve_sdk.egg-info/top_level.txt +0 -0
  44. {evolve_sdk-0.0.55.dev1253 → evolve_sdk-0.0.55.dev1259}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: evolve-sdk
3
- Version: 0.0.55.dev1253
3
+ Version: 0.0.55.dev1259
4
4
  Summary: Pythonic SDK for multi-agent orchestration in E2B sandboxes
5
5
  Author-email: "Swarmlink, Inc." <brandomagnani@evolvingmachines.ai>
6
6
  License: Apache-2.0
@@ -39,11 +39,13 @@ from .hosted import (
39
39
  Agent,
40
40
  AnalysesClient,
41
41
  AnalysisPage,
42
+ AnalysisLabel,
42
43
  AnalysisStatus,
43
44
  Check,
44
45
  CheckConfigInput,
45
46
  CheckPage,
46
47
  CheckSource,
48
+ CheckLabel,
47
49
  CheckStatus,
48
50
  ChecksClient,
49
51
  TaskCheck,
@@ -57,6 +59,7 @@ from .hosted import (
57
59
  AgentResult,
58
60
  AgentsClient,
59
61
  AnalysisCheck,
62
+ AnalysisEvidence,
60
63
  AnalysisFailure,
61
64
  AnalyzeConfig,
62
65
  AnalyzeConfigInput,
@@ -497,7 +500,7 @@ async def list_checkpoints(
497
500
  await store.close()
498
501
 
499
502
 
500
- __version__ = '0.0.55.dev1253'
503
+ __version__ = '0.0.55.dev1259'
501
504
 
502
505
  __all__ = [
503
506
  # Main classes
@@ -631,6 +634,7 @@ __all__ = [
631
634
  'AnalyzeConfig',
632
635
  'AnalyzeConfigInput',
633
636
  'AnalysisCheck',
637
+ 'AnalysisEvidence',
634
638
  'AnalysisFailure',
635
639
  'Rubric',
636
640
  'RubricCriterion',
@@ -686,7 +690,9 @@ __all__ = [
686
690
  'CheckPage',
687
691
  'JobListScope',
688
692
  'AnalysisStatus',
693
+ 'AnalysisLabel',
689
694
  'CheckStatus',
695
+ 'CheckLabel',
690
696
  'JobTaskRollupPage',
691
697
  'DatasetPage',
692
698
  'AgentPage',
@@ -568,6 +568,14 @@ AnalysisStatus = Literal['queued', 'running', 'completed', 'failed']
568
568
  #: ``'completed'`` once every task settled. A check never fails as a whole;
569
569
  #: each task carries its own typed failure (``TaskCheck['failure']``).
570
570
  CheckStatus = Literal['queued', 'running', 'completed']
571
+ #: The derived label of a trial analysis (spec ``TrialAnalysis.label``;
572
+ #: ``TrialAnalysis`` states the rule). None on the wire until completed and
573
+ #: under a custom rubric.
574
+ AnalysisLabel = Literal['flagged', 'env_fault', 'unclear', 'clean']
575
+ #: The derived label of one task's quality check (spec ``TaskCheck.label``;
576
+ #: ``TaskCheck`` states the rule). None until completed and under a custom
577
+ #: rubric.
578
+ CheckLabel = Literal['has_a_problem', 'unclear', 'no_problem_found']
571
579
  #: Which lane a settled trial's cost came from. Only ``'measured'`` is final.
572
580
  #: ``'measured_provisional'`` is a real gateway reading taken inside its
573
581
  #: asynchronous spend flush — an honest floor a deferred pass later confirms or
@@ -1553,12 +1561,14 @@ class RubricCriterion(TypedDict):
1553
1561
  every wire shape here.
1554
1562
  """
1555
1563
  #: Criterion identifier, snake_case (it keys the result's ``checks``).
1556
- #: Harbor's defaults are ``reward_hacking`` and ``task_specification``.
1564
+ #: The platform's default rubrics name seven criteria for analyze and
1565
+ #: eleven for check.
1557
1566
  name: str
1558
1567
  #: What the criterion evaluates, one sentence.
1559
1568
  description: str
1560
1569
  #: Evaluation guidance handed to the analyzer agent — what evidence to
1561
- #: read and what PASS / FAIL / NOT_APPLICABLE mean for this criterion.
1570
+ #: read and what PASS / FAIL / NOT_APPLICABLE / UNKNOWN mean for this
1571
+ #: criterion.
1562
1572
  guidance: str
1563
1573
 
1564
1574
 
@@ -1584,7 +1594,8 @@ class AnalyzeConfigInput(TypedDict, total=False):
1584
1594
  after it settles; CANCELLED trials are skipped); ``{}`` is legal and
1585
1595
  means "all defaults" — openrouter/deepseek/deepseek-v4.1-flash at its
1586
1596
  per-model effort (high)
1587
- over Harbor's default rubric (reward_hacking, task_specification). The analyzer always runs the
1597
+ over the platform's default analyze rubric (seven criteria) and its
1598
+ default prompt body. The analyzer always runs the
1588
1599
  claude-code harness in its own sealed sandbox — on the provider
1589
1600
  ``sandbox_provider`` names, or the platform's analysis default when it
1590
1601
  names none; its spend is capped per analysis and metered as its own
@@ -1609,8 +1620,8 @@ class AnalyzeConfigInput(TypedDict, total=False):
1609
1620
  model_name: str
1610
1621
  rubric: Rubric
1611
1622
  #: The analyzer's prompt template — the TEXT of Harbor's ``-p/--prompt
1612
- #: <file>`` (their cli/analyze.py:94-99). It REPLACES the built-in
1613
- #: template (their analyze/prompts/analyze.txt) as the body of the
1623
+ #: <file>`` (their cli/analyze.py:252-255). It REPLACES the platform's
1624
+ #: default body as the body of the
1614
1625
  #: analyzer's instruction and is rendered with the same three tokens
1615
1626
  #: (``{trial_path}``, ``{task_section}``, ``{criteria_guidance}``): the
1616
1627
  #: three tokens are substituted, an unknown ``{token}`` renders empty,
@@ -1690,8 +1701,8 @@ class AnalyzeConfig(TypedDict):
1690
1701
  """
1691
1702
  model_name: str
1692
1703
  rubric: Rubric
1693
- #: The caller's prompt template as stored; None = Harbor's built-in
1694
- #: analyze.txt.
1704
+ #: The caller's prompt template as stored; None = the platform's default
1705
+ #: analyze body.
1695
1706
  prompt: Optional[str]
1696
1707
  #: The effort this policy's analyses run at. Named at create it is
1697
1708
  #: served as stored; when the create named none, this echoes the
@@ -1722,13 +1733,30 @@ class AnalyzeConfig(TypedDict):
1722
1733
  n_trials: Optional[int]
1723
1734
 
1724
1735
 
1736
+ class AnalysisEvidence(TypedDict):
1737
+ """One place a verdict rests on. ``where`` names a step_id in the
1738
+ trajectory, a file and line, or a command; ``quote`` is the exact text
1739
+ found there. The page links each entry to the record; a reader verifies
1740
+ by eye — nothing verifies the quotes mechanically."""
1741
+ where: str
1742
+ quote: str
1743
+
1744
+
1725
1745
  class AnalysisCheck(TypedDict):
1726
- """One criterion's verdict — Harbor's QualityCheckModel verbatim (their
1727
- cli/quality_checker/models.py ``{explanation, outcome}``)."""
1728
- #: ``'pass'`` | ``'fail'`` | ``'not_applicable'``.
1746
+ """One criterion's verdict — Harbor's QualityCheckModel (their
1747
+ cli/quality_checker/models.py ``{explanation, outcome}``) extended by the
1748
+ platform's result schema: a fourth outcome, ``'unknown'``, for a
1749
+ criterion the record cannot decide (``'not_applicable'`` keeps Harbor's
1750
+ meaning, no subject), and the ``evidence`` list — at least one entry
1751
+ behind a ``'pass'`` or a ``'fail'``; ``'not_applicable'`` and
1752
+ ``'unknown'`` may carry none. Results stored before the evidence field
1753
+ existed serve an empty list."""
1754
+ #: ``'pass'`` | ``'fail'`` | ``'not_applicable'`` | ``'unknown'``.
1729
1755
  outcome: str
1730
- #: The analyzer's rationale, citing trial evidence.
1756
+ #: The analyzer's reasoning, in plain words, opening with a few words
1757
+ #: that name what it found.
1731
1758
  explanation: str
1759
+ evidence: List[AnalysisEvidence]
1732
1760
 
1733
1761
 
1734
1762
  class AnalysisFailure(TypedDict):
@@ -1752,8 +1780,9 @@ class AnalysisFailure(TypedDict):
1752
1780
  class TrialAnalysis(TypedDict):
1753
1781
  """One trace analysis of a trial — ``Trial.analysis``.
1754
1782
 
1755
- The result half is Harbor's AnalyzeResult verbatim (their
1756
- analyze/models.py: ``summary``, ``checks`` keyed by criterion,
1783
+ The result half is Harbor's AnalyzeResult shape (their
1784
+ analyze/models.py: ``summary``, ``checks`` keyed by criterion — each
1785
+ check extended by the result schema: four outcomes and an evidence list —
1757
1786
  ``estimated_cost_usd``; the enclosing trial is Harbor's ``trial_name``);
1758
1787
  the rest is provenance — which model, rubric and prompt THIS analysis
1759
1788
  ran under, its lifecycle status, and its typed failure when it failed.
@@ -1787,7 +1816,7 @@ class TrialAnalysis(TypedDict):
1787
1816
  reasoning_effort: Optional[str]
1788
1817
  rubric: Rubric
1789
1818
  #: The prompt template THIS analysis ran under, frozen at enqueue
1790
- #: (``AnalyzeConfigInput['prompt']``); None = Harbor's built-in analyze.txt.
1819
+ #: (``AnalyzeConfigInput['prompt']``); None = the platform's default analyze body.
1791
1820
  prompt: Optional[str]
1792
1821
  #: 3–5 sentence overview of the trial (Harbor's summary contract). None
1793
1822
  #: until completed.
@@ -1795,6 +1824,17 @@ class TrialAnalysis(TypedDict):
1795
1824
  #: One entry per rubric criterion, keys exactly the rubric's criterion
1796
1825
  #: names (the frozen-criteria law). None until completed.
1797
1826
  checks: Optional[Dict[str, AnalysisCheck]]
1827
+ #: The derived label — ``'flagged'`` | ``'env_fault'`` | ``'unclear'`` |
1828
+ #: ``'clean'`` — computed by the platform from the outcomes when the
1829
+ #: result is stored, never asked from the model: ``'flagged'`` on a fail
1830
+ #: of score_is_earned, score_is_correct, task_was_fair or
1831
+ #: report_is_truthful; else ``'env_fault'`` on a fail of
1832
+ #: environment_worked; else ``'unclear'`` on an unknown of any of those
1833
+ #: five, or a not_applicable of score_is_earned or score_is_correct;
1834
+ #: else ``'clean'``. None until completed, and None on a completed
1835
+ #: analysis whose rubric is not the default one (a custom rubric carries
1836
+ #: its per-criterion outcomes and no label).
1837
+ label: Optional[AnalysisLabel]
1798
1838
  estimated_cost_usd: Optional[float]
1799
1839
  #: The analyzer's one-home usage reading — the SAME shape, same keys, the
1800
1840
  #: trial and session surfaces serve
@@ -1845,7 +1885,8 @@ class JobAnalysisStats(TypedDict):
1845
1885
  #: analysis recorded measured spend.
1846
1886
  cost_usd: Optional[float]
1847
1887
  #: Per-criterion outcome tally over the completed latest analyses, keyed
1848
- #: by criterion name: ``{n_pass, n_fail, n_not_applicable}`` each.
1888
+ #: by criterion name: ``{n_pass, n_fail, n_not_applicable, n_unknown}``
1889
+ #: each.
1849
1890
  checks: Dict[str, Dict[str, int]]
1850
1891
 
1851
1892
 
@@ -1858,10 +1899,10 @@ class CheckConfigInput(TypedDict, total=False):
1858
1899
  ``claude-sonnet-4-6``; this platform's is the analyzer's
1859
1900
  ``openrouter/deepseek/deepseek-v4.1-flash`` — one roster, one default
1860
1901
  for both rubric agents, a
1861
- recorded deviation), ``rubric`` (default: Harbor's
1862
- cli/quality_checker/default-rubric.toml, eleven criteria verbatim) and
1863
- ``prompt`` (the TEXT of Harbor's ``-p/--prompt`` file, replacing their
1864
- prompts/check.txt; rendered with ``{task_path}``, ``{file_tree}``,
1902
+ recorded deviation), ``rubric`` (default: the platform's check rubric,
1903
+ eleven criteria) and
1904
+ ``prompt`` (the TEXT of Harbor's ``-p/--prompt`` file, replacing the
1905
+ platform's default check body; rendered with ``{task_path}``, ``{file_tree}``,
1865
1906
  ``{criteria_guidance}``; the output contract appended after it exactly
1866
1907
  as Harbor appends it). ``reasoning_effort`` and ``sandbox_provider`` are
1867
1908
  the platform's two hosted knobs, exactly as on the analyze door.
@@ -1910,8 +1951,9 @@ class TaskCheck(TypedDict):
1910
1951
  words), the bounded attempt count, and a typed ``failure`` in place of
1911
1952
  Harbor's ``error`` string.
1912
1953
 
1913
- ``checks`` is the FLAT object Harbor's validate.py accepts — one key per
1914
- rubric criterion, each ``{outcome, explanation}``; no summary (analyze
1954
+ ``checks`` is the FLAT object the platform's validate.py accepts — one key
1955
+ per rubric criterion, each ``{outcome, explanation, evidence}``, four
1956
+ outcome words; no summary (analyze
1915
1957
  has one, check does not). ``cost_usd`` is the checker agent's OWN
1916
1958
  metered spend; None when nothing was measured, never a fabricated 0.
1917
1959
  A plain wire dict at runtime.
@@ -1924,6 +1966,20 @@ class TaskCheck(TypedDict):
1924
1966
  status: str
1925
1967
  #: One entry per rubric criterion, keys exactly the frozen criteria. None until completed.
1926
1968
  checks: Optional[Dict[str, AnalysisCheck]]
1969
+ #: The derived label — ``'has_a_problem'`` | ``'unclear'`` |
1970
+ #: ``'no_problem_found'`` — computed by the platform from the outcomes
1971
+ #: when the result is stored: ``'has_a_problem'`` on a fail of any
1972
+ #: criterion; else ``'unclear'`` on an unknown of any of the six
1973
+ #: file-based criteria; else ``'no_problem_found'``. None until
1974
+ #: completed, and None under a custom rubric.
1975
+ label: Optional[CheckLabel]
1976
+ #: Whether the box ran the task's environment: True when none of the
1977
+ #: five run-based criteria (reference_solution_is_valid,
1978
+ #: verifier_rejects_non_solutions, environment_builds_and_runs,
1979
+ #: verification_is_stable, limits_allow_the_task) is unknown, so a
1980
+ #: reading-only ``'no_problem_found'`` is never mistaken for a run.
1981
+ #: None exactly when ``label`` is None.
1982
+ executed: Optional[bool]
1927
1983
  cost_usd: Optional[float]
1928
1984
  #: 1, or 2 when the one automatic re-run fired.
1929
1985
  attempts: int
@@ -1949,7 +2005,7 @@ class Check(TypedDict):
1949
2005
  #: The effort every task's checker ran at — named at create, or the model's default, resolved at accept.
1950
2006
  reasoning_effort: str
1951
2007
  rubric: Rubric
1952
- #: The prompt template as stored; None = Harbor's built-in check.txt.
2008
+ #: The prompt template as stored; None = the platform's default check body.
1953
2009
  prompt: Optional[str]
1954
2010
  sandbox_provider: EvalSandboxProvider
1955
2011
  #: Harbor's -n as stored; None = the organization's ceiling alone.
@@ -6950,8 +7006,8 @@ class JobsClient:
6950
7006
  AnalyzeConfigInput): PRESENCE is the switch — each trial is analyzed
6951
7007
  server-side right after it settles (CANCELLED trials are skipped),
6952
7008
  ``{}`` means "all defaults" (openrouter/deepseek/deepseek-v4.1-flash
6953
- at its per-model
6954
- effort, Harbor's default rubric), and the response
7009
+ at its per-model effort, the platform's default analyze rubric),
7010
+ and the response
6955
7011
  echoes the RESOLVED policy as
6956
7012
  ``Job.analyze`` (:class:`AnalyzeConfig`); omitted, no embedded
6957
7013
  analysis runs and :meth:`analyze` remains the manual door. The five
@@ -7566,8 +7622,8 @@ class JobsClient:
7566
7622
  analysis.
7567
7623
  Every argument omitted means the defaults:
7568
7624
  openrouter/deepseek/deepseek-v4.1-flash at high
7569
- over Harbor's default rubric (reward_hacking,
7570
- task_specification), on the platform's analysis default provider.
7625
+ over the platform's default analyze rubric (seven criteria), on the
7626
+ platform's analysis default provider.
7571
7627
  CANCELLED trials are never analyzed.
7572
7628
  Which trials, and how wide, are Harbor's own analyze options with
7573
7629
  their exact names (their cli/analyze.py:278-290): ``passing`` /
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: evolve-sdk
3
- Version: 0.0.55.dev1253
3
+ Version: 0.0.55.dev1259
4
4
  Summary: Pythonic SDK for multi-agent orchestration in E2B sandboxes
5
5
  Author-email: "Swarmlink, Inc." <brandomagnani@evolvingmachines.ai>
6
6
  License: Apache-2.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "evolve-sdk"
7
- version = "0.0.55.dev1253"
7
+ version = "0.0.55.dev1259"
8
8
  description = "Pythonic SDK for multi-agent orchestration in E2B sandboxes"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"