@code-yeongyu/senpi 2026.9.23-2 → 2026.9.23-3

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 (181) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/bundle/chunks/{app-server-command-UO3ODP6D.js → app-server-command-U5Y46LHO.js} +1 -1
  3. package/dist/bundle/chunks/{chunk-OLJ7LQJY.js → chunk-BBOQ5H4W.js} +1 -1
  4. package/dist/bundle/chunks/{chunk-7EH64T6E.js → chunk-ORCF262V.js} +2 -2
  5. package/dist/bundle/chunks/{chunk-BPHXJ4N2.js → chunk-R6F525XB.js} +1 -1
  6. package/dist/bundle/chunks/{chunk-LMO3WYKH.js → chunk-TH4PERSI.js} +131 -124
  7. package/dist/bundle/chunks/{chunk-IBHBWRC4.js → chunk-TUVSARCZ.js} +2 -2
  8. package/dist/bundle/chunks/{chunk-WJ2BGYFK.js → chunk-XPDV6SIX.js} +1 -1
  9. package/dist/bundle/chunks/{chunk-IDJUNOOR.js → chunk-Y4AJLTFT.js} +2 -2
  10. package/dist/bundle/chunks/{cli-main-LUQZADLN.js → cli-main-65WMMIRT.js} +1 -1
  11. package/dist/bundle/chunks/{interactive-host-runtime-A6PM52FT.js → interactive-host-runtime-DUNYT24Q.js} +1 -1
  12. package/dist/bundle/chunks/{interactive-mode-VR7QYMAE.js → interactive-mode-SCG5PQZ6.js} +1 -1
  13. package/dist/bundle/chunks/{list-tips-VGOIMT6W.js → list-tips-Z62FXPOJ.js} +1 -1
  14. package/dist/bundle/chunks/{multi-session-host-LYOVVA75.js → multi-session-host-QC6BZZNH.js} +1 -1
  15. package/dist/bundle/chunks/{package-manager-cli-OMEJACX6.js → package-manager-cli-23GULCVL.js} +1 -1
  16. package/dist/bundle/chunks/{rpc-mode-AKGJA73P.js → rpc-mode-ZQ4E6FFA.js} +1 -1
  17. package/dist/bundle/chunks/{session-picker-UE5LOM6W.js → session-picker-CO2ZK3EC.js} +1 -1
  18. package/dist/bundle/chunks/session-worker.js +202 -195
  19. package/dist/bundle/cli.js +1 -1
  20. package/dist/bundle/index.js +1 -1
  21. package/dist/bundle/rpc-entry.js +1 -1
  22. package/dist/core/extensions/builtin/anthropic-subscription/executable-model-support.d.ts +19 -0
  23. package/dist/core/extensions/builtin/anthropic-subscription/executable-model-support.d.ts.map +1 -0
  24. package/dist/core/extensions/builtin/anthropic-subscription/executable-model-support.js +76 -0
  25. package/dist/core/extensions/builtin/anthropic-subscription/executable-model-support.js.map +1 -0
  26. package/dist/core/extensions/builtin/anthropic-subscription/executable-path-lookup.d.ts +7 -2
  27. package/dist/core/extensions/builtin/anthropic-subscription/executable-path-lookup.d.ts.map +1 -1
  28. package/dist/core/extensions/builtin/anthropic-subscription/executable-path-lookup.js +28 -3
  29. package/dist/core/extensions/builtin/anthropic-subscription/executable-path-lookup.js.map +1 -1
  30. package/dist/core/extensions/builtin/anthropic-subscription/executable.d.ts +11 -0
  31. package/dist/core/extensions/builtin/anthropic-subscription/executable.d.ts.map +1 -1
  32. package/dist/core/extensions/builtin/anthropic-subscription/executable.js +31 -10
  33. package/dist/core/extensions/builtin/anthropic-subscription/executable.js.map +1 -1
  34. package/dist/core/extensions/builtin/anthropic-subscription/guidance.d.ts +2 -1
  35. package/dist/core/extensions/builtin/anthropic-subscription/guidance.d.ts.map +1 -1
  36. package/dist/core/extensions/builtin/anthropic-subscription/guidance.js +18 -2
  37. package/dist/core/extensions/builtin/anthropic-subscription/guidance.js.map +1 -1
  38. package/dist/core/extensions/builtin/anthropic-subscription/stream-guidance.d.ts +2 -1
  39. package/dist/core/extensions/builtin/anthropic-subscription/stream-guidance.d.ts.map +1 -1
  40. package/dist/core/extensions/builtin/anthropic-subscription/stream-guidance.js +2 -2
  41. package/dist/core/extensions/builtin/anthropic-subscription/stream-guidance.js.map +1 -1
  42. package/dist/core/extensions/builtin/anthropic-subscription/stream.d.ts.map +1 -1
  43. package/dist/core/extensions/builtin/anthropic-subscription/stream.js +5 -3
  44. package/dist/core/extensions/builtin/anthropic-subscription/stream.js.map +1 -1
  45. package/dist/core/extensions/builtin/goal/cache-warm-renderer.d.ts +6 -0
  46. package/dist/core/extensions/builtin/goal/cache-warm-renderer.d.ts.map +1 -1
  47. package/dist/core/extensions/builtin/goal/cache-warm-renderer.js +8 -0
  48. package/dist/core/extensions/builtin/goal/cache-warm-renderer.js.map +1 -1
  49. package/dist/core/extensions/builtin/goal/index.d.ts.map +1 -1
  50. package/dist/core/extensions/builtin/goal/index.js +4 -2
  51. package/dist/core/extensions/builtin/goal/index.js.map +1 -1
  52. package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts +3 -1
  53. package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts.map +1 -1
  54. package/dist/core/extensions/builtin/goal/monitor-continuation.js +32 -10
  55. package/dist/core/extensions/builtin/goal/monitor-continuation.js.map +1 -1
  56. package/dist/core/extensions/builtin/goal/parked-wait.d.ts +16 -0
  57. package/dist/core/extensions/builtin/goal/parked-wait.d.ts.map +1 -0
  58. package/dist/core/extensions/builtin/goal/parked-wait.js +54 -0
  59. package/dist/core/extensions/builtin/goal/parked-wait.js.map +1 -0
  60. package/dist/core/extensions/builtin/mcp/auth/commands-auth-dispatch.d.ts +1 -1
  61. package/dist/core/extensions/builtin/mcp/auth/commands-auth-dispatch.d.ts.map +1 -1
  62. package/dist/core/extensions/builtin/mcp/auth/commands-auth-dispatch.js +8 -2
  63. package/dist/core/extensions/builtin/mcp/auth/commands-auth-dispatch.js.map +1 -1
  64. package/dist/core/extensions/builtin/mcp/auth/commands-auth.d.ts.map +1 -1
  65. package/dist/core/extensions/builtin/mcp/auth/commands-auth.js +15 -4
  66. package/dist/core/extensions/builtin/mcp/auth/commands-auth.js.map +1 -1
  67. package/dist/core/extensions/builtin/mcp/commands.d.ts.map +1 -1
  68. package/dist/core/extensions/builtin/mcp/commands.js +2 -0
  69. package/dist/core/extensions/builtin/mcp/commands.js.map +1 -1
  70. package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.d.ts +5 -5
  71. package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.d.ts.map +1 -1
  72. package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js +16 -11
  73. package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js.map +1 -1
  74. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.d.ts +5 -5
  75. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.d.ts.map +1 -1
  76. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.js +9 -6
  77. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.js.map +1 -1
  78. package/dist/core/extensions/builtin/prompt-preset/test-decision.d.ts +2 -0
  79. package/dist/core/extensions/builtin/prompt-preset/test-decision.d.ts.map +1 -0
  80. package/dist/core/extensions/builtin/prompt-preset/test-decision.js +5 -0
  81. package/dist/core/extensions/builtin/prompt-preset/test-decision.js.map +1 -0
  82. package/dist/core/extensions/index.d.ts +1 -1
  83. package/dist/core/extensions/index.d.ts.map +1 -1
  84. package/dist/core/extensions/index.js.map +1 -1
  85. package/dist/core/extensions/loader.d.ts.map +1 -1
  86. package/dist/core/extensions/loader.js +6 -1
  87. package/dist/core/extensions/loader.js.map +1 -1
  88. package/dist/core/extensions/runner.d.ts +3 -1
  89. package/dist/core/extensions/runner.d.ts.map +1 -1
  90. package/dist/core/extensions/runner.js +5 -0
  91. package/dist/core/extensions/runner.js.map +1 -1
  92. package/dist/core/extensions/types.d.ts +10 -1
  93. package/dist/core/extensions/types.d.ts.map +1 -1
  94. package/dist/core/extensions/types.js.map +1 -1
  95. package/dist/core/model-config.d.ts +1 -0
  96. package/dist/core/model-config.d.ts.map +1 -1
  97. package/dist/core/model-config.js +26 -20
  98. package/dist/core/model-config.js.map +1 -1
  99. package/dist/core/models-json-migration.d.ts +30 -0
  100. package/dist/core/models-json-migration.d.ts.map +1 -0
  101. package/dist/core/models-json-migration.js +257 -0
  102. package/dist/core/models-json-migration.js.map +1 -0
  103. package/dist/core/output-guard.d.ts +2 -0
  104. package/dist/core/output-guard.d.ts.map +1 -1
  105. package/dist/core/output-guard.js +31 -0
  106. package/dist/core/output-guard.js.map +1 -1
  107. package/dist/core/settings-manager.d.ts +4 -0
  108. package/dist/core/settings-manager.d.ts.map +1 -1
  109. package/dist/core/settings-manager.js +16 -6
  110. package/dist/core/settings-manager.js.map +1 -1
  111. package/dist/core/settings-overrides.d.ts +8 -0
  112. package/dist/core/settings-overrides.d.ts.map +1 -0
  113. package/dist/core/settings-overrides.js +28 -0
  114. package/dist/core/settings-overrides.js.map +1 -0
  115. package/dist/index.d.ts +1 -1
  116. package/dist/index.d.ts.map +1 -1
  117. package/dist/index.js.map +1 -1
  118. package/dist/modes/interactive/components/assistant-message.d.ts +2 -0
  119. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  120. package/dist/modes/interactive/components/assistant-message.js +4 -0
  121. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  122. package/dist/modes/interactive/components/custom-entry.d.ts +10 -1
  123. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
  124. package/dist/modes/interactive/components/custom-entry.js +22 -0
  125. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  126. package/dist/modes/interactive/components/exploration-call.d.ts +12 -0
  127. package/dist/modes/interactive/components/exploration-call.d.ts.map +1 -0
  128. package/dist/modes/interactive/components/exploration-call.js +41 -0
  129. package/dist/modes/interactive/components/exploration-call.js.map +1 -0
  130. package/dist/modes/interactive/components/exploration-group.d.ts +19 -0
  131. package/dist/modes/interactive/components/exploration-group.d.ts.map +1 -0
  132. package/dist/modes/interactive/components/exploration-group.js +89 -0
  133. package/dist/modes/interactive/components/exploration-group.js.map +1 -0
  134. package/dist/modes/interactive/components/exploration-transcript-container.d.ts +18 -0
  135. package/dist/modes/interactive/components/exploration-transcript-container.d.ts.map +1 -0
  136. package/dist/modes/interactive/components/exploration-transcript-container.js +67 -0
  137. package/dist/modes/interactive/components/exploration-transcript-container.js.map +1 -0
  138. package/dist/modes/interactive/components/tool-execution.d.ts +7 -1
  139. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  140. package/dist/modes/interactive/components/tool-execution.js +4 -0
  141. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  142. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  143. package/dist/modes/interactive/interactive-mode.js +24 -35
  144. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  145. package/dist/modes/interactive/replay-assistant-tools.d.ts +14 -0
  146. package/dist/modes/interactive/replay-assistant-tools.d.ts.map +1 -0
  147. package/dist/modes/interactive/replay-assistant-tools.js +33 -0
  148. package/dist/modes/interactive/replay-assistant-tools.js.map +1 -0
  149. package/dist/modes/interactive/tool-progress.d.ts +2 -0
  150. package/dist/modes/interactive/tool-progress.d.ts.map +1 -1
  151. package/dist/modes/interactive/tool-progress.js +5 -2
  152. package/dist/modes/interactive/tool-progress.js.map +1 -1
  153. package/dist/modes/interactive/tui-renderer.d.ts.map +1 -1
  154. package/dist/modes/interactive/tui-renderer.js +6 -1
  155. package/dist/modes/interactive/tui-renderer.js.map +1 -1
  156. package/docs/extensions.md +8 -0
  157. package/docs/mcp.md +9 -6
  158. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +16 -0
  159. package/node_modules/@code-yeongyu/senpi-codemode/README.md +10 -8
  160. package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
  161. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/display-code.ts +145 -0
  162. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-request.ts +7 -12
  163. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool.ts +2 -2
  164. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/render.ts +34 -16
  165. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/types.ts +1 -4
  166. package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
  167. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  168. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  169. package/node_modules/@earendil-works/pi-ai/package.json +2 -2
  170. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  171. package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
  172. package/node_modules/@earendil-works/pi-tui/dist/stderr-observer.d.ts +3 -0
  173. package/node_modules/@earendil-works/pi-tui/dist/stderr-observer.d.ts.map +1 -0
  174. package/node_modules/@earendil-works/pi-tui/dist/stderr-observer.js +14 -0
  175. package/node_modules/@earendil-works/pi-tui/dist/stderr-observer.js.map +1 -0
  176. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts +4 -1
  177. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
  178. package/node_modules/@earendil-works/pi-tui/dist/terminal.js +8 -12
  179. package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
  180. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  181. package/package.json +7 -7
@@ -10,7 +10,8 @@ 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
+ import { displayCode } from "./display-code.ts";
14
+ import { normalizeEvalSummary } from "./eval-request.ts";
14
15
  import {
15
16
  JSON_TREE_MAX_DEPTH_COLLAPSED,
16
17
  JSON_TREE_MAX_DEPTH_EXPANDED,
@@ -65,6 +66,7 @@ type RenderBlock =
65
66
  | { readonly kind: "dynamic"; readonly render: (width: number) => readonly string[] };
66
67
 
67
68
  const CODE_PREVIEW_LINES = 4;
69
+ const SUMMARY_PREVIEW_LINES = 3;
68
70
  const OUTPUT_PREVIEW_LINES = 8;
69
71
  const STATUS_PREVIEW_COUNT = 3;
70
72
  const SPINNER_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"] as const;
@@ -183,6 +185,22 @@ function renderAllVisualLines(text: string, width: number): string[] {
183
185
  return truncateToVisualLines(text, Number.POSITIVE_INFINITY, width).visualLines.map((line) => line.trimEnd());
184
186
  }
185
187
 
188
+ // A summary has no length limit, so a collapsed block shows its first lines and marks the cut.
189
+ function summaryVisualLines(summary: string, width: number, expanded: boolean): string[] {
190
+ const lines = renderAllVisualLines(summary, width);
191
+ if (expanded || lines.length <= SUMMARY_PREVIEW_LINES) return lines;
192
+ const kept = renderAllVisualLines(summary, Math.max(1, width - 1)).slice(0, SUMMARY_PREVIEW_LINES);
193
+ kept[SUMMARY_PREVIEW_LINES - 1] = `${kept[SUMMARY_PREVIEW_LINES - 1] ?? ""}\u2026`;
194
+ return kept;
195
+ }
196
+
197
+ function summaryBlock(summary: string, theme: Theme | undefined, expanded: boolean): RenderBlock {
198
+ return {
199
+ kind: "dynamic",
200
+ render: (width) => summaryVisualLines(summary, width, expanded).map((line) => style(theme, "muted", line)),
201
+ };
202
+ }
203
+
186
204
  function renderTextBlock(block: Extract<RenderBlock, { kind: "text" }>, width: number): string[] {
187
205
  if (block.maxVisualLines === undefined) return renderAllVisualLines(block.text, width);
188
206
  const result = truncateToVisualLines(block.text, block.maxVisualLines, width);
@@ -287,7 +305,7 @@ function languageForHighlighter(language: EvalLanguage): "python" | "javascript"
287
305
 
288
306
  function highlightedCode(code: string, language: EvalLanguage, theme: Theme | undefined): string {
289
307
  const normalizedCode = code.trim().length > 0 ? code : "...";
290
- const lines = highlightCode(normalizedCode, languageForHighlighter(language));
308
+ const lines = highlightCode(displayCode(normalizedCode, language), languageForHighlighter(language));
291
309
  return (theme === undefined ? lines.map((line) => line.replace(/\u001b\[[0-9;]*m/gu, "")) : lines).join("\n");
292
310
  }
293
311
 
@@ -619,11 +637,9 @@ function renderCell(cell: EvalCellResult, environment: RenderEnvironment, badges
619
637
  if (cell.summary !== undefined) {
620
638
  appendLines(
621
639
  lines,
622
- renderPrefixed(style(environment.theme, "muted", cell.summary), environment, {
623
- prefix: "│ ",
624
- continuation: "│ ",
625
- color: "muted",
626
- }),
640
+ summaryVisualLines(cell.summary, Math.max(1, environment.width - 2), environment.expanded).map(
641
+ (line) => `${style(environment.theme, "muted", "│ ")}${style(environment.theme, "muted", line)}`,
642
+ ),
627
643
  );
628
644
  }
629
645
  const innerWidth = Math.max(1, environment.width - 2);
@@ -884,11 +900,11 @@ function resultMetadata(
884
900
  return [{ kind: "text", text: style(theme, "muted", metadata.join(" | ")) }];
885
901
  }
886
902
 
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.
903
+ // The call renderer reads the assistant message's raw arguments, which keep the provider's
904
+ // original summary (senpi#1472 detached preparation from the message), so it normalizes here,
905
+ // idempotently: an already-normalized value is returned unchanged.
890
906
  function displaySummary(summary: string | undefined): string | undefined {
891
- return clampEvalSummary(summary);
907
+ return normalizeEvalSummary(summary);
892
908
  }
893
909
 
894
910
  export function renderEvalCall(
@@ -915,10 +931,14 @@ export function renderEvalCall(
915
931
  { kind: "text", text: style(theme, "toolTitle", `eval ${args.language}${reset}${timeout}`) },
916
932
  ...(displaySummary(args.summary) === undefined
917
933
  ? []
918
- : [{ kind: "text" as const, text: style(theme, "muted", displaySummary(args.summary) ?? "") }]),
934
+ : [summaryBlock(displaySummary(args.summary) ?? "", theme, context.expanded)]),
919
935
  {
920
936
  kind: "text",
921
- text: style(theme, "mdCodeBlock", args.code.trim().length > 0 ? args.code : "..."),
937
+ text: style(
938
+ theme,
939
+ "mdCodeBlock",
940
+ args.code.trim().length > 0 ? displayCode(args.code, args.language) : "...",
941
+ ),
922
942
  maxVisualLines: context.expanded ? undefined : CODE_PREVIEW_LINES,
923
943
  collapseKind: "code",
924
944
  theme,
@@ -1006,9 +1026,7 @@ export function renderEvalResult(
1006
1026
  const status = resultStatus(details, options, context.isError);
1007
1027
  const blocks: RenderBlock[] = [
1008
1028
  { kind: "text", text: resultHeader(details, status, theme) },
1009
- ...(details?.summary === undefined
1010
- ? []
1011
- : [{ kind: "text" as const, text: style(theme, "muted", details.summary) }]),
1029
+ ...(details?.summary === undefined ? [] : [summaryBlock(details.summary, theme, expanded)]),
1012
1030
  ...resultMetadata(details, options, theme, status),
1013
1031
  { kind: "blank" },
1014
1032
  ];
@@ -17,8 +17,6 @@ export function enabledLanguageList(enabled: EnabledEvalLanguages): EvalLanguage
17
17
  return evalLanguageOrder.filter((language) => enabled[language]);
18
18
  }
19
19
 
20
- export const EVAL_SUMMARY_MAX_LENGTH = 80;
21
-
22
20
  /** The deadlines the schema teaches the model; every number comes from the resolved settings. */
23
21
  export interface EvalDeadlineSeconds {
24
22
  readonly runBudgetSeconds: number;
@@ -79,9 +77,8 @@ function evalInputProperties<Language extends TSchema>(languageSchema: Language,
79
77
  code: Type.Optional(Type.String({ description: "Cell body, verbatim." })),
80
78
  summary: Type.Optional(
81
79
  Type.String({
82
- maxLength: EVAL_SUMMARY_MAX_LENGTH,
83
80
  description:
84
- "REQUIRED for run. ONE line in the USER'S conversational language (Korean conversation -> Korean summary) stating WHAT this cell does and FOR WHAT PURPOSE; shown in the TUI while the cell runs. Longer values are force-truncated to 80 chars.",
81
+ "REQUIRED for run. One line in the language the user writes in: a progress update saying what you are doing and why, not a label for the code; shown in the TUI while the cell runs.",
85
82
  }),
86
83
  ),
87
84
  timeout: Type.Optional(Type.Number({ minimum: 1, description: timeoutFieldDescription(deadlines) })),
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@earendil-works/pi-agent-core",
3
- "version": "2026.9.23-2",
3
+ "version": "2026.9.23-3",
4
4
  "description": "General-purpose agent with transport abstraction, state management, and attachment support",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -57,8 +57,8 @@
57
57
  },
58
58
  "dependencies": {
59
59
  "@earendil-works/chord": "0.85.1",
60
- "@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.9.23-2",
61
- "@earendil-works/pi-telemetry": "npm:@code-yeongyu/senpi-telemetry@2026.9.23-2",
60
+ "@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.9.23-3",
61
+ "@earendil-works/pi-telemetry": "npm:@code-yeongyu/senpi-telemetry@2026.9.23-3",
62
62
  "diff": "9.0.0",
63
63
  "ignore": "7.0.9",
64
64
  "typebox": "1.3.34",
@@ -1 +1 @@
1
- {"schemaVersion":3,"generatedAt":"2026-09-23T04:52:53.179Z","structureHash":"08c36e7cab8b6a38f3baae6c7d97294e83c7fb660bcad404a164544e0ebdab22","files":{"alibaba-token-plan.json":"3a9c1be76d47459371e9fa2feeffc31e7edbbfec65fa9cc41236988efc4cf6d9","amazon-bedrock.json":"576881d1e56bec98f8a608bab9e654718dedaaa07bcd60d36afc4b65cc028aba","ant-ling.json":"4979fe79d99ed97382d7ce40170c6132e932e77906de1eb54464c042e7d63633","anthropic.json":"f9db437d92449fb860a2d457a6019cdfd51c11180c08df2b5f14d75ade773953","azure-openai-responses.json":"d70ff10410e6dd8eacb4a53b9fe887be836562cbb4b74eaee4f28bdbc4ac0732","bai.json":"2b12b15bd43462e60711944dd7283db8676611d9d76c82c2a01f64913e16a67e","baseten.json":"d155c434294b5167244cffb6dea6793f9669e91e8ab65b564f9510d81b330e37","cerebras.json":"9eaa554e1b02f3665f8f63e6432d253bf81351af7c72001054dd8108aa528a52","chatgpt-subscription.json":"57d1c9c6e1394549ad2e7c2170770463bb13009c060acddf23b65e41b6ba251b","cloudflare-ai-gateway.json":"a2b9fa9b7bc78df3459a9c53282a9c2f715b7ce703ae0d09c59bec0a6841af49","cloudflare-workers-ai.json":"8ee15540a01cf79d0e4063c493ae3c436af2fc1d456f9faf1b066418247183e9","deepseek.json":"b5f9693ec641e9a957dc5f7a22042b3bb928bac3d7268406619b6f18e21c4b83","fireworks.json":"6283651d25a8861e7d42fe2bdb1cb7dd80802811dfaf61e40c11cc813408c294","github-copilot.json":"5c9fc5b1b553a26aa7bc843a3e36fa14cf220d528ecd89528c601c5090c88a2d","google-vertex.json":"e1631109172dc1f7d7977570420a5bb86258bdd1088427e244a2c51545c4f24d","google.json":"7619bf03edd2a7acb06a2274a14b13c3a61354288abe029a758401d4de36a8fd","groq.json":"e4728fd72e358cd8f25e9a518e9b49a521ef44523d3debe38a7db9e0663c4077","huggingface.json":"2f93082144a7b2a1cbf79148244ce7559e0428d6310c5eb0648bca89b15a8b4b","minimax-cn.json":"65d37e55a6d9585855f94b3fb7739308d107fe248ebd9e1001d1c5d4606ad2c4","minimax.json":"c7dc5765995ae77242916430929c7cc9a782589f7e483e13f7e01663190d028e","mistral.json":"be522597b22bceeb0bb9a0ba1781647649ffd19637d0c8e67b056d7b0ec33d52","moonshotai-cn.json":"c4e1801b5dfd61bebcaa33cbfc5ed0c69df14a3bee37da218a558668d817864e","moonshotai.json":"3dab637e7e2648792c786157f85f29026b93393f7098b77593c1180928d371c9","nvidia.json":"6493e09b5db8b8fe9c8fae5bc15dc287645f37f83a4ed3a1ad1181e5830b5ff7","openai.json":"c53d456ff9e0dfd17c936e11b6fe8b86ecad12bc47430596b381ada9be0a3cdb","opencode-go.json":"64ea73012b153ef5d618663b6b542d527e43383e63b6b49f5961b310508c41cd","opencode.json":"56af2b79a8fdf7f911737c2d3426c17c6ae84f40873c54a30a00530d30bbb740","opengateway.json":"0c36520bba5118b12aafa0fb367c8c57a57d1a2c859f4b4c39f1ef051c0648c3","openrouter.json":"5dbf7ace6e307e1d6f5a83c9f99838dcba72fa141b6cc01f15d61c072658d604","qwen-token-plan-cn.json":"4bf520ed38e5c3045680d2ec2816fa8a69079dbe97f7b929767a63172288da6b","qwen-token-plan-individual.json":"eb040e78595853e980011308b1bf9caacae6dc8a91abbac5ffebd402515dd2a6","qwen-token-plan.json":"a5c67213745329ec3ba79f712f31c1c32a781d7ffb8c04f9819f36c27672531f","together.json":"927c707d06f2236cdab13f14c870fb58bce0614ba7287bbcd57cc9fd66d191ed","venice.json":"b58d7e9dca552c1df17f8c2b0da71fd81e0bc5abdccde1393dcf37c4909076fb","vercel-ai-gateway.json":"5caa8135a9a4da65265729ff3a9f33ef2ea17cf4f8e33d7ce43f3ba03c10de96","xai.json":"9b23faa5218e966a17108c05d2498a617ade1eae9b0d0684284c77d67949a3f1","xiaomi-token-plan-ams.json":"7df74a255259fc1d5be8e682c3ffb0908eaaf0af711f6433dedcf345ce3e8393","xiaomi-token-plan-cn.json":"7dc672723d5b37e5b92605752f74f46f44eba10be2b0cb959790260b9e0c2a4e","xiaomi-token-plan-sgp.json":"69b333b158be038459a511a673f4536a5b03d4931c3119339f1ac741bc03d502","xiaomi.json":"333299657f211ad9edac0f3d4298b7e5776626914c9c80e22305a87533f23966","zai-coding-cn.json":"69c572aa75104f16ccbddbaace60c267f4bcc74f86d34891ca43110d312fb1ad","zai.json":"15c8182a88e58bdc1b1c3eb0603c690475342c8a826ceddfe9af1b36b28345ee"}}
1
+ {"schemaVersion":3,"generatedAt":"2026-09-23T08:43:07.342Z","structureHash":"08c36e7cab8b6a38f3baae6c7d97294e83c7fb660bcad404a164544e0ebdab22","files":{"alibaba-token-plan.json":"3a9c1be76d47459371e9fa2feeffc31e7edbbfec65fa9cc41236988efc4cf6d9","amazon-bedrock.json":"576881d1e56bec98f8a608bab9e654718dedaaa07bcd60d36afc4b65cc028aba","ant-ling.json":"4979fe79d99ed97382d7ce40170c6132e932e77906de1eb54464c042e7d63633","anthropic.json":"f9db437d92449fb860a2d457a6019cdfd51c11180c08df2b5f14d75ade773953","azure-openai-responses.json":"d70ff10410e6dd8eacb4a53b9fe887be836562cbb4b74eaee4f28bdbc4ac0732","bai.json":"2b12b15bd43462e60711944dd7283db8676611d9d76c82c2a01f64913e16a67e","baseten.json":"d155c434294b5167244cffb6dea6793f9669e91e8ab65b564f9510d81b330e37","cerebras.json":"9eaa554e1b02f3665f8f63e6432d253bf81351af7c72001054dd8108aa528a52","chatgpt-subscription.json":"57d1c9c6e1394549ad2e7c2170770463bb13009c060acddf23b65e41b6ba251b","cloudflare-ai-gateway.json":"a2b9fa9b7bc78df3459a9c53282a9c2f715b7ce703ae0d09c59bec0a6841af49","cloudflare-workers-ai.json":"8ee15540a01cf79d0e4063c493ae3c436af2fc1d456f9faf1b066418247183e9","deepseek.json":"b5f9693ec641e9a957dc5f7a22042b3bb928bac3d7268406619b6f18e21c4b83","fireworks.json":"6283651d25a8861e7d42fe2bdb1cb7dd80802811dfaf61e40c11cc813408c294","github-copilot.json":"5c9fc5b1b553a26aa7bc843a3e36fa14cf220d528ecd89528c601c5090c88a2d","google-vertex.json":"e1631109172dc1f7d7977570420a5bb86258bdd1088427e244a2c51545c4f24d","google.json":"7619bf03edd2a7acb06a2274a14b13c3a61354288abe029a758401d4de36a8fd","groq.json":"e4728fd72e358cd8f25e9a518e9b49a521ef44523d3debe38a7db9e0663c4077","huggingface.json":"2f93082144a7b2a1cbf79148244ce7559e0428d6310c5eb0648bca89b15a8b4b","minimax-cn.json":"65d37e55a6d9585855f94b3fb7739308d107fe248ebd9e1001d1c5d4606ad2c4","minimax.json":"c7dc5765995ae77242916430929c7cc9a782589f7e483e13f7e01663190d028e","mistral.json":"be522597b22bceeb0bb9a0ba1781647649ffd19637d0c8e67b056d7b0ec33d52","moonshotai-cn.json":"c4e1801b5dfd61bebcaa33cbfc5ed0c69df14a3bee37da218a558668d817864e","moonshotai.json":"3dab637e7e2648792c786157f85f29026b93393f7098b77593c1180928d371c9","nvidia.json":"6493e09b5db8b8fe9c8fae5bc15dc287645f37f83a4ed3a1ad1181e5830b5ff7","openai.json":"c53d456ff9e0dfd17c936e11b6fe8b86ecad12bc47430596b381ada9be0a3cdb","opencode-go.json":"64ea73012b153ef5d618663b6b542d527e43383e63b6b49f5961b310508c41cd","opencode.json":"56af2b79a8fdf7f911737c2d3426c17c6ae84f40873c54a30a00530d30bbb740","opengateway.json":"0c36520bba5118b12aafa0fb367c8c57a57d1a2c859f4b4c39f1ef051c0648c3","openrouter.json":"1973a5527ec47b4c60a19f25117643d86e009e10802c83aed21dbace9814c86a","qwen-token-plan-cn.json":"4bf520ed38e5c3045680d2ec2816fa8a69079dbe97f7b929767a63172288da6b","qwen-token-plan-individual.json":"eb040e78595853e980011308b1bf9caacae6dc8a91abbac5ffebd402515dd2a6","qwen-token-plan.json":"a5c67213745329ec3ba79f712f31c1c32a781d7ffb8c04f9819f36c27672531f","together.json":"927c707d06f2236cdab13f14c870fb58bce0614ba7287bbcd57cc9fd66d191ed","venice.json":"b58d7e9dca552c1df17f8c2b0da71fd81e0bc5abdccde1393dcf37c4909076fb","vercel-ai-gateway.json":"5caa8135a9a4da65265729ff3a9f33ef2ea17cf4f8e33d7ce43f3ba03c10de96","xai.json":"9b23faa5218e966a17108c05d2498a617ade1eae9b0d0684284c77d67949a3f1","xiaomi-token-plan-ams.json":"7df74a255259fc1d5be8e682c3ffb0908eaaf0af711f6433dedcf345ce3e8393","xiaomi-token-plan-cn.json":"7dc672723d5b37e5b92605752f74f46f44eba10be2b0cb959790260b9e0c2a4e","xiaomi-token-plan-sgp.json":"69b333b158be038459a511a673f4536a5b03d4931c3119339f1ac741bc03d502","xiaomi.json":"333299657f211ad9edac0f3d4298b7e5776626914c9c80e22305a87533f23966","zai-coding-cn.json":"69c572aa75104f16ccbddbaace60c267f4bcc74f86d34891ca43110d312fb1ad","zai.json":"15c8182a88e58bdc1b1c3eb0603c690475342c8a826ceddfe9af1b36b28345ee"}}