@gaunt-sloth/agent 2.0.0-alpha.2 → 2.0.0-alpha.21

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 (86) hide show
  1. package/README.md +10 -0
  2. package/dist/builtInToolsConfig.d.ts +17 -3
  3. package/dist/builtInToolsConfig.js +41 -14
  4. package/dist/builtInToolsConfig.js.map +1 -1
  5. package/dist/core/GthDeepAgent.d.ts +63 -13
  6. package/dist/core/GthDeepAgent.js +360 -130
  7. package/dist/core/GthDeepAgent.js.map +1 -1
  8. package/dist/core/debugCapture.d.ts +8 -49
  9. package/dist/core/debugCapture.js +1 -1
  10. package/dist/core/debugCapture.js.map +1 -1
  11. package/dist/core/deepAgentPermissions.d.ts +73 -13
  12. package/dist/core/deepAgentPermissions.js +191 -29
  13. package/dist/core/deepAgentPermissions.js.map +1 -1
  14. package/dist/core/gthAcpServer.js +11 -0
  15. package/dist/core/gthAcpServer.js.map +1 -1
  16. package/dist/core/gthDeepAgentFactory.d.ts +3 -0
  17. package/dist/core/gthDeepAgentFactory.js +9 -1
  18. package/dist/core/gthDeepAgentFactory.js.map +1 -1
  19. package/dist/core/resolveAgentFactory.d.ts +14 -0
  20. package/dist/core/resolveAgentFactory.js +18 -0
  21. package/dist/core/resolveAgentFactory.js.map +1 -0
  22. package/dist/index.d.ts +1 -0
  23. package/dist/index.js +1 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/mcp/OAuthClientProviderImpl.js +2 -2
  26. package/dist/mcp/OAuthClientProviderImpl.js.map +1 -1
  27. package/dist/mcp/tlsTrust.d.ts +61 -0
  28. package/dist/mcp/tlsTrust.js +109 -0
  29. package/dist/mcp/tlsTrust.js.map +1 -0
  30. package/dist/middleware/registry.d.ts +1 -1
  31. package/dist/middleware/registry.js +1 -1
  32. package/dist/middleware/types.d.ts +1 -1
  33. package/dist/middleware/types.js +1 -1
  34. package/dist/modules/a2a/A2AClientWrapper.d.ts +46 -0
  35. package/dist/modules/a2a/A2AClientWrapper.js +71 -0
  36. package/dist/modules/a2a/A2AClientWrapper.js.map +1 -1
  37. package/dist/modules/acpModule.d.ts +5 -2
  38. package/dist/modules/acpModule.js +13 -2
  39. package/dist/modules/acpModule.js.map +1 -1
  40. package/dist/modules/apiAgUiModule.js +48 -16
  41. package/dist/modules/apiAgUiModule.js.map +1 -1
  42. package/dist/modules/interactiveSessionModule.js +140 -7
  43. package/dist/modules/interactiveSessionModule.js.map +1 -1
  44. package/dist/resolvers.js +104 -9
  45. package/dist/resolvers.js.map +1 -1
  46. package/dist/tools/GthCustomToolkit.js +24 -9
  47. package/dist/tools/GthCustomToolkit.js.map +1 -1
  48. package/dist/tools/GthDevToolkit.d.ts +45 -1
  49. package/dist/tools/GthDevToolkit.js +229 -31
  50. package/dist/tools/GthDevToolkit.js.map +1 -1
  51. package/dist/tools/GthFileSystemToolkit.d.ts +47 -0
  52. package/dist/tools/GthFileSystemToolkit.js +305 -18
  53. package/dist/tools/GthFileSystemToolkit.js.map +1 -1
  54. package/dist/tools/gthChecklistTool.d.ts +30 -0
  55. package/dist/tools/gthChecklistTool.js +81 -0
  56. package/dist/tools/gthChecklistTool.js.map +1 -0
  57. package/dist/tools/gthGrepTool.d.ts +54 -0
  58. package/dist/tools/gthGrepTool.js +482 -0
  59. package/dist/tools/gthGrepTool.js.map +1 -0
  60. package/dist/tools/shell/allowlist.d.ts +11 -0
  61. package/dist/tools/shell/allowlist.js +12 -0
  62. package/dist/tools/shell/allowlist.js.map +1 -0
  63. package/dist/tools/shell/arity.d.ts +11 -0
  64. package/dist/tools/shell/arity.js +12 -0
  65. package/dist/tools/shell/arity.js.map +1 -0
  66. package/dist/tools/shell/env.d.ts +22 -0
  67. package/dist/tools/shell/env.js +110 -0
  68. package/dist/tools/shell/env.js.map +1 -0
  69. package/dist/tools/shell/hardline.d.ts +15 -0
  70. package/dist/tools/shell/hardline.js +88 -0
  71. package/dist/tools/shell/hardline.js.map +1 -0
  72. package/dist/tools/shell/normalize.d.ts +10 -0
  73. package/dist/tools/shell/normalize.js +11 -0
  74. package/dist/tools/shell/normalize.js.map +1 -0
  75. package/dist/tools/shell/outputBuffer.d.ts +53 -0
  76. package/dist/tools/shell/outputBuffer.js +157 -0
  77. package/dist/tools/shell/outputBuffer.js.map +1 -0
  78. package/dist/tools/shell/workDir.d.ts +11 -0
  79. package/dist/tools/shell/workDir.js +45 -0
  80. package/dist/tools/shell/workDir.js.map +1 -0
  81. package/dist/utils/mcpAuthError.d.ts +36 -0
  82. package/dist/utils/mcpAuthError.js +89 -0
  83. package/dist/utils/mcpAuthError.js.map +1 -0
  84. package/dist/utils/mcpUtils.js +16 -0
  85. package/dist/utils/mcpUtils.js.map +1 -1
  86. package/package.json +14 -13
@@ -0,0 +1,14 @@
1
+ import type { GthAgentFactory } from '@gaunt-sloth/core/core/types.js';
2
+ import type { GthConfig } from '@gaunt-sloth/core/config.js';
3
+ /**
4
+ * Resolve the agent backend factory from config (B5). An explicit `agent.backend` wins;
5
+ * otherwise `defaultBackend` is used — the per-command default. Every command now defaults to
6
+ * `'lean'`; `'deep'` is the experimental, opt-in backend (selecting it emits a warning).
7
+ *
8
+ * Returns {@link gthDeepAgentFactory} for `'deep'` and {@link gthLeanAgentFactory} for `'lean'`.
9
+ * Both factories receive the SAME `createResolvers()` toolset, so lean is not capability-stripped:
10
+ * it keeps gaunt-sloth's own filesystem + (in code mode) dev/shell tools plus the `gth_checklist`
11
+ * planning tool; it only drops the deepagents-specific extras (subagent `task`, `write_todos`,
12
+ * summarization, `/large_tool_results`).
13
+ */
14
+ export declare function resolveAgentFactory(config: GthConfig, defaultBackend: 'deep' | 'lean'): GthAgentFactory;
@@ -0,0 +1,18 @@
1
+ import { gthLeanAgentFactory } from '@gaunt-sloth/core/core/gthLeanAgentFactory.js';
2
+ import { gthDeepAgentFactory } from '#src/core/gthDeepAgentFactory.js';
3
+ /**
4
+ * Resolve the agent backend factory from config (B5). An explicit `agent.backend` wins;
5
+ * otherwise `defaultBackend` is used — the per-command default. Every command now defaults to
6
+ * `'lean'`; `'deep'` is the experimental, opt-in backend (selecting it emits a warning).
7
+ *
8
+ * Returns {@link gthDeepAgentFactory} for `'deep'` and {@link gthLeanAgentFactory} for `'lean'`.
9
+ * Both factories receive the SAME `createResolvers()` toolset, so lean is not capability-stripped:
10
+ * it keeps gaunt-sloth's own filesystem + (in code mode) dev/shell tools plus the `gth_checklist`
11
+ * planning tool; it only drops the deepagents-specific extras (subagent `task`, `write_todos`,
12
+ * summarization, `/large_tool_results`).
13
+ */
14
+ export function resolveAgentFactory(config, defaultBackend) {
15
+ const backend = config.agent?.backend ?? defaultBackend;
16
+ return backend === 'deep' ? gthDeepAgentFactory : gthLeanAgentFactory;
17
+ }
18
+ //# sourceMappingURL=resolveAgentFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveAgentFactory.js","sourceRoot":"","sources":["../../src/core/resolveAgentFactory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAEvE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAiB,EACjB,cAA+B;IAE/B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,cAAc,CAAC;IACxD,OAAO,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC;AACxE,CAAC"}
package/dist/index.d.ts CHANGED
@@ -11,3 +11,4 @@ export { resolveMiddleware } from '#src/middleware/registry.js';
11
11
  export { GthDeepAgent, type GthDeepAgentParams } from '#src/core/GthDeepAgent.js';
12
12
  export * from '#src/core/deepAgentPermissions.js';
13
13
  export { gthDeepAgentFactory } from '#src/core/gthDeepAgentFactory.js';
14
+ export { resolveAgentFactory } from '#src/core/resolveAgentFactory.js';
package/dist/index.js CHANGED
@@ -13,4 +13,5 @@ export { resolveMiddleware } from '#src/middleware/registry.js';
13
13
  export { GthDeepAgent } from '#src/core/GthDeepAgent.js';
14
14
  export * from '#src/core/deepAgentPermissions.js';
15
15
  export { gthDeepAgentFactory } from '#src/core/gthDeepAgentFactory.js';
16
+ export { resolveAgentFactory } from '#src/core/resolveAgentFactory.js';
16
17
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0CAA0C,CAAC;AACzD,cAAc,sCAAsC,CAAC;AACrD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qCAAqC,CAAC;AACpD,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,mDAAmD;AACnD,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE,+EAA+E;AAC/E,OAAO,EAAE,YAAY,EAA2B,MAAM,2BAA2B,CAAC;AAClF,cAAc,mCAAmC,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0CAA0C,CAAC;AACzD,cAAc,sCAAsC,CAAC;AACrD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qCAAqC,CAAC;AACpD,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,mDAAmD;AACnD,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE,+EAA+E;AAC/E,OAAO,EAAE,YAAY,EAA2B,MAAM,2BAA2B,CAAC;AAClF,cAAc,mCAAmC,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC"}
@@ -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 Assistant',
86
- client_uri: 'https://gaunt-sloth-assistant.github.io/',
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":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,0CAA0C,CAAC;AAMhE,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAEtE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AAcnF;;GAEG;AACH,MAAM,OAAO,uBAAuB;IAC1B,MAAM,CAA4B;IAClC,UAAU,CAAS;IACnB,WAAW,CAAS;IACpB,YAAY,CAAoB;IAExC,YAAY,MAAiC;QAC3C,IAAI,CAAC,MAAM,GAAG,MAAmC,CAAC;QAClD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAChE,CAAC;IAEO,eAAe;QACrB,kCAAkC;QAClC,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,YAAY,CAAC;QAC3B,CAAC;QAED,mCAAmC;QACnC,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBACrD,MAAM,UAAU,GAAqB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAEtD,4EAA4E;gBAC5E,IAAI,UAAU,CAAC,iBAAiB,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;oBACvD,IAAI,CAAC;wBACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBAC7B,WAAW,CAAC,6CAA6C,CAAC,CAAC;wBAC3D,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;wBACvB,OAAO,IAAI,CAAC,YAAY,CAAC;oBAC3B,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,WAAW,CAAC,uCAAuC,GAAG,KAAK,CAAC,CAAC;oBAC/D,CAAC;gBACH,CAAC;gBAED,wBAAwB;gBACxB,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;gBAC/B,OAAO,UAAU,CAAC;YACpB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,WAAW,CAAC,qCAAqC,GAAG,KAAK,CAAC,CAAC;gBAC3D,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAC,YAAY,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,qCAAqC;QACrC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAEO,eAAe,CAAC,IAAsB;QAC5C,IAAI,CAAC;YACH,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACxE,+BAA+B;YAC/B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,qCAAqC;IACrC,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;IACjC,CAAC;IAED,qCAAqC;IACrC,IAAI,cAAc;QAChB,OAAO;YACL,aAAa,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YACxC,WAAW,EAAE,uBAAuB;YACpC,UAAU,EAAE,0CAA0C;YACtD,WAAW,EAAE,sCAAsC;YACnD,KAAK,EAAE,oBAAoB;YAC3B,0BAA0B,EAAE,MAAM;YAClC,WAAW,EAAE,CAAC,oBAAoB,EAAE,eAAe,CAAC;YACpD,cAAc,EAAE,CAAC,MAAM,CAAC;SACzB,CAAC;IACJ,CAAC;IAED,qCAAqC;IACrC,qBAAqB,CAAC,iBAA6C;QACjE,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACpC,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,qCAAqC;IACrC,KAAK,CAAC,iBAAiB;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACpC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACjD,CAAC;IAED,qCAAqC;IACrC,KAAK,CAAC,UAAU,CAAC,MAAmB;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,qCAAqC;IACrC,MAAM;QACJ,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,qCAAqC;IACrC,gBAAgB,CAAC,YAAoB;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACpC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,qCAAqC;IACrC,YAAY;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC5C,CAAC;IAED,qCAAqC;IACrC,KAAK,CAAC,uBAAuB,CAAC,OAAY;QACxC,WAAW,CAAC,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC/B,WAAW,CAAC,wBAAwB,CAAC,CAAC;YAEtC,6BAA6B;YAC7B,MAAM,YAAY,GAAG,QAAQ,EAAE,CAAC;YAChC,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;gBAC7B,wEAAwE;gBACxE,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAClE,CAAC;iBAAM,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;gBACrC,QAAQ;gBACR,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,mBAAmB;gBACnB,SAAS,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAC;YAChD,WAAW,CAAC,eAAe,OAAO,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,SAAmC;IAEnC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,yBAAyB,CAAC,iBAAiB,CAAC,CAAC;IACzF,MAAM,YAAY,GAAG,IAAI,uBAAuB,CAAC;QAC/C,WAAW,EAAE,oBAAoB,IAAI,iBAAiB;QACtD,SAAS,EAAE,SAAS,CAAC,GAAG;KACzB,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;IACvE,IAAI,OAAO,IAAI,UAAU,EAAE,CAAC;QAC1B,MAAM,iBAAiB,GAAG,MAAM,WAAW,CAAC;QAC5C,MAAM,IAAI,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,GAAG,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC5E,CAAC;SAAM,IAAI,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,WAAW,CAAC,YAAY,CAAC,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,IAAY,EACZ,YAAoB,CAAC;IAMrB,MAAM,WAAW,GAAG,OAAO,EAAE,CAAC;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAS,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE;YAClE,8DAA8D;YAC9D,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAQ,EAAE,GAAQ,EAAE,EAAE;gBAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAA0B,CAAC;gBAClD,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;oBACrD,UAAU,CAAC,8BAA8B,CAAC,CAAC;oBAC3C,OAAO;gBACT,CAAC;gBACD,GAAG,CAAC,IAAI,CAAC;;;;;;;;;eASF,CAAC,CAAC;gBACT,WAAW,CAAC,IAAI,CAAC,CAAC;gBAClB,IAAI,MAAM,EAAE,CAAC;oBACX,WAAW,CAAC,kCAAkC,CAAC,CAAC;oBAChD,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE;YAChD,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,EAAiB,CAAC;YACpD,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;YAC9B,WAAW,CAAC,sCAAsC,IAAI,EAAE,CAAC,CAAC;YAC1D,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACzB,0DAA0D;YAC1D,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"OAuthClientProviderImpl.js","sourceRoot":"","sources":["../../src/mcp/OAuthClientProviderImpl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Process-global TLS trust for outbound HTTPS, driven by the `tls` config block.
4
+ *
5
+ * Motivation: an `http`-transport MCP server behind a private/corporate CA (e.g. a dev monolith
6
+ * with a self-signed cert) makes Node's global `fetch` reject the connection with
7
+ * `TypeError: fetch failed` (`SELF_SIGNED_CERT_IN_CHAIN`). The only pre-existing workaround was to
8
+ * prepend `NODE_EXTRA_CA_CERTS=<ca.crt>` on every invocation — that env var is read ONCE at Node
9
+ * startup, so it can't be set from config after launch.
10
+ *
11
+ * Node's `fetch` runs on undici and ignores `https.globalAgent`, so the CA must be installed via an
12
+ * undici dispatcher. `@langchain/mcp-adapters` forwards only `serverName`/`headers`/`authProvider`
13
+ * to the SDK transport (it drops the SDK's `requestInit`/`fetch` hooks), so a per-server CA is not
14
+ * reachable through the adapter. The trust is therefore installed **process-globally** via
15
+ * `setGlobalDispatcher`. That is acceptable for adding a CA (additive trust weakens nothing) — but
16
+ * note the insecure latch below is global too, and so affects LLM provider calls, not only MCP.
17
+ */
18
+ import type { GthConfig } from '@gaunt-sloth/core/config.js';
19
+ type TlsConfig = GthConfig['tls'];
20
+ /** A cert path that could not be read, with the reason (surfaced by the installer). */
21
+ export interface TlsCertFailure {
22
+ path: string;
23
+ message: string;
24
+ }
25
+ /** The undici `connect` options computed from a `tls` config, plus what happened while reading. */
26
+ export interface BuiltDispatcher {
27
+ /** Node's default roots FIRST, then successfully-read user certs. `connect.ca` REPLACES the */
28
+ /** default store, so the roots must be included or every public-CA fetch breaks. */
29
+ ca: string[];
30
+ /** `false` disables verification entirely (process-global). Defaults to `true`. */
31
+ rejectUnauthorized: boolean;
32
+ /** How many configured certs were read successfully. */
33
+ loadedCount: number;
34
+ /** Configured certs that could not be read (fail-soft: skipped, not fatal). */
35
+ failures: TlsCertFailure[];
36
+ }
37
+ /**
38
+ * Compute the undici dispatcher options from a `tls` config. Pure aside from the injected
39
+ * `readCert` (so unit tests stub file reads): resolves nothing about the environment itself.
40
+ *
41
+ * Returns `null` only when NOTHING is configured — no `tls` block, or an empty `tls` with no cert
42
+ * entries and verification left at its secure default. When certs ARE configured it always returns
43
+ * the object (even if every read failed), so the caller can surface those `failures` rather than
44
+ * silently swallowing a bad cert path. Whether to actually install is the caller's call:
45
+ * `loadedCount > 0 || !rejectUnauthorized`.
46
+ *
47
+ * `readCert` receives each configured path verbatim and must return the PEM contents or throw.
48
+ */
49
+ export declare function buildDispatcherOptions(tls: TlsConfig, readCert: (path: string) => string, baseRoots?: readonly string[]): BuiltDispatcher | null;
50
+ /**
51
+ * Install the process-global undici dispatcher from `config.tls`, if any. Idempotent (installs at
52
+ * most once per process). Fail-soft: an unreadable cert is warned about and skipped, never fatal.
53
+ * Emits a loud security warning when verification is disabled.
54
+ *
55
+ * Wired into `getMcpClient` before the MCP client is created; because it is global it also covers
56
+ * LLM/tool fetches — which is desired for the CA case and is the danger to flag for the latch.
57
+ */
58
+ export declare function installMcpTlsTrust(config: GthConfig): void;
59
+ /** Test-only: reset the install-once guard between cases. */
60
+ export declare function resetMcpTlsTrustForTests(): void;
61
+ export {};
@@ -0,0 +1,109 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Process-global TLS trust for outbound HTTPS, driven by the `tls` config block.
4
+ *
5
+ * Motivation: an `http`-transport MCP server behind a private/corporate CA (e.g. a dev monolith
6
+ * with a self-signed cert) makes Node's global `fetch` reject the connection with
7
+ * `TypeError: fetch failed` (`SELF_SIGNED_CERT_IN_CHAIN`). The only pre-existing workaround was to
8
+ * prepend `NODE_EXTRA_CA_CERTS=<ca.crt>` on every invocation — that env var is read ONCE at Node
9
+ * startup, so it can't be set from config after launch.
10
+ *
11
+ * Node's `fetch` runs on undici and ignores `https.globalAgent`, so the CA must be installed via an
12
+ * undici dispatcher. `@langchain/mcp-adapters` forwards only `serverName`/`headers`/`authProvider`
13
+ * to the SDK transport (it drops the SDK's `requestInit`/`fetch` hooks), so a per-server CA is not
14
+ * reachable through the adapter. The trust is therefore installed **process-globally** via
15
+ * `setGlobalDispatcher`. That is acceptable for adding a CA (additive trust weakens nothing) — but
16
+ * note the insecure latch below is global too, and so affects LLM provider calls, not only MCP.
17
+ */
18
+ import { rootCertificates } from 'node:tls';
19
+ import { readFileSync } from 'node:fs';
20
+ import { homedir } from 'node:os';
21
+ import { resolve } from 'node:path';
22
+ import { Agent, setGlobalDispatcher } from 'undici';
23
+ import { getProjectDir } from '@gaunt-sloth/core/utils/systemUtils.js';
24
+ import { displayWarning } from '@gaunt-sloth/core/utils/consoleUtils.js';
25
+ import { debugLog } from '@gaunt-sloth/core/utils/debugUtils.js';
26
+ /**
27
+ * Compute the undici dispatcher options from a `tls` config. Pure aside from the injected
28
+ * `readCert` (so unit tests stub file reads): resolves nothing about the environment itself.
29
+ *
30
+ * Returns `null` only when NOTHING is configured — no `tls` block, or an empty `tls` with no cert
31
+ * entries and verification left at its secure default. When certs ARE configured it always returns
32
+ * the object (even if every read failed), so the caller can surface those `failures` rather than
33
+ * silently swallowing a bad cert path. Whether to actually install is the caller's call:
34
+ * `loadedCount > 0 || !rejectUnauthorized`.
35
+ *
36
+ * `readCert` receives each configured path verbatim and must return the PEM contents or throw.
37
+ */
38
+ export function buildDispatcherOptions(tls, readCert, baseRoots = rootCertificates) {
39
+ const rejectUnauthorized = tls?.rejectUnauthorized ?? true;
40
+ const certPaths = tls?.extraCaCerts ?? [];
41
+ // Nothing configured at all: no cert entries and verification not being disabled.
42
+ if (certPaths.length === 0 && rejectUnauthorized)
43
+ return null;
44
+ const userCerts = [];
45
+ const failures = [];
46
+ for (const path of certPaths) {
47
+ try {
48
+ userCerts.push(readCert(path));
49
+ }
50
+ catch (error) {
51
+ failures.push({ path, message: error instanceof Error ? error.message : String(error) });
52
+ }
53
+ }
54
+ return {
55
+ // ca REPLACES the trust store — keep the default roots or public-CA fetches (incl. the LLM
56
+ // provider) silently break.
57
+ ca: [...baseRoots, ...userCerts],
58
+ rejectUnauthorized,
59
+ loadedCount: userCerts.length,
60
+ failures,
61
+ };
62
+ }
63
+ // Install-once guard: the trust is process-global and set-once, so re-running resolveTools (re-init)
64
+ // must not re-replace the dispatcher nor re-emit the security warning every time.
65
+ let installed = false;
66
+ /**
67
+ * Install the process-global undici dispatcher from `config.tls`, if any. Idempotent (installs at
68
+ * most once per process). Fail-soft: an unreadable cert is warned about and skipped, never fatal.
69
+ * Emits a loud security warning when verification is disabled.
70
+ *
71
+ * Wired into `getMcpClient` before the MCP client is created; because it is global it also covers
72
+ * LLM/tool fetches — which is desired for the CA case and is the danger to flag for the latch.
73
+ */
74
+ export function installMcpTlsTrust(config) {
75
+ if (installed) {
76
+ debugLog('MCP TLS trust already installed this process; skipping.');
77
+ return;
78
+ }
79
+ const built = buildDispatcherOptions(config.tls, resolveAndReadCert);
80
+ if (!built)
81
+ return;
82
+ // Surface unreadable certs even if we end up installing nothing — a bad cert path must never be
83
+ // swallowed silently. Warn BEFORE the "nothing actionable" bail below.
84
+ for (const failure of built.failures) {
85
+ displayWarning(`TLS: could not read CA certificate '${failure.path}' (${failure.message}); skipping it.`);
86
+ }
87
+ // Nothing left to install: every configured cert failed to read and verification is still on.
88
+ // (Failures were already surfaced above.) Leave Node's default dispatcher untouched.
89
+ if (built.loadedCount === 0 && built.rejectUnauthorized)
90
+ return;
91
+ installed = true;
92
+ if (!built.rejectUnauthorized) {
93
+ displayWarning('TLS: certificate verification is DISABLED (tls.rejectUnauthorized: false). This is INSECURE ' +
94
+ 'and applies to ALL outbound HTTPS this process makes — MCP servers AND LLM provider calls. ' +
95
+ 'Use only against trusted dev endpoints; prefer tls.extraCaCerts to trust a specific CA instead.');
96
+ }
97
+ setGlobalDispatcher(new Agent({ connect: { ca: built.ca, rejectUnauthorized: built.rejectUnauthorized } }));
98
+ debugLog(`MCP TLS trust installed: ${built.loadedCount} extra CA cert(s), rejectUnauthorized=${built.rejectUnauthorized}.`);
99
+ }
100
+ /** Resolve a configured cert path (`~` / relative-to-project / absolute) and read it as UTF-8. */
101
+ function resolveAndReadCert(path) {
102
+ const expanded = path === '~' || path.startsWith('~/') ? homedir() + path.slice(1) : path;
103
+ return readFileSync(resolve(getProjectDir(), expanded), 'utf8');
104
+ }
105
+ /** Test-only: reset the install-once guard between cases. */
106
+ export function resetMcpTlsTrustForTests() {
107
+ installed = false;
108
+ }
109
+ //# sourceMappingURL=tlsTrust.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tlsTrust.js","sourceRoot":"","sources":["../../src/mcp/tlsTrust.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @packageDocumentation
3
- * Middleware registry for Gaunt Sloth Assistant.
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 Assistant.
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 Assistant.
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.
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @packageDocumentation
3
- * Type definitions for middleware configuration in Gaunt Sloth Assistant.
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.
@@ -5,6 +5,27 @@ export interface A2AClientConfig {
5
5
  /** URL endpoint for the A2A agent */
6
6
  agentUrl: string;
7
7
  }
8
+ /**
9
+ * A single A2A turn's result with its conversation-continuity handles (BATCH-14). Unlike the
10
+ * text-only {@link A2AClientWrapper.sendMessage}, this carries the `contextId`/`taskId` the server
11
+ * returned so a caller can thread them into follow-up turns (an ADK agent keeps conversational
12
+ * context by `contextId`). Both are optional because a response may be a bare `Message` (which
13
+ * carries them only optionally) or a `Task` (which always carries `contextId`, and `id` as the
14
+ * taskId).
15
+ */
16
+ export interface A2AMessageResult {
17
+ /** The agent's answer text, extracted from the response's text parts. */
18
+ text: string;
19
+ /** The A2A context id to thread into subsequent turns for conversational continuity. */
20
+ contextId?: string;
21
+ /** The A2A task id, when the response was a Task (`Task.id`) or a task-scoped Message. */
22
+ taskId?: string;
23
+ }
24
+ /** Optional conversation-continuity handles to attach to an outgoing A2A message (BATCH-14). */
25
+ export interface A2ASendContext {
26
+ contextId?: string;
27
+ taskId?: string;
28
+ }
8
29
  /**
9
30
  * Wrapper around the A2A SDK client for communicating with external agents.
10
31
  * @experimental
@@ -19,4 +40,29 @@ export declare class A2AClientWrapper {
19
40
  * @returns The agent's response as a string
20
41
  */
21
42
  sendMessage(messageText: string): Promise<string>;
43
+ /**
44
+ * BATCH-14 — send one message and return its text ALONG WITH the A2A `contextId`/`taskId` needed to
45
+ * thread a multi-turn conversation. Reads the real `@a2a-js/sdk` result shapes rather than the
46
+ * loose envelope {@link sendMessage} uses:
47
+ *
48
+ * - A **Message** result (`kind: 'message'`) carries its text in `parts` and `contextId`/`taskId`
49
+ * directly (both optional).
50
+ * - A **Task** result (`kind: 'task'`) — what Google ADK agents commonly return — carries text in
51
+ * `status.message.parts` (falling back to the last artifact's parts), `contextId` (required), and
52
+ * the taskId as `Task.id`.
53
+ *
54
+ * `context.contextId`/`taskId` are attached to the OUTGOING message only when defined, so a
55
+ * first-turn send stays byte-identical to a contextless one.
56
+ *
57
+ * @param messageText - The message to send to the agent.
58
+ * @param context - Optional context/task ids to continue an existing conversation.
59
+ * @returns The agent's text answer plus the context/task ids from its response.
60
+ */
61
+ sendMessageWithContext(messageText: string, context?: A2ASendContext): Promise<A2AMessageResult>;
62
+ /** Normalize a `Message | Task` A2A result into text + continuity handles (BATCH-14). Static +
63
+ * tolerant of missing optional fields so it can be reused and unit-tested directly. */
64
+ private static extractResult;
65
+ /** Concatenate the text of every {@link https://github.com/a2aproject/A2A TextPart} in `parts`
66
+ * (ignoring file/data parts), or `''` when there is no text part. */
67
+ private static extractText;
22
68
  }
@@ -59,5 +59,76 @@ export class A2AClientWrapper {
59
59
  throw error;
60
60
  }
61
61
  }
62
+ /**
63
+ * BATCH-14 — send one message and return its text ALONG WITH the A2A `contextId`/`taskId` needed to
64
+ * thread a multi-turn conversation. Reads the real `@a2a-js/sdk` result shapes rather than the
65
+ * loose envelope {@link sendMessage} uses:
66
+ *
67
+ * - A **Message** result (`kind: 'message'`) carries its text in `parts` and `contextId`/`taskId`
68
+ * directly (both optional).
69
+ * - A **Task** result (`kind: 'task'`) — what Google ADK agents commonly return — carries text in
70
+ * `status.message.parts` (falling back to the last artifact's parts), `contextId` (required), and
71
+ * the taskId as `Task.id`.
72
+ *
73
+ * `context.contextId`/`taskId` are attached to the OUTGOING message only when defined, so a
74
+ * first-turn send stays byte-identical to a contextless one.
75
+ *
76
+ * @param messageText - The message to send to the agent.
77
+ * @param context - Optional context/task ids to continue an existing conversation.
78
+ * @returns The agent's text answer plus the context/task ids from its response.
79
+ */
80
+ async sendMessageWithContext(messageText, context) {
81
+ debugLog(`Sending message (with context) to A2A agent ${this.config.agentId} at ` +
82
+ `${this.config.agentUrl}: ${messageText}` +
83
+ (context?.contextId ? ` [contextId=${context.contextId}]` : ''));
84
+ try {
85
+ const response = await this.client.sendMessage({
86
+ message: {
87
+ kind: 'message',
88
+ messageId: uuidv4(),
89
+ role: 'user',
90
+ parts: [{ kind: 'text', text: messageText }],
91
+ // Attach continuity handles only when present, so a first-turn send is unchanged.
92
+ ...(context?.contextId ? { contextId: context.contextId } : {}),
93
+ ...(context?.taskId ? { taskId: context.taskId } : {}),
94
+ },
95
+ });
96
+ debugLog(`Received response from A2A agent: ${JSON.stringify(response)}`);
97
+ if ('error' in response) {
98
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
99
+ throw new Error(`A2A Error: ${JSON.stringify(response.error)}`);
100
+ }
101
+ const result = response.result;
102
+ return A2AClientWrapper.extractResult(result);
103
+ }
104
+ catch (error) {
105
+ debugLogError('Error sending message (with context) to A2A agent', error);
106
+ throw error;
107
+ }
108
+ }
109
+ /** Normalize a `Message | Task` A2A result into text + continuity handles (BATCH-14). Static +
110
+ * tolerant of missing optional fields so it can be reused and unit-tested directly. */
111
+ static extractResult(result) {
112
+ if (result && result.kind === 'task') {
113
+ const task = result;
114
+ const statusParts = task.status?.message?.parts;
115
+ const artifactParts = task.artifacts?.[task.artifacts.length - 1]?.parts;
116
+ const text = A2AClientWrapper.extractText(statusParts ?? artifactParts) || JSON.stringify(task);
117
+ return { text, contextId: task.contextId, taskId: task.id };
118
+ }
119
+ const message = result;
120
+ const text = A2AClientWrapper.extractText(message?.parts) || JSON.stringify(result);
121
+ return { text, contextId: message?.contextId, taskId: message?.taskId };
122
+ }
123
+ /** Concatenate the text of every {@link https://github.com/a2aproject/A2A TextPart} in `parts`
124
+ * (ignoring file/data parts), or `''` when there is no text part. */
125
+ static extractText(parts) {
126
+ if (!parts || parts.length === 0)
127
+ return '';
128
+ return parts
129
+ .filter((part) => part?.kind === 'text')
130
+ .map((part) => part.text)
131
+ .join('\n');
132
+ }
62
133
  }
63
134
  //# sourceMappingURL=A2AClientWrapper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"A2AClientWrapper.js","sourceRoot":"","sources":["../../../src/modules/a2a/A2AClientWrapper.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAUpC;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IACnB,MAAM,CAAY;IAClB,MAAM,CAAkB;IAEhC,YAAY,MAAuB;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,gEAAgE;QAChE,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,WAAW,CAAC,WAAmB;QACnC,QAAQ,CACN,gCAAgC,IAAI,CAAC,MAAM,CAAC,OAAO,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,WAAW,EAAE,CACjG,CAAC;QACF,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;gBAC7C,OAAO,EAAE;oBACP,IAAI,EAAE,SAAS;oBACf,SAAS,EAAE,SAAS;oBACpB,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;iBAC7C;aACF,CAAC,CAAC;YAEH,QAAQ,CAAC,qCAAqC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAE1E,2BAA2B;YAC3B,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;gBACxB,8DAA8D;gBAC9D,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,SAAS,CAAE,QAAgB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC3E,CAAC;YAED,6BAA6B;YAC7B,6DAA6D;YAC7D,8DAA8D;YAC9D,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAa,CAAC;YAEtC,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9E,0CAA0C;gBAC1C,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9E,CAAC;iBAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACxB,OAAO,eAAe,MAAM,CAAC,KAAK,EAAE,CAAC;YACvC,CAAC;YAED,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,aAAa,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;YAC3D,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"A2AClientWrapper.js","sourceRoot":"","sources":["../../../src/modules/a2a/A2AClientWrapper.ts"],"names":[],"mappings":"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"}
@@ -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
- * (if a later deepagents-acp forwards it, gsloth's mapping applies with no change here).
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,11 +33,22 @@ 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
- * (if a later deepagents-acp forwards it, gsloth's mapping applies with no change here).
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';
44
+ // ACP is structurally deep-only: it calls GthDeepAgent.buildDeepAgentParams and hands the
45
+ // extracted params to the deepagents-acp server. There is no lean analog, so an explicit
46
+ // `agent.backend: 'lean'` cannot be honored here — reject it loudly rather than silently
47
+ // running deep despite the request (B5 selector, kept honest at the ACP entry).
48
+ if (config.agent?.backend === 'lean') {
49
+ throw new Error("agent.backend: 'lean' is not supported by the ACP server — ACP relies on the deep " +
50
+ '(deepagents) backend. Remove the lean setting, or use the AG-UI/api server for a lean agent.');
51
+ }
41
52
  const agent = new GthDeepAgent(acpStatusUpdate, createResolvers());
42
53
  const params = await agent.buildDeepAgentParams(command, config);
43
54
  // gsloth's composed system prompt (backstory + guidelines + per-command mode prompt + system
@@ -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;;;;;;;;;;GAUG;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
+ {"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,OAAO,GAA0B,EAAE;IAEnC,MAAM,OAAO,GAAe,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC;IAEtD,0FAA0F;IAC1F,yFAAyF;IACzF,yFAAyF;IACzF,gFAAgF;IAChF,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CACb,oFAAoF;YAClF,8FAA8F,CACjG,CAAC;IACJ,CAAC;IAED,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"}