@datalabrotterdam/nova-ai-cli 1.2.0-alpha.15 → 1.2.0-alpha.16

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
@@ -1,3 +1,10 @@
1
+ # [@datalabrotterdam/nova-ai-cli-v1.2.0-alpha.16](https://github.com/Datalab-Rotterdam/nova-ai-cli/compare/@datalabrotterdam/nova-ai-cli@1.2.0-alpha.15...@datalabrotterdam/nova-ai-cli@1.2.0-alpha.16) (2026-10-25)
2
+
3
+
4
+ ### Features
5
+
6
+ * **cli:** Ctrl+C clears the prompt; Esc asks about running background tasks ([a7cb854](https://github.com/Datalab-Rotterdam/nova-ai-cli/commit/a7cb854f4494d88851b672af913d7a1dee666684))
7
+
1
8
  # [@datalabrotterdam/nova-ai-cli-v1.2.0-alpha.15](https://github.com/Datalab-Rotterdam/nova-ai-cli/compare/@datalabrotterdam/nova-ai-cli@1.2.0-alpha.14...@datalabrotterdam/nova-ai-cli@1.2.0-alpha.15) (2026-10-25)
2
9
 
3
10
 
package/dist/index.js CHANGED
@@ -185,7 +185,7 @@ ${MAIN_HELP}
185
185
  );
186
186
  return 2;
187
187
  }
188
- const { default: runChat } = await import("./tui-W6ZQ2SWR.js");
188
+ const { default: runChat } = await import("./tui-UHITDRFM.js");
189
189
  return runChat(options);
190
190
  }
191
191
  }
@@ -4179,7 +4179,7 @@ var TuiController = class {
4179
4179
  if (key.escape) {
4180
4180
  if (this.editor.autocomplete) return false;
4181
4181
  if (this.store.getState().busy) {
4182
- this.runner.cancel();
4182
+ void this.interrupt();
4183
4183
  return true;
4184
4184
  }
4185
4185
  if (this.scroll > 0) {
@@ -4225,7 +4225,12 @@ var TuiController = class {
4225
4225
  return false;
4226
4226
  }
4227
4227
  }
4228
+ /** Ctrl+C clears a typed prompt first; on an empty one it arms exit. */
4228
4229
  pressCtrlC() {
4230
+ if (this.editor.getText()) {
4231
+ this.editor.setText("");
4232
+ return;
4233
+ }
4229
4234
  if (this.exitArmed) {
4230
4235
  this.requestExit();
4231
4236
  return;
@@ -4369,6 +4374,32 @@ var TuiController = class {
4369
4374
  (value) => this.setPermissionMode(value)
4370
4375
  );
4371
4376
  };
4377
+ /** Esc during a turn: stop it, then ask whether background tasks it started keep running. */
4378
+ async interrupt() {
4379
+ this.runner.cancel();
4380
+ const running = (await this.runner.listBackgroundJobs().catch(() => [])).filter(
4381
+ (job) => job.status === "running"
4382
+ );
4383
+ if (running.length === 0) return;
4384
+ const titles = running.map((job) => job.title).join(", ");
4385
+ this.showSelection(
4386
+ `Interrupted. ${running.length === 1 ? "1 background task is" : `${running.length} background tasks are`} still running.`,
4387
+ [
4388
+ { value: "keep", label: "Keep running", description: titles },
4389
+ { value: "stop", label: running.length === 1 ? "Stop it" : "Stop them", description: titles }
4390
+ ],
4391
+ "background-tasks",
4392
+ (value) => {
4393
+ if (value !== "stop") return;
4394
+ void Promise.allSettled(running.map((job) => this.runner.killBackgroundJob(job.jobId))).then(
4395
+ (results) => {
4396
+ const stopped = results.filter((result) => result.status === "fulfilled").length;
4397
+ this.store.setState({ statusLine: `Stopped ${stopped} of ${running.length} background tasks.` });
4398
+ }
4399
+ );
4400
+ }
4401
+ );
4402
+ }
4372
4403
  openBackgroundTasks = async () => {
4373
4404
  try {
4374
4405
  const jobs = await this.runner.listBackgroundJobs();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datalabrotterdam/nova-ai-cli",
3
- "version": "1.2.0-alpha.15",
3
+ "version": "1.2.0-alpha.16",
4
4
  "description": "Agentic coding with DataLab Rotterdam's Nova AI in your terminal: interactive TUI, headless mode, and an ACP agent for editors",
5
5
  "license": "Apache-2.0",
6
6
  "author": "DataLab Rotterdam",