@lobu/cli 3.0.12 → 3.0.19

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.
Files changed (38) hide show
  1. package/dist/commands/connections/add.d.ts +2 -0
  2. package/dist/commands/connections/add.d.ts.map +1 -0
  3. package/dist/commands/connections/add.js +46 -0
  4. package/dist/commands/connections/add.js.map +1 -0
  5. package/dist/commands/connections/list.d.ts +2 -0
  6. package/dist/commands/connections/list.d.ts.map +1 -0
  7. package/dist/commands/connections/list.js +25 -0
  8. package/dist/commands/connections/list.js.map +1 -0
  9. package/dist/commands/connections/platforms.d.ts +18 -0
  10. package/dist/commands/connections/platforms.d.ts.map +1 -0
  11. package/dist/commands/connections/platforms.js +160 -0
  12. package/dist/commands/connections/platforms.js.map +1 -0
  13. package/dist/commands/init.d.ts.map +1 -1
  14. package/dist/commands/init.js +4 -141
  15. package/dist/commands/init.js.map +1 -1
  16. package/dist/commands/providers/add.d.ts.map +1 -1
  17. package/dist/commands/providers/add.js +8 -29
  18. package/dist/commands/providers/add.js.map +1 -1
  19. package/dist/commands/skills/add.d.ts.map +1 -1
  20. package/dist/commands/skills/add.js +15 -29
  21. package/dist/commands/skills/add.js.map +1 -1
  22. package/dist/config/agent-helpers.d.ts +37 -0
  23. package/dist/config/agent-helpers.d.ts.map +1 -0
  24. package/dist/config/agent-helpers.js +58 -0
  25. package/dist/config/agent-helpers.js.map +1 -0
  26. package/dist/config/schema.d.ts +5 -713
  27. package/dist/config/schema.d.ts.map +1 -1
  28. package/dist/config/schema.js +5 -58
  29. package/dist/config/schema.js.map +1 -1
  30. package/dist/eval/types.d.ts +26 -154
  31. package/dist/eval/types.d.ts.map +1 -1
  32. package/dist/eval/types.js +1 -1
  33. package/dist/eval/types.js.map +1 -1
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +18 -0
  36. package/dist/index.js.map +1 -1
  37. package/dist/system-skills.json +7 -1
  38. package/package.json +9 -4
@@ -1,7 +1,6 @@
1
- import { readFile, writeFile } from "node:fs/promises";
2
- import { join } from "node:path";
1
+ import { writeFile } from "node:fs/promises";
3
2
  import chalk from "chalk";
4
- import { parse as parseToml } from "smol-toml";
3
+ import { appendTomlBlock, loadAgentContext, } from "../../config/agent-helpers.js";
5
4
  import { CONFIG_FILENAME } from "../../config/loader.js";
6
5
  import { getSkillById } from "./registry.js";
7
6
  export async function skillsAddCommand(cwd, skillId) {
@@ -11,46 +10,33 @@ export async function skillsAddCommand(cwd, skillId) {
11
10
  console.log(chalk.dim(" Run `npx @lobu/cli skills list` to see available skills.\n"));
12
11
  return;
13
12
  }
14
- const configPath = join(cwd, CONFIG_FILENAME);
15
- let raw;
16
- try {
17
- raw = await readFile(configPath, "utf-8");
18
- }
19
- catch {
20
- console.log(chalk.red(`\n No ${CONFIG_FILENAME} found. Run \`lobu init\` first.\n`));
21
- return;
22
- }
23
- const parsed = parseToml(raw);
24
- const agents = parsed.agents;
25
- if (!agents || Object.keys(agents).length === 0) {
26
- console.log(chalk.red("\n No agents found in lobu.toml.\n"));
13
+ const ctx = await loadAgentContext(cwd);
14
+ if (!ctx)
27
15
  return;
28
- }
29
- const agentId = Object.keys(agents)[0];
30
- const agent = agents[agentId];
31
- const skills = (agent.skills ?? { enabled: [] });
32
- const enabled = (skills.enabled ?? []);
16
+ const skillsSection = (ctx.agent.skills ?? { enabled: [] });
17
+ const enabled = (skillsSection.enabled ?? []);
33
18
  if (enabled.includes(skillId)) {
34
19
  console.log(chalk.yellow(`\n Skill "${skillId}" is already enabled.\n`));
35
20
  return;
36
21
  }
37
22
  // Update the enabled array in-place via regex to preserve file formatting
38
- const skillsKey = `agents.${agentId}.skills`;
23
+ const skillsKey = `agents.${ctx.agentId}.skills`;
39
24
  const enabledPattern = new RegExp(`(\\[${skillsKey.replace(/\./g, "\\.")}\\][^\\[]*enabled\\s*=\\s*\\[)([^\\]]*)\\]`);
40
- const match = raw.match(enabledPattern);
25
+ const match = ctx.raw.match(enabledPattern);
41
26
  if (match) {
42
27
  const existing = match[2].trim();
43
28
  const newList = existing ? `${existing}, "${skillId}"` : `"${skillId}"`;
44
- const updated = raw.replace(enabledPattern, `$1${newList}]`);
45
- await writeFile(configPath, updated);
29
+ const updated = ctx.raw.replace(enabledPattern, `$1${newList}]`);
30
+ await writeFile(ctx.configPath, updated);
46
31
  }
47
32
  else {
48
- // No skills section yet — append one
49
- const tomlBlock = ["", `[${skillsKey}]`, `enabled = ["${skillId}"]`].join("\n");
50
- await writeFile(configPath, `${raw.trimEnd()}\n${tomlBlock}\n`);
33
+ await appendTomlBlock(ctx, [
34
+ "",
35
+ `[${skillsKey}]`,
36
+ `enabled = ["${skillId}"]`,
37
+ ]);
51
38
  }
52
39
  console.log(chalk.green(`\n Added "${skillId}" to ${CONFIG_FILENAME}`));
53
- // Show required secrets if provider
54
40
  if (skill.providers) {
55
41
  const envVars = skill.providers.map((p) => p.envVarName);
56
42
  if (envVars.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/commands/skills/add.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/commands/skills/add.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Shared helpers for the `lobu {providers,skills,connections} add` commands.
3
+ * All three follow the same pattern: read lobu.toml, locate the first agent,
4
+ * apply a mutation, write the updated file, and optionally set secrets.
5
+ */
6
+ export interface AgentContext {
7
+ /** Absolute path to lobu.toml */
8
+ configPath: string;
9
+ /** Raw TOML text */
10
+ raw: string;
11
+ /** Parsed TOML object */
12
+ parsed: Record<string, unknown>;
13
+ /** ID of the first agent (Lobu assumes one agent per project today) */
14
+ agentId: string;
15
+ /** The first agent's config object */
16
+ agent: Record<string, unknown>;
17
+ /** All agents keyed by ID */
18
+ agents: Record<string, Record<string, unknown>>;
19
+ }
20
+ /**
21
+ * Load lobu.toml and return the first agent's context.
22
+ * Prints a red error message and returns null if the file or agent is missing.
23
+ */
24
+ export declare function loadAgentContext(cwd: string): Promise<AgentContext | null>;
25
+ /**
26
+ * Append a block of TOML lines to the end of lobu.toml.
27
+ * Preserves existing comments/formatting by editing the raw text.
28
+ */
29
+ export declare function appendTomlBlock(ctx: AgentContext, lines: string[]): Promise<void>;
30
+ /**
31
+ * Write multiple secrets to .env via the secrets command.
32
+ */
33
+ export declare function setSecrets(cwd: string, secrets: Array<{
34
+ envVar: string;
35
+ value: string;
36
+ }>): Promise<void>;
37
+ //# sourceMappingURL=agent-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-helpers.d.ts","sourceRoot":"","sources":["../../src/config/agent-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,MAAM,WAAW,YAAY;IAC3B,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACjD;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CA8B9B;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,IAAI,CAAC,CAGf;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,GAChD,OAAO,CAAC,IAAI,CAAC,CAIf"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Shared helpers for the `lobu {providers,skills,connections} add` commands.
3
+ * All three follow the same pattern: read lobu.toml, locate the first agent,
4
+ * apply a mutation, write the updated file, and optionally set secrets.
5
+ */
6
+ import { readFile, writeFile } from "node:fs/promises";
7
+ import { join } from "node:path";
8
+ import chalk from "chalk";
9
+ import { parse as parseToml } from "smol-toml";
10
+ import { secretsSetCommand } from "../commands/secrets.js";
11
+ import { CONFIG_FILENAME } from "./loader.js";
12
+ /**
13
+ * Load lobu.toml and return the first agent's context.
14
+ * Prints a red error message and returns null if the file or agent is missing.
15
+ */
16
+ export async function loadAgentContext(cwd) {
17
+ const configPath = join(cwd, CONFIG_FILENAME);
18
+ let raw;
19
+ try {
20
+ raw = await readFile(configPath, "utf-8");
21
+ }
22
+ catch {
23
+ console.log(chalk.red(`\n No ${CONFIG_FILENAME} found. Run \`lobu init\` first.\n`));
24
+ return null;
25
+ }
26
+ const parsed = parseToml(raw);
27
+ const agents = parsed.agents;
28
+ if (!agents || Object.keys(agents).length === 0) {
29
+ console.log(chalk.red(`\n No agents found in ${CONFIG_FILENAME}.\n`));
30
+ return null;
31
+ }
32
+ const agentId = Object.keys(agents)[0];
33
+ return {
34
+ configPath,
35
+ raw,
36
+ parsed,
37
+ agentId,
38
+ agent: agents[agentId],
39
+ agents,
40
+ };
41
+ }
42
+ /**
43
+ * Append a block of TOML lines to the end of lobu.toml.
44
+ * Preserves existing comments/formatting by editing the raw text.
45
+ */
46
+ export async function appendTomlBlock(ctx, lines) {
47
+ const block = lines.join("\n");
48
+ await writeFile(ctx.configPath, `${ctx.raw.trimEnd()}\n${block}\n`);
49
+ }
50
+ /**
51
+ * Write multiple secrets to .env via the secrets command.
52
+ */
53
+ export async function setSecrets(cwd, secrets) {
54
+ for (const secret of secrets) {
55
+ await secretsSetCommand(cwd, secret.envVar, secret.value);
56
+ }
57
+ }
58
+ //# sourceMappingURL=agent-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-helpers.js","sourceRoot":"","sources":["../../src/config/agent-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAiB9C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAW;IAEX,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAC9C,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,UAAU,eAAe,oCAAoC,CAAC,CACzE,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAA4B,CAAC;IACzD,MAAM,MAAM,GAAG,MAAM,CAAC,MAET,CAAC;IACd,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,eAAe,KAAK,CAAC,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,CAAC;IACxC,OAAO;QACL,UAAU;QACV,GAAG;QACH,MAAM;QACN,OAAO;QACP,KAAK,EAAE,MAAM,CAAC,OAAO,CAAE;QACvB,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAiB,EACjB,KAAe;IAEf,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC;AACtE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,GAAW,EACX,OAAiD;IAEjD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC"}