@wrongstack/tools 0.292.1 → 0.295.0
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/_env.d.ts +1 -1
- package/dist/_env.d.ts.map +1 -1
- package/dist/_fetch-guard.d.ts.map +1 -1
- package/dist/_spawn-stream.d.ts +1 -1
- package/dist/_spawn-stream.d.ts.map +1 -1
- package/dist/_util.d.ts +1 -1
- package/dist/_util.d.ts.map +1 -1
- package/dist/audit.d.ts +1 -1
- package/dist/audit.d.ts.map +1 -1
- package/dist/audit.js +81 -16
- package/dist/audit.js.map +2 -2
- package/dist/bash.d.ts +1 -1
- package/dist/bash.d.ts.map +1 -1
- package/dist/bash.js +66 -52
- package/dist/bash.js.map +3 -3
- package/dist/batch-tool-use.d.ts +1 -1
- package/dist/batch-tool-use.d.ts.map +1 -1
- package/dist/batch-tool-use.js +1 -1
- package/dist/batch-tool-use.js.map +1 -1
- package/dist/browser/index.js +10 -1
- package/dist/browser/index.js.map +2 -2
- package/dist/browser/manager.d.ts +2 -0
- package/dist/browser/manager.d.ts.map +1 -1
- package/dist/browser/tools.d.ts +1 -1
- package/dist/browser/tools.d.ts.map +1 -1
- package/dist/builtin.d.ts +1 -1
- package/dist/builtin.d.ts.map +1 -1
- package/dist/builtin.js +1394 -553
- package/dist/builtin.js.map +4 -4
- package/dist/codebase-index/background-indexer.d.ts +2 -2
- package/dist/codebase-index/background-indexer.d.ts.map +1 -1
- package/dist/codebase-index/bm25.d.ts +3 -1
- package/dist/codebase-index/bm25.d.ts.map +1 -1
- package/dist/codebase-index/codebase-index-tool.d.ts +1 -1
- package/dist/codebase-index/codebase-index-tool.d.ts.map +1 -1
- package/dist/codebase-index/codebase-search-tool.d.ts +1 -1
- package/dist/codebase-index/codebase-search-tool.d.ts.map +1 -1
- package/dist/codebase-index/codebase-stats-tool.d.ts +1 -1
- package/dist/codebase-index/codebase-stats-tool.d.ts.map +1 -1
- package/dist/codebase-index/generic-parser.d.ts +34 -0
- package/dist/codebase-index/generic-parser.d.ts.map +1 -0
- package/dist/codebase-index/go-parser.d.ts +1 -1
- package/dist/codebase-index/go-parser.d.ts.map +1 -1
- package/dist/codebase-index/index.d.ts +4 -2
- package/dist/codebase-index/index.d.ts.map +1 -1
- package/dist/codebase-index/index.js +1036 -341
- package/dist/codebase-index/index.js.map +4 -4
- package/dist/codebase-index/indexer.d.ts +6 -1
- package/dist/codebase-index/indexer.d.ts.map +1 -1
- package/dist/codebase-index/json-parser.d.ts +1 -1
- package/dist/codebase-index/languages.d.ts +25 -0
- package/dist/codebase-index/languages.d.ts.map +1 -0
- package/dist/codebase-index/py-parser.d.ts +9 -1
- package/dist/codebase-index/py-parser.d.ts.map +1 -1
- package/dist/codebase-index/refs-extractor.d.ts.map +1 -1
- package/dist/codebase-index/rs-parser.d.ts +1 -1
- package/dist/codebase-index/rs-parser.d.ts.map +1 -1
- package/dist/codebase-index/schema.d.ts +9 -2
- package/dist/codebase-index/schema.d.ts.map +1 -1
- package/dist/codebase-index/spawn-gate.d.ts +15 -0
- package/dist/codebase-index/spawn-gate.d.ts.map +1 -0
- package/dist/codebase-index/ts-parser.d.ts +2 -2
- package/dist/codebase-index/ts-parser.d.ts.map +1 -1
- package/dist/codebase-index/worker.js +961 -317
- package/dist/codebase-index/worker.js.map +4 -4
- package/dist/codebase-index/writer.d.ts +83 -4
- package/dist/codebase-index/writer.d.ts.map +1 -1
- package/dist/codebase-index/yaml-parser.d.ts +1 -1
- package/dist/design.d.ts +5 -2
- package/dist/design.d.ts.map +1 -1
- package/dist/design.js +36 -3
- package/dist/design.js.map +2 -2
- package/dist/diff.d.ts +1 -1
- package/dist/diff.d.ts.map +1 -1
- package/dist/diff.js +2 -2
- package/dist/diff.js.map +1 -1
- package/dist/document.d.ts +1 -1
- package/dist/document.d.ts.map +1 -1
- package/dist/document.js +1 -1
- package/dist/document.js.map +1 -1
- package/dist/e2e.d.ts +1 -1
- package/dist/e2e.d.ts.map +1 -1
- package/dist/e2e.js +1 -1
- package/dist/e2e.js.map +1 -1
- package/dist/edit.d.ts +1 -1
- package/dist/edit.d.ts.map +1 -1
- package/dist/edit.js +3 -3
- package/dist/edit.js.map +2 -2
- package/dist/exec.d.ts +1 -1
- package/dist/exec.d.ts.map +1 -1
- package/dist/exec.js +60 -21
- package/dist/exec.js.map +3 -3
- package/dist/fetch.d.ts +1 -1
- package/dist/fetch.d.ts.map +1 -1
- package/dist/fetch.js +4 -5
- package/dist/fetch.js.map +2 -2
- package/dist/format.d.ts +1 -1
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +81 -16
- package/dist/format.js.map +2 -2
- package/dist/git.d.ts +1 -1
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +3 -2
- package/dist/git.js.map +2 -2
- package/dist/glob.d.ts +1 -1
- package/dist/glob.d.ts.map +1 -1
- package/dist/glob.js +2 -2
- package/dist/glob.js.map +1 -1
- package/dist/grep.d.ts +1 -1
- package/dist/grep.d.ts.map +1 -1
- package/dist/grep.js +4 -3
- package/dist/grep.js.map +2 -2
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1657 -705
- package/dist/index.js.map +4 -4
- package/dist/install.d.ts +1 -1
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +85 -17
- package/dist/install.js.map +2 -2
- package/dist/json.d.ts +1 -1
- package/dist/json.d.ts.map +1 -1
- package/dist/json.js +2 -2
- package/dist/json.js.map +2 -2
- package/dist/kanban.d.ts +4 -3
- package/dist/kanban.d.ts.map +1 -1
- package/dist/kanban.js +94 -27
- package/dist/kanban.js.map +2 -2
- package/dist/languages/execute-tool.d.ts +1 -1
- package/dist/languages/execute-tool.d.ts.map +1 -1
- package/dist/languages/execute.d.ts +1 -1
- package/dist/languages/execute.d.ts.map +1 -1
- package/dist/languages/index.d.ts +1 -1
- package/dist/languages/index.d.ts.map +1 -1
- package/dist/languages/index.js +99 -17
- package/dist/languages/index.js.map +2 -2
- package/dist/languages/package-tool.d.ts +3 -4
- package/dist/languages/package-tool.d.ts.map +1 -1
- package/dist/languages/plan.d.ts.map +1 -1
- package/dist/languages/profiles/additional.d.ts.map +1 -1
- package/dist/languages/profiles/primary.d.ts.map +1 -1
- package/dist/languages/tool.d.ts +1 -1
- package/dist/languages/tool.d.ts.map +1 -1
- package/dist/lint.d.ts +1 -1
- package/dist/lint.d.ts.map +1 -1
- package/dist/lint.js +81 -16
- package/dist/lint.js.map +2 -2
- package/dist/logs.d.ts +1 -1
- package/dist/logs.d.ts.map +1 -1
- package/dist/logs.js +2 -2
- package/dist/logs.js.map +1 -1
- package/dist/memory.d.ts +1 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +1 -1
- package/dist/memory.js.map +1 -1
- package/dist/mode.d.ts +1 -1
- package/dist/mode.d.ts.map +1 -1
- package/dist/mode.js.map +1 -1
- package/dist/outdated.d.ts +1 -1
- package/dist/outdated.d.ts.map +1 -1
- package/dist/outdated.js +101 -19
- package/dist/outdated.js.map +2 -2
- package/dist/pack.d.ts +1 -1
- package/dist/pack.js +1394 -553
- package/dist/pack.js.map +4 -4
- package/dist/patch.d.ts +1 -1
- package/dist/patch.d.ts.map +1 -1
- package/dist/patch.js +2 -2
- package/dist/patch.js.map +1 -1
- package/dist/plan.d.ts +1 -1
- package/dist/plan.d.ts.map +1 -1
- package/dist/plan.js +7 -7
- package/dist/plan.js.map +2 -2
- package/dist/process-guardian.d.ts +7 -0
- package/dist/process-guardian.d.ts.map +1 -1
- package/dist/process-registry-persistent.d.ts +5 -0
- package/dist/process-registry-persistent.d.ts.map +1 -1
- package/dist/process-registry.d.ts +9 -1
- package/dist/process-registry.d.ts.map +1 -1
- package/dist/process-registry.js +18 -3
- package/dist/process-registry.js.map +2 -2
- package/dist/ps-slash.js +54 -15
- package/dist/ps-slash.js.map +2 -2
- package/dist/read.d.ts +1 -1
- package/dist/read.d.ts.map +1 -1
- package/dist/read.js +3 -2
- package/dist/read.js.map +2 -2
- package/dist/replace.d.ts +1 -1
- package/dist/replace.d.ts.map +1 -1
- package/dist/replace.js +4 -4
- package/dist/replace.js.map +2 -2
- package/dist/scaffold.d.ts +1 -1
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +2 -2
- package/dist/scaffold.js.map +1 -1
- package/dist/search.d.ts +1 -1
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +4 -4
- package/dist/search.js.map +2 -2
- package/dist/session-kanban.d.ts +4 -1
- package/dist/session-kanban.d.ts.map +1 -1
- package/dist/session-kanban.js +23 -15
- package/dist/session-kanban.js.map +2 -2
- package/dist/set-working-dir.d.ts +1 -1
- package/dist/set-working-dir.d.ts.map +1 -1
- package/dist/skill.d.ts +1 -1
- package/dist/skill.d.ts.map +1 -1
- package/dist/skill.js +2 -5
- package/dist/skill.js.map +2 -2
- package/dist/spawn-background.d.ts.map +1 -1
- package/dist/task.d.ts +3 -2
- package/dist/task.d.ts.map +1 -1
- package/dist/task.js +6 -8
- package/dist/task.js.map +2 -2
- package/dist/test.d.ts +1 -1
- package/dist/test.d.ts.map +1 -1
- package/dist/test.js +81 -16
- package/dist/test.js.map +2 -2
- package/dist/todo.d.ts +2 -1
- package/dist/todo.d.ts.map +1 -1
- package/dist/todo.js +4 -4
- package/dist/todo.js.map +2 -2
- package/dist/tool-help.d.ts +1 -1
- package/dist/tool-help.d.ts.map +1 -1
- package/dist/tool-help.js.map +1 -1
- package/dist/tool-search.d.ts +1 -1
- package/dist/tool-search.d.ts.map +1 -1
- package/dist/tool-search.js.map +1 -1
- package/dist/tool-tier.d.ts +16 -0
- package/dist/tool-tier.d.ts.map +1 -0
- package/dist/tool-tier.js +22233 -0
- package/dist/tool-tier.js.map +7 -0
- package/dist/tool-use.d.ts +1 -1
- package/dist/tool-use.d.ts.map +1 -1
- package/dist/tool-use.js.map +1 -1
- package/dist/tree.d.ts +1 -1
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +2 -2
- package/dist/tree.js.map +1 -1
- package/dist/typecheck.d.ts +1 -1
- package/dist/typecheck.d.ts.map +1 -1
- package/dist/typecheck.js +81 -16
- package/dist/typecheck.js.map +2 -2
- package/dist/write.d.ts +1 -1
- package/dist/write.d.ts.map +1 -1
- package/dist/write.js +3 -2
- package/dist/write.js.map +2 -2
- package/package.json +7 -3
package/dist/bash.d.ts
CHANGED
package/dist/bash.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../src/bash.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../src/bash.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,IAAI,EAAmB,MAAM,wBAAwB,CAAC;AASpE,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAClC;AAED,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AA4BD,eAAO,MAAM,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAyoBhD,CAAC;AAGF,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC"}
|
package/dist/bash.js
CHANGED
|
@@ -5,16 +5,16 @@ import {
|
|
|
5
5
|
emitProcessCompleted,
|
|
6
6
|
emitProcessOutput,
|
|
7
7
|
emitProcessStarted
|
|
8
|
-
} from "@wrongstack/core";
|
|
8
|
+
} from "@wrongstack/core/observability";
|
|
9
9
|
|
|
10
10
|
// src/_env.ts
|
|
11
|
-
import { buildChildEnv } from "@wrongstack/core";
|
|
11
|
+
import { buildChildEnv } from "@wrongstack/core/utils";
|
|
12
12
|
|
|
13
13
|
// src/_output-spool.ts
|
|
14
14
|
import { createWriteStream, mkdirSync } from "node:fs";
|
|
15
15
|
import * as fsp from "node:fs/promises";
|
|
16
16
|
import * as path from "node:path";
|
|
17
|
-
import { wstackGlobalRoot } from "@wrongstack/core";
|
|
17
|
+
import { wstackGlobalRoot } from "@wrongstack/core/utils";
|
|
18
18
|
var SPOOL_RETENTION_MS = 7 * 24 * 60 * 60 * 1e3;
|
|
19
19
|
var SPOOL_WRITE_HWM_BYTES = 4 * 1024 * 1024;
|
|
20
20
|
var sweepStarted = false;
|
|
@@ -118,7 +118,7 @@ function createOutputSpool(opts) {
|
|
|
118
118
|
}
|
|
119
119
|
|
|
120
120
|
// src/_util.ts
|
|
121
|
-
import * as Core from "@wrongstack/core";
|
|
121
|
+
import * as Core from "@wrongstack/core/utils";
|
|
122
122
|
var COMMAND_OUTPUT_MAX_BYTES = 32768;
|
|
123
123
|
var REPEAT_RUN_THRESHOLD = 3;
|
|
124
124
|
function collapseCarriageReturns(text) {
|
|
@@ -387,7 +387,7 @@ var CircuitBreaker = class {
|
|
|
387
387
|
};
|
|
388
388
|
|
|
389
389
|
// src/_redact-command.ts
|
|
390
|
-
import { expectDefined } from "@wrongstack/core";
|
|
390
|
+
import { expectDefined } from "@wrongstack/core/utils";
|
|
391
391
|
var SENSITIVE_FLAG_PATTERNS = [
|
|
392
392
|
// --flag=value or --flag "value" (value captured up to next space or comma)
|
|
393
393
|
/--(?:token|password|passwd|pwd|secret|api[-_]?key|api[-_]?secret|auth|credential|private[-_]?key|access[-_]?key|github[-_]?token|gh[-_]?token|bearer|jwt|oauth|pin|pincode|passphrase|access[-_]?token)(?:[=\s,][^\s]*)?/gi,
|
|
@@ -481,7 +481,12 @@ var ProcessRegistryImpl = class {
|
|
|
481
481
|
this.breaker.setEnabled(false);
|
|
482
482
|
}
|
|
483
483
|
register(info) {
|
|
484
|
-
this.processes.set(info.pid, {
|
|
484
|
+
this.processes.set(info.pid, {
|
|
485
|
+
...info,
|
|
486
|
+
killed: false,
|
|
487
|
+
protected: info.protected ?? false,
|
|
488
|
+
background: info.background ?? false
|
|
489
|
+
});
|
|
485
490
|
}
|
|
486
491
|
_isSafeSignalPid(pid) {
|
|
487
492
|
return Number.isInteger(pid) && pid > 1 && pid !== process.pid && pid !== process.ppid;
|
|
@@ -534,12 +539,21 @@ var ProcessRegistryImpl = class {
|
|
|
534
539
|
}
|
|
535
540
|
return n;
|
|
536
541
|
}
|
|
542
|
+
/** Count of active jobs explicitly launched in background mode. */
|
|
543
|
+
get activeBackgroundCount() {
|
|
544
|
+
let n = 0;
|
|
545
|
+
for (const p of this.processes.values()) {
|
|
546
|
+
if (p.background && !p.killed) n++;
|
|
547
|
+
}
|
|
548
|
+
return n;
|
|
549
|
+
}
|
|
537
550
|
/**
|
|
538
551
|
* Combined stats for observability — used by /ps and the TUI status bar.
|
|
539
552
|
*/
|
|
540
553
|
stats() {
|
|
541
554
|
return {
|
|
542
555
|
activeCount: this.activeCount,
|
|
556
|
+
backgroundCount: this.activeBackgroundCount,
|
|
543
557
|
totalCount: this.processes.size,
|
|
544
558
|
breaker: this.breaker.snapshot()
|
|
545
559
|
};
|
|
@@ -640,7 +654,7 @@ var ProcessRegistryImpl = class {
|
|
|
640
654
|
this.autoKillTimer = setTimeout(() => {
|
|
641
655
|
this.autoKillTimer = null;
|
|
642
656
|
this.autoKillArmedAt = null;
|
|
643
|
-
this.killAll({ force: false });
|
|
657
|
+
this.killAll({ force: false, preserveBackground: true });
|
|
644
658
|
this.breaker.forceReset();
|
|
645
659
|
this._emitBreakerCountdown();
|
|
646
660
|
}, this.autoKillResetMs);
|
|
@@ -680,6 +694,7 @@ var ProcessRegistryImpl = class {
|
|
|
680
694
|
if (!p) return false;
|
|
681
695
|
if (p.killed) return true;
|
|
682
696
|
if (p.protected) return false;
|
|
697
|
+
if (opts.preserveBackground && p.background) return false;
|
|
683
698
|
const { force = false, graceMs = DEFAULT_GRACE_MS } = opts;
|
|
684
699
|
const isWin2 = os.platform() === "win32";
|
|
685
700
|
if (isWin2) {
|
|
@@ -790,8 +805,9 @@ import * as os3 from "node:os";
|
|
|
790
805
|
// src/process-registry-persistent.ts
|
|
791
806
|
import * as fs from "node:fs/promises";
|
|
792
807
|
import * as os2 from "node:os";
|
|
808
|
+
import { wstackGlobalRoot as wstackGlobalRoot3 } from "@wrongstack/core/utils";
|
|
793
809
|
import * as path2 from "node:path";
|
|
794
|
-
var REGISTRY_FILE = "
|
|
810
|
+
var REGISTRY_FILE = "process-registry.json";
|
|
795
811
|
function toErrorMessage(err) {
|
|
796
812
|
return err instanceof Error ? err.message : String(err);
|
|
797
813
|
}
|
|
@@ -809,7 +825,7 @@ function emitStructuredLog(level, event, message, error) {
|
|
|
809
825
|
}
|
|
810
826
|
var HEARTBEAT_INTERVAL_MS = 5e3;
|
|
811
827
|
var STALE_THRESHOLD_MS = 3e4;
|
|
812
|
-
var LOCKFILE = ".
|
|
828
|
+
var LOCKFILE = ".process-registry.lock";
|
|
813
829
|
function generateInstanceId() {
|
|
814
830
|
const hostname2 = os2.hostname();
|
|
815
831
|
const pid = process.pid;
|
|
@@ -898,12 +914,18 @@ var PersistentProcessRegistry = class {
|
|
|
898
914
|
lockPath;
|
|
899
915
|
baseRegistry;
|
|
900
916
|
heartbeatInterval = null;
|
|
917
|
+
cleanupInterval = null;
|
|
918
|
+
heartbeatRunning = false;
|
|
919
|
+
cleanupRunning = false;
|
|
901
920
|
isShuttingDown = false;
|
|
921
|
+
onProcessExit = () => {
|
|
922
|
+
void this.syncToPersistent();
|
|
923
|
+
};
|
|
902
924
|
constructor(baseRegistry) {
|
|
903
925
|
this.instanceId = generateInstanceId();
|
|
904
|
-
const
|
|
905
|
-
this.registryPath = path2.join(
|
|
906
|
-
this.lockPath = path2.join(
|
|
926
|
+
const globalRoot = wstackGlobalRoot3();
|
|
927
|
+
this.registryPath = path2.join(globalRoot, REGISTRY_FILE);
|
|
928
|
+
this.lockPath = path2.join(globalRoot, LOCKFILE);
|
|
907
929
|
this.baseRegistry = baseRegistry ?? getProcessRegistry();
|
|
908
930
|
this.ensureDirectory().catch((err) => {
|
|
909
931
|
emitStructuredLog("warn", "process_registry.dir_create_failed", "PersistentProcessRegistry: failed to create .wrongstack directory", err);
|
|
@@ -922,16 +944,18 @@ var PersistentProcessRegistry = class {
|
|
|
922
944
|
*/
|
|
923
945
|
start() {
|
|
924
946
|
if (this.heartbeatInterval) return;
|
|
925
|
-
this.
|
|
947
|
+
this.isShuttingDown = false;
|
|
948
|
+
this.heartbeat();
|
|
926
949
|
this.heartbeatInterval = setInterval(() => {
|
|
927
950
|
this.heartbeat();
|
|
928
951
|
}, HEARTBEAT_INTERVAL_MS);
|
|
929
952
|
this.heartbeatInterval.unref?.();
|
|
930
|
-
setInterval(() => {
|
|
931
|
-
this.
|
|
932
|
-
}, STALE_THRESHOLD_MS)
|
|
953
|
+
this.cleanupInterval = setInterval(() => {
|
|
954
|
+
this.cleanup();
|
|
955
|
+
}, STALE_THRESHOLD_MS);
|
|
956
|
+
this.cleanupInterval.unref?.();
|
|
933
957
|
this.registerMainProcess();
|
|
934
|
-
process.on("exit",
|
|
958
|
+
process.on("exit", this.onProcessExit);
|
|
935
959
|
}
|
|
936
960
|
/**
|
|
937
961
|
* Stop the heartbeat and clean up.
|
|
@@ -942,7 +966,12 @@ var PersistentProcessRegistry = class {
|
|
|
942
966
|
clearInterval(this.heartbeatInterval);
|
|
943
967
|
this.heartbeatInterval = null;
|
|
944
968
|
}
|
|
945
|
-
this.
|
|
969
|
+
if (this.cleanupInterval) {
|
|
970
|
+
clearInterval(this.cleanupInterval);
|
|
971
|
+
this.cleanupInterval = null;
|
|
972
|
+
}
|
|
973
|
+
process.off("exit", this.onProcessExit);
|
|
974
|
+
void this.syncToPersistent();
|
|
946
975
|
}
|
|
947
976
|
/**
|
|
948
977
|
* Register the main WrongStack process as protected.
|
|
@@ -1026,8 +1055,18 @@ var PersistentProcessRegistry = class {
|
|
|
1026
1055
|
* Send heartbeat to mark all this instance's processes as alive.
|
|
1027
1056
|
*/
|
|
1028
1057
|
heartbeat() {
|
|
1029
|
-
if (this.isShuttingDown) return;
|
|
1030
|
-
this.
|
|
1058
|
+
if (this.isShuttingDown || this.heartbeatRunning) return;
|
|
1059
|
+
this.heartbeatRunning = true;
|
|
1060
|
+
void this.syncToPersistent().finally(() => {
|
|
1061
|
+
this.heartbeatRunning = false;
|
|
1062
|
+
});
|
|
1063
|
+
}
|
|
1064
|
+
cleanup() {
|
|
1065
|
+
if (this.isShuttingDown || this.cleanupRunning) return;
|
|
1066
|
+
this.cleanupRunning = true;
|
|
1067
|
+
void this.cleanupStaleEntries().finally(() => {
|
|
1068
|
+
this.cleanupRunning = false;
|
|
1069
|
+
});
|
|
1031
1070
|
}
|
|
1032
1071
|
/**
|
|
1033
1072
|
* Sync this instance's processes to the persistent registry.
|
|
@@ -1781,14 +1820,12 @@ var bashTool = {
|
|
|
1781
1820
|
const detached = !isWin2;
|
|
1782
1821
|
const startedAt = Date.now();
|
|
1783
1822
|
if (input.background) {
|
|
1784
|
-
let buf2 = "";
|
|
1785
|
-
let truncated = false;
|
|
1786
1823
|
const child2 = spawn2(shell, args, {
|
|
1787
1824
|
cwd: ctx.projectRoot,
|
|
1788
1825
|
env,
|
|
1789
1826
|
// PowerShell takes the script on stdin (no argv quoting); cmd.exe
|
|
1790
1827
|
// and POSIX shells ignore stdin when given the command inline.
|
|
1791
|
-
stdio: [plan.useStdin ? "pipe" : "ignore", "
|
|
1828
|
+
stdio: [plan.useStdin ? "pipe" : "ignore", "ignore", "ignore"],
|
|
1792
1829
|
// win32: CreateProcess IGNORES CREATE_NO_WINDOW (windowsHide) when
|
|
1793
1830
|
// DETACHED_PROCESS (detached: true) is set, so the console-less
|
|
1794
1831
|
// cmd.exe's grandchildren (node, dev servers) each allocate a fresh
|
|
@@ -1807,8 +1844,8 @@ var bashTool = {
|
|
|
1807
1844
|
}
|
|
1808
1845
|
}
|
|
1809
1846
|
const pid2 = child2.pid;
|
|
1810
|
-
|
|
1811
|
-
|
|
1847
|
+
const stdoutBytes2 = 0;
|
|
1848
|
+
const stderrBytes2 = 0;
|
|
1812
1849
|
let telemetryCompleted2 = false;
|
|
1813
1850
|
emitProcessStarted({
|
|
1814
1851
|
...pid2 !== void 0 ? { pid: pid2 } : {},
|
|
@@ -1841,41 +1878,17 @@ var bashTool = {
|
|
|
1841
1878
|
startedAt: Date.now(),
|
|
1842
1879
|
sessionId: ctx.session?.id,
|
|
1843
1880
|
child: child2,
|
|
1844
|
-
processGroupLeader: detached && child2.pid === pid2
|
|
1881
|
+
processGroupLeader: detached && child2.pid === pid2,
|
|
1882
|
+
background: true
|
|
1845
1883
|
});
|
|
1846
1884
|
child2.on("close", () => registry.unregister(pid2));
|
|
1847
1885
|
}
|
|
1848
|
-
const onBgData = (chunk, stream) => {
|
|
1849
|
-
if (stream === "stdout") stdoutBytes2 += chunk.byteLength;
|
|
1850
|
-
else stderrBytes2 += chunk.byteLength;
|
|
1851
|
-
emitProcessOutput({ pid: pid2, stream, chunk });
|
|
1852
|
-
if (truncated) return;
|
|
1853
|
-
const remain = MAX_OUTPUT - buf2.length;
|
|
1854
|
-
if (remain > 0) {
|
|
1855
|
-
buf2 += chunk.toString().slice(0, remain);
|
|
1856
|
-
}
|
|
1857
|
-
if (buf2.length >= MAX_OUTPUT) {
|
|
1858
|
-
truncated = true;
|
|
1859
|
-
child2.stdout?.off("data", onBgStdout);
|
|
1860
|
-
child2.stderr?.off("data", onBgStderr);
|
|
1861
|
-
}
|
|
1862
|
-
};
|
|
1863
|
-
const onBgStdout = (chunk) => onBgData(chunk, "stdout");
|
|
1864
|
-
const onBgStderr = (chunk) => onBgData(chunk, "stderr");
|
|
1865
|
-
child2.stdout?.on("data", onBgStdout);
|
|
1866
|
-
child2.stderr?.on("data", onBgStderr);
|
|
1867
|
-
const cleanupBackground = () => {
|
|
1868
|
-
child2.stdout?.off("data", onBgStdout);
|
|
1869
|
-
child2.stderr?.off("data", onBgStderr);
|
|
1870
|
-
};
|
|
1871
1886
|
child2.on("error", () => {
|
|
1872
|
-
cleanupBackground();
|
|
1873
1887
|
if (typeof pid2 === "number") registry.unregister(pid2);
|
|
1874
1888
|
registry.afterCall(Date.now() - startedAt, true, bypassBreaker);
|
|
1875
1889
|
completeBackground(1);
|
|
1876
1890
|
});
|
|
1877
1891
|
child2.on("close", (code, signal) => {
|
|
1878
|
-
cleanupBackground();
|
|
1879
1892
|
registry.afterCall(Date.now() - startedAt, false, bypassBreaker);
|
|
1880
1893
|
completeBackground(code ?? (signal ? 1 : 0), signal ?? void 0);
|
|
1881
1894
|
});
|
|
@@ -1883,7 +1896,7 @@ var bashTool = {
|
|
|
1883
1896
|
yield {
|
|
1884
1897
|
type: "final",
|
|
1885
1898
|
output: {
|
|
1886
|
-
output:
|
|
1899
|
+
output: "",
|
|
1887
1900
|
exit_code: null,
|
|
1888
1901
|
timed_out: false,
|
|
1889
1902
|
pid: pid2
|
|
@@ -2154,6 +2167,7 @@ ${hint}` : ""),
|
|
|
2154
2167
|
for (const entry of registry.bySession(sessionId)) {
|
|
2155
2168
|
if (entry.name !== "bash") continue;
|
|
2156
2169
|
if (entry.child.exitCode !== null) continue;
|
|
2170
|
+
if (entry.background) continue;
|
|
2157
2171
|
if (entry.protected) continue;
|
|
2158
2172
|
registry.kill(entry.pid, { force: true });
|
|
2159
2173
|
}
|