funolio-agent 0.3.8 → 0.5.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/dist/agent-config.d.ts +39 -0
- package/dist/agent-config.d.ts.map +1 -0
- package/dist/agent-config.js +123 -0
- package/dist/agent-config.js.map +1 -0
- package/dist/approval.d.ts +26 -0
- package/dist/approval.d.ts.map +1 -0
- package/dist/approval.js +73 -0
- package/dist/approval.js.map +1 -0
- package/dist/bot-manager.d.ts +23 -14
- package/dist/bot-manager.d.ts.map +1 -1
- package/dist/bot-manager.js +83 -82
- package/dist/bot-manager.js.map +1 -1
- package/dist/cli.js +120 -4
- package/dist/cli.js.map +1 -1
- package/dist/commands/add.d.ts +8 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +212 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/configure-provider.d.ts +14 -0
- package/dist/commands/configure-provider.d.ts.map +1 -0
- package/dist/commands/configure-provider.js +332 -0
- package/dist/commands/configure-provider.js.map +1 -0
- package/dist/commands/configure.d.ts.map +1 -1
- package/dist/commands/configure.js +4 -0
- package/dist/commands/configure.js.map +1 -1
- package/dist/commands/detect-tools.d.ts +7 -0
- package/dist/commands/detect-tools.d.ts.map +1 -0
- package/dist/commands/detect-tools.js +151 -0
- package/dist/commands/detect-tools.js.map +1 -0
- package/dist/commands/service.d.ts +6 -0
- package/dist/commands/service.d.ts.map +1 -0
- package/dist/commands/service.js +228 -0
- package/dist/commands/service.js.map +1 -0
- package/dist/commands/setup.d.ts +9 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +220 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/start.d.ts +2 -0
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +184 -44
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +54 -22
- package/dist/commands/status.js.map +1 -1
- package/dist/config.d.ts +23 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/funolio-agent-linux-x64 +0 -0
- package/dist/message-loop.d.ts +8 -0
- package/dist/message-loop.d.ts.map +1 -1
- package/dist/message-loop.js +63 -15
- package/dist/message-loop.js.map +1 -1
- package/dist/mqtt-client.d.ts +19 -1
- package/dist/mqtt-client.d.ts.map +1 -1
- package/dist/mqtt-client.js +82 -1
- package/dist/mqtt-client.js.map +1 -1
- package/dist/oauth.d.ts +5 -0
- package/dist/oauth.d.ts.map +1 -1
- package/dist/oauth.js +44 -0
- package/dist/oauth.js.map +1 -1
- package/dist/providers/anthropic.d.ts +1 -0
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +58 -26
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/claude-cli.d.ts +1 -0
- package/dist/providers/claude-cli.d.ts.map +1 -1
- package/dist/providers/claude-cli.js +88 -14
- package/dist/providers/claude-cli.js.map +1 -1
- package/dist/providers/google.d.ts.map +1 -1
- package/dist/providers/google.js +31 -2
- package/dist/providers/google.js.map +1 -1
- package/dist/providers/index.d.ts +8 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +42 -2
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/openai.d.ts +3 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +23 -3
- package/dist/providers/openai.js.map +1 -1
- package/dist/service-mode.d.ts +24 -0
- package/dist/service-mode.d.ts.map +1 -0
- package/dist/service-mode.js +123 -0
- package/dist/service-mode.js.map +1 -0
- package/dist/tools/run-command.d.ts.map +1 -1
- package/dist/tools/run-command.js +4 -1
- package/dist/tools/run-command.js.map +1 -1
- 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":";AAAA;;;;;;;;;;;;GAYG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBH,oCAEC;AAED,kCAEC;AAED,gDAEC;AAED,0CAEC;AAED,gCAMC;AAED,0CAQC;AAED,0CASC;AAED,8CAKC;AAKD,wDAiBC;AA7FD,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAgBzB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AACxD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AAEpD,SAAgB,YAAY;IAC1B,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAgB,WAAW,CAAC,IAAY;IACtC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,SAAgB,kBAAkB,CAAC,IAAY;IAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;AACpD,CAAC;AAED,SAAgB,eAAe,CAAC,IAAY;IAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,SAAgB,UAAU;IACxB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1C,OAAO,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;QAC/D,OAAO,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,eAAe,CAAC,IAAY;IAC1C,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAqB,CAAC;QAC9E,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,2BAA2B,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,eAAe,CAAC,IAAY,EAAE,MAAwB;IACpE,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAEtC,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAExD,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC5C,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACjF,CAAC;AAED,SAAgB,iBAAiB,CAAC,IAAY;IAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,sBAAsB,CACpC,IAAY,EACZ,KAAyB,EACzB,QAAwB,EACxB,SAAkB;IAElB,OAAO;QACL,IAAI;QACJ,KAAK;QACL,QAAQ,EAAE,QAAQ,CAAC,EAAE;QACrB,KAAK,EAAE,QAAQ,CAAC,YAAY;QAC5B,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,SAAS,EAAE,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE;QACrC,cAAc,EAAE,WAAW;QAC3B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;AACJ,CAAC"}
|
|
@@ -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"}
|
package/dist/approval.js
ADDED
|
@@ -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"}
|
package/dist/bot-manager.d.ts
CHANGED
|
@@ -1,40 +1,49 @@
|
|
|
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
|
-
/**
|
|
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
|
|
15
|
-
* The
|
|
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
|
|
22
|
-
|
|
23
|
-
/** Handle an incoming MQTT command, routing to the
|
|
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
|
|
26
|
-
|
|
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
|
|
34
|
-
private
|
|
37
|
+
private startLoop;
|
|
38
|
+
private stopLoop;
|
|
35
39
|
private getDefaultLoop;
|
|
36
|
-
|
|
37
|
-
private
|
|
38
|
-
|
|
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;
|
|
46
|
+
/** Update the default OAuth token for the active loop (used by token refresh) */
|
|
47
|
+
updateDefaultToken(token: string): void;
|
|
39
48
|
}
|
|
40
49
|
//# sourceMappingURL=bot-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bot-manager.d.ts","sourceRoot":"","sources":["../src/bot-manager.ts"],"names":[],"mappings":"
|
|
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;IA2BzB,iFAAiF;IACjF,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAOxC"}
|
package/dist/bot-manager.js
CHANGED
|
@@ -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
|
|
12
|
-
* The
|
|
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
|
|
21
|
-
|
|
22
|
-
|
|
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: '
|
|
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
|
|
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
|
-
|
|
36
|
+
case 'agent_add':
|
|
37
|
+
this.handleAgentAdd(command);
|
|
46
38
|
break;
|
|
47
39
|
case 'bot_remove':
|
|
48
|
-
|
|
40
|
+
case 'agent_remove':
|
|
41
|
+
this.handleAgentRemove(command);
|
|
49
42
|
break;
|
|
50
43
|
case 'bot_update':
|
|
51
|
-
|
|
44
|
+
case 'agent_update':
|
|
45
|
+
this.handleAgentUpdate(command);
|
|
52
46
|
break;
|
|
53
47
|
default:
|
|
54
|
-
// Route prompt/cancel/ping to the
|
|
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
|
|
59
|
-
|
|
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__' ? '
|
|
59
|
+
name: id === '__default__' ? 'active' : id,
|
|
66
60
|
provider: opts.provider,
|
|
67
61
|
model: opts.model,
|
|
68
62
|
running: true,
|
|
@@ -70,101 +64,108 @@ class BotManager {
|
|
|
70
64
|
}
|
|
71
65
|
return statuses;
|
|
72
66
|
}
|
|
73
|
-
|
|
74
|
-
if (this.loops.has(
|
|
67
|
+
startLoop(agent) {
|
|
68
|
+
if (this.loops.has(agent.id))
|
|
75
69
|
return;
|
|
76
70
|
const loop = new message_loop_1.MessageLoop({
|
|
77
|
-
provider:
|
|
78
|
-
model:
|
|
79
|
-
apiKey:
|
|
80
|
-
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(
|
|
82
|
+
this.loops.set(agent.id, loop);
|
|
86
83
|
}
|
|
87
|
-
|
|
88
|
-
if (!this.loops.has(
|
|
84
|
+
stopLoop(agentId) {
|
|
85
|
+
if (!this.loops.has(agentId))
|
|
89
86
|
return false;
|
|
90
|
-
this.loops.delete(
|
|
87
|
+
this.loops.delete(agentId);
|
|
91
88
|
return true;
|
|
92
89
|
}
|
|
93
90
|
getDefaultLoop() {
|
|
94
91
|
return this.loops.get('__default__');
|
|
95
92
|
}
|
|
96
|
-
|
|
93
|
+
/** Add a new agent — persists to config.agents[] */
|
|
94
|
+
handleAgentAdd(command) {
|
|
97
95
|
if (!command.bot) {
|
|
98
|
-
console.error(chalk_1.default.red('
|
|
96
|
+
console.error(chalk_1.default.red('agent_add command missing agent payload'));
|
|
99
97
|
return;
|
|
100
98
|
}
|
|
101
|
-
const
|
|
102
|
-
// Save to config
|
|
99
|
+
const agent = command.bot;
|
|
103
100
|
const config = (0, config_1.loadConfig)();
|
|
104
|
-
if (!config.
|
|
105
|
-
config.
|
|
106
|
-
|
|
107
|
-
config.
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
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
|
-
|
|
119
|
-
|
|
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
|
-
|
|
117
|
+
/** Remove an agent — persists to config.agents[] */
|
|
118
|
+
handleAgentRemove(command) {
|
|
123
119
|
if (!command.bot) {
|
|
124
|
-
console.error(chalk_1.default.red('
|
|
120
|
+
console.error(chalk_1.default.red('agent_remove command missing agent payload'));
|
|
125
121
|
return;
|
|
126
122
|
}
|
|
127
|
-
const
|
|
128
|
-
const removed = this.
|
|
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.
|
|
132
|
-
config.
|
|
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(`✓
|
|
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(`
|
|
134
|
+
console.log(chalk_1.default.gray(` Agent "${agentId}" was not running`));
|
|
140
135
|
}
|
|
141
136
|
}
|
|
142
|
-
|
|
137
|
+
/** Update an agent — persists to config.agents[] */
|
|
138
|
+
handleAgentUpdate(command) {
|
|
143
139
|
if (!command.bot) {
|
|
144
|
-
console.error(chalk_1.default.red('
|
|
140
|
+
console.error(chalk_1.default.red('agent_update command missing agent payload'));
|
|
145
141
|
return;
|
|
146
142
|
}
|
|
147
|
-
const
|
|
148
|
-
|
|
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.
|
|
153
|
-
config.
|
|
154
|
-
config.
|
|
155
|
-
config.
|
|
156
|
-
id:
|
|
157
|
-
name:
|
|
158
|
-
provider:
|
|
159
|
-
model:
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
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
|
-
|
|
166
|
-
|
|
167
|
-
|
|
159
|
+
this.startLoop(agent);
|
|
160
|
+
console.log(chalk_1.default.blue(`✓ Agent updated: "${agent.name}" (${agent.provider} / ${agent.model})`));
|
|
161
|
+
}
|
|
162
|
+
/** Update the default OAuth token for the active loop (used by token refresh) */
|
|
163
|
+
updateDefaultToken(token) {
|
|
164
|
+
this.options.defaultOauthToken = token;
|
|
165
|
+
const loop = this.loops.get('__default__');
|
|
166
|
+
if (loop) {
|
|
167
|
+
loop.updateToken(token);
|
|
168
|
+
}
|
|
168
169
|
}
|
|
169
170
|
}
|
|
170
171
|
exports.BotManager = BotManager;
|
package/dist/bot-manager.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bot-manager.js","sourceRoot":"","sources":["../src/bot-manager.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,
|
|
1
|
+
{"version":3,"file":"bot-manager.js","sourceRoot":"","sources":["../src/bot-manager.ts"],"names":[],"mappings":"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"}
|