@kafca/agentdock 0.1.7

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 (79) hide show
  1. package/README.md +70 -0
  2. package/bin/agentdock.mjs +275 -0
  3. package/build/icon.png +0 -0
  4. package/dist/renderer/assets/index-BaNpzC6d.js +482 -0
  5. package/dist/renderer/assets/index-CLWJyO0E.css +11 -0
  6. package/dist/renderer/favicon.svg +19 -0
  7. package/dist/renderer/index.html +14 -0
  8. package/dist/renderer/logo-options.svg +153 -0
  9. package/dist-electron/electron/knowledge-skill-script.test.js +125 -0
  10. package/dist-electron/electron/lac-cli.test.js +221 -0
  11. package/dist-electron/electron/local-core-refactor.test.js +1075 -0
  12. package/dist-electron/electron/main.js +163 -0
  13. package/dist-electron/electron/plugin-kernel.test.js +534 -0
  14. package/dist-electron/electron/preload.js +2 -0
  15. package/dist-electron/package.json +3 -0
  16. package/dist-electron/packages/contracts/src/index.js +18 -0
  17. package/dist-electron/packages/contracts/src/local-core.js +2 -0
  18. package/dist-electron/packages/core-sdk/src/index.js +406 -0
  19. package/dist-electron/packages/knowledge-api/src/ai-vector-provider.js +388 -0
  20. package/dist-electron/packages/knowledge-api/src/index.js +146 -0
  21. package/dist-electron/packages/knowledge-api/src/sqlite-store.js +467 -0
  22. package/dist-electron/packages/knowledge-api/src/thread-knowledge-store.js +21 -0
  23. package/dist-electron/packages/knowledge-api/test/ai-vector-provider.test.js +412 -0
  24. package/dist-electron/packages/plugin-sdk/src/index.js +2 -0
  25. package/dist-electron/services/local-ai-core/src/acp/local-core-acp-backend.js +369 -0
  26. package/dist-electron/services/local-ai-core/src/acp/local-core-acp-response-processor.js +110 -0
  27. package/dist-electron/services/local-ai-core/src/acp/local-core-acp-session-coordinator.js +171 -0
  28. package/dist-electron/services/local-ai-core/src/acp/local-core-acp-store.js +635 -0
  29. package/dist-electron/services/local-ai-core/src/acp/local-core-acp-transport.js +190 -0
  30. package/dist-electron/services/local-ai-core/src/acp/local-core-acp-turn-coordinator.js +244 -0
  31. package/dist-electron/services/local-ai-core/src/acp/workspace-acp-permissions.js +52 -0
  32. package/dist-electron/services/local-ai-core/src/cli/lac.js +290 -0
  33. package/dist-electron/services/local-ai-core/src/gateway/local-core-lark-gateway.js +976 -0
  34. package/dist-electron/services/local-ai-core/src/gateway/local-core-weixin-gateway.js +1143 -0
  35. package/dist-electron/services/local-ai-core/src/kernel/bootstrap.js +291 -0
  36. package/dist-electron/services/local-ai-core/src/kernel/capability-registry.js +67 -0
  37. package/dist-electron/services/local-ai-core/src/kernel/diagnostics.js +27 -0
  38. package/dist-electron/services/local-ai-core/src/kernel/event-bus.js +27 -0
  39. package/dist-electron/services/local-ai-core/src/kernel/lifecycle-manager.js +85 -0
  40. package/dist-electron/services/local-ai-core/src/kernel/plugin-registry.js +60 -0
  41. package/dist-electron/services/local-ai-core/src/plugins/builtin/agent-localcore-acp-plugin.js +114 -0
  42. package/dist-electron/services/local-ai-core/src/plugins/builtin/channel-lark-plugin.js +59 -0
  43. package/dist-electron/services/local-ai-core/src/plugins/builtin/channel-weixin-plugin.js +56 -0
  44. package/dist-electron/services/local-ai-core/src/plugins/builtin/knowledge-ai-vector-plugin.js +7 -0
  45. package/dist-electron/services/local-ai-core/src/plugins/builtin/knowledge-noop-plugin.js +7 -0
  46. package/dist-electron/services/local-ai-core/src/plugins/builtin/runtime-capabilities-plugin.js +62 -0
  47. package/dist-electron/services/local-ai-core/src/plugins/builtin/scheduler-cron-plugin.js +49 -0
  48. package/dist-electron/services/local-ai-core/src/plugins/builtin/scheduler-lark-plugin.js +38 -0
  49. package/dist-electron/services/local-ai-core/src/plugins/builtin/scheduler-weixin-plugin.js +38 -0
  50. package/dist-electron/services/local-ai-core/src/router/workspace-route-config.js +230 -0
  51. package/dist-electron/services/local-ai-core/src/router/workspace-router-types.js +2 -0
  52. package/dist-electron/services/local-ai-core/src/router/workspace-router.js +389 -0
  53. package/dist-electron/services/local-ai-core/src/runtime/local-core-controller.js +315 -0
  54. package/dist-electron/services/local-ai-core/src/runtime/local-core-runtime-state.js +282 -0
  55. package/dist-electron/services/local-ai-core/src/runtime/server.js +465 -0
  56. package/dist-electron/services/local-ai-core/src/runtime/standalone.js +38 -0
  57. package/dist-electron/services/local-ai-core/src/scheduler/adapters.js +2 -0
  58. package/dist-electron/services/local-ai-core/src/scheduler/cron-command-detector.js +70 -0
  59. package/dist-electron/services/local-ai-core/src/scheduler/cron.js +53 -0
  60. package/dist-electron/services/local-ai-core/src/scheduler/execution-policy.js +2 -0
  61. package/dist-electron/services/local-ai-core/src/scheduler/lark-execution-policies.js +66 -0
  62. package/dist-electron/services/local-ai-core/src/scheduler/lark-schedule-adapter.js +77 -0
  63. package/dist-electron/services/local-ai-core/src/scheduler/scheduled-conversation-executor.js +46 -0
  64. package/dist-electron/services/local-ai-core/src/scheduler/scheduler-run-lifecycle.js +64 -0
  65. package/dist-electron/services/local-ai-core/src/scheduler/scheduler-service.js +133 -0
  66. package/dist-electron/services/local-ai-core/src/scheduler/weixin-execution-policies.js +66 -0
  67. package/dist-electron/services/local-ai-core/src/scheduler/weixin-schedule-adapter.js +78 -0
  68. package/dist-electron/services/local-ai-core/src/thread/workspace-thread-id.js +17 -0
  69. package/dist-electron/services/local-ai-core/src/thread/workspace-thread-mappers.js +43 -0
  70. package/dist-electron/shared/desktop.js +195 -0
  71. package/dist-electron/src/api/client.js +73 -0
  72. package/dist-electron/src/api/sessions.js +21 -0
  73. package/dist-electron/src/lib/session-utils.js +51 -0
  74. package/dist-electron/src/pages/Threads/thread-chat-model.js +246 -0
  75. package/dist-electron/src/pages/Threads/thread-chat-model.test.js +76 -0
  76. package/dist-electron/src/pages/Threads/thread-chat-permission.js +26 -0
  77. package/dist-electron/src/pages/Threads/thread-chat-permission.test.js +102 -0
  78. package/dist-electron/src/pages/Threads/thread-chat-task-state.js +65 -0
  79. package/package.json +146 -0
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const electron_1 = require("electron");
4
+ const node_child_process_1 = require("node:child_process");
5
+ const node_fs_1 = require("node:fs");
6
+ const node_path_1 = require("node:path");
7
+ let mainWindow = null;
8
+ let localCoreProcess = null;
9
+ let localCoreStartupPromise = null;
10
+ const userDataOverride = process.env.AI_WORKSTATION_USER_DATA_DIR?.trim();
11
+ const smokeOutputPath = process.env.AI_WORKSTATION_SMOKE_OUTPUT?.trim();
12
+ function appResourcePath(...segments) {
13
+ return (0, node_path_1.join)(electron_1.app.getAppPath(), ...segments);
14
+ }
15
+ if (userDataOverride) {
16
+ (0, node_fs_1.mkdirSync)(userDataOverride, { recursive: true });
17
+ electron_1.app.setPath('userData', userDataOverride);
18
+ }
19
+ function localCoreEntryPath() {
20
+ return appResourcePath('dist-electron', 'services', 'local-ai-core', 'src', 'runtime', 'standalone.js');
21
+ }
22
+ function appIconPath() {
23
+ return appResourcePath('build', 'icon.png');
24
+ }
25
+ async function isLocalCoreHealthy(timeoutMs = 350) {
26
+ const controller = new AbortController();
27
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
28
+ try {
29
+ const response = await fetch('http://127.0.0.1:9831/api/local/v1/health', {
30
+ signal: controller.signal,
31
+ });
32
+ return response.ok;
33
+ }
34
+ catch {
35
+ return false;
36
+ }
37
+ finally {
38
+ clearTimeout(timer);
39
+ }
40
+ }
41
+ async function waitForLocalCoreHealthy(timeoutMs = 15000) {
42
+ const startedAt = Date.now();
43
+ while (Date.now() - startedAt < timeoutMs) {
44
+ if (await isLocalCoreHealthy(500)) {
45
+ return;
46
+ }
47
+ await new Promise((resolve) => setTimeout(resolve, 250));
48
+ }
49
+ throw new Error(`Local AI Core did not become healthy within ${timeoutMs}ms`);
50
+ }
51
+ async function fetchSmokeJson(path) {
52
+ const response = await fetch(`http://127.0.0.1:9831${path}`);
53
+ if (!response.ok) {
54
+ throw new Error(`Smoke request failed for ${path}: HTTP ${response.status}`);
55
+ }
56
+ return response.json();
57
+ }
58
+ async function ensureLocalCoreProcess() {
59
+ if (await isLocalCoreHealthy()) {
60
+ return;
61
+ }
62
+ if (localCoreStartupPromise) {
63
+ return localCoreStartupPromise;
64
+ }
65
+ localCoreStartupPromise = (async () => {
66
+ if (!localCoreProcess) {
67
+ const entry = localCoreEntryPath();
68
+ if (!(0, node_fs_1.existsSync)(entry)) {
69
+ throw new Error(`Missing Local AI Core entry: ${entry}`);
70
+ }
71
+ const child = (0, node_child_process_1.spawn)(process.execPath, [entry], {
72
+ cwd: electron_1.app.getAppPath(),
73
+ env: {
74
+ ...process.env,
75
+ ELECTRON_RUN_AS_NODE: '1',
76
+ AI_WORKSTATION_USER_DATA_DIR: electron_1.app.getPath('userData'),
77
+ },
78
+ stdio: 'inherit',
79
+ });
80
+ localCoreProcess = child;
81
+ child.on('exit', () => {
82
+ localCoreProcess = null;
83
+ });
84
+ }
85
+ await waitForLocalCoreHealthy();
86
+ })();
87
+ try {
88
+ await localCoreStartupPromise;
89
+ }
90
+ finally {
91
+ localCoreStartupPromise = null;
92
+ }
93
+ }
94
+ function stopLocalCoreProcess() {
95
+ if (!localCoreProcess) {
96
+ return;
97
+ }
98
+ localCoreProcess.kill('SIGTERM');
99
+ localCoreProcess = null;
100
+ }
101
+ function createWindow() {
102
+ const iconPath = appIconPath();
103
+ mainWindow = new electron_1.BrowserWindow({
104
+ width: 1400,
105
+ height: 920,
106
+ minWidth: 1100,
107
+ minHeight: 700,
108
+ title: 'AgentDock',
109
+ icon: (0, node_fs_1.existsSync)(iconPath) ? iconPath : undefined,
110
+ titleBarStyle: process.platform === 'darwin' ? 'hiddenInset' : 'default',
111
+ trafficLightPosition: { x: 12, y: 12 },
112
+ vibrancy: process.platform === 'darwin' ? 'sidebar' : undefined,
113
+ visualEffectState: process.platform === 'darwin' ? 'active' : undefined,
114
+ backgroundColor: process.platform === 'darwin' ? '#00ffffff' : '#f5f5f7',
115
+ webPreferences: {
116
+ preload: (0, node_path_1.join)(__dirname, 'preload.js'),
117
+ contextIsolation: true,
118
+ nodeIntegration: false,
119
+ },
120
+ });
121
+ const devServerUrl = process.env.AI_WORKSTATION_DEV_SERVER_URL?.trim();
122
+ if (devServerUrl) {
123
+ void mainWindow.loadURL(devServerUrl);
124
+ return;
125
+ }
126
+ const indexHtmlPath = appResourcePath('dist', 'renderer', 'index.html');
127
+ if (!(0, node_fs_1.existsSync)(indexHtmlPath)) {
128
+ throw new Error(`Renderer build output was not found at ${indexHtmlPath}. Run "pnpm build" first.`);
129
+ }
130
+ void mainWindow.loadFile(indexHtmlPath);
131
+ }
132
+ function writeSmokeResult(payload) {
133
+ if (!smokeOutputPath) {
134
+ return;
135
+ }
136
+ (0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(smokeOutputPath), { recursive: true });
137
+ (0, node_fs_1.writeFileSync)(smokeOutputPath, `${JSON.stringify(payload, null, 2)}\n`, 'utf8');
138
+ }
139
+ electron_1.app.whenReady().then(async () => {
140
+ await ensureLocalCoreProcess();
141
+ createWindow();
142
+ if (smokeOutputPath) {
143
+ const [capabilities, pluginDiagnostics] = await Promise.all([
144
+ fetchSmokeJson('/api/local/v1/capabilities/snapshot'),
145
+ fetchSmokeJson('/api/local/v1/plugins/diagnostics'),
146
+ ]);
147
+ writeSmokeResult({ ok: true, capabilities, pluginDiagnostics });
148
+ setTimeout(() => electron_1.app.quit(), 300);
149
+ }
150
+ electron_1.app.on('activate', () => {
151
+ if (electron_1.BrowserWindow.getAllWindows().length === 0) {
152
+ createWindow();
153
+ }
154
+ });
155
+ });
156
+ electron_1.app.on('window-all-closed', () => {
157
+ if (process.platform !== 'darwin') {
158
+ electron_1.app.quit();
159
+ }
160
+ });
161
+ electron_1.app.on('before-quit', () => {
162
+ stopLocalCoreProcess();
163
+ });