@kafca/agentdock 0.1.46 → 0.1.47

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 (87) hide show
  1. package/README.md +6 -0
  2. package/dist/renderer/assets/{Badge-BIesaDYG.js → Badge-BYREM3t3.js} +1 -1
  3. package/dist/renderer/assets/{Chat-CpataoDh.js → Chat-Dtb5X7sB.js} +1 -1
  4. package/dist/renderer/assets/{ChatMarkdown-_Mdmltgv.js → ChatMarkdown-_slLloCh.js} +1 -1
  5. package/dist/renderer/assets/{Config-Pe5-zKZk.js → Config-pHichs7H.js} +1 -1
  6. package/dist/renderer/assets/{CronList-BnaOSPT8.js → CronList-CJQMeCjz.js} +1 -1
  7. package/dist/renderer/assets/{Dashboard-D05l8GKE.js → Dashboard-CY77Imde.js} +2 -2
  8. package/dist/renderer/assets/{EmptyState-BDBavDll.js → EmptyState-DCqmct2y.js} +1 -1
  9. package/dist/renderer/assets/{KnowledgeDetail-DvR798l_.js → KnowledgeDetail-DFrxa-pv.js} +1 -1
  10. package/dist/renderer/assets/{KnowledgeHome-r2ZuvU8-.js → KnowledgeHome-DL-vAfrH.js} +1 -1
  11. package/dist/renderer/assets/{Logs-BaljtmAV.js → Logs-jw9Uv590.js} +1 -1
  12. package/dist/renderer/assets/{Modal-CXhD_OWR.js → Modal-ChSm7tk6.js} +1 -1
  13. package/dist/renderer/assets/{MonitorList-D7tyipbx.js → MonitorList-DrEwyS71.js} +1 -1
  14. package/dist/renderer/assets/{Page-KUuFYgjg.js → Page-DhD-zgMU.js} +1 -1
  15. package/dist/renderer/assets/ProjectDetail-BVSjpfpL.js +11 -0
  16. package/dist/renderer/assets/{ProjectList-CbdHd5Ev.js → ProjectList-CHGbTJjk.js} +1 -1
  17. package/dist/renderer/assets/{Select-Djc8BXMC.js → Select-rHs9CSam.js} +1 -1
  18. package/dist/renderer/assets/{SessionChat-DOy0iKQR.js → SessionChat-CDc2FNMA.js} +1 -1
  19. package/dist/renderer/assets/{SessionList-DHgl1s1D.js → SessionList-Mr1uAnRW.js} +1 -1
  20. package/dist/renderer/assets/ThreadChat-Detu5UfN.js +23 -0
  21. package/dist/renderer/assets/{Workspace-DTocqY-F.js → Workspace-MRRg8ndJ.js} +1 -1
  22. package/dist/renderer/assets/{arrow-left-CXyya3hP.js → arrow-left-BU2NB2LA.js} +1 -1
  23. package/dist/renderer/assets/{book-open-9n4Kxc7E.js → book-open-D-TGvWwa.js} +1 -1
  24. package/dist/renderer/assets/{bot-C9HBk5XH.js → bot-IYNh8tH5.js} +1 -1
  25. package/dist/renderer/assets/{check-CutSg9a5.js → check-CCZ0JO_S.js} +1 -1
  26. package/dist/renderer/assets/{chevron-down-DrydR4i3.js → chevron-down-00bRZi15.js} +1 -1
  27. package/dist/renderer/assets/{circle-BEjtahw6.js → circle-CpQ8x4k_.js} +1 -1
  28. package/dist/renderer/assets/{desktop-DATgk_ka.js → desktop-D0k2aGSj.js} +1 -1
  29. package/dist/renderer/assets/{funnel-BhqZpS4f.js → funnel-UbcrCBCp.js} +1 -1
  30. package/dist/renderer/assets/{heart-Dp8Vs-7_.js → heart-DvLsV7tL.js} +1 -1
  31. package/dist/renderer/assets/{index-BKpv0P0s.js → index-B2L4G-b_.js} +1 -1
  32. package/dist/renderer/assets/{index-cI3pWBnN.js → index-dy-g2Bh4.js} +2 -2
  33. package/dist/renderer/assets/{pencil-ywcJzeOo.js → pencil-qBYOgW5M.js} +1 -1
  34. package/dist/renderer/assets/{play-AtN492Cx.js → play-Dn6b4AGj.js} +1 -1
  35. package/dist/renderer/assets/{plus-BEj14BBV.js → plus-CaApUwEm.js} +1 -1
  36. package/dist/renderer/assets/projects-BwF5RlNV.js +1 -0
  37. package/dist/renderer/assets/{save-D6ov4CNv.js → save-CN6yvTfD.js} +1 -1
  38. package/dist/renderer/assets/{search-C3bvw7AR.js → search-Dn2MxYiO.js} +1 -1
  39. package/dist/renderer/assets/{server-C1Uyedyx.js → server-DpcVLHeh.js} +1 -1
  40. package/dist/renderer/assets/{session-utils-DpRwJ6Nh.js → session-utils-DnD2Q_y1.js} +1 -1
  41. package/dist/renderer/assets/{sessions-BWmAppwK.js → sessions-eK5D4FLt.js} +1 -1
  42. package/dist/renderer/assets/{shield-check-CVx1mEs2.js → shield-check-DSSJkacw.js} +1 -1
  43. package/dist/renderer/assets/{trash-2-o-heXOgs.js → trash-2-DmYJlEvO.js} +1 -1
  44. package/dist/renderer/assets/{user-dPOzUqIc.js → user-Cvf_uiyQ.js} +1 -1
  45. package/dist/renderer/assets/{wifi-off-Fz5c3_x_.js → wifi-off-CCTloj-V.js} +1 -1
  46. package/dist/renderer/index.html +1 -1
  47. package/dist-electron/services/local-ai-core/src/acp/local-core-acp-session-coordinator.js +2 -1
  48. package/dist-electron/services/local-ai-core/src/agents/pi/launch.js +1 -1
  49. package/dist-electron/services/local-ai-core/src/agents/shared/launch-utils.js +22 -0
  50. package/dist-electron/services/local-ai-core/src/channel/lark/local-core-lark-gateway.js +132 -348
  51. package/dist-electron/services/local-ai-core/src/channel/shared/base-channel-gateway.js +303 -0
  52. package/dist-electron/services/local-ai-core/src/channel/weixin/local-core-weixin-gateway.js +131 -382
  53. package/dist-electron/services/local-ai-core/src/runtime/agent-runtime-detector.js +2 -1
  54. package/dist-electron/services/local-ai-core/src/runtime/channel-service.js +150 -0
  55. package/dist-electron/services/local-ai-core/src/runtime/env-utils.js +12 -0
  56. package/dist-electron/services/local-ai-core/src/runtime/external-service.js +234 -0
  57. package/dist-electron/services/local-ai-core/src/runtime/handlers/automation-handler.js +34 -0
  58. package/dist-electron/services/local-ai-core/src/runtime/handlers/capabilities-handler.js +12 -0
  59. package/dist-electron/services/local-ai-core/src/runtime/handlers/channel-handler.js +65 -0
  60. package/dist-electron/services/local-ai-core/src/runtime/handlers/external-handler.js +17 -0
  61. package/dist-electron/services/local-ai-core/src/runtime/handlers/knowledge-handler.js +65 -0
  62. package/dist-electron/services/local-ai-core/src/runtime/handlers/openai-handler.js +496 -0
  63. package/dist-electron/services/local-ai-core/src/runtime/handlers/provider-handler.js +24 -0
  64. package/dist-electron/services/local-ai-core/src/runtime/handlers/runtime-handler.js +68 -0
  65. package/dist-electron/services/local-ai-core/src/runtime/handlers/runtimes-handler.js +37 -0
  66. package/dist-electron/services/local-ai-core/src/runtime/handlers/scheduler-handler.js +34 -0
  67. package/dist-electron/services/local-ai-core/src/runtime/handlers/security-handler.js +49 -0
  68. package/dist-electron/services/local-ai-core/src/runtime/handlers/task-handler.js +27 -0
  69. package/dist-electron/services/local-ai-core/src/runtime/handlers/thread-handler.js +42 -0
  70. package/dist-electron/services/local-ai-core/src/runtime/handlers/workspace-handler.js +29 -0
  71. package/dist-electron/services/local-ai-core/src/runtime/local-core-controller.js +40 -592
  72. package/dist-electron/services/local-ai-core/src/runtime/server-helpers.js +96 -0
  73. package/dist-electron/services/local-ai-core/src/runtime/server.js +107 -1084
  74. package/dist-electron/services/local-ai-core/src/runtime/standalone.js +13 -1
  75. package/dist-electron/src/pages/Projects/project-provider-config.js +75 -0
  76. package/dist-electron/tests/contracts/architecture-docs.test.js +1 -0
  77. package/dist-electron/tests/electron/agent-runtime-detector.test.js +18 -0
  78. package/dist-electron/tests/electron/knowledge-skill-script.test.js +15 -5
  79. package/dist-electron/tests/electron/lac-cli.test.js +591 -688
  80. package/dist-electron/tests/electron/plugin-kernel.test.js +47 -31
  81. package/dist-electron/tests/electron/project-provider-config.test.js +71 -0
  82. package/dist-electron/tests/electron/workspace-task-store.test.js +19 -9
  83. package/dist-electron/tests/integration/local-core-cors.test.js +22 -0
  84. package/package.json +1 -1
  85. package/dist/renderer/assets/ProjectDetail-Ddq94-yu.js +0 -11
  86. package/dist/renderer/assets/ThreadChat-I7dYibDc.js +0 -23
  87. package/dist/renderer/assets/projects-Clar8lgb.js +0 -1
@@ -13,7 +13,19 @@ async function main() {
13
13
  const host = node_process_1.default.env.AI_WORKSTATION_HOST?.trim() || '127.0.0.1';
14
14
  (0, node_fs_1.mkdirSync)(userDataPath, { recursive: true });
15
15
  const controller = new local_core_controller_js_1.LocalCoreController(userDataPath);
16
- const server = new server_js_1.LocalAiCoreServer(controller, { host });
16
+ const server = new server_js_1.LocalAiCoreServer({
17
+ controller,
18
+ channelService: controller.channelService,
19
+ externalService: controller.externalService,
20
+ workspaceRouter: controller.workspaceRouter,
21
+ knowledgeProvider: controller.knowledgeProvider,
22
+ scheduledJobs: controller.scheduledJobs,
23
+ automationMonitors: controller.automationMonitors,
24
+ store: controller.store,
25
+ runtimeDetection: controller.runtimeDetection,
26
+ kernel: controller.kernel,
27
+ errorReporter: controller.errorReporter,
28
+ }, { host });
17
29
  controller.on('logs', (line) => {
18
30
  if (!line) {
19
31
  return;
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getProjectProviderId = getProjectProviderId;
4
+ exports.selectProjectProvider = selectProjectProvider;
5
+ exports.selectProjectModel = selectProjectModel;
6
+ exports.removeProviderReferences = removeProviderReferences;
7
+ function cloneConfig(config) {
8
+ return JSON.parse(JSON.stringify(config || {}));
9
+ }
10
+ function getProjectProviderId(config, projectName) {
11
+ const project = config?.projects?.find((entry) => entry.name === projectName);
12
+ return String(project?.agent?.options?.provider_id || '');
13
+ }
14
+ function selectProjectProvider(config, projectName, providerId) {
15
+ const next = cloneConfig(config);
16
+ const projects = Array.isArray(next.projects) ? next.projects : [];
17
+ const index = projects.findIndex((entry) => entry.name === projectName);
18
+ if (index < 0) {
19
+ throw new Error(`Project not found in config: ${projectName}`);
20
+ }
21
+ const project = projects[index];
22
+ projects[index] = {
23
+ ...project,
24
+ agent: {
25
+ ...project.agent,
26
+ options: {
27
+ ...(project.agent?.options || {}),
28
+ provider_id: providerId,
29
+ },
30
+ },
31
+ };
32
+ next.projects = projects;
33
+ return next;
34
+ }
35
+ function selectProjectModel(config, projectName, model) {
36
+ const next = cloneConfig(config);
37
+ const projects = Array.isArray(next.projects) ? next.projects : [];
38
+ const index = projects.findIndex((entry) => entry.name === projectName);
39
+ if (index < 0) {
40
+ throw new Error(`Project not found in config: ${projectName}`);
41
+ }
42
+ const project = projects[index];
43
+ projects[index] = {
44
+ ...project,
45
+ agent: {
46
+ ...project.agent,
47
+ options: {
48
+ ...(project.agent?.options || {}),
49
+ model,
50
+ },
51
+ },
52
+ };
53
+ next.projects = projects;
54
+ return next;
55
+ }
56
+ function removeProviderReferences(config, providerId) {
57
+ const next = cloneConfig(config);
58
+ const projects = Array.isArray(next.projects) ? next.projects : [];
59
+ next.projects = projects.map((project) => {
60
+ if (project.agent?.options?.provider_id !== providerId) {
61
+ return project;
62
+ }
63
+ return {
64
+ ...project,
65
+ agent: {
66
+ ...project.agent,
67
+ options: {
68
+ ...(project.agent?.options || {}),
69
+ provider_id: '',
70
+ },
71
+ },
72
+ };
73
+ });
74
+ return next;
75
+ }
@@ -62,6 +62,7 @@ const rendererPackageSourceImportAllowlist = new Set([
62
62
  'src/pages/Threads/useThreadChatConversationState.ts',
63
63
  'src/pages/Threads/useThreadChatSendingActions.ts',
64
64
  'src/pages/Threads/useThreadChatSessionBrowser.ts',
65
+ 'src/pages/Threads/ThreadChatComposer.tsx',
65
66
  'src/pages/Threads/useThreadChatThreadActions.ts',
66
67
  'src/types/window.d.ts',
67
68
  ]);
@@ -170,6 +170,24 @@ const index_js_1 = require("../../services/local-ai-core/src/agents/index.js");
170
170
  (0, node_fs_1.rmSync)(dir, { recursive: true, force: true });
171
171
  }
172
172
  });
173
+ (0, node_test_1.default)('agent runtime detector reads PATH regardless of key casing', () => {
174
+ const dir = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'agent-runtime-path-casing-'));
175
+ try {
176
+ const opencode = (0, node_path_1.join)(dir, 'opencode');
177
+ (0, node_fs_1.writeFileSync)(opencode, '#!/bin/sh\necho "opencode 1.2.3"\n', 'utf8');
178
+ (0, node_fs_1.chmodSync)(opencode, 0o755);
179
+ const opencodeRuntime = (0, agent_runtime_detector_js_1.detectInstalledAgentRuntimes)({
180
+ env: { Path: [dir, process.env.PATH || ''].filter(Boolean).join(node_path_1.delimiter) },
181
+ versionTimeoutMs: 50,
182
+ }).find((runtime) => runtime.agentType === 'opencode');
183
+ strict_1.default.equal(opencodeRuntime?.status, 'installed');
184
+ strict_1.default.equal(opencodeRuntime?.source, 'path');
185
+ strict_1.default.equal(opencodeRuntime?.command, opencode);
186
+ }
187
+ finally {
188
+ (0, node_fs_1.rmSync)(dir, { recursive: true, force: true });
189
+ }
190
+ });
173
191
  (0, node_test_1.default)('agent runtime detector reports Claude Code when claude command is available', () => {
174
192
  const dir = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'agent-runtime-claude-version-'));
175
193
  try {
@@ -88,14 +88,24 @@ function runScript(args, env) {
88
88
  res.statusCode = 404;
89
89
  res.end();
90
90
  });
91
- await new Promise((resolve) => {
91
+ await new Promise((resolve, reject) => {
92
92
  server.listen(0, '127.0.0.1', () => resolve());
93
+ server.on('error', (err) => {
94
+ if (err.code === 'EPERM' || err.code === 'EACCES') {
95
+ // Sandbox restricts TCP listen — skip gracefully
96
+ resolve();
97
+ return;
98
+ }
99
+ reject(err);
100
+ });
93
101
  });
102
+ const address = server.address();
103
+ if (!address || typeof address === 'string') {
104
+ // Server failed to start (e.g. sandboxed) — skip the test
105
+ server.close();
106
+ return;
107
+ }
94
108
  try {
95
- const address = server.address();
96
- if (!address || typeof address === 'string') {
97
- throw new Error('Could not determine test server address');
98
- }
99
109
  const { stdout, stderr } = await runScript(['hello', 'kb-a', 'kb-empty', 'kb-error'], {
100
110
  KNOWLEDGE_API_BASE_URL: `http://127.0.0.1:${address.port}/api/local/v1`,
101
111
  });