opengoat 0.1.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 +21 -0
- package/README.md +96 -0
- package/bin/opengoat +33 -0
- package/dist/apps/cli/cli.d.ts +1 -0
- package/dist/apps/cli/cli.js +57 -0
- package/dist/apps/cli/cli.js.map +1 -0
- package/dist/apps/cli/commands/agent-create.command.d.ts +2 -0
- package/dist/apps/cli/commands/agent-create.command.js +22 -0
- package/dist/apps/cli/commands/agent-create.command.js.map +1 -0
- package/dist/apps/cli/commands/agent-list.command.d.ts +2 -0
- package/dist/apps/cli/commands/agent-list.command.js +16 -0
- package/dist/apps/cli/commands/agent-list.command.js.map +1 -0
- package/dist/apps/cli/commands/agent-provider-get.command.d.ts +2 -0
- package/dist/apps/cli/commands/agent-provider-get.command.js +15 -0
- package/dist/apps/cli/commands/agent-provider-get.command.js.map +1 -0
- package/dist/apps/cli/commands/agent-provider-set.command.d.ts +2 -0
- package/dist/apps/cli/commands/agent-provider-set.command.js +16 -0
- package/dist/apps/cli/commands/agent-provider-set.command.js.map +1 -0
- package/dist/apps/cli/commands/agent-run.command.d.ts +2 -0
- package/dist/apps/cli/commands/agent-run.command.js +65 -0
- package/dist/apps/cli/commands/agent-run.command.js.map +1 -0
- package/dist/apps/cli/commands/agent-run.shared.d.ts +9 -0
- package/dist/apps/cli/commands/agent-run.shared.js +76 -0
- package/dist/apps/cli/commands/agent-run.shared.js.map +1 -0
- package/dist/apps/cli/commands/agent.command.d.ts +2 -0
- package/dist/apps/cli/commands/agent.command.js +96 -0
- package/dist/apps/cli/commands/agent.command.js.map +1 -0
- package/dist/apps/cli/commands/init.command.d.ts +2 -0
- package/dist/apps/cli/commands/init.command.js +17 -0
- package/dist/apps/cli/commands/init.command.js.map +1 -0
- package/dist/apps/cli/commands/onboard.command.d.ts +2 -0
- package/dist/apps/cli/commands/onboard.command.js +365 -0
- package/dist/apps/cli/commands/onboard.command.js.map +1 -0
- package/dist/apps/cli/commands/provider-list.command.d.ts +2 -0
- package/dist/apps/cli/commands/provider-list.command.js +16 -0
- package/dist/apps/cli/commands/provider-list.command.js.map +1 -0
- package/dist/apps/cli/framework/command.d.ts +11 -0
- package/dist/apps/cli/framework/command.js +2 -0
- package/dist/apps/cli/framework/command.js.map +1 -0
- package/dist/apps/cli/framework/router.d.ts +8 -0
- package/dist/apps/cli/framework/router.js +51 -0
- package/dist/apps/cli/framework/router.js.map +1 -0
- package/dist/apps/cli/index.d.ts +2 -0
- package/dist/apps/cli/index.js +14 -0
- package/dist/apps/cli/index.js.map +1 -0
- package/dist/core/agents/application/agent.service.d.ts +24 -0
- package/dist/core/agents/application/agent.service.js +139 -0
- package/dist/core/agents/application/agent.service.js.map +1 -0
- package/dist/core/agents/application/workspace-context.service.d.ts +28 -0
- package/dist/core/agents/application/workspace-context.service.js +157 -0
- package/dist/core/agents/application/workspace-context.service.js.map +1 -0
- package/dist/core/agents/domain/workspace-context.d.ts +13 -0
- package/dist/core/agents/domain/workspace-context.js +14 -0
- package/dist/core/agents/domain/workspace-context.js.map +1 -0
- package/dist/core/agents/index.d.ts +3 -0
- package/dist/core/agents/index.js +4 -0
- package/dist/core/agents/index.js.map +1 -0
- package/dist/core/bootstrap/application/bootstrap.service.d.ts +24 -0
- package/dist/core/bootstrap/application/bootstrap.service.js +104 -0
- package/dist/core/bootstrap/application/bootstrap.service.js.map +1 -0
- package/dist/core/bootstrap/index.d.ts +1 -0
- package/dist/core/bootstrap/index.js +2 -0
- package/dist/core/bootstrap/index.js.map +1 -0
- package/dist/core/domain/agent.d.ts +13 -0
- package/dist/core/domain/agent.js +2 -0
- package/dist/core/domain/agent.js.map +1 -0
- package/dist/core/domain/opengoat-paths.d.ts +26 -0
- package/dist/core/domain/opengoat-paths.js +2 -0
- package/dist/core/domain/opengoat-paths.js.map +1 -0
- package/dist/core/opengoat/application/opengoat.service.d.ts +34 -0
- package/dist/core/opengoat/application/opengoat.service.js +89 -0
- package/dist/core/opengoat/application/opengoat.service.js.map +1 -0
- package/dist/core/opengoat/index.d.ts +1 -0
- package/dist/core/opengoat/index.js +2 -0
- package/dist/core/opengoat/index.js.map +1 -0
- package/dist/core/ports/file-system.port.d.ts +7 -0
- package/dist/core/ports/file-system.port.js +2 -0
- package/dist/core/ports/file-system.port.js.map +1 -0
- package/dist/core/ports/path.port.d.ts +3 -0
- package/dist/core/ports/path.port.js +2 -0
- package/dist/core/ports/path.port.js.map +1 -0
- package/dist/core/ports/paths-provider.port.d.ts +4 -0
- package/dist/core/ports/paths-provider.port.js +2 -0
- package/dist/core/ports/paths-provider.port.js.map +1 -0
- package/dist/core/providers/application/provider.service.d.ts +53 -0
- package/dist/core/providers/application/provider.service.js +204 -0
- package/dist/core/providers/application/provider.service.js.map +1 -0
- package/dist/core/providers/base-provider.d.ts +18 -0
- package/dist/core/providers/base-provider.js +38 -0
- package/dist/core/providers/base-provider.js.map +1 -0
- package/dist/core/providers/builtins/claude.provider.d.ts +7 -0
- package/dist/core/providers/builtins/claude.provider.js +34 -0
- package/dist/core/providers/builtins/claude.provider.js.map +1 -0
- package/dist/core/providers/builtins/codex.provider.d.ts +7 -0
- package/dist/core/providers/builtins/codex.provider.js +31 -0
- package/dist/core/providers/builtins/codex.provider.js.map +1 -0
- package/dist/core/providers/builtins/cursor.provider.d.ts +9 -0
- package/dist/core/providers/builtins/cursor.provider.js +44 -0
- package/dist/core/providers/builtins/cursor.provider.js.map +1 -0
- package/dist/core/providers/builtins/openai.provider.d.ts +7 -0
- package/dist/core/providers/builtins/openai.provider.js +143 -0
- package/dist/core/providers/builtins/openai.provider.js.map +1 -0
- package/dist/core/providers/builtins/openclaw.provider.d.ts +7 -0
- package/dist/core/providers/builtins/openclaw.provider.js +38 -0
- package/dist/core/providers/builtins/openclaw.provider.js.map +1 -0
- package/dist/core/providers/builtins/openrouter.provider.d.ts +7 -0
- package/dist/core/providers/builtins/openrouter.provider.js +101 -0
- package/dist/core/providers/builtins/openrouter.provider.js.map +1 -0
- package/dist/core/providers/cli-provider.d.ts +19 -0
- package/dist/core/providers/cli-provider.js +91 -0
- package/dist/core/providers/cli-provider.js.map +1 -0
- package/dist/core/providers/command-executor.d.ts +11 -0
- package/dist/core/providers/command-executor.js +31 -0
- package/dist/core/providers/command-executor.js.map +1 -0
- package/dist/core/providers/errors.d.ts +24 -0
- package/dist/core/providers/errors.js +42 -0
- package/dist/core/providers/errors.js.map +1 -0
- package/dist/core/providers/index.d.ts +16 -0
- package/dist/core/providers/index.js +26 -0
- package/dist/core/providers/index.js.map +1 -0
- package/dist/core/providers/loader.d.ts +2 -0
- package/dist/core/providers/loader.js +42 -0
- package/dist/core/providers/loader.js.map +1 -0
- package/dist/core/providers/provider-module.d.ts +19 -0
- package/dist/core/providers/provider-module.js +2 -0
- package/dist/core/providers/provider-module.js.map +1 -0
- package/dist/core/providers/providers/claude/index.d.ts +4 -0
- package/dist/core/providers/providers/claude/index.js +19 -0
- package/dist/core/providers/providers/claude/index.js.map +1 -0
- package/dist/core/providers/providers/claude/provider.d.ts +7 -0
- package/dist/core/providers/providers/claude/provider.js +34 -0
- package/dist/core/providers/providers/claude/provider.js.map +1 -0
- package/dist/core/providers/providers/codex/index.d.ts +4 -0
- package/dist/core/providers/providers/codex/index.js +19 -0
- package/dist/core/providers/providers/codex/index.js.map +1 -0
- package/dist/core/providers/providers/codex/provider.d.ts +7 -0
- package/dist/core/providers/providers/codex/provider.js +31 -0
- package/dist/core/providers/providers/codex/provider.js.map +1 -0
- package/dist/core/providers/providers/cursor/index.d.ts +4 -0
- package/dist/core/providers/providers/cursor/index.js +19 -0
- package/dist/core/providers/providers/cursor/index.js.map +1 -0
- package/dist/core/providers/providers/cursor/provider.d.ts +9 -0
- package/dist/core/providers/providers/cursor/provider.js +44 -0
- package/dist/core/providers/providers/cursor/provider.js.map +1 -0
- package/dist/core/providers/providers/gemini/index.d.ts +4 -0
- package/dist/core/providers/providers/gemini/index.js +33 -0
- package/dist/core/providers/providers/gemini/index.js.map +1 -0
- package/dist/core/providers/providers/gemini/provider.d.ts +7 -0
- package/dist/core/providers/providers/gemini/provider.js +36 -0
- package/dist/core/providers/providers/gemini/provider.js.map +1 -0
- package/dist/core/providers/providers/grok/index.d.ts +4 -0
- package/dist/core/providers/providers/grok/index.js +41 -0
- package/dist/core/providers/providers/grok/index.js.map +1 -0
- package/dist/core/providers/providers/grok/provider.d.ts +7 -0
- package/dist/core/providers/providers/grok/provider.js +162 -0
- package/dist/core/providers/providers/grok/provider.js.map +1 -0
- package/dist/core/providers/providers/openai/index.d.ts +4 -0
- package/dist/core/providers/providers/openai/index.js +41 -0
- package/dist/core/providers/providers/openai/index.js.map +1 -0
- package/dist/core/providers/providers/openai/provider.d.ts +7 -0
- package/dist/core/providers/providers/openai/provider.js +229 -0
- package/dist/core/providers/providers/openai/provider.js.map +1 -0
- package/dist/core/providers/providers/openclaw/index.d.ts +4 -0
- package/dist/core/providers/providers/openclaw/index.js +19 -0
- package/dist/core/providers/providers/openclaw/index.js.map +1 -0
- package/dist/core/providers/providers/openclaw/provider.d.ts +7 -0
- package/dist/core/providers/providers/openclaw/provider.js +38 -0
- package/dist/core/providers/providers/openclaw/provider.js.map +1 -0
- package/dist/core/providers/providers/openrouter/index.d.ts +4 -0
- package/dist/core/providers/providers/openrouter/index.js +37 -0
- package/dist/core/providers/providers/openrouter/index.js.map +1 -0
- package/dist/core/providers/providers/openrouter/provider.d.ts +7 -0
- package/dist/core/providers/providers/openrouter/provider.js +113 -0
- package/dist/core/providers/providers/openrouter/provider.js.map +1 -0
- package/dist/core/providers/registry.d.ts +13 -0
- package/dist/core/providers/registry.js +36 -0
- package/dist/core/providers/registry.js.map +1 -0
- package/dist/core/providers/types.d.ts +52 -0
- package/dist/core/providers/types.js +2 -0
- package/dist/core/providers/types.js.map +1 -0
- package/dist/core/services/agent.service.d.ts +23 -0
- package/dist/core/services/agent.service.js +117 -0
- package/dist/core/services/agent.service.js.map +1 -0
- package/dist/core/services/bootstrap.service.d.ts +25 -0
- package/dist/core/services/bootstrap.service.js +112 -0
- package/dist/core/services/bootstrap.service.js.map +1 -0
- package/dist/core/services/opengoat.service.d.ts +29 -0
- package/dist/core/services/opengoat.service.js +65 -0
- package/dist/core/services/opengoat.service.js.map +1 -0
- package/dist/core/services/provider.service.d.ts +24 -0
- package/dist/core/services/provider.service.js +79 -0
- package/dist/core/services/provider.service.js.map +1 -0
- package/dist/core/templates/default-templates.d.ts +18 -0
- package/dist/core/templates/default-templates.js +166 -0
- package/dist/core/templates/default-templates.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/platform/node/dotenv.d.ts +6 -0
- package/dist/platform/node/dotenv.js +67 -0
- package/dist/platform/node/dotenv.js.map +1 -0
- package/dist/platform/node/node-file-system.d.ts +8 -0
- package/dist/platform/node/node-file-system.js +41 -0
- package/dist/platform/node/node-file-system.js.map +1 -0
- package/dist/platform/node/node-path.port.d.ts +9 -0
- package/dist/platform/node/node-path.port.js +38 -0
- package/dist/platform/node/node-path.port.js.map +1 -0
- package/package.json +36 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Mariano Pardo
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# OpenGoat
|
|
2
|
+
|
|
3
|
+
OpenGoat is a high-level agent orchestrator foundation with a CLI entrypoint today and a modular runtime design for future server and Electron surfaces.
|
|
4
|
+
|
|
5
|
+
## Architecture
|
|
6
|
+
|
|
7
|
+
The codebase is split into layers to keep product surfaces decoupled from orchestration logic:
|
|
8
|
+
|
|
9
|
+
- `src/core/agents`: agent lifecycle domain (`AgentService`).
|
|
10
|
+
- `src/core/bootstrap`: filesystem bootstrap domain (`BootstrapService`).
|
|
11
|
+
- `src/core/providers`: provider domain (`ProviderService`, registry, implementations).
|
|
12
|
+
- `src/core/opengoat`: orchestration facade used by app surfaces (`OpenGoatService`).
|
|
13
|
+
- `src/core/domain`, `src/core/templates`, `src/core/ports`: shared contracts and rendering helpers.
|
|
14
|
+
- `src/core/providers/providers/<provider-id>`: self-contained provider modules and tests.
|
|
15
|
+
- `src/platform/node`: Node-specific adapters (filesystem and OS path resolution).
|
|
16
|
+
- `src/apps/cli`: CLI command routing and text output only.
|
|
17
|
+
|
|
18
|
+
This keeps the core reusable for a future HTTP server, desktop shell, or other runtime.
|
|
19
|
+
|
|
20
|
+
## Current capabilities
|
|
21
|
+
|
|
22
|
+
- `opengoat init` (or just `opengoat`) bootstraps `~/.opengoat`.
|
|
23
|
+
- Creates default `orchestrator` agent workspace:
|
|
24
|
+
- `~/.opengoat/workspaces/orchestrator/AGENTS.md`
|
|
25
|
+
- Seeds workspace bootstrap files (if missing):
|
|
26
|
+
- `AGENTS.md`, `SOUL.md`, `TOOLS.md`, `IDENTITY.md`, `USER.md`, `HEARTBEAT.md`, `CONTEXT.md`
|
|
27
|
+
- `BOOTSTRAP.md` only for brand-new workspaces (first-run ritual marker)
|
|
28
|
+
- Creates per-agent internal config:
|
|
29
|
+
- `~/.opengoat/agents/orchestrator/`
|
|
30
|
+
- Uses only `.md` and `.json` files for configuration/state artifacts.
|
|
31
|
+
- Supports custom home root with `OPENGOAT_HOME`.
|
|
32
|
+
- CLI automatically loads environment variables from `.env` in the current working directory.
|
|
33
|
+
- `orchestrator` is the immutable default agent for inbound message routing.
|
|
34
|
+
- Every agent has exactly one assigned provider (`~/.opengoat/agents/<agent>/config.json`).
|
|
35
|
+
- On every `agent run`, OpenGoat loads configured workspace bootstrap files, injects them into a generated system prompt with missing-file markers + truncation protection, and runs the provider with the agent workspace as default `cwd`.
|
|
36
|
+
- Built-in providers: `codex`, `claude`, `cursor`, `gemini`, `grok`, `openclaw`, `openai`, `openrouter`.
|
|
37
|
+
- Each provider lives in its own folder with code + tests.
|
|
38
|
+
- New providers are auto-discovered from provider folders (no central registration edits).
|
|
39
|
+
- `onboard` uses provider-declared onboarding metadata to collect required credentials/settings.
|
|
40
|
+
- Provider settings persist at `~/.opengoat/providers/<provider-id>/config.json` and are auto-loaded at runtime.
|
|
41
|
+
|
|
42
|
+
## Commands
|
|
43
|
+
|
|
44
|
+
- `./bin/opengoat` or `./bin/opengoat init`
|
|
45
|
+
- `./bin/opengoat onboard`
|
|
46
|
+
- `./bin/opengoat agent --message "<text>"` (defaults to `orchestrator`)
|
|
47
|
+
- `./bin/opengoat agent <agent-id> --message "<text>"`
|
|
48
|
+
- `./bin/opengoat agent create <name>`
|
|
49
|
+
- `./bin/opengoat agent list`
|
|
50
|
+
- `./bin/opengoat provider list`
|
|
51
|
+
- `./bin/opengoat agent provider get <agent-id>`
|
|
52
|
+
- `./bin/opengoat agent provider set <agent-id> <provider-id>`
|
|
53
|
+
- `./bin/opengoat agent run <agent-id> --message <text> [--model <model>] [-- <provider-args>]`
|
|
54
|
+
|
|
55
|
+
## OpenAI Provider
|
|
56
|
+
|
|
57
|
+
`openai` is an API provider (no CLI required).
|
|
58
|
+
|
|
59
|
+
- Required auth: `OPENAI_API_KEY`
|
|
60
|
+
- Default endpoint: `https://api.openai.com/v1/responses`
|
|
61
|
+
- Optional model override: `OPENAI_MODEL`
|
|
62
|
+
- OpenAI-compatible base URL support:
|
|
63
|
+
- `OPENAI_BASE_URL` (for example `https://your-gateway.example/v1`)
|
|
64
|
+
- `OPENAI_ENDPOINT_PATH` (for example `/responses` or `/chat/completions`)
|
|
65
|
+
- `OPENAI_ENDPOINT` can override the full URL directly.
|
|
66
|
+
|
|
67
|
+
## Gemini Provider
|
|
68
|
+
|
|
69
|
+
`gemini` is a CLI provider.
|
|
70
|
+
|
|
71
|
+
- Command: `gemini`
|
|
72
|
+
- Non-interactive execution: `--prompt <text>`
|
|
73
|
+
- Optional command override: `GEMINI_CMD`
|
|
74
|
+
- Optional default model: `GEMINI_MODEL`
|
|
75
|
+
|
|
76
|
+
## Grok Provider
|
|
77
|
+
|
|
78
|
+
`grok` is an API provider (no CLI required).
|
|
79
|
+
|
|
80
|
+
- Required auth: `XAI_API_KEY`
|
|
81
|
+
- Default endpoint: `https://api.x.ai/v1/responses`
|
|
82
|
+
- Optional model override: `GROK_MODEL`
|
|
83
|
+
- Endpoint controls:
|
|
84
|
+
- `GROK_BASE_URL`
|
|
85
|
+
- `GROK_ENDPOINT_PATH`
|
|
86
|
+
- `GROK_ENDPOINT`
|
|
87
|
+
- `GROK_API_STYLE` (`responses` or `chat`)
|
|
88
|
+
|
|
89
|
+
## Development
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
npm install
|
|
93
|
+
npm run build
|
|
94
|
+
npm test
|
|
95
|
+
npm run start -- init
|
|
96
|
+
```
|
package/bin/opengoat
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { spawn } from "node:child_process";
|
|
3
|
+
import { existsSync } from "node:fs";
|
|
4
|
+
import { dirname, resolve } from "node:path";
|
|
5
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
6
|
+
|
|
7
|
+
const binDir = dirname(fileURLToPath(import.meta.url));
|
|
8
|
+
const projectRoot = resolve(binDir, "..");
|
|
9
|
+
const distEntrypoint = resolve(projectRoot, "dist/apps/cli/index.js");
|
|
10
|
+
const srcEntrypoint = resolve(projectRoot, "src/apps/cli/index.ts");
|
|
11
|
+
|
|
12
|
+
if (existsSync(distEntrypoint)) {
|
|
13
|
+
await import(pathToFileURL(distEntrypoint).href);
|
|
14
|
+
} else {
|
|
15
|
+
const child = spawn(
|
|
16
|
+
process.execPath,
|
|
17
|
+
["--import", "tsx", srcEntrypoint, ...process.argv.slice(2)],
|
|
18
|
+
{
|
|
19
|
+
stdio: "inherit",
|
|
20
|
+
env: process.env,
|
|
21
|
+
cwd: projectRoot
|
|
22
|
+
}
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
child.on("exit", (code, signal) => {
|
|
26
|
+
if (signal) {
|
|
27
|
+
process.kill(process.pid, signal);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
process.exit(code ?? 1);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function runCli(argv: string[]): Promise<number>;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { NodeFileSystem } from "../../platform/node/node-file-system.js";
|
|
2
|
+
import { NodeOpenGoatPathsProvider, NodePathPort } from "../../platform/node/node-path.port.js";
|
|
3
|
+
import { OpenGoatService } from "../../core/opengoat/index.js";
|
|
4
|
+
import { agentCommand } from "./commands/agent.command.js";
|
|
5
|
+
import { agentCreateCommand } from "./commands/agent-create.command.js";
|
|
6
|
+
import { agentListCommand } from "./commands/agent-list.command.js";
|
|
7
|
+
import { agentProviderGetCommand } from "./commands/agent-provider-get.command.js";
|
|
8
|
+
import { agentProviderSetCommand } from "./commands/agent-provider-set.command.js";
|
|
9
|
+
import { agentRunCommand } from "./commands/agent-run.command.js";
|
|
10
|
+
import { initCommand } from "./commands/init.command.js";
|
|
11
|
+
import { onboardCommand } from "./commands/onboard.command.js";
|
|
12
|
+
import { providerListCommand } from "./commands/provider-list.command.js";
|
|
13
|
+
import { CommandRouter } from "./framework/router.js";
|
|
14
|
+
export async function runCli(argv) {
|
|
15
|
+
const service = createLazyService(() => {
|
|
16
|
+
return new OpenGoatService({
|
|
17
|
+
fileSystem: new NodeFileSystem(),
|
|
18
|
+
pathPort: new NodePathPort(),
|
|
19
|
+
pathsProvider: new NodeOpenGoatPathsProvider()
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
const router = new CommandRouter([
|
|
23
|
+
initCommand,
|
|
24
|
+
onboardCommand,
|
|
25
|
+
agentCommand,
|
|
26
|
+
agentCreateCommand,
|
|
27
|
+
agentListCommand,
|
|
28
|
+
providerListCommand,
|
|
29
|
+
agentProviderGetCommand,
|
|
30
|
+
agentProviderSetCommand,
|
|
31
|
+
agentRunCommand
|
|
32
|
+
], {
|
|
33
|
+
service,
|
|
34
|
+
stdout: process.stdout,
|
|
35
|
+
stderr: process.stderr
|
|
36
|
+
});
|
|
37
|
+
return router.dispatch(argv);
|
|
38
|
+
}
|
|
39
|
+
function createLazyService(factory) {
|
|
40
|
+
let instance;
|
|
41
|
+
const ensureInstance = () => {
|
|
42
|
+
if (!instance) {
|
|
43
|
+
instance = factory();
|
|
44
|
+
}
|
|
45
|
+
return instance;
|
|
46
|
+
};
|
|
47
|
+
return new Proxy({}, {
|
|
48
|
+
get(_target, property, receiver) {
|
|
49
|
+
const value = Reflect.get(ensureInstance(), property, receiver);
|
|
50
|
+
if (typeof value === "function") {
|
|
51
|
+
return value.bind(ensureInstance());
|
|
52
|
+
}
|
|
53
|
+
return value;
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/apps/cli/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAChG,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc;IACzC,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,EAAE;QACrC,OAAO,IAAI,eAAe,CAAC;YACzB,UAAU,EAAE,IAAI,cAAc,EAAE;YAChC,QAAQ,EAAE,IAAI,YAAY,EAAE;YAC5B,aAAa,EAAE,IAAI,yBAAyB,EAAE;SAC/C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,aAAa,CAC9B;QACE,WAAW;QACX,cAAc;QACd,YAAY;QACZ,kBAAkB;QAClB,gBAAgB;QAChB,mBAAmB;QACnB,uBAAuB;QACvB,uBAAuB;QACvB,eAAe;KAChB,EACD;QACE,OAAO;QACP,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CACF,CAAC;IAEF,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,iBAAiB,CAAC,OAA8B;IACvD,IAAI,QAAqC,CAAC;IAE1C,MAAM,cAAc,GAAG,GAAoB,EAAE;QAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,OAAO,EAAE,CAAC;QACvB,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,IAAI,KAAK,CAAC,EAAqB,EAAE;QACtC,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ;YAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC1E,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;gBAChC,OAAO,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;YACtC,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export const agentCreateCommand = {
|
|
2
|
+
path: ["agent", "create"],
|
|
3
|
+
description: "Create an agent workspace and internal config (Markdown + JSON).",
|
|
4
|
+
async run(args, context) {
|
|
5
|
+
if (args.includes("--set-default")) {
|
|
6
|
+
context.stderr.write("`--set-default` is not supported. Orchestrator is always the default agent.\n");
|
|
7
|
+
return 1;
|
|
8
|
+
}
|
|
9
|
+
const name = args.join(" ").trim();
|
|
10
|
+
if (!name) {
|
|
11
|
+
context.stderr.write("Usage: opengoat agent create <name>\n");
|
|
12
|
+
return 1;
|
|
13
|
+
}
|
|
14
|
+
const result = await context.service.createAgent(name);
|
|
15
|
+
context.stdout.write(`Agent created: ${result.agent.displayName} (${result.agent.id})\n`);
|
|
16
|
+
context.stdout.write(`Workspace: ${result.agent.workspaceDir}\n`);
|
|
17
|
+
context.stdout.write(`Internal config: ${result.agent.internalConfigDir}\n`);
|
|
18
|
+
context.stdout.write(`Created: ${result.createdPaths.length} path(s)\n`);
|
|
19
|
+
return 0;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=agent-create.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-create.command.js","sourceRoot":"","sources":["../../../../src/apps/cli/commands/agent-create.command.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAe;IAC5C,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;IACzB,WAAW,EAAE,kEAAkE;IAC/E,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO;QACrB,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+EAA+E,CAAC,CAAC;YACtG,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAEnC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC9D,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEvD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,MAAM,CAAC,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;QAC1F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;QAClE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,MAAM,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,CAAC;QAC7E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,MAAM,CAAC,YAAY,CAAC,MAAM,YAAY,CAAC,CAAC;QAEzE,OAAO,CAAC,CAAC;IACX,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export const agentListCommand = {
|
|
2
|
+
path: ["agent", "list"],
|
|
3
|
+
description: "List known agents from ~/.opengoat/workspaces.",
|
|
4
|
+
async run(_args, context) {
|
|
5
|
+
const agents = await context.service.listAgents();
|
|
6
|
+
if (agents.length === 0) {
|
|
7
|
+
context.stdout.write("No agents found. Run: opengoat init\n");
|
|
8
|
+
return 0;
|
|
9
|
+
}
|
|
10
|
+
for (const agent of agents) {
|
|
11
|
+
context.stdout.write(`${agent.id}\t${agent.displayName}\n`);
|
|
12
|
+
}
|
|
13
|
+
return 0;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=agent-list.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-list.command.js","sourceRoot":"","sources":["../../../../src/apps/cli/commands/agent-list.command.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAe;IAC1C,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,gDAAgD;IAC7D,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO;QACtB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAElD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC9D,OAAO,CAAC,CAAC;QACX,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO,CAAC,CAAC;IACX,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export const agentProviderGetCommand = {
|
|
2
|
+
path: ["agent", "provider", "get"],
|
|
3
|
+
description: "Show which provider is assigned to an agent.",
|
|
4
|
+
async run(args, context) {
|
|
5
|
+
const agentId = args[0]?.trim();
|
|
6
|
+
if (!agentId) {
|
|
7
|
+
context.stderr.write("Usage: opengoat agent provider get <agent-id>\n");
|
|
8
|
+
return 1;
|
|
9
|
+
}
|
|
10
|
+
const binding = await context.service.getAgentProvider(agentId);
|
|
11
|
+
context.stdout.write(`${binding.agentId}\t${binding.providerId}\n`);
|
|
12
|
+
return 0;
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=agent-provider-get.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-provider-get.command.js","sourceRoot":"","sources":["../../../../src/apps/cli/commands/agent-provider-get.command.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,uBAAuB,GAAe;IACjD,IAAI,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC;IAClC,WAAW,EAAE,8CAA8C;IAC3D,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACxE,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAChE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;QACpE,OAAO,CAAC,CAAC;IACX,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export const agentProviderSetCommand = {
|
|
2
|
+
path: ["agent", "provider", "set"],
|
|
3
|
+
description: "Assign one provider to an agent.",
|
|
4
|
+
async run(args, context) {
|
|
5
|
+
const agentId = args[0]?.trim();
|
|
6
|
+
const providerId = args[1]?.trim();
|
|
7
|
+
if (!agentId || !providerId) {
|
|
8
|
+
context.stderr.write("Usage: opengoat agent provider set <agent-id> <provider-id>\n");
|
|
9
|
+
return 1;
|
|
10
|
+
}
|
|
11
|
+
const binding = await context.service.setAgentProvider(agentId, providerId);
|
|
12
|
+
context.stdout.write(`Provider for ${binding.agentId} set to ${binding.providerId}\n`);
|
|
13
|
+
return 0;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=agent-provider-set.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-provider-set.command.js","sourceRoot":"","sources":["../../../../src/apps/cli/commands/agent-provider-set.command.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,uBAAuB,GAAe;IACjD,IAAI,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC;IAClC,WAAW,EAAE,kCAAkC;IAC/C,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QAEnC,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;YAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;YACtF,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC5E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,OAAO,CAAC,OAAO,WAAW,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;QACvF,OAAO,CAAC,CAAC;IACX,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { executeAgentRun } from "./agent-run.shared.js";
|
|
2
|
+
export const agentRunCommand = {
|
|
3
|
+
path: ["agent", "run"],
|
|
4
|
+
description: "Run a message through an agent's configured provider.",
|
|
5
|
+
async run(args, context) {
|
|
6
|
+
const parsed = parseRunArgs(args);
|
|
7
|
+
if (!parsed.ok) {
|
|
8
|
+
context.stderr.write(`${parsed.error}\n`);
|
|
9
|
+
context.stderr.write("Usage: opengoat agent run <agent-id> --message <text> [--model <model>] [--no-stream] [-- <provider-args>]\n");
|
|
10
|
+
return 1;
|
|
11
|
+
}
|
|
12
|
+
return executeAgentRun(parsed, context);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
function parseRunArgs(args) {
|
|
16
|
+
const agentId = args[0]?.trim();
|
|
17
|
+
if (!agentId) {
|
|
18
|
+
return { ok: false, error: "Missing <agent-id>." };
|
|
19
|
+
}
|
|
20
|
+
const flagArgs = args.slice(1);
|
|
21
|
+
const passthroughSeparator = flagArgs.indexOf("--");
|
|
22
|
+
const known = passthroughSeparator >= 0 ? flagArgs.slice(0, passthroughSeparator) : flagArgs;
|
|
23
|
+
const passthroughArgs = passthroughSeparator >= 0 ? flagArgs.slice(passthroughSeparator + 1) : [];
|
|
24
|
+
let message;
|
|
25
|
+
let model;
|
|
26
|
+
let stream = true;
|
|
27
|
+
for (let index = 0; index < known.length; index += 1) {
|
|
28
|
+
const token = known[index];
|
|
29
|
+
if (token === "--no-stream") {
|
|
30
|
+
stream = false;
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
if (token === "--message") {
|
|
34
|
+
const value = known[index + 1];
|
|
35
|
+
if (!value) {
|
|
36
|
+
return { ok: false, error: "Missing value for --message." };
|
|
37
|
+
}
|
|
38
|
+
message = value;
|
|
39
|
+
index += 1;
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
if (token === "--model") {
|
|
43
|
+
const value = known[index + 1];
|
|
44
|
+
if (!value) {
|
|
45
|
+
return { ok: false, error: "Missing value for --model." };
|
|
46
|
+
}
|
|
47
|
+
model = value;
|
|
48
|
+
index += 1;
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
return { ok: false, error: `Unknown option: ${token}` };
|
|
52
|
+
}
|
|
53
|
+
if (!message?.trim()) {
|
|
54
|
+
return { ok: false, error: "--message is required." };
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
ok: true,
|
|
58
|
+
agentId,
|
|
59
|
+
message: message.trim(),
|
|
60
|
+
model,
|
|
61
|
+
passthroughArgs,
|
|
62
|
+
stream
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=agent-run.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-run.command.js","sourceRoot":"","sources":["../../../../src/apps/cli/commands/agent-run.command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,CAAC,MAAM,eAAe,GAAe;IACzC,IAAI,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC;IACtB,WAAW,EAAE,uDAAuD;IACpE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO;QACrB,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;YAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,8GAA8G,CAC/G,CAAC;YACF,OAAO,CAAC,CAAC;QACX,CAAC;QAED,OAAO,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;CACF,CAAC;AAgBF,SAAS,YAAY,CAAC,IAAc;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IAChC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC;IACrD,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,oBAAoB,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,oBAAoB,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC7F,MAAM,eAAe,GAAG,oBAAoB,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,oBAAoB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAElG,IAAI,OAA2B,CAAC;IAChC,IAAI,KAAyB,CAAC;IAC9B,IAAI,MAAM,GAAG,IAAI,CAAC;IAElB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAE3B,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;YAC5B,MAAM,GAAG,KAAK,CAAC;YACf,SAAS;QACX,CAAC;QAED,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC;YAC9D,CAAC;YACD,OAAO,GAAG,KAAK,CAAC;YAChB,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC;YAC5D,CAAC;YACD,KAAK,GAAG,KAAK,CAAC;YACd,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,KAAK,EAAE,EAAE,CAAC;IAC1D,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;QACrB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC;IACxD,CAAC;IAED,OAAO;QACL,EAAE,EAAE,IAAI;QACR,OAAO;QACP,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE;QACvB,KAAK;QACL,eAAe;QACf,MAAM;KACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CliContext } from "../framework/command.js";
|
|
2
|
+
export interface AgentRunRequest {
|
|
3
|
+
agentId: string;
|
|
4
|
+
message: string;
|
|
5
|
+
model?: string;
|
|
6
|
+
passthroughArgs: string[];
|
|
7
|
+
stream: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function executeAgentRun(request: AgentRunRequest, context: CliContext): Promise<number>;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
export async function executeAgentRun(request, context) {
|
|
2
|
+
const stdoutBuffer = [];
|
|
3
|
+
const stderrBuffer = [];
|
|
4
|
+
let sawStdoutChunk = false;
|
|
5
|
+
let sawStderrChunk = false;
|
|
6
|
+
let result;
|
|
7
|
+
try {
|
|
8
|
+
result = await context.service.runAgent(request.agentId, {
|
|
9
|
+
message: request.message,
|
|
10
|
+
model: request.model,
|
|
11
|
+
passthroughArgs: request.passthroughArgs,
|
|
12
|
+
env: process.env,
|
|
13
|
+
onStdout: request.stream
|
|
14
|
+
? (chunk) => {
|
|
15
|
+
if (chunk) {
|
|
16
|
+
sawStdoutChunk = true;
|
|
17
|
+
}
|
|
18
|
+
context.stdout.write(chunk);
|
|
19
|
+
}
|
|
20
|
+
: (chunk) => {
|
|
21
|
+
if (chunk) {
|
|
22
|
+
sawStdoutChunk = true;
|
|
23
|
+
}
|
|
24
|
+
stdoutBuffer.push(chunk);
|
|
25
|
+
},
|
|
26
|
+
onStderr: request.stream
|
|
27
|
+
? (chunk) => {
|
|
28
|
+
if (chunk) {
|
|
29
|
+
sawStderrChunk = true;
|
|
30
|
+
}
|
|
31
|
+
context.stderr.write(chunk);
|
|
32
|
+
}
|
|
33
|
+
: (chunk) => {
|
|
34
|
+
if (chunk) {
|
|
35
|
+
sawStderrChunk = true;
|
|
36
|
+
}
|
|
37
|
+
stderrBuffer.push(chunk);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
context.stderr.write(`Failed to run ${request.agentId}: ${formatError(error)}\n`);
|
|
43
|
+
return 1;
|
|
44
|
+
}
|
|
45
|
+
if (!request.stream) {
|
|
46
|
+
const stdout = stdoutBuffer.join("") || result.stdout;
|
|
47
|
+
const stderr = stderrBuffer.join("") || result.stderr;
|
|
48
|
+
if (stdout) {
|
|
49
|
+
context.stdout.write(stdout);
|
|
50
|
+
}
|
|
51
|
+
if (stderr) {
|
|
52
|
+
context.stderr.write(stderr);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
// HTTP/API providers often return final stdout/stderr without streaming callbacks.
|
|
57
|
+
if (!sawStdoutChunk && result.stdout) {
|
|
58
|
+
context.stdout.write(result.stdout);
|
|
59
|
+
}
|
|
60
|
+
if (!sawStderrChunk && result.stderr) {
|
|
61
|
+
context.stderr.write(result.stderr);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (result.code !== 0) {
|
|
65
|
+
context.stderr.write(`Provider run failed for ${result.agentId} (${result.providerId}).\n`);
|
|
66
|
+
return result.code;
|
|
67
|
+
}
|
|
68
|
+
return 0;
|
|
69
|
+
}
|
|
70
|
+
function formatError(error) {
|
|
71
|
+
if (error instanceof Error) {
|
|
72
|
+
return error.message;
|
|
73
|
+
}
|
|
74
|
+
return String(error);
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=agent-run.shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-run.shared.js","sourceRoot":"","sources":["../../../../src/apps/cli/commands/agent-run.shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { executeAgentRun } from "./agent-run.shared.js";
|
|
2
|
+
const DEFAULT_AGENT_ID = "orchestrator";
|
|
3
|
+
export const agentCommand = {
|
|
4
|
+
path: ["agent"],
|
|
5
|
+
description: "Send a message to an agent (default: orchestrator).",
|
|
6
|
+
async run(args, context) {
|
|
7
|
+
if (isHelpRequest(args)) {
|
|
8
|
+
printHelp(context.stdout);
|
|
9
|
+
return 0;
|
|
10
|
+
}
|
|
11
|
+
const parsed = parseAgentArgs(args);
|
|
12
|
+
if (!parsed.ok) {
|
|
13
|
+
context.stderr.write(`${parsed.error}\n`);
|
|
14
|
+
printHelp(context.stderr);
|
|
15
|
+
return 1;
|
|
16
|
+
}
|
|
17
|
+
return executeAgentRun(parsed, context);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
function parseAgentArgs(args) {
|
|
21
|
+
let agentId = DEFAULT_AGENT_ID;
|
|
22
|
+
let working = args;
|
|
23
|
+
const first = args[0]?.trim();
|
|
24
|
+
if (first && !first.startsWith("-")) {
|
|
25
|
+
agentId = first;
|
|
26
|
+
working = args.slice(1);
|
|
27
|
+
}
|
|
28
|
+
const passthroughSeparator = working.indexOf("--");
|
|
29
|
+
const known = passthroughSeparator >= 0 ? working.slice(0, passthroughSeparator) : working;
|
|
30
|
+
const passthroughArgs = passthroughSeparator >= 0 ? working.slice(passthroughSeparator + 1) : [];
|
|
31
|
+
let message;
|
|
32
|
+
let model;
|
|
33
|
+
let stream = true;
|
|
34
|
+
for (let index = 0; index < known.length; index += 1) {
|
|
35
|
+
const token = known[index];
|
|
36
|
+
if (token === "--no-stream") {
|
|
37
|
+
stream = false;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (token === "--message") {
|
|
41
|
+
const value = known[index + 1];
|
|
42
|
+
if (!value) {
|
|
43
|
+
return { ok: false, error: "Missing value for --message." };
|
|
44
|
+
}
|
|
45
|
+
message = value;
|
|
46
|
+
index += 1;
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (token === "--model") {
|
|
50
|
+
const value = known[index + 1];
|
|
51
|
+
if (!value) {
|
|
52
|
+
return { ok: false, error: "Missing value for --model." };
|
|
53
|
+
}
|
|
54
|
+
model = value;
|
|
55
|
+
index += 1;
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
return { ok: false, error: `Unknown option: ${token}` };
|
|
59
|
+
}
|
|
60
|
+
if (!message?.trim()) {
|
|
61
|
+
return { ok: false, error: "--message is required." };
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
ok: true,
|
|
65
|
+
agentId,
|
|
66
|
+
message: message.trim(),
|
|
67
|
+
model,
|
|
68
|
+
passthroughArgs,
|
|
69
|
+
stream
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function isHelpRequest(args) {
|
|
73
|
+
if (args.length === 0) {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
const first = args[0];
|
|
77
|
+
if (first === "--help" || first === "-h" || first === "help") {
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
return args.length > 1 && (args[1] === "--help" || args[1] === "-h" || args[1] === "help");
|
|
81
|
+
}
|
|
82
|
+
function printHelp(output) {
|
|
83
|
+
output.write("Usage:\n");
|
|
84
|
+
output.write(" opengoat agent [agent-id] --message <text> [--model <model>] [--no-stream] [-- <provider-args>]\n");
|
|
85
|
+
output.write("\n");
|
|
86
|
+
output.write("Defaults:\n");
|
|
87
|
+
output.write(` agent-id defaults to ${DEFAULT_AGENT_ID}\n`);
|
|
88
|
+
output.write("\n");
|
|
89
|
+
output.write("Subcommands:\n");
|
|
90
|
+
output.write(" agent create Create an agent workspace and internal config.\n");
|
|
91
|
+
output.write(" agent list List known agents.\n");
|
|
92
|
+
output.write(" agent provider get Show which provider is assigned to an agent.\n");
|
|
93
|
+
output.write(" agent provider set Assign one provider to an agent.\n");
|
|
94
|
+
output.write(" agent run Explicit run command (requires <agent-id>).\n");
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=agent.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.command.js","sourceRoot":"","sources":["../../../../src/apps/cli/commands/agent.command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,gBAAgB,GAAG,cAAc,CAAC;AAExC,MAAM,CAAC,MAAM,YAAY,GAAe;IACtC,IAAI,EAAE,CAAC,OAAO,CAAC;IACf,WAAW,EAAE,qDAAqD;IAClE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO;QACrB,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC1B,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;YAC1C,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC1B,OAAO,CAAC,CAAC;QACX,CAAC;QAED,OAAO,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;CACF,CAAC;AAgBF,SAAS,cAAc,CAAC,IAAc;IACpC,IAAI,OAAO,GAAG,gBAAgB,CAAC;IAC/B,IAAI,OAAO,GAAG,IAAI,CAAC;IAEnB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,GAAG,KAAK,CAAC;QAChB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,oBAAoB,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAC3F,MAAM,eAAe,GAAG,oBAAoB,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,oBAAoB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEjG,IAAI,OAA2B,CAAC;IAChC,IAAI,KAAyB,CAAC;IAC9B,IAAI,MAAM,GAAG,IAAI,CAAC;IAElB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAE3B,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;YAC5B,MAAM,GAAG,KAAK,CAAC;YACf,SAAS;QACX,CAAC;QAED,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC;YAC9D,CAAC;YACD,OAAO,GAAG,KAAK,CAAC;YAChB,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC;YAC5D,CAAC;YACD,KAAK,GAAG,KAAK,CAAC;YACd,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,KAAK,EAAE,EAAE,CAAC;IAC1D,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;QACrB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC;IACxD,CAAC;IAED,OAAO;QACL,EAAE,EAAE,IAAI;QACR,OAAO;QACP,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE;QACvB,KAAK;QACL,eAAe;QACf,MAAM;KACP,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,IAAc;IACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;AAC7F,CAAC;AAED,SAAS,SAAS,CAAC,MAA6B;IAC9C,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACzB,MAAM,CAAC,KAAK,CACV,qGAAqG,CACtG,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnB,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC5B,MAAM,CAAC,KAAK,CAAC,0BAA0B,gBAAgB,IAAI,CAAC,CAAC;IAC7D,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnB,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC/B,MAAM,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAC;IACvF,MAAM,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAC3D,MAAM,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;IACrF,MAAM,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;IACzE,MAAM,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;AACtF,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export const initCommand = {
|
|
2
|
+
path: ["init"],
|
|
3
|
+
description: "Initialize ~/.opengoat and seed the default orchestrator agent.",
|
|
4
|
+
async run(_args, context) {
|
|
5
|
+
const result = await context.service.initialize();
|
|
6
|
+
context.stdout.write(`OpenGoat home: ${result.paths.homeDir}\n`);
|
|
7
|
+
context.stdout.write(`Default agent: ${result.defaultAgent}\n`);
|
|
8
|
+
context.stdout.write(`Created: ${result.createdPaths.length} path(s)\n`);
|
|
9
|
+
if (result.createdPaths.length > 0) {
|
|
10
|
+
for (const path of result.createdPaths) {
|
|
11
|
+
context.stdout.write(` + ${path}\n`);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return 0;
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=init.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.command.js","sourceRoot":"","sources":["../../../../src/apps/cli/commands/init.command.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAe;IACrC,IAAI,EAAE,CAAC,MAAM,CAAC;IACd,WAAW,EAAE,iEAAiE;IAC9E,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO;QACtB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAElD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;QACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;QAChE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,MAAM,CAAC,YAAY,CAAC,MAAM,YAAY,CAAC,CAAC;QAEzE,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAED,OAAO,CAAC,CAAC;IACX,CAAC;CACF,CAAC"}
|