clawsouls 0.2.8 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # 🧠 ClawSouls CLI v0.2.7
1
+ # 🧠 ClawSouls CLI v0.2.9
2
2
 
3
3
  **Give your AI a soul.** Install, manage, and switch AI agent personas for [OpenClaw](https://github.com/openclaw/openclaw).
4
4
 
@@ -15,10 +15,10 @@ Browse available souls at [clawsouls.ai](https://clawsouls.ai).
15
15
 
16
16
  ```bash
17
17
  # Install a soul (owner/name format)
18
- npx clawsouls install clawsouls/brad
18
+ npx clawsouls install clawsouls/surgical-coder
19
19
 
20
20
  # Activate it (backs up your current workspace)
21
- npx clawsouls use brad
21
+ npx clawsouls use surgical-coder
22
22
 
23
23
  # Restart your OpenClaw session — done!
24
24
  ```
@@ -49,15 +49,15 @@ Creates a directory with `soul.json`, `SOUL.md`, `IDENTITY.md`, `AGENTS.md`, `HE
49
49
 
50
50
  ### `clawsouls install <owner/name[@version]>`
51
51
 
52
- Download and install a soul from the registry. Uses `owner/name` format (e.g., `clawsouls/brad`). Optionally specify a version with `@version` (e.g., `clawsouls/brad@0.1.0`). Without a version, installs the latest.
52
+ 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
53
 
54
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
55
 
56
56
  ```bash
57
57
  clawsouls install clawsouls/minimalist
58
58
  clawsouls install clawsouls/devops-veteran
59
- clawsouls install clawsouls/brad --force # overwrite existing
60
- clawsouls install clawsouls/brad@0.1.0 # specific version
59
+ clawsouls install clawsouls/surgical-coder --force # overwrite existing
60
+ clawsouls install clawsouls/surgical-coder@0.1.0 # specific version
61
61
  ```
62
62
 
63
63
  ### `clawsouls use <name>`
@@ -145,7 +145,7 @@ Popular picks:
145
145
 
146
146
  | Soul | Category | Description |
147
147
  |------|----------|-------------|
148
- | šŸ…±ļø **Brad** | Engineering | Formal, project-focused development partner |
148
+ | šŸ”¬ **Surgical Coder** | Engineering | Karpathy-inspired surgical coding precision |
149
149
  | šŸ”¬ **Surgical Coder** | Engineering | Disciplined coding agent inspired by Karpathy's CLAUDE.md |
150
150
  | šŸ”§ **DevOps Veteran** | DevOps | Battle-scarred infrastructure engineer |
151
151
  | šŸŽ® **GameDev Mentor** | Game Dev | Experienced game developer and mentor |
@@ -177,7 +177,7 @@ The spec is open — see [Soul Spec](https://github.com/clawsouls/clawsouls/blob
177
177
  ```
178
178
  ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” install ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
179
179
  │ clawsouls.ai │ ───────────→ │ ~/.openclaw/ │
180
- │ (API Registry) │ GET /api/ │ souls/brad/ │
180
+ │ (API Registry) │ GET /api/ │ souls/surgical-coder/ │
181
181
  ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ v1/souls/ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜
182
182
  ā–² owner/name │ use
183
183
  │ ā–¼
@@ -37,7 +37,8 @@ program
37
37
  program
38
38
  .command('publish <dir>')
39
39
  .description('Publish a soul package to the registry')
40
- .action(publishCommand);
40
+ .option('--confirm', 'Skip interactive confirmation prompt')
41
+ .action((dir, opts) => publishCommand(dir, opts));
41
42
  program
42
43
  .command('login <token>')
43
44
  .description('Save API token for registry authentication')
@@ -58,7 +59,6 @@ program
58
59
  .command('validate [dir]')
59
60
  .alias('check')
60
61
  .description('Validate a soul package against the spec')
61
- .option('-s, --spec <version>', 'Spec version to validate against (e.g., 0.1, 0.2). Default: latest')
62
- .action((dir, options) => validateCommand(dir, options));
62
+ .action((dir) => validateCommand(dir));
63
63
  program.parse();
64
64
  //# 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;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,uCAAuC,CAAC;KACpD,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,cAAc,CAAC,CAAC;AAE1B,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,sBAAsB,EAAE,oEAAoE,CAAC;KACpG,MAAM,CAAC,CAAC,GAAY,EAAE,OAA2B,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;AAExF,OAAO,CAAC,KAAK,EAAE,CAAC"}
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;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,uCAAuC,CAAC;KACpD,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,CAAC,GAAY,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;AAElD,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -1,107 +1,75 @@
1
1
  import chalk from 'chalk';
2
- import { writeFileSync, mkdirSync, existsSync } from 'fs';
2
+ import { existsSync, mkdirSync, writeFileSync } from 'fs';
3
3
  import { join } from 'path';
4
+ const API_BASE = 'https://clawsouls.ai/api/v1';
5
+ // Minimal fallback template if server is unreachable
6
+ const FALLBACK_FILES = {
7
+ 'soul.json': JSON.stringify({
8
+ specVersion: '0.3',
9
+ name: 'my-soul',
10
+ displayName: 'My Soul',
11
+ version: '1.0.0',
12
+ description: 'A custom AI persona',
13
+ author: { name: 'Your Name', github: 'your-github' },
14
+ license: 'Apache-2.0',
15
+ tags: ['custom'],
16
+ category: 'general',
17
+ files: { soul: 'SOUL.md', identity: 'IDENTITY.md', agents: 'AGENTS.md', heartbeat: 'HEARTBEAT.md' },
18
+ }, null, 2),
19
+ 'SOUL.md': '# My Soul\n\nDescribe your AI persona here.\n',
20
+ 'IDENTITY.md': '# My Soul\n\n- **Name:** My Soul\n- **Emoji:** šŸ¤–\n',
21
+ 'AGENTS.md': '# Workflow\n\n## Rules\n- Be helpful\n',
22
+ 'HEARTBEAT.md': '# Heartbeat\n',
23
+ 'README.md': '# My Soul\n\nA custom AI persona for OpenClaw.\n',
24
+ };
4
25
  export async function initCommand(name) {
5
26
  const soulName = name || 'my-soul';
6
27
  const dir = join(process.cwd(), soulName);
7
28
  if (existsSync(dir)) {
8
- console.log(chalk.red(`Directory "${soulName}" already exists.`));
9
- return;
29
+ console.error(chalk.red(`Directory already exists: ${soulName}/`));
30
+ process.exit(1);
31
+ }
32
+ // Fetch template from server
33
+ let files;
34
+ try {
35
+ const res = await fetch(`${API_BASE}/template?spec=0.3`);
36
+ if (res.ok) {
37
+ const data = await res.json();
38
+ files = data.files;
39
+ }
40
+ else {
41
+ files = FALLBACK_FILES;
42
+ }
43
+ }
44
+ catch {
45
+ files = FALLBACK_FILES;
10
46
  }
11
47
  mkdirSync(dir, { recursive: true });
12
- // soul.json
13
- const meta = {
14
- name: soulName,
15
- displayName: soulName.split('-').map(w => w[0].toUpperCase() + w.slice(1)).join(' '),
16
- version: '1.0.0',
17
- description: 'Describe your soul in one sentence.',
18
- author: {
19
- name: 'Your Name',
20
- github: 'your-github',
21
- },
22
- license: 'Apache-2.0',
23
- tags: [],
24
- category: 'work/engineering',
25
- compatibility: {
26
- openclaw: '>=2026.2.0',
27
- },
28
- files: {
29
- soul: 'SOUL.md',
30
- identity: 'IDENTITY.md',
31
- agents: 'AGENTS.md',
32
- heartbeat: 'HEARTBEAT.md',
33
- },
34
- skills: [],
35
- };
36
- writeFileSync(join(dir, 'soul.json'), JSON.stringify(meta, null, 2));
37
- // SOUL.md
38
- writeFileSync(join(dir, 'SOUL.md'), `# ${meta.displayName}
39
-
40
- Describe who this AI persona is.
41
-
42
- ## Personality
43
-
44
- - **Tone**:
45
- - **Style**:
46
- - **Philosophy**:
47
-
48
- ## Principles
49
-
50
- 1. ...
51
- 2. ...
52
- 3. ...
53
-
54
- ## Communication
55
-
56
- - ...
57
-
58
- ## Boundaries
59
-
60
- - ...
61
- `);
62
- // IDENTITY.md
63
- writeFileSync(join(dir, 'IDENTITY.md'), `# ${meta.displayName}
64
-
65
- - **Name:**
66
- - **Creature:**
67
- - **Vibe:**
68
- - **Emoji:**
69
- `);
70
- // AGENTS.md
71
- writeFileSync(join(dir, 'AGENTS.md'), `# ${meta.displayName} — Workflow
72
-
73
- ## Every Session
74
- 1. Read SOUL.md, USER.md, memory files
75
- 2. ...
76
-
77
- ## Work Rules
78
- - ...
79
-
80
- ## Safety
81
- - ...
82
-
83
- ## Heartbeats
84
- - ...
85
- `);
86
- // HEARTBEAT.md
87
- writeFileSync(join(dir, 'HEARTBEAT.md'), '# Heartbeat Checks\n# Add your periodic checks here\n');
88
- // README.md
89
- writeFileSync(join(dir, 'README.md'), `# ${meta.displayName}
90
-
91
- Short description.
92
-
93
- **Best for:** ...
94
-
95
- **Personality:** ...
96
-
97
- **Skills:** ...
98
- `);
99
- console.log();
100
- console.log(chalk.green(`āœ… Soul "${soulName}" created!`));
101
- console.log();
102
- console.log(` ${chalk.cyan('Edit:')} cd ${soulName} && edit SOUL.md`);
103
- console.log(` ${chalk.cyan('Test:')} clawsouls use ${soulName} (after install)`);
104
- console.log(` ${chalk.cyan('Publish:')} clawsouls publish (coming soon)`);
105
- console.log();
48
+ // Replace placeholder name
49
+ for (const [filename, content] of Object.entries(files)) {
50
+ let processed = content;
51
+ if (filename === 'soul.json') {
52
+ try {
53
+ const manifest = JSON.parse(content);
54
+ manifest.name = soulName;
55
+ manifest.displayName = soulName.split('-').map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join(' ');
56
+ processed = JSON.stringify(manifest, null, 2);
57
+ }
58
+ catch {
59
+ processed = content.replace(/"name":\s*"my-soul"/, `"name": "${soulName}"`);
60
+ }
61
+ }
62
+ writeFileSync(join(dir, filename), processed, 'utf-8');
63
+ }
64
+ console.log(chalk.green(`\nāœ“ Created soul scaffold: ${soulName}/\n`));
65
+ console.log(` Files:`);
66
+ for (const filename of Object.keys(files)) {
67
+ console.log(chalk.dim(` ${filename}`));
68
+ }
69
+ console.log(`\n Next steps:`);
70
+ console.log(chalk.cyan(` cd ${soulName}`));
71
+ console.log(chalk.cyan(` # Edit SOUL.md and other files`));
72
+ console.log(chalk.cyan(` clawsouls validate .`));
73
+ console.log(chalk.cyan(` clawsouls publish .`));
106
74
  }
107
75
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,10 @@
1
1
  import chalk from 'chalk';
2
2
  import ora from 'ora';
3
- import { RegistryClient } from '../registry/client.js';
4
3
  import { StorageManager } from '../storage/manager.js';
5
4
  import { writeFileSync } from 'fs';
6
5
  import { join } from 'path';
7
6
  import { ensureDir } from '../utils/config.js';
8
- /**
9
- * Parse a soul identifier. Supports:
10
- * owner/name
11
- * owner/name@version
12
- * name (legacy, no owner)
13
- * name@version (legacy)
14
- */
7
+ const API_BASE = 'https://clawsouls.ai/api/v1';
15
8
  function parseSoulId(input) {
16
9
  const [nameWithOwner, version] = input.split('@');
17
10
  if (nameWithOwner.includes('/')) {
@@ -26,54 +19,38 @@ export async function installCommand(nameWithVersion, options) {
26
19
  const spinner = ora(`Installing soul "${fullName}"...`).start();
27
20
  try {
28
21
  const storage = new StorageManager();
29
- const registry = new RegistryClient();
30
- // Use owner/name as storage key
31
22
  const storageKey = owner ? `${owner}/${name}` : name;
32
23
  if (storage.isInstalled(storageKey) && !options.force) {
33
24
  spinner.fail(`Soul "${fullName}" is already installed. Use ${chalk.yellow('--force')} to overwrite.`);
34
25
  process.exit(1);
35
26
  }
36
- spinner.text = `Fetching "${fullName}"${version ? `@${version}` : ''} metadata...`;
37
- const meta = await registry.getSoulMeta(name, owner, version);
38
- spinner.text = `Downloading "${fullName}" files...`;
39
- const fileList = await registry.getSoulFiles(name, owner, version);
40
- const files = new Map();
41
- for (const filename of fileList) {
42
- try {
43
- const content = await registry.downloadFile(name, filename, owner, version);
44
- files.set(filename, content);
45
- }
46
- catch {
47
- // Skip missing optional files
27
+ spinner.text = `Downloading "${fullName}"${version ? `@${version}` : ''}...`;
28
+ // Use bundle API — single request for all files
29
+ const bundleOwner = owner || 'clawsouls';
30
+ const vq = version ? `?version=${version}` : '';
31
+ const res = await fetch(`${API_BASE}/bundle/${bundleOwner}/${name}${vq}`);
32
+ if (!res.ok) {
33
+ const data = await res.json().catch(() => ({ error: 'Unknown error' }));
34
+ if (res.status === 404) {
35
+ throw new Error(`Soul "${fullName}" not found`);
48
36
  }
37
+ throw new Error(data.error || `Server error: ${res.status}`);
49
38
  }
39
+ const bundle = await res.json();
50
40
  spinner.text = `Saving to local storage...`;
51
41
  const soulDir = storage.getSoulDir(storageKey);
52
42
  ensureDir(soulDir);
53
- for (const [filename, content] of files) {
43
+ for (const [filename, content] of Object.entries(bundle.files)) {
44
+ if (typeof content !== 'string')
45
+ continue;
54
46
  const filePath = join(soulDir, filename);
55
47
  ensureDir(join(filePath, '..'));
56
48
  writeFileSync(filePath, content, 'utf-8');
57
49
  }
58
- if (!files.has('soul.json') && !files.has('clawsoul.json')) {
59
- const manifest = {
60
- name: meta.name || name,
61
- displayName: meta.displayName || name,
62
- version: meta.version || '1.0.0',
63
- description: meta.description || '',
64
- category: meta.category || '',
65
- tags: meta.tags || [],
66
- files: Object.fromEntries([...files.keys()]
67
- .filter(f => f.endsWith('.md'))
68
- .map(f => {
69
- const key = f.replace('.md', '').toLowerCase();
70
- return [key, f];
71
- })),
72
- };
73
- writeFileSync(join(soulDir, 'soul.json'), JSON.stringify(manifest, null, 2), 'utf-8');
74
- }
75
- spinner.succeed(`Installed ${chalk.green(meta.displayName || name)} v${meta.version || '?'}\n` +
76
- ` ${chalk.dim(meta.description || '')}\n` +
50
+ const displayName = bundle.manifest?.displayName || name;
51
+ const ver = bundle.version || bundle.manifest?.version || '?';
52
+ spinner.succeed(`Installed ${chalk.green(displayName)} v${ver}\n` +
53
+ ` ${chalk.dim(bundle.manifest?.description || '')}\n` +
77
54
  ` Run ${chalk.cyan(`clawsouls use ${storageKey}`)} to activate.`);
78
55
  }
79
56
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
@@ -1 +1,3 @@
1
- export declare function publishCommand(dir: string): Promise<void>;
1
+ export declare function publishCommand(dir: string, options?: {
2
+ confirm?: boolean;
3
+ }): Promise<void>;
@@ -1,6 +1,6 @@
1
1
  import { readFileSync, existsSync, readdirSync, statSync } from 'fs';
2
2
  import { join } from 'path';
3
- import { ClawSoulSchema } from '../utils/validate.js';
3
+ import { createInterface } from 'readline';
4
4
  const API_BASE = 'https://clawsouls.ai/api/v1';
5
5
  function getToken() {
6
6
  if (process.env.CLAWSOULS_TOKEN)
@@ -23,7 +23,44 @@ async function getUsername(token) {
23
23
  const data = await res.json();
24
24
  return data.user?.username || data.username || data.user?.name || data.name;
25
25
  }
26
- export async function publishCommand(dir) {
26
+ function askConfirmation(question) {
27
+ return new Promise((resolve) => {
28
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
29
+ rl.question(question, (answer) => {
30
+ rl.close();
31
+ resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes');
32
+ });
33
+ });
34
+ }
35
+ function collectFiles(soulDir) {
36
+ const files = {};
37
+ const entries = readdirSync(soulDir);
38
+ for (const entry of entries) {
39
+ const fullPath = join(soulDir, entry);
40
+ if (statSync(fullPath).isFile() && entry !== 'soul.json' && entry !== 'clawsoul.json') {
41
+ try {
42
+ files[entry] = readFileSync(fullPath, 'utf-8');
43
+ }
44
+ catch { }
45
+ }
46
+ }
47
+ for (const entry of entries) {
48
+ const fullPath = join(soulDir, entry);
49
+ if (statSync(fullPath).isDirectory()) {
50
+ for (const sub of readdirSync(fullPath)) {
51
+ const subPath = join(fullPath, sub);
52
+ if (statSync(subPath).isFile()) {
53
+ try {
54
+ files[`${entry}/${sub}`] = readFileSync(subPath, 'utf-8');
55
+ }
56
+ catch { }
57
+ }
58
+ }
59
+ }
60
+ }
61
+ return files;
62
+ }
63
+ export async function publishCommand(dir, options) {
27
64
  const soulDir = dir.startsWith('/') ? dir : join(process.cwd(), dir);
28
65
  if (!existsSync(soulDir) || !statSync(soulDir).isDirectory()) {
29
66
  console.error(`Error: "${dir}" is not a directory`);
@@ -33,8 +70,7 @@ export async function publishCommand(dir) {
33
70
  const legacyPath = join(soulDir, 'clawsoul.json');
34
71
  const manifestPath = existsSync(soulJsonPath) ? soulJsonPath : legacyPath;
35
72
  if (!existsSync(manifestPath)) {
36
- console.error(`Error: soul.json not found in "${dir}"`);
37
- console.error('Run "clawsouls init" to create one, or add it manually.');
73
+ console.error('Error: soul.json not found. Run "clawsouls init" to create one.');
38
74
  process.exit(1);
39
75
  }
40
76
  if (manifestPath === legacyPath) {
@@ -44,30 +80,18 @@ export async function publishCommand(dir) {
44
80
  try {
45
81
  manifest = JSON.parse(readFileSync(manifestPath, 'utf-8'));
46
82
  }
47
- catch (err) {
83
+ catch {
48
84
  console.error('Error: Invalid soul.json');
49
85
  process.exit(1);
50
86
  }
51
- // Validate against spec
52
- const validation = ClawSoulSchema.safeParse(manifest);
53
- if (!validation.success) {
54
- console.error('Error: soul.json validation failed:');
55
- for (const issue of validation.error.issues) {
56
- console.error(` - ${issue.path.join('.')}: ${issue.message}`);
57
- }
58
- process.exit(1);
59
- }
60
87
  const token = getToken();
61
88
  if (!token) {
62
- console.error('Error: Authentication required.');
63
- console.error('');
89
+ console.error('Error: Authentication required.\n');
64
90
  console.error('Log in with your API token:');
65
- console.error(' clawsouls login <token>');
66
- console.error('');
91
+ console.error(' clawsouls login <token>\n');
67
92
  console.error('Get a token at: https://clawsouls.ai/dashboard');
68
93
  process.exit(1);
69
94
  }
70
- // Get the authenticated user's username for namespacing
71
95
  let owner;
72
96
  try {
73
97
  owner = await getUsername(token);
@@ -76,36 +100,16 @@ export async function publishCommand(dir) {
76
100
  console.error(`Error: ${err.message}`);
77
101
  process.exit(1);
78
102
  }
79
- // The soul name in manifest should be just the name (no owner prefix)
80
- const soulName = manifest.name.includes('/') ? manifest.name.split('/')[1] : manifest.name;
81
- manifest.name = soulName;
82
- // Read all files
83
- const files = {};
84
- const entries = readdirSync(soulDir);
85
- for (const entry of entries) {
86
- const fullPath = join(soulDir, entry);
87
- if (statSync(fullPath).isFile() && entry !== 'soul.json' && entry !== 'clawsoul.json') {
88
- try {
89
- files[entry] = readFileSync(fullPath, 'utf-8');
90
- }
91
- catch { }
92
- }
93
- }
94
- for (const entry of entries) {
95
- const fullPath = join(soulDir, entry);
96
- if (statSync(fullPath).isDirectory()) {
97
- const subEntries = readdirSync(fullPath);
98
- for (const subEntry of subEntries) {
99
- const subPath = join(fullPath, subEntry);
100
- if (statSync(subPath).isFile()) {
101
- try {
102
- files[`${entry}/${subEntry}`] = readFileSync(subPath, 'utf-8');
103
- }
104
- catch { }
105
- }
106
- }
103
+ if (!options?.confirm) {
104
+ const confirmed = await askConfirmation('Do you confirm this is your original work or you have the rights to distribute it? (y/N) ');
105
+ if (!confirmed) {
106
+ console.error('Publish cancelled.');
107
+ process.exit(1);
107
108
  }
108
109
  }
110
+ const soulName = manifest.name.includes('/') ? manifest.name.split('/')[1] : manifest.name;
111
+ manifest.name = soulName;
112
+ const files = collectFiles(soulDir);
109
113
  const fileCount = Object.keys(files).length;
110
114
  console.log(`Publishing ${owner}/${soulName}@${manifest.version || '0.1.0'}...`);
111
115
  console.log(` ${fileCount} files`);
@@ -131,10 +135,8 @@ export async function publishCommand(dir) {
131
135
  console.log(`\nāœ… Published successfully!`);
132
136
  console.log(` URL: ${data.url}`);
133
137
  if (data.warnings?.length) {
134
- console.log(` Warnings:`);
135
- for (const w of data.warnings) {
138
+ for (const w of data.warnings)
136
139
  console.log(` āš ļø ${w}`);
137
- }
138
140
  }
139
141
  }
140
142
  catch (err) {
@@ -142,5 +144,4 @@ export async function publishCommand(dir) {
142
144
  process.exit(1);
143
145
  }
144
146
  }
145
- // loginCommand moved to login.ts
146
147
  //# sourceMappingURL=publish.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1 @@
1
- export declare function validateCommand(dir?: string, options?: {
2
- spec?: string;
3
- }): Promise<void>;
1
+ export declare function validateCommand(dir?: string): Promise<void>;