@gaunt-sloth/agent 2.0.0-alpha.2 → 2.0.0-alpha.4
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 +9 -0
- package/dist/builtInToolsConfig.js +11 -2
- package/dist/builtInToolsConfig.js.map +1 -1
- package/dist/core/GthDeepAgent.d.ts +75 -0
- package/dist/core/GthDeepAgent.js +257 -21
- package/dist/core/GthDeepAgent.js.map +1 -1
- package/dist/core/deepAgentPermissions.d.ts +29 -11
- package/dist/core/deepAgentPermissions.js +67 -26
- package/dist/core/deepAgentPermissions.js.map +1 -1
- package/dist/mcp/OAuthClientProviderImpl.js +2 -2
- package/dist/mcp/OAuthClientProviderImpl.js.map +1 -1
- package/dist/middleware/registry.d.ts +1 -1
- package/dist/middleware/registry.js +1 -1
- package/dist/middleware/types.d.ts +1 -1
- package/dist/middleware/types.js +1 -1
- package/dist/modules/acpModule.d.ts +5 -2
- package/dist/modules/acpModule.js +5 -2
- package/dist/modules/acpModule.js.map +1 -1
- package/dist/modules/interactiveSessionModule.js +81 -4
- package/dist/modules/interactiveSessionModule.js.map +1 -1
- package/dist/tools/GthDevToolkit.d.ts +72 -1
- package/dist/tools/GthDevToolkit.js +230 -18
- package/dist/tools/GthDevToolkit.js.map +1 -1
- package/dist/tools/shell/allowlist.d.ts +11 -0
- package/dist/tools/shell/allowlist.js +12 -0
- package/dist/tools/shell/allowlist.js.map +1 -0
- package/dist/tools/shell/arity.d.ts +11 -0
- package/dist/tools/shell/arity.js +12 -0
- package/dist/tools/shell/arity.js.map +1 -0
- package/dist/tools/shell/env.d.ts +22 -0
- package/dist/tools/shell/env.js +110 -0
- package/dist/tools/shell/env.js.map +1 -0
- package/dist/tools/shell/hardline.d.ts +15 -0
- package/dist/tools/shell/hardline.js +88 -0
- package/dist/tools/shell/hardline.js.map +1 -0
- package/dist/tools/shell/normalize.d.ts +10 -0
- package/dist/tools/shell/normalize.js +11 -0
- package/dist/tools/shell/normalize.js.map +1 -0
- package/dist/tools/shell/outputBuffer.d.ts +53 -0
- package/dist/tools/shell/outputBuffer.js +157 -0
- package/dist/tools/shell/outputBuffer.js.map +1 -0
- package/package.json +8 -8
|
@@ -32,24 +32,42 @@ export declare function allowDirsToPermissions(allowDirs: string[]): FilesystemP
|
|
|
32
32
|
/**
|
|
33
33
|
* Convert `.aiignore` patterns (relative, .gitignore-ish) into deepagents deny rules.
|
|
34
34
|
*
|
|
35
|
-
* deepagents matches the path argument the model passes to a fs tool
|
|
36
|
-
*
|
|
37
|
-
*
|
|
35
|
+
* deepagents matches the path argument the model passes to a fs tool against ABSOLUTE
|
|
36
|
+
* globs. EXT-13: the backend now runs WITHOUT virtualMode in both the default and widened
|
|
37
|
+
* cases, so paths are REAL absolute paths and the caller passes the absolute cwd as `base`
|
|
38
|
+
* to anchor these deny rules there.
|
|
38
39
|
*
|
|
39
40
|
* A bare pattern (`*.env`, `secret.txt`) should match at any depth, so we emit both a
|
|
40
|
-
* top-level (
|
|
41
|
-
* containing "/" (`config/secrets.json`) is anchored as-is (plus a `/**` subtree rule).
|
|
41
|
+
* top-level (`<base>/secret.txt`) and a recursive (`<base>/**/secret.txt`) rule. A pattern
|
|
42
|
+
* already containing "/" (`config/secrets.json`) is anchored as-is (plus a `/**` subtree rule).
|
|
42
43
|
*
|
|
43
|
-
* `base` defaults to ""
|
|
44
|
-
*
|
|
45
|
-
* passes the absolute cwd as `base` to anchor these deny rules there.
|
|
44
|
+
* `base` defaults to "" (anchoring at the virtual root "/") for legacy callers; gsloth's
|
|
45
|
+
* {@link buildPermissions} always passes the absolute cwd now.
|
|
46
46
|
*/
|
|
47
47
|
export declare function aiignoreToPermissions(patterns: string[], base?: string): FilesystemPermission[];
|
|
48
|
-
/**
|
|
49
|
-
|
|
48
|
+
/**
|
|
49
|
+
* Map gsloth's filesystem mode onto deepagents permission rules for the DEFAULT
|
|
50
|
+
* (non-widen) code-mode sandbox.
|
|
51
|
+
*
|
|
52
|
+
* EXT-13: the default backend now runs WITHOUT virtualMode (real absolute paths), so
|
|
53
|
+
* containment can no longer lean on the virtual-root chroot — it is enforced entirely by
|
|
54
|
+
* these globs anchored at the REAL absolute cwd. We therefore allow read+write within
|
|
55
|
+
* `cwd/**` (and `cwd`) and deny everything else (`/**`), mirroring what virtualMode gave
|
|
56
|
+
* for free. An explicit `string[]` allow-list resolves each entry against the real cwd.
|
|
57
|
+
*
|
|
58
|
+
* - `all` → no extra restriction beyond the cwd sandbox (matches the old virtualMode
|
|
59
|
+
* behavior, where `/` already meant cwd).
|
|
60
|
+
* - `read` → deny all writes (the cwd sandbox still applies for reads).
|
|
61
|
+
* - `none` → deny all reads and writes.
|
|
62
|
+
* - `string[]` → allow each (cwd-resolved) dir, deny everything else.
|
|
63
|
+
*
|
|
64
|
+
* The `cwd` argument is injected (defaults to {@link getCurrentWorkDir}) so callers/tests
|
|
65
|
+
* can anchor deterministically.
|
|
66
|
+
*/
|
|
67
|
+
export declare function filesystemModeToPermissions(fs: string[] | 'all' | 'read' | 'none', cwd?: string, virtual?: boolean): FilesystemPermission[];
|
|
50
68
|
/**
|
|
51
69
|
* Compose the full permission list. `.aiignore` deny rules go FIRST so they win over
|
|
52
70
|
* any allow rule (first-match-wins). Then the filesystem-mode rules. `.aiignore` is
|
|
53
71
|
* skipped when explicitly disabled (`aiignore.enabled === false`) or has no patterns.
|
|
54
72
|
*/
|
|
55
|
-
export declare function buildPermissions(config: PermissionConfigSlice): FilesystemPermission[];
|
|
73
|
+
export declare function buildPermissions(config: PermissionConfigSlice, virtual?: boolean): FilesystemPermission[];
|
|
@@ -54,17 +54,17 @@ function normalizePathFragment(p) {
|
|
|
54
54
|
/**
|
|
55
55
|
* Convert `.aiignore` patterns (relative, .gitignore-ish) into deepagents deny rules.
|
|
56
56
|
*
|
|
57
|
-
* deepagents matches the path argument the model passes to a fs tool
|
|
58
|
-
*
|
|
59
|
-
*
|
|
57
|
+
* deepagents matches the path argument the model passes to a fs tool against ABSOLUTE
|
|
58
|
+
* globs. EXT-13: the backend now runs WITHOUT virtualMode in both the default and widened
|
|
59
|
+
* cases, so paths are REAL absolute paths and the caller passes the absolute cwd as `base`
|
|
60
|
+
* to anchor these deny rules there.
|
|
60
61
|
*
|
|
61
62
|
* A bare pattern (`*.env`, `secret.txt`) should match at any depth, so we emit both a
|
|
62
|
-
* top-level (
|
|
63
|
-
* containing "/" (`config/secrets.json`) is anchored as-is (plus a `/**` subtree rule).
|
|
63
|
+
* top-level (`<base>/secret.txt`) and a recursive (`<base>/**/secret.txt`) rule. A pattern
|
|
64
|
+
* already containing "/" (`config/secrets.json`) is anchored as-is (plus a `/**` subtree rule).
|
|
64
65
|
*
|
|
65
|
-
* `base` defaults to ""
|
|
66
|
-
*
|
|
67
|
-
* passes the absolute cwd as `base` to anchor these deny rules there.
|
|
66
|
+
* `base` defaults to "" (anchoring at the virtual root "/") for legacy callers; gsloth's
|
|
67
|
+
* {@link buildPermissions} always passes the absolute cwd now.
|
|
68
68
|
*/
|
|
69
69
|
export function aiignoreToPermissions(patterns, base = '') {
|
|
70
70
|
const rules = [];
|
|
@@ -79,20 +79,59 @@ export function aiignoreToPermissions(patterns, base = '') {
|
|
|
79
79
|
}
|
|
80
80
|
return rules;
|
|
81
81
|
}
|
|
82
|
-
/**
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
82
|
+
/**
|
|
83
|
+
* Map gsloth's filesystem mode onto deepagents permission rules for the DEFAULT
|
|
84
|
+
* (non-widen) code-mode sandbox.
|
|
85
|
+
*
|
|
86
|
+
* EXT-13: the default backend now runs WITHOUT virtualMode (real absolute paths), so
|
|
87
|
+
* containment can no longer lean on the virtual-root chroot — it is enforced entirely by
|
|
88
|
+
* these globs anchored at the REAL absolute cwd. We therefore allow read+write within
|
|
89
|
+
* `cwd/**` (and `cwd`) and deny everything else (`/**`), mirroring what virtualMode gave
|
|
90
|
+
* for free. An explicit `string[]` allow-list resolves each entry against the real cwd.
|
|
91
|
+
*
|
|
92
|
+
* - `all` → no extra restriction beyond the cwd sandbox (matches the old virtualMode
|
|
93
|
+
* behavior, where `/` already meant cwd).
|
|
94
|
+
* - `read` → deny all writes (the cwd sandbox still applies for reads).
|
|
95
|
+
* - `none` → deny all reads and writes.
|
|
96
|
+
* - `string[]` → allow each (cwd-resolved) dir, deny everything else.
|
|
97
|
+
*
|
|
98
|
+
* The `cwd` argument is injected (defaults to {@link getCurrentWorkDir}) so callers/tests
|
|
99
|
+
* can anchor deterministically.
|
|
100
|
+
*/
|
|
101
|
+
export function filesystemModeToPermissions(fs, cwd = getCurrentWorkDir(), virtual = false) {
|
|
102
|
+
// EXT-16: on Windows the real cwd (`D:\...`) cannot be expressed as a deepagents
|
|
103
|
+
// permission glob — its `validatePath` requires POSIX `/`-rooted paths — so the backend
|
|
104
|
+
// runs in virtualMode and these rules anchor at the virtual root `/` (= cwd) instead of
|
|
105
|
+
// the real absolute cwd. On POSIX, `virtual` is false and this is the EXT-13 real-path
|
|
106
|
+
// sandbox unchanged. `rootGlob`/`rootPath` = "everything under the sandbox root".
|
|
107
|
+
const rootGlob = virtual ? '/**' : `${cwd}/**`;
|
|
108
|
+
const rootPath = virtual ? '/' : cwd;
|
|
88
109
|
if (fs === 'none')
|
|
89
110
|
return [{ operations: ['read', 'write'], paths: ['/**'], mode: 'deny' }];
|
|
90
|
-
|
|
111
|
+
if (fs === 'read') {
|
|
112
|
+
// Deny all writes everywhere; reads are still confined to the cwd sandbox below.
|
|
113
|
+
return [
|
|
114
|
+
{ operations: ['write'], paths: ['/**'], mode: 'deny' },
|
|
115
|
+
{ operations: ['read'], paths: [rootGlob, rootPath], mode: 'allow' },
|
|
116
|
+
{ operations: ['read'], paths: ['/**'], mode: 'deny' },
|
|
117
|
+
];
|
|
118
|
+
}
|
|
119
|
+
if (fs === 'all') {
|
|
120
|
+
// No allow-list restriction, but the cwd sandbox must still apply by default
|
|
121
|
+
// (allow cwd/**, deny /**) — this is what virtualMode enforced implicitly.
|
|
122
|
+
return [
|
|
123
|
+
{ operations: ['read', 'write'], paths: [rootGlob, rootPath], mode: 'allow' },
|
|
124
|
+
{ operations: ['read', 'write'], paths: ['/**'], mode: 'deny' },
|
|
125
|
+
];
|
|
126
|
+
}
|
|
127
|
+
// string[] — explicit allow-list of directories. Real mode resolves each against the REAL
|
|
128
|
+
// cwd; virtual mode anchors each under the virtual root `/`. Allow read+write within each,
|
|
91
129
|
// deny everything else. Allow rules first (first-match-wins), deny catch-all last.
|
|
92
130
|
const allow = fs
|
|
93
131
|
.filter((d) => d !== 'all' && d !== 'read')
|
|
94
132
|
.map((d) => {
|
|
95
|
-
const
|
|
133
|
+
const frag = normalizePathFragment(d);
|
|
134
|
+
const dir = virtual ? `/${frag}` : path.resolve(cwd, frag);
|
|
96
135
|
return { operations: ['read', 'write'], paths: [`${dir}/**`, dir], mode: 'allow' };
|
|
97
136
|
});
|
|
98
137
|
return [...allow, { operations: ['read', 'write'], paths: ['/**'], mode: 'deny' }];
|
|
@@ -102,19 +141,21 @@ export function filesystemModeToPermissions(fs) {
|
|
|
102
141
|
* any allow rule (first-match-wins). Then the filesystem-mode rules. `.aiignore` is
|
|
103
142
|
* skipped when explicitly disabled (`aiignore.enabled === false`) or has no patterns.
|
|
104
143
|
*/
|
|
105
|
-
export function buildPermissions(config) {
|
|
144
|
+
export function buildPermissions(config, virtual = false) {
|
|
145
|
+
const cwd = getCurrentWorkDir();
|
|
106
146
|
const widen = Array.isArray(config.allowDirs) && config.allowDirs.length > 0;
|
|
107
147
|
const aiignoreEnabled = config.aiignore?.enabled !== false && !!config.aiignore?.patterns?.length;
|
|
108
|
-
//
|
|
109
|
-
//
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
// `--allow-dir`
|
|
114
|
-
//
|
|
115
|
-
|
|
148
|
+
// EXT-13/EXT-16: real mode anchors aiignore deny rules at the absolute cwd; virtual mode
|
|
149
|
+
// (Windows) anchors them at the virtual root ("" → "/"). Either way they keep matching the
|
|
150
|
+
// project-relative ignore patterns.
|
|
151
|
+
const base = virtual ? '' : cwd;
|
|
152
|
+
const aiignore = aiignoreEnabled ? aiignoreToPermissions(config.aiignore.patterns, base) : [];
|
|
153
|
+
// `--allow-dir` widens to the cwd + allowed-dirs allow-list, which needs REAL absolute paths
|
|
154
|
+
// and so cannot apply in virtualMode (EXT-16): when virtual, fall back to the cwd-only mode
|
|
155
|
+
// sandbox (the caller warns that widening is limited on this platform).
|
|
156
|
+
const modeRules = widen && !virtual
|
|
116
157
|
? allowDirsToPermissions(config.allowDirs)
|
|
117
|
-
: filesystemModeToPermissions(config.filesystem);
|
|
158
|
+
: filesystemModeToPermissions(config.filesystem, cwd, virtual);
|
|
118
159
|
return [...aiignore, ...modeRules];
|
|
119
160
|
}
|
|
120
161
|
//# sourceMappingURL=deepAgentPermissions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deepAgentPermissions.js","sourceRoot":"","sources":["../../src/core/deepAgentPermissions.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAI3E;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI;IACJ,WAAW;IACX,YAAY;IACZ,WAAW;IACX,MAAM;IACN,MAAM;IACN,SAAS;CACD,CAAC;AAcX;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAAmB;IACxD,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,qEAAqE;IACrE,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/C,MAAM,KAAK,GAA2B,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC/D,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;QAC7B,KAAK,EAAE,CAAC,GAAG,IAAI,KAAK,EAAE,IAAI,CAAC;QAC3B,IAAI,EAAE,OAAO;KACd,CAAC,CAAC,CAAC;IACJ,OAAO,CAAC,GAAG,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AACrF,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,CAAS;IACtC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,KAAK,GAAG,CAAC,CAAC;SAC7B,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,KAAK,GAAG,CAAC,CAAC;IACtC,IAAI,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,OAAO,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG;QAAE,GAAG,EAAE,CAAC;IAChD,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAkB,EAAE,IAAI,GAAG,EAAE;IACjE,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACjC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;YAC/B,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,CAAC;YAC7C,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,EAAE,GAAG,IAAI,OAAO,KAAK,EAAE,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"deepAgentPermissions.js","sourceRoot":"","sources":["../../src/core/deepAgentPermissions.ts"],"names":[],"mappings":"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"}
|
|
@@ -82,8 +82,8 @@ export class OAuthClientProviderImpl {
|
|
|
82
82
|
get clientMetadata() {
|
|
83
83
|
return {
|
|
84
84
|
redirect_uris: [this.config.redirectUrl],
|
|
85
|
-
client_name: 'Gaunt Sloth
|
|
86
|
-
client_uri: 'https://
|
|
85
|
+
client_name: 'Gaunt Sloth',
|
|
86
|
+
client_uri: 'https://gauntsloth.app/',
|
|
87
87
|
software_id: '1dd38b83-946b-4631-8855-66ee467bfd68',
|
|
88
88
|
scope: 'mcp:read mcp:write',
|
|
89
89
|
token_endpoint_auth_method: 'none',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OAuthClientProviderImpl.js","sourceRoot":"","sources":["../../src/mcp/OAuthClientProviderImpl.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"OAuthClientProviderImpl.js","sourceRoot":"","sources":["../../src/mcp/OAuthClientProviderImpl.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @packageDocumentation
|
|
3
|
-
* Middleware registry for Gaunt Sloth
|
|
3
|
+
* Middleware registry for Gaunt Sloth.
|
|
4
4
|
*
|
|
5
5
|
* This module provides factory functions for creating predefined middleware instances
|
|
6
6
|
* and a resolver to convert middleware configurations into middleware objects.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @packageDocumentation
|
|
3
|
-
* Middleware registry for Gaunt Sloth
|
|
3
|
+
* Middleware registry for Gaunt Sloth.
|
|
4
4
|
*
|
|
5
5
|
* This module provides factory functions for creating predefined middleware instances
|
|
6
6
|
* and a resolver to convert middleware configurations into middleware objects.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @packageDocumentation
|
|
3
|
-
* Type definitions for middleware configuration in Gaunt Sloth
|
|
3
|
+
* Type definitions for middleware configuration in Gaunt Sloth.
|
|
4
4
|
*
|
|
5
5
|
* Middleware provides hooks to intercept and control agent execution at critical points.
|
|
6
6
|
* This module defines the configuration interfaces for both predefined and custom middleware.
|
package/dist/middleware/types.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @packageDocumentation
|
|
3
|
-
* Type definitions for middleware configuration in Gaunt Sloth
|
|
3
|
+
* Type definitions for middleware configuration in Gaunt Sloth.
|
|
4
4
|
*
|
|
5
5
|
* Middleware provides hooks to intercept and control agent execution at critical points.
|
|
6
6
|
* This module defines the configuration interfaces for both predefined and custom middleware.
|
|
@@ -31,7 +31,10 @@ export interface StartAcpServerOptions {
|
|
|
31
31
|
*
|
|
32
32
|
* NOTE: deepagents-acp 0.1.12 does NOT forward `permissions` to `createDeepAgent` — on the ACP
|
|
33
33
|
* path fs gating is delegated to the host's interactive permission prompts, not gsloth's
|
|
34
|
-
* `.aiignore`→permissions mapping. `permissions` is still passed here for forward-compatibility
|
|
35
|
-
*
|
|
34
|
+
* `.aiignore`→permissions mapping. `permissions` is still passed here for forward-compatibility.
|
|
35
|
+
* EXT-13 caveat: the ACP backend keeps `virtualMode` ON (`/` = workspace, see gthAcpServer), while
|
|
36
|
+
* EXT-13 re-anchored gsloth's default permissions at the REAL absolute cwd for the local runner. So
|
|
37
|
+
* if a future deepagents-acp DOES forward these rules they would not match the virtual `/`-rooted
|
|
38
|
+
* paths the ACP backend hands them — revisit the mapping (or the ACP backend's mode) at that point.
|
|
36
39
|
*/
|
|
37
40
|
export declare function startAcpServer(config: GthConfig, options?: StartAcpServerOptions): Promise<void>;
|
|
@@ -33,8 +33,11 @@ const acpStatusUpdate = (_level, message) => {
|
|
|
33
33
|
*
|
|
34
34
|
* NOTE: deepagents-acp 0.1.12 does NOT forward `permissions` to `createDeepAgent` — on the ACP
|
|
35
35
|
* path fs gating is delegated to the host's interactive permission prompts, not gsloth's
|
|
36
|
-
* `.aiignore`→permissions mapping. `permissions` is still passed here for forward-compatibility
|
|
37
|
-
*
|
|
36
|
+
* `.aiignore`→permissions mapping. `permissions` is still passed here for forward-compatibility.
|
|
37
|
+
* EXT-13 caveat: the ACP backend keeps `virtualMode` ON (`/` = workspace, see gthAcpServer), while
|
|
38
|
+
* EXT-13 re-anchored gsloth's default permissions at the REAL absolute cwd for the local runner. So
|
|
39
|
+
* if a future deepagents-acp DOES forward these rules they would not match the virtual `/`-rooted
|
|
40
|
+
* paths the ACP backend hands them — revisit the mapping (or the ACP backend's mode) at that point.
|
|
38
41
|
*/
|
|
39
42
|
export async function startAcpServer(config, options = {}) {
|
|
40
43
|
const command = options.command ?? 'code';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acpModule.js","sourceRoot":"","sources":["../../src/modules/acpModule.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,uCAAuC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAWpD;;;GAGG;AACH,MAAM,eAAe,GAAyB,CAAC,MAAmB,EAAE,OAAe,EAAQ,EAAE;IAC3F,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;AAC/B,CAAC,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"acpModule.js","sourceRoot":"","sources":["../../src/modules/acpModule.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,uCAAuC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAWpD;;;GAGG;AACH,MAAM,eAAe,GAAyB,CAAC,MAAmB,EAAE,OAAe,EAAQ,EAAE;IAC3F,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;AAC/B,CAAC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAiB,EACjB,UAAiC,EAAE;IAEnC,MAAM,OAAO,GAAe,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC;IAEtD,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,eAAe,EAAE,eAAe,EAAE,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAEjE,6FAA6F;IAC7F,2FAA2F;IAC3F,yFAAyF;IACzF,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IAEzC,+FAA+F;IAC/F,qFAAqF;IACrF,mGAAmG;IACnG,MAAM,aAAa,GAAG,aAAa,EAAE,CAAC;IACtC,QAAQ,CAAC,iCAAiC,OAAO,wBAAwB,aAAa,GAAG,CAAC,CAAC;IAE3F,MAAM,iBAAiB,CAAC;QACtB,MAAM,EAAE;YACN,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,aAAa;YACnC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,+BAA+B;YACnE,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,YAAY;YACZ,8DAA8D;YAC9D,UAAU,EAAE,MAAM,CAAC,UAAiB;YACpC,sFAAsF;YACtF,WAAW,EAAE,MAAM,CAAC,WAAW;SAChC;QACD,aAAa;KACd,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { initConfig } from '@gaunt-sloth/core/config.js';
|
|
2
|
-
import { defaultStatusCallback, display, displayInfo, flushSessionLog, formatInputPrompt, initSessionLogging, stopSessionLogging, } from '@gaunt-sloth/core/utils/consoleUtils.js';
|
|
2
|
+
import { defaultStatusCallback, display, displayInfo, displayWarning, flushSessionLog, formatInputPrompt, initSessionLogging, stopSessionLogging, } from '@gaunt-sloth/core/utils/consoleUtils.js';
|
|
3
3
|
import { GthAgentRunner } from '@gaunt-sloth/core/core/GthAgentRunner.js';
|
|
4
4
|
import { appendToFile, getCommandOutputFilePath } from '@gaunt-sloth/core/utils/fileUtils.js';
|
|
5
|
-
import { createInterface, error, exit, setRawMode, stdin as input, stdout as output, } from '@gaunt-sloth/core/utils/systemUtils.js';
|
|
5
|
+
import { createInterface, error, exit, refStdin, setRawMode, stdin as input, stdout as output, } from '@gaunt-sloth/core/utils/systemUtils.js';
|
|
6
6
|
import { HumanMessage } from '@langchain/core/messages';
|
|
7
7
|
import { MemorySaver } from '@langchain/langgraph';
|
|
8
8
|
import { createResolvers } from '#src/resolvers.js';
|
|
@@ -20,6 +20,66 @@ export async function createInteractiveSession(sessionConfig, commandLineConfigO
|
|
|
20
20
|
await runner.init(sessionConfig.mode, config, checkpointSaver);
|
|
21
21
|
const rl = createInterface({ input, output });
|
|
22
22
|
let shouldExit = false;
|
|
23
|
+
// EXT-18: ref stdin before every rl.question() that can run AFTER an agent turn/stream end.
|
|
24
|
+
// When a run suspends (tool-approval interrupt) or throws, the stream's finally calls
|
|
25
|
+
// stopWaitingForEscape(), which unref's stdin so one-shot commands can exit. A prompt that
|
|
26
|
+
// follows must re-ref stdin first, otherwise nothing keeps the event loop alive and the
|
|
27
|
+
// process exits to the shell before the user can answer. The main `> ` loop is safe because
|
|
28
|
+
// its setRawMode(true) already re-refs; these cooked-mode prompts do not, so they ref here.
|
|
29
|
+
const askLine = (prompt) => {
|
|
30
|
+
refStdin();
|
|
31
|
+
return rl.question(prompt);
|
|
32
|
+
};
|
|
33
|
+
// Tool-approval (human-in-the-loop) prompt for gated tools — currently the opt-in
|
|
34
|
+
// `run_shell_command`. When a run suspends on such a tool call, the runner calls this with
|
|
35
|
+
// the pending command. EXT-9 Tier-2: instead of a bare y/N, offer a scoped choice so the
|
|
36
|
+
// human can stop re-prompting for an operation they trust:
|
|
37
|
+
// [o]nce — approve this single invocation only (persists nothing),
|
|
38
|
+
// [s]ession — auto-approve this command's classified prefix for the rest of the session,
|
|
39
|
+
// [a]lways — additionally persist it to the project allow-list,
|
|
40
|
+
// anything else → reject (fail-closed).
|
|
41
|
+
// The runner consults the allow-list BEFORE calling this, so trusted commands never reach
|
|
42
|
+
// this prompt at all. (The Ink TUI surfaces the same scoped prompt via an approval bridge —
|
|
43
|
+
// see tuiSessionModule's createApprovalBridge + the <ApprovalPrompt> component.)
|
|
44
|
+
runner.setToolApprovalCallback(async (pending) => {
|
|
45
|
+
const commandText = typeof pending.args.command === 'string'
|
|
46
|
+
? pending.args.command
|
|
47
|
+
: JSON.stringify(pending.args);
|
|
48
|
+
displayWarning(`\nThe agent wants to run a shell command via ${pending.name}:`);
|
|
49
|
+
display(`\n ${commandText}\n`);
|
|
50
|
+
// EXT-10: if the LLM-as-judge gate escalated (rather than auto-approving) this command, show
|
|
51
|
+
// its flag + reason before the human decides.
|
|
52
|
+
if (pending.safetyVerdict) {
|
|
53
|
+
displayWarning(`⚠ safety judge (${pending.safetyVerdict.risk}): ${pending.safetyVerdict.reason}`);
|
|
54
|
+
}
|
|
55
|
+
setRawMode(false); // ensure typed input is echoed for this confirm
|
|
56
|
+
// EXT-18: wrap the prompt in try/finally so the raw-mode/ref state is not left wedged if
|
|
57
|
+
// rl.question throws. The subsequent streamResume run re-establishes raw mode + ref, but be
|
|
58
|
+
// defensive. askLine() refs stdin first so the prompt actually waits for input (the run just
|
|
59
|
+
// suspended on the tool interrupt, whose stream-end unref'd stdin).
|
|
60
|
+
let answer;
|
|
61
|
+
try {
|
|
62
|
+
answer = (await askLine(formatInputPrompt('Approve? [o]nce / [s]ession / [a]lways / [N]o: ')))
|
|
63
|
+
.trim()
|
|
64
|
+
.toLowerCase();
|
|
65
|
+
}
|
|
66
|
+
finally {
|
|
67
|
+
refStdin();
|
|
68
|
+
}
|
|
69
|
+
if (answer === 'o' || answer === 'once') {
|
|
70
|
+
return { type: 'approve', scope: 'once' };
|
|
71
|
+
}
|
|
72
|
+
if (answer === 's' || answer === 'session') {
|
|
73
|
+
displayInfo('Approved for this session, future variants will not re-prompt.');
|
|
74
|
+
return { type: 'approve', scope: 'session' };
|
|
75
|
+
}
|
|
76
|
+
if (answer === 'a' || answer === 'always') {
|
|
77
|
+
displayInfo('Approved and remembered, saved to the project allow-list.');
|
|
78
|
+
return { type: 'approve', scope: 'always' };
|
|
79
|
+
}
|
|
80
|
+
displayInfo('Command rejected.');
|
|
81
|
+
return { type: 'reject', message: 'User rejected the shell command.' };
|
|
82
|
+
});
|
|
23
83
|
if (logFileName) {
|
|
24
84
|
displayInfo(`${sessionConfig.mode} session will be logged to ${logFileName}\n`);
|
|
25
85
|
}
|
|
@@ -43,7 +103,7 @@ export async function createInteractiveSession(sessionConfig, commandLineConfigO
|
|
|
43
103
|
if (!userInput.trim()) {
|
|
44
104
|
continue; // Skip inference if no input
|
|
45
105
|
}
|
|
46
|
-
const lowerInput = userInput.toLowerCase();
|
|
106
|
+
const lowerInput = userInput.toLowerCase().trim();
|
|
47
107
|
if (lowerInput === 'exit' || lowerInput === '/exit') {
|
|
48
108
|
display('Exiting...');
|
|
49
109
|
shouldExit = true;
|
|
@@ -52,6 +112,20 @@ export async function createInteractiveSession(sessionConfig, commandLineConfigO
|
|
|
52
112
|
rl.close();
|
|
53
113
|
break;
|
|
54
114
|
}
|
|
115
|
+
// EXT-12 — `/yolo` toggles session-wide shell auto-approval at the approval-decision
|
|
116
|
+
// layer (the runner flag), distinct from the static `shellYolo` config. Session-scoped,
|
|
117
|
+
// reversible, never persisted; the hardline floor still blocks catastrophic commands.
|
|
118
|
+
if (lowerInput === '/yolo') {
|
|
119
|
+
const enabled = runner.toggleSessionYolo();
|
|
120
|
+
if (enabled) {
|
|
121
|
+
displayWarning('yolo ON — shell commands auto-approved this session (no per-command prompt). ' +
|
|
122
|
+
'The hardline safety floor still blocks catastrophic commands. Run /yolo again to require approvals.');
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
displayInfo('yolo OFF — approvals required before each shell command.');
|
|
126
|
+
}
|
|
127
|
+
continue; // do not send the command to the model
|
|
128
|
+
}
|
|
55
129
|
let shouldRetry = false;
|
|
56
130
|
do {
|
|
57
131
|
try {
|
|
@@ -60,7 +134,10 @@ export async function createInteractiveSession(sessionConfig, commandLineConfigO
|
|
|
60
134
|
}
|
|
61
135
|
catch (err) {
|
|
62
136
|
display(`\n❌ Error processing message: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
63
|
-
|
|
137
|
+
// EXT-18: askLine() refs stdin first. This prompt runs in the catch after
|
|
138
|
+
// processMessage threw, by which point the stream's finally has already unref'd
|
|
139
|
+
// stdin (same exit as the approval prompt) - re-ref so it waits for input.
|
|
140
|
+
const retryResponse = await askLine('Do you want to try again with the same prompt? (y/n): ');
|
|
64
141
|
shouldRetry = retryResponse.toLowerCase().trim().startsWith('y');
|
|
65
142
|
if (!shouldRetry) {
|
|
66
143
|
display('\nSkipping to next prompt...');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactiveSessionModule.js","sourceRoot":"","sources":["../../src/modules/interactiveSessionModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyC,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAChG,OAAO,EACL,qBAAqB,EACrB,OAAO,EACP,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAC9F,OAAO,EACL,eAAe,EACf,KAAK,EACL,IAAI,EACJ,UAAU,EACV,KAAK,IAAI,KAAK,EACd,MAAM,IAAI,MAAM,GACjB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAoB,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAUvE,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,aAA4B,EAC5B,0BAAsD,EACtD,OAAgB;IAEhB,MAAM,MAAM,GAAG,EAAE,GAAG,CAAC,MAAM,UAAU,CAAC,0BAA0B,CAAC,CAAC,EAAE,CAAC;IACrE,MAAM,eAAe,GAAG,IAAI,WAAW,EAAE,CAAC;IAC1C,oBAAoB;IAEpB,MAAM,WAAW,GAAG,wBAAwB,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IACzE,IAAI,WAAW,EAAE,CAAC;QAChB,kBAAkB,CAAC,WAAW,EAAE,MAAM,CAAC,yBAAyB,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,qBAAqB,EAAE,eAAe,EAAE,EAAE,mBAAmB,CAAC,CAAC;IAEjG,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;QAC/D,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9C,IAAI,UAAU,GAAG,KAAK,CAAC;QAEvB,IAAI,WAAW,EAAE,CAAC;YAChB,WAAW,CAAC,GAAG,aAAa,CAAC,IAAI,8BAA8B,WAAW,IAAI,CAAC,CAAC;QAClF,CAAC;QAED,MAAM,cAAc,GAAG,KAAK,EAAE,SAAiB,EAAE,EAAE;YACjD,MAAM,QAAQ,GAAG,cAAc,SAAS,sBAAsB,CAAC;YAC/D,IAAI,WAAW,EAAE,CAAC;gBAChB,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YACtC,CAAC;YACD,eAAe,EAAE,CAAC,CAAC,mDAAmD;YACtE,uFAAuF;YACvF,0FAA0F;YAC1F,6FAA6F;YAC7F,mCAAmC;YACnC,MAAM,QAAQ,GAAkB,CAAC,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;YAE9D,MAAM,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC,CAAC;QAEF,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;YAC7B,OAAO,CAAC,UAAU,EAAE,CAAC;gBACnB,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,2EAA2E;gBAC7F,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC/D,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;oBACtB,SAAS,CAAC,6BAA6B;gBACzC,CAAC;gBACD,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"interactiveSessionModule.js","sourceRoot":"","sources":["../../src/modules/interactiveSessionModule.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,10 +3,65 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { BaseToolkit, StructuredToolInterface } from '@langchain/core/tools';
|
|
5
5
|
import { GthDevToolsConfig } from '@gaunt-sloth/core/config.js';
|
|
6
|
+
import type { GthCommand } from '@gaunt-sloth/core/core/types.js';
|
|
7
|
+
/**
|
|
8
|
+
* EXT-20: a run_* command that did NOT exit cleanly (non-zero exit code, or was killed for
|
|
9
|
+
* exceeding the timeout). Carries the FULL model-facing body text ({@link output}) so the
|
|
10
|
+
* softening middleware ({@link GthDeepShellExitSoftening}) can hand the model the exact same
|
|
11
|
+
* observation it saw before — the only change is the tool result's status flips to `'error'`,
|
|
12
|
+
* which drives the ✗ (`isError`) glyph.
|
|
13
|
+
*
|
|
14
|
+
* `executeCommand` previously `resolve()`d on a non-zero exit, so the LangChain `ToolMessage`
|
|
15
|
+
* stayed `status: 'success'` and every failure rendered a ✓. Throwing this typed error instead
|
|
16
|
+
* lets the deep-agent middleware convert it into an error `ToolMessage`. A clean exit (`code === 0`)
|
|
17
|
+
* still `resolve()`s; a spawn-level `child.on('error')` still rejects with a plain `Error`.
|
|
18
|
+
*/
|
|
19
|
+
export declare class ShellCommandFailedError extends Error {
|
|
20
|
+
/** The full model-facing body (command echo + `<COMMAND_OUTPUT>` + the failure/timeout tail). */
|
|
21
|
+
readonly output: string;
|
|
22
|
+
/** The process exit code; `null` when the command was killed (timeout) and never exited cleanly. */
|
|
23
|
+
readonly exitCode: number | null;
|
|
24
|
+
/** The exact command string that was executed. */
|
|
25
|
+
readonly command: string;
|
|
26
|
+
/** The run_* tool name that invoked the command (e.g. `run_tests`, `run_shell_command`). */
|
|
27
|
+
readonly toolName: string;
|
|
28
|
+
constructor(params: {
|
|
29
|
+
output: string;
|
|
30
|
+
exitCode: number | null;
|
|
31
|
+
command: string;
|
|
32
|
+
toolName: string;
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Kill the child AND its descendants on timeout.
|
|
37
|
+
*
|
|
38
|
+
* POSIX: the child is spawned `detached`, so it leads its own process group;
|
|
39
|
+
* signalling the NEGATIVE pid (`-pid`) delivers to the whole group — otherwise a
|
|
40
|
+
* shell's children (e.g. a spawned server) would be orphaned and keep running.
|
|
41
|
+
*
|
|
42
|
+
* Windows (EXT-15): there are no POSIX process groups — `process.kill(-pid)`
|
|
43
|
+
* throws `EINVAL`, and `child.kill()` only terminates the `cmd.exe` wrapper while
|
|
44
|
+
* grandchildren keep the piped stdio handles open, so `'close'` never fires and
|
|
45
|
+
* the tool Promise hangs forever (silently cancelling Windows CI). Use `taskkill
|
|
46
|
+
* /T` to kill the whole tree by pid; `/F` (force) mirrors POSIX SIGKILL, while a
|
|
47
|
+
* graceful taskkill mirrors SIGTERM. Swallows the races where it has already exited.
|
|
48
|
+
*
|
|
49
|
+
* Exported for unit testing the platform branch without a Windows host.
|
|
50
|
+
*/
|
|
51
|
+
export declare function killProcessGroup(child: {
|
|
52
|
+
pid?: number;
|
|
53
|
+
kill: (signal?: NodeJS.Signals) => boolean;
|
|
54
|
+
}, signal: NodeJS.Signals): void;
|
|
6
55
|
export default class GthDevToolkit extends BaseToolkit {
|
|
7
56
|
tools: StructuredToolInterface[];
|
|
8
57
|
private commands;
|
|
9
|
-
|
|
58
|
+
/**
|
|
59
|
+
* The active command, threaded through so the EXT-12 absent-config default for the shell
|
|
60
|
+
* tool (ON in `code`, OFF elsewhere) is resolved consistently with the deep agent's
|
|
61
|
+
* interrupt wiring. Omitted → historical OFF-by-default behaviour.
|
|
62
|
+
*/
|
|
63
|
+
private readonly command;
|
|
64
|
+
constructor(commands?: GthDevToolsConfig, command?: GthCommand | undefined);
|
|
10
65
|
/**
|
|
11
66
|
* Get tools filtered by operation type
|
|
12
67
|
*/
|
|
@@ -19,6 +74,22 @@ export default class GthDevToolkit extends BaseToolkit {
|
|
|
19
74
|
* Build the command for running a single test file
|
|
20
75
|
*/
|
|
21
76
|
private buildSingleTestCommand;
|
|
77
|
+
/**
|
|
78
|
+
* Execute a shell command with the EXT-9 Tier-1 hardening applied:
|
|
79
|
+
* 1. stdin closed + timeout + process-group kill (no hang on interactive
|
|
80
|
+
* commands; runaway commands are killed group-wide on timeout),
|
|
81
|
+
* 2. output capped with a head/tail window + temp-file spillover,
|
|
82
|
+
* 3. provider/LLM credentials scrubbed from the child env,
|
|
83
|
+
* 4. an unbypassable hardline blocklist (refuses catastrophic commands BEFORE
|
|
84
|
+
* spawn — fires even when confirmation is bypassed by yolo).
|
|
85
|
+
*
|
|
86
|
+
* Resolves with a model-facing string on a CLEAN exit (`code === 0`). EXT-20: a non-zero exit
|
|
87
|
+
* and a timeout-kill instead REJECT with a {@link ShellCommandFailedError} that carries the FULL
|
|
88
|
+
* model-facing body — the deep-agent {@link GthDeepShellExitSoftening} middleware converts that
|
|
89
|
+
* throw into an error `ToolMessage` (status:'error' → ✗) while preserving the output, so the
|
|
90
|
+
* model still sees the killed-after-N / exit-code message and can continue. Spawn-level failures
|
|
91
|
+
* (`child.on('error')`) still reject with a plain `Error`.
|
|
92
|
+
*/
|
|
22
93
|
private executeCommand;
|
|
23
94
|
private createTools;
|
|
24
95
|
}
|