@testany/hephos 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +8 -0
- package/README.md +79 -0
- package/out/LocalExecutionEnvironment.d.ts +23 -0
- package/out/LocalExecutionEnvironment.d.ts.map +1 -0
- package/out/LocalExecutionEnvironment.js +124 -0
- package/out/LocalExecutionEnvironment.js.map +1 -0
- package/out/adapters/AdapterFactory.d.ts +55 -0
- package/out/adapters/AdapterFactory.d.ts.map +1 -0
- package/out/adapters/AdapterFactory.js +117 -0
- package/out/adapters/AdapterFactory.js.map +1 -0
- package/out/adapters/ClaudeCodeAdapter.d.ts +28 -0
- package/out/adapters/ClaudeCodeAdapter.d.ts.map +1 -0
- package/out/adapters/ClaudeCodeAdapter.js +95 -0
- package/out/adapters/ClaudeCodeAdapter.js.map +1 -0
- package/out/adapters/GenericShellAdapter.d.ts +51 -0
- package/out/adapters/GenericShellAdapter.d.ts.map +1 -0
- package/out/adapters/GenericShellAdapter.js +162 -0
- package/out/adapters/GenericShellAdapter.js.map +1 -0
- package/out/adapters/OpenAICodexAdapter.d.ts +36 -0
- package/out/adapters/OpenAICodexAdapter.d.ts.map +1 -0
- package/out/adapters/OpenAICodexAdapter.js +155 -0
- package/out/adapters/OpenAICodexAdapter.js.map +1 -0
- package/out/adapters/index.d.ts +12 -0
- package/out/adapters/index.d.ts.map +1 -0
- package/out/adapters/index.js +12 -0
- package/out/adapters/index.js.map +1 -0
- package/out/cli-layer-index.d.ts +14 -0
- package/out/cli-layer-index.d.ts.map +1 -0
- package/out/cli-layer-index.js +15 -0
- package/out/cli-layer-index.js.map +1 -0
- package/out/cli.d.ts +8 -0
- package/out/cli.d.ts.map +1 -0
- package/out/cli.js +297 -0
- package/out/cli.js.map +1 -0
- package/out/commands/AgentsCommand.d.ts +47 -0
- package/out/commands/AgentsCommand.d.ts.map +1 -0
- package/out/commands/AgentsCommand.js +487 -0
- package/out/commands/AgentsCommand.js.map +1 -0
- package/out/config/ConfigAdapter.d.ts +58 -0
- package/out/config/ConfigAdapter.d.ts.map +1 -0
- package/out/config/ConfigAdapter.js +95 -0
- package/out/config/ConfigAdapter.js.map +1 -0
- package/out/config/UIPreferences.d.ts +24 -0
- package/out/config/UIPreferences.d.ts.map +1 -0
- package/out/config/UIPreferences.js +18 -0
- package/out/config/UIPreferences.js.map +1 -0
- package/out/config/index.d.ts +9 -0
- package/out/config/index.d.ts.map +1 -0
- package/out/config/index.js +9 -0
- package/out/config/index.js.map +1 -0
- package/out/outputs/ConsoleLogger.d.ts +30 -0
- package/out/outputs/ConsoleLogger.d.ts.map +1 -0
- package/out/outputs/ConsoleLogger.js +54 -0
- package/out/outputs/ConsoleLogger.js.map +1 -0
- package/out/outputs/ConsoleOutput.d.ts +30 -0
- package/out/outputs/ConsoleOutput.d.ts.map +1 -0
- package/out/outputs/ConsoleOutput.js +49 -0
- package/out/outputs/ConsoleOutput.js.map +1 -0
- package/out/outputs/IOutput.d.ts +38 -0
- package/out/outputs/IOutput.d.ts.map +1 -0
- package/out/outputs/IOutput.js +13 -0
- package/out/outputs/IOutput.js.map +1 -0
- package/out/outputs/InkOutput.d.ts +24 -0
- package/out/outputs/InkOutput.d.ts.map +1 -0
- package/out/outputs/InkOutput.js +38 -0
- package/out/outputs/InkOutput.js.map +1 -0
- package/out/repl/ReplModeInk.d.ts +8 -0
- package/out/repl/ReplModeInk.d.ts.map +1 -0
- package/out/repl/ReplModeInk.js +1486 -0
- package/out/repl/ReplModeInk.js.map +1 -0
- package/out/repl/components/AgentsMenu.d.ts +7 -0
- package/out/repl/components/AgentsMenu.d.ts.map +1 -0
- package/out/repl/components/AgentsMenu.js +565 -0
- package/out/repl/components/AgentsMenu.js.map +1 -0
- package/out/repl/components/LoadingIndicator.d.ts +5 -0
- package/out/repl/components/LoadingIndicator.d.ts.map +1 -0
- package/out/repl/components/LoadingIndicator.js +14 -0
- package/out/repl/components/LoadingIndicator.js.map +1 -0
- package/out/repl/components/QueueDisplay.d.ts +18 -0
- package/out/repl/components/QueueDisplay.d.ts.map +1 -0
- package/out/repl/components/QueueDisplay.js +16 -0
- package/out/repl/components/QueueDisplay.js.map +1 -0
- package/out/repl/components/RestorePrompt.d.ts +25 -0
- package/out/repl/components/RestorePrompt.d.ts.map +1 -0
- package/out/repl/components/RestorePrompt.js +32 -0
- package/out/repl/components/RestorePrompt.js.map +1 -0
- package/out/repl/components/StreamingDisplay.d.ts +5 -0
- package/out/repl/components/StreamingDisplay.d.ts.map +1 -0
- package/out/repl/components/StreamingDisplay.js +27 -0
- package/out/repl/components/StreamingDisplay.js.map +1 -0
- package/out/repl/components/ThinkingIndicator.d.ts +19 -0
- package/out/repl/components/ThinkingIndicator.d.ts.map +1 -0
- package/out/repl/components/ThinkingIndicator.js +35 -0
- package/out/repl/components/ThinkingIndicator.js.map +1 -0
- package/out/repl/wizard/wizardStep1Reducer.d.ts +30 -0
- package/out/repl/wizard/wizardStep1Reducer.d.ts.map +1 -0
- package/out/repl/wizard/wizardStep1Reducer.js +189 -0
- package/out/repl/wizard/wizardStep1Reducer.js.map +1 -0
- package/package.json +62 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
UNLICENSED
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 TestAny.io. All rights reserved.
|
|
4
|
+
|
|
5
|
+
This software is proprietary and confidential. Unauthorized copying, distribution,
|
|
6
|
+
modification, or use of this software, via any medium, is strictly prohibited.
|
|
7
|
+
|
|
8
|
+
For licensing inquiries, contact: support@testany.io
|
package/README.md
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# @testany/agent-chatter
|
|
2
|
+
|
|
3
|
+
Multi-agent conversation orchestration CLI for AI assistants.
|
|
4
|
+
|
|
5
|
+
## License
|
|
6
|
+
|
|
7
|
+
**UNLICENSED** - Proprietary software. All rights reserved.
|
|
8
|
+
|
|
9
|
+
This software is proprietary and confidential. Unauthorized copying, distribution, modification, or use of this software is strictly prohibited.
|
|
10
|
+
|
|
11
|
+
For licensing inquiries: support@testany.io
|
|
12
|
+
|
|
13
|
+
## Installation
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install -g @testany/agent-chatter
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Quick Start
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
# Check installed AI CLI tools
|
|
23
|
+
agent-chatter status
|
|
24
|
+
|
|
25
|
+
# Manage registered agents
|
|
26
|
+
agent-chatter agents list
|
|
27
|
+
agent-chatter agents scan
|
|
28
|
+
agent-chatter agents verify
|
|
29
|
+
|
|
30
|
+
# Start interactive REPL
|
|
31
|
+
agent-chatter
|
|
32
|
+
|
|
33
|
+
# Generate example configuration
|
|
34
|
+
agent-chatter config-example
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Features
|
|
38
|
+
|
|
39
|
+
- Multi-agent conversation orchestration
|
|
40
|
+
- Support for Claude Code, OpenAI Codex, Google Gemini CLI
|
|
41
|
+
- Interactive REPL with Ink-based UI
|
|
42
|
+
- Team configuration and management
|
|
43
|
+
- Session persistence and restoration
|
|
44
|
+
|
|
45
|
+
## Debug Mode
|
|
46
|
+
|
|
47
|
+
Enable debug logging to troubleshoot issues:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
# Using CLI flag
|
|
51
|
+
agent-chatter --debug
|
|
52
|
+
|
|
53
|
+
# Using environment variable
|
|
54
|
+
AGENT_CHATTER_DEBUG=1 agent-chatter
|
|
55
|
+
|
|
56
|
+
# Redirect debug logs to file (debug goes to stderr)
|
|
57
|
+
agent-chatter --debug 2>debug.log
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Debug logs show Core service activities including:
|
|
61
|
+
- Agent verification process
|
|
62
|
+
- Message routing decisions
|
|
63
|
+
- Process spawning details
|
|
64
|
+
|
|
65
|
+
## Requirements
|
|
66
|
+
|
|
67
|
+
- Node.js >= 20.0.0
|
|
68
|
+
- At least one supported AI CLI installed:
|
|
69
|
+
- Claude Code (`claude`)
|
|
70
|
+
- OpenAI Codex (`codex`)
|
|
71
|
+
- Google Gemini CLI (`gemini`)
|
|
72
|
+
|
|
73
|
+
## Related Packages
|
|
74
|
+
|
|
75
|
+
- `@testany/agent-chatter-core` - Core library (MPL-2.0 OR Apache-2.0)
|
|
76
|
+
|
|
77
|
+
## Support
|
|
78
|
+
|
|
79
|
+
For support and licensing: support@testany.io
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LocalExecutionEnvironment - Local process execution implementation
|
|
3
|
+
*
|
|
4
|
+
* @file src/infrastructure/LocalExecutionEnvironment.ts
|
|
5
|
+
*
|
|
6
|
+
* Uses Node.js child_process module to spawn Agent processes locally.
|
|
7
|
+
* Implements IExecutionEnvironment interface for Core abstraction.
|
|
8
|
+
*
|
|
9
|
+
* NOTE: In future CLI/Core split, this will move to CLI package.
|
|
10
|
+
*/
|
|
11
|
+
import type { IExecutionEnvironment, IProcess, IPty, SpawnOptions, PtyOptions } from '@testany/agent-chatter-core';
|
|
12
|
+
/**
|
|
13
|
+
* Local execution environment implementation
|
|
14
|
+
*
|
|
15
|
+
* Uses Node.js child_process module to spawn Agent processes locally
|
|
16
|
+
*/
|
|
17
|
+
export declare class LocalExecutionEnvironment implements IExecutionEnvironment {
|
|
18
|
+
readonly type: "local";
|
|
19
|
+
spawn(command: string, args: string[], options?: SpawnOptions): IProcess;
|
|
20
|
+
createPty(command: string, args: string[], options?: PtyOptions): IPty | undefined;
|
|
21
|
+
private buildEnv;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=LocalExecutionEnvironment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalExecutionEnvironment.d.ts","sourceRoot":"","sources":["../src/LocalExecutionEnvironment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EACV,qBAAqB,EACrB,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,UAAU,EACX,MAAM,6BAA6B,CAAC;AAKrC;;;;GAIG;AACH,qBAAa,yBAA0B,YAAW,qBAAqB;IACrE,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IAEjC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,YAAiB,GAAG,QAAQ;IAa5E,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,UAAe,GAAG,IAAI,GAAG,SAAS;IAoBtF,OAAO,CAAC,QAAQ;CAIjB"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LocalExecutionEnvironment - Local process execution implementation
|
|
3
|
+
*
|
|
4
|
+
* @file src/infrastructure/LocalExecutionEnvironment.ts
|
|
5
|
+
*
|
|
6
|
+
* Uses Node.js child_process module to spawn Agent processes locally.
|
|
7
|
+
* Implements IExecutionEnvironment interface for Core abstraction.
|
|
8
|
+
*
|
|
9
|
+
* NOTE: In future CLI/Core split, this will move to CLI package.
|
|
10
|
+
*/
|
|
11
|
+
import { spawn } from 'child_process';
|
|
12
|
+
// NOTE: This file has moved from src/infrastructure/ to src/cli/ as part of LLD-04
|
|
13
|
+
// CLI layer provides concrete implementations; Core only depends on interfaces
|
|
14
|
+
/**
|
|
15
|
+
* Local execution environment implementation
|
|
16
|
+
*
|
|
17
|
+
* Uses Node.js child_process module to spawn Agent processes locally
|
|
18
|
+
*/
|
|
19
|
+
export class LocalExecutionEnvironment {
|
|
20
|
+
type = 'local';
|
|
21
|
+
spawn(command, args, options = {}) {
|
|
22
|
+
const nodeOptions = {
|
|
23
|
+
cwd: options.cwd,
|
|
24
|
+
shell: options.shell ?? false,
|
|
25
|
+
env: this.buildEnv(options),
|
|
26
|
+
// 0.2.x 行为:关闭 stdin,避免某些 CLI(如 claude)因等待 stdin 而卡住
|
|
27
|
+
stdio: ['ignore', 'pipe', 'pipe']
|
|
28
|
+
};
|
|
29
|
+
const childProcess = spawn(command, args, nodeOptions);
|
|
30
|
+
return new LocalProcess(childProcess);
|
|
31
|
+
}
|
|
32
|
+
createPty(command, args, options = {}) {
|
|
33
|
+
// PTY support is optional, requires node-pty dependency
|
|
34
|
+
try {
|
|
35
|
+
// Dynamic import of node-pty (if installed)
|
|
36
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
37
|
+
const nodePty = require('node-pty');
|
|
38
|
+
const pty = nodePty.spawn(command, args, {
|
|
39
|
+
name: 'xterm-color',
|
|
40
|
+
cols: options.cols ?? 80,
|
|
41
|
+
rows: options.rows ?? 30,
|
|
42
|
+
cwd: options.cwd,
|
|
43
|
+
env: this.buildEnv(options)
|
|
44
|
+
});
|
|
45
|
+
return new LocalPty(pty);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// node-pty not installed, return undefined
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
buildEnv(options) {
|
|
53
|
+
const baseEnv = options.inheritEnv !== false ? { ...process.env } : {};
|
|
54
|
+
return options.env ? { ...baseEnv, ...options.env } : baseEnv;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Local process wrapper
|
|
59
|
+
*
|
|
60
|
+
* Wraps Node.js ChildProcess to implement IProcess interface
|
|
61
|
+
*/
|
|
62
|
+
class LocalProcess {
|
|
63
|
+
childProcess;
|
|
64
|
+
constructor(childProcess) {
|
|
65
|
+
this.childProcess = childProcess;
|
|
66
|
+
}
|
|
67
|
+
get stdin() {
|
|
68
|
+
return this.childProcess.stdin;
|
|
69
|
+
}
|
|
70
|
+
get stdout() {
|
|
71
|
+
return this.childProcess.stdout;
|
|
72
|
+
}
|
|
73
|
+
get stderr() {
|
|
74
|
+
return this.childProcess.stderr;
|
|
75
|
+
}
|
|
76
|
+
get pid() {
|
|
77
|
+
return this.childProcess.pid;
|
|
78
|
+
}
|
|
79
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
80
|
+
on(event, handler) {
|
|
81
|
+
this.childProcess.on(event, handler);
|
|
82
|
+
return this;
|
|
83
|
+
}
|
|
84
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
85
|
+
once(event, handler) {
|
|
86
|
+
this.childProcess.once(event, handler);
|
|
87
|
+
return this;
|
|
88
|
+
}
|
|
89
|
+
kill(signal) {
|
|
90
|
+
return this.childProcess.kill(signal);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Local PTY wrapper
|
|
95
|
+
*
|
|
96
|
+
* Wraps node-pty IPty to implement IPty interface
|
|
97
|
+
* Note: node-pty is an optional dependency
|
|
98
|
+
*/
|
|
99
|
+
class LocalPty {
|
|
100
|
+
pty;
|
|
101
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
102
|
+
constructor(pty) {
|
|
103
|
+
this.pty = pty;
|
|
104
|
+
}
|
|
105
|
+
get pid() {
|
|
106
|
+
return this.pty.pid;
|
|
107
|
+
}
|
|
108
|
+
write(data) {
|
|
109
|
+
this.pty.write(data);
|
|
110
|
+
}
|
|
111
|
+
onData(handler) {
|
|
112
|
+
this.pty.onData(handler);
|
|
113
|
+
}
|
|
114
|
+
onExit(handler) {
|
|
115
|
+
this.pty.onExit(({ exitCode, signal }) => handler(exitCode, signal));
|
|
116
|
+
}
|
|
117
|
+
resize(cols, rows) {
|
|
118
|
+
this.pty.resize(cols, rows);
|
|
119
|
+
}
|
|
120
|
+
kill(signal) {
|
|
121
|
+
this.pty.kill(signal);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=LocalExecutionEnvironment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalExecutionEnvironment.js","sourceRoot":"","sources":["../src/LocalExecutionEnvironment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AdapterFactory - Factory for creating agent adapters
|
|
3
|
+
*
|
|
4
|
+
* Creates the appropriate adapter based on agent configuration.
|
|
5
|
+
* Implements IAdapterFactory interface for Core abstraction.
|
|
6
|
+
*/
|
|
7
|
+
import type { IAgentAdapter } from '@testany/agent-chatter-core';
|
|
8
|
+
import type { IAdapterFactory, AdapterFactoryFn } from '@testany/agent-chatter-core';
|
|
9
|
+
import type { IExecutionEnvironment } from '@testany/agent-chatter-core';
|
|
10
|
+
import type { AgentConfig } from '@testany/agent-chatter-core';
|
|
11
|
+
/**
|
|
12
|
+
* AdapterFactory implementing IAdapterFactory interface
|
|
13
|
+
*
|
|
14
|
+
* Manages adapter registration and creation with IExecutionEnvironment injection
|
|
15
|
+
*/
|
|
16
|
+
export declare class AdapterFactory implements IAdapterFactory {
|
|
17
|
+
private executionEnv;
|
|
18
|
+
private factories;
|
|
19
|
+
constructor(executionEnv: IExecutionEnvironment);
|
|
20
|
+
/**
|
|
21
|
+
* Register default adapters for known agent types
|
|
22
|
+
*/
|
|
23
|
+
private registerDefaultAdapters;
|
|
24
|
+
/**
|
|
25
|
+
* Register an adapter factory function
|
|
26
|
+
*/
|
|
27
|
+
register(type: string, factory: AdapterFactoryFn): void;
|
|
28
|
+
/**
|
|
29
|
+
* Create an adapter instance by type
|
|
30
|
+
*/
|
|
31
|
+
create(type: string): IAgentAdapter;
|
|
32
|
+
/**
|
|
33
|
+
* Check if an adapter type is registered
|
|
34
|
+
*/
|
|
35
|
+
has(type: string): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Get all registered adapter types
|
|
38
|
+
*/
|
|
39
|
+
getRegisteredTypes(): string[];
|
|
40
|
+
/**
|
|
41
|
+
* Create an adapter based on agent configuration
|
|
42
|
+
*
|
|
43
|
+
* @param config - Agent configuration
|
|
44
|
+
* @returns Appropriate adapter for the agent type
|
|
45
|
+
*/
|
|
46
|
+
createAdapter(config: AgentConfig): IAgentAdapter;
|
|
47
|
+
/**
|
|
48
|
+
* Validate an agent configuration
|
|
49
|
+
*
|
|
50
|
+
* @param config - Agent configuration to validate
|
|
51
|
+
* @returns true if valid and available, false otherwise
|
|
52
|
+
*/
|
|
53
|
+
validateAgentConfig(config: AgentConfig): Promise<boolean>;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=AdapterFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdapterFactory.d.ts","sourceRoot":"","sources":["../../src/adapters/AdapterFactory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACrF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAIzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE/D;;;;GAIG;AACH,qBAAa,cAAe,YAAW,eAAe;IAGxC,OAAO,CAAC,YAAY;IAFhC,OAAO,CAAC,SAAS,CAAuC;gBAEpC,YAAY,EAAE,qBAAqB;IAKvD;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAsB/B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAIvD;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa;IASnC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAI9B;;;;;OAKG;IACH,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,aAAa;IAyBjD;;;;;OAKG;IACG,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;CAQjE"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AdapterFactory - Factory for creating agent adapters
|
|
3
|
+
*
|
|
4
|
+
* Creates the appropriate adapter based on agent configuration.
|
|
5
|
+
* Implements IAdapterFactory interface for Core abstraction.
|
|
6
|
+
*/
|
|
7
|
+
import { ClaudeCodeAdapter } from './ClaudeCodeAdapter.js';
|
|
8
|
+
import { OpenAICodexAdapter } from './OpenAICodexAdapter.js';
|
|
9
|
+
import { GenericShellAdapter } from './GenericShellAdapter.js';
|
|
10
|
+
/**
|
|
11
|
+
* AdapterFactory implementing IAdapterFactory interface
|
|
12
|
+
*
|
|
13
|
+
* Manages adapter registration and creation with IExecutionEnvironment injection
|
|
14
|
+
*/
|
|
15
|
+
export class AdapterFactory {
|
|
16
|
+
executionEnv;
|
|
17
|
+
factories = new Map();
|
|
18
|
+
constructor(executionEnv) {
|
|
19
|
+
this.executionEnv = executionEnv;
|
|
20
|
+
// Register default adapters
|
|
21
|
+
this.registerDefaultAdapters();
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Register default adapters for known agent types
|
|
25
|
+
*/
|
|
26
|
+
registerDefaultAdapters() {
|
|
27
|
+
// Claude Code adapters
|
|
28
|
+
this.register('claude', () => new ClaudeCodeAdapter(this.executionEnv, 'claude'));
|
|
29
|
+
this.register('claude-code', () => new ClaudeCodeAdapter(this.executionEnv, 'claude'));
|
|
30
|
+
// OpenAI Codex adapters
|
|
31
|
+
this.register('codex', () => new OpenAICodexAdapter(this.executionEnv, 'codex'));
|
|
32
|
+
this.register('openai-codex', () => new OpenAICodexAdapter(this.executionEnv, 'codex'));
|
|
33
|
+
// Gemini adapters
|
|
34
|
+
this.register('gemini', () => new GenericShellAdapter(this.executionEnv, {
|
|
35
|
+
agentType: 'google-gemini',
|
|
36
|
+
command: 'gemini',
|
|
37
|
+
defaultArgs: []
|
|
38
|
+
}));
|
|
39
|
+
this.register('google-gemini', () => new GenericShellAdapter(this.executionEnv, {
|
|
40
|
+
agentType: 'google-gemini',
|
|
41
|
+
command: 'gemini',
|
|
42
|
+
defaultArgs: []
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Register an adapter factory function
|
|
47
|
+
*/
|
|
48
|
+
register(type, factory) {
|
|
49
|
+
this.factories.set(type, factory);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Create an adapter instance by type
|
|
53
|
+
*/
|
|
54
|
+
create(type) {
|
|
55
|
+
const factory = this.factories.get(type);
|
|
56
|
+
if (!factory) {
|
|
57
|
+
const available = this.getRegisteredTypes().join(', ') || 'none';
|
|
58
|
+
throw new Error(`Unknown adapter type "${type}". Available types: ${available}`);
|
|
59
|
+
}
|
|
60
|
+
return factory();
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Check if an adapter type is registered
|
|
64
|
+
*/
|
|
65
|
+
has(type) {
|
|
66
|
+
return this.factories.has(type);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Get all registered adapter types
|
|
70
|
+
*/
|
|
71
|
+
getRegisteredTypes() {
|
|
72
|
+
return Array.from(this.factories.keys());
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Create an adapter based on agent configuration
|
|
76
|
+
*
|
|
77
|
+
* @param config - Agent configuration
|
|
78
|
+
* @returns Appropriate adapter for the agent type
|
|
79
|
+
*/
|
|
80
|
+
createAdapter(config) {
|
|
81
|
+
switch (config.type) {
|
|
82
|
+
case 'claude-code':
|
|
83
|
+
return new ClaudeCodeAdapter(this.executionEnv, config.command);
|
|
84
|
+
case 'openai-codex':
|
|
85
|
+
return new OpenAICodexAdapter(this.executionEnv, config.command);
|
|
86
|
+
case 'google-gemini':
|
|
87
|
+
case 'gemini':
|
|
88
|
+
return new GenericShellAdapter(this.executionEnv, {
|
|
89
|
+
agentType: 'google-gemini',
|
|
90
|
+
command: config.command,
|
|
91
|
+
defaultArgs: []
|
|
92
|
+
});
|
|
93
|
+
default:
|
|
94
|
+
return new GenericShellAdapter(this.executionEnv, {
|
|
95
|
+
agentType: config.type,
|
|
96
|
+
command: config.command,
|
|
97
|
+
defaultArgs: []
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Validate an agent configuration
|
|
103
|
+
*
|
|
104
|
+
* @param config - Agent configuration to validate
|
|
105
|
+
* @returns true if valid and available, false otherwise
|
|
106
|
+
*/
|
|
107
|
+
async validateAgentConfig(config) {
|
|
108
|
+
try {
|
|
109
|
+
const adapter = this.createAdapter(config);
|
|
110
|
+
return await adapter.validate();
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=AdapterFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdapterFactory.js","sourceRoot":"","sources":["../../src/adapters/AdapterFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ClaudeCodeAdapter - Adapter for Anthropic's Claude Code CLI
|
|
3
|
+
*
|
|
4
|
+
* Handles spawning and configuration for the 'claude' command
|
|
5
|
+
*/
|
|
6
|
+
import type { IAgentAdapter, AgentSpawnConfig, AgentSpawnResult } from '@testany/agent-chatter-core';
|
|
7
|
+
import type { IExecutionEnvironment } from '@testany/agent-chatter-core';
|
|
8
|
+
export declare class ClaudeCodeAdapter implements IAgentAdapter {
|
|
9
|
+
private executionEnv;
|
|
10
|
+
readonly command: string;
|
|
11
|
+
readonly agentType = "claude-code";
|
|
12
|
+
readonly executionMode: "stateless";
|
|
13
|
+
constructor(executionEnv: IExecutionEnvironment, command?: string);
|
|
14
|
+
/**
|
|
15
|
+
* Get default arguments for Claude Code
|
|
16
|
+
* Uses stream-json format for better output parsing
|
|
17
|
+
*/
|
|
18
|
+
getDefaultArgs(): string[];
|
|
19
|
+
/**
|
|
20
|
+
* Spawn a Claude Code process
|
|
21
|
+
*/
|
|
22
|
+
spawn(config: AgentSpawnConfig): Promise<AgentSpawnResult>;
|
|
23
|
+
/**
|
|
24
|
+
* Validate that Claude Code is available
|
|
25
|
+
*/
|
|
26
|
+
validate(): Promise<boolean>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=ClaudeCodeAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaudeCodeAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/ClaudeCodeAdapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACrG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAIzE,qBAAa,iBAAkB,YAAW,aAAa;IAMnD,OAAO,CAAC,YAAY;aACJ,OAAO,EAAE,MAAM;IANjC,QAAQ,CAAC,SAAS,iBAAiB;IAEnC,QAAQ,CAAC,aAAa,EAAG,WAAW,CAAU;gBAGpC,YAAY,EAAE,qBAAqB,EAC3B,OAAO,GAAE,MAAiB;IAG5C;;;OAGG;IACH,cAAc,IAAI,MAAM,EAAE;IAI1B;;OAEG;IACG,KAAK,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAwDhE;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;CAQnC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ClaudeCodeAdapter - Adapter for Anthropic's Claude Code CLI
|
|
3
|
+
*
|
|
4
|
+
* Handles spawning and configuration for the 'claude' command
|
|
5
|
+
*/
|
|
6
|
+
import { exec } from 'child_process';
|
|
7
|
+
import { promisify } from 'util';
|
|
8
|
+
const execAsync = promisify(exec);
|
|
9
|
+
export class ClaudeCodeAdapter {
|
|
10
|
+
executionEnv;
|
|
11
|
+
command;
|
|
12
|
+
agentType = 'claude-code';
|
|
13
|
+
// Use stateless mode so we can pass prompt via -p and avoid the interactive TUI
|
|
14
|
+
executionMode = 'stateless';
|
|
15
|
+
constructor(executionEnv, command = 'claude') {
|
|
16
|
+
this.executionEnv = executionEnv;
|
|
17
|
+
this.command = command;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Get default arguments for Claude Code
|
|
21
|
+
* Uses stream-json format for better output parsing
|
|
22
|
+
*/
|
|
23
|
+
getDefaultArgs() {
|
|
24
|
+
return ['--output-format=stream-json', '--verbose'];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Spawn a Claude Code process
|
|
28
|
+
*/
|
|
29
|
+
async spawn(config) {
|
|
30
|
+
const args = [...this.getDefaultArgs()];
|
|
31
|
+
// Add system instruction if provided
|
|
32
|
+
if (config.systemInstruction) {
|
|
33
|
+
args.push('--append-system-prompt', config.systemInstruction);
|
|
34
|
+
}
|
|
35
|
+
// Add additional arguments from member config
|
|
36
|
+
if (config.additionalArgs && config.additionalArgs.length > 0) {
|
|
37
|
+
args.push(...config.additionalArgs);
|
|
38
|
+
}
|
|
39
|
+
// Spawn the process using IExecutionEnvironment
|
|
40
|
+
const iProcess = this.executionEnv.spawn(this.command, args, {
|
|
41
|
+
cwd: config.workDir,
|
|
42
|
+
env: config.env,
|
|
43
|
+
inheritEnv: true
|
|
44
|
+
});
|
|
45
|
+
// Return spawn result with cleanup function
|
|
46
|
+
return {
|
|
47
|
+
process: iProcess,
|
|
48
|
+
cleanup: async () => {
|
|
49
|
+
return new Promise((resolve) => {
|
|
50
|
+
// Check if process is still alive by trying to send signal 0
|
|
51
|
+
try {
|
|
52
|
+
if (iProcess.pid !== undefined) {
|
|
53
|
+
process.kill(iProcess.pid, 0);
|
|
54
|
+
// Process is alive, set up exit handler and kill it
|
|
55
|
+
iProcess.on('exit', () => resolve());
|
|
56
|
+
iProcess.kill();
|
|
57
|
+
// Force kill after 5 seconds if still running
|
|
58
|
+
setTimeout(() => {
|
|
59
|
+
try {
|
|
60
|
+
if (iProcess.pid !== undefined) {
|
|
61
|
+
process.kill(iProcess.pid, 0);
|
|
62
|
+
iProcess.kill('SIGKILL');
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// Process already dead
|
|
67
|
+
}
|
|
68
|
+
}, 5000);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
resolve();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// Process already dead
|
|
76
|
+
resolve();
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Validate that Claude Code is available
|
|
84
|
+
*/
|
|
85
|
+
async validate() {
|
|
86
|
+
try {
|
|
87
|
+
await execAsync(`${this.command} --version`, { timeout: 3000 });
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=ClaudeCodeAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaudeCodeAdapter.js","sourceRoot":"","sources":["../../src/adapters/ClaudeCodeAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GenericShellAdapter - Generic adapter for shell scripts and custom commands
|
|
3
|
+
*
|
|
4
|
+
* Stateless adapter that executes commands once per message:
|
|
5
|
+
* - Executes command with prompt as CLI argument
|
|
6
|
+
* - Each message spawns a new process (one-shot execution)
|
|
7
|
+
* - Prepends [SYSTEM] section to messages
|
|
8
|
+
* - Suitable for custom agents, Gemini CLI, or any other CLI tool
|
|
9
|
+
*/
|
|
10
|
+
import type { IAgentAdapter, AgentSpawnConfig, AgentSpawnResult } from '@testany/agent-chatter-core';
|
|
11
|
+
import type { IExecutionEnvironment } from '@testany/agent-chatter-core';
|
|
12
|
+
export interface GenericShellAdapterConfig {
|
|
13
|
+
/**
|
|
14
|
+
* Agent type identifier (e.g., 'google-gemini', 'custom-agent')
|
|
15
|
+
*/
|
|
16
|
+
agentType: string;
|
|
17
|
+
/**
|
|
18
|
+
* Command to execute
|
|
19
|
+
*/
|
|
20
|
+
command: string;
|
|
21
|
+
/**
|
|
22
|
+
* Default arguments to pass to the command
|
|
23
|
+
*/
|
|
24
|
+
defaultArgs?: string[];
|
|
25
|
+
}
|
|
26
|
+
export declare class GenericShellAdapter implements IAgentAdapter {
|
|
27
|
+
private executionEnv;
|
|
28
|
+
readonly agentType: string;
|
|
29
|
+
readonly command: string;
|
|
30
|
+
readonly executionMode: "stateless";
|
|
31
|
+
private readonly defaultArgs;
|
|
32
|
+
constructor(executionEnv: IExecutionEnvironment, config: GenericShellAdapterConfig);
|
|
33
|
+
/**
|
|
34
|
+
* Get default arguments for this adapter
|
|
35
|
+
*/
|
|
36
|
+
getDefaultArgs(): string[];
|
|
37
|
+
/**
|
|
38
|
+
* Spawn a generic shell process with stdout interception
|
|
39
|
+
*/
|
|
40
|
+
spawn(config: AgentSpawnConfig): Promise<AgentSpawnResult>;
|
|
41
|
+
/**
|
|
42
|
+
* Validate that the command exists and is executable
|
|
43
|
+
*/
|
|
44
|
+
validate(): Promise<boolean>;
|
|
45
|
+
/**
|
|
46
|
+
* Execute a one-shot command (stateless mode)
|
|
47
|
+
* Spawns a new process for each message, passes message as CLI argument
|
|
48
|
+
*/
|
|
49
|
+
executeOneShot(message: string, config: AgentSpawnConfig): Promise<string>;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=GenericShellAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GenericShellAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/GenericShellAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACrG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAIzE,MAAM,WAAW,yBAAyB;IACxC;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,qBAAa,mBAAoB,YAAW,aAAa;IAOrD,OAAO,CAAC,YAAY;IANtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAG,WAAW,CAAU;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAW;gBAG7B,YAAY,EAAE,qBAAqB,EAC3C,MAAM,EAAE,yBAAyB;IAOnC;;OAEG;IACH,cAAc,IAAI,MAAM,EAAE;IAI1B;;OAEG;IACG,KAAK,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAkDhE;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IA4BlC;;;OAGG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;CAoDjF"}
|