mirror of
https://github.com/qwibitai/nanoclaw.git
synced 2026-06-04 10:14:47 +08:00
Merge pull request #2563 from kky/pr/setup-register-scope
fix(setup-register): scope --assistant-name to the registered group only
This commit is contained in:
+34
-31
@@ -194,7 +194,12 @@ export async function run(args: string[]): Promise<void> {
|
|||||||
|
|
||||||
// 4. Send onboarding message — only on first wiring, not re-registration
|
// 4. Send onboarding message — only on first wiring, not re-registration
|
||||||
if (newlyWired) {
|
if (newlyWired) {
|
||||||
const { session } = resolveSession(agentGroup.id, messagingGroup.id, null, parsed.sessionMode as 'shared' | 'per-thread' | 'agent-shared');
|
const { session } = resolveSession(
|
||||||
|
agentGroup.id,
|
||||||
|
messagingGroup.id,
|
||||||
|
null,
|
||||||
|
parsed.sessionMode as 'shared' | 'per-thread' | 'agent-shared',
|
||||||
|
);
|
||||||
writeSessionMessage(agentGroup.id, session.id, {
|
writeSessionMessage(agentGroup.id, session.id, {
|
||||||
id: generateId('onboard'),
|
id: generateId('onboard'),
|
||||||
kind: 'task',
|
kind: 'task',
|
||||||
@@ -208,40 +213,38 @@ export async function run(args: string[]): Promise<void> {
|
|||||||
log.info('Onboarding message written', { sessionId: session.id, channel: parsed.channel });
|
log.info('Onboarding message written', { sessionId: session.id, channel: parsed.channel });
|
||||||
}
|
}
|
||||||
|
|
||||||
// 5. Update assistant name in CLAUDE.md files if different from default
|
// 5. Apply assistant name to JUST the group being registered.
|
||||||
|
//
|
||||||
|
// Earlier behavior did a project-wide find-replace of "Andy" across every
|
||||||
|
// `groups/*/CLAUDE.md` and overwrote `.env`'s `ASSISTANT_NAME`, which
|
||||||
|
// caused two real-world problems:
|
||||||
|
// - registering a second agent (e.g. "Homie") clobbered the unrelated
|
||||||
|
// primary agent's CLAUDE.md (replacing "Andy" with "Homie" in
|
||||||
|
// groups/diddyclaw/CLAUDE.md when Diddyclaw was already in place);
|
||||||
|
// - the global `.env` ASSISTANT_NAME flipped to the most recently-
|
||||||
|
// registered agent, which then became the install-wide default
|
||||||
|
// trigger for any *new* group registered without an explicit
|
||||||
|
// `--assistant-name`.
|
||||||
|
// Both were unintentional global side-effects of a per-agent operation.
|
||||||
|
// Scope is now strictly: only the freshly-registered agent's own
|
||||||
|
// `groups/<folder>/CLAUDE.md`.
|
||||||
let nameUpdated = false;
|
let nameUpdated = false;
|
||||||
if (parsed.assistantName !== 'Andy') {
|
if (parsed.assistantName !== 'Andy') {
|
||||||
log.info('Updating assistant name', { from: 'Andy', to: parsed.assistantName });
|
const mdFile = path.join(projectRoot, 'groups', parsed.folder, 'CLAUDE.md');
|
||||||
|
if (fs.existsSync(mdFile)) {
|
||||||
const groupsDir = path.join(projectRoot, 'groups');
|
const before = fs.readFileSync(mdFile, 'utf-8');
|
||||||
const mdFiles = fs
|
const after = before
|
||||||
.readdirSync(groupsDir)
|
.replace(/^# Andy$/m, `# ${parsed.assistantName}`)
|
||||||
.map((d) => path.join(groupsDir, d, 'CLAUDE.md'))
|
.replace(/You are Andy/g, `You are ${parsed.assistantName}`);
|
||||||
.filter((f) => fs.existsSync(f));
|
if (after !== before) {
|
||||||
|
fs.writeFileSync(mdFile, after);
|
||||||
for (const mdFile of mdFiles) {
|
log.info('Updated assistant name in registered group only', {
|
||||||
let content = fs.readFileSync(mdFile, 'utf-8');
|
file: mdFile,
|
||||||
content = content.replace(/^# Andy$/m, `# ${parsed.assistantName}`);
|
to: parsed.assistantName,
|
||||||
content = content.replace(/You are Andy/g, `You are ${parsed.assistantName}`);
|
});
|
||||||
fs.writeFileSync(mdFile, content);
|
nameUpdated = true;
|
||||||
log.info('Updated CLAUDE.md', { file: mdFile });
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update .env
|
|
||||||
const envFile = path.join(projectRoot, '.env');
|
|
||||||
if (fs.existsSync(envFile)) {
|
|
||||||
let envContent = fs.readFileSync(envFile, 'utf-8');
|
|
||||||
if (envContent.includes('ASSISTANT_NAME=')) {
|
|
||||||
envContent = envContent.replace(/^ASSISTANT_NAME=.*$/m, `ASSISTANT_NAME="${parsed.assistantName}"`);
|
|
||||||
} else {
|
|
||||||
envContent += `\nASSISTANT_NAME="${parsed.assistantName}"`;
|
|
||||||
}
|
}
|
||||||
fs.writeFileSync(envFile, envContent);
|
|
||||||
} else {
|
|
||||||
fs.writeFileSync(envFile, `ASSISTANT_NAME="${parsed.assistantName}"\n`);
|
|
||||||
}
|
}
|
||||||
log.info('Set ASSISTANT_NAME in .env');
|
|
||||||
nameUpdated = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
emitStatus('REGISTER_CHANNEL', {
|
emitStatus('REGISTER_CHANNEL', {
|
||||||
|
|||||||
Reference in New Issue
Block a user