ai-sdk-provider-gemini-cli-agentic 0.1.3 → 0.1.6

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/dist/index.cjs CHANGED
@@ -2,10 +2,15 @@
2
2
 
3
3
  var provider = require('@ai-sdk/provider');
4
4
  var child_process = require('child_process');
5
+ var treeKill = require('tree-kill');
5
6
  var crypto = require('crypto');
6
7
  var providerUtils = require('@ai-sdk/provider-utils');
7
8
  var zod = require('zod');
8
9
 
10
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
11
+
12
+ var treeKill__default = /*#__PURE__*/_interopDefault(treeKill);
13
+
9
14
  // src/gemini-cli-provider.ts
10
15
 
11
16
  // src/stream-parser.ts
@@ -363,30 +368,18 @@ var GeminiCliLanguageModel = class {
363
368
  stdio: ["pipe", "pipe", "pipe"],
364
369
  detached: !isWin
365
370
  });
366
- const killProcessTree = (signal = "SIGTERM") => {
367
- if (child.pid) {
368
- if (isWin) {
369
- child_process.spawn("taskkill", ["/pid", String(child.pid), "/T", "/F"], { stdio: "ignore" });
370
- } else {
371
- try {
372
- process.kill(-child.pid, signal);
373
- } catch {
374
- child.kill(signal);
375
- }
376
- }
377
- } else {
378
- child.kill(signal);
379
- }
371
+ const killProcessTree = (pid, signal = "SIGTERM") => {
372
+ treeKill__default.default(pid, signal);
380
373
  };
381
374
  child.stdin.write(promptText);
382
375
  child.stdin.end();
383
376
  let onAbort;
384
377
  if (options.abortSignal) {
385
378
  if (options.abortSignal.aborted) {
386
- killProcessTree();
379
+ child.pid && killProcessTree(child.pid);
387
380
  throw options.abortSignal.reason ?? new Error("Request aborted");
388
381
  }
389
- onAbort = () => killProcessTree();
382
+ onAbort = () => child.pid && killProcessTree(child.pid);
390
383
  options.abortSignal.addEventListener("abort", onAbort, { once: true });
391
384
  }
392
385
  const startTime = Date.now();
@@ -453,6 +446,7 @@ var GeminiCliLanguageModel = class {
453
446
  reject(this.handleSpawnError(e, promptExcerpt));
454
447
  });
455
448
  child.on("close", (code) => {
449
+ child.pid && killProcessTree(child.pid);
456
450
  const duration = Date.now() - startTime;
457
451
  if (code === 0) {
458
452
  this.logger.info(`[gemini-cli] Completed in ${duration}ms`);
@@ -519,20 +513,8 @@ var GeminiCliLanguageModel = class {
519
513
  stdio: ["pipe", "pipe", "pipe"],
520
514
  detached: !isWin
521
515
  });
522
- const killProcessTree = (signal = "SIGTERM") => {
523
- if (child.pid) {
524
- if (isWin) {
525
- child_process.spawn("taskkill", ["/pid", String(child.pid), "/T", "/F"], { stdio: "ignore" });
526
- } else {
527
- try {
528
- process.kill(-child.pid, signal);
529
- } catch {
530
- child.kill(signal);
531
- }
532
- }
533
- } else {
534
- child.kill(signal);
535
- }
516
+ const killProcessTree = (pid, signal = "SIGTERM") => {
517
+ treeKill__default.default(pid, signal);
536
518
  };
537
519
  child.stdin.write(promptText);
538
520
  child.stdin.end();
@@ -542,10 +524,10 @@ var GeminiCliLanguageModel = class {
542
524
  let textId;
543
525
  let lastStatus;
544
526
  const toolResults = /* @__PURE__ */ new Map();
545
- const onAbort = () => killProcessTree();
527
+ const onAbort = () => child.pid && killProcessTree(child.pid);
546
528
  if (abortSignal) {
547
529
  if (abortSignal.aborted) {
548
- killProcessTree();
530
+ child.pid && killProcessTree(child.pid);
549
531
  controller.error(abortSignal.reason ?? new Error("Request aborted"));
550
532
  return;
551
533
  }
@@ -630,6 +612,7 @@ var GeminiCliLanguageModel = class {
630
612
  controller.error(model.handleSpawnError(e, promptExcerpt));
631
613
  });
632
614
  child.on("close", (code) => {
615
+ child.pid && killProcessTree(child.pid);
633
616
  const duration = Date.now() - startTime;
634
617
  if (abortSignal) {
635
618
  abortSignal.removeEventListener("abort", onAbort);
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { NoSuchModelError, LoadAPIKeyError, APICallError } from '@ai-sdk/provider';
2
2
  import { spawn } from 'child_process';
3
+ import treeKill from 'tree-kill';
3
4
  import { randomUUID } from 'crypto';
4
5
  import { parseProviderOptions, generateId } from '@ai-sdk/provider-utils';
5
6
  import { z } from 'zod';
@@ -361,30 +362,18 @@ var GeminiCliLanguageModel = class {
361
362
  stdio: ["pipe", "pipe", "pipe"],
362
363
  detached: !isWin
363
364
  });
364
- const killProcessTree = (signal = "SIGTERM") => {
365
- if (child.pid) {
366
- if (isWin) {
367
- spawn("taskkill", ["/pid", String(child.pid), "/T", "/F"], { stdio: "ignore" });
368
- } else {
369
- try {
370
- process.kill(-child.pid, signal);
371
- } catch {
372
- child.kill(signal);
373
- }
374
- }
375
- } else {
376
- child.kill(signal);
377
- }
365
+ const killProcessTree = (pid, signal = "SIGTERM") => {
366
+ treeKill(pid, signal);
378
367
  };
379
368
  child.stdin.write(promptText);
380
369
  child.stdin.end();
381
370
  let onAbort;
382
371
  if (options.abortSignal) {
383
372
  if (options.abortSignal.aborted) {
384
- killProcessTree();
373
+ child.pid && killProcessTree(child.pid);
385
374
  throw options.abortSignal.reason ?? new Error("Request aborted");
386
375
  }
387
- onAbort = () => killProcessTree();
376
+ onAbort = () => child.pid && killProcessTree(child.pid);
388
377
  options.abortSignal.addEventListener("abort", onAbort, { once: true });
389
378
  }
390
379
  const startTime = Date.now();
@@ -451,6 +440,7 @@ var GeminiCliLanguageModel = class {
451
440
  reject(this.handleSpawnError(e, promptExcerpt));
452
441
  });
453
442
  child.on("close", (code) => {
443
+ child.pid && killProcessTree(child.pid);
454
444
  const duration = Date.now() - startTime;
455
445
  if (code === 0) {
456
446
  this.logger.info(`[gemini-cli] Completed in ${duration}ms`);
@@ -517,20 +507,8 @@ var GeminiCliLanguageModel = class {
517
507
  stdio: ["pipe", "pipe", "pipe"],
518
508
  detached: !isWin
519
509
  });
520
- const killProcessTree = (signal = "SIGTERM") => {
521
- if (child.pid) {
522
- if (isWin) {
523
- spawn("taskkill", ["/pid", String(child.pid), "/T", "/F"], { stdio: "ignore" });
524
- } else {
525
- try {
526
- process.kill(-child.pid, signal);
527
- } catch {
528
- child.kill(signal);
529
- }
530
- }
531
- } else {
532
- child.kill(signal);
533
- }
510
+ const killProcessTree = (pid, signal = "SIGTERM") => {
511
+ treeKill(pid, signal);
534
512
  };
535
513
  child.stdin.write(promptText);
536
514
  child.stdin.end();
@@ -540,10 +518,10 @@ var GeminiCliLanguageModel = class {
540
518
  let textId;
541
519
  let lastStatus;
542
520
  const toolResults = /* @__PURE__ */ new Map();
543
- const onAbort = () => killProcessTree();
521
+ const onAbort = () => child.pid && killProcessTree(child.pid);
544
522
  if (abortSignal) {
545
523
  if (abortSignal.aborted) {
546
- killProcessTree();
524
+ child.pid && killProcessTree(child.pid);
547
525
  controller.error(abortSignal.reason ?? new Error("Request aborted"));
548
526
  return;
549
527
  }
@@ -628,6 +606,7 @@ var GeminiCliLanguageModel = class {
628
606
  controller.error(model.handleSpawnError(e, promptExcerpt));
629
607
  });
630
608
  child.on("close", (code) => {
609
+ child.pid && killProcessTree(child.pid);
631
610
  const duration = Date.now() - startTime;
632
611
  if (abortSignal) {
633
612
  abortSignal.removeEventListener("abort", onAbort);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-sdk-provider-gemini-cli-agentic",
3
- "version": "0.1.3",
3
+ "version": "0.1.6",
4
4
  "description": "AI SDK v6 provider for Google Gemini CLI agentic mode",
5
5
  "keywords": [
6
6
  "ai-sdk",
@@ -49,7 +49,8 @@
49
49
  },
50
50
  "dependencies": {
51
51
  "@ai-sdk/provider": "^3.0.0",
52
- "@ai-sdk/provider-utils": "^4.0.1"
52
+ "@ai-sdk/provider-utils": "^4.0.1",
53
+ "tree-kill": "^1.2.2"
53
54
  },
54
55
  "devDependencies": {
55
56
  "@eslint/js": "^9.28.0",