@code-yeongyu/senpi 2026.6.6-3 → 2026.6.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.
- package/CHANGELOG.md +25 -0
- package/README.md +113 -111
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +1 -2
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/project-trust.d.ts +10 -0
- package/dist/cli/project-trust.d.ts.map +1 -0
- package/dist/cli/project-trust.js +48 -0
- package/dist/cli/project-trust.js.map +1 -0
- package/dist/cli/startup-ui.d.ts +7 -0
- package/dist/cli/startup-ui.d.ts.map +1 -0
- package/dist/cli/startup-ui.js +59 -0
- package/dist/cli/startup-ui.js.map +1 -0
- package/dist/cli.js +10 -1
- package/dist/cli.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts +3 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +4 -1
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +2 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +2 -2
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +1 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +6 -0
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/compaction/utils.d.ts +1 -1
- package/dist/core/compaction/utils.d.ts.map +1 -1
- package/dist/core/compaction/utils.js +1 -1
- package/dist/core/compaction/utils.js.map +1 -1
- package/dist/core/experimental.d.ts +2 -0
- package/dist/core/experimental.d.ts.map +1 -0
- package/dist/core/experimental.js +4 -0
- package/dist/core/experimental.js.map +1 -0
- package/dist/core/extensions/builtin/todotools/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/index.js +0 -2
- package/dist/core/extensions/builtin/todotools/index.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/prompt.d.ts +1 -1
- package/dist/core/extensions/builtin/todotools/prompt.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/prompt.js +0 -2
- package/dist/core/extensions/builtin/todotools/prompt.js.map +1 -1
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +4 -4
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +7 -2
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +34 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +21 -1
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/model-registry.d.ts +3 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +22 -3
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/project-trust.d.ts +15 -0
- package/dist/core/project-trust.d.ts.map +1 -0
- package/dist/core/project-trust.js +58 -0
- package/dist/core/project-trust.js.map +1 -0
- package/dist/core/prompt-templates.d.ts +2 -1
- package/dist/core/prompt-templates.d.ts.map +1 -1
- package/dist/core/prompt-templates.js +24 -26
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/resource-loader.d.ts +14 -3
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +128 -58
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/session-manager.d.ts +3 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +34 -17
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-resident-store.d.ts +16 -0
- package/dist/core/session-resident-store.d.ts.map +1 -0
- package/dist/core/session-resident-store.js +48 -0
- package/dist/core/session-resident-store.js.map +1 -0
- package/dist/core/settings-manager.d.ts +4 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +9 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/trust-manager.d.ts +22 -0
- package/dist/core/trust-manager.d.ts.map +1 -1
- package/dist/core/trust-manager.js +75 -22
- package/dist/core/trust-manager.js.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +92 -129
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +39 -34
- package/dist/migrations.js.map +1 -1
- package/dist/modes/index.d.ts +1 -1
- package/dist/modes/index.d.ts.map +1 -1
- package/dist/modes/index.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +1 -0
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +7 -1
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +3 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +20 -0
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +26 -4
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/trust-selector.d.ts +6 -3
- package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/trust-selector.js +22 -18
- package/dist/modes/interactive/components/trust-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +15 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +158 -19
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/working-status.d.ts +2 -0
- package/dist/modes/interactive/working-status.d.ts.map +1 -1
- package/dist/modes/interactive/working-status.js +34 -0
- package/dist/modes/interactive/working-status.js.map +1 -1
- package/dist/package-manager-cli.d.ts +6 -2
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +58 -11
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/senpi +10 -1
- package/dist/utils/changelog.d.ts +1 -0
- package/dist/utils/changelog.d.ts.map +1 -1
- package/dist/utils/changelog.js +78 -0
- package/dist/utils/changelog.js.map +1 -1
- package/docs/docs.json +4 -0
- package/docs/extensions.md +30 -1
- package/docs/index.md +1 -0
- package/docs/models.md +6 -39
- package/docs/packages.md +0 -2
- package/docs/prompt-templates.md +8 -1
- package/docs/sdk.md +5 -0
- package/docs/security.md +55 -0
- package/docs/settings.md +7 -4
- package/docs/terminal-setup.md +36 -2
- package/docs/tmux.md +4 -2
- package/docs/usage.md +12 -7
- package/examples/extensions/README.md +1 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/project-trust.ts +64 -0
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +125 -77
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +6 -3
- package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
- package/node_modules/@earendil-works/pi-ai/README.md +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts +2 -2
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +6 -6
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +373 -116
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +353 -202
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js +15 -7
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.d.ts +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js +17 -7
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.js +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js +4 -3
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.js +3 -2
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.d.ts +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.js +2 -2
- package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +5 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/package.json +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts +2 -0
- package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts +6 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +89 -39
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/loader.d.ts +5 -0
- package/node_modules/@earendil-works/pi-tui/dist/components/loader.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/loader.js +18 -4
- package/node_modules/@earendil-works/pi-tui/dist/components/loader.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/fuzzy.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/fuzzy.js +131 -61
- package/node_modules/@earendil-works/pi-tui/dist/fuzzy.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts +4 -7
- package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.js +38 -76
- package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/tui.js +14 -4
- package/node_modules/@earendil-works/pi-tui/dist/tui.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/utils.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/utils.js +43 -15
- package/node_modules/@earendil-works/pi-tui/dist/utils.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/npm-shrinkwrap.json +12 -12
- package/package.json +4 -8
- package/dist/core/extensions/builtin/todotools/continuation/config.d.ts +0 -10
- package/dist/core/extensions/builtin/todotools/continuation/config.d.ts.map +0 -1
- package/dist/core/extensions/builtin/todotools/continuation/config.js +0 -33
- package/dist/core/extensions/builtin/todotools/continuation/config.js.map +0 -1
- package/dist/core/extensions/builtin/todotools/continuation/index.d.ts +0 -2
- package/dist/core/extensions/builtin/todotools/continuation/index.d.ts.map +0 -1
- package/dist/core/extensions/builtin/todotools/continuation/index.js +0 -2
- package/dist/core/extensions/builtin/todotools/continuation/index.js.map +0 -1
- package/dist/core/extensions/builtin/todotools/continuation/prompt.d.ts +0 -5
- package/dist/core/extensions/builtin/todotools/continuation/prompt.d.ts.map +0 -1
- package/dist/core/extensions/builtin/todotools/continuation/prompt.js +0 -34
- package/dist/core/extensions/builtin/todotools/continuation/prompt.js.map +0 -1
- package/dist/core/extensions/builtin/todotools/continuation/runtime.d.ts +0 -11
- package/dist/core/extensions/builtin/todotools/continuation/runtime.d.ts.map +0 -1
- package/dist/core/extensions/builtin/todotools/continuation/runtime.js +0 -201
- package/dist/core/extensions/builtin/todotools/continuation/runtime.js.map +0 -1
- package/dist/core/extensions/builtin/todotools/settings.d.ts +0 -6
- package/dist/core/extensions/builtin/todotools/settings.d.ts.map +0 -1
- package/dist/core/extensions/builtin/todotools/settings.js +0 -58
- package/dist/core/extensions/builtin/todotools/settings.js.map +0 -1
- package/dist/core/extensions/builtin/todotools/system-messages.d.ts +0 -34
- package/dist/core/extensions/builtin/todotools/system-messages.d.ts.map +0 -1
- package/dist/core/extensions/builtin/todotools/system-messages.js +0 -82
- package/dist/core/extensions/builtin/todotools/system-messages.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../src/components/editor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAA2B,MAAM,oBAAoB,CAAC;AAIxF,OAAO,EAAE,KAAK,SAAS,EAAiB,KAAK,SAAS,EAAE,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AAIpF,OAAO,EAA4C,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AA6ElG;;;GAGG;AACH,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,SAAS,EAAE,CAoF3G;AAeD,MAAM,WAAW,WAAW;IAC3B,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IACrC,UAAU,EAAE,eAAe,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sBAAsB,CAAC,EAAE,MAAM,CAAC;CAChC;
|
|
1
|
+
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../src/components/editor.ts"],"names":[],"mappings":"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"}
|
|
@@ -158,6 +158,17 @@ const SLASH_COMMAND_SELECT_LIST_LAYOUT = {
|
|
|
158
158
|
maxPrimaryColumnWidth: 32,
|
|
159
159
|
};
|
|
160
160
|
const ATTACHMENT_AUTOCOMPLETE_DEBOUNCE_MS = 20;
|
|
161
|
+
const DEFAULT_AUTOCOMPLETE_TRIGGER_CHARACTERS = ["@", "#"];
|
|
162
|
+
function escapeCharacterClass(value) {
|
|
163
|
+
return value.replace(/[\\^$.*+?()[\]{}|-]/g, "\\$&");
|
|
164
|
+
}
|
|
165
|
+
function buildTriggerPattern(triggerCharacters) {
|
|
166
|
+
return new RegExp(`(?:^|[\\s])[${triggerCharacters.map(escapeCharacterClass).join("")}][^\\s]*$`);
|
|
167
|
+
}
|
|
168
|
+
function buildDebouncePattern(triggerCharacters) {
|
|
169
|
+
const escapedWithoutAt = triggerCharacters.filter((character) => character !== "@").map(escapeCharacterClass);
|
|
170
|
+
return new RegExp(`(?:^|[ \\t])(?:@(?:"[^"]*|[^\\s]*)|[${escapedWithoutAt.join("")}][^\\s]*)$`);
|
|
171
|
+
}
|
|
161
172
|
export class Editor {
|
|
162
173
|
constructor(tui, theme, options = {}) {
|
|
163
174
|
this.state = {
|
|
@@ -172,6 +183,9 @@ export class Editor {
|
|
|
172
183
|
this.lastWidth = 80;
|
|
173
184
|
// Vertical scrolling support
|
|
174
185
|
this.scrollOffset = 0;
|
|
186
|
+
this.autocompleteTriggerCharacters = [...DEFAULT_AUTOCOMPLETE_TRIGGER_CHARACTERS];
|
|
187
|
+
this.autocompleteTriggerPattern = buildTriggerPattern(this.autocompleteTriggerCharacters);
|
|
188
|
+
this.autocompleteDebouncePattern = buildDebouncePattern(this.autocompleteTriggerCharacters);
|
|
175
189
|
this.autocompleteState = null;
|
|
176
190
|
this.autocompletePrefix = "";
|
|
177
191
|
this.autocompleteMaxVisible = 5;
|
|
@@ -187,6 +201,7 @@ export class Editor {
|
|
|
187
201
|
// Prompt history for up/down navigation
|
|
188
202
|
this.history = [];
|
|
189
203
|
this.historyIndex = -1; // -1 = not browsing, 0 = most recent, 1 = older, etc.
|
|
204
|
+
this.historyDraft = null;
|
|
190
205
|
// Kill ring for Emacs-style kill/yank operations
|
|
191
206
|
this.killRing = new KillRing();
|
|
192
207
|
this.lastAction = null;
|
|
@@ -242,6 +257,7 @@ export class Editor {
|
|
|
242
257
|
setAutocompleteProvider(provider) {
|
|
243
258
|
this.cancelAutocomplete();
|
|
244
259
|
this.autocompleteProvider = provider;
|
|
260
|
+
this.setAutocompleteTriggerCharacters(provider.triggerCharacters ?? []);
|
|
245
261
|
}
|
|
246
262
|
/**
|
|
247
263
|
* Add a prompt to history for up/down arrow navigation.
|
|
@@ -260,9 +276,6 @@ export class Editor {
|
|
|
260
276
|
this.history.pop();
|
|
261
277
|
}
|
|
262
278
|
}
|
|
263
|
-
isEditorEmpty() {
|
|
264
|
-
return this.state.lines.length === 1 && this.state.lines[0] === "";
|
|
265
|
-
}
|
|
266
279
|
isOnFirstVisualLine() {
|
|
267
280
|
const visualLines = this.buildVisualLineMap(this.lastWidth);
|
|
268
281
|
const currentVisualLine = this.findCurrentVisualLine(visualLines);
|
|
@@ -283,22 +296,38 @@ export class Editor {
|
|
|
283
296
|
// Capture state when first entering history browsing mode
|
|
284
297
|
if (this.historyIndex === -1 && newIndex >= 0) {
|
|
285
298
|
this.pushUndoSnapshot();
|
|
299
|
+
this.historyDraft = structuredClone(this.state);
|
|
286
300
|
}
|
|
287
301
|
this.historyIndex = newIndex;
|
|
288
302
|
if (this.historyIndex === -1) {
|
|
289
|
-
|
|
290
|
-
this.
|
|
303
|
+
const draft = this.historyDraft;
|
|
304
|
+
this.historyDraft = null;
|
|
305
|
+
if (draft) {
|
|
306
|
+
this.state = draft;
|
|
307
|
+
this.preferredVisualCol = null;
|
|
308
|
+
this.snappedFromCursorCol = null;
|
|
309
|
+
this.scrollOffset = 0;
|
|
310
|
+
if (this.onChange)
|
|
311
|
+
this.onChange(this.getText());
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
this.setTextInternal("");
|
|
315
|
+
}
|
|
291
316
|
}
|
|
292
317
|
else {
|
|
293
|
-
this.setTextInternal(this.history[this.historyIndex] || "");
|
|
318
|
+
this.setTextInternal(this.history[this.historyIndex] || "", direction === -1 ? "start" : "end");
|
|
294
319
|
}
|
|
295
320
|
}
|
|
321
|
+
exitHistoryBrowsing() {
|
|
322
|
+
this.historyIndex = -1;
|
|
323
|
+
this.historyDraft = null;
|
|
324
|
+
}
|
|
296
325
|
/** Internal setText that doesn't reset history state - used by navigateHistory */
|
|
297
|
-
setTextInternal(text) {
|
|
326
|
+
setTextInternal(text, cursorPlacement = "end") {
|
|
298
327
|
const lines = text.split("\n");
|
|
299
328
|
this.state.lines = lines.length === 0 ? [""] : lines;
|
|
300
|
-
this.state.cursorLine = this.state.lines.length - 1;
|
|
301
|
-
this.setCursorCol(this.state.lines[this.state.cursorLine]?.length || 0);
|
|
329
|
+
this.state.cursorLine = cursorPlacement === "start" ? 0 : this.state.lines.length - 1;
|
|
330
|
+
this.setCursorCol(cursorPlacement === "start" ? 0 : this.state.lines[this.state.cursorLine]?.length || 0);
|
|
302
331
|
// Reset scroll - render() will adjust to show cursor
|
|
303
332
|
this.scrollOffset = 0;
|
|
304
333
|
if (this.onChange) {
|
|
@@ -357,8 +386,10 @@ export class Editor {
|
|
|
357
386
|
result.push(horizontal.repeat(width));
|
|
358
387
|
}
|
|
359
388
|
// Render each visible layout line
|
|
360
|
-
// Emit hardware cursor marker
|
|
361
|
-
|
|
389
|
+
// Emit hardware cursor marker when focused so TUI can position the
|
|
390
|
+
// hardware cursor for IME candidate-window placement even while
|
|
391
|
+
// autocomplete (e.g. slash-command menu) is visible.
|
|
392
|
+
const emitCursorMarker = this.focused;
|
|
362
393
|
for (const layoutLine of visibleLines) {
|
|
363
394
|
let displayText = layoutLine.text;
|
|
364
395
|
let lineVisibleWidth = visibleWidth(layoutLine.text);
|
|
@@ -605,10 +636,7 @@ export class Editor {
|
|
|
605
636
|
}
|
|
606
637
|
// Arrow key navigation (with history support)
|
|
607
638
|
if (kb.matches(data, "tui.editor.cursorUp")) {
|
|
608
|
-
if (this.
|
|
609
|
-
this.navigateHistory(-1);
|
|
610
|
-
}
|
|
611
|
-
else if (this.historyIndex > -1 && this.isOnFirstVisualLine()) {
|
|
639
|
+
if (this.isOnFirstVisualLine() && this.history.length > 0) {
|
|
612
640
|
this.navigateHistory(-1);
|
|
613
641
|
}
|
|
614
642
|
else if (this.isOnFirstVisualLine()) {
|
|
@@ -784,7 +812,7 @@ export class Editor {
|
|
|
784
812
|
setText(text) {
|
|
785
813
|
this.cancelAutocomplete();
|
|
786
814
|
this.lastAction = null;
|
|
787
|
-
this.
|
|
815
|
+
this.exitHistoryBrowsing();
|
|
788
816
|
const normalized = this.normalizeText(text);
|
|
789
817
|
// Push undo snapshot if content differs (makes programmatic changes undoable)
|
|
790
818
|
if (this.getText() !== normalized) {
|
|
@@ -803,7 +831,7 @@ export class Editor {
|
|
|
803
831
|
this.cancelAutocomplete();
|
|
804
832
|
this.pushUndoSnapshot();
|
|
805
833
|
this.lastAction = null;
|
|
806
|
-
this.
|
|
834
|
+
this.exitHistoryBrowsing();
|
|
807
835
|
this.insertTextAtCursorInternal(text);
|
|
808
836
|
}
|
|
809
837
|
/**
|
|
@@ -856,7 +884,7 @@ export class Editor {
|
|
|
856
884
|
}
|
|
857
885
|
// All the editor methods from before...
|
|
858
886
|
insertCharacter(char, skipUndoCoalescing) {
|
|
859
|
-
this.
|
|
887
|
+
this.exitHistoryBrowsing();
|
|
860
888
|
// Undo coalescing (fish-style):
|
|
861
889
|
// - Consecutive word chars coalesce into one undo unit
|
|
862
890
|
// - Space captures state before itself (so undo removes space+following word together)
|
|
@@ -882,8 +910,8 @@ export class Editor {
|
|
|
882
910
|
if (char === "/" && this.isAtStartOfMessage()) {
|
|
883
911
|
this.tryTriggerAutocomplete();
|
|
884
912
|
}
|
|
885
|
-
// Auto-trigger for symbol-based completion like
|
|
886
|
-
else if (char
|
|
913
|
+
// Auto-trigger for symbol-based completion like @, #, or provider triggers at token boundaries
|
|
914
|
+
else if (this.autocompleteTriggerCharacters.includes(char)) {
|
|
887
915
|
const currentLine = this.state.lines[this.state.cursorLine] || "";
|
|
888
916
|
const textBeforeCursor = currentLine.slice(0, this.state.cursorCol);
|
|
889
917
|
const charBeforeSymbol = textBeforeCursor[textBeforeCursor.length - 2];
|
|
@@ -899,8 +927,8 @@ export class Editor {
|
|
|
899
927
|
if (this.isInSlashCommandContext(textBeforeCursor)) {
|
|
900
928
|
this.tryTriggerAutocomplete();
|
|
901
929
|
}
|
|
902
|
-
// Check if we're in a symbol-based completion context like
|
|
903
|
-
else if (
|
|
930
|
+
// Check if we're in a symbol-based completion context like @, #, or provider triggers
|
|
931
|
+
else if (this.autocompleteTriggerPattern.test(textBeforeCursor)) {
|
|
904
932
|
this.tryTriggerAutocomplete();
|
|
905
933
|
}
|
|
906
934
|
}
|
|
@@ -911,7 +939,7 @@ export class Editor {
|
|
|
911
939
|
}
|
|
912
940
|
handlePaste(pastedText) {
|
|
913
941
|
this.cancelAutocomplete();
|
|
914
|
-
this.
|
|
942
|
+
this.exitHistoryBrowsing();
|
|
915
943
|
this.lastAction = null;
|
|
916
944
|
this.pushUndoSnapshot();
|
|
917
945
|
// Some terminals (e.g. tmux popups with extended-keys-format=csi-u) re-encode
|
|
@@ -969,7 +997,7 @@ export class Editor {
|
|
|
969
997
|
}
|
|
970
998
|
addNewLine() {
|
|
971
999
|
this.cancelAutocomplete();
|
|
972
|
-
this.
|
|
1000
|
+
this.exitHistoryBrowsing();
|
|
973
1001
|
this.lastAction = null;
|
|
974
1002
|
this.pushUndoSnapshot();
|
|
975
1003
|
const currentLine = this.state.lines[this.state.cursorLine] || "";
|
|
@@ -1003,7 +1031,7 @@ export class Editor {
|
|
|
1003
1031
|
this.state = { lines: [""], cursorLine: 0, cursorCol: 0 };
|
|
1004
1032
|
this.pastes.clear();
|
|
1005
1033
|
this.pasteCounter = 0;
|
|
1006
|
-
this.
|
|
1034
|
+
this.exitHistoryBrowsing();
|
|
1007
1035
|
this.scrollOffset = 0;
|
|
1008
1036
|
this.undoStack.clear();
|
|
1009
1037
|
this.lastAction = null;
|
|
@@ -1013,7 +1041,7 @@ export class Editor {
|
|
|
1013
1041
|
this.onSubmit(result);
|
|
1014
1042
|
}
|
|
1015
1043
|
handleBackspace() {
|
|
1016
|
-
this.
|
|
1044
|
+
this.exitHistoryBrowsing();
|
|
1017
1045
|
this.lastAction = null;
|
|
1018
1046
|
if (this.state.cursorCol > 0) {
|
|
1019
1047
|
this.pushUndoSnapshot();
|
|
@@ -1054,8 +1082,8 @@ export class Editor {
|
|
|
1054
1082
|
if (this.isInSlashCommandContext(textBeforeCursor)) {
|
|
1055
1083
|
this.tryTriggerAutocomplete();
|
|
1056
1084
|
}
|
|
1057
|
-
// Symbol-based completion context like
|
|
1058
|
-
else if (
|
|
1085
|
+
// Symbol-based completion context like @, #, or provider triggers
|
|
1086
|
+
else if (this.autocompleteTriggerPattern.test(textBeforeCursor)) {
|
|
1059
1087
|
this.tryTriggerAutocomplete();
|
|
1060
1088
|
}
|
|
1061
1089
|
}
|
|
@@ -1195,7 +1223,7 @@ export class Editor {
|
|
|
1195
1223
|
this.setCursorCol(currentLine.length);
|
|
1196
1224
|
}
|
|
1197
1225
|
deleteToStartOfLine() {
|
|
1198
|
-
this.
|
|
1226
|
+
this.exitHistoryBrowsing();
|
|
1199
1227
|
const currentLine = this.state.lines[this.state.cursorLine] || "";
|
|
1200
1228
|
if (this.state.cursorCol > 0) {
|
|
1201
1229
|
this.pushUndoSnapshot();
|
|
@@ -1223,7 +1251,7 @@ export class Editor {
|
|
|
1223
1251
|
}
|
|
1224
1252
|
}
|
|
1225
1253
|
deleteToEndOfLine() {
|
|
1226
|
-
this.
|
|
1254
|
+
this.exitHistoryBrowsing();
|
|
1227
1255
|
const currentLine = this.state.lines[this.state.cursorLine] || "";
|
|
1228
1256
|
if (this.state.cursorCol < currentLine.length) {
|
|
1229
1257
|
this.pushUndoSnapshot();
|
|
@@ -1248,7 +1276,7 @@ export class Editor {
|
|
|
1248
1276
|
}
|
|
1249
1277
|
}
|
|
1250
1278
|
deleteWordBackwards() {
|
|
1251
|
-
this.
|
|
1279
|
+
this.exitHistoryBrowsing();
|
|
1252
1280
|
const currentLine = this.state.lines[this.state.cursorLine] || "";
|
|
1253
1281
|
// If at start of line, behave like backspace at column 0 (merge with previous line)
|
|
1254
1282
|
if (this.state.cursorCol === 0) {
|
|
@@ -1284,7 +1312,7 @@ export class Editor {
|
|
|
1284
1312
|
}
|
|
1285
1313
|
}
|
|
1286
1314
|
deleteWordForward() {
|
|
1287
|
-
this.
|
|
1315
|
+
this.exitHistoryBrowsing();
|
|
1288
1316
|
const currentLine = this.state.lines[this.state.cursorLine] || "";
|
|
1289
1317
|
// If at end of line, merge with next line (delete the newline)
|
|
1290
1318
|
if (this.state.cursorCol >= currentLine.length) {
|
|
@@ -1317,7 +1345,7 @@ export class Editor {
|
|
|
1317
1345
|
}
|
|
1318
1346
|
}
|
|
1319
1347
|
handleForwardDelete() {
|
|
1320
|
-
this.
|
|
1348
|
+
this.exitHistoryBrowsing();
|
|
1321
1349
|
this.lastAction = null;
|
|
1322
1350
|
const currentLine = this.state.lines[this.state.cursorLine] || "";
|
|
1323
1351
|
if (this.state.cursorCol < currentLine.length) {
|
|
@@ -1353,8 +1381,8 @@ export class Editor {
|
|
|
1353
1381
|
if (this.isInSlashCommandContext(textBeforeCursor)) {
|
|
1354
1382
|
this.tryTriggerAutocomplete();
|
|
1355
1383
|
}
|
|
1356
|
-
// Symbol-based completion context like
|
|
1357
|
-
else if (
|
|
1384
|
+
// Symbol-based completion context like @, #, or provider triggers
|
|
1385
|
+
else if (this.autocompleteTriggerPattern.test(textBeforeCursor)) {
|
|
1358
1386
|
this.tryTriggerAutocomplete();
|
|
1359
1387
|
}
|
|
1360
1388
|
}
|
|
@@ -1465,6 +1493,17 @@ export class Editor {
|
|
|
1465
1493
|
}
|
|
1466
1494
|
}
|
|
1467
1495
|
}
|
|
1496
|
+
// Keep an open autocomplete picker in sync with the new cursor
|
|
1497
|
+
// position: cursor movement changes the text before the cursor, so a
|
|
1498
|
+
// picker computed for the old position is stale. Re-query so it
|
|
1499
|
+
// refreshes — or closes when the new position yields no suggestions —
|
|
1500
|
+
// mirroring insertCharacter()/handleBackspace(). Without this, arrowing
|
|
1501
|
+
// left from `/cmd ` back into the command name leaves the argument
|
|
1502
|
+
// picker showing against a `/cmd` prefix (and a Tab there would
|
|
1503
|
+
// concatenate the stale suggestion onto the partial command name).
|
|
1504
|
+
if (this.autocompleteState) {
|
|
1505
|
+
this.updateAutocomplete();
|
|
1506
|
+
}
|
|
1468
1507
|
}
|
|
1469
1508
|
/**
|
|
1470
1509
|
* Scroll by a page (direction: -1 for up, 1 for down).
|
|
@@ -1529,7 +1568,7 @@ export class Editor {
|
|
|
1529
1568
|
* Insert text at cursor position (used by yank operations).
|
|
1530
1569
|
*/
|
|
1531
1570
|
insertYankedText(text) {
|
|
1532
|
-
this.
|
|
1571
|
+
this.exitHistoryBrowsing();
|
|
1533
1572
|
const lines = text.split("\n");
|
|
1534
1573
|
if (lines.length === 1) {
|
|
1535
1574
|
// Single line - insert at cursor
|
|
@@ -1601,7 +1640,7 @@ export class Editor {
|
|
|
1601
1640
|
this.undoStack.push(this.state);
|
|
1602
1641
|
}
|
|
1603
1642
|
undo() {
|
|
1604
|
-
this.
|
|
1643
|
+
this.exitHistoryBrowsing();
|
|
1605
1644
|
const snapshot = this.undoStack.pop();
|
|
1606
1645
|
if (!snapshot)
|
|
1607
1646
|
return;
|
|
@@ -1762,14 +1801,25 @@ export class Editor {
|
|
|
1762
1801
|
})();
|
|
1763
1802
|
await this.autocompleteRequestTask;
|
|
1764
1803
|
}
|
|
1804
|
+
setAutocompleteTriggerCharacters(triggerCharacters) {
|
|
1805
|
+
const next = [...DEFAULT_AUTOCOMPLETE_TRIGGER_CHARACTERS];
|
|
1806
|
+
for (const character of triggerCharacters) {
|
|
1807
|
+
if (character.length !== 1 || character === "/" || isWhitespaceChar(character) || next.includes(character)) {
|
|
1808
|
+
continue;
|
|
1809
|
+
}
|
|
1810
|
+
next.push(character);
|
|
1811
|
+
}
|
|
1812
|
+
this.autocompleteTriggerCharacters = next;
|
|
1813
|
+
this.autocompleteTriggerPattern = buildTriggerPattern(next);
|
|
1814
|
+
this.autocompleteDebouncePattern = buildDebouncePattern(next);
|
|
1815
|
+
}
|
|
1765
1816
|
getAutocompleteDebounceMs(options) {
|
|
1766
1817
|
if (options.explicitTab || options.force) {
|
|
1767
1818
|
return 0;
|
|
1768
1819
|
}
|
|
1769
1820
|
const currentLine = this.state.lines[this.state.cursorLine] || "";
|
|
1770
1821
|
const textBeforeCursor = currentLine.slice(0, this.state.cursorCol);
|
|
1771
|
-
|
|
1772
|
-
return isSymbolAutocompleteContext ? ATTACHMENT_AUTOCOMPLETE_DEBOUNCE_MS : 0;
|
|
1822
|
+
return this.autocompleteDebouncePattern.test(textBeforeCursor) ? ATTACHMENT_AUTOCOMPLETE_DEBOUNCE_MS : 0;
|
|
1773
1823
|
}
|
|
1774
1824
|
async runAutocompleteRequest(requestId, controller, snapshotText, snapshotLine, snapshotCol, options) {
|
|
1775
1825
|
if (!this.autocompleteProvider)
|