@vincemakes/kiso-runtime 0.1.35 → 0.1.36

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 (2) hide show
  1. package/dist/run.js +26 -0
  2. package/package.json +5 -5
package/dist/run.js CHANGED
@@ -269,6 +269,14 @@ export class Run {
269
269
  e.type === "summarized" ||
270
270
  e.type === "model_output_abandoned");
271
271
  if (boundary !== undefined) {
272
+ // R-E 0.1.44 (verified against sentence 2): the draft detection
273
+ // stays text-only — a bare tool-call suffix [tool_call_end,
274
+ // permission_requested] with no text is the legal approval-panel
275
+ // pause (the Area 2 contract: the pending request binds and
276
+ // executes, pair-closed — the extensions-e2e gate). The finding's
277
+ // shapes all carry text, and the VOID SCOPE (what the marker
278
+ // covers) is the type filter at project.ts: model output dies
279
+ // with the draft, the framework's facts never do.
272
280
  const draft = scope.some((e) => (e.type === "text_delta" || e.type === "thinking") && e.seq > boundary.seq);
273
281
  if (draft) {
274
282
  yield log.append({
@@ -421,6 +429,24 @@ export class Run {
421
429
  // identity — the request's own, or the callId+proximity
422
430
  // fallback for old logs (the compat contract).
423
431
  const invocationSeq = pending.invocationSeq ?? callSeqOf(pending.callId, pending.seq);
432
+ // R-E 0.1.44 (sentence 3): a stored request whose invocation is
433
+ // VOIDED is expired — never re-presented, never executed (the
434
+ // dead-run expiry precedent above). The void ranges come from
435
+ // log.all — the marker THIS recovery appended is included. The
436
+ // receipt stays in the audit; only the presentation is gone.
437
+ // An identity-less request (an old log where neither the field nor
438
+ // the callId+proximity fallback yields a seq) is never proven
439
+ // voided — it keeps the pre-0.1.44 behavior.
440
+ const voided = invocationSeq !== undefined &&
441
+ log.all.some((e) => e.type === "model_output_abandoned" && invocationSeq > e.voidFromSeq && invocationSeq <= e.seq);
442
+ if (voided) {
443
+ yield log.append({
444
+ type: "permission_expired",
445
+ decisionId: pending.decisionId,
446
+ reason: "the invocation was abandoned with an incomplete draft — never re-presented, never executed",
447
+ });
448
+ continue;
449
+ }
424
450
  const decided = log.all.find((e) => e.type === "permission_decided" && e.decisionId === pending.decisionId);
425
451
  // round 4: paired by events NEWER than the request — a historical
426
452
  // same-callId execution from an earlier run must not count as THIS
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vincemakes/kiso-runtime",
3
- "version": "0.1.35",
3
+ "version": "0.1.36",
4
4
  "description": "kiso runtime — durable multi-turn agent sessions: AgentDefinition, AgentRuntime, AgentSession, Run, append-only JSONL store.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -21,11 +21,11 @@
21
21
  "test": "vitest run"
22
22
  },
23
23
  "dependencies": {
24
- "@vincemakes/kiso-core": "0.1.34"
24
+ "@vincemakes/kiso-core": "0.1.35"
25
25
  },
26
26
  "peerDependencies": {
27
- "@vincemakes/kiso-provider-anthropic": "0.1.35",
28
- "@vincemakes/kiso-provider-openai": "0.1.35"
27
+ "@vincemakes/kiso-provider-anthropic": "0.1.36",
28
+ "@vincemakes/kiso-provider-openai": "0.1.36"
29
29
  },
30
30
  "peerDependenciesMeta": {
31
31
  "@vincemakes/kiso-provider-anthropic": {
@@ -36,7 +36,7 @@
36
36
  }
37
37
  },
38
38
  "devDependencies": {
39
- "@vincemakes/kiso-evals": "0.1.35",
39
+ "@vincemakes/kiso-evals": "0.1.36",
40
40
  "@types/node": "^26.1.2",
41
41
  "typescript": "^5.7.2",
42
42
  "vitest": "^3.0.0"