bajaclaw 0.10.1
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/LICENSE +21 -0
- package/README.md +639 -0
- package/bin/bajaclaw.js +35 -0
- package/bin/create-bajaclaw.js +17 -0
- package/dist/agent.d.ts +29 -0
- package/dist/agent.js +231 -0
- package/dist/agent.js.map +1 -0
- package/dist/api/server.d.ts +15 -0
- package/dist/api/server.js +215 -0
- package/dist/api/server.js.map +1 -0
- package/dist/api/translate.d.ts +61 -0
- package/dist/api/translate.js +109 -0
- package/dist/api/translate.js.map +1 -0
- package/dist/banner.d.ts +7 -0
- package/dist/banner.js +31 -0
- package/dist/banner.js.map +1 -0
- package/dist/channels/gateway.d.ts +1 -0
- package/dist/channels/gateway.js +76 -0
- package/dist/channels/gateway.js.map +1 -0
- package/dist/claude.d.ts +9 -0
- package/dist/claude.js +170 -0
- package/dist/claude.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +303 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/channel.d.ts +3 -0
- package/dist/commands/channel.js +27 -0
- package/dist/commands/channel.js.map +1 -0
- package/dist/commands/compact.d.ts +8 -0
- package/dist/commands/compact.js +60 -0
- package/dist/commands/compact.js.map +1 -0
- package/dist/commands/daemon.d.ts +7 -0
- package/dist/commands/daemon.js +129 -0
- package/dist/commands/daemon.js.map +1 -0
- package/dist/commands/dashboard.d.ts +1 -0
- package/dist/commands/dashboard.js +78 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/doctor.d.ts +1 -0
- package/dist/commands/doctor.js +25 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/dry-run.d.ts +1 -0
- package/dist/commands/dry-run.js +5 -0
- package/dist/commands/dry-run.js.map +1 -0
- package/dist/commands/effort.d.ts +6 -0
- package/dist/commands/effort.js +33 -0
- package/dist/commands/effort.js.map +1 -0
- package/dist/commands/guide.d.ts +4 -0
- package/dist/commands/guide.js +52 -0
- package/dist/commands/guide.js.map +1 -0
- package/dist/commands/health.d.ts +1 -0
- package/dist/commands/health.js +20 -0
- package/dist/commands/health.js.map +1 -0
- package/dist/commands/init.d.ts +12 -0
- package/dist/commands/init.js +114 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/mcp.d.ts +9 -0
- package/dist/commands/mcp.js +63 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/migrate.d.ts +1 -0
- package/dist/commands/migrate.js +58 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/model.d.ts +5 -0
- package/dist/commands/model.js +31 -0
- package/dist/commands/model.js.map +1 -0
- package/dist/commands/persona.d.ts +6 -0
- package/dist/commands/persona.js +67 -0
- package/dist/commands/persona.js.map +1 -0
- package/dist/commands/port.d.ts +15 -0
- package/dist/commands/port.js +88 -0
- package/dist/commands/port.js.map +1 -0
- package/dist/commands/profile.d.ts +4 -0
- package/dist/commands/profile.js +41 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/commands/serve.d.ts +14 -0
- package/dist/commands/serve.js +62 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/setup.d.ts +17 -0
- package/dist/commands/setup.js +228 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/skill.d.ts +7 -0
- package/dist/commands/skill.js +137 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/start.d.ts +6 -0
- package/dist/commands/start.js +25 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +1 -0
- package/dist/commands/status.js +35 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/subagent.d.ts +14 -0
- package/dist/commands/subagent.js +173 -0
- package/dist/commands/subagent.js.map +1 -0
- package/dist/commands/trigger.d.ts +1 -0
- package/dist/commands/trigger.js +13 -0
- package/dist/commands/trigger.js.map +1 -0
- package/dist/commands/uninstall.d.ts +5 -0
- package/dist/commands/uninstall.js +165 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.d.ts +7 -0
- package/dist/commands/update.js +49 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/concurrency.d.ts +1 -0
- package/dist/concurrency.js +17 -0
- package/dist/concurrency.js.map +1 -0
- package/dist/config.d.ts +5 -0
- package/dist/config.js +42 -0
- package/dist/config.js.map +1 -0
- package/dist/db.d.ts +3 -0
- package/dist/db.js +124 -0
- package/dist/db.js.map +1 -0
- package/dist/delegation.d.ts +6 -0
- package/dist/delegation.js +21 -0
- package/dist/delegation.js.map +1 -0
- package/dist/health-check.d.ts +6 -0
- package/dist/health-check.js +38 -0
- package/dist/health-check.js.map +1 -0
- package/dist/logger.d.ts +11 -0
- package/dist/logger.js +53 -0
- package/dist/logger.js.map +1 -0
- package/dist/mcp/consumer.d.ts +15 -0
- package/dist/mcp/consumer.js +74 -0
- package/dist/mcp/consumer.js.map +1 -0
- package/dist/mcp/server.d.ts +6 -0
- package/dist/mcp/server.js +260 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/memory/claude-compat.d.ts +4 -0
- package/dist/memory/claude-compat.js +56 -0
- package/dist/memory/claude-compat.js.map +1 -0
- package/dist/memory/compact.d.ts +25 -0
- package/dist/memory/compact.js +195 -0
- package/dist/memory/compact.js.map +1 -0
- package/dist/memory/extract.d.ts +3 -0
- package/dist/memory/extract.js +56 -0
- package/dist/memory/extract.js.map +1 -0
- package/dist/memory/recall.d.ts +5 -0
- package/dist/memory/recall.js +47 -0
- package/dist/memory/recall.js.map +1 -0
- package/dist/model-picker.d.ts +33 -0
- package/dist/model-picker.js +104 -0
- package/dist/model-picker.js.map +1 -0
- package/dist/paths.d.ts +12 -0
- package/dist/paths.js +49 -0
- package/dist/paths.js.map +1 -0
- package/dist/persona-io.d.ts +5 -0
- package/dist/persona-io.js +29 -0
- package/dist/persona-io.js.map +1 -0
- package/dist/persona.d.ts +12 -0
- package/dist/persona.js +54 -0
- package/dist/persona.js.map +1 -0
- package/dist/prompt.d.ts +5 -0
- package/dist/prompt.js +56 -0
- package/dist/prompt.js.map +1 -0
- package/dist/safety.d.ts +17 -0
- package/dist/safety.js +47 -0
- package/dist/safety.js.map +1 -0
- package/dist/scheduler/cron.d.ts +4 -0
- package/dist/scheduler/cron.js +44 -0
- package/dist/scheduler/cron.js.map +1 -0
- package/dist/scheduler/index.d.ts +7 -0
- package/dist/scheduler/index.js +15 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/scheduler/launchd.d.ts +4 -0
- package/dist/scheduler/launchd.js +73 -0
- package/dist/scheduler/launchd.js.map +1 -0
- package/dist/scheduler/schtasks.d.ts +4 -0
- package/dist/scheduler/schtasks.js +45 -0
- package/dist/scheduler/schtasks.js.map +1 -0
- package/dist/scheduler/systemd.d.ts +5 -0
- package/dist/scheduler/systemd.js +86 -0
- package/dist/scheduler/systemd.js.map +1 -0
- package/dist/self-improve.d.ts +4 -0
- package/dist/self-improve.js +48 -0
- package/dist/self-improve.js.map +1 -0
- package/dist/skills/auto-skiller.d.ts +21 -0
- package/dist/skills/auto-skiller.js +156 -0
- package/dist/skills/auto-skiller.js.map +1 -0
- package/dist/skills/loader.d.ts +3 -0
- package/dist/skills/loader.js +127 -0
- package/dist/skills/loader.js.map +1 -0
- package/dist/skills/matcher.d.ts +2 -0
- package/dist/skills/matcher.js +27 -0
- package/dist/skills/matcher.js.map +1 -0
- package/dist/skills/porter.d.ts +27 -0
- package/dist/skills/porter.js +109 -0
- package/dist/skills/porter.js.map +1 -0
- package/dist/types.d.ts +110 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/updater.d.ts +25 -0
- package/dist/updater.js +185 -0
- package/dist/updater.js.map +1 -0
- package/package.json +53 -0
- package/scripts/postinstall.js +33 -0
- package/skills/configure-effort/SKILL.md +36 -0
- package/skills/configure-model/SKILL.md +41 -0
- package/skills/configure-tools/SKILL.md +51 -0
- package/skills/daily-briefing/SKILL.md +19 -0
- package/skills/delegate-to-subagent/SKILL.md +63 -0
- package/skills/email-triage/SKILL.md +21 -0
- package/skills/setup-api/SKILL.md +115 -0
- package/skills/setup-compaction/SKILL.md +102 -0
- package/skills/setup-daemon/SKILL.md +49 -0
- package/skills/setup-dashboard/SKILL.md +39 -0
- package/skills/setup-discord/SKILL.md +54 -0
- package/skills/setup-heartbeat/SKILL.md +51 -0
- package/skills/setup-mcp-port/SKILL.md +54 -0
- package/skills/setup-memory-sync/SKILL.md +45 -0
- package/skills/setup-profile/SKILL.md +44 -0
- package/skills/setup-self-update/SKILL.md +45 -0
- package/skills/setup-subagent/SKILL.md +102 -0
- package/skills/setup-telegram/SKILL.md +54 -0
- package/skills/setup-uninstall/SKILL.md +55 -0
- package/skills/web-research/SKILL.md +20 -0
- package/templates/code/AGENT.md +15 -0
- package/templates/code/HEARTBEAT.md +11 -0
- package/templates/code/SOUL.md +10 -0
- package/templates/code/bajaclaw.config.json +5 -0
- package/templates/code/scripts/launch.bat +4 -0
- package/templates/code/scripts/launch.sh +4 -0
- package/templates/custom/AGENT.md +14 -0
- package/templates/custom/HEARTBEAT.md +11 -0
- package/templates/custom/SOUL.md +10 -0
- package/templates/custom/bajaclaw.config.json +5 -0
- package/templates/custom/scripts/launch.bat +4 -0
- package/templates/custom/scripts/launch.sh +4 -0
- package/templates/outreach/AGENT.md +11 -0
- package/templates/outreach/HEARTBEAT.md +11 -0
- package/templates/outreach/SOUL.md +10 -0
- package/templates/outreach/bajaclaw.config.json +5 -0
- package/templates/outreach/scripts/launch.bat +4 -0
- package/templates/outreach/scripts/launch.sh +4 -0
- package/templates/research/AGENT.md +27 -0
- package/templates/research/HEARTBEAT.md +11 -0
- package/templates/research/SOUL.md +10 -0
- package/templates/research/bajaclaw.config.json +5 -0
- package/templates/research/scripts/launch.bat +4 -0
- package/templates/research/scripts/launch.sh +4 -0
- package/templates/social/AGENT.md +10 -0
- package/templates/social/HEARTBEAT.md +11 -0
- package/templates/social/SOUL.md +10 -0
- package/templates/social/bajaclaw.config.json +5 -0
- package/templates/social/scripts/launch.bat +4 -0
- package/templates/social/scripts/launch.sh +4 -0
- package/templates/support/AGENT.md +10 -0
- package/templates/support/HEARTBEAT.md +11 -0
- package/templates/support/SOUL.md +10 -0
- package/templates/support/bajaclaw.config.json +5 -0
- package/templates/support/scripts/launch.bat +4 -0
- package/templates/support/scripts/launch.sh +4 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// `bajaclaw persona [profile]` — view or re-run the persona wizard.
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { loadPersona, savePersona, personaPath, soulPath } from "../persona-io.js";
|
|
4
|
+
import { renderSoul, TONE_OPTIONS } from "../persona.js";
|
|
5
|
+
import { ask, askChoice, askList, detectTimezone } from "../prompt.js";
|
|
6
|
+
import { DEFAULT_PROFILE_NAME } from "./setup.js";
|
|
7
|
+
export async function runPersonaCmd(opts = {}) {
|
|
8
|
+
const profile = opts.profile ?? process.env.BAJACLAW_PROFILE ?? DEFAULT_PROFILE_NAME;
|
|
9
|
+
const current = loadPersona(profile);
|
|
10
|
+
if (!opts.edit && !opts.reset) {
|
|
11
|
+
if (!current) {
|
|
12
|
+
console.log(chalk.dim(`no persona set for ${profile}. run: bajaclaw persona --edit`));
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
printPersona(profile, current);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const existing = opts.reset ? undefined : (current ?? undefined);
|
|
19
|
+
const persona = await edit(existing);
|
|
20
|
+
savePersona(profile, persona);
|
|
21
|
+
console.log("");
|
|
22
|
+
console.log(chalk.green(`✓ saved`));
|
|
23
|
+
console.log(chalk.dim(` persona: ${personaPath(profile)}`));
|
|
24
|
+
console.log(chalk.dim(` identity: ${soulPath(profile)}`));
|
|
25
|
+
}
|
|
26
|
+
function printPersona(profile, p) {
|
|
27
|
+
console.log(`profile: ${chalk.bold(profile)}`);
|
|
28
|
+
console.log("");
|
|
29
|
+
console.log(`${chalk.bold("name: ")} ${chalk.cyan(p.agentName)}`);
|
|
30
|
+
if (p.userName)
|
|
31
|
+
console.log(`${chalk.bold("talks to: ")} ${p.userName}`);
|
|
32
|
+
if (p.tone)
|
|
33
|
+
console.log(`${chalk.bold("tone: ")} ${p.tone}`);
|
|
34
|
+
if (p.timezone)
|
|
35
|
+
console.log(`${chalk.bold("tz: ")} ${p.timezone}`);
|
|
36
|
+
if (p.focus)
|
|
37
|
+
console.log(`${chalk.bold("focus: ")} ${chalk.dim(p.focus)}`);
|
|
38
|
+
if (p.interests?.length)
|
|
39
|
+
console.log(`${chalk.bold("interests:")} ${p.interests.join(", ")}`);
|
|
40
|
+
if (p.doNots?.length)
|
|
41
|
+
console.log(`${chalk.bold("don'ts: ")} ${p.doNots.join(", ")}`);
|
|
42
|
+
console.log("");
|
|
43
|
+
console.log(chalk.dim("Edit: bajaclaw persona --edit"));
|
|
44
|
+
console.log(chalk.dim("Full identity doc is injected into every cycle. Preview:"));
|
|
45
|
+
console.log("");
|
|
46
|
+
console.log(chalk.dim(renderSoul(p).split("\n").map((l) => " " + l).join("\n")));
|
|
47
|
+
}
|
|
48
|
+
async function edit(existing) {
|
|
49
|
+
const agentName = await ask(chalk.bold("Agent name:"), existing?.agentName ?? "Baja");
|
|
50
|
+
const userName = await ask(chalk.bold("What should it call you?"), existing?.userName ?? "");
|
|
51
|
+
const tone = (await askChoice(chalk.bold("Tone:"), TONE_OPTIONS, existing?.tone ?? "concise"));
|
|
52
|
+
const timezone = await ask(chalk.bold("Timezone (IANA):"), existing?.timezone ?? detectTimezone() ?? "");
|
|
53
|
+
const focus = await ask(chalk.bold("Focus:"), existing?.focus ?? "");
|
|
54
|
+
const interests = await askList(chalk.bold("Interests:"));
|
|
55
|
+
const doNots = await askList(chalk.bold("Don'ts:"));
|
|
56
|
+
return {
|
|
57
|
+
agentName: agentName || "Baja",
|
|
58
|
+
userName: userName || undefined,
|
|
59
|
+
tone,
|
|
60
|
+
timezone: timezone || undefined,
|
|
61
|
+
focus: focus || undefined,
|
|
62
|
+
interests: interests.length > 0 ? interests : existing?.interests,
|
|
63
|
+
doNots: doNots.length > 0 ? doNots : existing?.doNots,
|
|
64
|
+
createdAt: existing?.createdAt ?? new Date().toISOString(),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=persona.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persona.js","sourceRoot":"","sources":["../../src/commands/persona.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface SkillPortOptions {
|
|
2
|
+
source?: string;
|
|
3
|
+
scope?: "user" | "profile" | "agent";
|
|
4
|
+
profile?: string;
|
|
5
|
+
link?: boolean;
|
|
6
|
+
force?: boolean;
|
|
7
|
+
names?: string[];
|
|
8
|
+
}
|
|
9
|
+
export declare function cmdSkillPort(opts: SkillPortOptions): Promise<void>;
|
|
10
|
+
export interface McpPortOptions {
|
|
11
|
+
names?: string[];
|
|
12
|
+
force?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare function cmdMcpPort(opts?: McpPortOptions): Promise<void>;
|
|
15
|
+
export declare function listDesktopServers(): string[];
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// Port commands: move skills and MCP servers from the desktop CLI scope
|
|
2
|
+
// into BajaClaw's own scope. By design, nothing is auto-inherited.
|
|
3
|
+
import { readFileSync, writeFileSync, existsSync } from "node:fs";
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
import { portSkills, printPortReport, } from "../skills/porter.js";
|
|
6
|
+
import { claudeDesktopConfigPath, bajaclawHome, ensureDir } from "../paths.js";
|
|
7
|
+
import { userMcpPath, readMcpFile } from "../mcp/consumer.js";
|
|
8
|
+
export async function cmdSkillPort(opts) {
|
|
9
|
+
const scope = opts.scope ?? "user";
|
|
10
|
+
const destination = scope === "user"
|
|
11
|
+
? { scope: "user" }
|
|
12
|
+
: scope === "profile"
|
|
13
|
+
? { scope: "profile", profile: requireProfile(opts.profile) }
|
|
14
|
+
: { scope: "agent", profile: requireProfile(opts.profile) };
|
|
15
|
+
const mode = opts.link ? "link" : "copy";
|
|
16
|
+
const report = await portSkills({
|
|
17
|
+
source: opts.source,
|
|
18
|
+
destination,
|
|
19
|
+
mode,
|
|
20
|
+
force: !!opts.force,
|
|
21
|
+
names: opts.names,
|
|
22
|
+
});
|
|
23
|
+
printPortReport(report, mode);
|
|
24
|
+
}
|
|
25
|
+
export async function cmdMcpPort(opts = {}) {
|
|
26
|
+
const src = claudeDesktopConfigPath();
|
|
27
|
+
if (!existsSync(src)) {
|
|
28
|
+
console.log(chalk.yellow(`desktop MCP config not found at ${src}`));
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const desktop = readMcpFile(src);
|
|
32
|
+
const desktopServers = desktop.mcpServers ?? {};
|
|
33
|
+
if (Object.keys(desktopServers).length === 0) {
|
|
34
|
+
console.log(chalk.dim("desktop MCP config has no servers"));
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
ensureDir(bajaclawHome());
|
|
38
|
+
const userMcp = readMcpFile(userMcpPath());
|
|
39
|
+
const current = userMcp.mcpServers ?? {};
|
|
40
|
+
const want = opts.names && opts.names.length > 0 ? new Set(opts.names) : null;
|
|
41
|
+
const ported = [];
|
|
42
|
+
const skipped = [];
|
|
43
|
+
for (const [name, entry] of Object.entries(desktopServers)) {
|
|
44
|
+
if (want && !want.has(name))
|
|
45
|
+
continue;
|
|
46
|
+
if (name === "bajaclaw") {
|
|
47
|
+
skipped.push({ name, reason: "self-reference (BajaClaw's own MCP entry)" });
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
if (current[name] && !opts.force) {
|
|
51
|
+
skipped.push({ name, reason: "already present (use --force to overwrite)" });
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
current[name] = entry;
|
|
55
|
+
ported.push(name);
|
|
56
|
+
}
|
|
57
|
+
userMcp.mcpServers = current;
|
|
58
|
+
writeFileSync(userMcpPath(), JSON.stringify(userMcp, null, 2));
|
|
59
|
+
console.log(chalk.dim(`destination: ${userMcpPath()}`));
|
|
60
|
+
for (const n of ported)
|
|
61
|
+
console.log(chalk.green(`✓ ${n}`));
|
|
62
|
+
for (const s of skipped)
|
|
63
|
+
console.log(chalk.yellow(`- ${s.name}: ${s.reason}`));
|
|
64
|
+
if (ported.length === 0 && skipped.length === 0) {
|
|
65
|
+
console.log(chalk.dim("(nothing to port)"));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function requireProfile(p) {
|
|
69
|
+
if (!p) {
|
|
70
|
+
console.error(chalk.red("--profile <name> is required for scope=profile|agent"));
|
|
71
|
+
process.exit(2);
|
|
72
|
+
}
|
|
73
|
+
return p;
|
|
74
|
+
}
|
|
75
|
+
// Read back what Claude has — useful for `bajaclaw mcp port --list`.
|
|
76
|
+
export function listDesktopServers() {
|
|
77
|
+
const path = claudeDesktopConfigPath();
|
|
78
|
+
if (!existsSync(path))
|
|
79
|
+
return [];
|
|
80
|
+
try {
|
|
81
|
+
const cfg = JSON.parse(readFileSync(path, "utf8"));
|
|
82
|
+
return Object.keys(cfg.mcpServers ?? {});
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return [];
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=port.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port.js","sourceRoot":"","sources":["../../src/commands/port.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function cmdList(): Promise<void>;
|
|
2
|
+
export declare function cmdCreate(name: string, template: string): Promise<void>;
|
|
3
|
+
export declare function cmdSwitch(name: string): Promise<void>;
|
|
4
|
+
export declare function cmdDelete(name: string, confirm?: boolean): Promise<void>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { readdirSync, existsSync, rmSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import { bajaclawHome } from "../paths.js";
|
|
5
|
+
import { runInit } from "./init.js";
|
|
6
|
+
export async function cmdList() {
|
|
7
|
+
const dir = join(bajaclawHome(), "profiles");
|
|
8
|
+
if (!existsSync(dir)) {
|
|
9
|
+
console.log(chalk.dim("no profiles."));
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
for (const n of readdirSync(dir)) {
|
|
13
|
+
if (existsSync(join(dir, n, "config.json")))
|
|
14
|
+
console.log(n);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export async function cmdCreate(name, template) {
|
|
18
|
+
await runInit({ name, template: template });
|
|
19
|
+
}
|
|
20
|
+
export async function cmdSwitch(name) {
|
|
21
|
+
// Profile selection happens via --profile flag or BAJACLAW_PROFILE env var.
|
|
22
|
+
// This command documents the mechanism.
|
|
23
|
+
console.log(`To use profile "${name}":`);
|
|
24
|
+
console.log(` BAJACLAW_PROFILE=${name} bajaclaw start`);
|
|
25
|
+
console.log(` or: bajaclaw start ${name}`);
|
|
26
|
+
}
|
|
27
|
+
export async function cmdDelete(name, confirm = false) {
|
|
28
|
+
const dir = join(bajaclawHome(), "profiles", name);
|
|
29
|
+
if (!existsSync(dir)) {
|
|
30
|
+
console.log(chalk.yellow(`${name} does not exist`));
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (!confirm) {
|
|
34
|
+
console.log(chalk.yellow(`This will delete ${dir} and all its data.`));
|
|
35
|
+
console.log(`Re-run with --yes to confirm.`);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
rmSync(dir, { recursive: true, force: true });
|
|
39
|
+
console.log(chalk.green(`✓ deleted ${name}`));
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,UAAU,CAAC,CAAC;IAC7C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IACzE,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,QAAgB;IAC5D,MAAM,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAiB,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY;IAC1C,4EAA4E;IAC5E,wCAAwC;IACxC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,iBAAiB,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,OAAO,GAAG,KAAK;IAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IACnD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,iBAAiB,CAAC,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IACtF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,oBAAoB,GAAG,oBAAoB,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IACD,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ApiConfig } from "../api/server.js";
|
|
2
|
+
export interface ServeCmdOptions {
|
|
3
|
+
host?: string;
|
|
4
|
+
port?: number;
|
|
5
|
+
apiKey?: string;
|
|
6
|
+
exposedProfiles?: string[];
|
|
7
|
+
streamDelayMs?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function runServe(opts?: ServeCmdOptions): Promise<void>;
|
|
10
|
+
export declare function userApiConfigPath(): string;
|
|
11
|
+
interface ApiFileCfg extends ApiConfig {
|
|
12
|
+
}
|
|
13
|
+
export declare function loadUserApiConfig(): ApiFileCfg;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { readFileSync, existsSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { bajaclawHome } from "../paths.js";
|
|
5
|
+
import { serveApi } from "../api/server.js";
|
|
6
|
+
export async function runServe(opts = {}) {
|
|
7
|
+
// Resolve merged config: file defaults → CLI overrides.
|
|
8
|
+
const fileCfg = loadUserApiConfig();
|
|
9
|
+
const cfg = {
|
|
10
|
+
host: opts.host ?? fileCfg.host,
|
|
11
|
+
port: opts.port ?? fileCfg.port,
|
|
12
|
+
apiKey: opts.apiKey ?? fileCfg.apiKey ?? null,
|
|
13
|
+
exposedProfiles: opts.exposedProfiles ?? fileCfg.exposedProfiles,
|
|
14
|
+
streamDelayMs: opts.streamDelayMs ?? fileCfg.streamDelayMs,
|
|
15
|
+
};
|
|
16
|
+
// Refuse to bind a non-localhost host without an API key.
|
|
17
|
+
const host = cfg.host ?? "127.0.0.1";
|
|
18
|
+
if (host !== "127.0.0.1" && host !== "localhost" && !cfg.apiKey) {
|
|
19
|
+
console.error(chalk.red(`refusing to bind ${host} without an API key.`));
|
|
20
|
+
console.error(chalk.red(`pass --api-key <secret> or set api.apiKey in ~/.bajaclaw/api.json`));
|
|
21
|
+
process.exit(2);
|
|
22
|
+
}
|
|
23
|
+
serveApi({
|
|
24
|
+
...cfg,
|
|
25
|
+
onReady: ({ host, port }) => {
|
|
26
|
+
console.log(chalk.green(`✓ BajaClaw API listening on http://${host}:${port}/`));
|
|
27
|
+
console.log(chalk.dim(` OpenAI-compatible: /v1/chat/completions /v1/models`));
|
|
28
|
+
console.log(chalk.dim(` Native: /v1/bajaclaw/cycle /v1/bajaclaw/tasks`));
|
|
29
|
+
if (cfg.apiKey)
|
|
30
|
+
console.log(chalk.dim(` auth: Bearer token required`));
|
|
31
|
+
else if (host !== "127.0.0.1" && host !== "localhost") {
|
|
32
|
+
console.log(chalk.yellow(` WARNING: auth disabled on non-localhost bind`));
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
console.log(chalk.dim(` auth: none (localhost-only)`));
|
|
36
|
+
}
|
|
37
|
+
if (cfg.exposedProfiles?.length) {
|
|
38
|
+
console.log(chalk.dim(` exposed profiles: ${cfg.exposedProfiles.join(", ")}`));
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
console.log(chalk.dim(` exposed profiles: all`));
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
// Keep the process alive.
|
|
46
|
+
await new Promise(() => { });
|
|
47
|
+
}
|
|
48
|
+
export function userApiConfigPath() {
|
|
49
|
+
return join(bajaclawHome(), "api.json");
|
|
50
|
+
}
|
|
51
|
+
export function loadUserApiConfig() {
|
|
52
|
+
const p = userApiConfigPath();
|
|
53
|
+
if (!existsSync(p))
|
|
54
|
+
return {};
|
|
55
|
+
try {
|
|
56
|
+
return JSON.parse(readFileSync(p, "utf8"));
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return {};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=serve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare const DEFAULT_PROFILE_NAME: string;
|
|
2
|
+
export interface SetupOptions {
|
|
3
|
+
profile?: string;
|
|
4
|
+
template?: string;
|
|
5
|
+
model?: string;
|
|
6
|
+
skipMcpRegister?: boolean;
|
|
7
|
+
skipBanner?: boolean;
|
|
8
|
+
silent?: boolean;
|
|
9
|
+
interactive?: boolean;
|
|
10
|
+
nonInteractive?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare function runSetup(opts?: SetupOptions): Promise<void>;
|
|
13
|
+
export declare function defaultProfileName(): string;
|
|
14
|
+
export declare function firstRunMarkerPath(): string;
|
|
15
|
+
export declare function isFirstRun(): boolean;
|
|
16
|
+
export declare function markFirstRunDone(): void;
|
|
17
|
+
export declare function autoBootstrapIfNeeded(): Promise<void>;
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
// Idempotent first-run bootstrap. Safe to re-run.
|
|
2
|
+
//
|
|
3
|
+
// Interactive by default on a TTY: asks the user to name their agent,
|
|
4
|
+
// pick a tone, set their own preferred name, timezone, focus area,
|
|
5
|
+
// any topics the agent should know, and any hard "don't" rules.
|
|
6
|
+
// Non-interactive (--silent, postinstall, pipes) falls back to sane
|
|
7
|
+
// defaults — nothing blocks.
|
|
8
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
9
|
+
import { join } from "node:path";
|
|
10
|
+
import chalk from "chalk";
|
|
11
|
+
import { bajaclawHome, profileDir, claudeAgentsDir, ensureDir, } from "../paths.js";
|
|
12
|
+
import { runInit } from "./init.js";
|
|
13
|
+
import { runHealth } from "../health-check.js";
|
|
14
|
+
import { printBanner } from "../banner.js";
|
|
15
|
+
import { currentVersion } from "../updater.js";
|
|
16
|
+
import { cmdRegister } from "./mcp.js";
|
|
17
|
+
import { ask, askChoice, askList, detectTimezone, isInteractive } from "../prompt.js";
|
|
18
|
+
import { loadPersona, savePersona } from "../persona-io.js";
|
|
19
|
+
import { TONE_OPTIONS } from "../persona.js";
|
|
20
|
+
import { loadConfig, saveConfig } from "../config.js";
|
|
21
|
+
import { mergeCompactionDefaults } from "../memory/compact.js";
|
|
22
|
+
export const DEFAULT_PROFILE_NAME = process.env.BAJACLAW_DEFAULT_PROFILE ?? "default";
|
|
23
|
+
export async function runSetup(opts = {}) {
|
|
24
|
+
const name = opts.profile ?? DEFAULT_PROFILE_NAME;
|
|
25
|
+
const template = (opts.template ?? "custom");
|
|
26
|
+
const model = opts.model ?? "auto";
|
|
27
|
+
if (!opts.skipBanner && !opts.silent)
|
|
28
|
+
printBanner(currentVersion(), { force: true });
|
|
29
|
+
const profileExisted = existsSync(profileDir(name)) && existsSync(join(profileDir(name), "config.json"));
|
|
30
|
+
if (!profileExisted) {
|
|
31
|
+
if (!opts.silent)
|
|
32
|
+
console.log(chalk.cyan(`Creating profile "${name}"…`));
|
|
33
|
+
await runInit({ name, template, model: model });
|
|
34
|
+
}
|
|
35
|
+
else if (!opts.silent) {
|
|
36
|
+
console.log(chalk.dim(`✓ profile "${name}" already exists`));
|
|
37
|
+
}
|
|
38
|
+
ensureAgentDescriptor(name);
|
|
39
|
+
// Interactive persona wizard on first setup (or re-ask on explicit --interactive).
|
|
40
|
+
const wantWizard = !opts.silent && !opts.nonInteractive && (opts.interactive || (isInteractive() && !loadPersona(name)));
|
|
41
|
+
if (wantWizard) {
|
|
42
|
+
console.log("");
|
|
43
|
+
console.log(chalk.bold("Let's set up your agent's personality."));
|
|
44
|
+
console.log(chalk.dim("This is an agent, not a chatbot. These answers tell it who it is and how to work for you."));
|
|
45
|
+
console.log("");
|
|
46
|
+
try {
|
|
47
|
+
const persona = await promptPersona(name);
|
|
48
|
+
savePersona(name, persona);
|
|
49
|
+
console.log("");
|
|
50
|
+
console.log(chalk.green(`✓ persona saved to ${profileDir(name)}/SOUL.md`));
|
|
51
|
+
}
|
|
52
|
+
catch (e) {
|
|
53
|
+
console.log(chalk.yellow(`(skipped persona wizard: ${e.message})`));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else if (!opts.silent && loadPersona(name)) {
|
|
57
|
+
console.log(chalk.dim(`✓ persona already set — run \`bajaclaw persona\` to change`));
|
|
58
|
+
}
|
|
59
|
+
if (wantWizard) {
|
|
60
|
+
try {
|
|
61
|
+
const comp = await promptCompaction(name);
|
|
62
|
+
const cfg = loadConfig(name);
|
|
63
|
+
cfg.compaction = comp;
|
|
64
|
+
saveConfig(cfg);
|
|
65
|
+
console.log(chalk.green(`✓ compaction policy saved`));
|
|
66
|
+
}
|
|
67
|
+
catch (e) {
|
|
68
|
+
if (!opts.silent)
|
|
69
|
+
console.log(chalk.yellow(`(skipped compaction setup: ${e.message})`));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (!opts.skipMcpRegister) {
|
|
73
|
+
try {
|
|
74
|
+
await cmdRegister(name);
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
if (!opts.silent)
|
|
78
|
+
console.log(chalk.yellow(`mcp register: ${e.message}`));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (!opts.silent) {
|
|
82
|
+
console.log("");
|
|
83
|
+
console.log(chalk.bold("Toolchain check:"));
|
|
84
|
+
const checks = await runHealth();
|
|
85
|
+
for (const c of checks) {
|
|
86
|
+
const mark = c.ok ? chalk.green("✓") : chalk.yellow("!");
|
|
87
|
+
console.log(` ${mark} ${c.name.padEnd(22)} ${chalk.dim(c.detail)}`);
|
|
88
|
+
}
|
|
89
|
+
const backend = checks.find((c) => c.name === "cli backend");
|
|
90
|
+
if (!backend?.ok) {
|
|
91
|
+
console.log("");
|
|
92
|
+
console.log(chalk.yellow("Note: the `claude` CLI backend is not on your PATH."));
|
|
93
|
+
console.log(chalk.yellow("BajaClaw drives it as a subprocess — install it to run live cycles."));
|
|
94
|
+
console.log(chalk.dim("Dry-run still works: `bajaclaw start --dry-run`"));
|
|
95
|
+
}
|
|
96
|
+
console.log("");
|
|
97
|
+
console.log(chalk.green.bold("BajaClaw is set up."));
|
|
98
|
+
console.log("");
|
|
99
|
+
console.log("Try:");
|
|
100
|
+
console.log(` ${chalk.cyan("bajaclaw start --dry-run")} ${chalk.dim("# see the assembled prompt")}`);
|
|
101
|
+
console.log(` ${chalk.cyan("bajaclaw start")} ${chalk.dim("# run a cycle")}`);
|
|
102
|
+
console.log(` ${chalk.cyan("bajaclaw dashboard")} ${chalk.dim("# http://localhost:7337")}`);
|
|
103
|
+
console.log(` ${chalk.cyan("bajaclaw daemon install")} ${chalk.dim("# schedule recurring heartbeat")}`);
|
|
104
|
+
console.log(` ${chalk.cyan("bajaclaw subagent create mail --parent " + name)} ${chalk.dim("# scoped helper agent")}`);
|
|
105
|
+
console.log("");
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
async function promptPersona(profile) {
|
|
109
|
+
const existing = loadPersona(profile) ?? undefined;
|
|
110
|
+
const agentName = await ask(chalk.bold("What should your agent call itself?"), existing?.agentName ?? "Baja");
|
|
111
|
+
const userName = await ask(chalk.bold("What should it call you?"), existing?.userName ?? "");
|
|
112
|
+
const tone = (await askChoice(chalk.bold("How should it talk to you?"), TONE_OPTIONS, existing?.tone ?? "concise"));
|
|
113
|
+
const tz = await ask(chalk.bold("What's your timezone?"), existing?.timezone ?? detectTimezone() ?? "");
|
|
114
|
+
console.log("");
|
|
115
|
+
console.log(chalk.dim("Give your agent a purpose. One or two sentences — what is it here to do?"));
|
|
116
|
+
const focus = await ask(chalk.bold("Focus:"), existing?.focus ?? "Help me get things done. Triage, drafts, and research on request.");
|
|
117
|
+
console.log("");
|
|
118
|
+
console.log(chalk.dim("Any topics, domains, or projects it should be aware of?"));
|
|
119
|
+
const interests = await askList(chalk.bold("Interests:"));
|
|
120
|
+
console.log("");
|
|
121
|
+
console.log(chalk.dim("Any hard rules? Things it should never do. e.g. \"send email without approval\""));
|
|
122
|
+
const doNots = await askList(chalk.bold("Don'ts:"));
|
|
123
|
+
return {
|
|
124
|
+
agentName: agentName || "Baja",
|
|
125
|
+
userName: userName || undefined,
|
|
126
|
+
tone,
|
|
127
|
+
timezone: tz || undefined,
|
|
128
|
+
focus: focus || undefined,
|
|
129
|
+
interests: interests.length > 0 ? interests : (existing?.interests ?? undefined),
|
|
130
|
+
doNots: doNots.length > 0 ? doNots : (existing?.doNots ?? undefined),
|
|
131
|
+
createdAt: existing?.createdAt ?? new Date().toISOString(),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
async function promptCompaction(profile) {
|
|
135
|
+
const existing = (() => {
|
|
136
|
+
try {
|
|
137
|
+
return loadConfig(profile).compaction;
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return undefined;
|
|
141
|
+
}
|
|
142
|
+
})();
|
|
143
|
+
const base = mergeCompactionDefaults(existing);
|
|
144
|
+
console.log("");
|
|
145
|
+
console.log(chalk.dim("Agents learn over time. BajaClaw auto-compacts the memory pool so recall stays sharp."));
|
|
146
|
+
console.log(chalk.dim("Default: when memory hits 75% of the 200k-token reference context, or daily at 00:00 UTC."));
|
|
147
|
+
console.log("");
|
|
148
|
+
const schedule = (await askChoice(chalk.bold("When should it compact?"), ["both (threshold + daily) — recommended", "threshold only", "daily only", "off"], "both (threshold + daily) — recommended"));
|
|
149
|
+
const mode = schedule.startsWith("both") ? "both"
|
|
150
|
+
: schedule.startsWith("threshold") ? "threshold"
|
|
151
|
+
: schedule.startsWith("daily") ? "daily"
|
|
152
|
+
: "off";
|
|
153
|
+
if (mode === "off") {
|
|
154
|
+
return { ...base, enabled: false, schedule: "off" };
|
|
155
|
+
}
|
|
156
|
+
let threshold = base.threshold;
|
|
157
|
+
if (mode === "threshold" || mode === "both") {
|
|
158
|
+
const raw = await ask(chalk.bold("Trigger at what fraction of context window? (0.5–0.95)"), String(base.threshold));
|
|
159
|
+
const n = Number(raw);
|
|
160
|
+
if (Number.isFinite(n) && n >= 0.1 && n <= 0.99)
|
|
161
|
+
threshold = n;
|
|
162
|
+
}
|
|
163
|
+
let dailyAtUtc = base.dailyAtUtc;
|
|
164
|
+
if (mode === "daily" || mode === "both") {
|
|
165
|
+
const raw = await ask(chalk.bold("Daily time in UTC (HH:MM)?"), base.dailyAtUtc);
|
|
166
|
+
if (/^\d{2}:\d{2}$/.test(raw))
|
|
167
|
+
dailyAtUtc = raw;
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
enabled: true,
|
|
171
|
+
schedule: mode,
|
|
172
|
+
threshold,
|
|
173
|
+
dailyAtUtc,
|
|
174
|
+
keepRecentPerKind: base.keepRecentPerKind,
|
|
175
|
+
pruneCycleDays: base.pruneCycleDays,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
function ensureAgentDescriptor(profile) {
|
|
179
|
+
const dir = ensureDir(claudeAgentsDir(profile));
|
|
180
|
+
const path = join(dir, `${profile}.md`);
|
|
181
|
+
if (existsSync(path))
|
|
182
|
+
return;
|
|
183
|
+
const cfgPath = join(profileDir(profile), "config.json");
|
|
184
|
+
if (!existsSync(cfgPath))
|
|
185
|
+
return;
|
|
186
|
+
const cfg = JSON.parse(readFileSync(cfgPath, "utf8"));
|
|
187
|
+
const body = `---
|
|
188
|
+
name: ${cfg.name}
|
|
189
|
+
description: BajaClaw agent (${cfg.template}) — autonomous, runs on heartbeat
|
|
190
|
+
model: ${cfg.model}
|
|
191
|
+
effort: ${cfg.effort}
|
|
192
|
+
maxTurns: ${cfg.maxTurns}
|
|
193
|
+
${cfg.disallowedTools?.length ? `disallowedTools: [${cfg.disallowedTools.join(", ")}]\n` : ""}isolation: worktree
|
|
194
|
+
background: true
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
# ${cfg.name}
|
|
198
|
+
|
|
199
|
+
Paired BajaClaw profile: ~/.bajaclaw/profiles/${cfg.name}/
|
|
200
|
+
Template: ${cfg.template}
|
|
201
|
+
|
|
202
|
+
Operating guide lives in AGENT.md of the profile directory.
|
|
203
|
+
`;
|
|
204
|
+
writeFileSync(path, body);
|
|
205
|
+
}
|
|
206
|
+
export function defaultProfileName() {
|
|
207
|
+
return DEFAULT_PROFILE_NAME;
|
|
208
|
+
}
|
|
209
|
+
export function firstRunMarkerPath() {
|
|
210
|
+
ensureDir(bajaclawHome());
|
|
211
|
+
return join(bajaclawHome(), ".first-run-done");
|
|
212
|
+
}
|
|
213
|
+
export function isFirstRun() {
|
|
214
|
+
return !existsSync(firstRunMarkerPath());
|
|
215
|
+
}
|
|
216
|
+
export function markFirstRunDone() {
|
|
217
|
+
try {
|
|
218
|
+
writeFileSync(firstRunMarkerPath(), new Date().toISOString());
|
|
219
|
+
}
|
|
220
|
+
catch { /* silent */ }
|
|
221
|
+
}
|
|
222
|
+
export async function autoBootstrapIfNeeded() {
|
|
223
|
+
const p = join(bajaclawHome(), "profiles", DEFAULT_PROFILE_NAME, "config.json");
|
|
224
|
+
if (existsSync(p))
|
|
225
|
+
return;
|
|
226
|
+
await runSetup({ silent: true, skipMcpRegister: true, nonInteractive: true });
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function cmdList(profile: string): Promise<void>;
|
|
2
|
+
export declare function cmdNew(name: string, scope?: "user" | "profile", profile?: string): Promise<void>;
|
|
3
|
+
export declare function cmdInstall(source: string, scope?: "user" | "profile", profile?: string): Promise<void>;
|
|
4
|
+
export declare function cmdReview(): Promise<void>;
|
|
5
|
+
export declare function cmdPromote(name: string, opts?: {
|
|
6
|
+
force?: boolean;
|
|
7
|
+
}): Promise<void>;
|