@wrongstack/tools 0.284.1 → 0.286.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/README.md +19 -0
- package/dist/_concurrency.d.ts +16 -0
- package/dist/_concurrency.d.ts.map +1 -0
- package/dist/_danger-detect.d.ts +54 -0
- package/dist/_danger-detect.d.ts.map +1 -0
- package/dist/_edit-match.d.ts +86 -0
- package/dist/_edit-match.d.ts.map +1 -0
- package/dist/_env.d.ts +6 -0
- package/dist/_env.d.ts.map +1 -0
- package/dist/_fetch-guard.d.ts +31 -0
- package/dist/_fetch-guard.d.ts.map +1 -0
- package/dist/_output-spool.d.ts +38 -0
- package/dist/_output-spool.d.ts.map +1 -0
- package/dist/_redact-command.d.ts +6 -0
- package/dist/_redact-command.d.ts.map +1 -0
- package/dist/_regex.d.ts +39 -0
- package/dist/_regex.d.ts.map +1 -0
- package/dist/_session-shell.d.ts +73 -0
- package/dist/_session-shell.d.ts.map +1 -0
- package/dist/_shell-pick.d.ts +158 -0
- package/dist/_shell-pick.d.ts.map +1 -0
- package/dist/_spawn-stream.d.ts +32 -0
- package/dist/_spawn-stream.d.ts.map +1 -0
- package/dist/_syntax-check.d.ts +16 -0
- package/dist/_syntax-check.d.ts.map +1 -0
- package/dist/_util.d.ts +68 -0
- package/dist/_util.d.ts.map +1 -0
- package/dist/_win32-resolve.d.ts +42 -0
- package/dist/_win32-resolve.d.ts.map +1 -0
- package/dist/audit.d.ts +4 -5
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +2743 -28
- package/dist/audit.js.map +7 -1
- package/dist/bash-kill-guard.d.ts +62 -0
- package/dist/bash-kill-guard.d.ts.map +1 -0
- package/dist/bash.d.ts +4 -5
- package/dist/bash.d.ts.map +1 -0
- package/dist/bash.js +59 -30
- package/dist/bash.js.map +7 -1
- package/dist/batch-tool-use.d.ts +4 -5
- package/dist/batch-tool-use.d.ts.map +1 -0
- package/dist/batch-tool-use.js +3 -3
- package/dist/batch-tool-use.js.map +7 -1
- package/dist/browser/artifacts.d.ts +13 -0
- package/dist/browser/artifacts.d.ts.map +1 -0
- package/dist/browser/index.d.ts +7 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +1264 -0
- package/dist/browser/index.js.map +7 -0
- package/dist/browser/manager.d.ts +57 -0
- package/dist/browser/manager.d.ts.map +1 -0
- package/dist/browser/network-guard-proxy.d.ts +23 -0
- package/dist/browser/network-guard-proxy.d.ts.map +1 -0
- package/dist/browser/security.d.ts +29 -0
- package/dist/browser/security.d.ts.map +1 -0
- package/dist/browser/tools.d.ts +62 -0
- package/dist/browser/tools.d.ts.map +1 -0
- package/dist/browser/types.d.ts +60 -0
- package/dist/browser/types.d.ts.map +1 -0
- package/dist/builtin.d.ts +11 -12
- package/dist/builtin.d.ts.map +1 -0
- package/dist/builtin.js +8099 -2178
- package/dist/builtin.js.map +7 -1
- package/dist/circuit-breaker.d.ts +4 -5
- package/dist/circuit-breaker.d.ts.map +1 -0
- package/dist/circuit-breaker.js +3 -3
- package/dist/circuit-breaker.js.map +7 -1
- package/dist/codebase-index/background-indexer.d.ts +116 -0
- package/dist/codebase-index/background-indexer.d.ts.map +1 -0
- package/dist/codebase-index/bm25.d.ts +40 -0
- package/dist/codebase-index/bm25.d.ts.map +1 -0
- package/dist/codebase-index/circuit-breaker.d.ts +94 -0
- package/dist/codebase-index/circuit-breaker.d.ts.map +1 -0
- package/dist/codebase-index/codebase-index-tool.d.ts +17 -0
- package/dist/codebase-index/codebase-index-tool.d.ts.map +1 -0
- package/dist/codebase-index/codebase-search-tool.d.ts +43 -0
- package/dist/codebase-index/codebase-search-tool.d.ts.map +1 -0
- package/dist/codebase-index/codebase-stats-tool.d.ts +23 -0
- package/dist/codebase-index/codebase-stats-tool.d.ts.map +1 -0
- package/dist/codebase-index/gitignore.d.ts +22 -0
- package/dist/codebase-index/gitignore.d.ts.map +1 -0
- package/dist/codebase-index/go-parser.d.ts +16 -0
- package/dist/codebase-index/go-parser.d.ts.map +1 -0
- package/dist/codebase-index/index-service.d.ts +25 -0
- package/dist/codebase-index/index-service.d.ts.map +1 -0
- package/dist/codebase-index/index.d.ts +23 -271
- package/dist/codebase-index/index.d.ts.map +1 -0
- package/dist/codebase-index/index.js +136 -68
- package/dist/codebase-index/index.js.map +7 -1
- package/dist/codebase-index/indexer.d.ts +28 -0
- package/dist/codebase-index/indexer.d.ts.map +1 -0
- package/dist/codebase-index/json-parser.d.ts +8 -0
- package/dist/codebase-index/json-parser.d.ts.map +1 -0
- package/dist/codebase-index/lsp-kind.d.ts +53 -0
- package/dist/codebase-index/lsp-kind.d.ts.map +1 -0
- package/dist/codebase-index/py-parser.d.ts +16 -0
- package/dist/codebase-index/py-parser.d.ts.map +1 -0
- package/dist/codebase-index/refs-extractor.d.ts +25 -0
- package/dist/codebase-index/refs-extractor.d.ts.map +1 -0
- package/dist/codebase-index/rs-parser.d.ts +8 -0
- package/dist/codebase-index/rs-parser.d.ts.map +1 -0
- package/dist/codebase-index/schema.d.ts +82 -0
- package/dist/codebase-index/schema.d.ts.map +1 -0
- package/dist/codebase-index/ts-parser.d.ts +30 -0
- package/dist/codebase-index/ts-parser.d.ts.map +1 -0
- package/dist/codebase-index/worker-protocol.d.ts +77 -0
- package/dist/codebase-index/worker-protocol.d.ts.map +1 -0
- package/dist/codebase-index/worker.d.ts +16 -2
- package/dist/codebase-index/worker.d.ts.map +1 -0
- package/dist/codebase-index/worker.js +103 -65
- package/dist/codebase-index/worker.js.map +7 -1
- package/dist/codebase-index/writer.d.ts +189 -0
- package/dist/codebase-index/writer.d.ts.map +1 -0
- package/dist/codebase-index/yaml-parser.d.ts +8 -0
- package/dist/codebase-index/yaml-parser.d.ts.map +1 -0
- package/dist/design.d.ts +38 -0
- package/dist/design.d.ts.map +1 -0
- package/dist/design.js +270 -0
- package/dist/design.js.map +7 -0
- package/dist/diff.d.ts +4 -5
- package/dist/diff.d.ts.map +1 -0
- package/dist/diff.js +14 -12
- package/dist/diff.js.map +7 -1
- package/dist/document.d.ts +4 -5
- package/dist/document.d.ts.map +1 -0
- package/dist/document.js +8 -7
- package/dist/document.js.map +7 -1
- package/dist/e2e.d.ts +56 -0
- package/dist/e2e.d.ts.map +1 -0
- package/dist/edit.d.ts +5 -36
- package/dist/edit.d.ts.map +1 -0
- package/dist/edit.js +28 -16
- package/dist/edit.js.map +7 -1
- package/dist/exec.d.ts +67 -2
- package/dist/exec.d.ts.map +1 -0
- package/dist/exec.js +51 -26
- package/dist/exec.js.map +7 -1
- package/dist/fetch.d.ts +4 -32
- package/dist/fetch.d.ts.map +1 -0
- package/dist/fetch.js +89 -77
- package/dist/fetch.js.map +7 -1
- package/dist/format.d.ts +4 -5
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +2415 -28
- package/dist/format.js.map +7 -1
- package/dist/git.d.ts +4 -5
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +10 -9
- package/dist/git.js.map +7 -1
- package/dist/glob.d.ts +4 -5
- package/dist/glob.d.ts.map +1 -0
- package/dist/glob.js +15 -12
- package/dist/glob.js.map +7 -1
- package/dist/grep.d.ts +4 -5
- package/dist/grep.d.ts.map +1 -0
- package/dist/grep.js +13 -10
- package/dist/grep.js.map +7 -1
- package/dist/index.d.ts +21 -724
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8955 -2866
- package/dist/index.js.map +7 -1
- package/dist/install.d.ts +4 -5
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +2680 -31
- package/dist/install.js.map +7 -1
- package/dist/json.d.ts +4 -5
- package/dist/json.d.ts.map +1 -0
- package/dist/json.js +13 -11
- package/dist/json.js.map +7 -1
- package/dist/kanban.d.ts +107 -0
- package/dist/kanban.d.ts.map +1 -0
- package/dist/kanban.js +845 -0
- package/dist/kanban.js.map +7 -0
- package/dist/languages/detect.d.ts +3 -0
- package/dist/languages/detect.d.ts.map +1 -0
- package/dist/languages/diagnostics.d.ts +15 -0
- package/dist/languages/diagnostics.d.ts.map +1 -0
- package/dist/languages/execute-tool.d.ts +34 -0
- package/dist/languages/execute-tool.d.ts.map +1 -0
- package/dist/languages/execute.d.ts +18 -0
- package/dist/languages/execute.d.ts.map +1 -0
- package/dist/languages/index.d.ts +12 -0
- package/dist/languages/index.d.ts.map +1 -0
- package/dist/languages/index.js +4457 -0
- package/dist/languages/index.js.map +7 -0
- package/dist/languages/legacy-bridge.d.ts +29 -0
- package/dist/languages/legacy-bridge.d.ts.map +1 -0
- package/dist/languages/package-tool.d.ts +29 -0
- package/dist/languages/package-tool.d.ts.map +1 -0
- package/dist/languages/plan.d.ts +4 -0
- package/dist/languages/plan.d.ts.map +1 -0
- package/dist/languages/profile-helpers.d.ts +14 -0
- package/dist/languages/profile-helpers.d.ts.map +1 -0
- package/dist/languages/profiles/additional.d.ts +3 -0
- package/dist/languages/profiles/additional.d.ts.map +1 -0
- package/dist/languages/profiles/primary.d.ts +3 -0
- package/dist/languages/profiles/primary.d.ts.map +1 -0
- package/dist/languages/registry.d.ts +11 -0
- package/dist/languages/registry.d.ts.map +1 -0
- package/dist/languages/tool.d.ts +32 -0
- package/dist/languages/tool.d.ts.map +1 -0
- package/dist/languages/types.d.ts +207 -0
- package/dist/languages/types.d.ts.map +1 -0
- package/dist/lint.d.ts +4 -5
- package/dist/lint.d.ts.map +1 -0
- package/dist/lint.js +2415 -27
- package/dist/lint.js.map +7 -1
- package/dist/logs.d.ts +4 -5
- package/dist/logs.d.ts.map +1 -0
- package/dist/logs.js +16 -10
- package/dist/logs.js.map +7 -1
- package/dist/memory.d.ts +7 -8
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +7 -5
- package/dist/memory.js.map +7 -1
- package/dist/mode.d.ts +4 -5
- package/dist/mode.d.ts.map +1 -0
- package/dist/mode.js +3 -3
- package/dist/mode.js.map +7 -1
- package/dist/next-steps.d.ts +5 -6
- package/dist/next-steps.d.ts.map +1 -0
- package/dist/next-steps.js +5 -4
- package/dist/next-steps.js.map +7 -1
- package/dist/outdated.d.ts +4 -5
- package/dist/outdated.d.ts.map +1 -0
- package/dist/outdated.js +4777 -68
- package/dist/outdated.js.map +7 -1
- package/dist/pack.d.ts +3 -6
- package/dist/pack.d.ts.map +1 -0
- package/dist/pack.js +8134 -2204
- package/dist/pack.js.map +7 -1
- package/dist/patch.d.ts +4 -5
- package/dist/patch.d.ts.map +1 -0
- package/dist/patch.js +18 -16
- package/dist/patch.js.map +7 -1
- package/dist/plan.d.ts +55 -0
- package/dist/plan.d.ts.map +1 -0
- package/dist/plan.js +280 -0
- package/dist/plan.js.map +7 -0
- package/dist/process-guardian.d.ts +100 -0
- package/dist/process-guardian.d.ts.map +1 -0
- package/dist/process-registry-persistent.d.ts +121 -0
- package/dist/process-registry-persistent.d.ts.map +1 -0
- package/dist/process-registry.d.ts +13 -17
- package/dist/process-registry.d.ts.map +1 -0
- package/dist/process-registry.js +15 -9
- package/dist/process-registry.js.map +7 -1
- package/dist/ps-slash.d.ts +106 -0
- package/dist/ps-slash.d.ts.map +1 -0
- package/dist/ps-slash.js +1291 -0
- package/dist/ps-slash.js.map +7 -0
- package/dist/read.d.ts +4 -5
- package/dist/read.d.ts.map +1 -0
- package/dist/read.js +13 -11
- package/dist/read.js.map +7 -1
- package/dist/replace.d.ts +4 -5
- package/dist/replace.d.ts.map +1 -0
- package/dist/replace.js +26 -13
- package/dist/replace.js.map +7 -1
- package/dist/scaffold.d.ts +4 -5
- package/dist/scaffold.d.ts.map +1 -0
- package/dist/scaffold.js +16 -14
- package/dist/scaffold.js.map +7 -1
- package/dist/search.d.ts +5 -6
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +32 -27
- package/dist/search.js.map +7 -1
- package/dist/set-working-dir.d.ts +18 -0
- package/dist/set-working-dir.d.ts.map +1 -0
- package/dist/shim/node-sqlite.d.ts +3 -0
- package/dist/shim/node-sqlite.d.ts.map +1 -0
- package/dist/skill.d.ts +45 -0
- package/dist/skill.d.ts.map +1 -0
- package/dist/skill.js +175 -0
- package/dist/skill.js.map +7 -0
- package/dist/spawn-background.d.ts +80 -0
- package/dist/spawn-background.d.ts.map +1 -0
- package/dist/task.d.ts +35 -0
- package/dist/task.d.ts.map +1 -0
- package/dist/task.js +380 -0
- package/dist/task.js.map +7 -0
- package/dist/test.d.ts +4 -5
- package/dist/test.d.ts.map +1 -0
- package/dist/test.js +2419 -27
- package/dist/test.js.map +7 -1
- package/dist/todo.d.ts +4 -5
- package/dist/todo.d.ts.map +1 -0
- package/dist/todo.js +5 -5
- package/dist/todo.js.map +7 -1
- package/dist/tool-diff.d.ts +16 -17
- package/dist/tool-diff.d.ts.map +1 -0
- package/dist/tool-diff.js +11 -3
- package/dist/tool-diff.js.map +7 -1
- package/dist/tool-help.d.ts +4 -5
- package/dist/tool-help.d.ts.map +1 -0
- package/dist/tool-help.js +3 -3
- package/dist/tool-help.js.map +7 -1
- package/dist/tool-icon-map.d.ts +46 -0
- package/dist/tool-icon-map.d.ts.map +1 -0
- package/dist/tool-icons.d.ts +5 -6
- package/dist/tool-icons.d.ts.map +1 -0
- package/dist/tool-icons.js +16 -4
- package/dist/tool-icons.js.map +7 -1
- package/dist/tool-search.d.ts +4 -5
- package/dist/tool-search.d.ts.map +1 -0
- package/dist/tool-search.js +3 -3
- package/dist/tool-search.js.map +7 -1
- package/dist/tool-summary.d.ts +4 -5
- package/dist/tool-summary.d.ts.map +1 -0
- package/dist/tool-summary.js +5 -3
- package/dist/tool-summary.js.map +7 -1
- package/dist/tool-use.d.ts +4 -5
- package/dist/tool-use.d.ts.map +1 -0
- package/dist/tool-use.js +3 -3
- package/dist/tool-use.js.map +7 -1
- package/dist/tree.d.ts +4 -5
- package/dist/tree.d.ts.map +1 -0
- package/dist/tree.js +11 -9
- package/dist/tree.js.map +7 -1
- package/dist/typecheck.d.ts +4 -5
- package/dist/typecheck.d.ts.map +1 -0
- package/dist/typecheck.js +2416 -28
- package/dist/typecheck.js.map +7 -1
- package/dist/write.d.ts +4 -5
- package/dist/write.d.ts.map +1 -0
- package/dist/write.js +21 -16
- package/dist/write.js.map +7 -1
- package/package.json +39 -6
- package/dist/background-indexer-BeDBxfSh.d.ts +0 -371
- package/dist/exec-2OKoT6tk.d.ts +0 -121
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bash Kill Guard — Intercepts bash kill commands and prevents them from
|
|
3
|
+
* terminating WrongStack processes (either the agent itself or child processes
|
|
4
|
+
* it has spawned).
|
|
5
|
+
*
|
|
6
|
+
* This module hooks into the bash tool's command parsing to detect and block
|
|
7
|
+
* dangerous kill commands targeting protected PIDs.
|
|
8
|
+
*
|
|
9
|
+
* Handles:
|
|
10
|
+
* - Direct kill commands: kill -9 12345
|
|
11
|
+
* - Shell -c wrapped: bash -c "kill -9 12345" (any shell path — see P2 #10)
|
|
12
|
+
* - Full path kills: /bin/kill -9 12345
|
|
13
|
+
* - Name-based kills: pkill, killall, pgrep
|
|
14
|
+
* - Windows equivalents: taskkill
|
|
15
|
+
*
|
|
16
|
+
* Known bypasses (NOT handled — this is a static regex parser, not a shell):
|
|
17
|
+
* Static analysis of shell strings is inherently defeatable by obfuscation.
|
|
18
|
+
* This guard is one defense-in-depth layer behind the permission policy and
|
|
19
|
+
* the project-escape checks, not the sole gate. Treat a miss here as expected,
|
|
20
|
+
* not as a hole to plug with ever-more-clever regexes. The patterns below are
|
|
21
|
+
* known to evade detection:
|
|
22
|
+
* - Base64 / decode pipes: `echo bCAtOSAxMjM0NQ== | base64 -d | sh`
|
|
23
|
+
* - Variable indirection: `sig=-9; target=12345; kill $sig $target`
|
|
24
|
+
* - Command substitution: `$(printf kill) -9 12345`
|
|
25
|
+
* - String concatenation / quote-splitting: `ki''ll -9 12345`, `k"i"ll 12345`
|
|
26
|
+
* - Aliases and functions: `alias x=kill; x -9 12345`
|
|
27
|
+
* - eval / source: `eval "ki""ll -9 12345"`
|
|
28
|
+
*
|
|
29
|
+
* Mitigation: rely on the permission policy (confirm/deny gate) and YOLO
|
|
30
|
+
* destructive detection as the primary controls; this guard is a best-effort
|
|
31
|
+
* fast path for the common non-obfuscated forms.
|
|
32
|
+
*/
|
|
33
|
+
export interface KillCommand {
|
|
34
|
+
pid?: number;
|
|
35
|
+
name?: string;
|
|
36
|
+
signal?: string;
|
|
37
|
+
isGroupKill: boolean;
|
|
38
|
+
isAllKill: boolean;
|
|
39
|
+
originalCommand: string;
|
|
40
|
+
}
|
|
41
|
+
export interface KillCheckResult {
|
|
42
|
+
blocked: boolean;
|
|
43
|
+
reason?: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Parse a kill command string to extract PID and signal.
|
|
47
|
+
*/
|
|
48
|
+
export declare function parseKillCommand(command: string): KillCommand | null;
|
|
49
|
+
/**
|
|
50
|
+
* Check if a parsed kill command targets a protected WrongStack process.
|
|
51
|
+
*/
|
|
52
|
+
export declare function isKillProtected(kill: KillCommand): Promise<boolean>;
|
|
53
|
+
/**
|
|
54
|
+
* Main entry point: Check if a bash command contains a kill operation targeting protected PIDs.
|
|
55
|
+
* Returns a result indicating whether to block and why.
|
|
56
|
+
*/
|
|
57
|
+
export declare function checkAndBlockKillCommand(command: string): Promise<KillCheckResult>;
|
|
58
|
+
/**
|
|
59
|
+
* Get a safe error message for blocked kill commands.
|
|
60
|
+
*/
|
|
61
|
+
export declare function getBlockedKillMessage(pid: number, signal?: string): string;
|
|
62
|
+
//# sourceMappingURL=bash-kill-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bash-kill-guard.d.ts","sourceRoot":"","sources":["../src/bash-kill-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAOH,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAwED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CA6FpE;AAqBD;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAqCzE;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA2CxF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAK1E"}
|
package/dist/bash.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { Tool } from '@wrongstack/core';
|
|
2
|
-
|
|
1
|
+
import type { Tool } from '@wrongstack/core';
|
|
3
2
|
interface BashInput {
|
|
4
3
|
command: string;
|
|
5
4
|
timeout_ms?: number | undefined;
|
|
@@ -12,6 +11,6 @@ interface BashOutput {
|
|
|
12
11
|
pid?: number | null | undefined;
|
|
13
12
|
error?: string | undefined;
|
|
14
13
|
}
|
|
15
|
-
declare const bashTool: Tool<BashInput, BashOutput>;
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
export declare const bashTool: Tool<BashInput, BashOutput>;
|
|
15
|
+
export type { BashInput, BashOutput };
|
|
16
|
+
//# sourceMappingURL=bash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../src/bash.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAW,IAAI,EAAmB,MAAM,kBAAkB,CAAC;AASvE,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,CAkmBhD,CAAC;AAGF,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC"}
|
package/dist/bash.js
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
import { spawn } from 'node:child_process';
|
|
2
|
-
import * as os2 from 'node:os';
|
|
3
|
-
import * as Core from '@wrongstack/core';
|
|
4
|
-
import { buildChildEnv, expectDefined, wstackGlobalRoot } from '@wrongstack/core';
|
|
5
|
-
import * as fs2 from 'node:fs';
|
|
6
|
-
import { mkdirSync, createWriteStream } from 'node:fs';
|
|
7
|
-
import * as fs from 'node:fs/promises';
|
|
8
|
-
import * as path from 'node:path';
|
|
9
|
-
|
|
10
1
|
// src/bash.ts
|
|
2
|
+
import { spawn as spawn2 } from "node:child_process";
|
|
3
|
+
import * as os4 from "node:os";
|
|
4
|
+
|
|
5
|
+
// src/_env.ts
|
|
6
|
+
import { buildChildEnv } from "@wrongstack/core";
|
|
7
|
+
|
|
8
|
+
// src/_output-spool.ts
|
|
9
|
+
import { createWriteStream, mkdirSync } from "node:fs";
|
|
10
|
+
import * as fsp from "node:fs/promises";
|
|
11
|
+
import * as path from "node:path";
|
|
12
|
+
import { wstackGlobalRoot } from "@wrongstack/core";
|
|
11
13
|
var SPOOL_RETENTION_MS = 7 * 24 * 60 * 60 * 1e3;
|
|
12
14
|
var SPOOL_WRITE_HWM_BYTES = 4 * 1024 * 1024;
|
|
13
15
|
var sweepStarted = false;
|
|
@@ -20,12 +22,12 @@ function sweepOldSpoolFiles(dir) {
|
|
|
20
22
|
void (async () => {
|
|
21
23
|
try {
|
|
22
24
|
const now = Date.now();
|
|
23
|
-
for (const name of await
|
|
25
|
+
for (const name of await fsp.readdir(dir)) {
|
|
24
26
|
if (!name.endsWith(".log")) continue;
|
|
25
27
|
const p = path.join(dir, name);
|
|
26
28
|
try {
|
|
27
|
-
const st = await
|
|
28
|
-
if (now - st.mtimeMs > SPOOL_RETENTION_MS) await
|
|
29
|
+
const st = await fsp.stat(p);
|
|
30
|
+
if (now - st.mtimeMs > SPOOL_RETENTION_MS) await fsp.unlink(p);
|
|
29
31
|
} catch {
|
|
30
32
|
}
|
|
31
33
|
}
|
|
@@ -39,7 +41,7 @@ function spoolNote(info) {
|
|
|
39
41
|
[output truncated \u2014 full ${info.bytes} bytes at ${info.path}${dropped}; read/grep that file selectively instead of re-running with more output]`;
|
|
40
42
|
}
|
|
41
43
|
function createOutputSpool(opts) {
|
|
42
|
-
const threshold = opts.thresholdBytes;
|
|
44
|
+
const threshold = opts.thresholdBytes ?? 32768;
|
|
43
45
|
const safeTool = opts.tool.replace(/[^a-zA-Z0-9._-]+/g, "_").slice(0, 40) || "tool";
|
|
44
46
|
let head = "";
|
|
45
47
|
let headBytes = 0;
|
|
@@ -109,6 +111,9 @@ function createOutputSpool(opts) {
|
|
|
109
111
|
}
|
|
110
112
|
};
|
|
111
113
|
}
|
|
114
|
+
|
|
115
|
+
// src/_util.ts
|
|
116
|
+
import * as Core from "@wrongstack/core";
|
|
112
117
|
var COMMAND_OUTPUT_MAX_BYTES = 32768;
|
|
113
118
|
var REPEAT_RUN_THRESHOLD = 3;
|
|
114
119
|
function collapseCarriageReturns(text) {
|
|
@@ -180,6 +185,10 @@ function normalizeCommandOutput(raw, opts = {}) {
|
|
|
180
185
|
return truncateHeadTail(text, opts.maxBytes ?? COMMAND_OUTPUT_MAX_BYTES);
|
|
181
186
|
}
|
|
182
187
|
|
|
188
|
+
// src/process-registry.ts
|
|
189
|
+
import { spawn } from "node:child_process";
|
|
190
|
+
import * as os from "node:os";
|
|
191
|
+
|
|
183
192
|
// src/circuit-breaker.ts
|
|
184
193
|
var DEFAULT_MAX_CONSECUTIVE_FAILURES = 5;
|
|
185
194
|
var DEFAULT_SLOW_CALL_THRESHOLD_MS = 18e4;
|
|
@@ -372,7 +381,8 @@ var CircuitBreaker = class {
|
|
|
372
381
|
}
|
|
373
382
|
};
|
|
374
383
|
|
|
375
|
-
// src/
|
|
384
|
+
// src/_redact-command.ts
|
|
385
|
+
import { expectDefined } from "@wrongstack/core";
|
|
376
386
|
var SENSITIVE_FLAG_PATTERNS = [
|
|
377
387
|
// --flag=value or --flag "value" (value captured up to next space or comma)
|
|
378
388
|
/--(?: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,
|
|
@@ -402,6 +412,8 @@ function redactCommand(cmd) {
|
|
|
402
412
|
}
|
|
403
413
|
return result;
|
|
404
414
|
}
|
|
415
|
+
|
|
416
|
+
// src/process-registry.ts
|
|
405
417
|
var DEFAULT_GRACE_MS = 2e3;
|
|
406
418
|
var WIN32_TASKKILL_TIMEOUT_MS = 5e3;
|
|
407
419
|
function killWin32Tree(pid, opts = {}) {
|
|
@@ -463,7 +475,7 @@ var ProcessRegistryImpl = class {
|
|
|
463
475
|
return Number.isInteger(pid) && pid > 1 && pid !== process.pid && pid !== process.ppid;
|
|
464
476
|
}
|
|
465
477
|
_canSignalProcessGroup(p) {
|
|
466
|
-
return
|
|
478
|
+
return os.platform() !== "win32" && p.processGroupLeader === true && this._isSafeSignalPid(p.pid) && typeof p.child.pid === "number" && p.child.pid === p.pid;
|
|
467
479
|
}
|
|
468
480
|
_killChildDirect(p, signal) {
|
|
469
481
|
try {
|
|
@@ -657,7 +669,7 @@ var ProcessRegistryImpl = class {
|
|
|
657
669
|
if (p.killed) return true;
|
|
658
670
|
if (p.protected) return false;
|
|
659
671
|
const { force = false, graceMs = DEFAULT_GRACE_MS } = opts;
|
|
660
|
-
const isWin2 =
|
|
672
|
+
const isWin2 = os.platform() === "win32";
|
|
661
673
|
if (isWin2) {
|
|
662
674
|
const liveRealChild = p.child.exitCode === null && typeof p.child.pid === "number";
|
|
663
675
|
const directFallback = () => {
|
|
@@ -671,7 +683,8 @@ var ProcessRegistryImpl = class {
|
|
|
671
683
|
if (liveRealChild && killWin32Tree(pid, {
|
|
672
684
|
timeoutMs: Math.max(graceMs, WIN32_TASKKILL_TIMEOUT_MS),
|
|
673
685
|
onSettled: directFallback
|
|
674
|
-
}))
|
|
686
|
+
})) {
|
|
687
|
+
} else {
|
|
675
688
|
try {
|
|
676
689
|
p.child.kill(force ? "SIGKILL" : "SIGTERM");
|
|
677
690
|
} catch {
|
|
@@ -758,6 +771,14 @@ function getProcessRegistry() {
|
|
|
758
771
|
}
|
|
759
772
|
return _registry;
|
|
760
773
|
}
|
|
774
|
+
|
|
775
|
+
// src/bash-kill-guard.ts
|
|
776
|
+
import * as os3 from "node:os";
|
|
777
|
+
|
|
778
|
+
// src/process-registry-persistent.ts
|
|
779
|
+
import * as fs from "node:fs/promises";
|
|
780
|
+
import * as os2 from "node:os";
|
|
781
|
+
import * as path2 from "node:path";
|
|
761
782
|
var REGISTRY_FILE = ".wrongstack/process-registry.json";
|
|
762
783
|
function toErrorMessage(err) {
|
|
763
784
|
return err instanceof Error ? err.message : String(err);
|
|
@@ -869,15 +890,15 @@ var PersistentProcessRegistry = class {
|
|
|
869
890
|
constructor(baseRegistry) {
|
|
870
891
|
this.instanceId = generateInstanceId();
|
|
871
892
|
const homeDir = os2.homedir();
|
|
872
|
-
this.registryPath =
|
|
873
|
-
this.lockPath =
|
|
893
|
+
this.registryPath = path2.join(homeDir, REGISTRY_FILE);
|
|
894
|
+
this.lockPath = path2.join(homeDir, LOCKFILE);
|
|
874
895
|
this.baseRegistry = baseRegistry ?? getProcessRegistry();
|
|
875
896
|
this.ensureDirectory().catch((err) => {
|
|
876
897
|
emitStructuredLog("warn", "process_registry.dir_create_failed", "PersistentProcessRegistry: failed to create .wrongstack directory", err);
|
|
877
898
|
});
|
|
878
899
|
}
|
|
879
900
|
async ensureDirectory() {
|
|
880
|
-
const dir =
|
|
901
|
+
const dir = path2.dirname(this.registryPath);
|
|
881
902
|
try {
|
|
882
903
|
await fs.mkdir(dir, { recursive: true });
|
|
883
904
|
} catch (err) {
|
|
@@ -1165,7 +1186,7 @@ function getPersistentProcessRegistry() {
|
|
|
1165
1186
|
}
|
|
1166
1187
|
|
|
1167
1188
|
// src/bash-kill-guard.ts
|
|
1168
|
-
var isWin =
|
|
1189
|
+
var isWin = os3.platform() === "win32";
|
|
1169
1190
|
function extractKillCommand(command) {
|
|
1170
1191
|
const normalized = command.replace(/\s+/g, " ").trim();
|
|
1171
1192
|
const shellCMatch = normalized.match(
|
|
@@ -1341,7 +1362,11 @@ async function checkAndBlockKillCommand(command) {
|
|
|
1341
1362
|
}
|
|
1342
1363
|
return { blocked: false };
|
|
1343
1364
|
}
|
|
1365
|
+
|
|
1366
|
+
// src/_shell-pick.ts
|
|
1367
|
+
var POSIX_DEFAULT = "cmd";
|
|
1344
1368
|
function pickShell(platform4, command, env) {
|
|
1369
|
+
if (platform4 !== "win32") return POSIX_DEFAULT;
|
|
1345
1370
|
const override = env.get("WRONGSTACK_SHELL")?.trim().toLowerCase();
|
|
1346
1371
|
if (override === "cmd" || override === "cmd.exe") return "cmd";
|
|
1347
1372
|
if (override === "powershell" || override === "powershell.exe") return "powershell";
|
|
@@ -1445,15 +1470,19 @@ function diagnoseBashism(command, shell) {
|
|
|
1445
1470
|
const label = isCmd ? "cmd.exe" : shell === "pwsh" ? "PowerShell 7" : "Windows PowerShell";
|
|
1446
1471
|
return `[wrongstack] This command failed and contains bash/POSIX syntax that ${label} does not accept \u2014 ${hints.join("; ")}. Rewrite it in ${isCmd ? "cmd" : "PowerShell"} syntax and retry.`;
|
|
1447
1472
|
}
|
|
1473
|
+
|
|
1474
|
+
// src/_win32-resolve.ts
|
|
1475
|
+
import * as fs2 from "node:fs";
|
|
1476
|
+
import * as path3 from "node:path";
|
|
1448
1477
|
function resolveWin32Command(cmd) {
|
|
1449
1478
|
if (process.platform !== "win32") return cmd;
|
|
1450
|
-
if (cmd.includes("/") || cmd.includes("\\") ||
|
|
1479
|
+
if (cmd.includes("/") || cmd.includes("\\") || path3.extname(cmd.replace(/\//g, "\\"))) {
|
|
1451
1480
|
return cmd;
|
|
1452
1481
|
}
|
|
1453
1482
|
const pathext = (process.env["PATHEXT"] ?? ".COM;.EXE;.BAT;.CMD;.VBS;.JS;.WS;.MSC").toLowerCase().split(";");
|
|
1454
|
-
const pathDirs = (process.env["PATH"] ?? "").split(
|
|
1483
|
+
const pathDirs = (process.env["PATH"] ?? "").split(path3.delimiter);
|
|
1455
1484
|
for (const dir of pathDirs) {
|
|
1456
|
-
const base =
|
|
1485
|
+
const base = path3.join(dir, cmd);
|
|
1457
1486
|
for (const ext of pathext) {
|
|
1458
1487
|
const full = `${base}${ext}`;
|
|
1459
1488
|
try {
|
|
@@ -1579,7 +1608,7 @@ var bashTool = {
|
|
|
1579
1608
|
}));
|
|
1580
1609
|
}
|
|
1581
1610
|
const timeoutMs = Math.max(1, Math.min(input.timeout_ms ?? DEFAULT_TIMEOUT_MS, 6e5));
|
|
1582
|
-
const isWin2 =
|
|
1611
|
+
const isWin2 = os4.platform() === "win32";
|
|
1583
1612
|
let plan;
|
|
1584
1613
|
let winShellKind;
|
|
1585
1614
|
if (isWin2) {
|
|
@@ -1616,7 +1645,7 @@ var bashTool = {
|
|
|
1616
1645
|
if (input.background) {
|
|
1617
1646
|
let buf2 = "";
|
|
1618
1647
|
let truncated = false;
|
|
1619
|
-
const child2 =
|
|
1648
|
+
const child2 = spawn2(shell, args, {
|
|
1620
1649
|
cwd: ctx.projectRoot,
|
|
1621
1650
|
env,
|
|
1622
1651
|
// PowerShell takes the script on stdin (no argv quoting); cmd.exe
|
|
@@ -1699,7 +1728,7 @@ var bashTool = {
|
|
|
1699
1728
|
});
|
|
1700
1729
|
return;
|
|
1701
1730
|
}
|
|
1702
|
-
const child =
|
|
1731
|
+
const child = spawn2(shell, args, {
|
|
1703
1732
|
cwd: ctx.projectRoot,
|
|
1704
1733
|
env,
|
|
1705
1734
|
// PowerShell takes the script on stdin (no argv quoting); cmd.exe
|
|
@@ -1926,7 +1955,7 @@ ${hint}` : ""),
|
|
|
1926
1955
|
}
|
|
1927
1956
|
}
|
|
1928
1957
|
};
|
|
1929
|
-
|
|
1930
|
-
|
|
1958
|
+
export {
|
|
1959
|
+
bashTool
|
|
1960
|
+
};
|
|
1931
1961
|
//# sourceMappingURL=bash.js.map
|
|
1932
|
-
//# sourceMappingURL=bash.js.map
|