@agentunion/kite 1.0.6 → 1.2.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.
- package/cli.js +127 -25
- package/core/event_hub/entry.py +384 -61
- package/core/event_hub/hub.py +8 -0
- package/core/event_hub/module.md +0 -1
- package/core/event_hub/server.py +169 -38
- package/core/kite_log.py +241 -0
- package/core/launcher/entry.py +1306 -425
- package/core/launcher/module_scanner.py +10 -9
- package/core/launcher/process_manager.py +555 -121
- package/core/registry/entry.py +335 -30
- package/core/registry/server.py +339 -256
- package/core/registry/store.py +13 -2
- package/extensions/agents/__init__.py +1 -0
- package/extensions/agents/assistant/__init__.py +1 -0
- package/extensions/agents/assistant/entry.py +380 -0
- package/extensions/agents/assistant/module.md +22 -0
- package/extensions/agents/assistant/server.py +236 -0
- package/extensions/channels/__init__.py +1 -0
- package/extensions/channels/acp_channel/__init__.py +1 -0
- package/extensions/channels/acp_channel/entry.py +380 -0
- package/extensions/channels/acp_channel/module.md +22 -0
- package/extensions/channels/acp_channel/server.py +236 -0
- package/{core → extensions}/event_hub_bench/entry.py +664 -371
- package/{core → extensions}/event_hub_bench/module.md +4 -2
- package/extensions/services/backup/__init__.py +1 -0
- package/extensions/services/backup/entry.py +380 -0
- package/extensions/services/backup/module.md +22 -0
- package/extensions/services/backup/server.py +244 -0
- package/extensions/services/model_service/__init__.py +1 -0
- package/extensions/services/model_service/entry.py +380 -0
- package/extensions/services/model_service/module.md +22 -0
- package/extensions/services/model_service/server.py +236 -0
- package/extensions/services/watchdog/entry.py +460 -143
- package/extensions/services/watchdog/module.md +3 -0
- package/extensions/services/watchdog/monitor.py +128 -13
- package/extensions/services/watchdog/server.py +75 -13
- package/extensions/services/web/__init__.py +1 -0
- package/extensions/services/web/config.yaml +149 -0
- package/extensions/services/web/entry.py +487 -0
- package/extensions/services/web/module.md +24 -0
- package/extensions/services/web/routes/__init__.py +1 -0
- package/extensions/services/web/routes/routes_call.py +189 -0
- package/extensions/services/web/routes/routes_config.py +512 -0
- package/extensions/services/web/routes/routes_contacts.py +98 -0
- package/extensions/services/web/routes/routes_devlog.py +99 -0
- package/extensions/services/web/routes/routes_phone.py +81 -0
- package/extensions/services/web/routes/routes_sms.py +48 -0
- package/extensions/services/web/routes/routes_stats.py +17 -0
- package/extensions/services/web/routes/routes_voicechat.py +554 -0
- package/extensions/services/web/routes/schemas.py +216 -0
- package/extensions/services/web/server.py +332 -0
- package/extensions/services/web/static/css/style.css +1064 -0
- package/extensions/services/web/static/index.html +1445 -0
- package/extensions/services/web/static/js/app.js +4671 -0
- package/extensions/services/web/vendor/__init__.py +1 -0
- package/extensions/services/web/vendor/bluetooth/audio.py +348 -0
- package/extensions/services/web/vendor/bluetooth/contacts.py +251 -0
- package/extensions/services/web/vendor/bluetooth/manager.py +395 -0
- package/extensions/services/web/vendor/bluetooth/sms.py +290 -0
- package/extensions/services/web/vendor/bluetooth/telephony.py +274 -0
- package/extensions/services/web/vendor/config.py +139 -0
- package/extensions/services/web/vendor/conversation/__init__.py +0 -0
- package/extensions/services/web/vendor/conversation/asr.py +936 -0
- package/extensions/services/web/vendor/conversation/engine.py +548 -0
- package/extensions/services/web/vendor/conversation/llm.py +534 -0
- package/extensions/services/web/vendor/conversation/mcp_tools.py +190 -0
- package/extensions/services/web/vendor/conversation/tts.py +322 -0
- package/extensions/services/web/vendor/conversation/vad.py +138 -0
- package/extensions/services/web/vendor/storage/__init__.py +1 -0
- package/extensions/services/web/vendor/storage/identity.py +312 -0
- package/extensions/services/web/vendor/storage/store.py +507 -0
- package/extensions/services/web/vendor/task/__init__.py +0 -0
- package/extensions/services/web/vendor/task/manager.py +864 -0
- package/extensions/services/web/vendor/task/models.py +45 -0
- package/extensions/services/web/vendor/task/webhook.py +263 -0
- package/extensions/services/web/vendor/tools/__init__.py +0 -0
- package/extensions/services/web/vendor/tools/registry.py +321 -0
- package/main.py +344 -4
- package/package.json +11 -2
- package/core/__pycache__/__init__.cpython-313.pyc +0 -0
- package/core/__pycache__/data_dir.cpython-313.pyc +0 -0
- package/core/data_dir.py +0 -62
- package/core/event_hub/__pycache__/__init__.cpython-313.pyc +0 -0
- package/core/event_hub/__pycache__/bench.cpython-313.pyc +0 -0
- package/core/event_hub/__pycache__/bench_perf.cpython-313.pyc +0 -0
- package/core/event_hub/__pycache__/dedup.cpython-313.pyc +0 -0
- package/core/event_hub/__pycache__/entry.cpython-313.pyc +0 -0
- package/core/event_hub/__pycache__/hub.cpython-313.pyc +0 -0
- package/core/event_hub/__pycache__/router.cpython-313.pyc +0 -0
- package/core/event_hub/__pycache__/server.cpython-313.pyc +0 -0
- package/core/event_hub/bench_results/2026-02-28_13-26-48.json +0 -51
- package/core/event_hub/bench_results/2026-02-28_13-44-45.json +0 -51
- package/core/event_hub/bench_results/2026-02-28_13-45-39.json +0 -51
- package/core/launcher/__pycache__/__init__.cpython-313.pyc +0 -0
- package/core/launcher/__pycache__/entry.cpython-313.pyc +0 -0
- package/core/launcher/__pycache__/module_scanner.cpython-313.pyc +0 -0
- package/core/launcher/__pycache__/process_manager.cpython-313.pyc +0 -0
- package/core/launcher/data/log/lifecycle.jsonl +0 -1158
- package/core/launcher/data/token.txt +0 -1
- package/core/registry/__pycache__/__init__.cpython-313.pyc +0 -0
- package/core/registry/__pycache__/entry.cpython-313.pyc +0 -0
- package/core/registry/__pycache__/server.cpython-313.pyc +0 -0
- package/core/registry/__pycache__/store.cpython-313.pyc +0 -0
- package/core/registry/data/port.txt +0 -1
- package/core/registry/data/port_484.txt +0 -1
- package/extensions/__pycache__/__init__.cpython-313.pyc +0 -0
- package/extensions/services/__pycache__/__init__.cpython-313.pyc +0 -0
- package/extensions/services/watchdog/__pycache__/__init__.cpython-313.pyc +0 -0
- package/extensions/services/watchdog/__pycache__/entry.cpython-313.pyc +0 -0
- package/extensions/services/watchdog/__pycache__/monitor.cpython-313.pyc +0 -0
- package/extensions/services/watchdog/__pycache__/server.cpython-313.pyc +0 -0
- /package/{core/event_hub/bench_results/.gitkeep → extensions/services/web/vendor/bluetooth/__init__.py} +0 -0
package/cli.js
CHANGED
|
@@ -1,70 +1,172 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* Kite CLI —
|
|
4
|
-
*
|
|
3
|
+
* Kite CLI — installer + launcher.
|
|
4
|
+
*
|
|
5
|
+
* First run: copies framework code to ~/.kite/versions/{version}/
|
|
6
|
+
* Subsequent runs: directly starts the installed version.
|
|
7
|
+
*
|
|
8
|
+
* Directory structure:
|
|
9
|
+
* ~/.kite/
|
|
10
|
+
* versions/{ver}/ — framework code (per-version, replaceable)
|
|
11
|
+
* modules/ — shared modules (all versions share, user-writable)
|
|
12
|
+
* data/ — runtime data (all versions share)
|
|
5
13
|
*
|
|
6
14
|
* Usage:
|
|
7
|
-
* kite #
|
|
15
|
+
* kite # start current version
|
|
8
16
|
* kite --cwd /some/path # override working directory
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* Environment variables passed to Python:
|
|
12
|
-
* KITE_HOME — Kite framework root (where core/, extensions/ live)
|
|
13
|
-
* KITE_CWD — directory where user executed the kite command
|
|
17
|
+
* kite --use 1.0.6 # use a specific version
|
|
14
18
|
*/
|
|
15
|
-
const { spawn } = require('child_process');
|
|
19
|
+
const { spawn, execSync } = require('child_process');
|
|
16
20
|
const crypto = require('crypto');
|
|
17
21
|
const fs = require('fs');
|
|
18
22
|
const path = require('path');
|
|
19
23
|
|
|
20
|
-
//
|
|
24
|
+
// Timestamped console.log with delta + color
|
|
25
|
+
const _origLog = console.log.bind(console);
|
|
26
|
+
const _origErr = console.error.bind(console);
|
|
27
|
+
let _lastTs = Date.now();
|
|
28
|
+
const DIM = '\x1b[90m', GREEN = '\x1b[32m', RED = '\x1b[91m', RST = '\x1b[0m';
|
|
29
|
+
|
|
30
|
+
function _prefix() {
|
|
31
|
+
const now = Date.now();
|
|
32
|
+
const delta = now - _lastTs;
|
|
33
|
+
_lastTs = now;
|
|
34
|
+
const d = new Date();
|
|
35
|
+
const ts = d.toTimeString().slice(0, 8) + '.' + String(d.getMilliseconds()).padStart(3, '0');
|
|
36
|
+
const ds = delta < 1000 ? `+${delta}ms` : `+${(delta / 1000).toFixed(1)}s`;
|
|
37
|
+
const color = delta >= 5000 ? RED : delta >= 1000 ? GREEN : DIM;
|
|
38
|
+
return `${ts} ${color}${ds.padStart(8)}${RST} `;
|
|
39
|
+
}
|
|
40
|
+
console.log = (...args) => _origLog(_prefix(), ...args);
|
|
41
|
+
console.error = (...args) => _origErr(_prefix(), ...args);
|
|
42
|
+
|
|
43
|
+
// ── Paths ──
|
|
44
|
+
const packageDir = fs.realpathSync(__dirname);
|
|
45
|
+
const packageJson = JSON.parse(fs.readFileSync(path.join(packageDir, 'package.json'), 'utf-8'));
|
|
46
|
+
const version = packageJson.version;
|
|
47
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE;
|
|
48
|
+
const kiteHome = path.join(homeDir, '.kite');
|
|
49
|
+
const modulesDir = path.join(kiteHome, 'modules');
|
|
50
|
+
const dataDir = path.join(kiteHome, 'data');
|
|
51
|
+
|
|
52
|
+
// ── Parse CLI args ──
|
|
21
53
|
const args = process.argv.slice(2);
|
|
22
54
|
const pythonArgs = [];
|
|
23
55
|
let cwdOverride = null;
|
|
56
|
+
let useVersion = version;
|
|
24
57
|
|
|
25
58
|
for (let i = 0; i < args.length; i++) {
|
|
26
59
|
if (args[i] === '--cwd' && args[i + 1]) {
|
|
27
60
|
cwdOverride = path.resolve(args[++i]);
|
|
61
|
+
} else if (args[i] === '--use' && args[i + 1]) {
|
|
62
|
+
useVersion = args[++i];
|
|
28
63
|
} else {
|
|
29
64
|
pythonArgs.push(args[i]);
|
|
30
65
|
}
|
|
31
66
|
}
|
|
32
67
|
|
|
33
|
-
const
|
|
34
|
-
|
|
68
|
+
const versionDir = path.join(kiteHome, 'versions', useVersion);
|
|
69
|
+
|
|
70
|
+
// ── Install: copy framework to ~/.kite/versions/{ver}/ if needed ──
|
|
71
|
+
|
|
72
|
+
function copyDirSync(src, dest) {
|
|
73
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
74
|
+
for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
|
|
75
|
+
const srcPath = path.join(src, entry.name);
|
|
76
|
+
const destPath = path.join(dest, entry.name);
|
|
77
|
+
if (entry.isDirectory()) {
|
|
78
|
+
// Skip directories that shouldn't be copied
|
|
79
|
+
if (['__pycache__', 'node_modules', '.git', 'data'].includes(entry.name)) continue;
|
|
80
|
+
copyDirSync(srcPath, destPath);
|
|
81
|
+
} else {
|
|
82
|
+
fs.copyFileSync(srcPath, destPath);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function install() {
|
|
88
|
+
console.log(`[kite] 安装版本 ${useVersion} 到 ${versionDir}`);
|
|
89
|
+
|
|
90
|
+
// Create shared directories
|
|
91
|
+
fs.mkdirSync(modulesDir, { recursive: true });
|
|
92
|
+
fs.mkdirSync(dataDir, { recursive: true });
|
|
93
|
+
|
|
94
|
+
// Copy framework code from npm package
|
|
95
|
+
copyDirSync(packageDir, versionDir);
|
|
96
|
+
|
|
97
|
+
// Patch launcher module.md: add shared modules path to discovery
|
|
98
|
+
patchLauncherDiscovery();
|
|
99
|
+
|
|
100
|
+
console.log(`[kite] 版本 ${useVersion} 已安装`);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function patchLauncherDiscovery() {
|
|
104
|
+
const mdPath = path.join(versionDir, 'core', 'launcher', 'module.md');
|
|
105
|
+
if (!fs.existsSync(mdPath)) return;
|
|
106
|
+
|
|
107
|
+
let content = fs.readFileSync(mdPath, 'utf-8');
|
|
108
|
+
|
|
109
|
+
// Already patched?
|
|
110
|
+
if (content.includes('shared_modules')) return;
|
|
111
|
+
|
|
112
|
+
// Insert shared_modules discovery entry before the closing ---
|
|
113
|
+
const entry = [
|
|
114
|
+
' shared_modules:',
|
|
115
|
+
' type: scan_dir',
|
|
116
|
+
` path: "${modulesDir.replace(/\\/g, '/')}"`,
|
|
117
|
+
' enabled: true',
|
|
118
|
+
].join('\n');
|
|
119
|
+
|
|
120
|
+
// Insert after the last discovery entry, before ---
|
|
121
|
+
content = content.replace(
|
|
122
|
+
/(discovery:\n(?:[\s\S]*?))(---)/,
|
|
123
|
+
`$1${entry}\n$2`
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
fs.writeFileSync(mdPath, content, 'utf-8');
|
|
127
|
+
console.log(`[kite] 已补丁启动器发现路径: ${modulesDir}`);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// ── Main: check version, install if needed, start ──
|
|
131
|
+
|
|
132
|
+
if (!fs.existsSync(path.join(versionDir, 'main.py'))) {
|
|
133
|
+
install();
|
|
134
|
+
}
|
|
135
|
+
|
|
35
136
|
const kiteCwd = cwdOverride || process.cwd();
|
|
36
137
|
|
|
37
|
-
console.log(`[
|
|
38
|
-
console.log(`[
|
|
39
|
-
console.log(`[
|
|
138
|
+
console.log(`[kite] 版本: ${useVersion}`);
|
|
139
|
+
console.log(`[kite] 项目: ${versionDir}`);
|
|
140
|
+
console.log(`[kite] 工作目录: ${kiteCwd}`);
|
|
40
141
|
|
|
41
|
-
// Spawn Python using package mode: python -m Kite
|
|
42
|
-
// PYTHONPATH points to Kite's parent so "import Kite" / "python -m Kite" works
|
|
43
|
-
const kiteParent = path.dirname(kiteHome);
|
|
44
142
|
const env = {
|
|
45
143
|
...process.env,
|
|
46
|
-
|
|
144
|
+
KITE_PROJECT: versionDir,
|
|
47
145
|
KITE_CWD: kiteCwd,
|
|
48
|
-
|
|
146
|
+
KITE_WORKSPACE: path.join(kiteHome, 'workspace'),
|
|
147
|
+
KITE_DATA: dataDir,
|
|
148
|
+
KITE_MODULES: modulesDir,
|
|
149
|
+
KITE_REPO: path.join(kiteHome, 'repo'),
|
|
150
|
+
KITE_VERSION: useVersion,
|
|
151
|
+
KITE_ENV: 'production',
|
|
49
152
|
PYTHONUTF8: '1',
|
|
50
153
|
};
|
|
51
154
|
|
|
52
155
|
const python = process.platform === 'win32' ? 'python' : 'python3';
|
|
53
156
|
const child = spawn(
|
|
54
157
|
python,
|
|
55
|
-
[path.join(
|
|
56
|
-
{ cwd:
|
|
158
|
+
[path.join(versionDir, 'main.py'), ...pythonArgs],
|
|
159
|
+
{ cwd: versionDir, env, stdio: 'inherit' }
|
|
57
160
|
);
|
|
58
161
|
|
|
59
162
|
child.on('error', err => {
|
|
60
|
-
console.error(`[
|
|
61
|
-
console.error(`[
|
|
163
|
+
console.error(`[kite] 启动 Python 失败: ${err.message}`);
|
|
164
|
+
console.error(`[kite] 请确认 '${python}' 在 PATH 中且依赖已安装`);
|
|
62
165
|
process.exit(1);
|
|
63
166
|
});
|
|
64
167
|
|
|
65
168
|
child.on('exit', code => process.exit(code ?? 0));
|
|
66
169
|
|
|
67
|
-
// Forward signals for graceful shutdown
|
|
68
170
|
for (const sig of ['SIGINT', 'SIGTERM']) {
|
|
69
171
|
process.on(sig, () => child.kill(sig));
|
|
70
172
|
}
|