@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.
- package/README.md +6 -0
- package/dist/renderer/assets/{Badge-BIesaDYG.js → Badge-BYREM3t3.js} +1 -1
- package/dist/renderer/assets/{Chat-CpataoDh.js → Chat-Dtb5X7sB.js} +1 -1
- package/dist/renderer/assets/{ChatMarkdown-_Mdmltgv.js → ChatMarkdown-_slLloCh.js} +1 -1
- package/dist/renderer/assets/{Config-Pe5-zKZk.js → Config-pHichs7H.js} +1 -1
- package/dist/renderer/assets/{CronList-BnaOSPT8.js → CronList-CJQMeCjz.js} +1 -1
- package/dist/renderer/assets/{Dashboard-D05l8GKE.js → Dashboard-CY77Imde.js} +2 -2
- package/dist/renderer/assets/{EmptyState-BDBavDll.js → EmptyState-DCqmct2y.js} +1 -1
- package/dist/renderer/assets/{KnowledgeDetail-DvR798l_.js → KnowledgeDetail-DFrxa-pv.js} +1 -1
- package/dist/renderer/assets/{KnowledgeHome-r2ZuvU8-.js → KnowledgeHome-DL-vAfrH.js} +1 -1
- package/dist/renderer/assets/{Logs-BaljtmAV.js → Logs-jw9Uv590.js} +1 -1
- package/dist/renderer/assets/{Modal-CXhD_OWR.js → Modal-ChSm7tk6.js} +1 -1
- package/dist/renderer/assets/{MonitorList-D7tyipbx.js → MonitorList-DrEwyS71.js} +1 -1
- package/dist/renderer/assets/{Page-KUuFYgjg.js → Page-DhD-zgMU.js} +1 -1
- package/dist/renderer/assets/ProjectDetail-BVSjpfpL.js +11 -0
- package/dist/renderer/assets/{ProjectList-CbdHd5Ev.js → ProjectList-CHGbTJjk.js} +1 -1
- package/dist/renderer/assets/{Select-Djc8BXMC.js → Select-rHs9CSam.js} +1 -1
- package/dist/renderer/assets/{SessionChat-DOy0iKQR.js → SessionChat-CDc2FNMA.js} +1 -1
- package/dist/renderer/assets/{SessionList-DHgl1s1D.js → SessionList-Mr1uAnRW.js} +1 -1
- package/dist/renderer/assets/ThreadChat-Detu5UfN.js +23 -0
- package/dist/renderer/assets/{Workspace-DTocqY-F.js → Workspace-MRRg8ndJ.js} +1 -1
- package/dist/renderer/assets/{arrow-left-CXyya3hP.js → arrow-left-BU2NB2LA.js} +1 -1
- package/dist/renderer/assets/{book-open-9n4Kxc7E.js → book-open-D-TGvWwa.js} +1 -1
- package/dist/renderer/assets/{bot-C9HBk5XH.js → bot-IYNh8tH5.js} +1 -1
- package/dist/renderer/assets/{check-CutSg9a5.js → check-CCZ0JO_S.js} +1 -1
- package/dist/renderer/assets/{chevron-down-DrydR4i3.js → chevron-down-00bRZi15.js} +1 -1
- package/dist/renderer/assets/{circle-BEjtahw6.js → circle-CpQ8x4k_.js} +1 -1
- package/dist/renderer/assets/{desktop-DATgk_ka.js → desktop-D0k2aGSj.js} +1 -1
- package/dist/renderer/assets/{funnel-BhqZpS4f.js → funnel-UbcrCBCp.js} +1 -1
- package/dist/renderer/assets/{heart-Dp8Vs-7_.js → heart-DvLsV7tL.js} +1 -1
- package/dist/renderer/assets/{index-BKpv0P0s.js → index-B2L4G-b_.js} +1 -1
- package/dist/renderer/assets/{index-cI3pWBnN.js → index-dy-g2Bh4.js} +2 -2
- package/dist/renderer/assets/{pencil-ywcJzeOo.js → pencil-qBYOgW5M.js} +1 -1
- package/dist/renderer/assets/{play-AtN492Cx.js → play-Dn6b4AGj.js} +1 -1
- package/dist/renderer/assets/{plus-BEj14BBV.js → plus-CaApUwEm.js} +1 -1
- package/dist/renderer/assets/projects-BwF5RlNV.js +1 -0
- package/dist/renderer/assets/{save-D6ov4CNv.js → save-CN6yvTfD.js} +1 -1
- package/dist/renderer/assets/{search-C3bvw7AR.js → search-Dn2MxYiO.js} +1 -1
- package/dist/renderer/assets/{server-C1Uyedyx.js → server-DpcVLHeh.js} +1 -1
- package/dist/renderer/assets/{session-utils-DpRwJ6Nh.js → session-utils-DnD2Q_y1.js} +1 -1
- package/dist/renderer/assets/{sessions-BWmAppwK.js → sessions-eK5D4FLt.js} +1 -1
- package/dist/renderer/assets/{shield-check-CVx1mEs2.js → shield-check-DSSJkacw.js} +1 -1
- package/dist/renderer/assets/{trash-2-o-heXOgs.js → trash-2-DmYJlEvO.js} +1 -1
- package/dist/renderer/assets/{user-dPOzUqIc.js → user-Cvf_uiyQ.js} +1 -1
- package/dist/renderer/assets/{wifi-off-Fz5c3_x_.js → wifi-off-CCTloj-V.js} +1 -1
- package/dist/renderer/index.html +1 -1
- package/dist-electron/services/local-ai-core/src/acp/local-core-acp-session-coordinator.js +2 -1
- package/dist-electron/services/local-ai-core/src/agents/pi/launch.js +1 -1
- package/dist-electron/services/local-ai-core/src/agents/shared/launch-utils.js +22 -0
- package/dist-electron/services/local-ai-core/src/channel/lark/local-core-lark-gateway.js +132 -348
- package/dist-electron/services/local-ai-core/src/channel/shared/base-channel-gateway.js +303 -0
- package/dist-electron/services/local-ai-core/src/channel/weixin/local-core-weixin-gateway.js +131 -382
- package/dist-electron/services/local-ai-core/src/runtime/agent-runtime-detector.js +2 -1
- package/dist-electron/services/local-ai-core/src/runtime/channel-service.js +150 -0
- package/dist-electron/services/local-ai-core/src/runtime/env-utils.js +12 -0
- package/dist-electron/services/local-ai-core/src/runtime/external-service.js +234 -0
- package/dist-electron/services/local-ai-core/src/runtime/handlers/automation-handler.js +34 -0
- package/dist-electron/services/local-ai-core/src/runtime/handlers/capabilities-handler.js +12 -0
- package/dist-electron/services/local-ai-core/src/runtime/handlers/channel-handler.js +65 -0
- package/dist-electron/services/local-ai-core/src/runtime/handlers/external-handler.js +17 -0
- package/dist-electron/services/local-ai-core/src/runtime/handlers/knowledge-handler.js +65 -0
- package/dist-electron/services/local-ai-core/src/runtime/handlers/openai-handler.js +496 -0
- package/dist-electron/services/local-ai-core/src/runtime/handlers/provider-handler.js +24 -0
- package/dist-electron/services/local-ai-core/src/runtime/handlers/runtime-handler.js +68 -0
- package/dist-electron/services/local-ai-core/src/runtime/handlers/runtimes-handler.js +37 -0
- package/dist-electron/services/local-ai-core/src/runtime/handlers/scheduler-handler.js +34 -0
- package/dist-electron/services/local-ai-core/src/runtime/handlers/security-handler.js +49 -0
- package/dist-electron/services/local-ai-core/src/runtime/handlers/task-handler.js +27 -0
- package/dist-electron/services/local-ai-core/src/runtime/handlers/thread-handler.js +42 -0
- package/dist-electron/services/local-ai-core/src/runtime/handlers/workspace-handler.js +29 -0
- package/dist-electron/services/local-ai-core/src/runtime/local-core-controller.js +40 -592
- package/dist-electron/services/local-ai-core/src/runtime/server-helpers.js +96 -0
- package/dist-electron/services/local-ai-core/src/runtime/server.js +107 -1084
- package/dist-electron/services/local-ai-core/src/runtime/standalone.js +13 -1
- package/dist-electron/src/pages/Projects/project-provider-config.js +75 -0
- package/dist-electron/tests/contracts/architecture-docs.test.js +1 -0
- package/dist-electron/tests/electron/agent-runtime-detector.test.js +18 -0
- package/dist-electron/tests/electron/knowledge-skill-script.test.js +15 -5
- package/dist-electron/tests/electron/lac-cli.test.js +591 -688
- package/dist-electron/tests/electron/plugin-kernel.test.js +47 -31
- package/dist-electron/tests/electron/project-provider-config.test.js +71 -0
- package/dist-electron/tests/electron/workspace-task-store.test.js +19 -9
- package/dist-electron/tests/integration/local-core-cors.test.js +22 -0
- package/package.json +1 -1
- package/dist/renderer/assets/ProjectDetail-Ddq94-yu.js +0 -11
- package/dist/renderer/assets/ThreadChat-I7dYibDc.js +0 -23
- 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(
|
|
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
|
});
|