@gaunt-sloth/agent 2.0.0-alpha.0 → 2.0.0-alpha.10

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.
Files changed (68) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +9 -0
  3. package/dist/builtInToolsConfig.d.ts +5 -0
  4. package/dist/builtInToolsConfig.js +16 -2
  5. package/dist/builtInToolsConfig.js.map +1 -1
  6. package/dist/core/GthDeepAgent.d.ts +108 -13
  7. package/dist/core/GthDeepAgent.js +352 -121
  8. package/dist/core/GthDeepAgent.js.map +1 -1
  9. package/dist/core/debugCapture.d.ts +8 -49
  10. package/dist/core/debugCapture.js +1 -1
  11. package/dist/core/debugCapture.js.map +1 -1
  12. package/dist/core/deepAgentPermissions.d.ts +72 -12
  13. package/dist/core/deepAgentPermissions.js +191 -29
  14. package/dist/core/deepAgentPermissions.js.map +1 -1
  15. package/dist/core/gthAcpServer.js +11 -0
  16. package/dist/core/gthAcpServer.js.map +1 -1
  17. package/dist/core/gthDeepAgentFactory.d.ts +3 -0
  18. package/dist/core/gthDeepAgentFactory.js +9 -1
  19. package/dist/core/gthDeepAgentFactory.js.map +1 -1
  20. package/dist/core/resolveAgentFactory.d.ts +14 -0
  21. package/dist/core/resolveAgentFactory.js +18 -0
  22. package/dist/core/resolveAgentFactory.js.map +1 -0
  23. package/dist/index.d.ts +1 -0
  24. package/dist/index.js +1 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/mcp/OAuthClientProviderImpl.js +2 -2
  27. package/dist/mcp/OAuthClientProviderImpl.js.map +1 -1
  28. package/dist/middleware/registry.d.ts +1 -1
  29. package/dist/middleware/registry.js +1 -1
  30. package/dist/middleware/types.d.ts +1 -1
  31. package/dist/middleware/types.js +1 -1
  32. package/dist/modules/acpModule.d.ts +5 -2
  33. package/dist/modules/acpModule.js +13 -2
  34. package/dist/modules/acpModule.js.map +1 -1
  35. package/dist/modules/apiAgUiModule.js +48 -16
  36. package/dist/modules/apiAgUiModule.js.map +1 -1
  37. package/dist/modules/interactiveSessionModule.js +130 -7
  38. package/dist/modules/interactiveSessionModule.js.map +1 -1
  39. package/dist/tools/GthDevToolkit.d.ts +45 -1
  40. package/dist/tools/GthDevToolkit.js +204 -17
  41. package/dist/tools/GthDevToolkit.js.map +1 -1
  42. package/dist/tools/gthChecklistTool.d.ts +30 -0
  43. package/dist/tools/gthChecklistTool.js +81 -0
  44. package/dist/tools/gthChecklistTool.js.map +1 -0
  45. package/dist/tools/shell/allowlist.d.ts +11 -0
  46. package/dist/tools/shell/allowlist.js +12 -0
  47. package/dist/tools/shell/allowlist.js.map +1 -0
  48. package/dist/tools/shell/arity.d.ts +11 -0
  49. package/dist/tools/shell/arity.js +12 -0
  50. package/dist/tools/shell/arity.js.map +1 -0
  51. package/dist/tools/shell/env.d.ts +22 -0
  52. package/dist/tools/shell/env.js +110 -0
  53. package/dist/tools/shell/env.js.map +1 -0
  54. package/dist/tools/shell/hardline.d.ts +15 -0
  55. package/dist/tools/shell/hardline.js +88 -0
  56. package/dist/tools/shell/hardline.js.map +1 -0
  57. package/dist/tools/shell/normalize.d.ts +10 -0
  58. package/dist/tools/shell/normalize.js +11 -0
  59. package/dist/tools/shell/normalize.js.map +1 -0
  60. package/dist/tools/shell/outputBuffer.d.ts +53 -0
  61. package/dist/tools/shell/outputBuffer.js +157 -0
  62. package/dist/tools/shell/outputBuffer.js.map +1 -0
  63. package/dist/tools/shell/workDir.d.ts +11 -0
  64. package/dist/tools/shell/workDir.js +45 -0
  65. package/dist/tools/shell/workDir.js.map +1 -0
  66. package/dist/utils/mcpUtils.js +16 -0
  67. package/dist/utils/mcpUtils.js.map +1 -1
  68. package/package.json +14 -10
package/LICENSE ADDED
@@ -0,0 +1,7 @@
1
+ Copyright 2025-present Andrew Kondratev
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
+
5
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6
+
7
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md CHANGED
@@ -8,9 +8,18 @@ The deep-agent runtime for Gaunt Sloth. Consolidates what were previously
8
8
  - MCP client + OAuth provider
9
9
  - A2A client and tools
10
10
  - The AG-UI server (`startAgUiServer`) and interactive session module
11
+ - The ACP (Agent Client Protocol) server (`startAcpServer`), exposed as the
12
+ `gaunt-sloth-acp` binary
11
13
  - The `createResolvers` tool/middleware resolver wiring
12
14
 
13
15
  It builds on `@gaunt-sloth/core` (config, provider factory, lean langchain runtime).
14
16
 
17
+ > **Running the ACP server:** prefer `gaunt-sloth --acp-agent` from the
18
+ > [`gaunt-sloth`](../app) app, not the standalone `gaunt-sloth-acp` binary. The LLM
19
+ > providers are `peerDependencies` of `@gaunt-sloth/core` that only the app declares, so a
20
+ > bare `@gaunt-sloth/agent` install has no providers to construct a model from. See the
21
+ > [app README → ACP server](../app/README.md#acp-server-editor-integration) for setup and a
22
+ > Zed `settings.json` example.
23
+
15
24
  > `@gaunt-sloth/tools` and `@gaunt-sloth/api` are deprecated and now re-export
16
25
  > from this package.
@@ -19,6 +19,11 @@ export declare const AVAILABLE_BUILT_IN_TOOLS: {
19
19
  * AG-UI A2UI surface tool: lets the agent render an A2UI surface in the web client.
20
20
  */
21
21
  readonly show_a2ui_surface: "#src/tools/showA2UISurfaceTool.js";
22
+ /**
23
+ * Checklist / todo planning tool for the lean agent (the `write_todos` equivalent). Enabled
24
+ * by default (see {@link DEFAULT_CONFIG}); disable by setting your own `builtInTools`.
25
+ */
26
+ readonly gth_checklist: "#src/tools/gthChecklistTool.js";
22
27
  };
23
28
  /**
24
29
  * Get default tools based on filesystem and built-in tools configuration
@@ -25,6 +25,11 @@ export const AVAILABLE_BUILT_IN_TOOLS = {
25
25
  * AG-UI A2UI surface tool: lets the agent render an A2UI surface in the web client.
26
26
  */
27
27
  show_a2ui_surface: '#src/tools/showA2UISurfaceTool.js',
28
+ /**
29
+ * Checklist / todo planning tool for the lean agent (the `write_todos` equivalent). Enabled
30
+ * by default (see {@link DEFAULT_CONFIG}); disable by setting your own `builtInTools`.
31
+ */
32
+ gth_checklist: '#src/tools/gthChecklistTool.js',
28
33
  };
29
34
  /**
30
35
  * Get default tools based on filesystem and built-in tools configuration
@@ -47,10 +52,19 @@ export async function getDefaultTools(config, command) {
47
52
  return [...filesystemTools, ...devTools, ...customTools, ...builtInTools];
48
53
  }
49
54
  async function filterDevTools(command, devToolConfig) {
50
- if ((command !== 'code' && command !== 'exec') || !devToolConfig) {
55
+ // Dev tools only apply to the do-the-job commands (`code` / `exec`; `ask --write` is mapped
56
+ // to `code` by the caller). EXT-12: for `code` the toolkit is constructed even when no
57
+ // devTools config is present, so the shell tool's absent-config default (ON in `code`) can
58
+ // emit `run_shell_command` (still gated). For `exec` we keep the prior behaviour — no config
59
+ // means no dev tools — by short-circuiting when the config is absent.
60
+ if (command !== 'code' && command !== 'exec') {
61
+ return [];
62
+ }
63
+ if (command === 'exec' && !devToolConfig) {
51
64
  return [];
52
65
  }
53
- const toolkit = new GthDevToolkit(devToolConfig);
66
+ // Pass the command so GthDevToolkit resolves the shell default for the active mode.
67
+ const toolkit = new GthDevToolkit(devToolConfig ?? {}, command);
54
68
  return [...toolkit.getTools()];
55
69
  }
56
70
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"builtInToolsConfig.js","sourceRoot":"","sources":["../src/builtInToolsConfig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builtInToolsConfig.js","sourceRoot":"","sources":["../src/builtInToolsConfig.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,9 @@ import { GthAbstractAgent } from '@gaunt-sloth/core/core/GthAbstractAgent.js';
3
3
  import { type GthCommand } from '@gaunt-sloth/core/core/types.js';
4
4
  import type { StructuredToolInterface } from '@langchain/core/tools';
5
5
  import type { BaseCheckpointSaver } from '@langchain/langgraph';
6
+ import { type InterruptOnConfig } from 'langchain';
6
7
  import { type FilesystemPermission } from '#src/core/deepAgentPermissions.js';
7
- import type { DebugCapture, DebugRequestExtras } from '#src/core/debugCapture.js';
8
+ export { extractDebugRequestExtras } from '#src/core/debugCapture.js';
8
9
  /**
9
10
  * The subset of `createDeepAgent` params that are independent of the transport
10
11
  * (the local runner vs. the ACP server). Both {@link GthDeepAgent.init} (which adds the
@@ -31,6 +32,21 @@ export interface GthDeepAgentParams {
31
32
  * no prompt content is composed (lets deepagents use only its base prompt).
32
33
  */
33
34
  systemPrompt: string | undefined;
35
+ /**
36
+ * Per-tool human-in-the-loop configuration passed straight to
37
+ * `createDeepAgent({ interruptOn })` (deepagents installs LangChain's
38
+ * `humanInTheLoopMiddleware` for it). A matching tool call suspends the graph with a
39
+ * `__interrupt__` (a `HITLRequest`) so a consumer can approve/reject before the tool runs;
40
+ * resume with `new Command({ resume: { decisions: [...] } })` on the same `thread_id`.
41
+ *
42
+ * gsloth sets this for the opt-in `run_shell_command` tool whenever `devTools.shell` is
43
+ * enabled — including under `devTools.shellYolo` in interactive `code` mode, where the tool
44
+ * stays gated so the runtime `/auto-approve` flag governs it (the runner seeds that flag ON
45
+ * from shellYolo and auto-approves silently). It is left `undefined` only for a non-interactive
46
+ * yolo run (exec / ask --write), whose single-shot path does not drain interrupts, so the tool
47
+ * there runs inline without suspending. See `getAgentBuildParams`.
48
+ */
49
+ interruptOn?: Record<string, boolean | InterruptOnConfig>;
34
50
  }
35
51
  /**
36
52
  * Deep agent: builds a `createDeepAgent` graph (deepagents). All run/stream/event
@@ -43,7 +59,10 @@ export interface GthDeepAgentParams {
43
59
  * {@link FilesystemBackend}. gsloth's `.aiignore` + `filesystem` config are mapped
44
60
  * onto deepagents `permissions` (see {@link buildPermissions}). Any resolved tool
45
61
  * that reuses a deepagents filesystem-tool name is therefore superseded and dropped
46
- * (`createDeepAgent` would otherwise throw on the collision).
62
+ * (`createDeepAgent` would otherwise throw on the collision). EXT-14: the
63
+ * `FilesystemBackend` itself is wrapped with {@link guardFilesystemBackend} before it
64
+ * reaches `createDeepAgent`, adding a realpath (symlink-resolved) containment check the
65
+ * permission globs alone can't provide.
47
66
  * - todos / subagents / summarization come from deepagents' standard middleware.
48
67
  *
49
68
  * The transport-agnostic param assembly lives in {@link buildDeepAgentParams} so the ACP
@@ -51,13 +70,6 @@ export interface GthDeepAgentParams {
51
70
  * middleware hardening without re-running `createDeepAgent` locally.
52
71
  */
53
72
  export declare class GthDeepAgent extends GthAbstractAgent {
54
- /**
55
- * Opt-in debug sink for the TUI `/debug` panel. Set AFTER {@link init} via
56
- * `runner.getAgent()`; read lazily inside the `wrapModelCall` middleware so that when it
57
- * is `undefined` (the normal path) the middleware is a transparent pass-through. Never
58
- * touched by the lean agent or the AG-UI server, so those contracts are unchanged.
59
- */
60
- debugCapture: DebugCapture | undefined;
61
73
  init(command: GthCommand | undefined, configIn: GthConfig, checkpointer?: BaseCheckpointSaver | undefined): Promise<void>;
62
74
  /**
63
75
  * Assemble the transport-agnostic {@link GthDeepAgentParams}: resolve tools (with the
@@ -67,10 +79,93 @@ export declare class GthDeepAgent extends GthAbstractAgent {
67
79
  * runner ({@link init}) and the `deepagents-acp` ACP entry.
68
80
  */
69
81
  buildDeepAgentParams(command: GthCommand | undefined, configIn: GthConfig): Promise<GthDeepAgentParams>;
82
+ /**
83
+ * Resolve the {@link GthDevToolsConfig} that applies to the active command, mirroring the
84
+ * per-command selection in `builtInToolsConfig.getDefaultTools` (which is what actually emits
85
+ * the dev tools): `exec` → `commands.exec.devTools`, `ask --write` → `commands.ask.devTools`,
86
+ * otherwise (`code`) → `commands.code.devTools`. Returns `undefined` for any other command,
87
+ * matching the toolkit being inert there. Kept private and side-effect-free so the interrupt
88
+ * wiring above and the tool emission stay in lockstep.
89
+ */
90
+ private getEffectiveDevToolsConfig;
70
91
  }
71
92
  /**
72
- * Assemble the non-message request parts ({@link DebugRequestExtras}) for the `/debug`
73
- * panel from a `wrapModelCall` request, defensively and key-free. Never throws (the caller
74
- * already guards, but a debug sink must never break a run) and never dumps the raw model.
93
+ * EXT-22: shared virtualMode path-namespace guidance ONE source of truth used by BOTH the S2
94
+ * early-framing note ({@link appendVirtualCwdNote}, injected into gsloth's composed systemPrompt =
95
+ * block 0) and the S1 last-word correction middleware
96
+ * ({@link createPathNamespaceCorrectionMiddleware}, appended after deepagents' `/`-rooted line).
97
+ *
98
+ * In a virtualMode `code` session (EXT-16, e.g. Windows) the deepagents filesystem tools use a
99
+ * VIRTUAL `/` root (= the working dir) while `run_shell_command` uses REAL native OS paths; the
100
+ * model conflates the two forms. This text draws the distinction and steers toward cwd-relative
101
+ * paths (the one form both tool families read alike).
102
+ *
103
+ * It deliberately does NOT equate the virtual root with a specific real path (no "`/` = D:\\work"):
104
+ * virtualMode withholds the real cwd on purpose (see the systemPrompt gate in {@link
105
+ * GthDeepAgent.init}), so the guidance is about the DISTINCTION between the two namespaces and the
106
+ * safety of relative paths, not a mapping between them.
107
+ */
108
+ export declare const PATH_NAMESPACE_GUIDANCE: string;
109
+ /**
110
+ * EXT-22 (S2): virtualMode variant of {@link appendCwdNote}. On the `code` path when the fs
111
+ * backend runs in virtualMode (EXT-16), inject the shared path-namespace guidance EARLY in
112
+ * gsloth's composed systemPrompt (block 0) so the model is framed before deepagents' own prompt.
113
+ *
114
+ * This is early framing only: deepagents' hardcoded `/`-rooted line lands in a LATER block and can
115
+ * partially override block 0, so the authoritative last word is delivered by the S1 middleware
116
+ * ({@link createPathNamespaceCorrectionMiddleware}); see handoff/spike-systemmessage-ordering.md.
117
+ * Returns the note alone when there is no base prompt.
118
+ */
119
+ export declare function appendVirtualCwdNote(systemPrompt: string | undefined): string;
120
+ /**
121
+ * EXT-22 (S1): the load-bearing path-namespace correction. A gsloth `wrapModelCall` middleware
122
+ * runs INNERMOST (inside deepagents' filesystem middleware), so appending a trailing block to
123
+ * `request.systemMessage` lands AFTER deepagents' hardcoded "All file paths must start with a /."
124
+ * line — giving gsloth the last word on path semantics (empirically verified; see
125
+ * handoff/spike-systemmessage-ordering.md). It APPENDS via `request.systemMessage.concat(...)`
126
+ * (mirroring how deepagents appends its own fs prompt), never string-splices, and returns a NEW
127
+ * request so it never mutates persisted state (no compounding across turns).
128
+ *
129
+ * `appendCorrection` gates it to `code` + virtualMode: only there do the fs virtual `/` root and
130
+ * the shell's real-OS paths diverge. On POSIX real-path mode deepagents' "start with /" is
131
+ * literally true, so the middleware is a transparent pass-through (like the debug-capture
132
+ * middleware when no sink is attached).
133
+ */
134
+ export declare function createPathNamespaceCorrectionMiddleware(appendCorrection: boolean): import("langchain").AgentMiddleware<undefined, undefined, unknown, readonly (import("@langchain/core/tools").ClientTool | import("@langchain/core/tools").ServerTool)[], readonly []>;
135
+ /**
136
+ * EXT-13 (part b): append a real-cwd / path-model note to the composed code-mode system prompt.
137
+ *
138
+ * The default code-mode backend runs in REAL-path mode (no virtualMode), so the deepagents fs
139
+ * tools and `run_shell_command` share one real-absolute-path namespace rooted at `cwd`. Neither
140
+ * deepagents' base prompt nor `.gsloth.code.md` states the actual cwd, so without this the model
141
+ * assumes `/` is cwd and hands `/`-rooted paths to the real-fs shell. The cwd is injected
142
+ * dynamically (never baked into the .md). Returns the note alone when there is no base prompt.
143
+ */
144
+ export declare function appendCwdNote(systemPrompt: string | undefined, cwd: string): string;
145
+ /**
146
+ * EXT-26: the platform-agnostic tail shared by both {@link appendOsShellNote} branches.
147
+ *
148
+ * The recurring failure mode on non-POSIX hosts is not just wrong command NAMES but shell
149
+ * REDIRECTION quoting: a grouped/multi-line `echo` redirect on cmd.exe reported success yet wrote
150
+ * a 0-byte file. So on every platform we steer file creation/mutation to the deepagents built-in
151
+ * `write_file`/`edit_file` tools (which never touch the shell's quoting) and keep each shell
152
+ * command a single line. Kept short — this is prompt text an LLM reads, not documentation.
153
+ */
154
+ export declare const OS_SHELL_GUIDANCE: string;
155
+ /**
156
+ * EXT-26: append an OS + shell-dialect note to the composed code-mode system prompt.
157
+ *
158
+ * The deep-agent model was never told its host OS or which shell `run_shell_command` uses, so on
159
+ * non-POSIX hosts it defaulted to POSIX idioms that fail (ran `ls` where cmd.exe has `dir`, a
160
+ * multi-line echo-redirect that wrote 0 bytes, a PowerShell here-string, `python -c` multi-line).
161
+ * This is ORTHOGONAL to the EXT-13/16/22 path-namespace notes: those say WHERE the model is (path
162
+ * form); this says WHAT shell it speaks (dialect).
163
+ *
164
+ * The shell is derived from the SAME rule Node's `spawn(command, { shell: true })` uses — exactly
165
+ * how `run_shell_command` spawns (GthDevToolkit spawn) — so on `win32` it is cmd.exe (via
166
+ * `%ComSpec%`) and on POSIX it is `/bin/sh` (POSIX sh, NOT guaranteed bash). Computed from
167
+ * `process.platform` at call time so the text is correct per host. Returns the note alone when
168
+ * there is no base prompt. A single injection is authoritative (nothing in deepagents' base prompt
169
+ * contradicts shell dialect), so unlike EXT-22 no correction middleware is needed.
75
170
  */
76
- export declare function extractDebugRequestExtras(request: unknown): DebugRequestExtras | undefined;
171
+ export declare function appendOsShellNote(systemPrompt: string | undefined): string;