funolio-agent 0.3.8 → 0.5.0

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 (81) hide show
  1. package/dist/agent-config.d.ts +39 -0
  2. package/dist/agent-config.d.ts.map +1 -0
  3. package/dist/agent-config.js +123 -0
  4. package/dist/agent-config.js.map +1 -0
  5. package/dist/approval.d.ts +26 -0
  6. package/dist/approval.d.ts.map +1 -0
  7. package/dist/approval.js +73 -0
  8. package/dist/approval.js.map +1 -0
  9. package/dist/bot-manager.d.ts +21 -14
  10. package/dist/bot-manager.d.ts.map +1 -1
  11. package/dist/bot-manager.js +75 -82
  12. package/dist/bot-manager.js.map +1 -1
  13. package/dist/cli.js +120 -4
  14. package/dist/cli.js.map +1 -1
  15. package/dist/commands/add.d.ts +8 -0
  16. package/dist/commands/add.d.ts.map +1 -0
  17. package/dist/commands/add.js +212 -0
  18. package/dist/commands/add.js.map +1 -0
  19. package/dist/commands/configure-provider.d.ts +14 -0
  20. package/dist/commands/configure-provider.d.ts.map +1 -0
  21. package/dist/commands/configure-provider.js +332 -0
  22. package/dist/commands/configure-provider.js.map +1 -0
  23. package/dist/commands/detect-tools.d.ts +7 -0
  24. package/dist/commands/detect-tools.d.ts.map +1 -0
  25. package/dist/commands/detect-tools.js +151 -0
  26. package/dist/commands/detect-tools.js.map +1 -0
  27. package/dist/commands/service.d.ts +6 -0
  28. package/dist/commands/service.d.ts.map +1 -0
  29. package/dist/commands/service.js +228 -0
  30. package/dist/commands/service.js.map +1 -0
  31. package/dist/commands/setup.d.ts +9 -0
  32. package/dist/commands/setup.d.ts.map +1 -0
  33. package/dist/commands/setup.js +220 -0
  34. package/dist/commands/setup.js.map +1 -0
  35. package/dist/commands/start.d.ts +2 -0
  36. package/dist/commands/start.d.ts.map +1 -1
  37. package/dist/commands/start.js +142 -44
  38. package/dist/commands/start.js.map +1 -1
  39. package/dist/commands/status.d.ts.map +1 -1
  40. package/dist/commands/status.js +54 -22
  41. package/dist/commands/status.js.map +1 -1
  42. package/dist/config.d.ts +23 -1
  43. package/dist/config.d.ts.map +1 -1
  44. package/dist/config.js +1 -1
  45. package/dist/config.js.map +1 -1
  46. package/dist/funolio-agent-linux-x64 +0 -0
  47. package/dist/message-loop.d.ts +6 -0
  48. package/dist/message-loop.d.ts.map +1 -1
  49. package/dist/message-loop.js +54 -15
  50. package/dist/message-loop.js.map +1 -1
  51. package/dist/mqtt-client.d.ts +19 -1
  52. package/dist/mqtt-client.d.ts.map +1 -1
  53. package/dist/mqtt-client.js +82 -1
  54. package/dist/mqtt-client.js.map +1 -1
  55. package/dist/providers/anthropic.d.ts +1 -0
  56. package/dist/providers/anthropic.d.ts.map +1 -1
  57. package/dist/providers/anthropic.js +58 -26
  58. package/dist/providers/anthropic.js.map +1 -1
  59. package/dist/providers/claude-cli.d.ts +1 -0
  60. package/dist/providers/claude-cli.d.ts.map +1 -1
  61. package/dist/providers/claude-cli.js +88 -14
  62. package/dist/providers/claude-cli.js.map +1 -1
  63. package/dist/providers/google.d.ts.map +1 -1
  64. package/dist/providers/google.js +31 -2
  65. package/dist/providers/google.js.map +1 -1
  66. package/dist/providers/index.d.ts +8 -1
  67. package/dist/providers/index.d.ts.map +1 -1
  68. package/dist/providers/index.js +42 -2
  69. package/dist/providers/index.js.map +1 -1
  70. package/dist/providers/openai.d.ts +3 -1
  71. package/dist/providers/openai.d.ts.map +1 -1
  72. package/dist/providers/openai.js +23 -3
  73. package/dist/providers/openai.js.map +1 -1
  74. package/dist/service-mode.d.ts +24 -0
  75. package/dist/service-mode.d.ts.map +1 -0
  76. package/dist/service-mode.js +123 -0
  77. package/dist/service-mode.js.map +1 -0
  78. package/dist/tools/run-command.d.ts.map +1 -1
  79. package/dist/tools/run-command.js +4 -1
  80. package/dist/tools/run-command.js.map +1 -1
  81. package/package.json +21 -4
package/dist/cli.js CHANGED
@@ -1,5 +1,41 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
3
39
  Object.defineProperty(exports, "__esModule", { value: true });
4
40
  const commander_1 = require("commander");
5
41
  const login_1 = require("./commands/login");
@@ -7,26 +43,104 @@ const init_1 = require("./commands/init");
7
43
  const start_1 = require("./commands/start");
8
44
  const status_1 = require("./commands/status");
9
45
  const configure_1 = require("./commands/configure");
46
+ const setup_1 = require("./commands/setup");
47
+ const add_1 = require("./commands/add");
10
48
  const update_check_1 = require("./update-check");
11
- const CLI_VERSION = '0.3.3';
49
+ const chalk_1 = __importDefault(require("chalk"));
50
+ // Read version from package.json (single source of truth)
51
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
52
+ const CLI_VERSION = require('../package.json').version;
12
53
  const program = new commander_1.Command();
13
54
  program
14
55
  .name('funolio-agent')
15
56
  .description('Funolio AI agent - run AI tasks locally with your own API keys')
16
57
  .version(CLI_VERSION)
17
- .hook('preAction', async () => {
58
+ .hook('preAction', async (thisCmd, actionCmd) => {
59
+ // Skip update check in service mode — stdout must be JSON-only
60
+ const modeOpt = actionCmd.opts?.()?.mode;
61
+ if (modeOpt === 'service')
62
+ return;
18
63
  await (0, update_check_1.checkForUpdates)(CLI_VERSION);
19
64
  });
65
+ // === New commands (recommended flow) ===
66
+ program
67
+ .command('setup')
68
+ .description('Set up agent on a server (pairing code auth, no browser needed)')
69
+ .option('--code <code>', 'Pairing code from funolio.com')
70
+ .option('--name <name>', 'Agent name (defaults to hostname)')
71
+ .option('--provider <provider>', 'LLM provider (claude-cli, anthropic, openai, google)')
72
+ .option('--non-interactive', 'Skip all prompts (requires --code)')
73
+ .action(setup_1.setupCommand);
74
+ program
75
+ .command('add')
76
+ .description('Add another agent on this machine')
77
+ .option('--code <code>', 'Pairing code (optional if already authenticated)')
78
+ .option('--name <name>', 'Agent name')
79
+ .option('--provider <provider>', 'LLM provider (claude-cli, anthropic, openai, google)')
80
+ .action(add_1.addCommand);
81
+ // === Service management ===
82
+ const serviceCmd = program
83
+ .command('service')
84
+ .description('Manage systemd service for agent');
85
+ serviceCmd
86
+ .command('install')
87
+ .description('Install and start systemd service')
88
+ .option('--name <name>', 'Agent name')
89
+ .action(async (opts) => {
90
+ const { serviceInstallCommand } = await Promise.resolve().then(() => __importStar(require('./commands/service')));
91
+ await serviceInstallCommand(opts.name);
92
+ });
93
+ serviceCmd
94
+ .command('start')
95
+ .description('Start the systemd service')
96
+ .option('--name <name>', 'Agent name')
97
+ .action(async (opts) => {
98
+ const { serviceStartCommand } = await Promise.resolve().then(() => __importStar(require('./commands/service')));
99
+ await serviceStartCommand(opts.name);
100
+ });
101
+ serviceCmd
102
+ .command('stop')
103
+ .description('Stop the systemd service')
104
+ .option('--name <name>', 'Agent name')
105
+ .action(async (opts) => {
106
+ const { serviceStopCommand } = await Promise.resolve().then(() => __importStar(require('./commands/service')));
107
+ await serviceStopCommand(opts.name);
108
+ });
109
+ serviceCmd
110
+ .command('status')
111
+ .description('Show systemd service status')
112
+ .option('--name <name>', 'Agent name')
113
+ .action(async (opts) => {
114
+ const { serviceStatusCommand } = await Promise.resolve().then(() => __importStar(require('./commands/service')));
115
+ await serviceStatusCommand(opts.name);
116
+ });
117
+ serviceCmd
118
+ .command('uninstall')
119
+ .description('Remove systemd service')
120
+ .option('--name <name>', 'Agent name')
121
+ .action(async (opts) => {
122
+ const { serviceUninstallCommand } = await Promise.resolve().then(() => __importStar(require('./commands/service')));
123
+ await serviceUninstallCommand(opts.name);
124
+ });
125
+ // === Existing commands (backward compatible) ===
20
126
  program
21
127
  .command('init')
22
128
  .description('Set up the agent: API key, connection test, tool installation')
23
129
  .option('--lite', 'Skip heavy tools (Playwright, Docker) for constrained environments')
24
- .action(init_1.initCommand);
130
+ .action(async (options) => {
131
+ console.log(chalk_1.default.yellow('\n⚠ `funolio-agent init` is deprecated. Use `funolio-agent setup` instead.'));
132
+ console.log(chalk_1.default.gray(' The setup command supports headless pairing codes and multi-agent configs.\n'));
133
+ await (0, init_1.initCommand)(options);
134
+ });
25
135
  program
26
136
  .command('login')
27
137
  .description('Authenticate with funolio.com')
28
138
  .option('--token <token>', 'Use an API token directly instead of browser login')
29
- .action(login_1.loginCommand);
139
+ .action(async (options) => {
140
+ console.log(chalk_1.default.yellow('\n⚠ `funolio-agent login` is deprecated. Use `funolio-agent setup` instead.'));
141
+ console.log(chalk_1.default.gray(' The setup command uses pairing codes that work on headless servers.\n'));
142
+ await (0, login_1.loginCommand)(options);
143
+ });
30
144
  program
31
145
  .command('start')
32
146
  .description('Start the agent and connect to Funolio')
@@ -34,6 +148,8 @@ program
34
148
  .option('--provider <provider>', 'LLM provider (anthropic, openai, google)')
35
149
  .option('--model <model>', 'LLM model to use')
36
150
  .option('--api-key <key>', 'LLM API key (or set via env: ANTHROPIC_API_KEY, OPENAI_API_KEY, GOOGLE_API_KEY)')
151
+ .option('--mode <mode>', 'Run mode: interactive (default) or service (headless, for Tauri sidecar)')
152
+ .option('--agent <name>', 'Agent name (for multi-agent setups)')
37
153
  .action(start_1.startCommand);
38
154
  program
39
155
  .command('configure')
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,4CAAgD;AAChD,0CAA8C;AAC9C,4CAAgD;AAChD,8CAAkD;AAClD,oDAAwD;AACxD,iDAAiD;AAEjD,MAAM,WAAW,GAAG,OAAO,CAAC;AAE5B,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,eAAe,CAAC;KACrB,WAAW,CAAC,gEAAgE,CAAC;KAC7E,OAAO,CAAC,WAAW,CAAC;KACpB,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;IAC5B,MAAM,IAAA,8BAAe,EAAC,WAAW,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,+DAA+D,CAAC;KAC5E,MAAM,CAAC,QAAQ,EAAE,oEAAoE,CAAC;KACtF,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,iBAAiB,EAAE,oDAAoD,CAAC;KAC/E,MAAM,CAAC,oBAAY,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,wCAAwC,CAAC;KACrD,QAAQ,CAAC,eAAe,EAAE,8BAA8B,EAAE,GAAG,CAAC;KAC9D,MAAM,CAAC,uBAAuB,EAAE,0CAA0C,CAAC;KAC3E,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;KAC7C,MAAM,CAAC,iBAAiB,EAAE,iFAAiF,CAAC;KAC5G,MAAM,CAAC,oBAAY,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,4BAAgB,CAAC,CAAC;AAE5B,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,sBAAa,CAAC,CAAC;AAEzB,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ interface AddOptions {
2
+ code?: string;
3
+ name?: string;
4
+ provider?: string;
5
+ }
6
+ export declare function addCommand(options: AddOptions): Promise<void>;
7
+ export {};
8
+ //# sourceMappingURL=add.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AASA,UAAU,UAAU;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAYD,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA2KnE"}
@@ -0,0 +1,212 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.addCommand = addCommand;
40
+ const chalk_1 = __importDefault(require("chalk"));
41
+ const readline = __importStar(require("readline"));
42
+ const os = __importStar(require("os"));
43
+ const config_1 = require("../config");
44
+ const agent_config_1 = require("../agent-config");
45
+ const configure_provider_1 = require("./configure-provider");
46
+ const detect_tools_1 = require("./detect-tools");
47
+ const service_1 = require("./service");
48
+ function prompt(question) {
49
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
50
+ return new Promise((resolve) => {
51
+ rl.question(question, (answer) => {
52
+ rl.close();
53
+ resolve(answer.trim());
54
+ });
55
+ });
56
+ }
57
+ async function addCommand(options) {
58
+ console.log(chalk_1.default.blue.bold('\n➕ Add Another Funolio Agent\n'));
59
+ const config = (0, config_1.loadConfig)();
60
+ // Show existing agents
61
+ const existingAgents = (0, agent_config_1.listAgents)();
62
+ if (existingAgents.length > 0) {
63
+ console.log(chalk_1.default.white(' Existing agents on this machine:\n'));
64
+ for (const name of existingAgents) {
65
+ const agentCfg = (0, agent_config_1.loadAgentConfig)(name);
66
+ if (agentCfg) {
67
+ console.log(chalk_1.default.gray(` • ${name} — ${agentCfg.provider}/${agentCfg.model}`));
68
+ }
69
+ else {
70
+ console.log(chalk_1.default.gray(` • ${name} (config missing)`));
71
+ }
72
+ }
73
+ console.log('');
74
+ }
75
+ else {
76
+ console.log(chalk_1.default.yellow(' No existing agents found. Consider using `funolio-agent setup` instead.\n'));
77
+ }
78
+ // Auth — reuse existing or pair new
79
+ if (!config.auth?.token) {
80
+ // Need to authenticate first
81
+ let code = options.code;
82
+ if (!code) {
83
+ code = await prompt(' Pairing code (from funolio.com): ');
84
+ }
85
+ if (!code || code.length < 4 || code.length > 8) {
86
+ console.error(chalk_1.default.red(' ✗ Invalid pairing code.'));
87
+ process.exit(1);
88
+ }
89
+ console.log(chalk_1.default.blue(' Connecting to Funolio...'));
90
+ try {
91
+ const res = await fetch(`${config_1.FUNOLIO_API_URL}/api/v1/agent/auth/pair`, {
92
+ method: 'POST',
93
+ headers: { 'Content-Type': 'application/json' },
94
+ body: JSON.stringify({ pairingCode: code.toUpperCase() }),
95
+ });
96
+ if (!res.ok) {
97
+ const err = await res.json().catch(() => ({ error: res.statusText }));
98
+ console.error(chalk_1.default.red(` ✗ ${err.error || 'Pairing failed'}`));
99
+ process.exit(1);
100
+ }
101
+ const data = await res.json();
102
+ config.auth = {
103
+ token: data.token,
104
+ userId: data.userId,
105
+ username: data.username,
106
+ mqttJwt: data.mqttJwt,
107
+ mqttJwtExpiresAt: data.mqttJwtExpiresAt,
108
+ expiresAt: Date.now() + 365 * 24 * 60 * 60 * 1000,
109
+ };
110
+ (0, config_1.saveConfig)(config);
111
+ console.log(chalk_1.default.green(` ✓ Authenticated as ${data.username}`));
112
+ }
113
+ catch (err) {
114
+ console.error(chalk_1.default.red(` ✗ Could not reach Funolio: ${err.message}`));
115
+ process.exit(1);
116
+ }
117
+ }
118
+ else {
119
+ console.log(chalk_1.default.green(` ✓ Using existing auth: ${config.auth.username}`));
120
+ // Optionally pair with a different code (different account)
121
+ if (options.code) {
122
+ console.log(chalk_1.default.blue(' Pairing with new code...'));
123
+ try {
124
+ const res = await fetch(`${config_1.FUNOLIO_API_URL}/api/v1/agent/auth/pair`, {
125
+ method: 'POST',
126
+ headers: { 'Content-Type': 'application/json' },
127
+ body: JSON.stringify({ pairingCode: options.code.toUpperCase() }),
128
+ });
129
+ if (res.ok) {
130
+ const data = await res.json();
131
+ config.auth = {
132
+ token: data.token,
133
+ userId: data.userId,
134
+ username: data.username,
135
+ mqttJwt: data.mqttJwt,
136
+ mqttJwtExpiresAt: data.mqttJwtExpiresAt,
137
+ expiresAt: Date.now() + 365 * 24 * 60 * 60 * 1000,
138
+ };
139
+ (0, config_1.saveConfig)(config);
140
+ console.log(chalk_1.default.green(` ✓ Re-authenticated as ${data.username}`));
141
+ }
142
+ }
143
+ catch { /* use existing auth */ }
144
+ }
145
+ }
146
+ // Agent name
147
+ let agentName = options.name;
148
+ if (!agentName) {
149
+ const suggestion = `agent-${existingAgents.length + 1}`;
150
+ agentName = (await prompt(`\n Agent name [${suggestion}]: `)) || suggestion;
151
+ }
152
+ agentName = agentName.replace(/[^a-zA-Z0-9_-]/g, '-').toLowerCase();
153
+ // Check for duplicates
154
+ if (existingAgents.includes(agentName)) {
155
+ console.error(chalk_1.default.red(` ✗ Agent "${agentName}" already exists.`));
156
+ console.error(chalk_1.default.gray(' Choose a different name or remove the existing agent first.'));
157
+ process.exit(1);
158
+ }
159
+ // Register bot on server
160
+ let botId;
161
+ try {
162
+ const createRes = await fetch(`${config_1.FUNOLIO_API_URL}/api/v1/agent/bots`, {
163
+ method: 'POST',
164
+ headers: {
165
+ 'Content-Type': 'application/json',
166
+ Authorization: `Bearer ${config.auth.token}`,
167
+ },
168
+ body: JSON.stringify({
169
+ name: agentName,
170
+ installMethod: 'server',
171
+ serverHost: os.hostname(),
172
+ }),
173
+ });
174
+ if (createRes.ok) {
175
+ const botData = await createRes.json();
176
+ botId = botData.id;
177
+ console.log(chalk_1.default.green(` ✓ Agent "${botData.name}" registered`));
178
+ }
179
+ }
180
+ catch {
181
+ console.log(chalk_1.default.yellow(' ⚠ Could not register bot (non-fatal)'));
182
+ }
183
+ // LLM provider (can be different from other agents)
184
+ const providerConfig = await (0, configure_provider_1.configureProvider)({
185
+ provider: options.provider,
186
+ }, config);
187
+ // Save agent-specific config
188
+ const agentLocalConfig = (0, agent_config_1.createAgentLocalConfig)(agentName, botId, providerConfig);
189
+ (0, agent_config_1.saveAgentConfig)(agentName, agentLocalConfig);
190
+ (0, config_1.saveConfig)(config);
191
+ // Detect tools & report
192
+ await (0, detect_tools_1.detectAndReport)(config.auth.token);
193
+ // Systemd service
194
+ if (process.platform === 'linux') {
195
+ const installService = (await prompt('\n🔧 Install as system service? (Y/n): ')).toLowerCase() !== 'n';
196
+ if (installService) {
197
+ await (0, service_1.serviceInstallCommand)(agentName);
198
+ }
199
+ }
200
+ // Summary
201
+ console.log(chalk_1.default.green.bold('\n✅ Agent added!\n'));
202
+ console.log(chalk_1.default.gray(` Name: ${agentName}`));
203
+ console.log(chalk_1.default.gray(` Provider: ${providerConfig.id} (${providerConfig.defaultModel})`));
204
+ console.log(chalk_1.default.gray(` Config: ~/.funolio/agents/${agentName}/config.json`));
205
+ console.log('');
206
+ const allAgents = (0, agent_config_1.listAgents)();
207
+ if (allAgents.length > 1) {
208
+ console.log(chalk_1.default.white(` All agents on this machine: ${allAgents.join(', ')}`));
209
+ }
210
+ console.log(chalk_1.default.cyan('\n Dashboard: https://funolio.com/mission-control\n'));
211
+ }
212
+ //# sourceMappingURL=add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { type ProviderConfig, type FunolioConfig } from '../config';
2
+ interface ProviderOptions {
3
+ provider?: string;
4
+ nonInteractive?: boolean;
5
+ }
6
+ /**
7
+ * Interactive LLM provider configuration.
8
+ * Used by both `setup` and `add` commands.
9
+ * Saves the provider config to the provided config object (or global config).
10
+ * Returns the configured provider.
11
+ */
12
+ export declare function configureProvider(options: ProviderOptions, config?: FunolioConfig): Promise<ProviderConfig>;
13
+ export {};
14
+ //# sourceMappingURL=configure-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure-provider.d.ts","sourceRoot":"","sources":["../../src/commands/configure-provider.ts"],"names":[],"mappings":"AAIA,OAAO,EAA2D,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAE7H,UAAU,eAAe;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAwLD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAsHjH"}