refactor(plugin): fabric-register is a script, not a tool
Binding an agent's Fabric API key was an OpenClaw tool; make it a self-contained Node script installed to ~/.openclaw/bin/fabric-register instead. - bin/fabric-register.mjs: no plugin deps; AGENT_ID env wins, else --agent-id required; --api-key validated via POST /auth/agent/login; on success upserts ~/.openclaw/fabric-identity.json (format matches IdentityRegistry). Flags/env for center, identity-file, openclaw-path. - install.mjs: copy the script to ~/.openclaw/bin (chmod 0755) on install, remove on uninstall; Next-steps updated. - tools.ts: drop the fabric-register tool; ctxGuild error now points to the script / static accounts config. - README updated. Verified: missing-id -> exit 2; --agent-id and AGENT_ID both bind and write a valid identity file; bad key -> 401, no write. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
27
install.mjs
27
install.mjs
@@ -10,7 +10,7 @@
|
||||
*/
|
||||
|
||||
import { execSync } from 'child_process';
|
||||
import { existsSync, mkdirSync, copyFileSync, readdirSync, rmSync } from 'fs';
|
||||
import { existsSync, mkdirSync, copyFileSync, readdirSync, rmSync, chmodSync } from 'fs';
|
||||
import { dirname, join, resolve } from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
import { homedir } from 'os';
|
||||
@@ -109,12 +109,30 @@ function build() {
|
||||
ok('compiled -> dist/fabric');
|
||||
}
|
||||
|
||||
function binTarget(base) {
|
||||
return join(base, 'bin', 'fabric-register');
|
||||
}
|
||||
|
||||
function installBinScript(base) {
|
||||
const src = join(__dirname, 'bin', 'fabric-register.mjs');
|
||||
const dst = binTarget(base);
|
||||
mkdirSync(dirname(dst), { recursive: true });
|
||||
copyFileSync(src, dst);
|
||||
chmodSync(dst, 0o755);
|
||||
ok(`fabric-register -> ${dst}`);
|
||||
}
|
||||
|
||||
function clearInstall(base) {
|
||||
const dest = join(base, 'plugins', PLUGIN_ID);
|
||||
if (existsSync(dest)) {
|
||||
rmSync(dest, { recursive: true, force: true });
|
||||
ok(`removed ${dest}`);
|
||||
}
|
||||
const bin = binTarget(base);
|
||||
if (existsSync(bin)) {
|
||||
rmSync(bin, { force: true });
|
||||
ok(`removed ${bin}`);
|
||||
}
|
||||
}
|
||||
function cleanupConfig(base) {
|
||||
const dest = join(base, 'plugins', PLUGIN_ID);
|
||||
@@ -149,6 +167,7 @@ function install() {
|
||||
ok(`plugin files -> ${dest}`);
|
||||
exec('npm install --omit=dev', { cwd: dest, silent: !opt.verbose });
|
||||
ok('runtime deps installed');
|
||||
installBinScript(base);
|
||||
return { base, dest };
|
||||
}
|
||||
|
||||
@@ -200,8 +219,10 @@ function main() {
|
||||
console.log('');
|
||||
log('Install complete. Next:', 'blue');
|
||||
log(' 1. Mint an agent key: (in Center) node dist/cli.js user apikey --email <agent-email>', 'cyan');
|
||||
log(' 2. openclaw gateway restart', 'cyan');
|
||||
log(' 3. As an agent, call the fabric-register tool with that key', 'cyan');
|
||||
log(' 2. Bind it to an agent (one-time), either:', 'cyan');
|
||||
log(' AGENT_ID=<agent> ~/.openclaw/bin/fabric-register --api-key <fak_…>', 'cyan');
|
||||
log(' (or pass --agent-id <agent>; or set channels.fabric.accounts.<agent>)', 'cyan');
|
||||
log(' 3. openclaw gateway restart', 'cyan');
|
||||
console.log('');
|
||||
} catch (e) {
|
||||
log(`\nInstall failed: ${e.message}`, 'red');
|
||||
|
||||
Reference in New Issue
Block a user