@vincemakes/kiso-code 0.16.5 → 0.16.7

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.
package/dist/chat.js CHANGED
@@ -508,10 +508,10 @@ submitTurn) {
508
508
  let prevTotal = null;
509
509
  let missed = null;
510
510
  // v3 §02: the recap line derives ENTIRELY from the local event stream
511
- // (zero tokens) wall seconds, tool/edit counts, usage, ctx left.
511
+ // (zero tokens). R3g: what it derives is the turn's COST — wall
512
+ // seconds, usage, ctx left. The turn's WORK is the fold line's, said
513
+ // once, where the work happened.
512
514
  const turnStart = Date.now();
513
- let toolCount = 0;
514
- let editCount = 0;
515
515
  // W14: the thinking event carries NO timestamp — the CLI wall-clocks
516
516
  // the thinking window: it opens at the first thinking event and closes
517
517
  // at the first non-thinking event (the fold needs the seconds).
@@ -561,9 +561,6 @@ submitTurn) {
561
561
  body.thinkingAppend(ev.text);
562
562
  break;
563
563
  case "tool_call_end":
564
- toolCount += 1;
565
- if (ev.name === "edit_file")
566
- editCount += 1;
567
564
  body.toolStart(ev.name, ev.callId, ev.input ?? {});
568
565
  // TUI2-R1 (C): the command is the sidecar key's other half —
569
566
  // remembered here, used when the execution actually starts.
@@ -762,6 +759,14 @@ submitTurn) {
762
759
  // honest notice rides after the partial answer, before the
763
760
  // recap (the truncation-guard philosophy: the cut is visible
764
761
  // in the scrollback, the model's own text intact).
762
+ // R3d: the TURN LIMIT is named. `max_turns` was the one
763
+ // terminal outcome that ended a run without saying so — the
764
+ // session simply stopped, mid-task, and read as a hang. A
765
+ // guardrail that fires silently is indistinguishable from a
766
+ // crash, which is the one thing this product must never be.
767
+ if (ev.outcome.kind === "max_turns") {
768
+ body.notice(`stopped at the ${ev.outcome.turns}-turn limit — the work is durable; say "continue" to carry on`);
769
+ }
765
770
  if (ev.outcome.kind === "max_tokens") {
766
771
  // R2 (law 1.1): the notice was wearing a box corner. A notice
767
772
  // is a sentence addressed to a human; it needs no edge.
@@ -769,8 +774,15 @@ submitTurn) {
769
774
  }
770
775
  bodyLog(renderRecap({
771
776
  seconds: Math.round((Date.now() - turnStart) / 1000),
772
- tools: toolCount,
773
- edits: editCount,
777
+ // R3g: the work terms are NOT passed — the fold line
778
+ // says what the turn did, once, where it happened and
779
+ // with the key that reopens it. This row is the turn's
780
+ // cost: how long it took and what it spent.
781
+ // R3g: `?? 80` is NOT enough — a PTY opened without a
782
+ // winsize reports 0 columns, and 0 is not nullish, so
783
+ // the recap cut itself down to one character. A width
784
+ // that is not a positive number is not a width.
785
+ width: process.stdout.columns > 0 ? process.stdout.columns : 80,
774
786
  usage,
775
787
  // R-C item 4: only an above-floor miss is surfaced —
776
788
  // the recap gains "· miss N" on the cache segment.
package/dist/index.js CHANGED
@@ -518,7 +518,12 @@ async function makeAgent(sessionId, input, modelFlag) {
518
518
  microcompact: { thresholdTokens: contextWindowTokens() / 2 },
519
519
  // E6: the run-start context policy — OFF unless env-armed (beats the microcompact default when both fire).
520
520
  ...(contextPolicy !== undefined ? { contextPolicy } : {}),
521
- maxTurns: 20,
521
+ // R3e (owner ruling, 2026-08-28): NO turn limit on an interactive
522
+ // session. This was `maxTurns: 20`, hardcoded on 2026-08-03 with no
523
+ // stated reason and no way to change it — and it was the thing that
524
+ // stopped a real 43-call session dead, mid-task, in silence. The
525
+ // field survives for the callers that want a bound (subagents, the
526
+ // SDK, `kiso run`); the interactive front door does not set one.
522
527
  // Modes: the five tiers join at the CHAIN HEAD, before the user/
523
528
  // project extensions (the deny>ask>allow composition keeps a user
524
529
  // deny winning over any mode tier — bypass included).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vincemakes/kiso-code",
3
- "version": "0.16.5",
3
+ "version": "0.16.7",
4
4
  "description": "kiso CLI — the durable coding agent that survives kill -9: kiso chat / kiso resume / kiso sessions.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -18,19 +18,19 @@
18
18
  "test": "vitest run"
19
19
  },
20
20
  "dependencies": {
21
- "@vincemakes/kiso-ask-ext": "0.16.5",
22
- "@vincemakes/kiso-core": "0.16.5",
23
- "@vincemakes/kiso-evals": "0.16.5",
24
- "@vincemakes/kiso-mcp-ext": "0.16.5",
25
- "@vincemakes/kiso-provider-anthropic": "0.16.5",
26
- "@vincemakes/kiso-provider-openai": "0.16.5",
27
- "@vincemakes/kiso-runtime": "0.16.5",
28
- "@vincemakes/kiso-skills-ext": "0.16.5",
29
- "@vincemakes/kiso-subagent-ext": "0.16.5",
30
- "@vincemakes/kiso-task-ext": "0.16.5",
31
- "@vincemakes/kiso-tools-node": "0.16.5",
32
- "@vincemakes/kiso-tui": "0.16.5",
33
- "@vincemakes/kiso-tui-cells": "0.16.5"
21
+ "@vincemakes/kiso-ask-ext": "0.16.7",
22
+ "@vincemakes/kiso-core": "0.16.7",
23
+ "@vincemakes/kiso-evals": "0.16.7",
24
+ "@vincemakes/kiso-mcp-ext": "0.16.7",
25
+ "@vincemakes/kiso-provider-anthropic": "0.16.7",
26
+ "@vincemakes/kiso-provider-openai": "0.16.7",
27
+ "@vincemakes/kiso-runtime": "0.16.7",
28
+ "@vincemakes/kiso-skills-ext": "0.16.7",
29
+ "@vincemakes/kiso-subagent-ext": "0.16.7",
30
+ "@vincemakes/kiso-task-ext": "0.16.7",
31
+ "@vincemakes/kiso-tools-node": "0.16.7",
32
+ "@vincemakes/kiso-tui": "0.16.7",
33
+ "@vincemakes/kiso-tui-cells": "0.16.7"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@types/node": "^26.1.2",