power-loop 3.2.0__tar.gz → 3.3.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 (104) hide show
  1. {power_loop-3.2.0 → power_loop-3.3.0}/PKG-INFO +1 -1
  2. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/__init__.py +1 -1
  3. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/representation.py +16 -6
  4. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop.egg-info/PKG-INFO +1 -1
  5. {power_loop-3.2.0 → power_loop-3.3.0}/LICENSE +0 -0
  6. {power_loop-3.2.0 → power_loop-3.3.0}/README.md +0 -0
  7. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/_vendor/__init__.py +0 -0
  8. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/_vendor/llm_client/__init__.py +0 -0
  9. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/_vendor/llm_client/anthropic_factory.py +0 -0
  10. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/_vendor/llm_client/capabilities.py +0 -0
  11. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/_vendor/llm_client/interface.py +0 -0
  12. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/_vendor/llm_client/llm_factory.py +0 -0
  13. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/_vendor/llm_client/llm_tooling.py +0 -0
  14. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/_vendor/llm_client/llm_utils.py +0 -0
  15. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/_vendor/llm_client/multimodal.py +0 -0
  16. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/agent/__init__.py +0 -0
  17. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/agent/follow_up.py +0 -0
  18. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/agent/sink.py +0 -0
  19. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/agent/stateful_loop.py +0 -0
  20. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/agent/system_prompt.py +0 -0
  21. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/agent/types.py +0 -0
  22. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contracts/__init__.py +0 -0
  23. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contracts/errors.py +0 -0
  24. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contracts/event_payloads.py +0 -0
  25. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contracts/events.py +0 -0
  26. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contracts/handlers.py +0 -0
  27. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contracts/hook_contexts.py +0 -0
  28. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contracts/hooks.py +0 -0
  29. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contracts/messages.py +0 -0
  30. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contracts/protocols.py +0 -0
  31. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contracts/tools.py +0 -0
  32. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contrib/__init__.py +0 -0
  33. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contrib/_redact.py +0 -0
  34. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contrib/jsonl_sink.py +0 -0
  35. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contrib/logging_sink.py +0 -0
  36. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contrib/mcp.py +0 -0
  37. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contrib/metrics_sink.py +0 -0
  38. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contrib/otel_sink.py +0 -0
  39. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/core/agent_context.py +0 -0
  40. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/core/events.py +0 -0
  41. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/core/hooks.py +0 -0
  42. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/core/phase.py +0 -0
  43. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/core/pipeline.py +0 -0
  44. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/core/runner.py +0 -0
  45. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/core/state.py +0 -0
  46. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/py.typed +0 -0
  47. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/blackboard.py +0 -0
  48. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/budget.py +0 -0
  49. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/cancellation.py +0 -0
  50. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/compact.py +0 -0
  51. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/env.py +0 -0
  52. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/exec_backend.py +0 -0
  53. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/fold.py +0 -0
  54. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/fold_adapter.py +0 -0
  55. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/history_projector.py +0 -0
  56. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/history_sanitize.py +0 -0
  57. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/human_input.py +0 -0
  58. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/memory.py +0 -0
  59. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/notes.py +0 -0
  60. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/provider.py +0 -0
  61. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/retry.py +0 -0
  62. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/runtime_state.py +0 -0
  63. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/session_store.py +0 -0
  64. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/skills.py +0 -0
  65. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/spec.py +0 -0
  66. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/store/__init__.py +0 -0
  67. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/store/backends/__init__.py +0 -0
  68. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/store/backends/mysql.py +0 -0
  69. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/store/backends/postgres.py +0 -0
  70. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/store/backends/sqlite.py +0 -0
  71. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/store/capabilities.py +0 -0
  72. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/store/db.py +0 -0
  73. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/store/dialect.py +0 -0
  74. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/store/factory.py +0 -0
  75. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/store/schema.py +0 -0
  76. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/store/store.py +0 -0
  77. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/store/types.py +0 -0
  78. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/structured.py +0 -0
  79. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/stub_provider.py +0 -0
  80. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/timers.py +0 -0
  81. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/tools/__init__.py +0 -0
  82. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/tools/blackboard.py +0 -0
  83. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/tools/default_manifest.py +0 -0
  84. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/tools/default_tools.py +0 -0
  85. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/tools/registry.py +0 -0
  86. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/tools/spawn_agent.py +0 -0
  87. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/workflow/__init__.py +0 -0
  88. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/workflow/api.py +0 -0
  89. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/workflow/engine.py +0 -0
  90. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/workflow/introspect.py +0 -0
  91. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/workflow/journal.py +0 -0
  92. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/workflow/result.py +0 -0
  93. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/workflow/resume.py +0 -0
  94. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/workflow/runner.py +0 -0
  95. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/workflow/spec.py +0 -0
  96. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/workflow/subprocess_executor.py +0 -0
  97. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/workflow/tool.py +0 -0
  98. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/workflow/worker.py +0 -0
  99. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop.egg-info/SOURCES.txt +0 -0
  100. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop.egg-info/dependency_links.txt +0 -0
  101. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop.egg-info/requires.txt +0 -0
  102. {power_loop-3.2.0 → power_loop-3.3.0}/power_loop.egg-info/top_level.txt +0 -0
  103. {power_loop-3.2.0 → power_loop-3.3.0}/pyproject.toml +0 -0
  104. {power_loop-3.2.0 → power_loop-3.3.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: power-loop
3
- Version: 3.2.0
3
+ Version: 3.3.0
4
4
  Summary: Embeddable agent execution kernel — LLM loop, hooks, events, tools, dynamic sub-agents.
5
5
  Author-email: zhangran <zhangran24@126.com>
6
6
  License: MIT
@@ -15,7 +15,7 @@ Stability tiers
15
15
  无版本承诺,可随时变更或删除。
16
16
  """
17
17
 
18
- __version__ = "3.2.0"
18
+ __version__ = "3.3.0"
19
19
 
20
20
  # Public LLM contract (SDK-free) re-exported so callers (e.g. writing llm.* hooks or
21
21
  # a custom LLMService) don't reach into the internal vendored transport package (H3.4).
@@ -178,7 +178,8 @@ class VerbatimRepresentation:
178
178
  @dataclass
179
179
  class ProjectedRepresentation:
180
180
  """Generic, deterministic, no-LLM per-send projection. Each send →
181
- ``user`` row: ``{"human": [<user inputs>]}`` (a LIST — folded follow-ups preserved) +
181
+ ``user`` row: ``{"input": [<user/trigger inputs, verbatim>]}`` (a LIST — folded follow-ups
182
+ preserved; pre-3.3 rows used the key ``human``) +
182
183
  ``project`` row: ``{"tools": [...], "final_text": ...}``. Each tool call is summarized via its
183
184
  ``ToolDefinition.project`` hook when present, else a truncating fallback. Rendered to terse
184
185
  plain text with NO tool-protocol structure. (This is the old ``DefaultDeterministicProjector``
@@ -220,9 +221,13 @@ class ProjectedRepresentation:
220
221
  seqs = [r.seq for r in send_rows]
221
222
  rows: list[ProjectedRow] = []
222
223
  if users:
223
- rows.append(
224
- ProjectedRow("user", {"human": [_truncate(u.content, self.max_chars) for u in users]})
225
- )
224
+ # The INPUT side of a send (the user/trigger turn) is kept VERBATIM — it is the actual
225
+ # conversation content, it is short relative to tool output, and truncating it would drop
226
+ # context the model genuinely needs. Only the assistant's WORK (tool args/results +
227
+ # final_text) is compressed, which is where the token savings actually are. Key is
228
+ # ``input`` (the input turn — not necessarily a human; a multi-agent host feeds another
229
+ # agent's message here); pre-3.3 rows used ``human`` and are still read (see render()).
230
+ rows.append(ProjectedRow("user", {"input": [u.content for u in users]}))
226
231
  rows.append(
227
232
  ProjectedRow(
228
233
  "project",
@@ -269,9 +274,14 @@ class ProjectedRepresentation:
269
274
  for r in rows:
270
275
  si = r.send_index
271
276
  if r.kind == "user":
272
- humans = (r.content or {}).get("human") or []
277
+ content = r.content or {}
278
+ # ``input`` since 3.3; ``human`` is the pre-3.3 key — read both so old projection
279
+ # rows still render correctly after upgrade.
280
+ inputs = content.get("input")
281
+ if inputs is None:
282
+ inputs = content.get("human") or []
273
283
  tag = f"[#{si}] " if si is not None else ""
274
- out.append({"role": "user", "content": tag + "\n".join(str(h) for h in humans)})
284
+ out.append({"role": "user", "content": tag + "\n".join(str(h) for h in inputs)})
275
285
  elif r.kind == "project":
276
286
  tag = f"#{si} " if si is not None else ""
277
287
  out.append({"role": "assistant", "content": tag + self._render_project(r.content)})
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: power-loop
3
- Version: 3.2.0
3
+ Version: 3.3.0
4
4
  Summary: Embeddable agent execution kernel — LLM loop, hooks, events, tools, dynamic sub-agents.
5
5
  Author-email: zhangran <zhangran24@126.com>
6
6
  License: MIT
File without changes
File without changes
File without changes
File without changes