clawsouls 0.4.1 → 0.4.3

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 CHANGED
@@ -1,6 +1,6 @@
1
- # 🧠 ClawSouls CLI v0.2.9
1
+ # 🧠 ClawSouls CLI
2
2
 
3
- **Give your AI a soul.** Install, manage, and switch AI agent personas for [OpenClaw](https://github.com/openclaw/openclaw).
3
+ **Give your AI a soul.** Install, manage, and switch AI agent personas — built for OpenClaw, works with any SOUL.md-compatible agent.
4
4
 
5
5
  [![npm](https://img.shields.io/npm/v/clawsouls)](https://www.npmjs.com/package/clawsouls)
6
6
  [![License](https://img.shields.io/badge/license-Apache%202.0-blue)](LICENSE)
@@ -11,6 +11,59 @@ ClawSouls is a persona sharing platform for AI agents. A **Soul** is a personali
11
11
 
12
12
  Browse available souls at [clawsouls.ai](https://clawsouls.ai).
13
13
 
14
+ ## Multi-Platform Support
15
+
16
+ ClawSouls works with **any SOUL.md-compatible agent framework**. The CLI auto-detects your installed platform and applies souls to the correct workspace.
17
+
18
+ | Platform | Directory | Status |
19
+ |----------|-----------|--------|
20
+ | **OpenClaw** | `~/.openclaw/workspace/` | ✅ Auto-detected |
21
+ | **ZeroClaw** | `~/.zeroclaw/workspace/` | ✅ Auto-detected |
22
+ | **Clawdbot** | `~/.clawdbot/workspace/` | ✅ Auto-detected |
23
+ | **Moltbot** | `~/.moltbot/workspace/` | ✅ Auto-detected |
24
+ | **Moldbot** | `~/.moldbot/workspace/` | ✅ Auto-detected |
25
+ | **Custom** | Any path | ✅ Via `--workspace` or `--platform` |
26
+
27
+ ### How It Works
28
+
29
+ ```
30
+ ┌──────────────────────────────────────────────────┐
31
+ │ clawsouls install clawsouls/surgical-coder │
32
+ │ clawsouls use surgical-coder │
33
+ └──────────────┬───────────────────────────────────┘
34
+
35
+ ▼ Auto-detect installed platform
36
+ ┌────────────────────┐
37
+ │ ~/.openclaw/ ? │──yes──▶ Apply to ~/.openclaw/workspace/
38
+ │ ~/.zeroclaw/ ? │──yes──▶ Apply to ~/.zeroclaw/workspace/
39
+ │ ~/.clawdbot/ ? │──yes──▶ Apply to ~/.clawdbot/workspace/
40
+ │ ~/.moltbot/ ? │──yes──▶ Apply to ~/.moltbot/workspace/
41
+ │ ~/.moldbot/ ? │──yes──▶ Apply to ~/.moldbot/workspace/
42
+ │ --workspace path │──yes──▶ Apply to custom path
43
+ └────────────────────┘
44
+ ```
45
+
46
+ 1. **Install** downloads soul files to `~/<platform>/souls/<owner>/<name>/`
47
+ 2. **Use** copies soul files (SOUL.md, IDENTITY.md, etc.) to the workspace
48
+ 3. **Protected files** (USER.md, MEMORY.md, TOOLS.md) are **never overwritten**
49
+ 4. **Automatic backup** before every switch — revert with `clawsouls restore`
50
+
51
+ ### Override Platform
52
+
53
+ ```bash
54
+ # Explicit platform flag
55
+ clawsouls --platform zeroclaw use surgical-coder
56
+
57
+ # Custom workspace path
58
+ clawsouls --workspace ~/my-agent/workspace use surgical-coder
59
+
60
+ # Environment variable
61
+ CLAWSOULS_PLATFORM=clawdbot clawsouls use surgical-coder
62
+
63
+ # Check detection
64
+ clawsouls platform
65
+ ```
66
+
14
67
  ## Quick Start
15
68
 
16
69
  ```bash
@@ -20,7 +73,7 @@ npx clawsouls install clawsouls/surgical-coder
20
73
  # Activate it (backs up your current workspace)
21
74
  npx clawsouls use surgical-coder
22
75
 
23
- # Restart your OpenClaw session — done!
76
+ # Restart your agent session — done!
24
77
  ```
25
78
 
26
79
  ## Installation
@@ -37,6 +90,21 @@ npm install -g clawsouls
37
90
 
38
91
  ## Commands
39
92
 
93
+ ### `clawsouls platform`
94
+
95
+ Show detected agent platform(s) and workspace path.
96
+
97
+ ```bash
98
+ clawsouls platform
99
+
100
+ # 🔍 Agent Platform Detection
101
+ #
102
+ # ▶ Active: OpenClaw 🦞
103
+ # Workspace: /home/user/.openclaw/workspace
104
+ # Souls dir: /home/user/.openclaw/souls
105
+ # Restart: openclaw gateway restart
106
+ ```
107
+
40
108
  ### `clawsouls init [name]`
41
109
 
42
110
  Scaffold a new soul package directory with template files.
@@ -51,8 +119,6 @@ Creates a directory with `soul.json`, `SOUL.md`, `IDENTITY.md`, `AGENTS.md`, `HE
51
119
 
52
120
  Download and install a soul from the registry. Uses `owner/name` format (e.g., `clawsouls/surgical-coder`). Optionally specify a version with `@version` (e.g., `clawsouls/surgical-coder@0.1.0`). Without a version, installs the latest.
53
121
 
54
- The install command tries the API first (`/api/v1/souls/:owner/:name?files=true`), falls back to CDN if unavailable, and auto-generates `soul.json` if missing from the response.
55
-
56
122
  ```bash
57
123
  clawsouls install clawsouls/minimalist
58
124
  clawsouls install clawsouls/devops-veteran
@@ -68,7 +134,7 @@ Activate an installed soul. Your current workspace files are automatically backe
68
134
  clawsouls use minimalist
69
135
  ```
70
136
 
71
- **Automatic backup:** Before applying a new soul, the current workspace files (SOUL.md, IDENTITY.md, AGENTS.md, HEARTBEAT.md) are saved to `~/.openclaw/souls/_backup/<timestamp>/`. You can always revert with `clawsouls restore`.
137
+ **Automatic backup:** Before applying a new soul, the current workspace files (SOUL.md, IDENTITY.md, AGENTS.md, HEARTBEAT.md) are saved to `~/<platform>/souls/_backup/<timestamp>/`. You can always revert with `clawsouls restore`.
72
138
 
73
139
  **Protected files** — these are never overwritten:
74
140
  - `USER.md` (your personal data)
@@ -77,136 +143,77 @@ clawsouls use minimalist
77
143
 
78
144
  ### `clawsouls restore`
79
145
 
80
- Revert to your previous soul from the latest backup (`~/.openclaw/souls/_backup/`).
146
+ Revert to your previous soul from the latest backup.
81
147
 
82
148
  ```bash
83
149
  clawsouls restore
84
150
  ```
85
151
 
86
- Multiple backups are kept — each `use` creates a new timestamped backup, so you can safely switch between souls without losing any previous configuration.
87
-
88
- ### `clawsouls publish <dir>`
89
-
90
- Publish a soul package to the ClawSouls registry. Requires authentication.
91
-
92
- ```bash
93
- # 1. Log in at https://clawsouls.ai and get your API token from the Dashboard
94
- # 2. Set the token
95
- export CLAWSOULS_TOKEN=<your-token>
96
-
97
- # 3. Publish your soul
98
- clawsouls publish ./my-soul/
99
- ```
100
-
101
- The directory must contain a valid `soul.json`. All files in the directory are uploaded. A security scan runs automatically before publishing (blocks on dangerous patterns with 400 error).
102
-
103
- **v0.2.0**: The `publish` command auto-prefixes the soul name with your username (e.g., publishing `my-soul` as user `TomLeeLive` creates `TomLeeLive/my-soul`).
104
-
105
- ### `clawsouls login <token>`
152
+ ### `clawsouls list`
106
153
 
107
- Save your API token for registry authentication. Get a token from your [dashboard](https://clawsouls.ai/dashboard).
154
+ List installed souls.
108
155
 
109
156
  ```bash
110
- clawsouls login cs_a1b2c3d4...
157
+ clawsouls list
158
+ clawsouls ls
111
159
  ```
112
160
 
113
- The token is saved to `~/.clawsouls/config.json`.
161
+ ### `clawsouls validate [dir]`
114
162
 
115
- ### `clawsouls logout`
116
-
117
- Remove the saved API token.
163
+ Validate a soul package against the Soul Spec.
118
164
 
119
165
  ```bash
120
- clawsouls logout
166
+ clawsouls validate # validate current directory
167
+ clawsouls validate ./my-soul # validate specific directory
168
+ clawsouls validate --soulscan # include SoulScan security analysis
121
169
  ```
122
170
 
123
- ### `clawsouls whoami`
171
+ ### `clawsouls soulscan [dir]`
124
172
 
125
- Show the currently authenticated user.
173
+ Run SoulScan™ security and quality analysis on a soul package or active workspace.
126
174
 
127
175
  ```bash
128
- clawsouls whoami
129
- # @TomLeeLive
176
+ clawsouls soulscan # scan active workspace
177
+ clawsouls soulscan ./my-soul # scan specific directory
178
+ clawsouls soulscan -q # quiet mode (for cron)
179
+ clawsouls soulscan --init # initialize baseline checksums
130
180
  ```
131
181
 
132
- ### `clawsouls list`
182
+ ### `clawsouls publish <dir>`
133
183
 
134
- Show all installed souls.
184
+ Publish a soul package to the registry.
135
185
 
136
186
  ```bash
137
- clawsouls list
187
+ clawsouls login <token> # authenticate first
188
+ clawsouls publish ./my-soul # publish to clawsouls.ai
138
189
  ```
139
190
 
140
- ## Available Souls
141
-
142
- **78+ souls** across 10 categories — browse all at [clawsouls.ai](https://clawsouls.ai).
143
-
144
- Popular picks:
191
+ ## Soul Spec
145
192
 
146
- | Soul | Category | Description |
147
- |------|----------|-------------|
148
- | 🔬 **Surgical Coder** | Engineering | Karpathy-inspired surgical coding precision |
149
- | 🔬 **Surgical Coder** | Engineering | Disciplined coding agent inspired by Karpathy's CLAUDE.md |
150
- | 🔧 **DevOps Veteran** | DevOps | Battle-scarred infrastructure engineer |
151
- | 🎮 **GameDev Mentor** | Game Dev | Experienced game developer and mentor |
152
- | ⚡ **Minimalist** | Lifestyle | Extremely concise responses |
153
- | 🔍 **Code Reviewer** | Engineering | Thorough, constructive code reviewer |
154
- | 📚 **Coding Tutor** | Education | Patient programming teacher |
155
- | 🧬 **MBTI Personas** | Lifestyle | 16 personality types (INTJ, ENFP, etc.) |
156
- | 🔬 **Research Scientist** | Science | Rigorous research methodology and analysis |
157
- | 📊 **Data Scientist** | Data | ML/AI-focused data analysis |
158
-
159
- ## What's in a Soul?
160
-
161
- A soul is a directory with these files:
193
+ Souls follow the [Soul Spec](https://clawsouls.ai/spec) an open specification for AI agent persona packages. A soul package contains:
162
194
 
163
195
  ```
164
196
  my-soul/
165
- ├── soul.json # Metadata (name, version, tags)
166
- ├── SOUL.md # Personality & behavior
167
- ├── IDENTITY.md # Name, emoji, avatar
168
- ├── AGENTS.md # Workflow & rules
169
- ├── HEARTBEAT.md # Periodic task config
170
- └── README.md # Documentation
197
+ ├── soul.json # Metadata (name, version, tags, compatibility)
198
+ ├── SOUL.md # Persona, tone, and boundaries
199
+ ├── IDENTITY.md # Name, avatar, and vibe
200
+ ├── AGENTS.md # Operating instructions
201
+ ├── HEARTBEAT.md # Periodic check behavior
202
+ └── README.md # Human-readable description
171
203
  ```
172
204
 
173
- The spec is open — see [Soul Spec™](https://github.com/clawsouls/clawsouls/blob/main/docs/soul-spec.md).
205
+ ## Security
174
206
 
175
- ## How It Works
176
-
177
- ```
178
- ┌──────────────────┐ install ┌──────────────┐
179
- │ clawsouls.ai │ ───────────→ │ ~/.openclaw/ │
180
- │ (API Registry) │ GET /api/ │ souls/surgical-coder/ │
181
- └──────────────────┘ v1/souls/ └──────┬───────┘
182
- ▲ owner/name │ use
183
- │ ▼
184
- publish (POST) ┌──────────────────┐
185
- │ │ ~/.openclaw/ │
186
- ┌───────┴──────┐ │ workspace/ │
187
- │ clawsouls │ │ ├ SOUL.md │
188
- │ publish ./ │ │ ├ IDENTITY.md │
189
- └──────────────┘ │ ├ AGENTS.md │
190
- │ └ HEARTBEAT.md │
191
- └──────────────────┘
192
- ```
193
-
194
- 1. **Install** fetches soul files from the API (`clawsouls.ai/api/v1/souls/:owner/:name`) and saves to `~/.openclaw/souls/<name>/`
195
- 2. **Use** backs up your current workspace to `~/.openclaw/souls/_backup/<timestamp>/`, then copies soul files in
196
- 3. **Restart** your OpenClaw session to load the new personality
197
- 4. **Publish** uploads your soul directory to the registry (requires `CLAWSOULS_TOKEN`)
207
+ All souls on [clawsouls.ai](https://clawsouls.ai) are automatically scanned by **SoulScan™** — our security engine that checks for prompt injection, data exfiltration, harmful content, and 50+ other patterns.
198
208
 
199
209
  ## Links
200
210
 
201
211
  - 🌐 [clawsouls.ai](https://clawsouls.ai) — Browse souls
202
- - 📦 [npm](https://www.npmjs.com/package/clawsouls) — Package
203
- - 📋 [Soul Spec™](https://github.com/clawsouls/clawsouls/blob/main/docs/soul-spec.md) — Create your own
204
- - 🐙 [GitHub Org](https://github.com/clawsouls) — Source code
212
+ - 📖 [Soul Spec](https://clawsouls.ai/spec) — Open specification
213
+ - 🔒 [SoulScan](https://clawsouls.ai/soulscan) — Security scanner
214
+ - 📜 [Manifesto](https://clawsouls.ai/manifesto) — Our philosophy
215
+ - 📄 [Research Paper](https://doi.org/10.5281/zenodo.18678616) — Academic foundation
205
216
 
206
217
  ## License
207
218
 
208
- Apache 2.0 — see [LICENSE](LICENSE).
209
-
210
- ## Disclaimer
211
-
212
- ClawSouls is an independent project. Not affiliated with or endorsed by OpenClaw.
219
+ Apache-2.0
@@ -10,13 +10,23 @@ import { loginCommand, logoutCommand, whoamiCommand } from '../commands/login.js
10
10
  import { initCommand } from '../commands/init.js';
11
11
  import { validateCommand } from '../commands/validate.js';
12
12
  import { soulscanCommand } from '../commands/soulscan.js';
13
+ import { platformCommand } from '../commands/platform.js';
14
+ import { exportCommand } from '../commands/export.js';
13
15
  const require = createRequire(import.meta.url);
14
16
  const { version } = require('../../package.json');
15
17
  const program = new Command();
16
18
  program
17
19
  .name('clawsouls')
18
- .description('AI agent persona manager (OpenClaw + ZeroClaw)')
19
- .version(version);
20
+ .description('AI agent persona manager works with any SOUL.md-compatible agent')
21
+ .version(version)
22
+ .option('--platform <name>', 'Override agent platform (openclaw, zeroclaw, clawdbot, moltbot, moldbot, or a path)')
23
+ .option('--workspace <path>', 'Override workspace directory')
24
+ .hook('preAction', (thisCommand) => {
25
+ const opts = thisCommand.opts();
26
+ if (opts.platform) {
27
+ process.env.CLAWSOULS_PLATFORM = opts.platform;
28
+ }
29
+ });
20
30
  program
21
31
  .command('install <name>')
22
32
  .description('Install a soul from the registry')
@@ -25,7 +35,10 @@ program
25
35
  program
26
36
  .command('use <name>')
27
37
  .description('Activate an installed soul (backs up current workspace)')
28
- .action(useCommand);
38
+ .action((name) => {
39
+ const globalOpts = program.opts();
40
+ useCommand(name, { workspace: globalOpts.workspace });
41
+ });
29
42
  program
30
43
  .command('restore')
31
44
  .description('Restore workspace from the latest backup')
@@ -74,5 +87,16 @@ program
74
87
  .option('--verify-audit', 'Verify the audit log hash chain integrity')
75
88
  .option('--audit-log', 'Display recent audit log entries')
76
89
  .action((dir, opts) => soulscanCommand(dir, opts));
90
+ program
91
+ .command('export <format>')
92
+ .description('Export soul to another format (claude-md, system-prompt)')
93
+ .option('-o, --output <path>', 'Output file path')
94
+ .option('-d, --dir <path>', 'Source soul directory (default: active workspace)')
95
+ .action((format, opts) => exportCommand(format, opts));
96
+ program
97
+ .command('platform')
98
+ .alias('detect')
99
+ .description('Show detected agent platform(s) and workspace path')
100
+ .action(platformCommand);
77
101
  program.parse();
78
102
  //# sourceMappingURL=clawsouls.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"clawsouls.js","sourceRoot":"","sources":["../../src/bin/clawsouls.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAElD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,gDAAgD,CAAC;KAC7D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,aAAa,EAAE,gCAAgC,CAAC;KACvD,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,yDAAyD,CAAC;KACtE,MAAM,CAAC,UAAU,CAAC,CAAC;AAEtB,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,KAAK,CAAC,IAAI,CAAC;KACX,WAAW,CAAC,sBAAsB,CAAC;KACnC,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CAAC,WAAW,EAAE,sCAAsC,CAAC;KAC3D,MAAM,CAAC,CAAC,GAAW,EAAE,IAA2B,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AAEnF,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,YAAY,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,wBAAwB,CAAC;KACrC,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,CAAC,IAAa,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AAEhD,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,KAAK,CAAC,OAAO,CAAC;KACd,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,YAAY,EAAE,8CAA8C,CAAC;KACpE,MAAM,CAAC,CAAC,GAAY,EAAE,IAA6B,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AAEvF,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,KAAK,CAAC,MAAM,CAAC;KACb,WAAW,CAAC,sDAAsD,CAAC;KACnE,MAAM,CAAC,aAAa,EAAE,6DAA6D,CAAC;KACpF,MAAM,CAAC,QAAQ,EAAE,2DAA2D,CAAC;KAC7E,MAAM,CAAC,WAAW,EAAE,qDAAqD,CAAC;KAC1E,MAAM,CAAC,WAAW,EAAE,4CAA4C,CAAC;KACjE,MAAM,CAAC,UAAU,EAAE,+CAA+C,CAAC;KACnE,MAAM,CAAC,gBAAgB,EAAE,2CAA2C,CAAC;KACrE,MAAM,CAAC,aAAa,EAAE,kCAAkC,CAAC;KACzD,MAAM,CAAC,CAAC,GAAY,EAAE,IAA6I,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AAEvM,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"clawsouls.js","sourceRoot":"","sources":["../../src/bin/clawsouls.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ interface ExportOptions {
2
+ output?: string;
3
+ dir?: string;
4
+ }
5
+ export declare function exportCommand(format: string, options: ExportOptions): Promise<void>;
6
+ export {};
@@ -0,0 +1,160 @@
1
+ import chalk from 'chalk';
2
+ import { existsSync, readFileSync, writeFileSync } from 'fs';
3
+ import { join, resolve } from 'path';
4
+ import { getConfig } from '../utils/config.js';
5
+ const SOUL_SPEC_FILES = ['SOUL.md', 'IDENTITY.md', 'AGENTS.md', 'HEARTBEAT.md', 'STYLE.md'];
6
+ function readSoulFiles(dir) {
7
+ const files = new Map();
8
+ for (const filename of SOUL_SPEC_FILES) {
9
+ const filepath = join(dir, filename);
10
+ if (existsSync(filepath)) {
11
+ files.set(filename, readFileSync(filepath, 'utf-8').trim());
12
+ }
13
+ }
14
+ return files;
15
+ }
16
+ function readSoulJson(dir) {
17
+ const p = join(dir, 'soul.json');
18
+ if (existsSync(p)) {
19
+ try {
20
+ return JSON.parse(readFileSync(p, 'utf-8'));
21
+ }
22
+ catch {
23
+ return null;
24
+ }
25
+ }
26
+ return null;
27
+ }
28
+ function toClaudeMd(files, meta) {
29
+ const sections = [];
30
+ // Header
31
+ const name = meta?.displayName || meta?.name || 'AI Agent';
32
+ const version = meta?.version || '';
33
+ const desc = meta?.description || '';
34
+ sections.push(`# ${name}${version ? ` v${version}` : ''}`);
35
+ if (desc)
36
+ sections.push(`> ${desc}`);
37
+ sections.push('');
38
+ sections.push('<!-- Generated by ClawSouls CLI (clawsouls export --format claude-md) -->');
39
+ sections.push('<!-- Source: https://clawsouls.ai -->');
40
+ sections.push('');
41
+ // SOUL.md → core persona
42
+ const soul = files.get('SOUL.md');
43
+ if (soul) {
44
+ sections.push('## Persona');
45
+ sections.push('');
46
+ sections.push(soul);
47
+ sections.push('');
48
+ }
49
+ // IDENTITY.md → identity details
50
+ const identity = files.get('IDENTITY.md');
51
+ if (identity) {
52
+ sections.push('## Identity');
53
+ sections.push('');
54
+ sections.push(identity);
55
+ sections.push('');
56
+ }
57
+ // STYLE.md → communication style
58
+ const style = files.get('STYLE.md');
59
+ if (style) {
60
+ sections.push('## Communication Style');
61
+ sections.push('');
62
+ sections.push(style);
63
+ sections.push('');
64
+ }
65
+ // AGENTS.md → workflow
66
+ const agents = files.get('AGENTS.md');
67
+ if (agents) {
68
+ sections.push('## Workflow');
69
+ sections.push('');
70
+ sections.push(agents);
71
+ sections.push('');
72
+ }
73
+ // HEARTBEAT.md → periodic checks
74
+ const heartbeat = files.get('HEARTBEAT.md');
75
+ if (heartbeat) {
76
+ sections.push('## Periodic Checks');
77
+ sections.push('');
78
+ sections.push(heartbeat);
79
+ sections.push('');
80
+ }
81
+ return sections.join('\n').trimEnd() + '\n';
82
+ }
83
+ function toSystemPrompt(files, meta) {
84
+ const parts = [];
85
+ const name = meta?.displayName || meta?.name || 'AI Agent';
86
+ parts.push(`You are ${name}.`);
87
+ const soul = files.get('SOUL.md');
88
+ if (soul)
89
+ parts.push('', soul);
90
+ const identity = files.get('IDENTITY.md');
91
+ if (identity)
92
+ parts.push('', '---', '', identity);
93
+ const style = files.get('STYLE.md');
94
+ if (style)
95
+ parts.push('', '---', '', style);
96
+ const agents = files.get('AGENTS.md');
97
+ if (agents)
98
+ parts.push('', '---', '', agents);
99
+ return parts.join('\n').trimEnd() + '\n';
100
+ }
101
+ const FORMATS = {
102
+ 'claude-md': {
103
+ ext: 'CLAUDE.md',
104
+ convert: toClaudeMd,
105
+ label: 'Claude Code / Cowork (CLAUDE.md)',
106
+ },
107
+ 'system-prompt': {
108
+ ext: 'system-prompt.txt',
109
+ convert: toSystemPrompt,
110
+ label: 'System Prompt (plain text)',
111
+ },
112
+ };
113
+ export async function exportCommand(format, options) {
114
+ const fmt = FORMATS[format];
115
+ if (!fmt) {
116
+ console.error(chalk.red(`Unknown format: "${format}"`));
117
+ console.error(`Available formats: ${Object.keys(FORMATS).join(', ')}`);
118
+ process.exit(1);
119
+ }
120
+ // Resolve source directory
121
+ let sourceDir;
122
+ if (options.dir) {
123
+ sourceDir = resolve(options.dir);
124
+ }
125
+ else {
126
+ // Default: current workspace
127
+ const config = getConfig();
128
+ sourceDir = config.workspace;
129
+ }
130
+ if (!existsSync(sourceDir)) {
131
+ console.error(chalk.red(`Directory not found: ${sourceDir}`));
132
+ process.exit(1);
133
+ }
134
+ // Check for soul files
135
+ const files = readSoulFiles(sourceDir);
136
+ if (files.size === 0) {
137
+ console.error(chalk.red('No soul files found (SOUL.md, IDENTITY.md, etc.)'));
138
+ console.error(`Searched in: ${sourceDir}`);
139
+ process.exit(1);
140
+ }
141
+ const meta = readSoulJson(sourceDir);
142
+ const output = fmt.convert(files, meta);
143
+ const outPath = options.output || fmt.ext;
144
+ writeFileSync(outPath, output, 'utf-8');
145
+ console.log(chalk.green(`✓ Exported to ${chalk.bold(outPath)}`));
146
+ console.log(chalk.dim(` Format: ${fmt.label}`));
147
+ console.log(chalk.dim(` Source: ${sourceDir}`));
148
+ console.log(chalk.dim(` Files included: ${[...files.keys()].join(', ')}`));
149
+ if (format === 'claude-md') {
150
+ console.log('');
151
+ console.log(chalk.cyan('Usage with Claude Cowork:'));
152
+ console.log(chalk.dim(' 1. Copy CLAUDE.md to your Cowork shared folder'));
153
+ console.log(chalk.dim(' 2. Claude will automatically read it as project instructions'));
154
+ console.log('');
155
+ console.log(chalk.cyan('Usage with Claude Code:'));
156
+ console.log(chalk.dim(' 1. Place CLAUDE.md in your project root'));
157
+ console.log(chalk.dim(' 2. Claude Code picks it up automatically'));
158
+ }
159
+ }
160
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function platformCommand(): Promise<void>;
@@ -0,0 +1,37 @@
1
+ import chalk from 'chalk';
2
+ import { detectPlatform, detectAllPlatforms, getPlatformLabel, getKnownPlatformNames } from '../utils/platform.js';
3
+ import { getConfig } from '../utils/config.js';
4
+ export async function platformCommand() {
5
+ const active = detectPlatform(process.env.CLAWSOULS_PLATFORM);
6
+ const all = detectAllPlatforms();
7
+ const config = getConfig();
8
+ console.log(chalk.bold('\n🔍 Agent Platform Detection\n'));
9
+ // Active platform
10
+ console.log(chalk.green('▶ Active:'), getPlatformLabel(active));
11
+ console.log(` Workspace: ${chalk.cyan(config.workspace)}`);
12
+ console.log(` Souls dir: ${chalk.cyan(config.soulsDir)}`);
13
+ console.log(` Restart: ${chalk.dim(active.restartCommand)}`);
14
+ // All detected platforms
15
+ if (all.length > 1) {
16
+ console.log(chalk.bold('\n📦 All detected platforms:'));
17
+ for (const p of all) {
18
+ const isActive = p.name === active.name;
19
+ const marker = isActive ? chalk.green(' ◀ active') : '';
20
+ console.log(` ${getPlatformLabel(p)}${marker}`);
21
+ console.log(` ${chalk.dim(p.workspace)}`);
22
+ }
23
+ }
24
+ else if (all.length === 0) {
25
+ console.log(chalk.yellow('\n⚠ No agent platforms detected.'));
26
+ console.log(chalk.dim(' Defaulting to OpenClaw (~/.openclaw/workspace)'));
27
+ }
28
+ // Help
29
+ console.log(chalk.bold('\n💡 Override:'));
30
+ console.log(` ${chalk.dim('clawsouls --platform zeroclaw use <soul>')} # use ZeroClaw workspace`);
31
+ console.log(` ${chalk.dim('clawsouls --workspace /path/to use <soul>')} # use custom workspace`);
32
+ console.log(` ${chalk.dim('CLAWSOULS_PLATFORM=clawdbot clawsouls use')} # env var override`);
33
+ console.log(chalk.bold('\n🤝 Supported platforms:'));
34
+ console.log(` ${getKnownPlatformNames().join(', ')}, or any custom path`);
35
+ console.log();
36
+ }
37
+ //# sourceMappingURL=platform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/commands/platform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACnH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,kBAAkB,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAE3D,kBAAkB;IAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IAEhE,yBAAyB;IACzB,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACxD,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC;YACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,KAAK,gBAAgB,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;SAAM,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO;IACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,6BAA6B,CAAC,CAAC;IACrG,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,2CAA2C,CAAC,0BAA0B,CAAC,CAAC;IACnG,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,2CAA2C,CAAC,qBAAqB,CAAC,CAAC;IAE9F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,KAAK,qBAAqB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC"}
@@ -1 +1,3 @@
1
- export declare function useCommand(name: string): Promise<void>;
1
+ export declare function useCommand(name: string, opts?: {
2
+ workspace?: string;
3
+ }): Promise<void>;
@@ -1,26 +1,11 @@
1
1
  import chalk from 'chalk';
2
2
  import ora from 'ora';
3
- import { existsSync } from 'fs';
4
- import { join } from 'path';
5
- import { homedir } from 'os';
6
3
  import { StorageManager } from '../storage/manager.js';
7
- function getRestartCommand() {
8
- const platform = process.env.CLAWSOULS_PLATFORM;
9
- if (platform === 'zeroclaw')
10
- return 'zeroclaw gateway restart';
11
- if (platform === 'openclaw')
12
- return 'openclaw gateway restart';
13
- // Auto-detect
14
- const hasZeroClaw = existsSync(join(homedir(), '.zeroclaw'));
15
- const hasOpenClaw = existsSync(join(homedir(), '.openclaw'));
16
- if (hasZeroClaw && !hasOpenClaw)
17
- return 'zeroclaw gateway restart';
18
- return 'openclaw gateway restart';
19
- }
20
- export async function useCommand(name) {
4
+ import { detectPlatform, getPlatformLabel } from '../utils/platform.js';
5
+ export async function useCommand(name, opts) {
21
6
  const spinner = ora(`Switching to soul "${name}"...`).start();
22
7
  try {
23
- const storage = new StorageManager();
8
+ const storage = new StorageManager(opts?.workspace);
24
9
  if (!storage.isInstalled(name)) {
25
10
  spinner.fail(`Soul "${name}" is not installed.\n` +
26
11
  ` Run ${chalk.cyan(`clawsouls install ${name}`)} first.`);
@@ -32,10 +17,10 @@ export async function useCommand(name) {
32
17
  // Apply soul
33
18
  spinner.text = `Applying "${name}"...`;
34
19
  storage.applySoul(name);
35
- const restartCmd = getRestartCommand();
36
- spinner.succeed(`Switched to ${chalk.green(name)}\n` +
20
+ const platform = detectPlatform(process.env.CLAWSOULS_PLATFORM);
21
+ spinner.succeed(`Switched to ${chalk.green(name)} (${getPlatformLabel(platform)})\n` +
37
22
  ` ${chalk.dim('Backup saved. Use')} ${chalk.cyan('clawsouls restore')} ${chalk.dim('to revert.')}\n` +
38
- ` ${chalk.yellow('⚠')} Run ${chalk.cyan(restartCmd)} to apply the new persona.`);
23
+ ` ${chalk.yellow('⚠')} Run ${chalk.cyan(platform.restartCommand)} to apply the new persona.`);
39
24
  }
40
25
  catch (err) {
41
26
  spinner.fail(err.message);
@@ -1 +1 @@
1
- {"version":3,"file":"use.js","sourceRoot":"","sources":["../../src/commands/use.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,SAAS,iBAAiB;IACxB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAChD,IAAI,QAAQ,KAAK,UAAU;QAAE,OAAO,0BAA0B,CAAC;IAC/D,IAAI,QAAQ,KAAK,UAAU;QAAE,OAAO,0BAA0B,CAAC;IAE/D,cAAc;IACd,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;IAC7D,IAAI,WAAW,IAAI,CAAC,WAAW;QAAE,OAAO,0BAA0B,CAAC;IACnE,OAAO,0BAA0B,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,MAAM,OAAO,GAAG,GAAG,CAAC,sBAAsB,IAAI,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;IAE9D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;QAErC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CACV,SAAS,IAAI,uBAAuB;gBACpC,SAAS,KAAK,CAAC,IAAI,CAAC,qBAAqB,IAAI,EAAE,CAAC,SAAS,CAC1D,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,2BAA2B;QAC3B,OAAO,CAAC,IAAI,GAAG,iCAAiC,CAAC;QACjD,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;QAE7C,aAAa;QACb,OAAO,CAAC,IAAI,GAAG,aAAa,IAAI,MAAM,CAAC;QACvC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAExB,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;QACvC,OAAO,CAAC,OAAO,CACb,eAAe,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI;YACpC,KAAK,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI;YACrG,KAAK,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,4BAA4B,CAClF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"use.js","sourceRoot":"","sources":["../../src/commands/use.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExE,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,IAA6B;IAC1E,MAAM,OAAO,GAAG,GAAG,CAAC,sBAAsB,IAAI,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;IAE9D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAEpD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CACV,SAAS,IAAI,uBAAuB;gBACpC,SAAS,KAAK,CAAC,IAAI,CAAC,qBAAqB,IAAI,EAAE,CAAC,SAAS,CAC1D,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,2BAA2B;QAC3B,OAAO,CAAC,IAAI,GAAG,iCAAiC,CAAC;QACjD,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;QAE7C,aAAa;QACb,OAAO,CAAC,IAAI,GAAG,aAAa,IAAI,MAAM,CAAC;QACvC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAExB,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChE,OAAO,CAAC,OAAO,CACb,eAAe,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,gBAAgB,CAAC,QAAQ,CAAC,KAAK;YACpE,KAAK,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI;YACrG,KAAK,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,4BAA4B,CAC/F,CAAC;IACJ,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -10,7 +10,7 @@ export declare class StorageManager {
10
10
  private soulsDir;
11
11
  private workspace;
12
12
  private backupDir;
13
- constructor();
13
+ constructor(workspaceOverride?: string);
14
14
  /** List all installed souls (supports owner/name directories) */
15
15
  listInstalled(): InstalledSoul[];
16
16
  /** Check if a soul is installed (supports owner/name) */
@@ -9,10 +9,10 @@ export class StorageManager {
9
9
  soulsDir;
10
10
  workspace;
11
11
  backupDir;
12
- constructor() {
12
+ constructor(workspaceOverride) {
13
13
  const config = getConfig();
14
14
  this.soulsDir = config.soulsDir;
15
- this.workspace = config.workspace;
15
+ this.workspace = workspaceOverride || config.workspace;
16
16
  this.backupDir = join(this.soulsDir, '_backup');
17
17
  }
18
18
  /** List all installed souls (supports owner/name directories) */
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/storage/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/storage/manager.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,12 @@
1
1
  import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
2
2
  import { join } from 'path';
3
3
  import { homedir } from 'os';
4
+ import { detectPlatform } from './platform.js';
4
5
  const CONFIG_DIR = join(homedir(), '.clawsouls');
5
6
  const CONFIG_FILE = join(CONFIG_DIR, 'config.json');
6
7
  function detectWorkspaceBase() {
7
- const openclawDir = join(homedir(), '.openclaw');
8
- const zeroclawDir = join(homedir(), '.zeroclaw');
9
- const platform = process.env.CLAWSOULS_PLATFORM;
10
- if (platform === 'zeroclaw')
11
- return zeroclawDir;
12
- if (platform === 'openclaw')
13
- return openclawDir;
14
- // Auto-detect
15
- if (existsSync(zeroclawDir) && !existsSync(openclawDir))
16
- return zeroclawDir;
17
- return openclawDir; // default
8
+ const platform = detectPlatform(process.env.CLAWSOULS_PLATFORM);
9
+ return platform.configDir;
18
10
  }
19
11
  const PLATFORM_BASE = detectWorkspaceBase();
20
12
  const DEFAULT_CONFIG = {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAY7B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AACjD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEpD,SAAS,mBAAmB;IAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAEhD,IAAI,QAAQ,KAAK,UAAU;QAAE,OAAO,WAAW,CAAC;IAChD,IAAI,QAAQ,KAAK,UAAU;QAAE,OAAO,WAAW,CAAC;IAEhD,cAAc;IACd,IAAI,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,WAAW,CAAC;IAC5E,OAAO,WAAW,CAAC,CAAC,UAAU;AAChC,CAAC;AAED,MAAM,aAAa,GAAG,mBAAmB,EAAE,CAAC;AAE5C,MAAM,cAAc,GAAoB;IACtC,QAAQ,EAAE,0BAA0B;IACpC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,wDAAwD;IAC1F,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC;IAC3C,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC;CACvC,CAAC;AAEF,MAAM,UAAU,SAAS;IACvB,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC/C,OAAO,EAAE,GAAG,cAAc,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,cAAc,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAgC;IACzD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC;IACzC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAY/C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AACjD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEpD,SAAS,mBAAmB;IAC1B,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAChE,OAAO,QAAQ,CAAC,SAAS,CAAC;AAC5B,CAAC;AAED,MAAM,aAAa,GAAG,mBAAmB,EAAE,CAAC;AAE5C,MAAM,cAAc,GAAoB;IACtC,QAAQ,EAAE,0BAA0B;IACpC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,wDAAwD;IAC1F,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC;IAC3C,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC;CACvC,CAAC;AAEF,MAAM,UAAU,SAAS;IACvB,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC/C,OAAO,EAAE,GAAG,cAAc,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,cAAc,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAgC;IACzD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC;IACzC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;AACH,CAAC"}
@@ -1,8 +1,11 @@
1
+ export type PlatformName = 'openclaw' | 'zeroclaw' | 'clawdbot' | 'moltbot' | 'moldbot' | 'custom';
1
2
  export interface PlatformInfo {
2
- name: 'openclaw' | 'zeroclaw';
3
+ name: PlatformName;
3
4
  workspace: string;
4
5
  restartCommand: string;
5
6
  configDir: string;
6
7
  }
7
8
  export declare function detectPlatform(override?: string): PlatformInfo;
9
+ export declare function detectAllPlatforms(): PlatformInfo[];
8
10
  export declare function getPlatformLabel(platform: PlatformInfo): string;
11
+ export declare function getKnownPlatformNames(): string[];
@@ -1,64 +1,96 @@
1
1
  import { existsSync } from 'fs';
2
2
  import { join } from 'path';
3
3
  import { homedir } from 'os';
4
- const OPENCLAW_DIR = join(homedir(), '.openclaw');
5
- const ZEROCLAW_DIR = join(homedir(), '.zeroclaw');
6
- const OPENCLAW_WORKSPACE = join(OPENCLAW_DIR, 'workspace');
7
- const ZEROCLAW_WORKSPACE = join(ZEROCLAW_DIR, 'workspace');
4
+ /**
5
+ * Known SOUL.md-compatible agent frameworks and their directory conventions.
6
+ * Priority order: OpenClaw (current) > ZeroClaw > legacy (clawdbot > moltbot > moldbot)
7
+ */
8
+ const KNOWN_PLATFORMS = [
9
+ { name: 'openclaw', dir: '.openclaw', restartCmd: 'openclaw gateway restart', label: 'OpenClaw 🦞' },
10
+ { name: 'zeroclaw', dir: '.zeroclaw', restartCmd: 'zeroclaw gateway restart', label: 'ZeroClaw 🦀' },
11
+ { name: 'clawdbot', dir: '.clawdbot', restartCmd: 'clawdbot gateway restart', label: 'Clawdbot 🤖' },
12
+ { name: 'moltbot', dir: '.moltbot', restartCmd: 'moltbot gateway restart', label: 'Moltbot 🐚' },
13
+ { name: 'moldbot', dir: '.moldbot', restartCmd: 'moldbot gateway restart', label: 'Moldbot 🍄' },
14
+ ];
15
+ function getPlatformByName(name) {
16
+ return KNOWN_PLATFORMS.find(p => p.name === name);
17
+ }
8
18
  export function detectPlatform(override) {
9
- if (override === 'zeroclaw') {
10
- return {
11
- name: 'zeroclaw',
12
- workspace: ZEROCLAW_WORKSPACE,
13
- restartCommand: 'zeroclaw gateway restart',
14
- configDir: ZEROCLAW_DIR,
15
- };
19
+ const home = homedir();
20
+ // 1. Explicit override via --platform flag or CLAWSOULS_PLATFORM env
21
+ if (override) {
22
+ const known = getPlatformByName(override);
23
+ if (known) {
24
+ const dir = join(home, known.dir);
25
+ return {
26
+ name: known.name,
27
+ workspace: join(dir, 'workspace'),
28
+ restartCommand: known.restartCmd,
29
+ configDir: dir,
30
+ };
31
+ }
32
+ // Custom path override (e.g., --platform /path/to/agent)
33
+ if (override.startsWith('/') || override.startsWith('~')) {
34
+ const resolved = override.startsWith('~') ? join(home, override.slice(1)) : override;
35
+ return {
36
+ name: 'custom',
37
+ workspace: join(resolved, 'workspace'),
38
+ restartCommand: '# restart your agent manually',
39
+ configDir: resolved,
40
+ };
41
+ }
16
42
  }
17
- if (override === 'openclaw') {
43
+ // 2. Auto-detect: find installed platforms in priority order
44
+ const installed = KNOWN_PLATFORMS.filter(p => existsSync(join(home, p.dir)));
45
+ if (installed.length === 1) {
46
+ const p = installed[0];
47
+ const dir = join(home, p.dir);
18
48
  return {
19
- name: 'openclaw',
20
- workspace: OPENCLAW_WORKSPACE,
21
- restartCommand: 'openclaw gateway restart',
22
- configDir: OPENCLAW_DIR,
49
+ name: p.name,
50
+ workspace: join(dir, 'workspace'),
51
+ restartCommand: p.restartCmd,
52
+ configDir: dir,
23
53
  };
24
54
  }
25
- // Auto-detect
26
- const hasOpenClaw = existsSync(OPENCLAW_DIR);
27
- const hasZeroClaw = existsSync(ZEROCLAW_DIR);
28
- if (hasOpenClaw && !hasZeroClaw) {
55
+ if (installed.length > 1) {
56
+ // Multiple found — prefer by priority order (OpenClaw first)
57
+ const p = installed[0];
58
+ const dir = join(home, p.dir);
29
59
  return {
30
- name: 'openclaw',
31
- workspace: OPENCLAW_WORKSPACE,
32
- restartCommand: 'openclaw gateway restart',
33
- configDir: OPENCLAW_DIR,
60
+ name: p.name,
61
+ workspace: join(dir, 'workspace'),
62
+ restartCommand: p.restartCmd,
63
+ configDir: dir,
34
64
  };
35
65
  }
36
- if (hasZeroClaw && !hasOpenClaw) {
37
- return {
38
- name: 'zeroclaw',
39
- workspace: ZEROCLAW_WORKSPACE,
40
- restartCommand: 'zeroclaw gateway restart',
41
- configDir: ZEROCLAW_DIR,
42
- };
43
- }
44
- if (hasOpenClaw && hasZeroClaw) {
45
- // Both exist — prefer OpenClaw (default), user can override with --platform
46
- return {
47
- name: 'openclaw',
48
- workspace: OPENCLAW_WORKSPACE,
49
- restartCommand: 'openclaw gateway restart',
50
- configDir: OPENCLAW_DIR,
51
- };
52
- }
53
- // Neither — default to OpenClaw
66
+ // 3. None found — default to OpenClaw
67
+ const defaultDir = join(home, '.openclaw');
54
68
  return {
55
69
  name: 'openclaw',
56
- workspace: OPENCLAW_WORKSPACE,
70
+ workspace: join(defaultDir, 'workspace'),
57
71
  restartCommand: 'openclaw gateway restart',
58
- configDir: OPENCLAW_DIR,
72
+ configDir: defaultDir,
59
73
  };
60
74
  }
75
+ export function detectAllPlatforms() {
76
+ const home = homedir();
77
+ return KNOWN_PLATFORMS
78
+ .filter(p => existsSync(join(home, p.dir)))
79
+ .map(p => {
80
+ const dir = join(home, p.dir);
81
+ return {
82
+ name: p.name,
83
+ workspace: join(dir, 'workspace'),
84
+ restartCommand: p.restartCmd,
85
+ configDir: dir,
86
+ };
87
+ });
88
+ }
61
89
  export function getPlatformLabel(platform) {
62
- return platform.name === 'zeroclaw' ? 'ZeroClaw 🦀' : 'OpenClaw 🦞';
90
+ const known = KNOWN_PLATFORMS.find(p => p.name === platform.name);
91
+ return known?.label ?? `${platform.name} 🔧`;
92
+ }
93
+ export function getKnownPlatformNames() {
94
+ return KNOWN_PLATFORMS.map(p => p.name);
63
95
  }
64
96
  //# sourceMappingURL=platform.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/utils/platform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAS7B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AAClD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AAClD,MAAM,kBAAkB,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AAC3D,MAAM,kBAAkB,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AAE3D,MAAM,UAAU,cAAc,CAAC,QAAiB;IAC9C,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,SAAS,EAAE,kBAAkB;YAC7B,cAAc,EAAE,0BAA0B;YAC1C,SAAS,EAAE,YAAY;SACxB,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,SAAS,EAAE,kBAAkB;YAC7B,cAAc,EAAE,0BAA0B;YAC1C,SAAS,EAAE,YAAY;SACxB,CAAC;IACJ,CAAC;IAED,cAAc;IACd,MAAM,WAAW,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IAE7C,IAAI,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC;QAChC,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,SAAS,EAAE,kBAAkB;YAC7B,cAAc,EAAE,0BAA0B;YAC1C,SAAS,EAAE,YAAY;SACxB,CAAC;IACJ,CAAC;IAED,IAAI,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC;QAChC,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,SAAS,EAAE,kBAAkB;YAC7B,cAAc,EAAE,0BAA0B;YAC1C,SAAS,EAAE,YAAY;SACxB,CAAC;IACJ,CAAC;IAED,IAAI,WAAW,IAAI,WAAW,EAAE,CAAC;QAC/B,4EAA4E;QAC5E,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,SAAS,EAAE,kBAAkB;YAC7B,cAAc,EAAE,0BAA0B;YAC1C,SAAS,EAAE,YAAY;SACxB,CAAC;IACJ,CAAC;IAED,gCAAgC;IAChC,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,SAAS,EAAE,kBAAkB;QAC7B,cAAc,EAAE,0BAA0B;QAC1C,SAAS,EAAE,YAAY;KACxB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAsB;IACrD,OAAO,QAAQ,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC;AACtE,CAAC"}
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/utils/platform.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clawsouls",
3
- "version": "0.4.1",
3
+ "version": "0.4.3",
4
4
  "description": "CLI for ClawSouls — AI agent persona sharing platform",
5
5
  "main": "dist/index.js",
6
6
  "bin": {