clawsouls 0.6.4 → 0.6.6
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/dist/commands/install.js +100 -7
- package/dist/commands/install.js.map +1 -1
- package/package.json +1 -1
package/dist/commands/install.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import ora from 'ora';
|
|
3
3
|
import { StorageManager } from '../storage/manager.js';
|
|
4
|
-
import { writeFileSync } from 'fs';
|
|
4
|
+
import { writeFileSync, readFileSync, existsSync, mkdirSync } from 'fs';
|
|
5
5
|
import { join } from 'path';
|
|
6
6
|
import { ensureDir } from '../utils/config.js';
|
|
7
7
|
const API_BASE = 'https://clawsouls.ai/api/v1';
|
|
@@ -13,6 +13,78 @@ function parseSoulId(input) {
|
|
|
13
13
|
}
|
|
14
14
|
return { name: nameWithOwner, version };
|
|
15
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Apply soul to a specific platform in the current working directory.
|
|
18
|
+
* For non-OpenClaw platforms, generates the appropriate config file(s).
|
|
19
|
+
*/
|
|
20
|
+
function applyToPlatform(platform, soulDir, manifest) {
|
|
21
|
+
const cwd = process.cwd();
|
|
22
|
+
const fileMap = manifest.files || {};
|
|
23
|
+
// Read all soul files
|
|
24
|
+
const soulContent = {};
|
|
25
|
+
for (const [key, filename] of Object.entries(fileMap)) {
|
|
26
|
+
if (typeof filename !== 'string')
|
|
27
|
+
continue;
|
|
28
|
+
const src = join(soulDir, filename);
|
|
29
|
+
if (existsSync(src)) {
|
|
30
|
+
soulContent[key] = readFileSync(src, 'utf-8');
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const soulText = soulContent['soul'] || '';
|
|
34
|
+
const identityText = soulContent['identity'] || '';
|
|
35
|
+
const agentsText = soulContent['agents'] || '';
|
|
36
|
+
const styleText = soulContent['style'] || '';
|
|
37
|
+
const heartbeatText = soulContent['heartbeat'] || '';
|
|
38
|
+
// Build combined content
|
|
39
|
+
const sections = [];
|
|
40
|
+
if (soulText)
|
|
41
|
+
sections.push(soulText);
|
|
42
|
+
if (identityText)
|
|
43
|
+
sections.push(`\n---\n\n${identityText}`);
|
|
44
|
+
if (agentsText)
|
|
45
|
+
sections.push(`\n---\n\n${agentsText}`);
|
|
46
|
+
if (styleText)
|
|
47
|
+
sections.push(`\n---\n\n${styleText}`);
|
|
48
|
+
if (heartbeatText)
|
|
49
|
+
sections.push(`\n---\n\n${heartbeatText}`);
|
|
50
|
+
const combined = sections.join('\n');
|
|
51
|
+
switch (platform) {
|
|
52
|
+
case 'claude-code': {
|
|
53
|
+
const target = join(cwd, 'CLAUDE.md');
|
|
54
|
+
writeFileSync(target, combined, 'utf-8');
|
|
55
|
+
return target;
|
|
56
|
+
}
|
|
57
|
+
case 'cursor': {
|
|
58
|
+
const rulesDir = join(cwd, '.cursor', 'rules');
|
|
59
|
+
mkdirSync(rulesDir, { recursive: true });
|
|
60
|
+
// Write individual files
|
|
61
|
+
if (soulText)
|
|
62
|
+
writeFileSync(join(rulesDir, 'soul.md'), soulText, 'utf-8');
|
|
63
|
+
if (identityText)
|
|
64
|
+
writeFileSync(join(rulesDir, 'identity.md'), identityText, 'utf-8');
|
|
65
|
+
if (agentsText)
|
|
66
|
+
writeFileSync(join(rulesDir, 'agents.md'), agentsText, 'utf-8');
|
|
67
|
+
if (styleText)
|
|
68
|
+
writeFileSync(join(rulesDir, 'style.md'), styleText, 'utf-8');
|
|
69
|
+
return rulesDir;
|
|
70
|
+
}
|
|
71
|
+
case 'windsurf': {
|
|
72
|
+
const target = join(cwd, '.windsurfrules');
|
|
73
|
+
writeFileSync(target, combined, 'utf-8');
|
|
74
|
+
return target;
|
|
75
|
+
}
|
|
76
|
+
case 'openclaw': {
|
|
77
|
+
// Delegate to existing useCommand for OpenClaw workspace
|
|
78
|
+
return ''; // Signal to use existing flow
|
|
79
|
+
}
|
|
80
|
+
default: {
|
|
81
|
+
// Unknown platform — write CLAUDE.md as fallback
|
|
82
|
+
const target = join(cwd, 'CLAUDE.md');
|
|
83
|
+
writeFileSync(target, combined, 'utf-8');
|
|
84
|
+
return target;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
16
88
|
export async function installCommand(nameWithVersion, options) {
|
|
17
89
|
const { owner, name, version } = parseSoulId(nameWithVersion);
|
|
18
90
|
const fullName = owner ? `${owner}/${name}` : name;
|
|
@@ -50,16 +122,37 @@ export async function installCommand(nameWithVersion, options) {
|
|
|
50
122
|
const displayName = bundle.manifest?.displayName || name;
|
|
51
123
|
const ver = bundle.version || bundle.manifest?.version || '?';
|
|
52
124
|
if (options.use) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
125
|
+
if (options.use === 'openclaw') {
|
|
126
|
+
// Use existing OpenClaw flow
|
|
127
|
+
spinner.succeed(`Installed ${chalk.green(displayName)} v${ver}`);
|
|
128
|
+
process.env.CLAWSOULS_PLATFORM = options.use;
|
|
129
|
+
const { useCommand } = await import('./use.js');
|
|
130
|
+
await useCommand(storageKey);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
// Platform-specific export to cwd
|
|
134
|
+
spinner.text = `Applying to ${options.use}...`;
|
|
135
|
+
// Prefer local soul.json (has full files map) over bundle manifest (may be stripped)
|
|
136
|
+
const localManifestPath = join(soulDir, 'soul.json');
|
|
137
|
+
const manifest = existsSync(localManifestPath)
|
|
138
|
+
? JSON.parse(readFileSync(localManifestPath, 'utf-8'))
|
|
139
|
+
: bundle.manifest;
|
|
140
|
+
const target = applyToPlatform(options.use, soulDir, manifest);
|
|
141
|
+
const platformLabels = {
|
|
142
|
+
'claude-code': 'Claude Code',
|
|
143
|
+
'cursor': 'Cursor',
|
|
144
|
+
'windsurf': 'Windsurf',
|
|
145
|
+
};
|
|
146
|
+
const label = platformLabels[options.use] || options.use;
|
|
147
|
+
spinner.succeed(`Installed ${chalk.green(displayName)} v${ver} → ${chalk.cyan(label)}\n` +
|
|
148
|
+
` ${chalk.dim('Applied to:')} ${target}\n` +
|
|
149
|
+
` ${chalk.yellow('⚠')} Restart your editor to apply the new persona.`);
|
|
150
|
+
}
|
|
58
151
|
}
|
|
59
152
|
else {
|
|
60
153
|
spinner.succeed(`Installed ${chalk.green(displayName)} v${ver}\n` +
|
|
61
154
|
` ${chalk.dim(bundle.manifest?.description || '')}\n` +
|
|
62
|
-
`
|
|
155
|
+
` Activate with: ${chalk.cyan(`clawsouls install ${storageKey} --use claude-code`)}`);
|
|
63
156
|
}
|
|
64
157
|
}
|
|
65
158
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.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,aAAa,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|