@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.
Files changed (112) hide show
  1. package/cli.js +127 -25
  2. package/core/event_hub/entry.py +384 -61
  3. package/core/event_hub/hub.py +8 -0
  4. package/core/event_hub/module.md +0 -1
  5. package/core/event_hub/server.py +169 -38
  6. package/core/kite_log.py +241 -0
  7. package/core/launcher/entry.py +1306 -425
  8. package/core/launcher/module_scanner.py +10 -9
  9. package/core/launcher/process_manager.py +555 -121
  10. package/core/registry/entry.py +335 -30
  11. package/core/registry/server.py +339 -256
  12. package/core/registry/store.py +13 -2
  13. package/extensions/agents/__init__.py +1 -0
  14. package/extensions/agents/assistant/__init__.py +1 -0
  15. package/extensions/agents/assistant/entry.py +380 -0
  16. package/extensions/agents/assistant/module.md +22 -0
  17. package/extensions/agents/assistant/server.py +236 -0
  18. package/extensions/channels/__init__.py +1 -0
  19. package/extensions/channels/acp_channel/__init__.py +1 -0
  20. package/extensions/channels/acp_channel/entry.py +380 -0
  21. package/extensions/channels/acp_channel/module.md +22 -0
  22. package/extensions/channels/acp_channel/server.py +236 -0
  23. package/{core → extensions}/event_hub_bench/entry.py +664 -371
  24. package/{core → extensions}/event_hub_bench/module.md +4 -2
  25. package/extensions/services/backup/__init__.py +1 -0
  26. package/extensions/services/backup/entry.py +380 -0
  27. package/extensions/services/backup/module.md +22 -0
  28. package/extensions/services/backup/server.py +244 -0
  29. package/extensions/services/model_service/__init__.py +1 -0
  30. package/extensions/services/model_service/entry.py +380 -0
  31. package/extensions/services/model_service/module.md +22 -0
  32. package/extensions/services/model_service/server.py +236 -0
  33. package/extensions/services/watchdog/entry.py +460 -143
  34. package/extensions/services/watchdog/module.md +3 -0
  35. package/extensions/services/watchdog/monitor.py +128 -13
  36. package/extensions/services/watchdog/server.py +75 -13
  37. package/extensions/services/web/__init__.py +1 -0
  38. package/extensions/services/web/config.yaml +149 -0
  39. package/extensions/services/web/entry.py +487 -0
  40. package/extensions/services/web/module.md +24 -0
  41. package/extensions/services/web/routes/__init__.py +1 -0
  42. package/extensions/services/web/routes/routes_call.py +189 -0
  43. package/extensions/services/web/routes/routes_config.py +512 -0
  44. package/extensions/services/web/routes/routes_contacts.py +98 -0
  45. package/extensions/services/web/routes/routes_devlog.py +99 -0
  46. package/extensions/services/web/routes/routes_phone.py +81 -0
  47. package/extensions/services/web/routes/routes_sms.py +48 -0
  48. package/extensions/services/web/routes/routes_stats.py +17 -0
  49. package/extensions/services/web/routes/routes_voicechat.py +554 -0
  50. package/extensions/services/web/routes/schemas.py +216 -0
  51. package/extensions/services/web/server.py +332 -0
  52. package/extensions/services/web/static/css/style.css +1064 -0
  53. package/extensions/services/web/static/index.html +1445 -0
  54. package/extensions/services/web/static/js/app.js +4671 -0
  55. package/extensions/services/web/vendor/__init__.py +1 -0
  56. package/extensions/services/web/vendor/bluetooth/audio.py +348 -0
  57. package/extensions/services/web/vendor/bluetooth/contacts.py +251 -0
  58. package/extensions/services/web/vendor/bluetooth/manager.py +395 -0
  59. package/extensions/services/web/vendor/bluetooth/sms.py +290 -0
  60. package/extensions/services/web/vendor/bluetooth/telephony.py +274 -0
  61. package/extensions/services/web/vendor/config.py +139 -0
  62. package/extensions/services/web/vendor/conversation/__init__.py +0 -0
  63. package/extensions/services/web/vendor/conversation/asr.py +936 -0
  64. package/extensions/services/web/vendor/conversation/engine.py +548 -0
  65. package/extensions/services/web/vendor/conversation/llm.py +534 -0
  66. package/extensions/services/web/vendor/conversation/mcp_tools.py +190 -0
  67. package/extensions/services/web/vendor/conversation/tts.py +322 -0
  68. package/extensions/services/web/vendor/conversation/vad.py +138 -0
  69. package/extensions/services/web/vendor/storage/__init__.py +1 -0
  70. package/extensions/services/web/vendor/storage/identity.py +312 -0
  71. package/extensions/services/web/vendor/storage/store.py +507 -0
  72. package/extensions/services/web/vendor/task/__init__.py +0 -0
  73. package/extensions/services/web/vendor/task/manager.py +864 -0
  74. package/extensions/services/web/vendor/task/models.py +45 -0
  75. package/extensions/services/web/vendor/task/webhook.py +263 -0
  76. package/extensions/services/web/vendor/tools/__init__.py +0 -0
  77. package/extensions/services/web/vendor/tools/registry.py +321 -0
  78. package/main.py +344 -4
  79. package/package.json +11 -2
  80. package/core/__pycache__/__init__.cpython-313.pyc +0 -0
  81. package/core/__pycache__/data_dir.cpython-313.pyc +0 -0
  82. package/core/data_dir.py +0 -62
  83. package/core/event_hub/__pycache__/__init__.cpython-313.pyc +0 -0
  84. package/core/event_hub/__pycache__/bench.cpython-313.pyc +0 -0
  85. package/core/event_hub/__pycache__/bench_perf.cpython-313.pyc +0 -0
  86. package/core/event_hub/__pycache__/dedup.cpython-313.pyc +0 -0
  87. package/core/event_hub/__pycache__/entry.cpython-313.pyc +0 -0
  88. package/core/event_hub/__pycache__/hub.cpython-313.pyc +0 -0
  89. package/core/event_hub/__pycache__/router.cpython-313.pyc +0 -0
  90. package/core/event_hub/__pycache__/server.cpython-313.pyc +0 -0
  91. package/core/event_hub/bench_results/2026-02-28_13-26-48.json +0 -51
  92. package/core/event_hub/bench_results/2026-02-28_13-44-45.json +0 -51
  93. package/core/event_hub/bench_results/2026-02-28_13-45-39.json +0 -51
  94. package/core/launcher/__pycache__/__init__.cpython-313.pyc +0 -0
  95. package/core/launcher/__pycache__/entry.cpython-313.pyc +0 -0
  96. package/core/launcher/__pycache__/module_scanner.cpython-313.pyc +0 -0
  97. package/core/launcher/__pycache__/process_manager.cpython-313.pyc +0 -0
  98. package/core/launcher/data/log/lifecycle.jsonl +0 -1158
  99. package/core/launcher/data/token.txt +0 -1
  100. package/core/registry/__pycache__/__init__.cpython-313.pyc +0 -0
  101. package/core/registry/__pycache__/entry.cpython-313.pyc +0 -0
  102. package/core/registry/__pycache__/server.cpython-313.pyc +0 -0
  103. package/core/registry/__pycache__/store.cpython-313.pyc +0 -0
  104. package/core/registry/data/port.txt +0 -1
  105. package/core/registry/data/port_484.txt +0 -1
  106. package/extensions/__pycache__/__init__.cpython-313.pyc +0 -0
  107. package/extensions/services/__pycache__/__init__.cpython-313.pyc +0 -0
  108. package/extensions/services/watchdog/__pycache__/__init__.cpython-313.pyc +0 -0
  109. package/extensions/services/watchdog/__pycache__/entry.cpython-313.pyc +0 -0
  110. package/extensions/services/watchdog/__pycache__/monitor.cpython-313.pyc +0 -0
  111. package/extensions/services/watchdog/__pycache__/server.cpython-313.pyc +0 -0
  112. /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 — Node.js entry point.
4
- * Generates KITE_TOKEN, spawns the Python launcher, forwards output.
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 # after npm install -g / npm link
15
+ * kite # start current version
8
16
  * kite --cwd /some/path # override working directory
9
- * node cli.js # direct execution
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
- // Parse CLI args
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 token = crypto.randomBytes(32).toString('hex');
34
- const kiteHome = fs.realpathSync(__dirname);
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(`[main] KITE_TOKEN generated (${token.length} chars)`);
38
- console.log(`[main] KITE_HOME: ${kiteHome}`);
39
- console.log(`[main] KITE_CWD: ${kiteCwd}`);
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
- KITE_HOME: kiteHome,
144
+ KITE_PROJECT: versionDir,
47
145
  KITE_CWD: kiteCwd,
48
- PYTHONPATH: kiteParent + (process.env.PYTHONPATH ? path.delimiter + process.env.PYTHONPATH : ''),
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(kiteHome, 'main.py'), ...pythonArgs],
56
- { cwd: kiteHome, env, stdio: 'inherit' }
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(`[main] Failed to start Python: ${err.message}`);
61
- console.error(`[main] Make sure '${python}' is in PATH and dependencies are installed`);
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
  }