@kafca/agentdock 0.1.56 → 0.1.57
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 +7 -0
- package/dist/renderer/assets/{Badge-DjcoXx2J.js → Badge-CDTbmw1h.js} +1 -1
- package/dist/renderer/assets/Card-DayUo35w.js +1 -0
- package/dist/renderer/assets/Config-ByGMQuzR.js +21 -0
- package/dist/renderer/assets/CronList-XqHdVlgu.js +1 -0
- package/dist/renderer/assets/Dashboard-CZj-oANw.js +41 -0
- package/dist/renderer/assets/{EmptyState-DIZLiccW.js → EmptyState-EFMkOjZO.js} +1 -1
- package/dist/renderer/assets/HighlightedMarkdown-DyvF3DHK.js +12 -0
- package/dist/renderer/assets/Input-DxoWVc9d.js +1 -0
- package/dist/renderer/assets/{KnowledgeDetail-CJ9IYOsa.js → KnowledgeDetail-CbUb2tG7.js} +2 -2
- package/dist/renderer/assets/{KnowledgeHome-BLGPwnBO.js → KnowledgeHome-BWV1gz4f.js} +3 -3
- package/dist/renderer/assets/Logs-DqnanQTc.js +6 -0
- package/dist/renderer/assets/{Modal-CQiUpfl4.js → Modal-yY7TzR0x.js} +3 -3
- package/dist/renderer/assets/MonitorList-CIjGQkFs.js +1 -0
- package/dist/renderer/assets/Page-vwHNUdoj.js +1 -0
- package/dist/renderer/assets/{Select-D6z65IT3.js → Select-CmbK36pN.js} +2 -2
- package/dist/renderer/assets/ThreadChat-4OceMgM4.js +86 -0
- package/dist/renderer/assets/Workspace-DplPJOjJ.js +19 -0
- package/dist/renderer/assets/{arrow-left-CV5cL3f4.js → arrow-left-C8HfBt2K.js} +1 -1
- package/dist/renderer/assets/{book-open-DThvB7pj.js → book-open-BCdZWncQ.js} +1 -1
- package/dist/renderer/assets/channels-hgO3cAIx.js +6 -0
- package/dist/renderer/assets/chevron-down-BPk77tqY.js +11 -0
- package/dist/renderer/assets/index-BIKL3fTP.css +11 -0
- package/dist/renderer/assets/index-BlA4xPdd.js +41 -0
- package/dist/renderer/assets/index-wYpjqVqC.js +167 -0
- package/dist/renderer/assets/knowledge-7pl06KuH.js +1 -0
- package/dist/renderer/assets/{pencil-Dv5WxhdC.js → pencil-CB1SWZ9A.js} +1 -1
- package/dist/renderer/assets/{play-DnCnft83.js → play-BvsoXUrM.js} +1 -1
- package/dist/renderer/assets/{plus-DsxIagzS.js → plus-CokBDnaL.js} +1 -1
- package/dist/renderer/assets/{save-CST01lIc.js → save-D-w4kATO.js} +1 -1
- package/dist/renderer/assets/{search-B_bqy6Wd.js → search-Cnsn6i4Q.js} +1 -1
- package/dist/renderer/assets/{shield-check-D6lG5Aoc.js → shield-check-Cjja2Gh6.js} +1 -1
- package/dist/renderer/assets/threads-BCm6j4eI.js +1 -0
- package/dist/renderer/assets/{trash-2-Cefngb6Q.js → trash-2-CIxz9qYY.js} +1 -1
- package/dist/renderer/index.html +2 -2
- package/dist-electron/packages/contracts/src/automation.js +2 -0
- package/dist-electron/packages/contracts/src/channels.js +2 -0
- package/dist-electron/packages/contracts/src/knowledge.js +2 -0
- package/dist-electron/packages/contracts/src/local-core.js +15 -0
- package/dist-electron/packages/contracts/src/runtime.js +2 -0
- package/dist-electron/packages/contracts/src/scheduler.js +2 -0
- package/dist-electron/packages/contracts/src/threads.js +2 -0
- package/dist-electron/packages/core-sdk/src/automation.js +32 -0
- package/dist-electron/packages/core-sdk/src/channels.js +121 -0
- package/dist-electron/packages/core-sdk/src/client.js +455 -0
- package/dist-electron/packages/core-sdk/src/index.js +43 -607
- package/dist-electron/packages/core-sdk/src/knowledge.js +85 -0
- package/dist-electron/packages/core-sdk/src/request.js +22 -0
- package/dist-electron/packages/core-sdk/src/runtime.js +214 -0
- package/dist-electron/packages/core-sdk/src/scheduler.js +32 -0
- package/dist-electron/packages/core-sdk/src/threads.js +67 -0
- package/dist-electron/packages/plugin-sdk/src/agents.js +2 -0
- package/dist-electron/packages/plugin-sdk/src/automation.js +2 -0
- package/dist-electron/packages/plugin-sdk/src/channels.js +2 -0
- package/dist-electron/packages/plugin-sdk/src/index.js +21 -0
- package/dist-electron/packages/plugin-sdk/src/knowledge.js +2 -0
- package/dist-electron/packages/plugin-sdk/src/runtime.js +2 -0
- package/dist-electron/packages/plugin-sdk/src/scheduler.js +2 -0
- package/dist-electron/packages/plugin-sdk/src/threads.js +2 -0
- package/dist-electron/services/local-ai-core/src/acp/local-core-acp-backend.js +5 -8
- package/dist-electron/services/local-ai-core/src/acp/local-core-acp-content.js +2 -2
- package/dist-electron/services/local-ai-core/src/acp/local-core-acp-turn-coordinator.js +3 -3
- package/dist-electron/services/local-ai-core/src/acp/store/agent-task-store.js +5 -5
- package/dist-electron/services/local-ai-core/src/acp/store/automation-monitor-store.js +12 -12
- package/dist-electron/services/local-ai-core/src/acp/store/local-core-acp-store.js +2 -2
- package/dist-electron/services/local-ai-core/src/acp/store/scheduler-store.js +11 -11
- package/dist-electron/services/local-ai-core/src/acp/store/security-store.js +3 -3
- package/dist-electron/services/local-ai-core/src/acp/store/thread-store.js +7 -7
- package/dist-electron/services/local-ai-core/src/acp/workspace-acp-permissions.js +2 -2
- package/dist-electron/services/local-ai-core/src/agents/claudecode/definition.js +3 -3
- package/dist-electron/services/local-ai-core/src/agents/codex/definition.js +3 -3
- package/dist-electron/services/local-ai-core/src/agents/localcore-acp/definition.js +2 -2
- package/dist-electron/services/local-ai-core/src/agents/localcore-acp/index.js +4 -4
- package/dist-electron/services/local-ai-core/src/agents/opencode/launch.js +2 -2
- package/dist-electron/services/local-ai-core/src/agents/pi/definition.js +2 -2
- package/dist-electron/services/local-ai-core/src/agents/pi/launch.js +3 -3
- package/dist-electron/services/local-ai-core/src/agents/pi/provider-materializer.js +1 -1
- package/dist-electron/services/local-ai-core/src/agents/shared/agent-plugin.js +4 -4
- package/dist-electron/services/local-ai-core/src/channel/lark/cards.js +33 -18
- package/dist-electron/services/local-ai-core/src/channel/lark/config.js +2 -2
- package/dist-electron/services/local-ai-core/src/channel/lark/gateway-utils.js +91 -0
- package/dist-electron/services/local-ai-core/src/channel/lark/inbound-handler.js +180 -0
- package/dist-electron/services/local-ai-core/src/channel/lark/local-core-lark-gateway.js +52 -486
- package/dist-electron/services/local-ai-core/src/channel/lark/outbound-transport.js +124 -0
- package/dist-electron/services/local-ai-core/src/channel/shared/inbound-authorization.js +54 -0
- package/dist-electron/services/local-ai-core/src/channel/weixin/config.js +2 -2
- package/dist-electron/services/local-ai-core/src/channel/weixin/inbound-media.js +21 -0
- package/dist-electron/services/local-ai-core/src/channel/weixin/inbound-poller.js +167 -0
- package/dist-electron/services/local-ai-core/src/channel/weixin/local-core-weixin-gateway.js +50 -469
- package/dist-electron/services/local-ai-core/src/channel/weixin/runtime-state.js +156 -0
- package/dist-electron/services/local-ai-core/src/channel/weixin/text-utils.js +100 -0
- package/dist-electron/services/local-ai-core/src/cli/lac.js +6 -6
- package/dist-electron/services/local-ai-core/src/cli/monitor-cli-parsers.js +2 -2
- package/dist-electron/services/local-ai-core/src/kernel/bootstrap.js +28 -70
- package/dist-electron/services/local-ai-core/src/plugins/builtin/knowledge-ai-vector-plugin.js +2 -2
- package/dist-electron/services/local-ai-core/src/plugins/builtin/knowledge-noop-plugin.js +2 -2
- package/dist-electron/services/local-ai-core/src/router/workspace-bridge-event-stream.js +29 -0
- package/dist-electron/services/local-ai-core/src/router/workspace-route-config.js +5 -5
- package/dist-electron/services/local-ai-core/src/router/workspace-router.js +47 -60
- package/dist-electron/services/local-ai-core/src/runtime/agent-runtime-detector.js +5 -5
- package/dist-electron/services/local-ai-core/src/runtime/config-migration.js +6 -6
- package/dist-electron/services/local-ai-core/src/runtime/deployment-diagnostics.js +3 -3
- package/dist-electron/services/local-ai-core/src/runtime/external-service.js +3 -1
- package/dist-electron/services/local-ai-core/src/runtime/handlers/automation-handler.js +11 -2
- package/dist-electron/services/local-ai-core/src/runtime/handlers/channel-handler.js +12 -6
- package/dist-electron/services/local-ai-core/src/runtime/handlers/external-handler.js +10 -2
- package/dist-electron/services/local-ai-core/src/runtime/handlers/knowledge-handler.js +18 -6
- package/dist-electron/services/local-ai-core/src/runtime/handlers/provider-handler.js +7 -2
- package/dist-electron/services/local-ai-core/src/runtime/handlers/runtime-handler.js +28 -3
- package/dist-electron/services/local-ai-core/src/runtime/handlers/scheduler-handler.js +10 -2
- package/dist-electron/services/local-ai-core/src/runtime/handlers/security-handler.js +18 -5
- package/dist-electron/services/local-ai-core/src/runtime/handlers/task-handler.js +14 -2
- package/dist-electron/services/local-ai-core/src/runtime/handlers/thread-handler.js +18 -15
- package/dist-electron/services/local-ai-core/src/runtime/handlers/workspace-handler.js +13 -2
- package/dist-electron/services/local-ai-core/src/runtime/local-core-controller.js +35 -8
- package/dist-electron/services/local-ai-core/src/runtime/request-validation.js +79 -0
- package/dist-electron/services/local-ai-core/src/runtime/runtime-detection-service.js +9 -9
- package/dist-electron/services/local-ai-core/src/runtime/server-helpers.js +10 -1
- package/dist-electron/services/local-ai-core/src/runtime/server.js +2 -1
- package/dist-electron/services/local-ai-core/src/runtime/workspace-project-registry.js +76 -0
- package/dist-electron/services/local-ai-core/src/sandbox/sandbox-config.js +8 -8
- package/dist-electron/services/local-ai-core/src/thread/agent-message-policy.js +75 -0
- package/dist-electron/shared/desktop.js +1 -64
- package/dist-electron/src/components/chat/chat-controller-state.js +60 -0
- package/dist-electron/src/components/chat/chat-event-gate.js +146 -0
- package/dist-electron/src/components/chat/markdown-code-block.js +8 -0
- package/dist-electron/src/pages/Desktop/workspace-model.js +212 -0
- package/dist-electron/src/pages/Threads/thread-chat-model.js +50 -51
- package/dist-electron/tests/contracts/agent-message-policy.test.js +21 -0
- package/dist-electron/tests/contracts/architecture-docs.test.js +56 -33
- package/dist-electron/tests/contracts/chat-event-gate.test.js +114 -0
- package/dist-electron/tests/contracts/chat-markdown.test.js +16 -0
- package/dist-electron/tests/contracts/thread-task-state.test.js +32 -0
- package/dist-electron/tests/contracts/workspace-identity.test.js +23 -0
- package/dist-electron/tests/electron/core-client.test.js +284 -0
- package/dist-electron/tests/electron/plugin-kernel.test.js +54 -0
- package/dist-electron/tests/electron/renderer-packaging.test.js +9 -0
- package/dist-electron/tests/electron/workspace-task-store.test.js +31 -0
- package/dist-electron/tests/integration/channel-inbound-authorization.test.js +80 -0
- package/dist-electron/tests/integration/lark-gateway-utils.test.js +13 -0
- package/dist-electron/tests/integration/lark-gateway.test.js +4 -4
- package/dist-electron/tests/integration/weixin-runtime-state.test.js +32 -0
- package/dist-electron/tests/integration/weixin-text-utils.test.js +15 -0
- package/package.json +9 -4
- package/dist/renderer/assets/Chat-C5Bkm9-M.js +0 -2
- package/dist/renderer/assets/ChatMarkdown-uc36EzyD.js +0 -45
- package/dist/renderer/assets/Config-DHtQuuLy.js +0 -21
- package/dist/renderer/assets/CronList-BYUnhzSC.js +0 -1
- package/dist/renderer/assets/Dashboard-BPnGMDg3.js +0 -26
- package/dist/renderer/assets/Logs-Dyd2Uwlt.js +0 -1
- package/dist/renderer/assets/MonitorList-Byg3E3Gt.js +0 -1
- package/dist/renderer/assets/Page-7DxXvTMm.js +0 -1
- package/dist/renderer/assets/ProjectDetail-Dfr5s0Ja.js +0 -11
- package/dist/renderer/assets/ProjectList-CDDQjAQ_.js +0 -1
- package/dist/renderer/assets/SessionChat-s7CAaCPL.js +0 -1
- package/dist/renderer/assets/SessionList-D-OycKKS.js +0 -1
- package/dist/renderer/assets/ThreadChat-CLdFynB5.js +0 -28
- package/dist/renderer/assets/Workspace-xfT5z4j_.js +0 -19
- package/dist/renderer/assets/bot-CWQ5-ovl.js +0 -6
- package/dist/renderer/assets/check-DKM7zfWG.js +0 -6
- package/dist/renderer/assets/chevron-down-Dfw2KU87.js +0 -6
- package/dist/renderer/assets/circle-CoP4RA4s.js +0 -6
- package/dist/renderer/assets/desktop-CsDYrOOU.js +0 -1
- package/dist/renderer/assets/desktop-JQkhNOF4.js +0 -5
- package/dist/renderer/assets/funnel-DpVLlG3g.js +0 -6
- package/dist/renderer/assets/heart-BMD36ejP.js +0 -6
- package/dist/renderer/assets/index-COxSYBjE.js +0 -182
- package/dist/renderer/assets/index-CTGTI-cm.js +0 -41
- package/dist/renderer/assets/index-CjCuR6DI.css +0 -11
- package/dist/renderer/assets/projects-DgjHcNgt.js +0 -1
- package/dist/renderer/assets/server-ecH4GNwa.js +0 -11
- package/dist/renderer/assets/session-utils-Dd_WKMYW.js +0 -6
- package/dist/renderer/assets/sessions-BQ33Mv4k.js +0 -1
- package/dist/renderer/assets/user-D_8RSH-T.js +0 -6
- package/dist/renderer/assets/wifi-off-DB9D-pOu.js +0 -11
- package/dist-electron/src/api/client.js +0 -73
- package/dist-electron/src/api/sessions.js +0 -21
- package/dist-electron/src/lib/session-utils.js +0 -51
- package/dist-electron/src/pages/Projects/project-provider-config.js +0 -75
- package/dist-electron/tests/electron/project-provider-config.test.js +0 -71
|
@@ -9,6 +9,10 @@ const local_core_slash_commands_js_1 = require("../acp/local-core-slash-commands
|
|
|
9
9
|
const workspace_thread_id_js_1 = require("../thread/workspace-thread-id.js");
|
|
10
10
|
const command_risk_js_1 = require("../security/command-risk.js");
|
|
11
11
|
const workspace_route_config_js_1 = require("./workspace-route-config.js");
|
|
12
|
+
const workspace_project_registry_js_1 = require("../runtime/workspace-project-registry.js");
|
|
13
|
+
const agent_message_policy_js_1 = require("../thread/agent-message-policy.js");
|
|
14
|
+
const content_js_1 = require("../channel/shared/content.js");
|
|
15
|
+
const workspace_bridge_event_stream_js_1 = require("./workspace-bridge-event-stream.js");
|
|
12
16
|
var workspace_thread_id_js_2 = require("../thread/workspace-thread-id.js");
|
|
13
17
|
Object.defineProperty(exports, "decodeThreadId", { enumerable: true, get: function () { return workspace_thread_id_js_2.decodeThreadId; } });
|
|
14
18
|
Object.defineProperty(exports, "encodeThreadId", { enumerable: true, get: function () { return workspace_thread_id_js_2.encodeThreadId; } });
|
|
@@ -17,17 +21,18 @@ class WorkspaceRouter {
|
|
|
17
21
|
store;
|
|
18
22
|
localCoreAcp;
|
|
19
23
|
runThreadMap = new Map();
|
|
20
|
-
|
|
24
|
+
bridgeEvents;
|
|
21
25
|
schedulerBridge = null;
|
|
22
26
|
constructor(options) {
|
|
23
27
|
this.options = options;
|
|
24
28
|
this.store = options.store;
|
|
29
|
+
this.bridgeEvents = new workspace_bridge_event_stream_js_1.WorkspaceBridgeEventStream(options.eventBus);
|
|
25
30
|
this.localCoreAcp = new local_core_acp_backend_js_1.LocalCoreAcpBackend({
|
|
26
31
|
store: this.store,
|
|
27
32
|
runThreadMap: this.runThreadMap,
|
|
28
33
|
cliBinDir: options.cliBinDir,
|
|
29
34
|
localCoreBase: options.localCoreBase,
|
|
30
|
-
emitBridge: (event) => this.
|
|
35
|
+
emitBridge: (event) => this.bridgeEvents.emit(event),
|
|
31
36
|
eventBus: options.eventBus,
|
|
32
37
|
scheduler: {
|
|
33
38
|
createJob: async (input) => {
|
|
@@ -55,7 +60,7 @@ class WorkspaceRouter {
|
|
|
55
60
|
}
|
|
56
61
|
close() {
|
|
57
62
|
this.localCoreAcp.close();
|
|
58
|
-
this.
|
|
63
|
+
this.bridgeEvents.clear();
|
|
59
64
|
this.store.close();
|
|
60
65
|
}
|
|
61
66
|
getThreadSessionKey(threadId) {
|
|
@@ -74,23 +79,22 @@ class WorkspaceRouter {
|
|
|
74
79
|
if (!route) {
|
|
75
80
|
continue;
|
|
76
81
|
}
|
|
77
|
-
|
|
78
|
-
|
|
82
|
+
const workspaceId = (0, workspace_project_registry_js_1.projectWorkspaceId)(project);
|
|
83
|
+
workspaceMap.set(workspaceId, {
|
|
84
|
+
id: workspaceId,
|
|
79
85
|
name: project.name,
|
|
80
86
|
agentType: route.agentType,
|
|
81
87
|
platforms: (0, workspace_route_config_js_1.normalizePlatformTypes)(project),
|
|
82
|
-
sessionsCount: this.store.countThreads(
|
|
88
|
+
sessionsCount: this.store.countThreads(workspaceId),
|
|
83
89
|
heartbeatEnabled: false,
|
|
84
90
|
});
|
|
85
91
|
}
|
|
86
92
|
return [...workspaceMap.values()].sort((a, b) => a.name.localeCompare(b.name));
|
|
87
93
|
}
|
|
88
94
|
async listWorkspaceRegistry() {
|
|
89
|
-
await this.syncConfiguredWorkspaces();
|
|
90
95
|
return this.store.listWorkspaceRegistry();
|
|
91
96
|
}
|
|
92
97
|
async getWorkspaceRegistryEntry(workspaceId) {
|
|
93
|
-
await this.syncConfiguredWorkspaces();
|
|
94
98
|
const workspace = this.store.getWorkspaceRegistryEntry(workspaceId);
|
|
95
99
|
if (!workspace) {
|
|
96
100
|
throw new Error(`Workspace not found: ${workspaceId}`);
|
|
@@ -209,7 +213,8 @@ class WorkspaceRouter {
|
|
|
209
213
|
const route = isLocalSlashCommand(content)
|
|
210
214
|
? await this.getWorkspaceRoute(workspaceId)
|
|
211
215
|
: await this.getThreadWorkspaceRoute(threadId, workspaceId);
|
|
212
|
-
|
|
216
|
+
const preparedContent = await this.prepareAgentMessage(threadId, content);
|
|
217
|
+
return this.localCoreAcp.sendThreadMessage(threadId, preparedContent, route.config, options);
|
|
213
218
|
}
|
|
214
219
|
async sendThreadAction(threadId, content) {
|
|
215
220
|
const { workspaceId } = (0, workspace_thread_id_js_1.decodeThreadId)(threadId);
|
|
@@ -262,23 +267,24 @@ class WorkspaceRouter {
|
|
|
262
267
|
selectedKnowledgeBaseIds: await this.options.knowledgeAttachments.listThreadKnowledgeBaseIds(detail.id),
|
|
263
268
|
};
|
|
264
269
|
}
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
});
|
|
270
|
-
this.notifyBridgeSubscribers(event);
|
|
271
|
-
}
|
|
272
|
-
notifyBridgeSubscribers(event) {
|
|
273
|
-
for (const listener of this.bridgeSubscribers) {
|
|
274
|
-
listener(event);
|
|
270
|
+
async prepareAgentMessage(threadId, content) {
|
|
271
|
+
const displayText = typeof content === 'string' ? content : content.displayText;
|
|
272
|
+
if (displayText.trim().startsWith('/')) {
|
|
273
|
+
return content;
|
|
275
274
|
}
|
|
275
|
+
const selectedIds = new Set(await this.options.knowledgeAttachments.listThreadKnowledgeBaseIds(threadId));
|
|
276
|
+
const knowledgeBases = selectedIds.size
|
|
277
|
+
? (await this.options.knowledgeProvider.listKnowledgeBases())
|
|
278
|
+
.filter((base) => selectedIds.has(base.id))
|
|
279
|
+
.map(({ id, name }) => ({ id, name }))
|
|
280
|
+
: [];
|
|
281
|
+
const wrapped = (0, agent_message_policy_js_1.composeAgentMessage)(displayText, knowledgeBases);
|
|
282
|
+
return typeof content === 'string'
|
|
283
|
+
? wrapped
|
|
284
|
+
: (0, content_js_1.createChannelThreadMessageInput)(wrapped, content.contentParts);
|
|
276
285
|
}
|
|
277
286
|
subscribeBridge(listener) {
|
|
278
|
-
this.
|
|
279
|
-
return () => {
|
|
280
|
-
this.bridgeSubscribers.delete(listener);
|
|
281
|
-
};
|
|
287
|
+
return this.bridgeEvents.subscribe(listener);
|
|
282
288
|
}
|
|
283
289
|
subscribeBridgeEvents(listener) {
|
|
284
290
|
return this.subscribeBridge(listener);
|
|
@@ -465,10 +471,20 @@ class WorkspaceRouter {
|
|
|
465
471
|
}
|
|
466
472
|
async getWorkspaceRoute(workspaceId, agentTypeOverride = '') {
|
|
467
473
|
const configState = await this.options.readRuntimeConfig();
|
|
468
|
-
const
|
|
469
|
-
const
|
|
474
|
+
const embeddedProjects = Array.isArray(configState.config?.projects) ? configState.config.projects : [];
|
|
475
|
+
const projects = embeddedProjects.length
|
|
476
|
+
? (0, workspace_project_registry_js_1.persistProjectsInRegistry)(this.store, embeddedProjects, { preserveLegacyIds: true })
|
|
477
|
+
: (0, workspace_project_registry_js_1.listRegistryProjects)(this.store);
|
|
478
|
+
if (embeddedProjects.length) {
|
|
479
|
+
this.store.saveRuntimeConfig((0, workspace_project_registry_js_1.withoutRuntimeProjects)(configState.config));
|
|
480
|
+
}
|
|
481
|
+
const projectedConfigState = {
|
|
482
|
+
...configState,
|
|
483
|
+
config: { ...configState.config, projects },
|
|
484
|
+
};
|
|
485
|
+
const matched = projects.find((project) => (0, workspace_project_registry_js_1.projectWorkspaceId)(project) === workspaceId);
|
|
470
486
|
const project = matched && agentTypeOverride ? withAgentTypeOverride(matched, agentTypeOverride) : matched;
|
|
471
|
-
const route = project ? this.resolveProjectRoute(
|
|
487
|
+
const route = project ? this.resolveProjectRoute(projectedConfigState, project) : null;
|
|
472
488
|
if (!matched || !route) {
|
|
473
489
|
throw new Error(`Workspace "${workspaceId}" is not configured as a Local AI Core ACP workspace.`);
|
|
474
490
|
}
|
|
@@ -476,31 +492,12 @@ class WorkspaceRouter {
|
|
|
476
492
|
}
|
|
477
493
|
async listLocalCoreProjects() {
|
|
478
494
|
const configState = await this.options.readRuntimeConfig();
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
const config = await this.options.readRuntimeConfig();
|
|
484
|
-
const projects = Array.isArray(config.config?.projects) ? config.config.projects : [];
|
|
485
|
-
for (const project of projects) {
|
|
486
|
-
const route = this.resolveProjectRoute(config, project);
|
|
487
|
-
if (!route) {
|
|
488
|
-
continue;
|
|
489
|
-
}
|
|
490
|
-
const path = inferWorkspacePath(project);
|
|
491
|
-
this.store.upsertWorkspaceRegistryEntry({
|
|
492
|
-
workspaceId: project.name,
|
|
493
|
-
displayName: project.name,
|
|
494
|
-
path,
|
|
495
|
-
deviceId: 'local',
|
|
496
|
-
defaultRuntimeId: route.agentType,
|
|
497
|
-
git: detectGitSummary(path),
|
|
498
|
-
health: workspaceHealth(path),
|
|
499
|
-
metadata: {
|
|
500
|
-
platforms: (0, workspace_route_config_js_1.normalizePlatformTypes)(project),
|
|
501
|
-
},
|
|
502
|
-
});
|
|
495
|
+
let projects = (0, workspace_project_registry_js_1.listRegistryProjects)(this.store);
|
|
496
|
+
if (projects.length === 0 && configState.config.projects?.length) {
|
|
497
|
+
projects = (0, workspace_project_registry_js_1.persistProjectsInRegistry)(this.store, configState.config.projects, { preserveLegacyIds: true });
|
|
498
|
+
this.store.saveRuntimeConfig((0, workspace_project_registry_js_1.withoutRuntimeProjects)(configState.config));
|
|
503
499
|
}
|
|
500
|
+
return projects.filter((project) => this.resolveProjectRoute(configState, project));
|
|
504
501
|
}
|
|
505
502
|
resolveProjectRoute(configState, project) {
|
|
506
503
|
const routeProject = this.withResolvedProjectProvider(project);
|
|
@@ -559,16 +556,6 @@ exports.WorkspaceRouter = WorkspaceRouter;
|
|
|
559
556
|
function createWorkspaceRouter(options) {
|
|
560
557
|
return new WorkspaceRouter(options);
|
|
561
558
|
}
|
|
562
|
-
function inferWorkspacePath(project) {
|
|
563
|
-
const options = project.agent?.options || {};
|
|
564
|
-
for (const key of ['cwd', 'path', 'workspacePath', 'root']) {
|
|
565
|
-
const value = options[key];
|
|
566
|
-
if (typeof value === 'string' && value.trim()) {
|
|
567
|
-
return value.trim();
|
|
568
|
-
}
|
|
569
|
-
}
|
|
570
|
-
return '';
|
|
571
|
-
}
|
|
572
559
|
function withAgentTypeOverride(project, agentType) {
|
|
573
560
|
const options = project.agent?.options && typeof project.agent.options === 'object'
|
|
574
561
|
? { ...project.agent.options }
|
|
@@ -5,7 +5,7 @@ const node_fs_1 = require("node:fs");
|
|
|
5
5
|
const node_path_1 = require("node:path");
|
|
6
6
|
const node_module_1 = require("node:module");
|
|
7
7
|
const node_child_process_1 = require("node:child_process");
|
|
8
|
-
const
|
|
8
|
+
const superai_contracts_1 = require("../../../../packages/contracts/src/index.js");
|
|
9
9
|
const index_js_1 = require("../agents/index.js");
|
|
10
10
|
const env_utils_js_1 = require("./env-utils.js");
|
|
11
11
|
function detectInstalledAgentRuntimes(options = {}) {
|
|
@@ -14,12 +14,12 @@ function detectInstalledAgentRuntimes(options = {}) {
|
|
|
14
14
|
const detectedAt = (options.now || new Date()).toISOString();
|
|
15
15
|
const versionTimeoutMs = options.versionTimeoutMs ?? 3000;
|
|
16
16
|
const agentTypes = options.runtimeId
|
|
17
|
-
?
|
|
18
|
-
:
|
|
17
|
+
? superai_contracts_1.DESKTOP_AGENT_TYPE_OPTIONS.filter((agentType) => agentType === options.runtimeId)
|
|
18
|
+
: superai_contracts_1.DESKTOP_AGENT_TYPE_OPTIONS;
|
|
19
19
|
return agentTypes.map((agentType) => {
|
|
20
20
|
const definition = (0, index_js_1.resolveAgentRuntimeDefinition)(agentType);
|
|
21
21
|
const detection = definition?.detection;
|
|
22
|
-
if (detection?.builtin || agentType ===
|
|
22
|
+
if (detection?.builtin || agentType === superai_contracts_1.LOCALCORE_ACP_AGENT_TYPE) {
|
|
23
23
|
return {
|
|
24
24
|
agentType,
|
|
25
25
|
runtimeId: agentType,
|
|
@@ -163,7 +163,7 @@ function isExecutableFile(path) {
|
|
|
163
163
|
}
|
|
164
164
|
function detectRuntimeVersion(agentType, command, env, timeoutMs) {
|
|
165
165
|
const args = (0, index_js_1.resolveAgentRuntimeDefinition)(agentType)?.detection?.versionArgs;
|
|
166
|
-
if (!args || agentType ===
|
|
166
|
+
if (!args || agentType === superai_contracts_1.LOCALCORE_ACP_AGENT_TYPE) {
|
|
167
167
|
return {};
|
|
168
168
|
}
|
|
169
169
|
try {
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.CURRENT_DESKTOP_CONFIG_VERSION = void 0;
|
|
4
4
|
exports.migrateDesktopConnectConfig = migrateDesktopConnectConfig;
|
|
5
5
|
exports.normalizeDesktopProviderForStorage = normalizeDesktopProviderForStorage;
|
|
6
|
-
const
|
|
6
|
+
const superai_contracts_1 = require("../../../../packages/contracts/src/index.js");
|
|
7
7
|
exports.CURRENT_DESKTOP_CONFIG_VERSION = 2;
|
|
8
8
|
function migrateDesktopConnectConfig(input) {
|
|
9
9
|
const config = cloneConfig(input);
|
|
@@ -75,7 +75,7 @@ function normalizeSandboxOptions(input) {
|
|
|
75
75
|
let changed = false;
|
|
76
76
|
if (sandbox.enabled) {
|
|
77
77
|
if (!sandbox.provider_id) {
|
|
78
|
-
sandbox.provider_id =
|
|
78
|
+
sandbox.provider_id = superai_contracts_1.DEFAULT_SANDBOX_PROVIDER_ID;
|
|
79
79
|
changed = true;
|
|
80
80
|
}
|
|
81
81
|
if (!sandbox.state_scope) {
|
|
@@ -94,13 +94,13 @@ function normalizeSandboxOptions(input) {
|
|
|
94
94
|
return { value: sandbox, changed };
|
|
95
95
|
}
|
|
96
96
|
function migrateProjectSandboxProvider(config, sandbox, deploymentProfile) {
|
|
97
|
-
const providerId = String(sandbox.provider_id ||
|
|
97
|
+
const providerId = String(sandbox.provider_id || superai_contracts_1.DEFAULT_SANDBOX_PROVIDER_ID).trim() || superai_contracts_1.DEFAULT_SANDBOX_PROVIDER_ID;
|
|
98
98
|
config.sandbox_providers = Array.isArray(config.sandbox_providers) ? config.sandbox_providers : [];
|
|
99
99
|
const existing = config.sandbox_providers.find((provider) => provider.id === providerId);
|
|
100
100
|
if (existing) {
|
|
101
101
|
return { changed: false };
|
|
102
102
|
}
|
|
103
|
-
const defaultProvider = (0,
|
|
103
|
+
const defaultProvider = (0, superai_contracts_1.defaultSandboxProviderForProfile)(deploymentProfile);
|
|
104
104
|
config.sandbox_providers.push({
|
|
105
105
|
...defaultProvider,
|
|
106
106
|
id: providerId,
|
|
@@ -112,7 +112,7 @@ function migrateProjectSandboxProvider(config, sandbox, deploymentProfile) {
|
|
|
112
112
|
}
|
|
113
113
|
function migrateProjectSandboxRuntimeImage(config, project, sandbox) {
|
|
114
114
|
const agentType = String(project.agent?.type || 'pi').trim().toLowerCase() || 'pi';
|
|
115
|
-
const fallback = (0,
|
|
115
|
+
const fallback = (0, superai_contracts_1.defaultSandboxRuntimeImage)(agentType);
|
|
116
116
|
const imageId = String(sandbox.runtime_image_id || fallback.id).trim() || fallback.id;
|
|
117
117
|
const assignedRuntimeImage = sandbox.runtime_image_id === imageId;
|
|
118
118
|
sandbox.runtime_image_id = imageId;
|
|
@@ -145,7 +145,7 @@ function migrateProjectSandboxRuntimeImage(config, project, sandbox) {
|
|
|
145
145
|
return { changed: true };
|
|
146
146
|
}
|
|
147
147
|
function isBuiltInHttpSandboxRuntimeImage(id, image, fallbackImage) {
|
|
148
|
-
return id ===
|
|
148
|
+
return id === superai_contracts_1.DEFAULT_SANDBOX_RUNTIME_IMAGE_ID && String(image || fallbackImage).trim() === fallbackImage;
|
|
149
149
|
}
|
|
150
150
|
function cloneConfig(input) {
|
|
151
151
|
return JSON.parse(JSON.stringify(input || {}));
|
|
@@ -2,17 +2,17 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.runDeploymentDiagnostics = runDeploymentDiagnostics;
|
|
4
4
|
const node_fs_1 = require("node:fs");
|
|
5
|
-
const
|
|
5
|
+
const superai_contracts_1 = require("../../../../packages/contracts/src/index.js");
|
|
6
6
|
const sandbox_config_js_1 = require("../sandbox/sandbox-config.js");
|
|
7
7
|
async function runDeploymentDiagnostics(input) {
|
|
8
8
|
const env = input.env || process.env;
|
|
9
9
|
const checkedAt = new Date().toISOString();
|
|
10
10
|
const config = input.config || {};
|
|
11
|
-
const profile = (0,
|
|
11
|
+
const profile = (0, superai_contracts_1.getDesktopDeploymentProfile)(String(config.deployment_profile || env.AGENTDOCK_DEPLOYMENT_PROFILE || '').trim());
|
|
12
12
|
const provider = Array.isArray(config.sandbox_providers)
|
|
13
13
|
? config.sandbox_providers.find((item) => item.id === profile.defaultSandboxProviderId) || config.sandbox_providers[0]
|
|
14
14
|
: undefined;
|
|
15
|
-
const sandboxProvider = provider || (0,
|
|
15
|
+
const sandboxProvider = provider || (0, superai_contracts_1.defaultSandboxProviderForProfile)(profile.id);
|
|
16
16
|
const opensandboxUrl = normalizeUrl(sandboxProvider.server_url || env.AGENTDOCK_OPENSANDBOX_SERVER_URL || (0, sandbox_config_js_1.defaultOpenSandboxServerUrl)(env));
|
|
17
17
|
const checks = [
|
|
18
18
|
{
|
|
@@ -48,6 +48,7 @@ class ExternalService {
|
|
|
48
48
|
defaultRuntimeId: project.agentType,
|
|
49
49
|
health: { status: 'healthy', summary: 'External workspace is available.', issues: [], checkedAt: now },
|
|
50
50
|
metadata: {
|
|
51
|
+
...(this.store.getWorkspaceRegistryEntry(project.workspaceId)?.metadata || {}),
|
|
51
52
|
external: true,
|
|
52
53
|
userId: project.userId,
|
|
53
54
|
externalProjectId: project.externalProjectId,
|
|
@@ -110,7 +111,7 @@ class ExternalService {
|
|
|
110
111
|
...(current.config || {}),
|
|
111
112
|
projects: Array.isArray(current.config?.projects) ? [...current.config.projects] : [],
|
|
112
113
|
};
|
|
113
|
-
const existingIndex = config.projects.findIndex((item) => item?.name === project.workspaceId);
|
|
114
|
+
const existingIndex = config.projects.findIndex((item) => item?.workspace_id === project.workspaceId || item?.name === project.workspaceId);
|
|
114
115
|
const existing = existingIndex >= 0 ? config.projects[existingIndex] : undefined;
|
|
115
116
|
const defaultRuntimeImageId = Array.isArray(config.sandbox_runtime_images)
|
|
116
117
|
? config.sandbox_runtime_images.find((image) => image?.agent_type === project.agentType)?.id
|
|
@@ -130,6 +131,7 @@ class ExternalService {
|
|
|
130
131
|
},
|
|
131
132
|
};
|
|
132
133
|
const nextProject = {
|
|
134
|
+
workspace_id: project.workspaceId,
|
|
133
135
|
name: project.workspaceId,
|
|
134
136
|
agent: {
|
|
135
137
|
...(existing?.agent || {}),
|
|
@@ -2,13 +2,19 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.registerAutomationHandlers = registerAutomationHandlers;
|
|
4
4
|
const server_helpers_js_1 = require("../server-helpers.js");
|
|
5
|
+
const request_validation_js_1 = require("../request-validation.js");
|
|
5
6
|
function registerAutomationHandlers(map, automationMonitors) {
|
|
6
7
|
map.set('automation.monitors.list', async (_route, _req, res, url) => {
|
|
7
8
|
const workspaceId = String(url.searchParams.get('workspace_id') || '');
|
|
8
9
|
(0, server_helpers_js_1.json)(res, 200, { monitors: await automationMonitors.listMonitors(workspaceId || undefined) });
|
|
9
10
|
});
|
|
10
11
|
map.set('automation.monitors.create', async (_route, req, res) => {
|
|
11
|
-
const body = await (0, server_helpers_js_1.readJsonBody)(req)
|
|
12
|
+
const body = (0, request_validation_js_1.validateBody)(await (0, server_helpers_js_1.readJsonBody)(req), {
|
|
13
|
+
workspaceId: { kind: 'string', required: true }, title: { kind: 'string', required: true },
|
|
14
|
+
sourceType: { kind: 'string', required: true }, sourceConfig: 'object', condition: { kind: 'object', required: true },
|
|
15
|
+
promptTemplate: { kind: 'string', required: true }, platform: 'string', route: 'object', threadId: 'string',
|
|
16
|
+
executionMode: 'string', enabled: 'boolean', cooldownMs: 'number',
|
|
17
|
+
});
|
|
12
18
|
(0, server_helpers_js_1.json)(res, 200, await automationMonitors.createMonitor(body));
|
|
13
19
|
});
|
|
14
20
|
map.set('automation.monitor.get', async (route, _req, res) => {
|
|
@@ -25,7 +31,10 @@ function registerAutomationHandlers(map, automationMonitors) {
|
|
|
25
31
|
(0, server_helpers_js_1.json)(res, 200, await automationMonitors.runMonitorNow(route.monitorId));
|
|
26
32
|
});
|
|
27
33
|
map.set('automation.monitor.update', async (route, req, res) => {
|
|
28
|
-
const body = await (0, server_helpers_js_1.readJsonBody)(req)
|
|
34
|
+
const body = (0, request_validation_js_1.validateBody)(await (0, server_helpers_js_1.readJsonBody)(req), {
|
|
35
|
+
title: 'string', sourceConfig: 'object', condition: 'object', promptTemplate: 'string', route: 'object',
|
|
36
|
+
executionMode: 'string', enabled: 'boolean', cooldownMs: 'number',
|
|
37
|
+
});
|
|
29
38
|
(0, server_helpers_js_1.json)(res, 200, await automationMonitors.updateMonitor(route.monitorId, body));
|
|
30
39
|
});
|
|
31
40
|
map.set('automation.monitor.delete', async (route, _req, res) => {
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.registerChannelHandlers = registerChannelHandlers;
|
|
4
4
|
const server_helpers_js_1 = require("../server-helpers.js");
|
|
5
|
+
const request_validation_js_1 = require("../request-validation.js");
|
|
5
6
|
function registerChannelHandlers(map, channelService) {
|
|
6
7
|
const cid = (url) => String(url.searchParams.get('instance_id') || url.searchParams.get('instanceId') || '').trim() || undefined;
|
|
7
8
|
map.set('platform.gateways.list', async (route, _req, res) => {
|
|
@@ -29,12 +30,12 @@ function registerChannelHandlers(map, channelService) {
|
|
|
29
30
|
(0, server_helpers_js_1.json)(res, 200, await channelService.checkQrCodeStatus(p, route.workspaceId, ticket, cid(url)));
|
|
30
31
|
});
|
|
31
32
|
map.set('platform.pairing.approve', async (route, req, res) => {
|
|
32
|
-
const body = await (0, server_helpers_js_1.readJsonBody)(req);
|
|
33
|
-
(0, server_helpers_js_1.json)(res, 200, await channelService.approvePairing(route.platform,
|
|
33
|
+
const body = (0, request_validation_js_1.validateBody)(await (0, server_helpers_js_1.readJsonBody)(req), { code: { kind: 'string', required: true } });
|
|
34
|
+
(0, server_helpers_js_1.json)(res, 200, await channelService.approvePairing(route.platform, body.code));
|
|
34
35
|
});
|
|
35
36
|
map.set('platform.pairing.reject', async (route, req, res) => {
|
|
36
|
-
const body = await (0, server_helpers_js_1.readJsonBody)(req);
|
|
37
|
-
(0, server_helpers_js_1.json)(res, 200, await channelService.rejectPairing(route.platform,
|
|
37
|
+
const body = (0, request_validation_js_1.validateBody)(await (0, server_helpers_js_1.readJsonBody)(req), { code: { kind: 'string', required: true } });
|
|
38
|
+
(0, server_helpers_js_1.json)(res, 200, await channelService.rejectPairing(route.platform, body.code));
|
|
38
39
|
});
|
|
39
40
|
map.set('platform.gateway.test', async (route, _req, res, url) => {
|
|
40
41
|
const p = route.platform;
|
|
@@ -49,12 +50,17 @@ function registerChannelHandlers(map, channelService) {
|
|
|
49
50
|
(0, server_helpers_js_1.json)(res, 200, await channelService.disable(p, route.workspaceId, cid(url)));
|
|
50
51
|
});
|
|
51
52
|
map.set('platform.file.send', async (route, req, res) => {
|
|
52
|
-
const body = await (0, server_helpers_js_1.readJsonBody)(req)
|
|
53
|
+
const body = (0, request_validation_js_1.validateBody)(await (0, server_helpers_js_1.readJsonBody)(req), {
|
|
54
|
+
path: { kind: 'string', required: true }, channelId: { kind: 'string', required: true }, participantId: 'string',
|
|
55
|
+
fileName: 'string', workspacePath: 'string',
|
|
56
|
+
});
|
|
53
57
|
const p = route.platform;
|
|
54
58
|
(0, server_helpers_js_1.json)(res, 200, await channelService.sendFile(p, route.workspaceId, body));
|
|
55
59
|
});
|
|
56
60
|
map.set('platform.message.send', async (route, req, res) => {
|
|
57
|
-
const body = await (0, server_helpers_js_1.readJsonBody)(req)
|
|
61
|
+
const body = (0, request_validation_js_1.validateBody)(await (0, server_helpers_js_1.readJsonBody)(req), {
|
|
62
|
+
route: { kind: 'object', required: true }, parts: { kind: 'array', required: true }, metadata: 'object',
|
|
63
|
+
});
|
|
58
64
|
const p = route.platform;
|
|
59
65
|
(0, server_helpers_js_1.json)(res, 200, await channelService.sendMessage(p, route.workspaceId, body));
|
|
60
66
|
});
|
|
@@ -2,13 +2,21 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.registerExternalHandlers = registerExternalHandlers;
|
|
4
4
|
const server_helpers_js_1 = require("../server-helpers.js");
|
|
5
|
+
const request_validation_js_1 = require("../request-validation.js");
|
|
6
|
+
const externalProjectSchema = {
|
|
7
|
+
user_id: { kind: 'string', required: true }, external_project_id: { kind: 'string', required: true },
|
|
8
|
+
display_name: 'string', agent_type: 'string', provider_id: 'string', model: 'string', metadata: 'object',
|
|
9
|
+
};
|
|
5
10
|
function registerExternalHandlers(map, externalService, attachExternalRunSseClient) {
|
|
6
11
|
map.set('external.project.ensure', async (_route, req, res) => {
|
|
7
|
-
const body = await (0, server_helpers_js_1.readJsonBody)(req);
|
|
12
|
+
const body = (0, request_validation_js_1.validateBody)(await (0, server_helpers_js_1.readJsonBody)(req), externalProjectSchema);
|
|
8
13
|
(0, server_helpers_js_1.json)(res, 200, await externalService.ensureProject(body));
|
|
9
14
|
});
|
|
10
15
|
map.set('external.run.create', async (_route, req, res) => {
|
|
11
|
-
const body = await (0, server_helpers_js_1.readJsonBody)(req)
|
|
16
|
+
const body = (0, request_validation_js_1.validateBody)(await (0, server_helpers_js_1.readJsonBody)(req), {
|
|
17
|
+
...externalProjectSchema, external_thread_id: 'string', title: 'string', prompt: { kind: 'string', required: true },
|
|
18
|
+
permission_mode: 'string', runtime_env: 'object',
|
|
19
|
+
});
|
|
12
20
|
(0, server_helpers_js_1.json)(res, 200, await externalService.createRun(body));
|
|
13
21
|
});
|
|
14
22
|
map.set('external.run.events', async (route, _req, res) => {
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.registerKnowledgeHandlers = registerKnowledgeHandlers;
|
|
4
4
|
const server_helpers_js_1 = require("../server-helpers.js");
|
|
5
|
+
const request_validation_js_1 = require("../request-validation.js");
|
|
5
6
|
function registerKnowledgeHandlers(map, knowledgeProvider) {
|
|
6
7
|
map.set('knowledge.sources.list', async (_route, _req, res) => {
|
|
7
8
|
(0, server_helpers_js_1.json)(res, 200, { sources: await knowledgeProvider.listSources() });
|
|
@@ -10,18 +11,22 @@ function registerKnowledgeHandlers(map, knowledgeProvider) {
|
|
|
10
11
|
(0, server_helpers_js_1.json)(res, 200, await knowledgeProvider.getConfig());
|
|
11
12
|
});
|
|
12
13
|
map.set('knowledge.config.update', async (_route, req, res) => {
|
|
13
|
-
const body = await (0, server_helpers_js_1.readJsonBody)(req)
|
|
14
|
+
const body = (0, request_validation_js_1.validateBody)(await (0, server_helpers_js_1.readJsonBody)(req), {
|
|
15
|
+
baseUrl: 'string', authMode: 'string', token: 'string', headerName: 'string', defaultCollection: 'string',
|
|
16
|
+
});
|
|
14
17
|
(0, server_helpers_js_1.json)(res, 200, await knowledgeProvider.updateConfig(body));
|
|
15
18
|
});
|
|
16
19
|
map.set('knowledge.folders.list', async (_route, _req, res) => {
|
|
17
20
|
(0, server_helpers_js_1.json)(res, 200, { folders: await knowledgeProvider.listFolders() });
|
|
18
21
|
});
|
|
19
22
|
map.set('knowledge.folders.create', async (_route, req, res) => {
|
|
20
|
-
const body = await (0, server_helpers_js_1.readJsonBody)(req)
|
|
23
|
+
const body = (0, request_validation_js_1.validateBody)(await (0, server_helpers_js_1.readJsonBody)(req), {
|
|
24
|
+
name: { kind: 'string', required: true }, parentId: { kind: 'string', nullable: true },
|
|
25
|
+
});
|
|
21
26
|
(0, server_helpers_js_1.json)(res, 200, await knowledgeProvider.createFolder(body));
|
|
22
27
|
});
|
|
23
28
|
map.set('knowledge.folder.update', async (route, req, res) => {
|
|
24
|
-
const body = await (0, server_helpers_js_1.readJsonBody)(req);
|
|
29
|
+
const body = (0, request_validation_js_1.validateBody)(await (0, server_helpers_js_1.readJsonBody)(req), { name: { kind: 'string', required: true } });
|
|
25
30
|
(0, server_helpers_js_1.json)(res, 200, await knowledgeProvider.updateFolder(route.folderId, body));
|
|
26
31
|
});
|
|
27
32
|
map.set('knowledge.folder.delete', async (route, _req, res) => {
|
|
@@ -31,14 +36,19 @@ function registerKnowledgeHandlers(map, knowledgeProvider) {
|
|
|
31
36
|
(0, server_helpers_js_1.json)(res, 200, { bases: await knowledgeProvider.listKnowledgeBases() });
|
|
32
37
|
});
|
|
33
38
|
map.set('knowledge.bases.create', async (_route, req, res) => {
|
|
34
|
-
const body = await (0, server_helpers_js_1.readJsonBody)(req)
|
|
39
|
+
const body = (0, request_validation_js_1.validateBody)(await (0, server_helpers_js_1.readJsonBody)(req), {
|
|
40
|
+
name: { kind: 'string', required: true }, description: 'string', folderId: { kind: 'string', nullable: true },
|
|
41
|
+
creatorName: 'string', icon: 'string',
|
|
42
|
+
});
|
|
35
43
|
(0, server_helpers_js_1.json)(res, 200, await knowledgeProvider.createKnowledgeBase(body));
|
|
36
44
|
});
|
|
37
45
|
map.set('knowledge.base.get', async (route, _req, res) => {
|
|
38
46
|
(0, server_helpers_js_1.json)(res, 200, await knowledgeProvider.getKnowledgeBase(route.knowledgeBaseId));
|
|
39
47
|
});
|
|
40
48
|
map.set('knowledge.base.update', async (route, req, res) => {
|
|
41
|
-
const body = await (0, server_helpers_js_1.readJsonBody)(req)
|
|
49
|
+
const body = (0, request_validation_js_1.validateBody)(await (0, server_helpers_js_1.readJsonBody)(req), {
|
|
50
|
+
name: 'string', description: 'string', folderId: { kind: 'string', nullable: true }, creatorName: 'string', icon: 'string',
|
|
51
|
+
});
|
|
42
52
|
(0, server_helpers_js_1.json)(res, 200, await knowledgeProvider.updateKnowledgeBase(route.knowledgeBaseId, body));
|
|
43
53
|
});
|
|
44
54
|
map.set('knowledge.base.delete', async (route, _req, res) => {
|
|
@@ -59,7 +69,9 @@ function registerKnowledgeHandlers(map, knowledgeProvider) {
|
|
|
59
69
|
(0, server_helpers_js_1.json)(res, 200, await knowledgeProvider.deleteKnowledgeBaseFile(route.knowledgeBaseId, route.fileId));
|
|
60
70
|
});
|
|
61
71
|
map.set('knowledge.base.search', async (route, req, res) => {
|
|
62
|
-
const body = await (0, server_helpers_js_1.readJsonBody)(req)
|
|
72
|
+
const body = (0, request_validation_js_1.validateBody)(await (0, server_helpers_js_1.readJsonBody)(req), {
|
|
73
|
+
query: { kind: 'string', required: true }, limit: 'number',
|
|
74
|
+
});
|
|
63
75
|
(0, server_helpers_js_1.json)(res, 200, { results: await knowledgeProvider.searchKnowledgeBase(route.knowledgeBaseId, body) });
|
|
64
76
|
});
|
|
65
77
|
}
|
|
@@ -2,16 +2,21 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.registerProviderHandlers = registerProviderHandlers;
|
|
4
4
|
const server_helpers_js_1 = require("../server-helpers.js");
|
|
5
|
+
const request_validation_js_1 = require("../request-validation.js");
|
|
6
|
+
const providerSchema = {
|
|
7
|
+
id: 'string', name: { kind: 'string', required: true }, api_key: 'string', base_url: 'string', model: 'string',
|
|
8
|
+
models: 'array', thinking: 'string', env: 'object',
|
|
9
|
+
};
|
|
5
10
|
function registerProviderHandlers(map, store) {
|
|
6
11
|
map.set('providers.list', async (_route, _req, res) => {
|
|
7
12
|
(0, server_helpers_js_1.json)(res, 200, { providers: store.listModelProviders() });
|
|
8
13
|
});
|
|
9
14
|
map.set('providers.create', async (_route, req, res) => {
|
|
10
|
-
const body = await (0, server_helpers_js_1.readJsonBody)(req);
|
|
15
|
+
const body = (0, request_validation_js_1.validateBody)(await (0, server_helpers_js_1.readJsonBody)(req), providerSchema);
|
|
11
16
|
(0, server_helpers_js_1.json)(res, 200, await store.upsertModelProvider(body));
|
|
12
17
|
});
|
|
13
18
|
map.set('provider.update', async (route, req, res) => {
|
|
14
|
-
const body = await (0, server_helpers_js_1.readJsonBody)(req);
|
|
19
|
+
const body = (0, request_validation_js_1.validateBody)(await (0, server_helpers_js_1.readJsonBody)(req), providerSchema);
|
|
15
20
|
const existing = store.getModelProvider(route.providerId);
|
|
16
21
|
if (!existing) {
|
|
17
22
|
throw new Error(`Provider not found: ${route.providerId}`);
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.registerRuntimeHandlers = registerRuntimeHandlers;
|
|
4
4
|
const server_helpers_js_1 = require("../server-helpers.js");
|
|
5
|
+
const request_validation_js_1 = require("../request-validation.js");
|
|
5
6
|
function registerRuntimeHandlers(map, controller, errorReporter, attachSseClient) {
|
|
6
7
|
map.set('health', async (_route, _req, res) => {
|
|
7
8
|
(0, server_helpers_js_1.json)(res, 200, { name: 'local-ai-core', version: '0.1.0' });
|
|
@@ -42,11 +43,35 @@ function registerRuntimeHandlers(map, controller, errorReporter, attachSseClient
|
|
|
42
43
|
(0, server_helpers_js_1.json)(res, 200, await controller.readRuntimeConfig());
|
|
43
44
|
});
|
|
44
45
|
map.set('runtime.runtime-config.save', async (_route, req, res) => {
|
|
45
|
-
const body = await (0, server_helpers_js_1.readJsonBody)(req)
|
|
46
|
-
|
|
46
|
+
const body = (0, request_validation_js_1.validateBody)(await (0, server_helpers_js_1.readJsonBody)(req), {
|
|
47
|
+
config: { kind: 'object', required: true },
|
|
48
|
+
});
|
|
49
|
+
(0, server_helpers_js_1.json)(res, 200, await controller.saveRuntimeConfig(body.config));
|
|
47
50
|
});
|
|
48
51
|
map.set('runtime.settings.save', async (_route, req, res) => {
|
|
49
|
-
const body = await (0, server_helpers_js_1.readJsonBody)(req)
|
|
52
|
+
const body = (0, request_validation_js_1.validateBody)(await (0, server_helpers_js_1.readJsonBody)(req), {
|
|
53
|
+
binaryPath: 'string',
|
|
54
|
+
configPath: 'string',
|
|
55
|
+
autoStartService: 'boolean',
|
|
56
|
+
defaultProject: 'string',
|
|
57
|
+
knowledge: {
|
|
58
|
+
kind: 'object',
|
|
59
|
+
fields: {
|
|
60
|
+
baseUrl: 'string',
|
|
61
|
+
authMode: { kind: 'string', allowedValues: ['none', 'bearer', 'header'] },
|
|
62
|
+
token: 'string',
|
|
63
|
+
headerName: 'string',
|
|
64
|
+
defaultCollection: 'string',
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
plugins: {
|
|
68
|
+
kind: 'object',
|
|
69
|
+
valueSchema: {
|
|
70
|
+
enabled: 'boolean',
|
|
71
|
+
config: 'object',
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
});
|
|
50
75
|
(0, server_helpers_js_1.json)(res, 200, await controller.saveSettings(body));
|
|
51
76
|
});
|
|
52
77
|
map.set('diagnostics.doctor', async (_route, _req, res) => {
|
|
@@ -2,13 +2,18 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.registerSchedulerHandlers = registerSchedulerHandlers;
|
|
4
4
|
const server_helpers_js_1 = require("../server-helpers.js");
|
|
5
|
+
const request_validation_js_1 = require("../request-validation.js");
|
|
5
6
|
function registerSchedulerHandlers(map, scheduledJobs) {
|
|
6
7
|
map.set('scheduler.jobs.list', async (_route, _req, res, url) => {
|
|
7
8
|
const workspaceId = String(url.searchParams.get('workspace_id') || '');
|
|
8
9
|
(0, server_helpers_js_1.json)(res, 200, { jobs: await scheduledJobs.listJobs(workspaceId || undefined) });
|
|
9
10
|
});
|
|
10
11
|
map.set('scheduler.jobs.create', async (_route, req, res) => {
|
|
11
|
-
const body = await (0, server_helpers_js_1.readJsonBody)(req)
|
|
12
|
+
const body = (0, request_validation_js_1.validateBody)(await (0, server_helpers_js_1.readJsonBody)(req), {
|
|
13
|
+
workspaceId: { kind: 'string', required: true }, platform: 'string', route: 'object', threadId: 'string',
|
|
14
|
+
executionMode: 'string', triggerType: { kind: 'string', required: true }, cronExpr: 'string', runAt: 'string',
|
|
15
|
+
promptTemplate: { kind: 'string', required: true }, description: 'string', enabled: 'boolean',
|
|
16
|
+
});
|
|
12
17
|
(0, server_helpers_js_1.json)(res, 200, await scheduledJobs.createJob(body));
|
|
13
18
|
});
|
|
14
19
|
map.set('scheduler.job.get', async (route, _req, res) => {
|
|
@@ -25,7 +30,10 @@ function registerSchedulerHandlers(map, scheduledJobs) {
|
|
|
25
30
|
(0, server_helpers_js_1.json)(res, 200, await scheduledJobs.runJobNow(route.jobId));
|
|
26
31
|
});
|
|
27
32
|
map.set('scheduler.job.update', async (route, req, res) => {
|
|
28
|
-
const body = await (0, server_helpers_js_1.readJsonBody)(req)
|
|
33
|
+
const body = (0, request_validation_js_1.validateBody)(await (0, server_helpers_js_1.readJsonBody)(req), {
|
|
34
|
+
route: 'object', executionMode: 'string', triggerType: 'string', cronExpr: 'string', runAt: 'string',
|
|
35
|
+
promptTemplate: 'string', description: 'string', enabled: 'boolean',
|
|
36
|
+
});
|
|
29
37
|
(0, server_helpers_js_1.json)(res, 200, await scheduledJobs.updateJob(route.jobId, body));
|
|
30
38
|
});
|
|
31
39
|
map.set('scheduler.job.delete', async (route, _req, res) => {
|