@xopcai/xopcbot 0.1.2 → 0.1.3
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/service.js +121 -35
- package/dist/agent/service.js.map +1 -1
- package/dist/channels/telegram/command-handler.d.ts +3 -0
- package/dist/channels/telegram/command-handler.js +69 -0
- package/dist/channels/telegram/command-handler.js.map +1 -1
- package/dist/channels/telegram/plugin.js +26 -1
- package/dist/channels/telegram/plugin.js.map +1 -1
- package/dist/cli/commands/config.js +59 -0
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/gateway-daemon.d.ts +1 -0
- package/dist/cli/commands/gateway-daemon.js +141 -0
- package/dist/cli/commands/gateway-daemon.js.map +1 -0
- package/dist/cli/commands/gateway.js +387 -45
- package/dist/cli/commands/gateway.js.map +1 -1
- package/dist/cli/commands/onboard.js +198 -0
- package/dist/cli/commands/onboard.js.map +1 -1
- package/dist/cli/index.js +17 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/config/schema.d.ts +22 -0
- package/dist/config/schema.js +16 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/daemon/background-start.d.ts +33 -0
- package/dist/daemon/background-start.js +89 -0
- package/dist/daemon/background-start.js.map +1 -0
- package/dist/daemon/gateway-manager.d.ts +87 -0
- package/dist/daemon/gateway-manager.js +324 -0
- package/dist/daemon/gateway-manager.js.map +1 -0
- package/dist/daemon/index.d.ts +5 -0
- package/dist/daemon/index.js +6 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/gateway/__tests__/auth.test.d.ts +1 -0
- package/dist/gateway/__tests__/auth.test.js +128 -0
- package/dist/gateway/__tests__/auth.test.js.map +1 -0
- package/dist/gateway/__tests__/process-manager.test.d.ts +4 -0
- package/dist/gateway/__tests__/process-manager.test.js +140 -0
- package/dist/gateway/__tests__/process-manager.test.js.map +1 -0
- package/dist/gateway/auth.d.ts +33 -0
- package/dist/gateway/auth.js +94 -0
- package/dist/gateway/auth.js.map +1 -0
- package/dist/gateway/hono/app.js +54 -15
- package/dist/gateway/hono/app.js.map +1 -1
- package/dist/gateway/index.d.ts +3 -0
- package/dist/gateway/index.js +3 -0
- package/dist/gateway/index.js.map +1 -1
- package/dist/gateway/pid-file.d.ts +35 -0
- package/dist/gateway/pid-file.js +111 -0
- package/dist/gateway/pid-file.js.map +1 -0
- package/dist/gateway/port-checker.d.ts +24 -0
- package/dist/gateway/port-checker.js +132 -0
- package/dist/gateway/port-checker.js.map +1 -0
- package/dist/gateway/process-manager.d.ts +62 -0
- package/dist/gateway/process-manager.js +370 -0
- package/dist/gateway/process-manager.js.map +1 -0
- package/dist/gateway/process-manager.types.d.ts +64 -0
- package/dist/gateway/process-manager.types.js +5 -0
- package/dist/gateway/process-manager.types.js.map +1 -0
- package/dist/gateway/server.js +3 -1
- package/dist/gateway/server.js.map +1 -1
- package/dist/gateway/service.d.ts +20 -0
- package/dist/gateway/service.js +67 -0
- package/dist/gateway/service.js.map +1 -1
- package/dist/gateway/static/root/assets/{main-CfIxL-cL.js → main-DevbZW9K.js} +373 -251
- package/dist/gateway/static/root/assets/main-DevbZW9K.js.map +1 -0
- package/dist/gateway/static/root/assets/{main-DndcTCgX.css → main-DxZg1Nmz.css} +1 -1
- package/dist/gateway/static/root/index.html +2 -2
- package/dist/session/store.js +11 -2
- package/dist/session/store.js.map +1 -1
- package/package.json +1 -1
- package/dist/gateway/static/root/assets/main-CfIxL-cL.js.map +0 -1
|
@@ -32,6 +32,9 @@ function createConfigCommand(ctx) {
|
|
|
32
32
|
'xopcbot config set agents.defaults.temperature 0.8',
|
|
33
33
|
'xopcbot config unset agents.defaults.max_tokens',
|
|
34
34
|
'xopcbot config show',
|
|
35
|
+
'xopcbot config token # Show gateway token info',
|
|
36
|
+
'xopcbot config token --show # Show full token',
|
|
37
|
+
'xopcbot config token --generate # Generate new token',
|
|
35
38
|
]));
|
|
36
39
|
cmd
|
|
37
40
|
.command('get <path>')
|
|
@@ -110,6 +113,59 @@ function createConfigCommand(ctx) {
|
|
|
110
113
|
}, 2);
|
|
111
114
|
console.log(maskedConfig);
|
|
112
115
|
});
|
|
116
|
+
cmd
|
|
117
|
+
.command('token')
|
|
118
|
+
.description('Generate or view the gateway auth token')
|
|
119
|
+
.option('--generate', 'Generate a new token')
|
|
120
|
+
.option('--show', 'Show the current token (unmasked)')
|
|
121
|
+
.action(async (options) => {
|
|
122
|
+
if (!existsSync(ctx.configPath)) {
|
|
123
|
+
log.error('Config file not found. Run: xopcbot onboard');
|
|
124
|
+
process.exit(1);
|
|
125
|
+
}
|
|
126
|
+
const config = loadConfig(ctx.configPath);
|
|
127
|
+
if (options.show) {
|
|
128
|
+
const token = config?.gateway?.auth?.token;
|
|
129
|
+
if (token) {
|
|
130
|
+
console.log(token);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
console.log('No token configured. Gateway auth mode:', config?.gateway?.auth?.mode || 'not set');
|
|
134
|
+
}
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
if (options.generate) {
|
|
138
|
+
const crypto = await import('crypto');
|
|
139
|
+
const newToken = crypto.randomBytes(24).toString('hex');
|
|
140
|
+
config.gateway = config.gateway || {};
|
|
141
|
+
config.gateway.auth = {
|
|
142
|
+
mode: 'token',
|
|
143
|
+
token: newToken,
|
|
144
|
+
};
|
|
145
|
+
writeFileSync(ctx.configPath, JSON.stringify(config, null, 2));
|
|
146
|
+
log.info('New gateway token generated');
|
|
147
|
+
console.log(`Token: ${newToken.slice(0, 8)}...${newToken.slice(-8)}`);
|
|
148
|
+
console.log('\nUse "xopcbot config token --show" to view the full token');
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
// Default: show masked token info
|
|
152
|
+
const token = config?.gateway?.auth?.token;
|
|
153
|
+
const mode = config?.gateway?.auth?.mode;
|
|
154
|
+
const host = config?.gateway?.host || '0.0.0.0';
|
|
155
|
+
const port = config?.gateway?.port || 18790;
|
|
156
|
+
console.log('Gateway Configuration:');
|
|
157
|
+
console.log(` Host: ${host}`);
|
|
158
|
+
console.log(` Port: ${port}`);
|
|
159
|
+
console.log(` Auth Mode: ${mode || 'not set'}`);
|
|
160
|
+
if (token) {
|
|
161
|
+
console.log(` Token: ${token.slice(0, 8)}...${token.slice(-8)}`);
|
|
162
|
+
console.log('\nUse "xopcbot config token --show" to view the full token');
|
|
163
|
+
console.log('Use "xopcbot config token --generate" to generate a new token');
|
|
164
|
+
}
|
|
165
|
+
else if (mode === 'token') {
|
|
166
|
+
console.log(' Token: not set (will be auto-generated on first gateway start)');
|
|
167
|
+
}
|
|
168
|
+
});
|
|
113
169
|
cmd
|
|
114
170
|
.command('path')
|
|
115
171
|
.description('Show configuration file path')
|
|
@@ -129,6 +185,9 @@ register({
|
|
|
129
185
|
'xopcbot config get agents.defaults.model',
|
|
130
186
|
'xopcbot config set agents.defaults.temperature 0.8',
|
|
131
187
|
'xopcbot config show',
|
|
188
|
+
'xopcbot config token',
|
|
189
|
+
'xopcbot config token --show',
|
|
190
|
+
'xopcbot config token --generate',
|
|
132
191
|
],
|
|
133
192
|
},
|
|
134
193
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAmB,MAAM,gBAAgB,CAAC;AAE3E,MAAM,GAAG,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;AAE1C,SAAS,cAAc,CAAC,GAAQ,EAAE,IAAY;IAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAY,EAAE,GAAW,EAAE,EAAE;QAC1D,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC;YAC7D,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,EAAE,GAAG,CAAC,CAAC;AACV,CAAC;AAED,SAAS,cAAc,CAAC,GAAQ,EAAE,IAAY,EAAE,KAAU;IACxD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAG,CAAC;IAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,OAAY,EAAE,GAAW,EAAE,EAAE;QACvD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QACpB,CAAC;QACD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC,EAAE,GAAG,CAAC,CAAC;IACR,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;IACxB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAe;IAC1C,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;SAC9B,WAAW,CAAC,6BAA6B,CAAC;SAC1C,WAAW,CACV,OAAO,EACP,cAAc,CAAC;QACb,0CAA0C;QAC1C,oDAAoD;QACpD,iDAAiD;QACjD,qBAAqB;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { loadConfig, DEFAULT_PATHS } from '../../config/index.js';
|
|
3
|
+
import { getWorkspacePath } from '../../config/schema.js';
|
|
4
|
+
import { createLogger } from '../../utils/logger.js';
|
|
5
|
+
import { register, formatExamples } from '../registry.js';
|
|
6
|
+
import { startGatewayInBackground, stopBackgroundGateway, restartBackgroundGateway, isGatewayRunning, getGatewayStatus, } from '../../daemon/background-start.js';
|
|
7
|
+
const log = createLogger('GatewayDaemonCommand');
|
|
8
|
+
function createGatewayDaemonCommand() {
|
|
9
|
+
const cmd = new Command('gateway-daemon')
|
|
10
|
+
.description('Manage gateway background service')
|
|
11
|
+
.addHelpText('after', formatExamples([
|
|
12
|
+
'xopcbot gateway-daemon start # Start gateway in background',
|
|
13
|
+
'xopcbot gateway-daemon stop # Stop background gateway',
|
|
14
|
+
'xopcbot gateway-daemon restart # Restart background gateway',
|
|
15
|
+
'xopcbot gateway-daemon status # Check gateway status',
|
|
16
|
+
]));
|
|
17
|
+
// Start command
|
|
18
|
+
cmd.addCommand(new Command('start')
|
|
19
|
+
.description('Start gateway in background')
|
|
20
|
+
.option('-c, --config <path>', 'Config file path', DEFAULT_PATHS.config)
|
|
21
|
+
.action(async (options) => {
|
|
22
|
+
try {
|
|
23
|
+
const config = loadConfig(options.config);
|
|
24
|
+
if (!config.gateway?.auth?.token) {
|
|
25
|
+
console.error('❌ Gateway token not configured. Run `xopcbot onboard` first.');
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
const running = await isGatewayRunning(config.gateway.port || 18790, config.gateway.host || '0.0.0.0');
|
|
29
|
+
if (running) {
|
|
30
|
+
console.log('ℹ️ Gateway is already running');
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
console.log('🚀 Starting gateway in background...');
|
|
34
|
+
await startGatewayInBackground({
|
|
35
|
+
port: config.gateway.port || 18790,
|
|
36
|
+
host: config.gateway.host || '0.0.0.0',
|
|
37
|
+
token: config.gateway.auth.token,
|
|
38
|
+
configPath: options.config,
|
|
39
|
+
workspacePath: getWorkspacePath(config) || './workspace',
|
|
40
|
+
});
|
|
41
|
+
console.log('✅ Gateway started successfully');
|
|
42
|
+
console.log(` URL: http://${config.gateway.host || '0.0.0.0'}:${config.gateway.port || 18790}`);
|
|
43
|
+
console.log(` Token: ${config.gateway.auth.token.slice(0, 8)}...${config.gateway.auth.token.slice(-8)}`);
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
log.error({ err }, 'Failed to start gateway');
|
|
47
|
+
console.error('❌ Failed to start gateway:', err instanceof Error ? err.message : err);
|
|
48
|
+
process.exit(1);
|
|
49
|
+
}
|
|
50
|
+
}));
|
|
51
|
+
// Stop command
|
|
52
|
+
cmd.addCommand(new Command('stop')
|
|
53
|
+
.description('Stop background gateway')
|
|
54
|
+
.action(async () => {
|
|
55
|
+
try {
|
|
56
|
+
console.log('🛑 Stopping gateway...');
|
|
57
|
+
await stopBackgroundGateway();
|
|
58
|
+
console.log('✅ Gateway stopped');
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
log.error({ err }, 'Failed to stop gateway');
|
|
62
|
+
console.error('❌ Failed to stop gateway:', err instanceof Error ? err.message : err);
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
}));
|
|
66
|
+
// Restart command
|
|
67
|
+
cmd.addCommand(new Command('restart')
|
|
68
|
+
.description('Restart background gateway')
|
|
69
|
+
.option('-c, --config <path>', 'Config file path', DEFAULT_PATHS.config)
|
|
70
|
+
.action(async (options) => {
|
|
71
|
+
try {
|
|
72
|
+
const config = loadConfig(options.config);
|
|
73
|
+
if (!config.gateway?.auth?.token) {
|
|
74
|
+
console.error('❌ Gateway token not configured. Run `xopcbot onboard` first.');
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
console.log('🔄 Restarting gateway...');
|
|
78
|
+
await restartBackgroundGateway({
|
|
79
|
+
port: config.gateway.port || 18790,
|
|
80
|
+
host: config.gateway.host || '0.0.0.0',
|
|
81
|
+
token: config.gateway.auth.token,
|
|
82
|
+
configPath: options.config,
|
|
83
|
+
workspacePath: getWorkspacePath(config) || './workspace',
|
|
84
|
+
});
|
|
85
|
+
console.log('✅ Gateway restarted successfully');
|
|
86
|
+
console.log(` URL: http://${config.gateway.host || '0.0.0.0'}:${config.gateway.port || 18790}`);
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
log.error({ err }, 'Failed to restart gateway');
|
|
90
|
+
console.error('❌ Failed to restart gateway:', err instanceof Error ? err.message : err);
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
93
|
+
}));
|
|
94
|
+
// Status command
|
|
95
|
+
cmd.addCommand(new Command('status')
|
|
96
|
+
.description('Check gateway status')
|
|
97
|
+
.option('-c, --config <path>', 'Config file path', DEFAULT_PATHS.config)
|
|
98
|
+
.action(async (options) => {
|
|
99
|
+
try {
|
|
100
|
+
const config = loadConfig(options.config);
|
|
101
|
+
const status = await getGatewayStatus(config.gateway?.port || 18790, config.gateway?.host || '0.0.0.0');
|
|
102
|
+
if (status.running) {
|
|
103
|
+
console.log('✅ Gateway is running');
|
|
104
|
+
console.log(` URL: ${status.url}`);
|
|
105
|
+
if (status.pid) {
|
|
106
|
+
console.log(` PID: ${status.pid}`);
|
|
107
|
+
}
|
|
108
|
+
if (status.uptime) {
|
|
109
|
+
const uptimeSec = Math.floor(status.uptime / 1000);
|
|
110
|
+
console.log(` Uptime: ${uptimeSec}s`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
console.log('⚠️ Gateway is not running');
|
|
115
|
+
console.log(` Expected URL: ${status.url}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
log.error({ err }, 'Failed to get gateway status');
|
|
120
|
+
console.error('❌ Failed to get status:', err instanceof Error ? err.message : err);
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
}));
|
|
124
|
+
return cmd;
|
|
125
|
+
}
|
|
126
|
+
register({
|
|
127
|
+
id: 'gateway-daemon',
|
|
128
|
+
name: 'gateway-daemon',
|
|
129
|
+
description: 'Manage gateway background service',
|
|
130
|
+
factory: createGatewayDaemonCommand,
|
|
131
|
+
metadata: {
|
|
132
|
+
category: 'runtime',
|
|
133
|
+
examples: [
|
|
134
|
+
'xopcbot gateway-daemon start',
|
|
135
|
+
'xopcbot gateway-daemon stop',
|
|
136
|
+
'xopcbot gateway-daemon restart',
|
|
137
|
+
'xopcbot gateway-daemon status',
|
|
138
|
+
],
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
//# sourceMappingURL=gateway-daemon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-daemon.js","sourceRoot":"","sources":["../../../src/cli/commands/gateway-daemon.ts"],"names":[],"mappings":"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"}
|