@kafca/agentdock 0.1.44 → 0.1.46
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 +76 -11
- package/bin/agentdock.mjs +5 -5
- package/dist/renderer/assets/{Badge-Qk9qHovH.js → Badge-BIesaDYG.js} +1 -1
- package/dist/renderer/assets/Chat-CpataoDh.js +2 -0
- package/dist/renderer/assets/{ChatMarkdown-BKdW8OON.js → ChatMarkdown-_Mdmltgv.js} +1 -1
- package/dist/renderer/assets/Config-Pe5-zKZk.js +21 -0
- package/dist/renderer/assets/CronList-BnaOSPT8.js +1 -0
- package/dist/renderer/assets/Dashboard-D05l8GKE.js +26 -0
- package/dist/renderer/assets/{EmptyState-kD9yAwtw.js → EmptyState-BDBavDll.js} +1 -1
- package/dist/renderer/assets/{KnowledgeDetail-BAMCLrjz.js → KnowledgeDetail-DvR798l_.js} +2 -2
- package/dist/renderer/assets/KnowledgeHome-r2ZuvU8-.js +11 -0
- package/dist/renderer/assets/Logs-BaljtmAV.js +1 -0
- package/dist/renderer/assets/{Modal-DwY4lecS.js → Modal-CXhD_OWR.js} +1 -1
- package/dist/renderer/assets/MonitorList-D7tyipbx.js +1 -0
- package/dist/renderer/assets/{Page-CnB9ePsb.js → Page-KUuFYgjg.js} +1 -1
- package/dist/renderer/assets/ProjectDetail-Ddq94-yu.js +11 -0
- package/dist/renderer/assets/ProjectList-CbdHd5Ev.js +1 -0
- package/dist/renderer/assets/{Select-zfoksLGB.js → Select-Djc8BXMC.js} +1 -1
- package/dist/renderer/assets/SessionChat-DOy0iKQR.js +1 -0
- package/dist/renderer/assets/SessionList-DHgl1s1D.js +1 -0
- package/dist/renderer/assets/ThreadChat-I7dYibDc.js +23 -0
- package/dist/renderer/assets/Workspace-DTocqY-F.js +19 -0
- package/dist/renderer/assets/{arrow-left-CNEAuElg.js → arrow-left-CXyya3hP.js} +1 -1
- package/dist/renderer/assets/{book-open-BNJMhNI-.js → book-open-9n4Kxc7E.js} +1 -1
- package/dist/renderer/assets/bot-C9HBk5XH.js +6 -0
- package/dist/renderer/assets/{check-BnclClRU.js → check-CutSg9a5.js} +1 -1
- package/dist/renderer/assets/{chevron-down-Bh53e0O-.js → chevron-down-DrydR4i3.js} +1 -1
- package/dist/renderer/assets/{circle-ClZTWCWO.js → circle-BEjtahw6.js} +1 -1
- package/dist/renderer/assets/desktop-DATgk_ka.js +1 -0
- package/dist/renderer/assets/{desktop-C6q6wBae.js → desktop-JQkhNOF4.js} +5 -5
- package/dist/renderer/assets/en-CmAr_0e6.js +1 -0
- package/dist/renderer/assets/es-Cs9x52ca.js +1 -0
- package/dist/renderer/assets/{funnel-_5hsz0xI.js → funnel-BhqZpS4f.js} +1 -1
- package/dist/renderer/assets/{heart-u4Q1aOqj.js → heart-Dp8Vs-7_.js} +1 -1
- package/dist/renderer/assets/{index-BNFx4uYv.js → index-BKpv0P0s.js} +2 -2
- package/dist/renderer/assets/index-CO4fGqmv.css +11 -0
- package/dist/renderer/assets/{index-B36eowj-.js → index-cI3pWBnN.js} +36 -36
- package/dist/renderer/assets/ja-DtvtBRTW.js +1 -0
- package/dist/renderer/assets/{pencil-DLh9QNmT.js → pencil-ywcJzeOo.js} +1 -1
- package/dist/renderer/assets/{play-BDTk9Scm.js → play-AtN492Cx.js} +1 -1
- package/dist/renderer/assets/{plus-BSc8POsz.js → plus-BEj14BBV.js} +1 -1
- package/dist/renderer/assets/projects-Clar8lgb.js +1 -0
- package/dist/renderer/assets/save-D6ov4CNv.js +11 -0
- package/dist/renderer/assets/{search-CniPk7Ey.js → search-C3bvw7AR.js} +1 -1
- package/dist/renderer/assets/{server-GsXyQAZm.js → server-C1Uyedyx.js} +1 -1
- package/dist/renderer/assets/{session-utils-BDxzgTBC.js → session-utils-DpRwJ6Nh.js} +1 -1
- package/dist/renderer/assets/{sessions-CLcKA1Tt.js → sessions-BWmAppwK.js} +1 -1
- package/dist/renderer/assets/{shield-check-4i0E3hmf.js → shield-check-CVx1mEs2.js} +1 -1
- package/dist/renderer/assets/{trash-2-DhtOCsO5.js → trash-2-o-heXOgs.js} +1 -1
- package/dist/renderer/assets/user-dPOzUqIc.js +6 -0
- package/dist/renderer/assets/{wifi-off-BHPzPY_B.js → wifi-off-Fz5c3_x_.js} +1 -1
- package/dist/renderer/assets/zh-CcJ9vBZj.js +1 -0
- package/dist/renderer/assets/zh-TW-elI72AC1.js +1 -0
- package/dist/renderer/index.html +2 -2
- package/dist-electron/electron/main.js +26 -1
- package/dist-electron/packages/core-sdk/src/index.js +28 -0
- package/dist-electron/services/local-ai-core/src/acp/local-core-acp-backend.js +111 -62
- package/dist-electron/services/local-ai-core/src/acp/local-core-acp-session-coordinator.js +80 -7
- package/dist-electron/services/local-ai-core/src/acp/local-core-acp-transport.js +78 -5
- package/dist-electron/services/local-ai-core/src/acp/store/external-store.js +98 -0
- package/dist-electron/services/local-ai-core/src/acp/store/local-core-acp-store.js +33 -0
- package/dist-electron/services/local-ai-core/src/acp/store/model-provider-store.js +88 -0
- package/dist-electron/services/local-ai-core/src/acp/store/schema.js +43 -0
- package/dist-electron/services/local-ai-core/src/agents/pi/launch.js +2 -119
- package/dist-electron/services/local-ai-core/src/agents/pi/provider-materializer.js +148 -0
- package/dist-electron/services/local-ai-core/src/channel/lark/inbound.js +55 -1
- package/dist-electron/services/local-ai-core/src/channel/lark/local-core-lark-gateway.js +65 -10
- package/dist-electron/services/local-ai-core/src/channel/shared/session-command-runtime.js +4 -2
- package/dist-electron/services/local-ai-core/src/channel/weixin/local-core-weixin-gateway.js +139 -29
- package/dist-electron/services/local-ai-core/src/execution/agent-execution-backend.js +56 -0
- package/dist-electron/services/local-ai-core/src/kernel/bootstrap.js +18 -57
- package/dist-electron/services/local-ai-core/src/kernel/local-core-errors.js +255 -0
- package/dist-electron/services/local-ai-core/src/plugins/builtin/catalog.js +78 -0
- package/dist-electron/services/local-ai-core/src/router/workspace-route-config.js +3 -1
- package/dist-electron/services/local-ai-core/src/router/workspace-router.js +64 -9
- package/dist-electron/services/local-ai-core/src/runtime/agent-runtime-detector.js +5 -2
- package/dist-electron/services/local-ai-core/src/runtime/config-migration.js +152 -0
- package/dist-electron/services/local-ai-core/src/runtime/deployment-diagnostics.js +175 -0
- package/dist-electron/services/local-ai-core/src/runtime/local-core-controller.js +330 -3
- package/dist-electron/services/local-ai-core/src/runtime/local-core-runtime-state.js +11 -2
- package/dist-electron/services/local-ai-core/src/runtime/provider-config-migration.js +32 -0
- package/dist-electron/services/local-ai-core/src/runtime/runtime-detection-service.js +76 -8
- package/dist-electron/services/local-ai-core/src/runtime/server-routes.js +62 -0
- package/dist-electron/services/local-ai-core/src/runtime/server.js +708 -4
- package/dist-electron/services/local-ai-core/src/runtime/standalone.js +13 -3
- package/dist-electron/services/local-ai-core/src/sandbox/opensandbox-client.js +113 -0
- package/dist-electron/services/local-ai-core/src/sandbox/sandbox-config.js +273 -0
- package/dist-electron/services/local-ai-core/src/sandbox/sandbox-manager.js +215 -0
- package/dist-electron/services/local-ai-core/src/sandbox/sandbox-stdio-proxy.js +188 -0
- package/dist-electron/services/local-ai-core/src/thread/slash-command-registry.js +3 -0
- package/dist-electron/services/local-ai-core/src/thread/thread-command-service.js +32 -0
- package/dist-electron/services/local-ai-core/src/thread/thread-slash-command-dispatcher.js +71 -0
- package/dist-electron/shared/desktop.js +85 -1
- package/dist-electron/tests/contracts/architecture-docs.test.js +83 -0
- package/dist-electron/tests/electron/plugin-kernel.test.js +225 -18
- package/dist-electron/tests/electron/runtime-detection-service.test.js +57 -5
- package/dist-electron/tests/electron/sandbox-config.test.js +541 -0
- package/dist-electron/tests/electron/workspace-task-store.test.js +257 -0
- package/dist-electron/tests/integration/lark-gateway.test.js +139 -0
- package/dist-electron/tests/integration/local-core-refactor.test.js +183 -20
- package/dist-electron/tests/integration/local-core-routes.test.js +34 -0
- package/package.json +2 -3
- package/dist/renderer/assets/Chat-BK-fm0Xr.js +0 -2
- package/dist/renderer/assets/Config-B93CQGvY.js +0 -16
- package/dist/renderer/assets/CronList-Z3TvSRKP.js +0 -1
- package/dist/renderer/assets/Dashboard-Ch3QkWwf.js +0 -26
- package/dist/renderer/assets/KnowledgeHome-ChvjOfrc.js +0 -11
- package/dist/renderer/assets/Logs-Cv0nth3j.js +0 -1
- package/dist/renderer/assets/MonitorList-JEvMoWUm.js +0 -1
- package/dist/renderer/assets/ProjectDetail-DJa3sMmU.js +0 -11
- package/dist/renderer/assets/ProjectList-D6CXumR_.js +0 -1
- package/dist/renderer/assets/SessionChat-DUTh4WoM.js +0 -1
- package/dist/renderer/assets/SessionList-D9o-lUst.js +0 -1
- package/dist/renderer/assets/ThreadChat-BYXlT-Kc.js +0 -23
- package/dist/renderer/assets/Workspace-BrhSwRQ-.js +0 -14
- package/dist/renderer/assets/desktop-C5vBT0yM.js +0 -1
- package/dist/renderer/assets/en-D2SkCrhG.js +0 -1
- package/dist/renderer/assets/es-C8UBPhxM.js +0 -1
- package/dist/renderer/assets/index-CaQZSRbg.css +0 -11
- package/dist/renderer/assets/ja-ChF4vbBL.js +0 -1
- package/dist/renderer/assets/plug-BG0JHW6B.js +0 -6
- package/dist/renderer/assets/projects-DwfZwxDW.js +0 -1
- package/dist/renderer/assets/save-D5AO_G6a.js +0 -6
- package/dist/renderer/assets/user-BtC_pVXV.js +0 -11
- package/dist/renderer/assets/zh-DIcdHycM.js +0 -1
- package/dist/renderer/assets/zh-TW-BtRwreY_.js +0 -1
|
@@ -38,15 +38,45 @@ class RuntimeDetectionService {
|
|
|
38
38
|
return this.filter(runtimes, runtimeId);
|
|
39
39
|
}
|
|
40
40
|
async refreshOnStartup() {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
41
|
+
this.options.log?.('Startup runtime detection skipped; using cached runtime versions until manual refresh.');
|
|
42
|
+
}
|
|
43
|
+
recordLaunchError(runtimeId, errorInfo) {
|
|
44
|
+
const current = this.store.read() || this.createUnknownResults();
|
|
45
|
+
const checkedAt = new Date().toISOString();
|
|
46
|
+
const next = current.map((runtime) => {
|
|
47
|
+
if (runtime.runtimeId !== runtimeId && runtime.agentType !== runtimeId) {
|
|
48
|
+
return runtime;
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
...runtime,
|
|
52
|
+
status: 'error',
|
|
53
|
+
readiness: 'failed',
|
|
54
|
+
lastLaunchError: errorInfo,
|
|
55
|
+
lastCheckedAt: checkedAt,
|
|
56
|
+
error: errorInfo.message,
|
|
57
|
+
details: errorInfo.userMessage,
|
|
58
|
+
issues: prependIssue(runtime.issues, {
|
|
59
|
+
code: errorInfo.code,
|
|
60
|
+
severity: errorInfo.severity,
|
|
61
|
+
message: errorInfo.message,
|
|
62
|
+
help: errorInfo.suggestedAction,
|
|
63
|
+
}),
|
|
64
|
+
recommendedActions: errorInfo.suggestedAction
|
|
65
|
+
? prependAction(runtime.recommendedActions, {
|
|
66
|
+
label: 'Fix runtime launch',
|
|
67
|
+
description: errorInfo.suggestedAction,
|
|
68
|
+
})
|
|
69
|
+
: runtime.recommendedActions,
|
|
70
|
+
};
|
|
71
|
+
});
|
|
72
|
+
this.store.write(next);
|
|
73
|
+
const runtime = next.find((entry) => entry.runtimeId === runtimeId || entry.agentType === runtimeId);
|
|
74
|
+
if (runtime) {
|
|
75
|
+
this.emit({ type: 'runtime.status.changed', runtime });
|
|
46
76
|
}
|
|
47
77
|
}
|
|
48
78
|
async runRefresh(runtimeId) {
|
|
49
|
-
const previous = this.store.read() ||
|
|
79
|
+
const previous = this.store.read() || this.createUnknownResults();
|
|
50
80
|
const startedAt = new Date().toISOString();
|
|
51
81
|
this.markChecking(runtimeId);
|
|
52
82
|
this.emit({ type: 'runtime.detect.started', runtimeId, detectedAt: startedAt });
|
|
@@ -55,7 +85,7 @@ class RuntimeDetectionService {
|
|
|
55
85
|
: 'Started runtime detection for all runtimes.');
|
|
56
86
|
try {
|
|
57
87
|
const config = await this.options.readConfig();
|
|
58
|
-
const detected = this.detect({ config });
|
|
88
|
+
const detected = mergeDetectedRuntimes(previous, this.detect({ config, runtimeId }), runtimeId);
|
|
59
89
|
this.store.write(detected);
|
|
60
90
|
const completedAt = new Date().toISOString();
|
|
61
91
|
this.emit({ type: 'runtime.detect.completed', runtimeId, detectedAt: completedAt, runtimes: this.filter(detected, runtimeId) });
|
|
@@ -69,7 +99,20 @@ class RuntimeDetectionService {
|
|
|
69
99
|
}
|
|
70
100
|
catch (err) {
|
|
71
101
|
const message = err?.message || String(err);
|
|
72
|
-
this.emit({
|
|
102
|
+
this.emit({
|
|
103
|
+
type: 'runtime.detect.failed',
|
|
104
|
+
runtimeId,
|
|
105
|
+
detectedAt: new Date().toISOString(),
|
|
106
|
+
error: message,
|
|
107
|
+
errorInfo: {
|
|
108
|
+
code: 'internal_error',
|
|
109
|
+
message,
|
|
110
|
+
userMessage: 'Runtime detection failed.',
|
|
111
|
+
severity: 'error',
|
|
112
|
+
retryable: true,
|
|
113
|
+
suggestedAction: 'Retry runtime detection and inspect the logs if it repeats.',
|
|
114
|
+
},
|
|
115
|
+
});
|
|
73
116
|
this.options.log?.(`Runtime detection failed: ${message}`);
|
|
74
117
|
throw err;
|
|
75
118
|
}
|
|
@@ -85,6 +128,7 @@ class RuntimeDetectionService {
|
|
|
85
128
|
displayName: displayName(agentType),
|
|
86
129
|
status: agentType === desktop_js_1.LOCALCORE_ACP_AGENT_TYPE ? 'installed' : 'unknown',
|
|
87
130
|
installed: agentType === desktop_js_1.LOCALCORE_ACP_AGENT_TYPE,
|
|
131
|
+
readiness: agentType === desktop_js_1.LOCALCORE_ACP_AGENT_TYPE ? 'ready' : 'unknown',
|
|
88
132
|
detectedAt,
|
|
89
133
|
summary: agentType === desktop_js_1.LOCALCORE_ACP_AGENT_TYPE
|
|
90
134
|
? `${displayName(agentType)} is built in.`
|
|
@@ -124,6 +168,30 @@ function changedRuntimes(previous, next) {
|
|
|
124
168
|
|| before.error !== runtime.error;
|
|
125
169
|
});
|
|
126
170
|
}
|
|
171
|
+
function mergeDetectedRuntimes(previous, detected, runtimeId) {
|
|
172
|
+
if (!runtimeId) {
|
|
173
|
+
return detected;
|
|
174
|
+
}
|
|
175
|
+
const detectedRuntime = detected.find((runtime) => runtime.runtimeId === runtimeId || runtime.agentType === runtimeId);
|
|
176
|
+
if (!detectedRuntime) {
|
|
177
|
+
return previous;
|
|
178
|
+
}
|
|
179
|
+
let replaced = false;
|
|
180
|
+
const next = previous.map((runtime) => {
|
|
181
|
+
if (runtime.runtimeId !== runtimeId && runtime.agentType !== runtimeId) {
|
|
182
|
+
return runtime;
|
|
183
|
+
}
|
|
184
|
+
replaced = true;
|
|
185
|
+
return detectedRuntime;
|
|
186
|
+
});
|
|
187
|
+
return replaced ? next : [...next, detectedRuntime];
|
|
188
|
+
}
|
|
127
189
|
function displayName(agentType) {
|
|
128
190
|
return (0, index_js_1.resolveAgentRuntimeDefinition)(agentType)?.displayName || agentType;
|
|
129
191
|
}
|
|
192
|
+
function prependIssue(issues, issue) {
|
|
193
|
+
return [issue, ...issues.filter((entry) => entry.code !== issue.code)];
|
|
194
|
+
}
|
|
195
|
+
function prependAction(actions, action) {
|
|
196
|
+
return [action, ...actions.filter((entry) => entry.label !== action.label || entry.description !== action.description)];
|
|
197
|
+
}
|
|
@@ -63,6 +63,9 @@ function parseLocalAiCoreRoute(method, path) {
|
|
|
63
63
|
if (segments[0] === 'workspace-registry') {
|
|
64
64
|
return parseWorkspaceRegistryRoute(normalizedMethod, segments);
|
|
65
65
|
}
|
|
66
|
+
if (segments[0] === 'providers') {
|
|
67
|
+
return parseProvidersRoute(normalizedMethod, segments);
|
|
68
|
+
}
|
|
66
69
|
if (segments[0] === 'workspace-security') {
|
|
67
70
|
return parseWorkspaceSecurityRoute(normalizedMethod, segments);
|
|
68
71
|
}
|
|
@@ -84,9 +87,18 @@ function parseLocalAiCoreRoute(method, path) {
|
|
|
84
87
|
if (segments[0] === 'capabilities') {
|
|
85
88
|
return parseCapabilitiesRoute(normalizedMethod, segments);
|
|
86
89
|
}
|
|
90
|
+
if (segments[0] === 'diagnostics') {
|
|
91
|
+
return parseDiagnosticsRoute(normalizedMethod, segments);
|
|
92
|
+
}
|
|
87
93
|
if (segments[0] === 'plugins') {
|
|
88
94
|
return parsePluginsRoute(normalizedMethod, segments);
|
|
89
95
|
}
|
|
96
|
+
if (segments[0] === 'external') {
|
|
97
|
+
return parseExternalRoute(normalizedMethod, segments);
|
|
98
|
+
}
|
|
99
|
+
if (segments[0] === 'openai') {
|
|
100
|
+
return parseOpenAiRoute(normalizedMethod, segments);
|
|
101
|
+
}
|
|
90
102
|
if (normalizedMethod === 'GET' && segments.length === 1 && segments[0] === 'events') {
|
|
91
103
|
return { name: 'events.stream' };
|
|
92
104
|
}
|
|
@@ -95,6 +107,44 @@ function parseLocalAiCoreRoute(method, path) {
|
|
|
95
107
|
}
|
|
96
108
|
return null;
|
|
97
109
|
}
|
|
110
|
+
function parseOpenAiRoute(method, segments) {
|
|
111
|
+
if (method === 'POST' && segments.length === 3 && segments[1] === 'chat' && segments[2] === 'completions') {
|
|
112
|
+
return { name: 'openai.chat.completions' };
|
|
113
|
+
}
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
function parseExternalRoute(method, segments) {
|
|
117
|
+
if (method === 'POST' && segments.length === 2 && segments[1] === 'projects') {
|
|
118
|
+
return { name: 'external.project.ensure' };
|
|
119
|
+
}
|
|
120
|
+
if (method === 'POST' && segments.length === 2 && segments[1] === 'runs') {
|
|
121
|
+
return { name: 'external.run.create' };
|
|
122
|
+
}
|
|
123
|
+
if (method === 'GET' && segments.length === 4 && segments[1] === 'runs' && segments[3] === 'events') {
|
|
124
|
+
const runId = decodeURIComponent(segments[2] || '').trim();
|
|
125
|
+
return runId ? { name: 'external.run.events', runId } : null;
|
|
126
|
+
}
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
function parseProvidersRoute(method, segments) {
|
|
130
|
+
if (method === 'GET' && segments.length === 1) {
|
|
131
|
+
return { name: 'providers.list' };
|
|
132
|
+
}
|
|
133
|
+
if (method === 'POST' && segments.length === 1) {
|
|
134
|
+
return { name: 'providers.create' };
|
|
135
|
+
}
|
|
136
|
+
const providerId = segments.length >= 2 ? decodeURIComponent(segments[1] || '') : '';
|
|
137
|
+
if (!providerId || segments.length !== 2) {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
if (method === 'PUT' || method === 'PATCH') {
|
|
141
|
+
return { name: 'provider.update', providerId };
|
|
142
|
+
}
|
|
143
|
+
if (method === 'DELETE') {
|
|
144
|
+
return { name: 'provider.delete', providerId };
|
|
145
|
+
}
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
98
148
|
function parseAutomationMonitorsRoute(method, segments) {
|
|
99
149
|
if (method === 'GET' && segments.length === 2) {
|
|
100
150
|
return { name: 'automation.monitors.list' };
|
|
@@ -401,6 +451,18 @@ function parsePluginsRoute(method, segments) {
|
|
|
401
451
|
}
|
|
402
452
|
return null;
|
|
403
453
|
}
|
|
454
|
+
function parseDiagnosticsRoute(method, segments) {
|
|
455
|
+
if (method === 'POST' && segments.length === 2 && segments[1] === 'deployment') {
|
|
456
|
+
return { name: 'diagnostics.deployment' };
|
|
457
|
+
}
|
|
458
|
+
if (method === 'GET' && segments.length === 2 && segments[1] === 'errors') {
|
|
459
|
+
return { name: 'diagnostics.errors' };
|
|
460
|
+
}
|
|
461
|
+
if (method === 'POST' && segments.length === 2 && segments[1] === 'doctor') {
|
|
462
|
+
return { name: 'diagnostics.doctor' };
|
|
463
|
+
}
|
|
464
|
+
return null;
|
|
465
|
+
}
|
|
404
466
|
function parsePlatformsRoute(method, segments) {
|
|
405
467
|
const platform = segments.length >= 2 ? decodeURIComponent(segments[1] || '') : '';
|
|
406
468
|
if (!platform) {
|