world-model-optimizer 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 (308) hide show
  1. llm_waterfall/LICENSE +21 -0
  2. llm_waterfall/__init__.py +53 -0
  3. llm_waterfall/adapters/__init__.py +36 -0
  4. llm_waterfall/adapters/anthropic.py +105 -0
  5. llm_waterfall/adapters/aws_mantle.py +47 -0
  6. llm_waterfall/adapters/azure_openai.py +71 -0
  7. llm_waterfall/adapters/base.py +51 -0
  8. llm_waterfall/adapters/bedrock.py +309 -0
  9. llm_waterfall/adapters/openai.py +130 -0
  10. llm_waterfall/classify.py +184 -0
  11. llm_waterfall/pricing.py +110 -0
  12. llm_waterfall/py.typed +0 -0
  13. llm_waterfall/types.py +295 -0
  14. llm_waterfall/waterfall.py +255 -0
  15. wmo/__init__.py +38 -0
  16. wmo/agents/__init__.py +7 -0
  17. wmo/agents/default.py +29 -0
  18. wmo/agents/meta.py +55 -0
  19. wmo/agents/optimizer.py +55 -0
  20. wmo/agents/project.py +928 -0
  21. wmo/cli/__init__.py +5 -0
  22. wmo/cli/agent_session.py +1123 -0
  23. wmo/cli/app.py +2489 -0
  24. wmo/cli/e2b_cmds.py +212 -0
  25. wmo/cli/eval_closed_loop.py +207 -0
  26. wmo/cli/harness_app.py +1147 -0
  27. wmo/cli/harness_distill.py +659 -0
  28. wmo/cli/hosted_session.py +880 -0
  29. wmo/cli/ingest_cmd.py +165 -0
  30. wmo/cli/model_roles.py +82 -0
  31. wmo/cli/platform_cmds.py +372 -0
  32. wmo/cli/route_app.py +274 -0
  33. wmo/cli/session_state.py +243 -0
  34. wmo/cli/ui.py +1107 -0
  35. wmo/cli/workspace_sync.py +504 -0
  36. wmo/config/__init__.py +60 -0
  37. wmo/config/card.py +129 -0
  38. wmo/config/config.py +367 -0
  39. wmo/config/dotenv.py +67 -0
  40. wmo/config/settings.py +128 -0
  41. wmo/config/store.py +177 -0
  42. wmo/conftest.py +19 -0
  43. wmo/connect/__init__.py +88 -0
  44. wmo/connect/apps.py +78 -0
  45. wmo/connect/brave.py +284 -0
  46. wmo/connect/connector.py +79 -0
  47. wmo/connect/credentials.py +164 -0
  48. wmo/connect/github.py +321 -0
  49. wmo/connect/google.py +627 -0
  50. wmo/connect/notion.py +790 -0
  51. wmo/connect/oauth.py +461 -0
  52. wmo/connect/slack.py +555 -0
  53. wmo/connect/store.py +199 -0
  54. wmo/connect/types.py +156 -0
  55. wmo/core/__init__.py +21 -0
  56. wmo/core/parsing.py +281 -0
  57. wmo/core/render.py +271 -0
  58. wmo/core/text.py +40 -0
  59. wmo/core/types.py +116 -0
  60. wmo/distill/__init__.py +14 -0
  61. wmo/distill/agents.py +140 -0
  62. wmo/distill/config.py +1006 -0
  63. wmo/distill/cost.py +437 -0
  64. wmo/distill/data.py +921 -0
  65. wmo/distill/deadlines.py +254 -0
  66. wmo/distill/fake_tinker.py +734 -0
  67. wmo/distill/gate.py +122 -0
  68. wmo/distill/loop.py +3499 -0
  69. wmo/distill/renderers.py +399 -0
  70. wmo/distill/rendering.py +620 -0
  71. wmo/distill/rollouts.py +726 -0
  72. wmo/distill/samples.py +195 -0
  73. wmo/distill/store.py +829 -0
  74. wmo/distill/teacher.py +714 -0
  75. wmo/distill/tokens.py +535 -0
  76. wmo/distill/tracking.py +552 -0
  77. wmo/distill/tripwire.py +411 -0
  78. wmo/distill/xtoken/byte_offsets.py +152 -0
  79. wmo/distill/xtoken/chunks.py +457 -0
  80. wmo/distill/xtoken/prompt_logprobs.py +475 -0
  81. wmo/distill/xtoken/teacher_render.py +346 -0
  82. wmo/engine/__init__.py +28 -0
  83. wmo/engine/autoconfig.py +367 -0
  84. wmo/engine/build.py +346 -0
  85. wmo/engine/demo.py +77 -0
  86. wmo/engine/eval_suites.py +245 -0
  87. wmo/engine/grounding.py +491 -0
  88. wmo/engine/knowledge.py +291 -0
  89. wmo/engine/loader.py +36 -0
  90. wmo/engine/play.py +92 -0
  91. wmo/engine/prompts.py +99 -0
  92. wmo/engine/replay.py +443 -0
  93. wmo/engine/reporting.py +58 -0
  94. wmo/engine/workspace.py +468 -0
  95. wmo/engine/world_model.py +568 -0
  96. wmo/env/__init__.py +22 -0
  97. wmo/env/base.py +121 -0
  98. wmo/env/closed_loop.py +229 -0
  99. wmo/env/episode.py +107 -0
  100. wmo/env/llm_agent.py +93 -0
  101. wmo/env/scenarios.py +73 -0
  102. wmo/evals/__init__.py +52 -0
  103. wmo/evals/agreement.py +110 -0
  104. wmo/evals/base.py +45 -0
  105. wmo/evals/closed_loop.py +480 -0
  106. wmo/evals/failover.py +96 -0
  107. wmo/evals/gold.py +127 -0
  108. wmo/evals/grid.py +394 -0
  109. wmo/evals/grid_plot.py +205 -0
  110. wmo/evals/harbor/__init__.py +27 -0
  111. wmo/evals/harbor/agent.py +573 -0
  112. wmo/evals/harbor/ctrf.py +171 -0
  113. wmo/evals/harbor/e2b_environment.py +587 -0
  114. wmo/evals/harbor/e2b_template_policy.py +144 -0
  115. wmo/evals/harbor/scorer.py +875 -0
  116. wmo/evals/harbor/tasks.py +140 -0
  117. wmo/evals/open_loop.py +194 -0
  118. wmo/evals/tasks.py +53 -0
  119. wmo/harness/__init__.py +51 -0
  120. wmo/harness/code_runtime.py +288 -0
  121. wmo/harness/create.py +1191 -0
  122. wmo/harness/delta.py +220 -0
  123. wmo/harness/doc.py +556 -0
  124. wmo/harness/e2b_ledger.py +342 -0
  125. wmo/harness/e2b_reap.py +476 -0
  126. wmo/harness/e2b_sandbox.py +350 -0
  127. wmo/harness/environment.py +35 -0
  128. wmo/harness/live_session.py +543 -0
  129. wmo/harness/mutate.py +343 -0
  130. wmo/harness/pi_e2b.py +1710 -0
  131. wmo/harness/pi_entry/entry.ts +268 -0
  132. wmo/harness/pi_entry/runner_frames.ts +92 -0
  133. wmo/harness/pi_entry/runner_live.ts +587 -0
  134. wmo/harness/pi_entry/runner_service.ts +270 -0
  135. wmo/harness/pi_entry/runner_stdio.ts +374 -0
  136. wmo/harness/pi_entry/runner_termination.ts +142 -0
  137. wmo/harness/pi_local.py +262 -0
  138. wmo/harness/pi_runtime.py +495 -0
  139. wmo/harness/pi_vendor.py +65 -0
  140. wmo/harness/population.py +509 -0
  141. wmo/harness/project_proposer.py +569 -0
  142. wmo/harness/proposer.py +977 -0
  143. wmo/harness/runner_link.py +619 -0
  144. wmo/harness/runtime.py +389 -0
  145. wmo/harness/scoring.py +247 -0
  146. wmo/harness/skills.py +116 -0
  147. wmo/harness/source_tree.py +319 -0
  148. wmo/harness/store.py +176 -0
  149. wmo/harness/tools.py +105 -0
  150. wmo/harness/vendor/manifest.sha256 +58 -0
  151. wmo/harness/vendor/pi-agent/CHANGELOG.md +556 -0
  152. wmo/harness/vendor/pi-agent/LICENSE +21 -0
  153. wmo/harness/vendor/pi-agent/README.md +488 -0
  154. wmo/harness/vendor/pi-agent/VENDOR.md +39 -0
  155. wmo/harness/vendor/pi-agent/docs/agent-harness.md +486 -0
  156. wmo/harness/vendor/pi-agent/docs/durable-harness.md +212 -0
  157. wmo/harness/vendor/pi-agent/docs/hooks.md +445 -0
  158. wmo/harness/vendor/pi-agent/docs/models.md +966 -0
  159. wmo/harness/vendor/pi-agent/docs/observability.md +376 -0
  160. wmo/harness/vendor/pi-agent/package.json +60 -0
  161. wmo/harness/vendor/pi-agent/src/agent-loop.ts +748 -0
  162. wmo/harness/vendor/pi-agent/src/agent.ts +575 -0
  163. wmo/harness/vendor/pi-agent/src/harness/agent-harness.ts +1029 -0
  164. wmo/harness/vendor/pi-agent/src/harness/compaction/branch-summarization.ts +261 -0
  165. wmo/harness/vendor/pi-agent/src/harness/compaction/compaction.ts +747 -0
  166. wmo/harness/vendor/pi-agent/src/harness/compaction/utils.ts +144 -0
  167. wmo/harness/vendor/pi-agent/src/harness/env/nodejs.ts +550 -0
  168. wmo/harness/vendor/pi-agent/src/harness/messages.ts +164 -0
  169. wmo/harness/vendor/pi-agent/src/harness/prompt-templates.ts +267 -0
  170. wmo/harness/vendor/pi-agent/src/harness/session/jsonl-repo.ts +177 -0
  171. wmo/harness/vendor/pi-agent/src/harness/session/jsonl-storage.ts +293 -0
  172. wmo/harness/vendor/pi-agent/src/harness/session/memory-repo.ts +50 -0
  173. wmo/harness/vendor/pi-agent/src/harness/session/memory-storage.ts +131 -0
  174. wmo/harness/vendor/pi-agent/src/harness/session/repo-utils.ts +51 -0
  175. wmo/harness/vendor/pi-agent/src/harness/session/session.ts +267 -0
  176. wmo/harness/vendor/pi-agent/src/harness/session/uuid.ts +54 -0
  177. wmo/harness/vendor/pi-agent/src/harness/skills.ts +375 -0
  178. wmo/harness/vendor/pi-agent/src/harness/system-prompt.ts +34 -0
  179. wmo/harness/vendor/pi-agent/src/harness/types.ts +836 -0
  180. wmo/harness/vendor/pi-agent/src/harness/utils/shell-output.ts +135 -0
  181. wmo/harness/vendor/pi-agent/src/harness/utils/truncate.ts +344 -0
  182. wmo/harness/vendor/pi-agent/src/index.ts +44 -0
  183. wmo/harness/vendor/pi-agent/src/node.ts +2 -0
  184. wmo/harness/vendor/pi-agent/src/proxy.ts +367 -0
  185. wmo/harness/vendor/pi-agent/src/types.ts +428 -0
  186. wmo/harness/vendor/pi-agent/test/agent-loop.test.ts +1351 -0
  187. wmo/harness/vendor/pi-agent/test/agent.test.ts +699 -0
  188. wmo/harness/vendor/pi-agent/test/e2e.test.ts +404 -0
  189. wmo/harness/vendor/pi-agent/test/harness/agent-harness-stream.test.ts +213 -0
  190. wmo/harness/vendor/pi-agent/test/harness/agent-harness.test.ts +608 -0
  191. wmo/harness/vendor/pi-agent/test/harness/compaction.test.ts +655 -0
  192. wmo/harness/vendor/pi-agent/test/harness/nodejs-env.test.ts +321 -0
  193. wmo/harness/vendor/pi-agent/test/harness/prompt-templates.test.ts +90 -0
  194. wmo/harness/vendor/pi-agent/test/harness/repo.test.ts +68 -0
  195. wmo/harness/vendor/pi-agent/test/harness/resource-formatting.test.ts +24 -0
  196. wmo/harness/vendor/pi-agent/test/harness/session-test-utils.ts +55 -0
  197. wmo/harness/vendor/pi-agent/test/harness/session-uuid.test.ts +50 -0
  198. wmo/harness/vendor/pi-agent/test/harness/session.test.ts +156 -0
  199. wmo/harness/vendor/pi-agent/test/harness/skills.test.ts +116 -0
  200. wmo/harness/vendor/pi-agent/test/harness/storage.test.ts +299 -0
  201. wmo/harness/vendor/pi-agent/test/harness/system-prompt.test.ts +66 -0
  202. wmo/harness/vendor/pi-agent/test/harness/truncate.test.ts +169 -0
  203. wmo/harness/vendor/pi-agent/test/scratch/simple.ts +72 -0
  204. wmo/harness/vendor/pi-agent/test/utils/calculate.ts +32 -0
  205. wmo/harness/vendor/pi-agent/test/utils/get-current-time.ts +46 -0
  206. wmo/harness/vendor/pi-agent/tsconfig.build.json +13 -0
  207. wmo/harness/vendor/pi-agent/vitest.config.ts +19 -0
  208. wmo/harness/vendor/pi-agent/vitest.harness.config.ts +28 -0
  209. wmo/harness/vendor/vendor_pi.sh +59 -0
  210. wmo/harness/workspace_patch.py +270 -0
  211. wmo/ingest/__init__.py +47 -0
  212. wmo/ingest/adapter.py +72 -0
  213. wmo/ingest/base.py +114 -0
  214. wmo/ingest/braintrust.py +339 -0
  215. wmo/ingest/detect.py +126 -0
  216. wmo/ingest/langfuse.py +291 -0
  217. wmo/ingest/langsmith.py +444 -0
  218. wmo/ingest/mastra.py +330 -0
  219. wmo/ingest/messages.py +170 -0
  220. wmo/ingest/normalize.py +679 -0
  221. wmo/ingest/otel_genai.py +69 -0
  222. wmo/ingest/otel_writer.py +100 -0
  223. wmo/ingest/phoenix.py +150 -0
  224. wmo/ingest/postgres.py +246 -0
  225. wmo/ingest/posthog.py +320 -0
  226. wmo/ingest/quality.py +28 -0
  227. wmo/ingest/stream.py +209 -0
  228. wmo/ingest/testdata/sample_otlp.json +60 -0
  229. wmo/ingest/testdata/sample_spans.jsonl +3 -0
  230. wmo/optimize/__init__.py +25 -0
  231. wmo/optimize/base.py +143 -0
  232. wmo/optimize/gepa.py +806 -0
  233. wmo/optimize/judge.py +262 -0
  234. wmo/optimize/judge_quality.py +359 -0
  235. wmo/optimize/knn.py +468 -0
  236. wmo/optimize/numeric.py +152 -0
  237. wmo/optimize/outcomes.py +103 -0
  238. wmo/optimize/policy.py +669 -0
  239. wmo/optimize/report.py +231 -0
  240. wmo/optimize/reward.py +129 -0
  241. wmo/optimize/routing.py +373 -0
  242. wmo/platform/__init__.py +6 -0
  243. wmo/platform/auth.py +115 -0
  244. wmo/platform/client.py +551 -0
  245. wmo/platform/credentials.py +126 -0
  246. wmo/platform/transfer.py +158 -0
  247. wmo/providers/__init__.py +40 -0
  248. wmo/providers/_bedrock_chat.py +155 -0
  249. wmo/providers/_openai_common.py +182 -0
  250. wmo/providers/_responses_common.py +472 -0
  251. wmo/providers/anthropic.py +134 -0
  252. wmo/providers/azure_openai.py +296 -0
  253. wmo/providers/base.py +300 -0
  254. wmo/providers/bedrock.py +312 -0
  255. wmo/providers/models.py +205 -0
  256. wmo/providers/openai.py +143 -0
  257. wmo/providers/openai_responses.py +240 -0
  258. wmo/providers/pool.py +170 -0
  259. wmo/providers/registry.py +73 -0
  260. wmo/providers/retry.py +151 -0
  261. wmo/providers/tinker.py +936 -0
  262. wmo/providers/waterfall.py +336 -0
  263. wmo/research/__init__.py +81 -0
  264. wmo/research/ablation.py +133 -0
  265. wmo/research/concurrency_plot.py +523 -0
  266. wmo/research/concurrency_run.py +240 -0
  267. wmo/research/concurrency_scaling.py +270 -0
  268. wmo/research/gepa_scaling.py +274 -0
  269. wmo/research/pipeline.py +198 -0
  270. wmo/research/scaling_split.py +82 -0
  271. wmo/research/scenario_fidelity.py +198 -0
  272. wmo/research/scenario_recovery.py +92 -0
  273. wmo/research/seed_stability.py +90 -0
  274. wmo/research/trace_scaling.py +348 -0
  275. wmo/retrieval/__init__.py +6 -0
  276. wmo/retrieval/embedders.py +105 -0
  277. wmo/retrieval/leakfree.py +52 -0
  278. wmo/retrieval/retriever.py +173 -0
  279. wmo/scenarios/__init__.py +58 -0
  280. wmo/scenarios/builder.py +152 -0
  281. wmo/scenarios/mining/__init__.py +27 -0
  282. wmo/scenarios/mining/clustering.py +171 -0
  283. wmo/scenarios/mining/facets.py +226 -0
  284. wmo/scenarios/mining/selection.py +220 -0
  285. wmo/scenarios/synthesis/__init__.py +6 -0
  286. wmo/scenarios/synthesis/scenario_set.py +63 -0
  287. wmo/scenarios/synthesis/synthesizer.py +85 -0
  288. wmo/scenarios/verification/__init__.py +17 -0
  289. wmo/scenarios/verification/judge.py +97 -0
  290. wmo/scenarios/verification/verify.py +135 -0
  291. wmo/serving/__init__.py +5 -0
  292. wmo/serving/builds.py +451 -0
  293. wmo/serving/chat.py +878 -0
  294. wmo/serving/endpoint_config.py +64 -0
  295. wmo/serving/savings.py +250 -0
  296. wmo/serving/server.py +553 -0
  297. wmo/serving/traces_source.py +206 -0
  298. wmo/telemetry.py +213 -0
  299. wmo/tracking/__init__.py +36 -0
  300. wmo/tracking/clock.py +24 -0
  301. wmo/tracking/metered.py +125 -0
  302. wmo/tracking/pricing.py +99 -0
  303. wmo/tracking/store.py +31 -0
  304. wmo/tracking/tracker.py +149 -0
  305. world_model_optimizer-0.2.0.dist-info/METADATA +203 -0
  306. world_model_optimizer-0.2.0.dist-info/RECORD +308 -0
  307. world_model_optimizer-0.2.0.dist-info/WHEEL +4 -0
  308. world_model_optimizer-0.2.0.dist-info/entry_points.txt +2 -0
wmo/harness/tools.py ADDED
@@ -0,0 +1,105 @@
1
+ """The rollout agent's tool surface: a deliberately minimal set, rendered compactly.
2
+
3
+ The agent gets four tools: `bash` + file read/write against the environment, and `submit` to end
4
+ the run. Everything else the agent needs it composes with bash — a small always-loaded tool schema
5
+ keeps the prompt cheap, and capability comes from composition rather than tool count.
6
+
7
+ Env tools become `Action`s the environment answers (the world model, in closed-loop eval); `submit`
8
+ is handled by the runtime itself.
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ from pydantic import BaseModel, Field, ValidationError
14
+
15
+ from wmo.core.parsing import extract_json_object
16
+ from wmo.core.types import Action, ActionKind, JsonObject
17
+
18
+
19
+ class ToolSpec(BaseModel):
20
+ """One tool the agent may call: a name, what it does, and its named arguments."""
21
+
22
+ name: str
23
+ description: str
24
+ arguments: dict[str, str] = Field(default_factory=dict) # arg name -> one-line description
25
+
26
+
27
+ BASH = ToolSpec(
28
+ name="bash",
29
+ description="Run a shell command in the environment; returns stdout+stderr and exit status.",
30
+ arguments={"command": "the shell command to run"},
31
+ )
32
+ READ_FILE = ToolSpec(
33
+ name="read_file",
34
+ description="Read a file from the environment.",
35
+ arguments={"path": "absolute path of the file to read"},
36
+ )
37
+ WRITE_FILE = ToolSpec(
38
+ name="write_file",
39
+ description="Write a file in the environment (parent dirs are created).",
40
+ arguments={"path": "absolute path to write", "content": "full file content"},
41
+ )
42
+ SUBMIT = ToolSpec(
43
+ name="submit",
44
+ description="Finish the task and submit your answer/result summary. This ends the run.",
45
+ arguments={"answer": "your final answer or a summary of what you did"},
46
+ )
47
+ READ_SKILL = ToolSpec(
48
+ name="read_skill",
49
+ description="Read the full body of a skill from your library (the prompt lists only names).",
50
+ arguments={"name": "the skill name to read"},
51
+ )
52
+
53
+ TOOL_REGISTRY: dict[str, ToolSpec] = {
54
+ t.name: t for t in (BASH, READ_FILE, WRITE_FILE, SUBMIT, READ_SKILL)
55
+ }
56
+
57
+ # `read_skill` is only useful when a harness ships skills, so it is not a default tool; the runtime
58
+ # adds it automatically when constructed with a non-empty skill library.
59
+ DEFAULT_TOOLS = [t.name for t in (BASH, READ_FILE, WRITE_FILE, SUBMIT)]
60
+
61
+
62
+ def resolve_tools(names: list[str]) -> list[ToolSpec]:
63
+ """Map tool names to specs, raising on unknown names. `submit` is mandatory (ends the run)."""
64
+ unknown = [n for n in names if n not in TOOL_REGISTRY]
65
+ if unknown:
66
+ raise ValueError(f"unknown tools {unknown}; registry has {sorted(TOOL_REGISTRY)}")
67
+ if SUBMIT.name not in names:
68
+ raise ValueError(f"the {SUBMIT.name!r} tool is required (without it a run cannot end)")
69
+ return [TOOL_REGISTRY[n] for n in names]
70
+
71
+
72
+ def render_tools(tools: list[ToolSpec]) -> str:
73
+ """Render the tool list for the system prompt, one compact block per tool."""
74
+ lines: list[str] = []
75
+ for tool in tools:
76
+ args = ", ".join(f'"{k}": <{v}>' for k, v in tool.arguments.items())
77
+ lines.append(f"- {tool.name}: {tool.description}\n arguments: {{{args}}}")
78
+ return "\n".join(lines)
79
+
80
+
81
+ class ToolCall(BaseModel):
82
+ """One parsed tool call from the agent's reply."""
83
+
84
+ tool: str
85
+ arguments: JsonObject = Field(default_factory=dict)
86
+
87
+
88
+ def parse_tool_call(text: str) -> ToolCall | None:
89
+ """Parse the agent's reply into a ToolCall (`{"tool": ..., "arguments": {...}}`), or None.
90
+
91
+ Lenient about surrounding prose/fences (the JSON is extracted, not matched), strict about
92
+ shape: a reply whose JSON has no string `tool` field is not a call.
93
+ """
94
+ raw = extract_json_object(text)
95
+ if raw is None:
96
+ return None
97
+ try:
98
+ return ToolCall.model_validate_json(raw)
99
+ except ValidationError:
100
+ return None
101
+
102
+
103
+ def to_action(call: ToolCall) -> Action:
104
+ """An env tool call as the normalized Action the environment answers."""
105
+ return Action(kind=ActionKind.TOOL_CALL, name=call.tool, arguments=call.arguments)
@@ -0,0 +1,58 @@
1
+ SHA256 (pi-agent/CHANGELOG.md) = fa69af54b48c7f9a841b78a62a7d948e518f15504a9c7c8ea1f6d37abd96984e
2
+ SHA256 (pi-agent/LICENSE) = 0457f5bcec3b3b211605dfb5d1a49042fd638f3686a410fe099c24a25af13c48
3
+ SHA256 (pi-agent/README.md) = 966f93b5ba3ddc1c9b472ab3a63878244dc89f860826bc7b29a8d35fe7fd931a
4
+ SHA256 (pi-agent/VENDOR.md) = a8ba9ec63411f27769c4d885344bd1c1e9f38be9b285a9f44c5853cf8551abcc
5
+ SHA256 (pi-agent/docs/agent-harness.md) = 5a455054ad5a7ad377787289c70ceeaaaf0c0cbe363c766392e7d9e742df31e8
6
+ SHA256 (pi-agent/docs/durable-harness.md) = 52895b5c89e6927ba0a4ee44ef5fa5fd3c09273b00c6ea202cedc66692b10dfd
7
+ SHA256 (pi-agent/docs/hooks.md) = 5977b25b4e7dc2316bb7cd917955aeb1882fd1d77e7fbcbcb990e4fba5e26fc6
8
+ SHA256 (pi-agent/docs/models.md) = b108da745f4afaf64a65b4bd2b50388efa0964556e9e9907eea2cdade3f6a323
9
+ SHA256 (pi-agent/docs/observability.md) = 2749c2dbe8e1856e18b5ba0e61a27ffaffbcab3df4e24c3fd109cab84cc18fe5
10
+ SHA256 (pi-agent/package.json) = e04b0a69effd94098f80258d5fb1b5a6807f8c39baba8d328a8936adc16cded3
11
+ SHA256 (pi-agent/src/agent-loop.ts) = 64b9ba4aca90a6ff6a12b7b9392bd1ae4a95e3c463bf8d2ffe66750e69e483ea
12
+ SHA256 (pi-agent/src/agent.ts) = 28bd9032a9ec7f1b6b3a55c6c876c0332879d51030483cb191cde8b53be9646f
13
+ SHA256 (pi-agent/src/harness/agent-harness.ts) = 4f08ed1c3697540d2668746b8db94f18b3215c30a0d42b75f2162be51b0d72c6
14
+ SHA256 (pi-agent/src/harness/compaction/branch-summarization.ts) = a3073bc85c273e6a6fda866a4da80b0115273cba9dc94e15ec357db049dd7e86
15
+ SHA256 (pi-agent/src/harness/compaction/compaction.ts) = 1789101d10d4c54bc10e11977ef643f601647046a28a22f988d0178d3770888d
16
+ SHA256 (pi-agent/src/harness/compaction/utils.ts) = 559c5915660a53a24aeca8ba9018be41f67aacb4ca1c40089e820c5881545827
17
+ SHA256 (pi-agent/src/harness/env/nodejs.ts) = 07f510286e412254ed12bcb7ca3e3e24d757b6d53fc76bb1f40ccec7d8c302af
18
+ SHA256 (pi-agent/src/harness/messages.ts) = 8630aa25733cdebf61ccc048dae3c93e6eab2b1cc414af2a00e37276478355ed
19
+ SHA256 (pi-agent/src/harness/prompt-templates.ts) = 81aee96ee83455d767b9388be2f51e9c271b6b1730cabb09c307a470c5e94fe0
20
+ SHA256 (pi-agent/src/harness/session/jsonl-repo.ts) = 6b2e679a44b70aab82639aade743d16c599704e0beed591bfd3b99f7b37f4598
21
+ SHA256 (pi-agent/src/harness/session/jsonl-storage.ts) = 2225e272c0ad2813de834e7faecc09fa8e065ee18a9c38842e83da98246b38a8
22
+ SHA256 (pi-agent/src/harness/session/memory-repo.ts) = ca40f7a3d51b77fe44dfe0520c20846255e08028bf99fd3afb836239a532b322
23
+ SHA256 (pi-agent/src/harness/session/memory-storage.ts) = cf9f78e88b7bdda862434bd5485f13b037c90061123b6d7a0774a9093504b3fc
24
+ SHA256 (pi-agent/src/harness/session/repo-utils.ts) = daf8b870a89399c259f850879cb0ebd93463adebfb79ccdacfe9050f8256b840
25
+ SHA256 (pi-agent/src/harness/session/session.ts) = 14f9623b300fe09b98d03bf940dc79f9f6b55217135fd2d0c9c9868bd39434af
26
+ SHA256 (pi-agent/src/harness/session/uuid.ts) = bf5ab460b3843dc497a6632b6a91e21af9fb1b2595ca9d45d93d9c232476f6e2
27
+ SHA256 (pi-agent/src/harness/skills.ts) = 96041f33a64660b2efcf32d23b5607daa66df44ffef33b0b1c9ddac1c4d56693
28
+ SHA256 (pi-agent/src/harness/system-prompt.ts) = a3a8f4e2e343562277d348e99762447131632aea963c9ee4633369e5d1a9e9f4
29
+ SHA256 (pi-agent/src/harness/types.ts) = 4c1bae2a31545246b74cac6efd7463f8c8e584083c9e1bb23a23d1ff39df779f
30
+ SHA256 (pi-agent/src/harness/utils/shell-output.ts) = 7449d6f119933b1c0a22b336f303675adbb529a460465617e527eaadbfc80ba6
31
+ SHA256 (pi-agent/src/harness/utils/truncate.ts) = e76c92247c1fc5c6d67c69c615bc509eecd703a6e326177a646ec0ab1d56decb
32
+ SHA256 (pi-agent/src/index.ts) = 9462120578a090d58dca0f28ef8af4d056f2d43b6516cd0ee596c91a2f840aef
33
+ SHA256 (pi-agent/src/node.ts) = 63d8dc9b22d93b3b1172ed1f1e83cc62bb370789f56f8dd31affb5c2a0a8dff3
34
+ SHA256 (pi-agent/src/proxy.ts) = 504a0c801264c91d5346893e2e77570d611bf748cd1d0d900564370b4afd97fb
35
+ SHA256 (pi-agent/src/types.ts) = 1247af46daf185be14846871c110259246008f1166982b672abad34f7b2c6022
36
+ SHA256 (pi-agent/test/agent-loop.test.ts) = 567a12ff9a4fa34622b4830eda501ae22d1629a09f8a8f7dd5e9710bbeab794b
37
+ SHA256 (pi-agent/test/agent.test.ts) = 501f535b30908ac8993873dfc77a9ffed52090f3419d8a758e35cf7c20533a01
38
+ SHA256 (pi-agent/test/e2e.test.ts) = 73d60e6e90f0e88805c3953bfaa93e27efcb8f64186cced226ccea469d1b6dee
39
+ SHA256 (pi-agent/test/harness/agent-harness-stream.test.ts) = cc4e7a9b744a809e9af8c5f77226358b5ae3a14e90483019a07581a5c76a6117
40
+ SHA256 (pi-agent/test/harness/agent-harness.test.ts) = 3914ff96ae93ff1a5a28f9c020c293078dc131be84a952a6a8fc9e42ab7585c5
41
+ SHA256 (pi-agent/test/harness/compaction.test.ts) = 6df83f072c9d7c5a9b5274062888bfa2f4c9165639f02b665795b398e5cfec81
42
+ SHA256 (pi-agent/test/harness/nodejs-env.test.ts) = 8d3eb536d6965181669025e9730d011d9351620de683a35059c63adefa61cfe5
43
+ SHA256 (pi-agent/test/harness/prompt-templates.test.ts) = a9b4834539edf0d9e89340c995f908490a6b2b9823af815460e0fadabd7b0e68
44
+ SHA256 (pi-agent/test/harness/repo.test.ts) = c56dc9a448bda5612c1b645552e2f6581d9e827509fb615b94a26c9fc4c18a13
45
+ SHA256 (pi-agent/test/harness/resource-formatting.test.ts) = 7bc3d164339f2642327a576a905389e12b7081bec77e4315712c9f7576115a15
46
+ SHA256 (pi-agent/test/harness/session-test-utils.ts) = bdc012094e8dc5dfc53309885f616e8136fdf0f4cb9f1c0b027663ff0bb342fe
47
+ SHA256 (pi-agent/test/harness/session-uuid.test.ts) = 6e7ac91166160d5a8643bca59f1b59f1de60a5a17424f6dacf39a11c8d9d08c8
48
+ SHA256 (pi-agent/test/harness/session.test.ts) = cd6c9c51180080c5b4791a4ab9e28fd843cf2a7053ae79edafe721abd69db327
49
+ SHA256 (pi-agent/test/harness/skills.test.ts) = 5cb717a1c0fdad7ce4a5ddea6c4d51aa91fc4a5863af4aaf543519f6a3f39af3
50
+ SHA256 (pi-agent/test/harness/storage.test.ts) = e9dc317eb6159623427adae36c55b59c78b417e57a9cc6168afc791102612bf2
51
+ SHA256 (pi-agent/test/harness/system-prompt.test.ts) = 40dafee3aedf176cd02c19c932fbc16442e016a5b29b254d7c76bd0197db3c5f
52
+ SHA256 (pi-agent/test/harness/truncate.test.ts) = 45eaa130c61d02dbbd7a0861cfcac6ce592c136decbcc1a7c0e8be117f23a55e
53
+ SHA256 (pi-agent/test/scratch/simple.ts) = 225766902e8c6e6e1829b59bf61dc793cfbaa8ac6df43494778fe6e7c0596db3
54
+ SHA256 (pi-agent/test/utils/calculate.ts) = 125727abe1b8c6380650f5180fa561fe52dc6858d6b8bf1ee5f3dfa2234b2d41
55
+ SHA256 (pi-agent/test/utils/get-current-time.ts) = 0192fa9720f3713c7ca6be54968c49f681eef6d01ea944cf418863b9c56d027b
56
+ SHA256 (pi-agent/tsconfig.build.json) = a298e6122b4fc4d958c929033a78cb2eb2f95a0123ce516d246d0481aeaee4a0
57
+ SHA256 (pi-agent/vitest.config.ts) = bd9d2fe6aeec2b28b13eb972c73d4e97feff28d4d183f49376eee8f351729b93
58
+ SHA256 (pi-agent/vitest.harness.config.ts) = c031af7542703dfd655e85424c35fd6f980fdb36dc4ccc067efc87b5d700b99b