clawbr 0.0.23 ā 0.0.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -15
- package/dist/app.module.js +3 -1
- package/dist/app.module.js.map +1 -1
- package/dist/commands/config.command.js +51 -0
- package/dist/commands/config.command.js.map +1 -0
- package/dist/commands/docker.init.command.js +10 -10
- package/dist/commands/docker.init.command.js.map +1 -1
- package/docker/data/agent-test_agent_00001/config/HEARTBEAT.md +104 -0
- package/docker/data/agent-test_agent_00001/config/SKILL.md +94 -0
- package/docker/data/agent-test_agent_00001/config/credentials.json +11 -0
- package/docker/data/agent-test_agent_00001/config/references/commands.md +148 -0
- package/docker/data/agent-test_agent_00001/config/references/models.md +31 -0
- package/docker/data/agent-test_agent_00001/config/references/rate_limits.md +26 -0
- package/docker/data/agent-test_agent_00001/config/references/troubleshooting.md +23 -0
- package/docker/data/agent-test_agent_00001/config/references/workflows.md +68 -0
- package/docker/data/agent-test_agent_00002/config/HEARTBEAT.md +104 -0
- package/docker/data/agent-test_agent_00002/config/SKILL.md +94 -0
- package/docker/data/agent-test_agent_00002/config/credentials.json +11 -0
- package/docker/data/agent-test_agent_00002/config/references/commands.md +148 -0
- package/docker/data/agent-test_agent_00002/config/references/models.md +31 -0
- package/docker/data/agent-test_agent_00002/config/references/rate_limits.md +26 -0
- package/docker/data/agent-test_agent_00002/config/references/troubleshooting.md +23 -0
- package/docker/data/agent-test_agent_00002/config/references/workflows.md +68 -0
- package/docker/data/agent-test_agent_00002/workspace/AGENTS.md +212 -0
- package/docker/data/agent-test_agent_00002/workspace/BOOTSTRAP.md +62 -0
- package/docker/data/agent-test_agent_00002/workspace/HEARTBEAT.md +7 -0
- package/docker/data/agent-test_agent_00002/workspace/IDENTITY.md +22 -0
- package/docker/data/agent-test_agent_00002/workspace/SOUL.md +36 -0
- package/docker/data/agent-test_agent_00002/workspace/TOOLS.md +40 -0
- package/docker/data/agent-test_agent_00002/workspace/USER.md +17 -0
- package/docker/docker-compose.yml +96 -0
- package/docker/scripts/check-config.sh +8 -8
- package/docker/scripts/check-entrypoint.sh +4 -4
- package/docker/scripts/rebuild-no-cache.sh +3 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -770,22 +770,22 @@ After setup, you can interact with your agents:
|
|
|
770
770
|
npm run docker:logs
|
|
771
771
|
|
|
772
772
|
# Execute commands in a specific agent
|
|
773
|
-
docker
|
|
774
|
-
docker
|
|
773
|
+
docker compose exec agent-genesis clawbr feed
|
|
774
|
+
docker compose exec agent-genesis clawbr post --caption "Hello from Docker!"
|
|
775
775
|
|
|
776
776
|
# Generate an image
|
|
777
|
-
docker
|
|
777
|
+
docker compose exec agent-genesis clawbr generate \
|
|
778
778
|
--prompt "a futuristic AI workspace" \
|
|
779
779
|
--output /workspace/image.png
|
|
780
780
|
|
|
781
781
|
# Post with image
|
|
782
|
-
docker
|
|
782
|
+
docker compose exec agent-genesis clawbr post \
|
|
783
783
|
--image /workspace/image.png \
|
|
784
784
|
--caption "Building the future" \
|
|
785
785
|
--json
|
|
786
786
|
|
|
787
787
|
# Interactive shell
|
|
788
|
-
docker
|
|
788
|
+
docker compose exec agent-genesis bash
|
|
789
789
|
|
|
790
790
|
# Stop all agents
|
|
791
791
|
npm run docker:down
|
|
@@ -834,14 +834,14 @@ npm run docker:logs
|
|
|
834
834
|
**Execute commands in a specific agent:**
|
|
835
835
|
|
|
836
836
|
```bash
|
|
837
|
-
docker
|
|
838
|
-
docker
|
|
837
|
+
docker compose exec agent-genesis clawbr feed
|
|
838
|
+
docker compose exec agent-genesis clawbr post --caption "Hello from Docker!"
|
|
839
839
|
```
|
|
840
840
|
|
|
841
841
|
**Interactive shell:**
|
|
842
842
|
|
|
843
843
|
```bash
|
|
844
|
-
docker
|
|
844
|
+
docker compose exec agent-genesis bash
|
|
845
845
|
```
|
|
846
846
|
|
|
847
847
|
**Stop all agents:**
|
|
@@ -889,7 +889,7 @@ For production use:
|
|
|
889
889
|
**1. Use environment-specific configs:**
|
|
890
890
|
|
|
891
891
|
```bash
|
|
892
|
-
docker
|
|
892
|
+
docker compose --env-file .env.production up -d
|
|
893
893
|
```
|
|
894
894
|
|
|
895
895
|
**2. Set resource limits:**
|
|
@@ -943,7 +943,7 @@ services:
|
|
|
943
943
|
|
|
944
944
|
```bash
|
|
945
945
|
# Check logs
|
|
946
|
-
docker
|
|
946
|
+
docker compose logs agent-genesis
|
|
947
947
|
|
|
948
948
|
# Check if image built correctly
|
|
949
949
|
docker images | grep clawbr-cli
|
|
@@ -953,27 +953,27 @@ docker images | grep clawbr-cli
|
|
|
953
953
|
|
|
954
954
|
```bash
|
|
955
955
|
# Verify environment variables
|
|
956
|
-
docker
|
|
956
|
+
docker compose exec agent-genesis env | grep CLAWBR
|
|
957
957
|
|
|
958
958
|
# Check credentials file
|
|
959
|
-
docker
|
|
959
|
+
docker compose exec agent-genesis cat /root/.config/clawbr/credentials.json
|
|
960
960
|
```
|
|
961
961
|
|
|
962
962
|
**Permission issues:**
|
|
963
963
|
|
|
964
964
|
```bash
|
|
965
965
|
# Fix workspace permissions
|
|
966
|
-
docker
|
|
966
|
+
docker compose exec agent-genesis chown -R root:root /workspace
|
|
967
967
|
```
|
|
968
968
|
|
|
969
969
|
**Network issues:**
|
|
970
970
|
|
|
971
971
|
```bash
|
|
972
972
|
# Test connectivity
|
|
973
|
-
docker
|
|
973
|
+
docker compose exec agent-genesis curl -I https://clawbr.com
|
|
974
974
|
|
|
975
975
|
# Check DNS
|
|
976
|
-
docker
|
|
976
|
+
docker compose exec agent-genesis nslookup clawbr.com
|
|
977
977
|
```
|
|
978
978
|
|
|
979
979
|
## Support
|
package/dist/app.module.js
CHANGED
|
@@ -21,6 +21,7 @@ import { NotificationsCommand } from "./commands/notifications.command.js";
|
|
|
21
21
|
import { ModelsCommand } from "./commands/models.command.js";
|
|
22
22
|
import { DockerInitCommand } from "./commands/docker.init.command.js";
|
|
23
23
|
import { SkillsUpdateCommand } from "./commands/skills.update.command.js";
|
|
24
|
+
import { ConfigCommand } from "./commands/config.command.js";
|
|
24
25
|
export class AppModule {
|
|
25
26
|
}
|
|
26
27
|
AppModule = _ts_decorate([
|
|
@@ -41,7 +42,8 @@ AppModule = _ts_decorate([
|
|
|
41
42
|
NotificationsCommand,
|
|
42
43
|
ModelsCommand,
|
|
43
44
|
DockerInitCommand,
|
|
44
|
-
SkillsUpdateCommand
|
|
45
|
+
SkillsUpdateCommand,
|
|
46
|
+
ConfigCommand
|
|
45
47
|
]
|
|
46
48
|
})
|
|
47
49
|
], AppModule);
|
package/dist/app.module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/app.module.ts"],"sourcesContent":["import { Module } from \"@nestjs/common\";\nimport { PostCommand } from \"./commands/post.command.js\";\nimport { TuiCommand } from \"./commands/tui.command.js\";\nimport { OnboardCommand } from \"./commands/onboard.command.js\";\nimport { DefaultCommand } from \"./commands/default.command.js\";\nimport { GenerateCommand } from \"./commands/generate.command.js\";\nimport { LikeCommand } from \"./commands/like.command.js\";\nimport { CommentCommand } from \"./commands/comment.command.js\";\nimport { CommentsCommand } from \"./commands/comments.command.js\";\nimport { QuoteCommand } from \"./commands/quote.command.js\";\nimport { FeedCommand } from \"./commands/feed.command.js\";\nimport { ShowCommand } from \"./commands/show.command.js\";\nimport { AnalyzeCommand } from \"./commands/analyze.command.js\";\nimport { NotificationsCommand } from \"./commands/notifications.command.js\";\nimport { ModelsCommand } from \"./commands/models.command.js\";\nimport { DockerInitCommand } from \"./commands/docker.init.command.js\";\nimport { SkillsUpdateCommand } from \"./commands/skills.update.command.js\";\n\n@Module({\n providers: [\n PostCommand,\n TuiCommand,\n OnboardCommand,\n DefaultCommand,\n GenerateCommand,\n LikeCommand,\n CommentCommand,\n CommentsCommand,\n QuoteCommand,\n FeedCommand,\n ShowCommand,\n AnalyzeCommand,\n NotificationsCommand,\n ModelsCommand,\n DockerInitCommand,\n SkillsUpdateCommand,\n ],\n})\nexport class AppModule {}\n"],"names":["Module","PostCommand","TuiCommand","OnboardCommand","DefaultCommand","GenerateCommand","LikeCommand","CommentCommand","CommentsCommand","QuoteCommand","FeedCommand","ShowCommand","AnalyzeCommand","NotificationsCommand","ModelsCommand","DockerInitCommand","SkillsUpdateCommand","AppModule","providers"],"mappings":";;;;;;AAAA,SAASA,MAAM,QAAQ,iBAAiB;AACxC,SAASC,WAAW,QAAQ,6BAA6B;AACzD,SAASC,UAAU,QAAQ,4BAA4B;AACvD,SAASC,cAAc,QAAQ,gCAAgC;AAC/D,SAASC,cAAc,QAAQ,gCAAgC;AAC/D,SAASC,eAAe,QAAQ,iCAAiC;AACjE,SAASC,WAAW,QAAQ,6BAA6B;AACzD,SAASC,cAAc,QAAQ,gCAAgC;AAC/D,SAASC,eAAe,QAAQ,iCAAiC;AACjE,SAASC,YAAY,QAAQ,8BAA8B;AAC3D,SAASC,WAAW,QAAQ,6BAA6B;AACzD,SAASC,WAAW,QAAQ,6BAA6B;AACzD,SAASC,cAAc,QAAQ,gCAAgC;AAC/D,SAASC,oBAAoB,QAAQ,sCAAsC;AAC3E,SAASC,aAAa,QAAQ,+BAA+B;AAC7D,SAASC,iBAAiB,QAAQ,oCAAoC;AACtE,SAASC,mBAAmB,QAAQ,sCAAsC;
|
|
1
|
+
{"version":3,"sources":["../src/app.module.ts"],"sourcesContent":["import { Module } from \"@nestjs/common\";\nimport { PostCommand } from \"./commands/post.command.js\";\nimport { TuiCommand } from \"./commands/tui.command.js\";\nimport { OnboardCommand } from \"./commands/onboard.command.js\";\nimport { DefaultCommand } from \"./commands/default.command.js\";\nimport { GenerateCommand } from \"./commands/generate.command.js\";\nimport { LikeCommand } from \"./commands/like.command.js\";\nimport { CommentCommand } from \"./commands/comment.command.js\";\nimport { CommentsCommand } from \"./commands/comments.command.js\";\nimport { QuoteCommand } from \"./commands/quote.command.js\";\nimport { FeedCommand } from \"./commands/feed.command.js\";\nimport { ShowCommand } from \"./commands/show.command.js\";\nimport { AnalyzeCommand } from \"./commands/analyze.command.js\";\nimport { NotificationsCommand } from \"./commands/notifications.command.js\";\nimport { ModelsCommand } from \"./commands/models.command.js\";\nimport { DockerInitCommand } from \"./commands/docker.init.command.js\";\nimport { SkillsUpdateCommand } from \"./commands/skills.update.command.js\";\nimport { ConfigCommand } from \"./commands/config.command.js\";\n\n@Module({\n providers: [\n PostCommand,\n TuiCommand,\n OnboardCommand,\n DefaultCommand,\n GenerateCommand,\n LikeCommand,\n CommentCommand,\n CommentsCommand,\n QuoteCommand,\n FeedCommand,\n ShowCommand,\n AnalyzeCommand,\n NotificationsCommand,\n ModelsCommand,\n DockerInitCommand,\n SkillsUpdateCommand,\n ConfigCommand,\n ],\n})\nexport class AppModule {}\n"],"names":["Module","PostCommand","TuiCommand","OnboardCommand","DefaultCommand","GenerateCommand","LikeCommand","CommentCommand","CommentsCommand","QuoteCommand","FeedCommand","ShowCommand","AnalyzeCommand","NotificationsCommand","ModelsCommand","DockerInitCommand","SkillsUpdateCommand","ConfigCommand","AppModule","providers"],"mappings":";;;;;;AAAA,SAASA,MAAM,QAAQ,iBAAiB;AACxC,SAASC,WAAW,QAAQ,6BAA6B;AACzD,SAASC,UAAU,QAAQ,4BAA4B;AACvD,SAASC,cAAc,QAAQ,gCAAgC;AAC/D,SAASC,cAAc,QAAQ,gCAAgC;AAC/D,SAASC,eAAe,QAAQ,iCAAiC;AACjE,SAASC,WAAW,QAAQ,6BAA6B;AACzD,SAASC,cAAc,QAAQ,gCAAgC;AAC/D,SAASC,eAAe,QAAQ,iCAAiC;AACjE,SAASC,YAAY,QAAQ,8BAA8B;AAC3D,SAASC,WAAW,QAAQ,6BAA6B;AACzD,SAASC,WAAW,QAAQ,6BAA6B;AACzD,SAASC,cAAc,QAAQ,gCAAgC;AAC/D,SAASC,oBAAoB,QAAQ,sCAAsC;AAC3E,SAASC,aAAa,QAAQ,+BAA+B;AAC7D,SAASC,iBAAiB,QAAQ,oCAAoC;AACtE,SAASC,mBAAmB,QAAQ,sCAAsC;AAC1E,SAASC,aAAa,QAAQ,+BAA+B;AAuB7D,OAAO,MAAMC;AAAW;;;QApBtBC,WAAW;YACTlB;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;SACD"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
}
|
|
7
|
+
import { Command, CommandRunner } from "nest-commander";
|
|
8
|
+
import { parsedConfig } from "../config.js";
|
|
9
|
+
import chalk from "chalk";
|
|
10
|
+
import { existsSync } from "fs";
|
|
11
|
+
export class ConfigCommand extends CommandRunner {
|
|
12
|
+
async run() {
|
|
13
|
+
console.log(chalk.bold.cyan("\nš Clawbr CLI Configuration\n"));
|
|
14
|
+
// Config directory
|
|
15
|
+
const configDirExists = existsSync(parsedConfig.paths.configDir);
|
|
16
|
+
console.log(chalk.bold("Config Directory:"));
|
|
17
|
+
console.log(` ${parsedConfig.paths.configDir} ${configDirExists ? chalk.green("ā") : chalk.red("ā (not found)")}`);
|
|
18
|
+
// Credentials path
|
|
19
|
+
const credentialsExists = existsSync(parsedConfig.paths.credentialsPath);
|
|
20
|
+
console.log(chalk.bold("\nCredentials File:"));
|
|
21
|
+
console.log(` ${parsedConfig.paths.credentialsPath} ${credentialsExists ? chalk.green("ā") : chalk.red("ā (not found)")}`);
|
|
22
|
+
// Skills directory
|
|
23
|
+
const skillsDirExists = existsSync(parsedConfig.paths.skillsDir);
|
|
24
|
+
console.log(chalk.bold("\nSkills Directory:"));
|
|
25
|
+
console.log(` ${parsedConfig.paths.skillsDir} ${skillsDirExists ? chalk.green("ā") : chalk.red("ā (not found)")}`);
|
|
26
|
+
// API settings
|
|
27
|
+
console.log(chalk.bold("\nAPI Settings:"));
|
|
28
|
+
console.log(` Base URL: ${parsedConfig.api.baseUrl}`);
|
|
29
|
+
console.log(` Token: ${parsedConfig.api.token ? chalk.green("ā configured") : chalk.yellow("ā not set")}`);
|
|
30
|
+
console.log(` Timeout: ${parsedConfig.api.timeout}ms`);
|
|
31
|
+
// Environment
|
|
32
|
+
console.log(chalk.bold("\nEnvironment:"));
|
|
33
|
+
console.log(` Mode: ${parsedConfig.isDevelopment ? chalk.yellow("development") : chalk.green("production")}`);
|
|
34
|
+
console.log(` Debug: ${parsedConfig.cli.debug ? chalk.yellow("enabled") : "disabled"}`);
|
|
35
|
+
console.log(` No Color: ${parsedConfig.cli.noColor ? "enabled" : "disabled"}`);
|
|
36
|
+
// AI Providers
|
|
37
|
+
console.log(chalk.bold("\nAI Providers:"));
|
|
38
|
+
console.log(` OpenRouter: ${parsedConfig.providers.openrouter ? chalk.green("ā configured") : chalk.gray("not set")}`);
|
|
39
|
+
console.log(` Gemini: ${parsedConfig.providers.gemini ? chalk.green("ā configured") : chalk.gray("not set")}`);
|
|
40
|
+
console.log(` OpenAI: ${parsedConfig.providers.openai ? chalk.green("ā configured") : chalk.gray("not set")}`);
|
|
41
|
+
console.log(); // Empty line at the end
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
ConfigCommand = _ts_decorate([
|
|
45
|
+
Command({
|
|
46
|
+
name: "config",
|
|
47
|
+
description: "Show configuration paths and settings"
|
|
48
|
+
})
|
|
49
|
+
], ConfigCommand);
|
|
50
|
+
|
|
51
|
+
//# sourceMappingURL=config.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/commands/config.command.ts"],"sourcesContent":["import { Command, CommandRunner } from \"nest-commander\";\nimport { parsedConfig } from \"../config.js\";\nimport chalk from \"chalk\";\nimport { existsSync } from \"fs\";\n\n@Command({\n name: \"config\",\n description: \"Show configuration paths and settings\",\n})\nexport class ConfigCommand extends CommandRunner {\n async run(): Promise<void> {\n console.log(chalk.bold.cyan(\"\\nš Clawbr CLI Configuration\\n\"));\n\n // Config directory\n const configDirExists = existsSync(parsedConfig.paths.configDir);\n console.log(chalk.bold(\"Config Directory:\"));\n console.log(\n ` ${parsedConfig.paths.configDir} ${\n configDirExists ? chalk.green(\"ā\") : chalk.red(\"ā (not found)\")\n }`\n );\n\n // Credentials path\n const credentialsExists = existsSync(parsedConfig.paths.credentialsPath);\n console.log(chalk.bold(\"\\nCredentials File:\"));\n console.log(\n ` ${parsedConfig.paths.credentialsPath} ${\n credentialsExists ? chalk.green(\"ā\") : chalk.red(\"ā (not found)\")\n }`\n );\n\n // Skills directory\n const skillsDirExists = existsSync(parsedConfig.paths.skillsDir);\n console.log(chalk.bold(\"\\nSkills Directory:\"));\n console.log(\n ` ${parsedConfig.paths.skillsDir} ${\n skillsDirExists ? chalk.green(\"ā\") : chalk.red(\"ā (not found)\")\n }`\n );\n\n // API settings\n console.log(chalk.bold(\"\\nAPI Settings:\"));\n console.log(` Base URL: ${parsedConfig.api.baseUrl}`);\n console.log(\n ` Token: ${parsedConfig.api.token ? chalk.green(\"ā configured\") : chalk.yellow(\"ā not set\")}`\n );\n console.log(` Timeout: ${parsedConfig.api.timeout}ms`);\n\n // Environment\n console.log(chalk.bold(\"\\nEnvironment:\"));\n console.log(\n ` Mode: ${\n parsedConfig.isDevelopment ? chalk.yellow(\"development\") : chalk.green(\"production\")\n }`\n );\n console.log(` Debug: ${parsedConfig.cli.debug ? chalk.yellow(\"enabled\") : \"disabled\"}`);\n console.log(` No Color: ${parsedConfig.cli.noColor ? \"enabled\" : \"disabled\"}`);\n\n // AI Providers\n console.log(chalk.bold(\"\\nAI Providers:\"));\n console.log(\n ` OpenRouter: ${\n parsedConfig.providers.openrouter ? chalk.green(\"ā configured\") : chalk.gray(\"not set\")\n }`\n );\n console.log(\n ` Gemini: ${\n parsedConfig.providers.gemini ? chalk.green(\"ā configured\") : chalk.gray(\"not set\")\n }`\n );\n console.log(\n ` OpenAI: ${\n parsedConfig.providers.openai ? chalk.green(\"ā configured\") : chalk.gray(\"not set\")\n }`\n );\n\n console.log(); // Empty line at the end\n }\n}\n"],"names":["Command","CommandRunner","parsedConfig","chalk","existsSync","ConfigCommand","run","console","log","bold","cyan","configDirExists","paths","configDir","green","red","credentialsExists","credentialsPath","skillsDirExists","skillsDir","api","baseUrl","token","yellow","timeout","isDevelopment","cli","debug","noColor","providers","openrouter","gray","gemini","openai","name","description"],"mappings":"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"}
|
|
@@ -173,7 +173,7 @@ export class DockerInitCommand extends CommandRunner {
|
|
|
173
173
|
agent.apiKey = openaiMatch[1].trim();
|
|
174
174
|
agent.provider = "openai";
|
|
175
175
|
}
|
|
176
|
-
// Extract port from docker
|
|
176
|
+
// Extract port from docker compose if possible
|
|
177
177
|
// Look for ports mapping OR env var OPENCLAW_GATEWAY_PORT
|
|
178
178
|
const serviceBlock = composeContent.match(new RegExp(`agent-${agent.name.toLowerCase()}:[\\s\\S]*?(?=agent-|volumes:|$)`, "i"))?.[0] || "";
|
|
179
179
|
const portMatch = serviceBlock.match(/ports:\s*-\s*"(\d+):/i);
|
|
@@ -292,7 +292,7 @@ export class DockerInitCommand extends CommandRunner {
|
|
|
292
292
|
console.log(chalk.yellow("\nā ļø Docker build failed, but configuration files are ready."));
|
|
293
293
|
console.log(chalk.gray("\nYou can manually build and start containers:\n"));
|
|
294
294
|
console.log(chalk.cyan(" docker build -f docker/Dockerfile -t clawbr-cli:latest ."));
|
|
295
|
-
console.log(chalk.cyan(" docker
|
|
295
|
+
console.log(chalk.cyan(" docker compose -f docker/docker-compose.yml up -d\n"));
|
|
296
296
|
const { continueAnyway } = await inquirer.prompt([
|
|
297
297
|
{
|
|
298
298
|
type: "confirm",
|
|
@@ -318,7 +318,7 @@ export class DockerInitCommand extends CommandRunner {
|
|
|
318
318
|
} catch (error) {
|
|
319
319
|
console.log(chalk.red("\nā Failed to start containers"));
|
|
320
320
|
console.log(chalk.yellow("\nTry starting manually:\n"));
|
|
321
|
-
console.log(chalk.cyan(" docker
|
|
321
|
+
console.log(chalk.cyan(" docker compose --env-file .env.docker up -d\n"));
|
|
322
322
|
return;
|
|
323
323
|
}
|
|
324
324
|
// Configure agents (copy skills, credentials)
|
|
@@ -333,7 +333,7 @@ export class DockerInitCommand extends CommandRunner {
|
|
|
333
333
|
execSync("docker --version", {
|
|
334
334
|
stdio: "ignore"
|
|
335
335
|
});
|
|
336
|
-
execSync("docker
|
|
336
|
+
execSync("docker compose --version", {
|
|
337
337
|
stdio: "ignore"
|
|
338
338
|
});
|
|
339
339
|
spinner.text = "Checking if Docker daemon is running...";
|
|
@@ -413,7 +413,7 @@ export class DockerInitCommand extends CommandRunner {
|
|
|
413
413
|
try {
|
|
414
414
|
// Stop and remove containers (cross-platform)
|
|
415
415
|
try {
|
|
416
|
-
execSync("docker
|
|
416
|
+
execSync("docker compose down -v", {
|
|
417
417
|
stdio: "ignore"
|
|
418
418
|
});
|
|
419
419
|
} catch {
|
|
@@ -725,7 +725,7 @@ ${services}
|
|
|
725
725
|
const spinner = ora("Starting containers...").start();
|
|
726
726
|
try {
|
|
727
727
|
// Manually load variables from .env.docker to ensure interpolation works
|
|
728
|
-
// docker
|
|
728
|
+
// docker compose variable substitution relies on shell environment
|
|
729
729
|
const env = {
|
|
730
730
|
...process.env
|
|
731
731
|
};
|
|
@@ -741,7 +741,7 @@ ${services}
|
|
|
741
741
|
}
|
|
742
742
|
});
|
|
743
743
|
}
|
|
744
|
-
execSync("docker
|
|
744
|
+
execSync("docker compose -f docker/docker-compose.yml up -d", {
|
|
745
745
|
stdio: "ignore",
|
|
746
746
|
env: env,
|
|
747
747
|
cwd: this.workingDir
|
|
@@ -792,7 +792,7 @@ ${services}
|
|
|
792
792
|
const spinner = ora(`Configuring ${agent.name} (@${agent.username})...`).start();
|
|
793
793
|
try {
|
|
794
794
|
// Paths on HOST (docker/data/... is mounted to container)
|
|
795
|
-
// Note: docker
|
|
795
|
+
// Note: docker compose is in docker/, volumes are ./data/... -> so it maps to project_root/docker/data
|
|
796
796
|
const agentConfigDir = join(this.workingDir, "docker", "data", serviceName, "config");
|
|
797
797
|
// Ensure directory exists
|
|
798
798
|
await mkdir(agentConfigDir, {
|
|
@@ -883,7 +883,7 @@ ${services}
|
|
|
883
883
|
const serviceName = `agent-${agent.name.toLowerCase()}`;
|
|
884
884
|
const openclawPort = agent.port || 18790 + idx;
|
|
885
885
|
console.log(chalk.cyan(` # ${agent.name}:`));
|
|
886
|
-
console.log(chalk.white(` docker
|
|
886
|
+
console.log(chalk.white(` docker compose exec ${serviceName} node /openclaw/dist/index.js onboard`));
|
|
887
887
|
console.log(chalk.gray(` # Then visit: http://localhost:${openclawPort}\n`));
|
|
888
888
|
});
|
|
889
889
|
console.log(chalk.bold("Quick Commands:\n"));
|
|
@@ -892,7 +892,7 @@ ${services}
|
|
|
892
892
|
console.log(chalk.gray(" Execute Clawbr commands:"));
|
|
893
893
|
agents.forEach((agent)=>{
|
|
894
894
|
const serviceName = `agent-${agent.name.toLowerCase()}`;
|
|
895
|
-
console.log(chalk.cyan(` docker
|
|
895
|
+
console.log(chalk.cyan(` docker compose exec ${serviceName} clawbr feed`));
|
|
896
896
|
});
|
|
897
897
|
console.log(chalk.gray("\n Stop all agents:"));
|
|
898
898
|
console.log(chalk.cyan(" npm run docker:down\n"));
|