@code-yeongyu/senpi 2026.5.29-4 → 2026.6.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 +41 -1
- package/README.md +8 -2
- package/dist/cli/args.d.ts +1 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +13 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +9 -1
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session.d.ts +5 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +18 -2
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts +3 -1
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +9 -3
- package/dist/core/compaction/branch-summarization.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/runner.d.ts +4 -2
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +13 -1
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +7 -1
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts +2 -0
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +29 -1
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +1 -0
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/provider-attribution.d.ts +4 -0
- package/dist/core/provider-attribution.d.ts.map +1 -0
- package/dist/core/provider-attribution.js +73 -0
- package/dist/core/provider-attribution.js.map +1 -0
- package/dist/core/provider-display-names.d.ts.map +1 -1
- package/dist/core/provider-display-names.js +1 -0
- package/dist/core/provider-display-names.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +8 -34
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +92 -68
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +7 -10
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +5 -7
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +6 -7
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts +5 -2
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js +17 -1
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +5 -6
- package/dist/core/tools/write.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +8 -0
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +25 -1
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +3 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +39 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +1 -0
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +1 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/docs/extensions.md +35 -11
- package/docs/providers.md +2 -0
- package/docs/quickstart.md +1 -0
- package/docs/rpc.md +3 -2
- package/docs/session-format.md +1 -1
- package/docs/sessions.md +8 -0
- package/docs/settings.md +1 -1
- package/docs/terminal-setup.md +2 -0
- package/docs/tui.md +12 -3
- package/docs/usage.md +6 -1
- package/examples/extensions/custom-header.ts +1 -1
- 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/index.ts +53 -2
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/doom-overlay/index.ts +1 -1
- package/examples/extensions/handoff.ts +1 -1
- package/examples/extensions/interactive-shell.ts +1 -1
- package/examples/extensions/overlay-qa-tests.ts +152 -81
- package/examples/extensions/qna.ts +1 -1
- package/examples/extensions/question.ts +1 -1
- package/examples/extensions/questionnaire.ts +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/snake.ts +1 -1
- package/examples/extensions/space-invaders.ts +1 -1
- package/examples/extensions/summarize.ts +1 -1
- package/examples/extensions/tic-tac-toe.ts +1 -1
- package/examples/extensions/todo.ts +1 -1
- package/examples/extensions/tools.ts +5 -0
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +12 -12
- package/package.json +4 -4
|
@@ -8,6 +8,7 @@ import * as os from "node:os";
|
|
|
8
8
|
import * as path from "node:path";
|
|
9
9
|
import { getProviders, } from "@earendil-works/pi-ai";
|
|
10
10
|
import { CombinedAutocompleteProvider, Container, fuzzyFilter, getCapabilities, hyperlink, Loader, Markdown, matchesKey, ProcessTerminal, Spacer, setKeybindings, Text, TruncatedText, TUI, visibleWidth, } from "@earendil-works/pi-tui";
|
|
11
|
+
import chalk from "chalk";
|
|
11
12
|
import { spawn, spawnSync } from "child_process";
|
|
12
13
|
import { APP_NAME, APP_TITLE, expandTildePath, getAuthPath, getDebugLogPath, getDocsPath, getShareViewerUrl, VERSION, } from "../../config.js";
|
|
13
14
|
import { parseSkillBlock } from "../../core/agent-session.js";
|
|
@@ -135,6 +136,27 @@ function isAnthropicSubscriptionAuthKey(apiKey) {
|
|
|
135
136
|
function isUnknownModel(model) {
|
|
136
137
|
return !!model && model.provider === "unknown" && model.id === "unknown" && model.api === "unknown";
|
|
137
138
|
}
|
|
139
|
+
function quoteIfNeeded(value) {
|
|
140
|
+
if (value.length > 0 && !/[^a-zA-Z0-9_\-./~:@]/.test(value)) {
|
|
141
|
+
return value;
|
|
142
|
+
}
|
|
143
|
+
return `'${value.replace(/'/g, `'\\''`)}'`;
|
|
144
|
+
}
|
|
145
|
+
export function formatResumeCommand(sessionManager) {
|
|
146
|
+
if (!process.stdout.isTTY)
|
|
147
|
+
return undefined;
|
|
148
|
+
if (!sessionManager.isPersisted())
|
|
149
|
+
return undefined;
|
|
150
|
+
const sessionFile = sessionManager.getSessionFile();
|
|
151
|
+
if (!sessionFile || !fs.existsSync(sessionFile))
|
|
152
|
+
return undefined;
|
|
153
|
+
const args = [APP_NAME];
|
|
154
|
+
if (!sessionManager.usesDefaultSessionDir()) {
|
|
155
|
+
args.push("--session-dir", quoteIfNeeded(sessionManager.getSessionDir()));
|
|
156
|
+
}
|
|
157
|
+
args.push("--session", sessionManager.getSessionId());
|
|
158
|
+
return args.join(" ");
|
|
159
|
+
}
|
|
138
160
|
function hasDefaultModelProvider(providerId) {
|
|
139
161
|
return providerId in defaultModelPerProvider;
|
|
140
162
|
}
|
|
@@ -171,6 +193,7 @@ export class InteractiveMode {
|
|
|
171
193
|
version;
|
|
172
194
|
isInitialized = false;
|
|
173
195
|
onInputCallback;
|
|
196
|
+
pendingUserInputs = [];
|
|
174
197
|
loadingAnimation = undefined;
|
|
175
198
|
workingMessage = undefined;
|
|
176
199
|
workingVisible = true;
|
|
@@ -1157,6 +1180,10 @@ export class InteractiveMode {
|
|
|
1157
1180
|
const uiContext = this.createExtensionUIContext();
|
|
1158
1181
|
await this.session.bindExtensions({
|
|
1159
1182
|
uiContext,
|
|
1183
|
+
mode: "tui",
|
|
1184
|
+
abortHandler: () => {
|
|
1185
|
+
this.restoreQueuedMessagesToEditor({ abort: true });
|
|
1186
|
+
},
|
|
1160
1187
|
commandContextActions: {
|
|
1161
1188
|
waitForIdle: () => this.session.agent.waitForIdle(),
|
|
1162
1189
|
newSession: async (options) => {
|
|
@@ -1290,6 +1317,7 @@ export class InteractiveMode {
|
|
|
1290
1317
|
// Create a context for shortcut handlers
|
|
1291
1318
|
const createContext = () => ({
|
|
1292
1319
|
ui: this.createExtensionUIContext(),
|
|
1320
|
+
mode: "tui",
|
|
1293
1321
|
hasUI: true,
|
|
1294
1322
|
cwd: this.sessionManager.getCwd(),
|
|
1295
1323
|
sessionManager: this.sessionManager,
|
|
@@ -2283,6 +2311,9 @@ export class InteractiveMode {
|
|
|
2283
2311
|
if (this.onInputCallback) {
|
|
2284
2312
|
this.onInputCallback(text);
|
|
2285
2313
|
}
|
|
2314
|
+
else {
|
|
2315
|
+
this.pendingUserInputs.push(text);
|
|
2316
|
+
}
|
|
2286
2317
|
this.editor.addToHistory?.(text);
|
|
2287
2318
|
};
|
|
2288
2319
|
}
|
|
@@ -2790,6 +2821,10 @@ export class InteractiveMode {
|
|
|
2790
2821
|
}
|
|
2791
2822
|
}
|
|
2792
2823
|
async getUserInput() {
|
|
2824
|
+
const queuedInput = this.pendingUserInputs.shift();
|
|
2825
|
+
if (queuedInput !== undefined) {
|
|
2826
|
+
return queuedInput;
|
|
2827
|
+
}
|
|
2793
2828
|
return new Promise((resolve) => {
|
|
2794
2829
|
this.onInputCallback = (text) => {
|
|
2795
2830
|
this.onInputCallback = undefined;
|
|
@@ -2851,6 +2886,10 @@ export class InteractiveMode {
|
|
|
2851
2886
|
await this.ui.terminal.drainInput(1000);
|
|
2852
2887
|
this.stop();
|
|
2853
2888
|
await this.runtimeHost.dispose();
|
|
2889
|
+
const resumeCommand = formatResumeCommand(this.sessionManager);
|
|
2890
|
+
if (resumeCommand) {
|
|
2891
|
+
process.stdout.write(`${chalk.dim("To resume this session:")} ${resumeCommand}\n`);
|
|
2892
|
+
}
|
|
2854
2893
|
process.exit(0);
|
|
2855
2894
|
}
|
|
2856
2895
|
emergencyTerminalExit() {
|