@code-yeongyu/senpi-codemode 2026.9.22 → 2026.9.23-2

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/CHANGELOG.md CHANGED
@@ -12,6 +12,68 @@
12
12
 
13
13
  ### Removed
14
14
 
15
+ ## [2026.9.23-2] - 2026-09-23
16
+
17
+ ### Breaking Changes
18
+
19
+ ### Added
20
+
21
+ ### Changed
22
+
23
+ ### Fixed
24
+
25
+ ### Removed
26
+
27
+ ## [2026.9.23] - 2026-09-23
28
+
29
+ ### Breaking Changes
30
+
31
+ ### Added
32
+
33
+ ### Changed
34
+
35
+ ### Fixed
36
+
37
+ ### Removed
38
+
39
+ ## [2026.9.22-4] - 2026-09-22
40
+
41
+ ### Breaking Changes
42
+
43
+ ### Added
44
+
45
+ ### Changed
46
+
47
+ ### Fixed
48
+
49
+ ### Removed
50
+
51
+ ## [2026.9.22-3] - 2026-09-22
52
+
53
+ ### Breaking Changes
54
+
55
+ ### Added
56
+
57
+ ### Changed
58
+
59
+ ### Fixed
60
+
61
+ ### Removed
62
+
63
+ ## [2026.9.22-2] - 2026-09-22
64
+
65
+ ### Breaking Changes
66
+
67
+ ### Added
68
+
69
+ ### Changed
70
+
71
+ ### Fixed
72
+
73
+ - `wake_source_state` (live detached eval cells) is now published on the rpc channel as well as the in-process event bus, so out-of-process consumers see live cells the way the TUI footer does (#1943).
74
+
75
+ ### Removed
76
+
15
77
  ## [2026.9.22] - 2026-09-21
16
78
 
17
79
  ### Breaking Changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/senpi-codemode",
3
- "version": "2026.9.22",
3
+ "version": "2026.9.23-2",
4
4
  "description": "Source-only senpi extension package for codemode evaluation tools",
5
5
  "type": "module",
6
6
  "main": "./src/index.ts",
@@ -30,14 +30,14 @@
30
30
  },
31
31
  "dependencies": {
32
32
  "@babel/parser": "8.0.4",
33
- "@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.9.22",
33
+ "@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.9.23-2",
34
34
  "typebox": "1.3.34"
35
35
  },
36
36
  "peerDependencies": {
37
- "@code-yeongyu/senpi": "2026.9.22"
37
+ "@code-yeongyu/senpi": "2026.9.23-2"
38
38
  },
39
39
  "devDependencies": {
40
- "@code-yeongyu/senpi": "2026.9.22"
40
+ "@code-yeongyu/senpi": "2026.9.23-2"
41
41
  },
42
42
  "keywords": [
43
43
  "senpi",
package/src/index.ts CHANGED
@@ -114,6 +114,9 @@ export default function senpiCodemode(pi: CodemodeExtensionAPI, options: SenpiCo
114
114
  statusTicker.sync(entries);
115
115
  };
116
116
  const emitWakeSourceState = (state: WakeSourceState): void => {
117
+ // Same dual publication as the settle payload below: the in-process bus
118
+ // feeds the TUI footer, the rpc channel feeds out-of-process consumers.
119
+ pi.rpc?.emit(WAKE_SOURCE_STATE_EVENT, state);
117
120
  pi.events?.emit(WAKE_SOURCE_STATE_EVENT, state);
118
121
  };
119
122
  const registerEvalForRuntime = (
@@ -10,6 +10,7 @@ import {
10
10
  truncateToVisualLines,
11
11
  } from "@code-yeongyu/senpi";
12
12
  import { formatTruncationWarning, stripOutputNotice, type TruncationMeta } from "../output/output-meta.ts";
13
+ import { clampEvalSummary } from "./eval-request.ts";
13
14
  import {
14
15
  JSON_TREE_MAX_DEPTH_COLLAPSED,
15
16
  JSON_TREE_MAX_DEPTH_EXPANDED,
@@ -883,6 +884,13 @@ function resultMetadata(
883
884
  return [{ kind: "text", text: style(theme, "muted", metadata.join(" | ")) }];
884
885
  }
885
886
 
887
+ // The call renderer reads the assistant message's raw arguments, which now keep the provider's
888
+ // original summary (senpi#1472 detached preparation from the message). The advertised display
889
+ // limit is enforced here instead, idempotently: an already-clamped value is returned unchanged.
890
+ function displaySummary(summary: string | undefined): string | undefined {
891
+ return clampEvalSummary(summary);
892
+ }
893
+
886
894
  export function renderEvalCall(
887
895
  args: EvalToolRequest,
888
896
  theme: Theme | undefined,
@@ -905,7 +913,9 @@ export function renderEvalCall(
905
913
  const timeout = args.timeout === undefined ? "" : ` timeout ${args.timeout}s`;
906
914
  component.setBlocks([
907
915
  { kind: "text", text: style(theme, "toolTitle", `eval ${args.language}${reset}${timeout}`) },
908
- ...(args.summary === undefined ? [] : [{ kind: "text" as const, text: style(theme, "muted", args.summary) }]),
916
+ ...(displaySummary(args.summary) === undefined
917
+ ? []
918
+ : [{ kind: "text" as const, text: style(theme, "muted", displaySummary(args.summary) ?? "") }]),
909
919
  {
910
920
  kind: "text",
911
921
  text: style(theme, "mdCodeBlock", args.code.trim().length > 0 ? args.code : "..."),
@@ -930,7 +940,7 @@ export function renderEvalCall(
930
940
  };
931
941
  const cell: EvalCellResult = {
932
942
  index: 0,
933
- ...(args.summary === undefined ? {} : { summary: args.summary }),
943
+ ...(displaySummary(args.summary) === undefined ? {} : { summary: displaySummary(args.summary) ?? "" }),
934
944
  code: args.code,
935
945
  language: args.language,
936
946
  output: "",