akernel-runtime 0.1.7__tar.gz → 0.1.8__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.
- akernel_runtime-0.1.8/.github/release-notes/v0.1.8.md +14 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/CHANGELOG.md +10 -0
- {akernel_runtime-0.1.7/src/akernel_runtime.egg-info → akernel_runtime-0.1.8}/PKG-INFO +1 -1
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/packages/npm/akernel/package.json +1 -1
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/pyproject.toml +1 -1
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8/src/akernel_runtime.egg-info}/PKG-INFO +1 -1
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/akernel_runtime.egg-info/SOURCES.txt +1 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/__init__.py +1 -1
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/cli.py +51 -5
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/tests/test_runtime.py +1 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/.env.example +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/.github/pull_request_template.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/.github/release-notes/v0.1.0.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/.github/release-notes/v0.1.1.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/.github/release-notes/v0.1.2.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/.github/release-notes/v0.1.3.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/.github/release-notes/v0.1.4.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/.github/release-notes/v0.1.5.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/.github/release-notes/v0.1.6.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/.github/release-notes/v0.1.7.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/.github/workflows/ci.yml +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/.github/workflows/release.yml +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/CODE_OF_CONDUCT.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/CONTRIBUTING.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/LICENSE +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/MANIFEST.in +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/NOTICE +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/README.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/SECURITY.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/docs/00-vision.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/docs/01-architecture.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/docs/02-execution-plan.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/docs/03-cli-mvp.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/docs/04-evaluation.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/docs/05-local-wake.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/docs/06-skill-compiler.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/docs/07-release-and-ci.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/docs/08-open-source-plan.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/docs/09-product-roadmap.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/docs/10-benchmark-evidence.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/docs/11-publishing-setup.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/examples/benchmarks/phase2/01-routing.json +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/examples/benchmarks/phase2/02-memory.json +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/examples/benchmarks/phase2/03-budget-profiles.json +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/examples/benchmarks/scale/01-context-pressure.json +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/examples/benchmarks/scale/02-agent-editing.json +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/examples/benchmarks/scale/03-global-memory-marketplace.json +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/examples/evals/phase2.json +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/examples/marketplace/skills/index.json +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/examples/skills/context_budget.json +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/examples/skills/edit_file.json +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/examples/skills/markdown/context_budget.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/packages/npm/akernel/README.md +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/packages/npm/akernel/bin/akernel.js +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/scripts/install_remote.ps1 +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/scripts/release_check.ps1 +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/setup.cfg +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/setup.cmd +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/setup.ps1 +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/akernel_runtime.egg-info/dependency_links.txt +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/akernel_runtime.egg-info/entry_points.txt +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/akernel_runtime.egg-info/requires.txt +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/akernel_runtime.egg-info/top_level.txt +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/__main__.py +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/agent_reports.py +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/benchmarks.py +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/budget.py +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/context.py +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/evals.py +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/global_memory.py +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/loop.py +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/marketplace.py +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/marketplace_data/skills/context_budget.json +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/marketplace_data/skills/context_compaction.json +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/marketplace_data/skills/edit_file.json +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/marketplace_data/skills/index.json +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/marketplace_data/skills/long_task_planning.json +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/marketplace_data/skills/multi_file_bugfix.json +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/memory.py +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/models.py +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/planner.py +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/policy.py +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/project.py +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/providers.py +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/report_costs.py +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/runner.py +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/skills.py +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/state_writer.py +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/storage.py +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/tasks.py +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/text.py +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/tokenizer.py +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/tools.py +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/verifier.py +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/wake.cmd +0 -0
- {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/wake.ps1 +0 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Context Kernel v0.1.8
|
|
2
|
+
|
|
3
|
+
This patch fixes the default TUI rendering rhythm so chat turns no longer flood the terminal with repeated full-screen layouts.
|
|
4
|
+
|
|
5
|
+
## Highlights
|
|
6
|
+
|
|
7
|
+
- The startup workspace view still appears once.
|
|
8
|
+
- Each normal user message now appends only the user turn, compact status, and assistant result.
|
|
9
|
+
- Full redraw remains available through `/clear` or `AKERNEL_ALT_SCREEN=1`.
|
|
10
|
+
|
|
11
|
+
## Verification
|
|
12
|
+
|
|
13
|
+
- Added regression coverage to ensure normal TUI turns do not repeatedly print the full header.
|
|
14
|
+
- Ran the full Python test suite.
|
|
@@ -8,6 +8,16 @@ The project follows a pragmatic pre-1.0 changelog: breaking changes may occur, b
|
|
|
8
8
|
|
|
9
9
|
No changes yet.
|
|
10
10
|
|
|
11
|
+
## 0.1.8 - 2026-05-14
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- Changed the default TUI loop to render the full workspace view once, then append only incremental user/status/assistant updates for each turn.
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- Prevented normal chat turns from repeatedly printing the full fixed UI layout and filling the terminal scrollback.
|
|
20
|
+
|
|
11
21
|
## 0.1.7 - 2026-05-14
|
|
12
22
|
|
|
13
23
|
### Added
|
|
@@ -1257,10 +1257,10 @@ def run_chat_loop_tui(
|
|
|
1257
1257
|
break
|
|
1258
1258
|
except KeyboardInterrupt:
|
|
1259
1259
|
transcript.append({"role": "system", "title": "Interrupted", "text": "Keyboard interrupt received."})
|
|
1260
|
-
|
|
1260
|
+
render_chat_tui_update(workspace, task_id, args, transcript, last_report, pending_context, status="interrupted", state=state, clear=use_alt_screen)
|
|
1261
1261
|
break
|
|
1262
1262
|
if not request:
|
|
1263
|
-
|
|
1263
|
+
render_chat_tui_update(workspace, task_id, args, transcript, last_report, pending_context, status="ready", state=state, clear=use_alt_screen)
|
|
1264
1264
|
continue
|
|
1265
1265
|
lowered = request.lower()
|
|
1266
1266
|
if lowered in {"/exit", "/quit", "exit", "quit"}:
|
|
@@ -1283,14 +1283,15 @@ def run_chat_loop_tui(
|
|
|
1283
1283
|
state=state,
|
|
1284
1284
|
):
|
|
1285
1285
|
last_report = state.get("last_report")
|
|
1286
|
-
|
|
1286
|
+
render_chat_tui_update(workspace, task_id, args, transcript, last_report, pending_context, status="ready", state=state, clear=use_alt_screen)
|
|
1287
1287
|
continue
|
|
1288
1288
|
|
|
1289
1289
|
request_for_agent = merge_pending_context(request, pending_context)
|
|
1290
1290
|
pending_context.clear()
|
|
1291
1291
|
state["scroll_offset"] = 0
|
|
1292
1292
|
transcript.append({"role": "user", "title": "You", "text": request_for_agent})
|
|
1293
|
-
|
|
1293
|
+
render_chat_tui_message({"role": "user", "title": "You", "text": request_for_agent})
|
|
1294
|
+
render_chat_tui_status("running", args, pending_context)
|
|
1294
1295
|
last_report = AgentLoop(workspace).run(
|
|
1295
1296
|
request_for_agent,
|
|
1296
1297
|
provider_name=args.provider,
|
|
@@ -1308,7 +1309,8 @@ def run_chat_loop_tui(
|
|
|
1308
1309
|
expect_json=args.expect_json,
|
|
1309
1310
|
)
|
|
1310
1311
|
transcript.append({"role": "assistant", "title": "Assistant", "text": format_tui_report(last_report)})
|
|
1311
|
-
|
|
1312
|
+
render_chat_tui_message({"role": "assistant", "title": "Assistant", "text": format_tui_report(last_report)})
|
|
1313
|
+
render_chat_tui_status("ready", args, pending_context, last_report=last_report)
|
|
1312
1314
|
finally:
|
|
1313
1315
|
if use_alt_screen:
|
|
1314
1316
|
print("\033[?1049l", end="")
|
|
@@ -1485,6 +1487,50 @@ def render_chat_tui_screen(
|
|
|
1485
1487
|
print(prefix + screen + ("\n" if not clear else ""), end="")
|
|
1486
1488
|
|
|
1487
1489
|
|
|
1490
|
+
def render_chat_tui_update(
|
|
1491
|
+
workspace: Workspace,
|
|
1492
|
+
task_id: str,
|
|
1493
|
+
args: argparse.Namespace,
|
|
1494
|
+
transcript: list[dict[str, str]],
|
|
1495
|
+
last_report: dict[str, Any] | None,
|
|
1496
|
+
pending_context: list[str],
|
|
1497
|
+
*,
|
|
1498
|
+
status: str,
|
|
1499
|
+
state: dict[str, Any] | None = None,
|
|
1500
|
+
clear: bool = True,
|
|
1501
|
+
) -> None:
|
|
1502
|
+
if clear:
|
|
1503
|
+
render_chat_tui_screen(workspace, task_id, args, transcript, last_report, pending_context, status=status, state=state, clear=True)
|
|
1504
|
+
return
|
|
1505
|
+
if transcript:
|
|
1506
|
+
render_chat_tui_message(transcript[-1])
|
|
1507
|
+
render_chat_tui_status(status, args, pending_context, last_report=last_report)
|
|
1508
|
+
|
|
1509
|
+
|
|
1510
|
+
def render_chat_tui_message(item: dict[str, str]) -> None:
|
|
1511
|
+
width = chat_width()
|
|
1512
|
+
role = item.get("role", "system")
|
|
1513
|
+
title = item.get("title", role)
|
|
1514
|
+
label = tui_role_label(role, title)
|
|
1515
|
+
prefix = " " if role != "user" else "> "
|
|
1516
|
+
print("")
|
|
1517
|
+
print(chat_color(truncate_line(label, width), "cyan" if role == "system" else "green" if role == "assistant" else "yellow", bold=True))
|
|
1518
|
+
for line in wrap_plain(item.get("text", ""), width=max(20, width - len(prefix))).splitlines():
|
|
1519
|
+
print(truncate_line(prefix + line, width))
|
|
1520
|
+
|
|
1521
|
+
|
|
1522
|
+
def render_chat_tui_status(
|
|
1523
|
+
status: str,
|
|
1524
|
+
args: argparse.Namespace,
|
|
1525
|
+
pending_context: list[str],
|
|
1526
|
+
*,
|
|
1527
|
+
last_report: dict[str, Any] | None = None,
|
|
1528
|
+
) -> None:
|
|
1529
|
+
tokens = 0 if not last_report else last_report.get("totals", {}).get("total_tokens", 0)
|
|
1530
|
+
summary = f"{status} | provider {args.provider} | primary {primary_model(args)} | attached {len(pending_context)} | tokens {tokens}"
|
|
1531
|
+
print(chat_color(truncate_line(summary, chat_width()), "dim"))
|
|
1532
|
+
|
|
1533
|
+
|
|
1488
1534
|
def build_chat_tui_screen(
|
|
1489
1535
|
workspace: Workspace,
|
|
1490
1536
|
task_id: str,
|
|
@@ -1357,6 +1357,7 @@ class RuntimeTests(unittest.TestCase):
|
|
|
1357
1357
|
self.assertIn("Assistant", output)
|
|
1358
1358
|
self.assertIn("Mock agent response", output)
|
|
1359
1359
|
self.assertIn("bye", output)
|
|
1360
|
+
self.assertEqual(output.count("AKERNEL // READY"), 1)
|
|
1360
1361
|
|
|
1361
1362
|
def test_tui_screen_can_render_older_history_window(self) -> None:
|
|
1362
1363
|
with tempfile.TemporaryDirectory() as tmp:
|
|
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
|
{akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/examples/benchmarks/phase2/03-budget-profiles.json
RENAMED
|
File without changes
|
{akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/examples/benchmarks/scale/01-context-pressure.json
RENAMED
|
File without changes
|
{akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/examples/benchmarks/scale/02-agent-editing.json
RENAMED
|
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
|
{akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/akernel_runtime.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/akernel_runtime.egg-info/entry_points.txt
RENAMED
|
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
|