@code-yeongyu/senpi 2026.7.9 → 2026.7.10

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 (207) hide show
  1. package/CHANGELOG.md +37 -1
  2. package/README.md +1 -1
  3. package/dist/cli/args.js +3 -3
  4. package/dist/cli/args.js.map +1 -1
  5. package/dist/cli/config-selector.d.ts +4 -2
  6. package/dist/cli/config-selector.d.ts.map +1 -1
  7. package/dist/cli/config-selector.js +1 -1
  8. package/dist/cli/config-selector.js.map +1 -1
  9. package/dist/core/agent-session.d.ts +18 -3
  10. package/dist/core/agent-session.d.ts.map +1 -1
  11. package/dist/core/agent-session.js +153 -36
  12. package/dist/core/agent-session.js.map +1 -1
  13. package/dist/core/cache-stats.d.ts +49 -0
  14. package/dist/core/cache-stats.d.ts.map +1 -0
  15. package/dist/core/cache-stats.js +101 -0
  16. package/dist/core/cache-stats.js.map +1 -0
  17. package/dist/core/compaction/compaction.d.ts +1 -2
  18. package/dist/core/compaction/compaction.d.ts.map +1 -1
  19. package/dist/core/compaction/compaction.js +54 -79
  20. package/dist/core/compaction/compaction.js.map +1 -1
  21. package/dist/core/extensions/builtin/goal/continuation.js +1 -1
  22. package/dist/core/extensions/builtin/goal/continuation.js.map +1 -1
  23. package/dist/core/extensions/builtin/goal/index.d.ts.map +1 -1
  24. package/dist/core/extensions/builtin/goal/index.js +1 -0
  25. package/dist/core/extensions/builtin/goal/index.js.map +1 -1
  26. package/dist/core/extensions/builtin/import-repro.d.ts.map +1 -1
  27. package/dist/core/extensions/builtin/import-repro.js +100 -6
  28. package/dist/core/extensions/builtin/import-repro.js.map +1 -1
  29. package/dist/core/extensions/builtin/mcp/connection.d.ts +1 -0
  30. package/dist/core/extensions/builtin/mcp/connection.d.ts.map +1 -1
  31. package/dist/core/extensions/builtin/mcp/connection.js +15 -0
  32. package/dist/core/extensions/builtin/mcp/connection.js.map +1 -1
  33. package/dist/core/extensions/builtin/mcp/service.d.ts.map +1 -1
  34. package/dist/core/extensions/builtin/mcp/service.js +3 -1
  35. package/dist/core/extensions/builtin/mcp/service.js.map +1 -1
  36. package/dist/core/extensions/index.d.ts +1 -1
  37. package/dist/core/extensions/index.d.ts.map +1 -1
  38. package/dist/core/extensions/index.js.map +1 -1
  39. package/dist/core/extensions/runner.d.ts +4 -3
  40. package/dist/core/extensions/runner.d.ts.map +1 -1
  41. package/dist/core/extensions/runner.js +30 -24
  42. package/dist/core/extensions/runner.js.map +1 -1
  43. package/dist/core/extensions/types.d.ts +23 -3
  44. package/dist/core/extensions/types.d.ts.map +1 -1
  45. package/dist/core/extensions/types.js.map +1 -1
  46. package/dist/core/model-registry.d.ts +3 -0
  47. package/dist/core/model-registry.d.ts.map +1 -1
  48. package/dist/core/model-registry.js +20 -3
  49. package/dist/core/model-registry.js.map +1 -1
  50. package/dist/core/package-manager.d.ts +4 -1
  51. package/dist/core/package-manager.d.ts.map +1 -1
  52. package/dist/core/package-manager.js +68 -26
  53. package/dist/core/package-manager.js.map +1 -1
  54. package/dist/core/resource-loader.d.ts +2 -2
  55. package/dist/core/resource-loader.d.ts.map +1 -1
  56. package/dist/core/resource-loader.js +6 -7
  57. package/dist/core/resource-loader.js.map +1 -1
  58. package/dist/core/sdk.d.ts +1 -1
  59. package/dist/core/sdk.d.ts.map +1 -1
  60. package/dist/core/sdk.js +9 -2
  61. package/dist/core/sdk.js.map +1 -1
  62. package/dist/core/session-manager.d.ts.map +1 -1
  63. package/dist/core/session-manager.js +11 -2
  64. package/dist/core/session-manager.js.map +1 -1
  65. package/dist/core/settings-manager.d.ts +5 -0
  66. package/dist/core/settings-manager.d.ts.map +1 -1
  67. package/dist/core/settings-manager.js +8 -0
  68. package/dist/core/settings-manager.js.map +1 -1
  69. package/dist/core/slash-commands.d.ts +1 -0
  70. package/dist/core/slash-commands.d.ts.map +1 -1
  71. package/dist/core/slash-commands.js +3 -3
  72. package/dist/core/slash-commands.js.map +1 -1
  73. package/dist/index.d.ts +1 -1
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js.map +1 -1
  76. package/dist/main.d.ts +2 -2
  77. package/dist/main.d.ts.map +1 -1
  78. package/dist/main.js +1 -0
  79. package/dist/main.js.map +1 -1
  80. package/dist/modes/interactive/components/config-selector.d.ts +34 -3
  81. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  82. package/dist/modes/interactive/components/config-selector.js +272 -24
  83. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  84. package/dist/modes/interactive/components/footer.d.ts +4 -0
  85. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  86. package/dist/modes/interactive/components/footer.js +5 -2
  87. package/dist/modes/interactive/components/footer.js.map +1 -1
  88. package/dist/modes/interactive/components/oauth-selector.d.ts +3 -1
  89. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  90. package/dist/modes/interactive/components/oauth-selector.js +16 -6
  91. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  92. package/dist/modes/interactive/components/settings-selector.d.ts +2 -0
  93. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  94. package/dist/modes/interactive/components/settings-selector.js +10 -0
  95. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  96. package/dist/modes/interactive/interactive-mode.d.ts +10 -0
  97. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  98. package/dist/modes/interactive/interactive-mode.js +261 -37
  99. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  100. package/dist/modes/print-mode.js +1 -1
  101. package/dist/modes/print-mode.js.map +1 -1
  102. package/dist/modes/rpc/rpc-client.d.ts +6 -6
  103. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  104. package/dist/modes/rpc/rpc-client.js +3 -3
  105. package/dist/modes/rpc/rpc-client.js.map +1 -1
  106. package/dist/package-manager-cli.d.ts +2 -2
  107. package/dist/package-manager-cli.d.ts.map +1 -1
  108. package/dist/package-manager-cli.js +64 -17
  109. package/dist/package-manager-cli.js.map +1 -1
  110. package/dist/utils/clipboard-image.js +1 -1
  111. package/dist/utils/clipboard-image.js.map +1 -1
  112. package/docs/extensions.md +33 -9
  113. package/docs/models.md +4 -4
  114. package/docs/packages.md +7 -10
  115. package/docs/rpc.md +13 -3
  116. package/docs/sdk.md +22 -0
  117. package/docs/settings.md +1 -0
  118. package/docs/usage.md +1 -1
  119. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  120. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  121. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  122. package/examples/extensions/gondolin/package-lock.json +2 -2
  123. package/examples/extensions/gondolin/package.json +1 -1
  124. package/examples/extensions/reload-runtime.ts +2 -2
  125. package/examples/extensions/sandbox/package-lock.json +2 -2
  126. package/examples/extensions/sandbox/package.json +1 -1
  127. package/examples/extensions/with-deps/package-lock.json +2 -2
  128. package/examples/extensions/with-deps/package.json +1 -1
  129. package/examples/sdk/README.md +1 -1
  130. package/node_modules/@code-yeongyu/senpi-codemode/package.json +3 -3
  131. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  132. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +37 -2
  133. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  134. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-repo.d.ts.map +1 -1
  135. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-repo.js +2 -0
  136. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-repo.js.map +1 -1
  137. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.d.ts +1 -0
  138. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.d.ts.map +1 -1
  139. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.js +7 -0
  140. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.js.map +1 -1
  141. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts +18 -4
  142. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts.map +1 -1
  143. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js +72 -37
  144. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js.map +1 -1
  145. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts +2 -0
  146. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts.map +1 -1
  147. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.js.map +1 -1
  148. package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts +2 -0
  149. package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts.map +1 -1
  150. package/node_modules/@earendil-works/pi-agent-core/dist/index.js +2 -0
  151. package/node_modules/@earendil-works/pi-agent-core/dist/index.js.map +1 -1
  152. package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
  153. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.d.ts.map +1 -1
  154. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +2 -1
  155. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js.map +1 -1
  156. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js +1 -1
  157. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js.map +1 -1
  158. package/node_modules/@earendil-works/pi-ai/dist/api/transform-messages.d.ts.map +1 -1
  159. package/node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js +4 -1
  160. package/node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js.map +1 -1
  161. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +446 -195
  162. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
  163. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.d.ts +84 -0
  164. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.d.ts.map +1 -1
  165. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.js +72 -0
  166. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.js.map +1 -1
  167. package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.js +4 -4
  168. package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.js.map +1 -1
  169. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.d.ts +63 -0
  170. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.d.ts.map +1 -1
  171. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.js +54 -0
  172. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.js.map +1 -1
  173. package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.d.ts +84 -0
  174. package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.d.ts.map +1 -1
  175. package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.js +72 -0
  176. package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.js.map +1 -1
  177. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.d.ts +138 -63
  178. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.d.ts.map +1 -1
  179. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.js +136 -76
  180. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.js.map +1 -1
  181. package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.d.ts +77 -0
  182. package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.d.ts.map +1 -1
  183. package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.js +72 -1
  184. package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.js.map +1 -1
  185. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.d.ts +0 -44
  186. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.d.ts.map +1 -1
  187. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.js +9 -45
  188. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.js.map +1 -1
  189. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.d.ts +0 -44
  190. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.d.ts.map +1 -1
  191. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.js +9 -45
  192. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.js.map +1 -1
  193. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.d.ts +0 -44
  194. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.d.ts.map +1 -1
  195. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.js +9 -45
  196. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.js.map +1 -1
  197. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.d.ts.map +1 -1
  198. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js +3 -0
  199. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js.map +1 -1
  200. package/node_modules/@earendil-works/pi-ai/package.json +1 -1
  201. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  202. package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts.map +1 -1
  203. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +22 -1
  204. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.map +1 -1
  205. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  206. package/package.json +7 -8
  207. package/npm-shrinkwrap.json +0 -3479
@@ -901,6 +901,8 @@ export class Editor {
901
901
  this.cancelAutocomplete();
902
902
  this.lastAction = null;
903
903
  this.exitHistoryBrowsing();
904
+ this.pastes.clear();
905
+ this.pasteCounter = 0;
904
906
  const normalized = this.normalizeText(text);
905
907
  // Push undo snapshot if content differs (makes programmatic changes undoable)
906
908
  if (this.getText() !== normalized) {
@@ -1134,12 +1136,31 @@ export class Editor {
1134
1136
  if (this.state.cursorCol > 0) {
1135
1137
  this.pushUndoSnapshot();
1136
1138
  // Delete grapheme before cursor (handles emojis, combining characters, etc.)
1137
- const line = this.state.lines[this.state.cursorLine] || "";
1139
+ let line = this.state.lines[this.state.cursorLine] || "";
1138
1140
  const beforeCursor = line.slice(0, this.state.cursorCol);
1139
1141
  // Find the last grapheme in the text before cursor
1140
1142
  const graphemes = [...this.segment(beforeCursor, "grapheme")];
1141
1143
  const lastGrapheme = graphemes[graphemes.length - 1];
1142
1144
  const graphemeLength = lastGrapheme ? lastGrapheme.segment.length : 1;
1145
+ const isPastedSegmented = PASTE_MARKER_SINGLE.exec(lastGrapheme.segment);
1146
+ if (isPastedSegmented) {
1147
+ // This contains the id part e.g 4 from [paste #4 +123 lines]
1148
+ const targetId = Number(isPastedSegmented[1]);
1149
+ this.pastes.delete(targetId);
1150
+ this.pasteCounter--;
1151
+ // We got to update id of markers which are greater than the removed one
1152
+ this.state.lines = this.state.lines.map((line) => line.replace(PASTE_MARKER_REGEX, (fullMatch, idGroup, suffixGroup) => {
1153
+ const x = Number(idGroup);
1154
+ if (x <= targetId)
1155
+ return fullMatch;
1156
+ // [paste #3] become [paste #2] if we remove [paste #1]
1157
+ const newText = `[paste #${x - 1}${suffixGroup}]`;
1158
+ this.pastes.set(x - 1, this.pastes.get(x) ?? newText);
1159
+ this.pastes.delete(x);
1160
+ return newText;
1161
+ }));
1162
+ }
1163
+ line = this.state.lines[this.state.cursorLine] || "";
1143
1164
  const before = line.slice(0, this.state.cursorCol - graphemeLength);
1144
1165
  const after = line.slice(this.state.cursorCol);
1145
1166
  this.state.lines[this.state.cursorLine] = before + after;