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.
- {power_loop-3.2.0 → power_loop-3.3.0}/PKG-INFO +1 -1
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/__init__.py +1 -1
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/representation.py +16 -6
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop.egg-info/PKG-INFO +1 -1
- {power_loop-3.2.0 → power_loop-3.3.0}/LICENSE +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/README.md +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/_vendor/__init__.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/_vendor/llm_client/__init__.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/_vendor/llm_client/anthropic_factory.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/_vendor/llm_client/capabilities.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/_vendor/llm_client/interface.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/_vendor/llm_client/llm_factory.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/_vendor/llm_client/llm_tooling.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/_vendor/llm_client/llm_utils.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/_vendor/llm_client/multimodal.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/agent/__init__.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/agent/follow_up.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/agent/sink.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/agent/stateful_loop.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/agent/system_prompt.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/agent/types.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contracts/__init__.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contracts/errors.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contracts/event_payloads.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contracts/events.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contracts/handlers.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contracts/hook_contexts.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contracts/hooks.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contracts/messages.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contracts/protocols.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contracts/tools.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contrib/__init__.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contrib/_redact.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contrib/jsonl_sink.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contrib/logging_sink.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contrib/mcp.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contrib/metrics_sink.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/contrib/otel_sink.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/core/agent_context.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/core/events.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/core/hooks.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/core/phase.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/core/pipeline.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/core/runner.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/core/state.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/py.typed +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/blackboard.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/budget.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/cancellation.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/compact.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/env.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/exec_backend.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/fold.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/fold_adapter.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/history_projector.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/history_sanitize.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/human_input.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/memory.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/notes.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/provider.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/retry.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/runtime_state.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/session_store.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/skills.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/spec.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/store/__init__.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/store/backends/__init__.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/store/backends/mysql.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/store/backends/postgres.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/store/backends/sqlite.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/store/capabilities.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/store/db.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/store/dialect.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/store/factory.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/store/schema.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/store/store.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/store/types.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/structured.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/stub_provider.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/runtime/timers.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/tools/__init__.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/tools/blackboard.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/tools/default_manifest.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/tools/default_tools.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/tools/registry.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/tools/spawn_agent.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/workflow/__init__.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/workflow/api.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/workflow/engine.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/workflow/introspect.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/workflow/journal.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/workflow/result.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/workflow/resume.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/workflow/runner.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/workflow/spec.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/workflow/subprocess_executor.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/workflow/tool.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop/workflow/worker.py +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop.egg-info/SOURCES.txt +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop.egg-info/dependency_links.txt +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop.egg-info/requires.txt +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/power_loop.egg-info/top_level.txt +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/pyproject.toml +0 -0
- {power_loop-3.2.0 → power_loop-3.3.0}/setup.cfg +0 -0
|
@@ -15,7 +15,7 @@ Stability tiers
|
|
|
15
15
|
无版本承诺,可随时变更或删除。
|
|
16
16
|
"""
|
|
17
17
|
|
|
18
|
-
__version__ = "3.
|
|
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: ``{"
|
|
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
|
-
|
|
224
|
-
|
|
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
|
-
|
|
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
|
|
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)})
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|