@kafca/agentdock 0.1.24 → 0.1.25
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 +2 -0
- package/dist/renderer/assets/{Badge-CXcUMqb-.js → Badge-Bn2h-Qkf.js} +1 -1
- package/dist/renderer/assets/{Chat-BRxdPzi-.js → Chat-Cgo9aneg.js} +1 -1
- package/dist/renderer/assets/{ChatMarkdown-sWGBIfIb.js → ChatMarkdown-CYzHfSiR.js} +1 -1
- package/dist/renderer/assets/{Config-DqxuxIGg.js → Config-DljB2-eP.js} +1 -1
- package/dist/renderer/assets/{CronList-OgHxbti5.js → CronList-DeVbiY9a.js} +1 -1
- package/dist/renderer/assets/{Dashboard-DmklXiH1.js → Dashboard-fSqx5sm8.js} +2 -2
- package/dist/renderer/assets/{EmptyState-BvDmi8dq.js → EmptyState-DgqKDwlq.js} +1 -1
- package/dist/renderer/assets/{KnowledgeDetail-Bj59Hdpo.js → KnowledgeDetail-u8s2SmPV.js} +1 -1
- package/dist/renderer/assets/{KnowledgeHome-CigQ-nSo.js → KnowledgeHome-BdQw8nbY.js} +1 -1
- package/dist/renderer/assets/{Logs-Bfc7gBpY.js → Logs-DSbndMpy.js} +1 -1
- package/dist/renderer/assets/{Modal-CfmiFknz.js → Modal-0d0EmAuK.js} +1 -1
- package/dist/renderer/assets/{Page-BxtLEw_b.js → Page-CVbOH_Kh.js} +1 -1
- package/dist/renderer/assets/{ProjectDetail-CcUphxGm.js → ProjectDetail-C91tF7uA.js} +1 -1
- package/dist/renderer/assets/{ProjectList-CVkvDIfy.js → ProjectList-D78Pc-BQ.js} +1 -1
- package/dist/renderer/assets/{Select-DgQMZ0MD.js → Select-BbKzAIuO.js} +1 -1
- package/dist/renderer/assets/{SessionChat-CRmGKfBx.js → SessionChat-BERvL5e4.js} +1 -1
- package/dist/renderer/assets/{SessionList-D0E8XbYw.js → SessionList-Bomz335M.js} +1 -1
- package/dist/renderer/assets/ThreadChat-CLr3amU2.js +23 -0
- package/dist/renderer/assets/{Workspace-Q4g4rlRT.js → Workspace-In91z4W2.js} +1 -1
- package/dist/renderer/assets/{arrow-left-BySN_zhF.js → arrow-left-FBnVKKBl.js} +1 -1
- package/dist/renderer/assets/{book-open-BGlrnrTc.js → book-open-4_CuP6Sa.js} +1 -1
- package/dist/renderer/assets/{check-BiJogEa5.js → check-vsoVjvac.js} +1 -1
- package/dist/renderer/assets/{chevron-down-D2fHRJv6.js → chevron-down-DFpmFTJW.js} +1 -1
- package/dist/renderer/assets/{circle-CIcjixmI.js → circle-vRULegER.js} +1 -1
- package/dist/renderer/assets/{desktop-DAXY9Bxv.js → desktop-BkMW-h5p.js} +2 -2
- package/dist/renderer/assets/{desktop-DyA_NYew.js → desktop-ul0Tpzyc.js} +1 -1
- package/dist/renderer/assets/{funnel-BUzwb-id.js → funnel-Gu0E_hJ_.js} +1 -1
- package/dist/renderer/assets/{heart-DZEQ1z_V.js → heart-DsdofOHf.js} +1 -1
- package/dist/renderer/assets/{index-CB_KyLOr.js → index-BD3aCyBa.js} +3 -3
- package/dist/renderer/assets/{index-DgsIo4vJ.js → index-pJUFobU7.js} +1 -1
- package/dist/renderer/assets/{pencil-DGL4agcl.js → pencil-DbKmV8nD.js} +1 -1
- package/dist/renderer/assets/{play-DzasCLM4.js → play-BDMsRxSm.js} +1 -1
- package/dist/renderer/assets/{plug-dubNMe_m.js → plug-t2dMl78-.js} +1 -1
- package/dist/renderer/assets/{plus-DN4kML4k.js → plus-BUb6zOAe.js} +1 -1
- package/dist/renderer/assets/projects-4F6D_Q8t.js +1 -0
- package/dist/renderer/assets/{save-CNIc9tjl.js → save-C-_5rQdv.js} +1 -1
- package/dist/renderer/assets/{search-C0EGbF3I.js → search-R3ekHFPM.js} +1 -1
- package/dist/renderer/assets/{server-BMxQ4zmc.js → server-BTuvHf5n.js} +1 -1
- package/dist/renderer/assets/{session-utils-Bf5O-iMi.js → session-utils-ClX6VPFG.js} +1 -1
- package/dist/renderer/assets/{sessions-BMSs6rEI.js → sessions-AFKIC-ub.js} +1 -1
- package/dist/renderer/assets/{shield-check-i3Tf1TUz.js → shield-check-CqMW8CHe.js} +1 -1
- package/dist/renderer/assets/{trash-2-SKrcp18f.js → trash-2-BNLcHyUw.js} +1 -1
- package/dist/renderer/assets/{user-cNUZddjZ.js → user-BCCN8FYK.js} +1 -1
- package/dist/renderer/assets/{wifi-off-Dyb84ANR.js → wifi-off-BsNsx3oX.js} +1 -1
- package/dist/renderer/index.html +1 -1
- package/dist-electron/electron/agent-runtime-detector.test.js +64 -0
- package/dist-electron/electron/architecture-docs.test.js +56 -0
- package/dist-electron/electron/channel-content.test.js +8 -0
- package/dist-electron/electron/lac-cli.test.js +248 -0
- package/dist-electron/electron/local-core-refactor.test.js +666 -3
- package/dist-electron/electron/plugin-kernel.test.js +108 -0
- package/dist-electron/electron/renderer-packaging.test.js +77 -0
- package/dist-electron/electron/workspace-task-store.test.js +57 -0
- package/dist-electron/services/local-ai-core/src/acp/local-core-acp-backend.js +67 -6
- package/dist-electron/services/local-ai-core/src/acp/local-core-acp-permission-lifecycle.js +76 -0
- package/dist-electron/services/local-ai-core/src/acp/local-core-acp-progress.js +201 -0
- package/dist-electron/services/local-ai-core/src/acp/local-core-acp-session-coordinator.js +29 -0
- package/dist-electron/services/local-ai-core/src/acp/local-core-acp-store.js +30 -18
- package/dist-electron/services/local-ai-core/src/acp/local-core-acp-turn-coordinator.js +112 -210
- package/dist-electron/services/local-ai-core/src/acp/local-core-slash-commands.js +60 -0
- package/dist-electron/services/local-ai-core/src/channel/lark/local-core-lark-gateway.js +15 -3
- package/dist-electron/services/local-ai-core/src/channel/lark/runtime-state.js +11 -0
- package/dist-electron/services/local-ai-core/src/channel/shared/file-utils.js +13 -1
- package/dist-electron/services/local-ai-core/src/channel/weixin/local-core-weixin-gateway.js +8 -1
- package/dist-electron/services/local-ai-core/src/cli/lac.js +3 -1
- package/dist-electron/services/local-ai-core/src/kernel/bootstrap.js +1 -0
- package/dist-electron/services/local-ai-core/src/plugins/builtin/agent-localcore-acp-plugin.js +9 -0
- package/dist-electron/services/local-ai-core/src/router/workspace-route-config.js +221 -10
- package/dist-electron/services/local-ai-core/src/runtime/agent-runtime-detector.js +39 -9
- package/dist-electron/services/local-ai-core/src/runtime/local-core-controller.js +1 -0
- package/dist-electron/services/local-ai-core/src/runtime/runtime-detection-service.js +1 -0
- package/dist-electron/services/local-ai-core/src/runtime/server-routes.js +439 -0
- package/dist-electron/services/local-ai-core/src/runtime/server.js +208 -303
- package/dist-electron/shared/desktop.js +7 -3
- package/dist-electron/src/pages/Threads/thread-chat-message-blocks.js +187 -0
- package/dist-electron/src/pages/Threads/thread-chat-model.js +1 -0
- package/dist-electron/src/pages/Threads/thread-chat-page-state.js +96 -0
- package/dist-electron/src/pages/Threads/thread-chat-permission.js +18 -0
- package/dist-electron/src/pages/Threads/thread-chat-permission.test.js +277 -0
- package/package.json +4 -2
- package/dist/renderer/assets/ThreadChat-DUgqZSBB.js +0 -23
- package/dist/renderer/assets/projects-migPtfRe.js +0 -1
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseLocalAiCoreRoute = parseLocalAiCoreRoute;
|
|
4
|
+
const API_PREFIX = '/api/local/v1';
|
|
5
|
+
function parseLocalAiCoreRoute(method, path) {
|
|
6
|
+
const normalizedMethod = String(method || '').toUpperCase();
|
|
7
|
+
const relativePath = path.startsWith(API_PREFIX) ? path.slice(API_PREFIX.length) || '/' : path;
|
|
8
|
+
if (normalizedMethod === 'GET' && relativePath === '/health') {
|
|
9
|
+
return { name: 'health' };
|
|
10
|
+
}
|
|
11
|
+
if (normalizedMethod === 'GET' && relativePath === '/runtime') {
|
|
12
|
+
return { name: 'runtime.status' };
|
|
13
|
+
}
|
|
14
|
+
if (normalizedMethod === 'POST' && relativePath === '/runtime/service/start') {
|
|
15
|
+
return { name: 'runtime.service.start' };
|
|
16
|
+
}
|
|
17
|
+
if (normalizedMethod === 'POST' && relativePath === '/runtime/service/stop') {
|
|
18
|
+
return { name: 'runtime.service.stop' };
|
|
19
|
+
}
|
|
20
|
+
if (normalizedMethod === 'POST' && relativePath === '/runtime/service/restart') {
|
|
21
|
+
return { name: 'runtime.service.restart' };
|
|
22
|
+
}
|
|
23
|
+
if (normalizedMethod === 'GET' && relativePath === '/runtime/logs') {
|
|
24
|
+
return { name: 'runtime.logs' };
|
|
25
|
+
}
|
|
26
|
+
if (normalizedMethod === 'GET' && relativePath === '/runtime/agent-runtimes') {
|
|
27
|
+
return { name: 'runtime.agent-runtimes' };
|
|
28
|
+
}
|
|
29
|
+
if (normalizedMethod === 'GET' && relativePath === '/runtime/config') {
|
|
30
|
+
return { name: 'runtime.config.read' };
|
|
31
|
+
}
|
|
32
|
+
if (normalizedMethod === 'POST' && relativePath === '/runtime/config/raw') {
|
|
33
|
+
return { name: 'runtime.config.save-raw' };
|
|
34
|
+
}
|
|
35
|
+
if (normalizedMethod === 'POST' && relativePath === '/runtime/config/structured') {
|
|
36
|
+
return { name: 'runtime.config.save-structured' };
|
|
37
|
+
}
|
|
38
|
+
if (normalizedMethod === 'POST' && relativePath === '/runtime/settings') {
|
|
39
|
+
return { name: 'runtime.settings.save' };
|
|
40
|
+
}
|
|
41
|
+
const segments = splitRouteSegments(relativePath);
|
|
42
|
+
if (segments[0] === 'runtimes') {
|
|
43
|
+
return parseRuntimesRoute(normalizedMethod, segments);
|
|
44
|
+
}
|
|
45
|
+
if (segments[0] === 'scheduler' && segments[1] === 'jobs') {
|
|
46
|
+
return parseSchedulerJobsRoute(normalizedMethod, segments);
|
|
47
|
+
}
|
|
48
|
+
if (segments[0] === 'threads') {
|
|
49
|
+
return parseThreadsRoute(normalizedMethod, segments);
|
|
50
|
+
}
|
|
51
|
+
if (segments[0] === 'runs') {
|
|
52
|
+
return parseRunsRoute(normalizedMethod, segments);
|
|
53
|
+
}
|
|
54
|
+
if (segments[0] === 'workspaces') {
|
|
55
|
+
return parseWorkspacesRoute(normalizedMethod, segments);
|
|
56
|
+
}
|
|
57
|
+
if (segments[0] === 'workspace-registry') {
|
|
58
|
+
return parseWorkspaceRegistryRoute(normalizedMethod, segments);
|
|
59
|
+
}
|
|
60
|
+
if (segments[0] === 'workspace-security') {
|
|
61
|
+
return parseWorkspaceSecurityRoute(normalizedMethod, segments);
|
|
62
|
+
}
|
|
63
|
+
if (segments[0] === 'security') {
|
|
64
|
+
return parseSecurityRoute(normalizedMethod, segments);
|
|
65
|
+
}
|
|
66
|
+
if (segments[0] === 'approvals') {
|
|
67
|
+
return parseApprovalsRoute(normalizedMethod, segments);
|
|
68
|
+
}
|
|
69
|
+
if (segments[0] === 'audit-events') {
|
|
70
|
+
return parseAuditEventsRoute(normalizedMethod, segments);
|
|
71
|
+
}
|
|
72
|
+
if (segments[0] === 'tasks') {
|
|
73
|
+
return parseTasksRoute(normalizedMethod, segments);
|
|
74
|
+
}
|
|
75
|
+
if (segments[0] === 'knowledge') {
|
|
76
|
+
return parseKnowledgeRoute(normalizedMethod, segments);
|
|
77
|
+
}
|
|
78
|
+
if (segments[0] === 'capabilities') {
|
|
79
|
+
return parseCapabilitiesRoute(normalizedMethod, segments);
|
|
80
|
+
}
|
|
81
|
+
if (segments[0] === 'plugins') {
|
|
82
|
+
return parsePluginsRoute(normalizedMethod, segments);
|
|
83
|
+
}
|
|
84
|
+
if (normalizedMethod === 'GET' && segments.length === 1 && segments[0] === 'events') {
|
|
85
|
+
return { name: 'events.stream' };
|
|
86
|
+
}
|
|
87
|
+
if (segments[0] === 'platforms') {
|
|
88
|
+
return parsePlatformsRoute(normalizedMethod, segments);
|
|
89
|
+
}
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
function parseRuntimesRoute(method, segments) {
|
|
93
|
+
if (method === 'GET' && segments.length === 1) {
|
|
94
|
+
return { name: 'runtimes.list' };
|
|
95
|
+
}
|
|
96
|
+
if (method === 'POST' && segments.length === 2 && segments[1] === 'refresh') {
|
|
97
|
+
return { name: 'runtimes.refresh' };
|
|
98
|
+
}
|
|
99
|
+
if (method === 'GET' && segments.length === 2) {
|
|
100
|
+
return { name: 'runtimes.detail', runtimeId: decodeURIComponent(segments[1] || '') };
|
|
101
|
+
}
|
|
102
|
+
if (method === 'POST' && segments.length === 3 && segments[2] === 'refresh') {
|
|
103
|
+
return { name: 'runtimes.refresh-one', runtimeId: decodeURIComponent(segments[1] || '') };
|
|
104
|
+
}
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
function parseSchedulerJobsRoute(method, segments) {
|
|
108
|
+
if (method === 'GET' && segments.length === 2) {
|
|
109
|
+
return { name: 'scheduler.jobs.list' };
|
|
110
|
+
}
|
|
111
|
+
if (method === 'POST' && segments.length === 2) {
|
|
112
|
+
return { name: 'scheduler.jobs.create' };
|
|
113
|
+
}
|
|
114
|
+
const jobId = segments.length >= 3 ? decodeURIComponent(segments[2] || '') : '';
|
|
115
|
+
if (!jobId) {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
if (method === 'GET' && segments.length === 3) {
|
|
119
|
+
return { name: 'scheduler.job.get', jobId };
|
|
120
|
+
}
|
|
121
|
+
if (method === 'GET' && segments.length === 4 && segments[3] === 'runs') {
|
|
122
|
+
return { name: 'scheduler.job.runs', jobId };
|
|
123
|
+
}
|
|
124
|
+
if (method === 'POST' && segments.length === 4 && segments[3] === 'run') {
|
|
125
|
+
return { name: 'scheduler.job.run', jobId };
|
|
126
|
+
}
|
|
127
|
+
if (method === 'PATCH' && segments.length === 3) {
|
|
128
|
+
return { name: 'scheduler.job.update', jobId };
|
|
129
|
+
}
|
|
130
|
+
if (method === 'DELETE' && segments.length === 3) {
|
|
131
|
+
return { name: 'scheduler.job.delete', jobId };
|
|
132
|
+
}
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
function parseThreadsRoute(method, segments) {
|
|
136
|
+
if (method === 'GET' && segments.length === 1) {
|
|
137
|
+
return { name: 'threads.list' };
|
|
138
|
+
}
|
|
139
|
+
if (method === 'POST' && segments.length === 1) {
|
|
140
|
+
return { name: 'threads.create' };
|
|
141
|
+
}
|
|
142
|
+
const threadId = segments.length >= 2 ? decodeURIComponent(segments[1] || '') : '';
|
|
143
|
+
if (!threadId) {
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
if (method === 'GET' && segments.length === 2) {
|
|
147
|
+
return { name: 'thread.get', threadId };
|
|
148
|
+
}
|
|
149
|
+
if (method === 'PATCH' && segments.length === 2) {
|
|
150
|
+
return { name: 'thread.rename', threadId };
|
|
151
|
+
}
|
|
152
|
+
if (method === 'DELETE' && segments.length === 2) {
|
|
153
|
+
return { name: 'thread.delete', threadId };
|
|
154
|
+
}
|
|
155
|
+
if (method === 'PATCH' && segments.length === 3 && segments[2] === 'knowledge-bases') {
|
|
156
|
+
return { name: 'thread.update-knowledge-bases', threadId };
|
|
157
|
+
}
|
|
158
|
+
if (method === 'POST' && segments.length === 3 && segments[2] === 'messages') {
|
|
159
|
+
return { name: 'thread.messages.send', threadId };
|
|
160
|
+
}
|
|
161
|
+
if (method === 'POST' && segments.length === 3 && segments[2] === 'actions') {
|
|
162
|
+
return { name: 'thread.actions.send', threadId };
|
|
163
|
+
}
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
function parseRunsRoute(method, segments) {
|
|
167
|
+
const runId = segments.length >= 2 ? decodeURIComponent(segments[1] || '') : '';
|
|
168
|
+
if (method === 'POST' && runId && segments.length === 3 && segments[2] === 'interrupt') {
|
|
169
|
+
return { name: 'run.interrupt', runId };
|
|
170
|
+
}
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
function parseWorkspacesRoute(method, segments) {
|
|
174
|
+
if (method === 'GET' && segments.length === 1) {
|
|
175
|
+
return { name: 'workspaces.list' };
|
|
176
|
+
}
|
|
177
|
+
const workspaceId = segments.length >= 2 ? decodeURIComponent(segments[1] || '') : '';
|
|
178
|
+
if (method === 'POST' && workspaceId && segments.length === 3 && segments[2] === 'streaming-probe') {
|
|
179
|
+
return { name: 'workspace.streaming-probe', workspaceId };
|
|
180
|
+
}
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
function parseWorkspaceRegistryRoute(method, segments) {
|
|
184
|
+
if (method === 'GET' && segments.length === 1) {
|
|
185
|
+
return { name: 'workspace-registry.list' };
|
|
186
|
+
}
|
|
187
|
+
if (method === 'POST' && segments.length === 1) {
|
|
188
|
+
return { name: 'workspace-registry.create' };
|
|
189
|
+
}
|
|
190
|
+
const workspaceId = segments.length >= 2 ? decodeURIComponent(segments[1] || '') : '';
|
|
191
|
+
if (!workspaceId || segments.length !== 2) {
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
if (method === 'GET') {
|
|
195
|
+
return { name: 'workspace-registry.get', workspaceId };
|
|
196
|
+
}
|
|
197
|
+
if (method === 'PATCH') {
|
|
198
|
+
return { name: 'workspace-registry.update', workspaceId };
|
|
199
|
+
}
|
|
200
|
+
if (method === 'DELETE') {
|
|
201
|
+
return { name: 'workspace-registry.delete', workspaceId };
|
|
202
|
+
}
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
205
|
+
function parseWorkspaceSecurityRoute(method, segments) {
|
|
206
|
+
const workspaceId = segments.length >= 2 ? decodeURIComponent(segments[1] || '') : '';
|
|
207
|
+
if (!workspaceId || segments.length !== 2) {
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
if (method === 'GET') {
|
|
211
|
+
return { name: 'workspace-security.get', workspaceId };
|
|
212
|
+
}
|
|
213
|
+
if (method === 'PATCH') {
|
|
214
|
+
return { name: 'workspace-security.update', workspaceId };
|
|
215
|
+
}
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
function parseSecurityRoute(method, segments) {
|
|
219
|
+
if (method === 'POST' && segments.length === 2 && segments[1] === 'command-risk') {
|
|
220
|
+
return { name: 'security.command-risk.classify' };
|
|
221
|
+
}
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
function parseApprovalsRoute(method, segments) {
|
|
225
|
+
if (method === 'GET' && segments.length === 1) {
|
|
226
|
+
return { name: 'approvals.list' };
|
|
227
|
+
}
|
|
228
|
+
if (method === 'POST' && segments.length === 1) {
|
|
229
|
+
return { name: 'approvals.create' };
|
|
230
|
+
}
|
|
231
|
+
const approvalId = segments.length >= 2 ? decodeURIComponent(segments[1] || '') : '';
|
|
232
|
+
if (!approvalId) {
|
|
233
|
+
return null;
|
|
234
|
+
}
|
|
235
|
+
if (method === 'GET' && segments.length === 2) {
|
|
236
|
+
return { name: 'approval.get', approvalId };
|
|
237
|
+
}
|
|
238
|
+
if (method === 'POST' && segments.length === 3 && segments[2] === 'resolve') {
|
|
239
|
+
return { name: 'approval.resolve', approvalId };
|
|
240
|
+
}
|
|
241
|
+
return null;
|
|
242
|
+
}
|
|
243
|
+
function parseAuditEventsRoute(method, segments) {
|
|
244
|
+
if (method === 'GET' && segments.length === 1) {
|
|
245
|
+
return { name: 'audit-events.list' };
|
|
246
|
+
}
|
|
247
|
+
return null;
|
|
248
|
+
}
|
|
249
|
+
function parseTasksRoute(method, segments) {
|
|
250
|
+
if (method === 'GET' && segments.length === 1) {
|
|
251
|
+
return { name: 'tasks.list' };
|
|
252
|
+
}
|
|
253
|
+
if (method === 'POST' && segments.length === 1) {
|
|
254
|
+
return { name: 'tasks.create' };
|
|
255
|
+
}
|
|
256
|
+
const taskId = segments.length >= 2 ? decodeURIComponent(segments[1] || '') : '';
|
|
257
|
+
if (!taskId || segments.length !== 2) {
|
|
258
|
+
return null;
|
|
259
|
+
}
|
|
260
|
+
if (method === 'GET') {
|
|
261
|
+
return { name: 'task.get', taskId };
|
|
262
|
+
}
|
|
263
|
+
if (method === 'PATCH') {
|
|
264
|
+
return { name: 'task.update', taskId };
|
|
265
|
+
}
|
|
266
|
+
return null;
|
|
267
|
+
}
|
|
268
|
+
function parseKnowledgeRoute(method, segments) {
|
|
269
|
+
if (method === 'GET' && segments.length === 2 && segments[1] === 'sources') {
|
|
270
|
+
return { name: 'knowledge.sources.list' };
|
|
271
|
+
}
|
|
272
|
+
if (segments.length === 2 && segments[1] === 'config') {
|
|
273
|
+
if (method === 'GET') {
|
|
274
|
+
return { name: 'knowledge.config.read' };
|
|
275
|
+
}
|
|
276
|
+
if (method === 'POST') {
|
|
277
|
+
return { name: 'knowledge.config.update' };
|
|
278
|
+
}
|
|
279
|
+
return null;
|
|
280
|
+
}
|
|
281
|
+
if (segments[1] === 'folders') {
|
|
282
|
+
return parseKnowledgeFoldersRoute(method, segments);
|
|
283
|
+
}
|
|
284
|
+
if (segments[1] === 'bases') {
|
|
285
|
+
return parseKnowledgeBasesRoute(method, segments);
|
|
286
|
+
}
|
|
287
|
+
return null;
|
|
288
|
+
}
|
|
289
|
+
function parseKnowledgeFoldersRoute(method, segments) {
|
|
290
|
+
if (segments.length === 2) {
|
|
291
|
+
if (method === 'GET') {
|
|
292
|
+
return { name: 'knowledge.folders.list' };
|
|
293
|
+
}
|
|
294
|
+
if (method === 'POST') {
|
|
295
|
+
return { name: 'knowledge.folders.create' };
|
|
296
|
+
}
|
|
297
|
+
return null;
|
|
298
|
+
}
|
|
299
|
+
const folderId = segments.length >= 3 ? decodeURIComponent(segments[2] || '') : '';
|
|
300
|
+
if (!folderId || segments.length !== 3) {
|
|
301
|
+
return null;
|
|
302
|
+
}
|
|
303
|
+
if (method === 'PATCH') {
|
|
304
|
+
return { name: 'knowledge.folder.update', folderId };
|
|
305
|
+
}
|
|
306
|
+
if (method === 'DELETE') {
|
|
307
|
+
return { name: 'knowledge.folder.delete', folderId };
|
|
308
|
+
}
|
|
309
|
+
return null;
|
|
310
|
+
}
|
|
311
|
+
function parseKnowledgeBasesRoute(method, segments) {
|
|
312
|
+
if (segments.length === 2) {
|
|
313
|
+
if (method === 'GET') {
|
|
314
|
+
return { name: 'knowledge.bases.list' };
|
|
315
|
+
}
|
|
316
|
+
if (method === 'POST') {
|
|
317
|
+
return { name: 'knowledge.bases.create' };
|
|
318
|
+
}
|
|
319
|
+
return null;
|
|
320
|
+
}
|
|
321
|
+
const knowledgeBaseId = segments.length >= 3 ? decodeURIComponent(segments[2] || '') : '';
|
|
322
|
+
if (!knowledgeBaseId) {
|
|
323
|
+
return null;
|
|
324
|
+
}
|
|
325
|
+
if (segments.length === 3) {
|
|
326
|
+
if (method === 'GET') {
|
|
327
|
+
return { name: 'knowledge.base.get', knowledgeBaseId };
|
|
328
|
+
}
|
|
329
|
+
if (method === 'PATCH') {
|
|
330
|
+
return { name: 'knowledge.base.update', knowledgeBaseId };
|
|
331
|
+
}
|
|
332
|
+
if (method === 'DELETE') {
|
|
333
|
+
return { name: 'knowledge.base.delete', knowledgeBaseId };
|
|
334
|
+
}
|
|
335
|
+
return null;
|
|
336
|
+
}
|
|
337
|
+
if (segments.length === 4 && segments[3] === 'files') {
|
|
338
|
+
if (method === 'GET') {
|
|
339
|
+
return { name: 'knowledge.base.files.list', knowledgeBaseId };
|
|
340
|
+
}
|
|
341
|
+
if (method === 'POST') {
|
|
342
|
+
return { name: 'knowledge.base.files.upload', knowledgeBaseId };
|
|
343
|
+
}
|
|
344
|
+
return null;
|
|
345
|
+
}
|
|
346
|
+
if (method === 'DELETE' && segments.length === 5 && segments[3] === 'files') {
|
|
347
|
+
const fileId = decodeURIComponent(segments[4] || '');
|
|
348
|
+
return fileId ? { name: 'knowledge.base.file.delete', knowledgeBaseId, fileId } : null;
|
|
349
|
+
}
|
|
350
|
+
if (method === 'POST' && segments.length === 4 && segments[3] === 'search') {
|
|
351
|
+
return { name: 'knowledge.base.search', knowledgeBaseId };
|
|
352
|
+
}
|
|
353
|
+
return null;
|
|
354
|
+
}
|
|
355
|
+
function parseCapabilitiesRoute(method, segments) {
|
|
356
|
+
if (method === 'GET' && segments.length === 1) {
|
|
357
|
+
return { name: 'capabilities.read' };
|
|
358
|
+
}
|
|
359
|
+
if (method === 'GET' && segments.length === 2 && segments[1] === 'snapshot') {
|
|
360
|
+
return { name: 'capabilities.snapshot' };
|
|
361
|
+
}
|
|
362
|
+
return null;
|
|
363
|
+
}
|
|
364
|
+
function parsePluginsRoute(method, segments) {
|
|
365
|
+
if (method === 'GET' && segments.length === 2 && segments[1] === 'diagnostics') {
|
|
366
|
+
return { name: 'plugins.diagnostics' };
|
|
367
|
+
}
|
|
368
|
+
return null;
|
|
369
|
+
}
|
|
370
|
+
function parsePlatformsRoute(method, segments) {
|
|
371
|
+
const platform = segments.length >= 2 ? decodeURIComponent(segments[1] || '') : '';
|
|
372
|
+
if (!platform) {
|
|
373
|
+
return null;
|
|
374
|
+
}
|
|
375
|
+
if (method === 'GET') {
|
|
376
|
+
return parsePlatformReadRoute(platform, segments);
|
|
377
|
+
}
|
|
378
|
+
if (method === 'POST') {
|
|
379
|
+
return parsePlatformWriteRoute(platform, segments);
|
|
380
|
+
}
|
|
381
|
+
return null;
|
|
382
|
+
}
|
|
383
|
+
function parsePlatformReadRoute(platform, segments) {
|
|
384
|
+
if (segments.length === 2) {
|
|
385
|
+
return { name: 'platform.gateways.list', platform };
|
|
386
|
+
}
|
|
387
|
+
if (segments.length === 3 && segments[2] === 'pairings') {
|
|
388
|
+
return { name: 'platform.pairings.list', platform };
|
|
389
|
+
}
|
|
390
|
+
if (segments.length === 3 && segments[2] === 'users') {
|
|
391
|
+
return { name: 'platform.users.list', platform };
|
|
392
|
+
}
|
|
393
|
+
const workspaceId = segments.length >= 3 ? decodeURIComponent(segments[2] || '') : '';
|
|
394
|
+
if (!workspaceId) {
|
|
395
|
+
return null;
|
|
396
|
+
}
|
|
397
|
+
if (segments.length === 3) {
|
|
398
|
+
return { name: 'platform.gateway.get', platform, workspaceId };
|
|
399
|
+
}
|
|
400
|
+
if (segments.length === 5 && segments[3] === 'qrcode' && segments[4] === 'status') {
|
|
401
|
+
return { name: 'platform.qrcode.status', platform, workspaceId };
|
|
402
|
+
}
|
|
403
|
+
return null;
|
|
404
|
+
}
|
|
405
|
+
function parsePlatformWriteRoute(platform, segments) {
|
|
406
|
+
if (segments.length === 4 && segments[2] === 'pairings' && segments[3] === 'approve') {
|
|
407
|
+
return { name: 'platform.pairing.approve', platform };
|
|
408
|
+
}
|
|
409
|
+
if (segments.length === 4 && segments[2] === 'pairings' && segments[3] === 'reject') {
|
|
410
|
+
return { name: 'platform.pairing.reject', platform };
|
|
411
|
+
}
|
|
412
|
+
const workspaceId = segments.length >= 3 ? decodeURIComponent(segments[2] || '') : '';
|
|
413
|
+
const action = segments[3] || '';
|
|
414
|
+
if (!workspaceId || segments.length !== 4 || segments[2] === 'pairings') {
|
|
415
|
+
return null;
|
|
416
|
+
}
|
|
417
|
+
if (action === 'test') {
|
|
418
|
+
return { name: 'platform.gateway.test', platform, workspaceId };
|
|
419
|
+
}
|
|
420
|
+
if (action === 'enable') {
|
|
421
|
+
return { name: 'platform.gateway.enable', platform, workspaceId };
|
|
422
|
+
}
|
|
423
|
+
if (action === 'disable') {
|
|
424
|
+
return { name: 'platform.gateway.disable', platform, workspaceId };
|
|
425
|
+
}
|
|
426
|
+
if (action === 'files') {
|
|
427
|
+
return { name: 'platform.file.send', platform, workspaceId };
|
|
428
|
+
}
|
|
429
|
+
if (action === 'messages') {
|
|
430
|
+
return { name: 'platform.message.send', platform, workspaceId };
|
|
431
|
+
}
|
|
432
|
+
if (action === 'qrcode') {
|
|
433
|
+
return { name: 'platform.qrcode.create', platform, workspaceId };
|
|
434
|
+
}
|
|
435
|
+
return null;
|
|
436
|
+
}
|
|
437
|
+
function splitRouteSegments(path) {
|
|
438
|
+
return path.split('/').filter(Boolean);
|
|
439
|
+
}
|