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.
Files changed (98) hide show
  1. akernel_runtime-0.1.8/.github/release-notes/v0.1.8.md +14 -0
  2. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/CHANGELOG.md +10 -0
  3. {akernel_runtime-0.1.7/src/akernel_runtime.egg-info → akernel_runtime-0.1.8}/PKG-INFO +1 -1
  4. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/packages/npm/akernel/package.json +1 -1
  5. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/pyproject.toml +1 -1
  6. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8/src/akernel_runtime.egg-info}/PKG-INFO +1 -1
  7. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/akernel_runtime.egg-info/SOURCES.txt +1 -0
  8. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/__init__.py +1 -1
  9. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/cli.py +51 -5
  10. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/tests/test_runtime.py +1 -0
  11. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/.env.example +0 -0
  12. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  13. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  14. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/.github/pull_request_template.md +0 -0
  15. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/.github/release-notes/v0.1.0.md +0 -0
  16. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/.github/release-notes/v0.1.1.md +0 -0
  17. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/.github/release-notes/v0.1.2.md +0 -0
  18. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/.github/release-notes/v0.1.3.md +0 -0
  19. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/.github/release-notes/v0.1.4.md +0 -0
  20. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/.github/release-notes/v0.1.5.md +0 -0
  21. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/.github/release-notes/v0.1.6.md +0 -0
  22. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/.github/release-notes/v0.1.7.md +0 -0
  23. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/.github/workflows/ci.yml +0 -0
  24. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/.github/workflows/release.yml +0 -0
  25. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/CODE_OF_CONDUCT.md +0 -0
  26. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/CONTRIBUTING.md +0 -0
  27. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/LICENSE +0 -0
  28. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/MANIFEST.in +0 -0
  29. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/NOTICE +0 -0
  30. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/README.md +0 -0
  31. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/SECURITY.md +0 -0
  32. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/docs/00-vision.md +0 -0
  33. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/docs/01-architecture.md +0 -0
  34. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/docs/02-execution-plan.md +0 -0
  35. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/docs/03-cli-mvp.md +0 -0
  36. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/docs/04-evaluation.md +0 -0
  37. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/docs/05-local-wake.md +0 -0
  38. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/docs/06-skill-compiler.md +0 -0
  39. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/docs/07-release-and-ci.md +0 -0
  40. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/docs/08-open-source-plan.md +0 -0
  41. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/docs/09-product-roadmap.md +0 -0
  42. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/docs/10-benchmark-evidence.md +0 -0
  43. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/docs/11-publishing-setup.md +0 -0
  44. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/examples/benchmarks/phase2/01-routing.json +0 -0
  45. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/examples/benchmarks/phase2/02-memory.json +0 -0
  46. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/examples/benchmarks/phase2/03-budget-profiles.json +0 -0
  47. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/examples/benchmarks/scale/01-context-pressure.json +0 -0
  48. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/examples/benchmarks/scale/02-agent-editing.json +0 -0
  49. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/examples/benchmarks/scale/03-global-memory-marketplace.json +0 -0
  50. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/examples/evals/phase2.json +0 -0
  51. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/examples/marketplace/skills/index.json +0 -0
  52. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/examples/skills/context_budget.json +0 -0
  53. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/examples/skills/edit_file.json +0 -0
  54. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/examples/skills/markdown/context_budget.md +0 -0
  55. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/packages/npm/akernel/README.md +0 -0
  56. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/packages/npm/akernel/bin/akernel.js +0 -0
  57. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/scripts/install_remote.ps1 +0 -0
  58. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/scripts/release_check.ps1 +0 -0
  59. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/setup.cfg +0 -0
  60. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/setup.cmd +0 -0
  61. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/setup.ps1 +0 -0
  62. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/akernel_runtime.egg-info/dependency_links.txt +0 -0
  63. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/akernel_runtime.egg-info/entry_points.txt +0 -0
  64. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/akernel_runtime.egg-info/requires.txt +0 -0
  65. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/akernel_runtime.egg-info/top_level.txt +0 -0
  66. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/__main__.py +0 -0
  67. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/agent_reports.py +0 -0
  68. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/benchmarks.py +0 -0
  69. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/budget.py +0 -0
  70. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/context.py +0 -0
  71. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/evals.py +0 -0
  72. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/global_memory.py +0 -0
  73. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/loop.py +0 -0
  74. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/marketplace.py +0 -0
  75. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/marketplace_data/skills/context_budget.json +0 -0
  76. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/marketplace_data/skills/context_compaction.json +0 -0
  77. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/marketplace_data/skills/edit_file.json +0 -0
  78. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/marketplace_data/skills/index.json +0 -0
  79. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/marketplace_data/skills/long_task_planning.json +0 -0
  80. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/marketplace_data/skills/multi_file_bugfix.json +0 -0
  81. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/memory.py +0 -0
  82. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/models.py +0 -0
  83. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/planner.py +0 -0
  84. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/policy.py +0 -0
  85. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/project.py +0 -0
  86. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/providers.py +0 -0
  87. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/report_costs.py +0 -0
  88. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/runner.py +0 -0
  89. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/skills.py +0 -0
  90. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/state_writer.py +0 -0
  91. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/storage.py +0 -0
  92. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/tasks.py +0 -0
  93. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/text.py +0 -0
  94. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/tokenizer.py +0 -0
  95. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/tools.py +0 -0
  96. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/src/context_kernel/verifier.py +0 -0
  97. {akernel_runtime-0.1.7 → akernel_runtime-0.1.8}/wake.cmd +0 -0
  98. {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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: akernel-runtime
3
- Version: 0.1.7
3
+ Version: 0.1.8
4
4
  Summary: Agent Kernel: a CLI-first context-native agent runtime prototype.
5
5
  Author: Context Kernel contributors
6
6
  License-Expression: Apache-2.0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@context-akernel/akernel",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "description": "npm launcher wrapper for the Context Kernel akernel CLI.",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://github.com/huanxin0825-ctrl/context-akernel#readme",
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "akernel-runtime"
7
- version = "0.1.7"
7
+ version = "0.1.8"
8
8
  description = "Agent Kernel: a CLI-first context-native agent runtime prototype."
9
9
  readme = "README.md"
10
10
  license = "Apache-2.0"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: akernel-runtime
3
- Version: 0.1.7
3
+ Version: 0.1.8
4
4
  Summary: Agent Kernel: a CLI-first context-native agent runtime prototype.
5
5
  Author: Context Kernel contributors
6
6
  License-Expression: Apache-2.0
@@ -23,6 +23,7 @@ wake.ps1
23
23
  .github/release-notes/v0.1.5.md
24
24
  .github/release-notes/v0.1.6.md
25
25
  .github/release-notes/v0.1.7.md
26
+ .github/release-notes/v0.1.8.md
26
27
  .github/workflows/ci.yml
27
28
  .github/workflows/release.yml
28
29
  docs/00-vision.md
@@ -1,3 +1,3 @@
1
1
  """Context Kernel CLI-first agent runtime prototype."""
2
2
 
3
- __version__ = "0.1.7"
3
+ __version__ = "0.1.8"
@@ -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
- render_chat_tui_screen(workspace, task_id, args, transcript, last_report, pending_context, status="interrupted", state=state, clear=use_alt_screen)
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
- render_chat_tui_screen(workspace, task_id, args, transcript, last_report, pending_context, status="ready", state=state, clear=use_alt_screen)
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
- render_chat_tui_screen(workspace, task_id, args, transcript, last_report, pending_context, status="ready", state=state, clear=use_alt_screen)
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
- render_chat_tui_screen(workspace, task_id, args, transcript, last_report, pending_context, status="running", state=state, clear=use_alt_screen)
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
- render_chat_tui_screen(workspace, task_id, args, transcript, last_report, pending_context, status="ready", state=state, clear=use_alt_screen)
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