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
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Multi-agent config structure:
3
+ *
4
+ * ~/.funolio/
5
+ * ├── config.json ← global config (auth token, account info)
6
+ * ├── agents/
7
+ * │ ├── dev/
8
+ * │ │ ├── config.json ← agent-specific (name, provider, apiKey, workspace)
9
+ * │ │ └── logs/
10
+ * │ └── ops/
11
+ * │ ├── config.json
12
+ * │ └── logs/
13
+ */
14
+ import type { ProviderConfig } from './config';
15
+ export interface AgentLocalConfig {
16
+ name: string;
17
+ botId?: string;
18
+ provider: string;
19
+ model: string;
20
+ apiKey?: string;
21
+ oauthToken?: string;
22
+ workspace?: string;
23
+ permissionMode?: 'autopilot' | 'approve-destructive' | 'approve-all';
24
+ systemPrompt?: string;
25
+ createdAt: string;
26
+ }
27
+ export declare function getAgentsDir(): string;
28
+ export declare function getAgentDir(name: string): string;
29
+ export declare function getAgentConfigPath(name: string): string;
30
+ export declare function getAgentLogsDir(name: string): string;
31
+ export declare function listAgents(): string[];
32
+ export declare function loadAgentConfig(name: string): AgentLocalConfig | null;
33
+ export declare function saveAgentConfig(name: string, config: AgentLocalConfig): void;
34
+ export declare function deleteAgentConfig(name: string): void;
35
+ /**
36
+ * Convert a ProviderConfig + agent name into an AgentLocalConfig
37
+ */
38
+ export declare function createAgentLocalConfig(name: string, botId: string | undefined, provider: ProviderConfig, workspace?: string): AgentLocalConfig;
39
+ //# sourceMappingURL=agent-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-config.d.ts","sourceRoot":"","sources":["../src/agent-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,WAAW,GAAG,qBAAqB,GAAG,aAAa,CAAC;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAKD,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,UAAU,IAAI,MAAM,EAAE,CAMrC;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAQrE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAS5E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAKpD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,QAAQ,EAAE,cAAc,EACxB,SAAS,CAAC,EAAE,MAAM,GACjB,gBAAgB,CAYlB"}
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ /**
3
+ * Multi-agent config structure:
4
+ *
5
+ * ~/.funolio/
6
+ * ├── config.json ← global config (auth token, account info)
7
+ * ├── agents/
8
+ * │ ├── dev/
9
+ * │ │ ├── config.json ← agent-specific (name, provider, apiKey, workspace)
10
+ * │ │ └── logs/
11
+ * │ └── ops/
12
+ * │ ├── config.json
13
+ * │ └── logs/
14
+ */
15
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ var desc = Object.getOwnPropertyDescriptor(m, k);
18
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
19
+ desc = { enumerable: true, get: function() { return m[k]; } };
20
+ }
21
+ Object.defineProperty(o, k2, desc);
22
+ }) : (function(o, m, k, k2) {
23
+ if (k2 === undefined) k2 = k;
24
+ o[k2] = m[k];
25
+ }));
26
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
27
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
28
+ }) : function(o, v) {
29
+ o["default"] = v;
30
+ });
31
+ var __importStar = (this && this.__importStar) || (function () {
32
+ var ownKeys = function(o) {
33
+ ownKeys = Object.getOwnPropertyNames || function (o) {
34
+ var ar = [];
35
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
36
+ return ar;
37
+ };
38
+ return ownKeys(o);
39
+ };
40
+ return function (mod) {
41
+ if (mod && mod.__esModule) return mod;
42
+ var result = {};
43
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
44
+ __setModuleDefault(result, mod);
45
+ return result;
46
+ };
47
+ })();
48
+ Object.defineProperty(exports, "__esModule", { value: true });
49
+ exports.getAgentsDir = getAgentsDir;
50
+ exports.getAgentDir = getAgentDir;
51
+ exports.getAgentConfigPath = getAgentConfigPath;
52
+ exports.getAgentLogsDir = getAgentLogsDir;
53
+ exports.listAgents = listAgents;
54
+ exports.loadAgentConfig = loadAgentConfig;
55
+ exports.saveAgentConfig = saveAgentConfig;
56
+ exports.deleteAgentConfig = deleteAgentConfig;
57
+ exports.createAgentLocalConfig = createAgentLocalConfig;
58
+ const fs = __importStar(require("fs"));
59
+ const path = __importStar(require("path"));
60
+ const os = __importStar(require("os"));
61
+ const FUNOLIO_DIR = path.join(os.homedir(), '.funolio');
62
+ const AGENTS_DIR = path.join(FUNOLIO_DIR, 'agents');
63
+ function getAgentsDir() {
64
+ return AGENTS_DIR;
65
+ }
66
+ function getAgentDir(name) {
67
+ return path.join(AGENTS_DIR, name);
68
+ }
69
+ function getAgentConfigPath(name) {
70
+ return path.join(AGENTS_DIR, name, 'config.json');
71
+ }
72
+ function getAgentLogsDir(name) {
73
+ return path.join(AGENTS_DIR, name, 'logs');
74
+ }
75
+ function listAgents() {
76
+ if (!fs.existsSync(AGENTS_DIR))
77
+ return [];
78
+ return fs.readdirSync(AGENTS_DIR).filter((entry) => {
79
+ const configPath = path.join(AGENTS_DIR, entry, 'config.json');
80
+ return fs.existsSync(configPath);
81
+ });
82
+ }
83
+ function loadAgentConfig(name) {
84
+ const configPath = getAgentConfigPath(name);
85
+ try {
86
+ if (fs.existsSync(configPath)) {
87
+ return JSON.parse(fs.readFileSync(configPath, 'utf-8'));
88
+ }
89
+ }
90
+ catch { /* ignore corrupt config */ }
91
+ return null;
92
+ }
93
+ function saveAgentConfig(name, config) {
94
+ const agentDir = getAgentDir(name);
95
+ const logsDir = getAgentLogsDir(name);
96
+ fs.mkdirSync(agentDir, { recursive: true, mode: 0o700 });
97
+ fs.mkdirSync(logsDir, { recursive: true, mode: 0o700 });
98
+ const configPath = getAgentConfigPath(name);
99
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2), { mode: 0o600 });
100
+ }
101
+ function deleteAgentConfig(name) {
102
+ const agentDir = getAgentDir(name);
103
+ if (fs.existsSync(agentDir)) {
104
+ fs.rmSync(agentDir, { recursive: true, force: true });
105
+ }
106
+ }
107
+ /**
108
+ * Convert a ProviderConfig + agent name into an AgentLocalConfig
109
+ */
110
+ function createAgentLocalConfig(name, botId, provider, workspace) {
111
+ return {
112
+ name,
113
+ botId,
114
+ provider: provider.id,
115
+ model: provider.defaultModel,
116
+ apiKey: provider.apiKey,
117
+ oauthToken: provider.oauthToken,
118
+ workspace: workspace || process.cwd(),
119
+ permissionMode: 'autopilot',
120
+ createdAt: new Date().toISOString(),
121
+ };
122
+ }
123
+ //# sourceMappingURL=agent-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-config.js","sourceRoot":"","sources":["../src/agent-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Permission Gating — controls which tools can execute based on agent config.
3
+ *
4
+ * Three modes:
5
+ * - autopilot: execute everything without asking
6
+ * - approve-destructive: auto-run reads, DENY destructive tools (writes/commands/git)
7
+ * - approve-all: DENY everything until explicit approval via MQTT
8
+ *
9
+ * When a tool is denied, the agent returns an error to the LLM indicating
10
+ * approval is required. A future version will implement real-time approval
11
+ * via the web UI and MQTT.
12
+ */
13
+ export type PermissionMode = 'autopilot' | 'approve-destructive' | 'approve-all';
14
+ export interface ApprovalResult {
15
+ approved: boolean;
16
+ reason?: string;
17
+ }
18
+ /**
19
+ * Check if a tool call is allowed based on permission mode and enabled tools.
20
+ *
21
+ * @param toolName - The tool being called
22
+ * @param permissionMode - The agent's permission mode
23
+ * @param enabledTools - List of tool names that are enabled (if undefined, all are enabled)
24
+ */
25
+ export declare function checkPermission(toolName: string, permissionMode: PermissionMode, enabledTools?: string[]): ApprovalResult;
26
+ //# sourceMappingURL=approval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approval.d.ts","sourceRoot":"","sources":["../src/approval.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,qBAAqB,GAAG,aAAa,CAAC;AAkBjF,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,cAAc,EAC9B,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB,cAAc,CAuChB"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ /**
3
+ * Permission Gating — controls which tools can execute based on agent config.
4
+ *
5
+ * Three modes:
6
+ * - autopilot: execute everything without asking
7
+ * - approve-destructive: auto-run reads, DENY destructive tools (writes/commands/git)
8
+ * - approve-all: DENY everything until explicit approval via MQTT
9
+ *
10
+ * When a tool is denied, the agent returns an error to the LLM indicating
11
+ * approval is required. A future version will implement real-time approval
12
+ * via the web UI and MQTT.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.checkPermission = checkPermission;
16
+ /** Tools that modify state — require approval in approve-destructive mode */
17
+ const DESTRUCTIVE_TOOLS = new Set([
18
+ 'write_file',
19
+ 'edit_file',
20
+ 'run_command',
21
+ 'git_commit',
22
+ ]);
23
+ /** Read-only tools — auto-approved in approve-destructive mode */
24
+ const READONLY_TOOLS = new Set([
25
+ 'read_file',
26
+ 'list_directory',
27
+ 'git_status',
28
+ 'git_diff',
29
+ ]);
30
+ /**
31
+ * Check if a tool call is allowed based on permission mode and enabled tools.
32
+ *
33
+ * @param toolName - The tool being called
34
+ * @param permissionMode - The agent's permission mode
35
+ * @param enabledTools - List of tool names that are enabled (if undefined, all are enabled)
36
+ */
37
+ function checkPermission(toolName, permissionMode, enabledTools) {
38
+ // Check if tool is enabled
39
+ if (enabledTools && !enabledTools.includes(toolName)) {
40
+ return {
41
+ approved: false,
42
+ reason: `Tool "${toolName}" is not enabled for this agent`,
43
+ };
44
+ }
45
+ // Check permission mode
46
+ switch (permissionMode) {
47
+ case 'autopilot':
48
+ return { approved: true };
49
+ case 'approve-destructive':
50
+ if (READONLY_TOOLS.has(toolName)) {
51
+ return { approved: true };
52
+ }
53
+ if (DESTRUCTIVE_TOOLS.has(toolName)) {
54
+ return {
55
+ approved: false,
56
+ reason: `Tool "${toolName}" requires user approval (destructive action). Permission mode: approve-destructive.`,
57
+ };
58
+ }
59
+ // Unknown tool — deny by default in approve-destructive mode
60
+ return {
61
+ approved: false,
62
+ reason: `Tool "${toolName}" is not recognized as read-only. Approval required.`,
63
+ };
64
+ case 'approve-all':
65
+ return {
66
+ approved: false,
67
+ reason: `Tool "${toolName}" requires user approval. Permission mode: approve-all.`,
68
+ };
69
+ default:
70
+ return { approved: true };
71
+ }
72
+ }
73
+ //# sourceMappingURL=approval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approval.js","sourceRoot":"","sources":["../src/approval.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;AAgCH,0CA2CC;AAvED,6EAA6E;AAC7E,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,YAAY;IACZ,WAAW;IACX,aAAa;IACb,YAAY;CACb,CAAC,CAAC;AAEH,kEAAkE;AAClE,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;IAC7B,WAAW;IACX,gBAAgB;IAChB,YAAY;IACZ,UAAU;CACX,CAAC,CAAC;AAOH;;;;;;GAMG;AACH,SAAgB,eAAe,CAC7B,QAAgB,EAChB,cAA8B,EAC9B,YAAuB;IAEvB,2BAA2B;IAC3B,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrD,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,SAAS,QAAQ,iCAAiC;SAC3D,CAAC;IACJ,CAAC;IAED,wBAAwB;IACxB,QAAQ,cAAc,EAAE,CAAC;QACvB,KAAK,WAAW;YACd,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAE5B,KAAK,qBAAqB;YACxB,IAAI,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACjC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC5B,CAAC;YACD,IAAI,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACpC,OAAO;oBACL,QAAQ,EAAE,KAAK;oBACf,MAAM,EAAE,SAAS,QAAQ,sFAAsF;iBAChH,CAAC;YACJ,CAAC;YACD,6DAA6D;YAC7D,OAAO;gBACL,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,SAAS,QAAQ,sDAAsD;aAChF,CAAC;QAEJ,KAAK,aAAa;YAChB,OAAO;gBACL,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,SAAS,QAAQ,yDAAyD;aACnF,CAAC;QAEJ;YACE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC"}
@@ -1,40 +1,47 @@
1
- import { BotProfile } from './config';
2
1
  import { AgentMqttClient, AgentCommand } from './mqtt-client';
3
2
  export interface BotManagerOptions {
4
3
  projectDir: string;
5
4
  userId: string;
6
5
  mqttClient: AgentMqttClient;
7
- /** Fallback provider/model/apiKey for the "default" bot */
6
+ /** Active agent provider/model/apiKey (resolved from agents[] + providers[]) */
8
7
  defaultProvider: string;
9
8
  defaultModel: string;
10
9
  defaultApiKey?: string;
11
10
  defaultOauthToken?: string;
11
+ /** Active agent permission mode and tool config */
12
+ permissionMode?: string;
13
+ enabledTools?: string[];
14
+ systemPrompt?: string;
12
15
  }
13
16
  /**
14
- * Manages multiple bot MessageLoops, keyed by bot ID.
15
- * The "default" bot (id = "__default__") is the legacy single-bot behaviour.
17
+ * Manages agent MessageLoops, keyed by agent ID.
18
+ * The active agent runs as "__default__" loop.
19
+ * Runtime source of truth: config.agents[] + config.activeAgentId.
16
20
  */
17
21
  export declare class BotManager {
18
22
  private loops;
19
23
  private options;
20
24
  constructor(options: BotManagerOptions);
21
- /** Start the default (legacy) bot + any bots from config */
22
- startAll(bots: BotProfile[] | undefined): void;
23
- /** Handle an incoming MQTT command, routing to the right bot or handling management commands */
25
+ /** Start the active agent loop (resolved from agents[] + activeAgentId in start.ts) */
26
+ startActive(): void;
27
+ /** Handle an incoming MQTT command, routing to the active loop or handling management commands */
24
28
  handleCommand(command: AgentCommand): void;
25
- /** Get status of all running bots */
26
- getBotStatuses(): Array<{
29
+ /** Get status of all running agent loops */
30
+ getAgentStatuses(): Array<{
27
31
  id: string;
28
32
  name: string;
29
33
  provider: string;
30
34
  model: string;
31
35
  running: boolean;
32
36
  }>;
33
- private startBot;
34
- private stopBot;
37
+ private startLoop;
38
+ private stopLoop;
35
39
  private getDefaultLoop;
36
- private handleBotAdd;
37
- private handleBotRemove;
38
- private handleBotUpdate;
40
+ /** Add a new agent — persists to config.agents[] */
41
+ private handleAgentAdd;
42
+ /** Remove an agent — persists to config.agents[] */
43
+ private handleAgentRemove;
44
+ /** Update an agent — persists to config.agents[] */
45
+ private handleAgentUpdate;
39
46
  }
40
47
  //# sourceMappingURL=bot-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bot-manager.d.ts","sourceRoot":"","sources":["../src/bot-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAA0B,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG9D,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,eAAe,CAAC;IAC5B,2DAA2D;IAC3D,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,OAAO,CAAoB;gBAEvB,OAAO,EAAE,iBAAiB;IAItC,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,SAAS,GAAG,IAAI;IAsB9C,gGAAgG;IAChG,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAiB1C,qCAAqC;IACrC,cAAc,IAAI,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAexG,OAAO,CAAC,QAAQ;IAehB,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,YAAY;IA4BpB,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,eAAe;CA6BxB"}
1
+ {"version":3,"file":"bot-manager.d.ts","sourceRoot":"","sources":["../src/bot-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG9D,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,eAAe,CAAC;IAC5B,gFAAgF;IAChF,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mDAAmD;IACnD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,OAAO,CAAoB;gBAEvB,OAAO,EAAE,iBAAiB;IAItC,uFAAuF;IACvF,WAAW,IAAI,IAAI;IAWnB,kGAAkG;IAClG,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAoB1C,4CAA4C;IAC5C,gBAAgB,IAAI,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAe1G,OAAO,CAAC,SAAS;IAkBjB,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,cAAc;IAItB,oDAAoD;IACpD,OAAO,CAAC,cAAc;IAyBtB,oDAAoD;IACpD,OAAO,CAAC,iBAAiB;IAqBzB,oDAAoD;IACpD,OAAO,CAAC,iBAAiB;CA0B1B"}
@@ -8,8 +8,9 @@ const chalk_1 = __importDefault(require("chalk"));
8
8
  const config_1 = require("./config");
9
9
  const message_loop_1 = require("./message-loop");
10
10
  /**
11
- * Manages multiple bot MessageLoops, keyed by bot ID.
12
- * The "default" bot (id = "__default__") is the legacy single-bot behaviour.
11
+ * Manages agent MessageLoops, keyed by agent ID.
12
+ * The active agent runs as "__default__" loop.
13
+ * Runtime source of truth: config.agents[] + config.activeAgentId.
13
14
  */
14
15
  class BotManager {
15
16
  loops = new Map();
@@ -17,52 +18,45 @@ class BotManager {
17
18
  constructor(options) {
18
19
  this.options = options;
19
20
  }
20
- /** Start the default (legacy) bot + any bots from config */
21
- startAll(bots) {
22
- // Always start the default loop (backwards-compatible single-bot)
23
- this.startBot({
21
+ /** Start the active agent loop (resolved from agents[] + activeAgentId in start.ts) */
22
+ startActive() {
23
+ this.startLoop({
24
24
  id: '__default__',
25
- name: 'default',
25
+ name: 'active',
26
26
  provider: this.options.defaultProvider,
27
27
  model: this.options.defaultModel,
28
28
  apiKey: this.options.defaultApiKey,
29
29
  oauthToken: this.options.defaultOauthToken,
30
30
  });
31
- if (bots && bots.length > 0) {
32
- for (const bot of bots) {
33
- if (!bot.apiKey && !bot.oauthToken && bot.provider !== 'claude-cli') {
34
- console.log(chalk_1.default.yellow(` ⚠ Skipping bot "${bot.name}" — no API key or OAuth token`));
35
- continue;
36
- }
37
- this.startBot(bot);
38
- }
39
- }
40
31
  }
41
- /** Handle an incoming MQTT command, routing to the right bot or handling management commands */
32
+ /** Handle an incoming MQTT command, routing to the active loop or handling management commands */
42
33
  handleCommand(command) {
43
34
  switch (command.type) {
44
35
  case 'bot_add':
45
- this.handleBotAdd(command);
36
+ case 'agent_add':
37
+ this.handleAgentAdd(command);
46
38
  break;
47
39
  case 'bot_remove':
48
- this.handleBotRemove(command);
40
+ case 'agent_remove':
41
+ this.handleAgentRemove(command);
49
42
  break;
50
43
  case 'bot_update':
51
- this.handleBotUpdate(command);
44
+ case 'agent_update':
45
+ this.handleAgentUpdate(command);
52
46
  break;
53
47
  default:
54
- // Route prompt/cancel/ping to the default loop
48
+ // Route prompt/cancel/ping to the active loop
55
49
  this.getDefaultLoop()?.handleCommand(command);
56
50
  }
57
51
  }
58
- /** Get status of all running bots */
59
- getBotStatuses() {
52
+ /** Get status of all running agent loops */
53
+ getAgentStatuses() {
60
54
  const statuses = [];
61
55
  for (const [id, loop] of this.loops) {
62
56
  const opts = loop.options;
63
57
  statuses.push({
64
58
  id,
65
- name: id === '__default__' ? 'default' : id,
59
+ name: id === '__default__' ? 'active' : id,
66
60
  provider: opts.provider,
67
61
  model: opts.model,
68
62
  running: true,
@@ -70,101 +64,100 @@ class BotManager {
70
64
  }
71
65
  return statuses;
72
66
  }
73
- startBot(bot) {
74
- if (this.loops.has(bot.id))
67
+ startLoop(agent) {
68
+ if (this.loops.has(agent.id))
75
69
  return;
76
70
  const loop = new message_loop_1.MessageLoop({
77
- provider: bot.provider,
78
- model: bot.model,
79
- apiKey: bot.apiKey || '',
80
- oauthToken: bot.oauthToken,
71
+ provider: agent.provider,
72
+ model: agent.model,
73
+ apiKey: agent.apiKey || '',
74
+ oauthToken: agent.oauthToken,
81
75
  projectDir: this.options.projectDir,
82
76
  userId: this.options.userId,
83
77
  mqttClient: this.options.mqttClient,
78
+ permissionMode: this.options.permissionMode,
79
+ enabledTools: this.options.enabledTools,
80
+ systemPrompt: this.options.systemPrompt,
84
81
  });
85
- this.loops.set(bot.id, loop);
82
+ this.loops.set(agent.id, loop);
86
83
  }
87
- stopBot(botId) {
88
- if (!this.loops.has(botId))
84
+ stopLoop(agentId) {
85
+ if (!this.loops.has(agentId))
89
86
  return false;
90
- this.loops.delete(botId);
87
+ this.loops.delete(agentId);
91
88
  return true;
92
89
  }
93
90
  getDefaultLoop() {
94
91
  return this.loops.get('__default__');
95
92
  }
96
- handleBotAdd(command) {
93
+ /** Add a new agent — persists to config.agents[] */
94
+ handleAgentAdd(command) {
97
95
  if (!command.bot) {
98
- console.error(chalk_1.default.red('bot_add command missing bot payload'));
96
+ console.error(chalk_1.default.red('agent_add command missing agent payload'));
99
97
  return;
100
98
  }
101
- const bot = command.bot;
102
- // Save to config
99
+ const agent = command.bot;
103
100
  const config = (0, config_1.loadConfig)();
104
- if (!config.bots)
105
- config.bots = [];
106
- // Avoid duplicates
107
- config.bots = config.bots.filter((b) => b.id !== bot.id);
108
- config.bots.push({
109
- id: bot.id,
110
- name: bot.name,
111
- provider: bot.provider,
112
- model: bot.model,
113
- apiKey: bot.apiKey,
114
- oauthToken: bot.oauthToken,
115
- oauthRefreshToken: bot.oauthRefreshToken,
101
+ if (!config.agents)
102
+ config.agents = [];
103
+ config.agents = config.agents.filter((a) => a.id !== agent.id);
104
+ config.agents.push({
105
+ id: agent.id,
106
+ name: agent.name,
107
+ provider: agent.provider,
108
+ model: agent.model,
109
+ projectDir: agent.projectDir || '.',
110
+ permissionMode: agent.permissionMode || 'autopilot',
111
+ createdAt: new Date().toISOString(),
116
112
  });
117
113
  (0, config_1.saveConfig)(config);
118
- // Start loop
119
- this.startBot(bot);
120
- console.log(chalk_1.default.green(`✓ New bot added: "${bot.name}" (${bot.provider} / ${bot.model})`));
114
+ this.startLoop(agent);
115
+ console.log(chalk_1.default.green(`✓ Agent added: "${agent.name}" (${agent.provider} / ${agent.model})`));
121
116
  }
122
- handleBotRemove(command) {
117
+ /** Remove an agent — persists to config.agents[] */
118
+ handleAgentRemove(command) {
123
119
  if (!command.bot) {
124
- console.error(chalk_1.default.red('bot_remove command missing bot payload'));
120
+ console.error(chalk_1.default.red('agent_remove command missing agent payload'));
125
121
  return;
126
122
  }
127
- const botId = command.bot.id;
128
- const removed = this.stopBot(botId);
129
- // Remove from config
123
+ const agentId = command.bot.id;
124
+ const removed = this.stopLoop(agentId);
130
125
  const config = (0, config_1.loadConfig)();
131
- if (config.bots) {
132
- config.bots = config.bots.filter((b) => b.id !== botId);
126
+ if (config.agents) {
127
+ config.agents = config.agents.filter((a) => a.id !== agentId);
133
128
  (0, config_1.saveConfig)(config);
134
129
  }
135
130
  if (removed) {
136
- console.log(chalk_1.default.yellow(`✓ Bot removed: "${command.bot.name}" (${botId})`));
131
+ console.log(chalk_1.default.yellow(`✓ Agent removed: "${command.bot.name}" (${agentId})`));
137
132
  }
138
133
  else {
139
- console.log(chalk_1.default.gray(` Bot "${botId}" was not running`));
134
+ console.log(chalk_1.default.gray(` Agent "${agentId}" was not running`));
140
135
  }
141
136
  }
142
- handleBotUpdate(command) {
137
+ /** Update an agent — persists to config.agents[] */
138
+ handleAgentUpdate(command) {
143
139
  if (!command.bot) {
144
- console.error(chalk_1.default.red('bot_update command missing bot payload'));
140
+ console.error(chalk_1.default.red('agent_update command missing agent payload'));
145
141
  return;
146
142
  }
147
- const bot = command.bot;
148
- // Stop existing
149
- this.stopBot(bot.id);
150
- // Update config
143
+ const agent = command.bot;
144
+ this.stopLoop(agent.id);
151
145
  const config = (0, config_1.loadConfig)();
152
- if (!config.bots)
153
- config.bots = [];
154
- config.bots = config.bots.filter((b) => b.id !== bot.id);
155
- config.bots.push({
156
- id: bot.id,
157
- name: bot.name,
158
- provider: bot.provider,
159
- model: bot.model,
160
- apiKey: bot.apiKey,
161
- oauthToken: bot.oauthToken,
162
- oauthRefreshToken: bot.oauthRefreshToken,
146
+ if (!config.agents)
147
+ config.agents = [];
148
+ config.agents = config.agents.filter((a) => a.id !== agent.id);
149
+ config.agents.push({
150
+ id: agent.id,
151
+ name: agent.name,
152
+ provider: agent.provider,
153
+ model: agent.model,
154
+ projectDir: agent.projectDir || '.',
155
+ permissionMode: agent.permissionMode || 'autopilot',
156
+ createdAt: new Date().toISOString(),
163
157
  });
164
158
  (0, config_1.saveConfig)(config);
165
- // Restart
166
- this.startBot(bot);
167
- console.log(chalk_1.default.blue(`✓ Bot updated: "${bot.name}" (${bot.provider} / ${bot.model})`));
159
+ this.startLoop(agent);
160
+ console.log(chalk_1.default.blue(`✓ Agent updated: "${agent.name}" (${agent.provider} / ${agent.model})`));
168
161
  }
169
162
  }
170
163
  exports.BotManager = BotManager;
@@ -1 +1 @@
1
- {"version":3,"file":"bot-manager.js","sourceRoot":"","sources":["../src/bot-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bot-manager.js","sourceRoot":"","sources":["../src/bot-manager.ts"],"names":[],"mappings":"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"}