@kafca/agentdock 0.1.44 → 0.1.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/README.md +71 -11
  2. package/bin/agentdock.mjs +5 -5
  3. package/dist/renderer/assets/{Badge-Qk9qHovH.js → Badge-BIojwD6s.js} +1 -1
  4. package/dist/renderer/assets/{Chat-BK-fm0Xr.js → Chat-wjBR3XEX.js} +1 -1
  5. package/dist/renderer/assets/{ChatMarkdown-BKdW8OON.js → ChatMarkdown-DqszsPB_.js} +1 -1
  6. package/dist/renderer/assets/Config-BDCHs5A2.js +21 -0
  7. package/dist/renderer/assets/{CronList-Z3TvSRKP.js → CronList-CEWQYTov.js} +1 -1
  8. package/dist/renderer/assets/Dashboard-DrWftfk3.js +26 -0
  9. package/dist/renderer/assets/{EmptyState-kD9yAwtw.js → EmptyState-BqCx1oWr.js} +1 -1
  10. package/dist/renderer/assets/{KnowledgeDetail-BAMCLrjz.js → KnowledgeDetail-BwK8Gpfa.js} +2 -2
  11. package/dist/renderer/assets/{KnowledgeHome-ChvjOfrc.js → KnowledgeHome-hhDTZMDO.js} +3 -3
  12. package/dist/renderer/assets/{Logs-Cv0nth3j.js → Logs-C9xPEhFT.js} +1 -1
  13. package/dist/renderer/assets/{Modal-DwY4lecS.js → Modal-D2U4r2V0.js} +1 -1
  14. package/dist/renderer/assets/{MonitorList-JEvMoWUm.js → MonitorList-CayKbfwJ.js} +1 -1
  15. package/dist/renderer/assets/{Page-CnB9ePsb.js → Page-urf5GcT_.js} +1 -1
  16. package/dist/renderer/assets/ProjectDetail-B1GyAr7a.js +11 -0
  17. package/dist/renderer/assets/{ProjectList-D6CXumR_.js → ProjectList-BoipQypE.js} +1 -1
  18. package/dist/renderer/assets/{Select-zfoksLGB.js → Select-CAscWpy5.js} +1 -1
  19. package/dist/renderer/assets/{SessionChat-DUTh4WoM.js → SessionChat-BAVy5221.js} +1 -1
  20. package/dist/renderer/assets/{SessionList-D9o-lUst.js → SessionList-BZpuMvh0.js} +1 -1
  21. package/dist/renderer/assets/{ThreadChat-BYXlT-Kc.js → ThreadChat-JX7m9biG.js} +1 -1
  22. package/dist/renderer/assets/Workspace-CFW8otjU.js +14 -0
  23. package/dist/renderer/assets/{arrow-left-CNEAuElg.js → arrow-left-7HrNuS-V.js} +1 -1
  24. package/dist/renderer/assets/{book-open-BNJMhNI-.js → book-open-BDoAu82s.js} +1 -1
  25. package/dist/renderer/assets/{check-BnclClRU.js → check-DGlyq4xX.js} +1 -1
  26. package/dist/renderer/assets/{chevron-down-Bh53e0O-.js → chevron-down-Bb_3EHq9.js} +1 -1
  27. package/dist/renderer/assets/{circle-ClZTWCWO.js → circle-DIpqZnYw.js} +1 -1
  28. package/dist/renderer/assets/desktop-Ci1fnRDR.js +1 -0
  29. package/dist/renderer/assets/{desktop-C6q6wBae.js → desktop-Do_UrC-o.js} +5 -5
  30. package/dist/renderer/assets/en-CmAr_0e6.js +1 -0
  31. package/dist/renderer/assets/es-Cs9x52ca.js +1 -0
  32. package/dist/renderer/assets/{funnel-_5hsz0xI.js → funnel-Bbf0ERLP.js} +1 -1
  33. package/dist/renderer/assets/{heart-u4Q1aOqj.js → heart-CGqU-qfw.js} +1 -1
  34. package/dist/renderer/assets/{index-BNFx4uYv.js → index-Df-Trovt.js} +2 -2
  35. package/dist/renderer/assets/{index-B36eowj-.js → index-DwhTjLA1.js} +36 -36
  36. package/dist/renderer/assets/index-RaTga2BC.css +11 -0
  37. package/dist/renderer/assets/ja-DtvtBRTW.js +1 -0
  38. package/dist/renderer/assets/{pencil-DLh9QNmT.js → pencil-CHiy1MvK.js} +1 -1
  39. package/dist/renderer/assets/{play-BDTk9Scm.js → play-CGYnmC4Q.js} +1 -1
  40. package/dist/renderer/assets/{plug-BG0JHW6B.js → plug-Mexu4gyV.js} +1 -1
  41. package/dist/renderer/assets/{plus-BSc8POsz.js → plus-B_Q5-Oj7.js} +1 -1
  42. package/dist/renderer/assets/projects-C6bbkC-O.js +1 -0
  43. package/dist/renderer/assets/{save-D5AO_G6a.js → save-CJ_QFPw0.js} +1 -1
  44. package/dist/renderer/assets/{search-CniPk7Ey.js → search-D8Dkhsyq.js} +1 -1
  45. package/dist/renderer/assets/{server-GsXyQAZm.js → server-Cd96R7WL.js} +1 -1
  46. package/dist/renderer/assets/{session-utils-BDxzgTBC.js → session-utils-BNUbQBfF.js} +1 -1
  47. package/dist/renderer/assets/{sessions-CLcKA1Tt.js → sessions-BACfV8s1.js} +1 -1
  48. package/dist/renderer/assets/{shield-check-4i0E3hmf.js → shield-check-Cnn-yQUA.js} +1 -1
  49. package/dist/renderer/assets/{trash-2-DhtOCsO5.js → trash-2-oWCxwQ9D.js} +1 -1
  50. package/dist/renderer/assets/{user-BtC_pVXV.js → user-BzE9BwsY.js} +1 -1
  51. package/dist/renderer/assets/{wifi-off-BHPzPY_B.js → wifi-off-DHxnNkdY.js} +1 -1
  52. package/dist/renderer/assets/zh-CcJ9vBZj.js +1 -0
  53. package/dist/renderer/assets/zh-TW-elI72AC1.js +1 -0
  54. package/dist/renderer/index.html +2 -2
  55. package/dist-electron/electron/main.js +26 -1
  56. package/dist-electron/packages/core-sdk/src/index.js +28 -0
  57. package/dist-electron/services/local-ai-core/src/acp/local-core-acp-backend.js +111 -62
  58. package/dist-electron/services/local-ai-core/src/acp/local-core-acp-session-coordinator.js +80 -7
  59. package/dist-electron/services/local-ai-core/src/acp/local-core-acp-transport.js +78 -5
  60. package/dist-electron/services/local-ai-core/src/acp/store/external-store.js +98 -0
  61. package/dist-electron/services/local-ai-core/src/acp/store/local-core-acp-store.js +33 -0
  62. package/dist-electron/services/local-ai-core/src/acp/store/model-provider-store.js +88 -0
  63. package/dist-electron/services/local-ai-core/src/acp/store/schema.js +43 -0
  64. package/dist-electron/services/local-ai-core/src/agents/pi/launch.js +2 -119
  65. package/dist-electron/services/local-ai-core/src/agents/pi/provider-materializer.js +148 -0
  66. package/dist-electron/services/local-ai-core/src/channel/lark/local-core-lark-gateway.js +65 -10
  67. package/dist-electron/services/local-ai-core/src/channel/shared/session-command-runtime.js +4 -2
  68. package/dist-electron/services/local-ai-core/src/channel/weixin/local-core-weixin-gateway.js +139 -29
  69. package/dist-electron/services/local-ai-core/src/execution/agent-execution-backend.js +56 -0
  70. package/dist-electron/services/local-ai-core/src/kernel/bootstrap.js +18 -57
  71. package/dist-electron/services/local-ai-core/src/kernel/local-core-errors.js +255 -0
  72. package/dist-electron/services/local-ai-core/src/plugins/builtin/catalog.js +78 -0
  73. package/dist-electron/services/local-ai-core/src/router/workspace-route-config.js +3 -1
  74. package/dist-electron/services/local-ai-core/src/router/workspace-router.js +64 -9
  75. package/dist-electron/services/local-ai-core/src/runtime/agent-runtime-detector.js +5 -2
  76. package/dist-electron/services/local-ai-core/src/runtime/config-migration.js +152 -0
  77. package/dist-electron/services/local-ai-core/src/runtime/deployment-diagnostics.js +175 -0
  78. package/dist-electron/services/local-ai-core/src/runtime/local-core-controller.js +330 -3
  79. package/dist-electron/services/local-ai-core/src/runtime/local-core-runtime-state.js +11 -2
  80. package/dist-electron/services/local-ai-core/src/runtime/provider-config-migration.js +32 -0
  81. package/dist-electron/services/local-ai-core/src/runtime/runtime-detection-service.js +76 -8
  82. package/dist-electron/services/local-ai-core/src/runtime/server-routes.js +62 -0
  83. package/dist-electron/services/local-ai-core/src/runtime/server.js +708 -4
  84. package/dist-electron/services/local-ai-core/src/runtime/standalone.js +13 -3
  85. package/dist-electron/services/local-ai-core/src/sandbox/opensandbox-client.js +113 -0
  86. package/dist-electron/services/local-ai-core/src/sandbox/sandbox-config.js +273 -0
  87. package/dist-electron/services/local-ai-core/src/sandbox/sandbox-manager.js +215 -0
  88. package/dist-electron/services/local-ai-core/src/sandbox/sandbox-stdio-proxy.js +188 -0
  89. package/dist-electron/services/local-ai-core/src/thread/slash-command-registry.js +3 -0
  90. package/dist-electron/services/local-ai-core/src/thread/thread-command-service.js +32 -0
  91. package/dist-electron/services/local-ai-core/src/thread/thread-slash-command-dispatcher.js +71 -0
  92. package/dist-electron/shared/desktop.js +85 -1
  93. package/dist-electron/tests/contracts/architecture-docs.test.js +83 -0
  94. package/dist-electron/tests/electron/plugin-kernel.test.js +225 -18
  95. package/dist-electron/tests/electron/runtime-detection-service.test.js +57 -5
  96. package/dist-electron/tests/electron/sandbox-config.test.js +541 -0
  97. package/dist-electron/tests/electron/workspace-task-store.test.js +257 -0
  98. package/dist-electron/tests/integration/lark-gateway.test.js +59 -0
  99. package/dist-electron/tests/integration/local-core-refactor.test.js +183 -20
  100. package/dist-electron/tests/integration/local-core-routes.test.js +34 -0
  101. package/package.json +2 -3
  102. package/dist/renderer/assets/Config-B93CQGvY.js +0 -16
  103. package/dist/renderer/assets/Dashboard-Ch3QkWwf.js +0 -26
  104. package/dist/renderer/assets/ProjectDetail-DJa3sMmU.js +0 -11
  105. package/dist/renderer/assets/Workspace-BrhSwRQ-.js +0 -14
  106. package/dist/renderer/assets/desktop-C5vBT0yM.js +0 -1
  107. package/dist/renderer/assets/en-D2SkCrhG.js +0 -1
  108. package/dist/renderer/assets/es-C8UBPhxM.js +0 -1
  109. package/dist/renderer/assets/index-CaQZSRbg.css +0 -11
  110. package/dist/renderer/assets/ja-ChF4vbBL.js +0 -1
  111. package/dist/renderer/assets/projects-DwfZwxDW.js +0 -1
  112. package/dist/renderer/assets/zh-DIcdHycM.js +0 -1
  113. 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
- try {
42
- await this.refresh();
43
- }
44
- catch (err) {
45
- this.options.log?.(`Startup runtime detection failed: ${err?.message || String(err)}`);
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({ type: 'runtime.detect.failed', runtimeId, detectedAt: new Date().toISOString(), error: message });
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) {