@kafca/agentdock 0.1.30 → 0.1.31

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 (92) hide show
  1. package/README.md +4 -0
  2. package/dist/renderer/assets/{Badge-DlVJI1Ys.js → Badge-DaHt-aUT.js} +1 -1
  3. package/dist/renderer/assets/{Chat-oa8OjaHQ.js → Chat-Dzeq3kiD.js} +1 -1
  4. package/dist/renderer/assets/{ChatMarkdown-C-N8KS5C.js → ChatMarkdown-B-L5Roai.js} +1 -1
  5. package/dist/renderer/assets/{Config-D9sL_d4D.js → Config-BI4LJ7Fw.js} +1 -1
  6. package/dist/renderer/assets/{CronList-Z5JU3DHk.js → CronList-Dic7pblj.js} +1 -1
  7. package/dist/renderer/assets/{Dashboard-D3BwbG43.js → Dashboard-C0_ATyGe.js} +2 -2
  8. package/dist/renderer/assets/{EmptyState-QOj765Ul.js → EmptyState-SQsG1DZP.js} +1 -1
  9. package/dist/renderer/assets/{KnowledgeDetail-J7n01mPu.js → KnowledgeDetail-D4yUJzp7.js} +1 -1
  10. package/dist/renderer/assets/{KnowledgeHome-BFnH0NVk.js → KnowledgeHome-L0tsg-oo.js} +1 -1
  11. package/dist/renderer/assets/{Logs-DfSUifXc.js → Logs-C2Jdr3uQ.js} +1 -1
  12. package/dist/renderer/assets/{Modal-QjEGhyru.js → Modal-GUH3iPXo.js} +1 -1
  13. package/dist/renderer/assets/{Page-qdHFSw7x.js → Page-m42FBy97.js} +1 -1
  14. package/dist/renderer/assets/{ProjectDetail-DS_rfvhh.js → ProjectDetail-RF_sagPO.js} +1 -1
  15. package/dist/renderer/assets/{ProjectList-COtyZd7H.js → ProjectList-Cyr8RDK3.js} +1 -1
  16. package/dist/renderer/assets/{Select-BQ8mncVu.js → Select-CRlDgI5s.js} +1 -1
  17. package/dist/renderer/assets/{SessionChat-DjVnjuQy.js → SessionChat-_HhzMwEO.js} +1 -1
  18. package/dist/renderer/assets/{SessionList-88dgGZJ8.js → SessionList-DNwZjGTv.js} +1 -1
  19. package/dist/renderer/assets/ThreadChat-DxBmdsAm.js +23 -0
  20. package/dist/renderer/assets/{Workspace-D_hzSJjX.js → Workspace-DFphG85O.js} +1 -1
  21. package/dist/renderer/assets/{arrow-left-BMpknulW.js → arrow-left-bILMzse7.js} +1 -1
  22. package/dist/renderer/assets/{book-open-CiaOeQbU.js → book-open-BNBWEEve.js} +1 -1
  23. package/dist/renderer/assets/{check-CgwYH4GF.js → check-MGp5kvnb.js} +1 -1
  24. package/dist/renderer/assets/{chevron-down-BzD2S1OO.js → chevron-down-zsfoTlh7.js} +1 -1
  25. package/dist/renderer/assets/{circle-BDHD7g7l.js → circle-BX_xUSg-.js} +1 -1
  26. package/dist/renderer/assets/{desktop-BiR5LPL5.js → desktop-CgrO_cdQ.js} +1 -1
  27. package/dist/renderer/assets/{desktop-BkMW-h5p.js → desktop-O8_6ZCVZ.js} +2 -2
  28. package/dist/renderer/assets/{funnel-Bruf5FYA.js → funnel-7442U1wq.js} +1 -1
  29. package/dist/renderer/assets/{heart-D7Mz04B0.js → heart-B3d8bnSH.js} +1 -1
  30. package/dist/renderer/assets/{index-gZIRr4_o.js → index-5YUqCvBf.js} +1 -1
  31. package/dist/renderer/assets/{index-CL1e8m3U.js → index-BBaYsVjU.js} +2 -2
  32. package/dist/renderer/assets/{pencil-C6gzDMse.js → pencil-QzWgkmoH.js} +1 -1
  33. package/dist/renderer/assets/{play-DqTXX-Pr.js → play-Bsc8hSI7.js} +1 -1
  34. package/dist/renderer/assets/{plug-ykmbeaO3.js → plug-CRY7sjvB.js} +1 -1
  35. package/dist/renderer/assets/{plus-DHE60vMX.js → plus-Dr5Ei8Ud.js} +1 -1
  36. package/dist/renderer/assets/projects-BDYSOFIJ.js +1 -0
  37. package/dist/renderer/assets/{save-CGIvrdQI.js → save-giJnp2Ki.js} +1 -1
  38. package/dist/renderer/assets/{search-D7IFAwyE.js → search-DcvHLmKs.js} +1 -1
  39. package/dist/renderer/assets/{server-aOsirp7I.js → server-D_Qu8If5.js} +1 -1
  40. package/dist/renderer/assets/{session-utils-Dxfp4ohQ.js → session-utils-CsASahfU.js} +1 -1
  41. package/dist/renderer/assets/{sessions-Db1XPbG2.js → sessions-eMpPqp4P.js} +1 -1
  42. package/dist/renderer/assets/{shield-check-ChXeQK-d.js → shield-check-BpF0uIw-.js} +1 -1
  43. package/dist/renderer/assets/{trash-2-CfN-c1zw.js → trash-2-OJFmx3xk.js} +1 -1
  44. package/dist/renderer/assets/{user-C7OHaBp4.js → user-GL_ivaV6.js} +1 -1
  45. package/dist/renderer/assets/{wifi-off-CpaJigye.js → wifi-off-CQT5VNQl.js} +1 -1
  46. package/dist/renderer/index.html +1 -1
  47. package/dist-electron/electron/agent-runtime-detector.test.js +30 -0
  48. package/dist-electron/electron/local-core-refactor.test.js +422 -0
  49. package/dist-electron/electron/plugin-kernel.test.js +81 -1
  50. package/dist-electron/services/local-ai-core/src/acp/local-core-acp-backend.js +28 -3
  51. package/dist-electron/services/local-ai-core/src/acp/local-core-acp-turn-coordinator.js +102 -15
  52. package/dist-electron/services/local-ai-core/src/agents/claudecode/behavior.js +5 -0
  53. package/dist-electron/services/local-ai-core/src/agents/claudecode/definition.js +36 -0
  54. package/dist-electron/services/local-ai-core/src/agents/claudecode/index.js +15 -0
  55. package/dist-electron/services/local-ai-core/src/agents/codex/behavior.js +5 -0
  56. package/dist-electron/services/local-ai-core/src/agents/codex/definition.js +24 -0
  57. package/dist-electron/services/local-ai-core/src/agents/codex/index.js +15 -0
  58. package/dist-electron/services/local-ai-core/src/agents/hermes/behavior.js +29 -0
  59. package/dist-electron/services/local-ai-core/src/agents/hermes/definition.js +22 -0
  60. package/dist-electron/services/local-ai-core/src/agents/hermes/index.js +15 -0
  61. package/dist-electron/services/local-ai-core/src/agents/index.js +98 -0
  62. package/dist-electron/services/local-ai-core/src/agents/localcore-acp/behavior.js +5 -0
  63. package/dist-electron/services/local-ai-core/src/agents/localcore-acp/definition.js +14 -0
  64. package/dist-electron/services/local-ai-core/src/agents/localcore-acp/index.js +27 -0
  65. package/dist-electron/services/local-ai-core/src/agents/opencode/behavior.js +5 -0
  66. package/dist-electron/services/local-ai-core/src/agents/opencode/definition.js +18 -0
  67. package/dist-electron/services/local-ai-core/src/agents/opencode/index.js +15 -0
  68. package/dist-electron/services/local-ai-core/src/agents/opencode/launch.js +119 -0
  69. package/dist-electron/services/local-ai-core/src/agents/pi/behavior.js +5 -0
  70. package/dist-electron/services/local-ai-core/src/agents/pi/definition.js +23 -0
  71. package/dist-electron/services/local-ai-core/src/agents/pi/index.js +15 -0
  72. package/dist-electron/services/local-ai-core/src/agents/pi/launch.js +139 -0
  73. package/dist-electron/services/local-ai-core/src/agents/shared/acp-behavior.js +11 -0
  74. package/dist-electron/services/local-ai-core/src/agents/shared/agent-plugin.js +60 -0
  75. package/dist-electron/services/local-ai-core/src/agents/shared/definition.js +12 -0
  76. package/dist-electron/services/local-ai-core/src/agents/shared/launch-utils.js +122 -0
  77. package/dist-electron/services/local-ai-core/src/agents/shared/progress-replay.js +19 -0
  78. package/dist-electron/services/local-ai-core/src/agents/shared/replay-prefix.js +68 -0
  79. package/dist-electron/services/local-ai-core/src/channel/lark/local-core-lark-gateway.js +0 -2
  80. package/dist-electron/services/local-ai-core/src/channel/weixin/local-core-weixin-gateway.js +0 -1
  81. package/dist-electron/services/local-ai-core/src/kernel/bootstrap.js +8 -7
  82. package/dist-electron/services/local-ai-core/src/plugins/builtin/agent-localcore-acp-plugin.js +9 -130
  83. package/dist-electron/services/local-ai-core/src/router/workspace-route-config.js +22 -397
  84. package/dist-electron/services/local-ai-core/src/runtime/agent-runtime-detector.js +9 -45
  85. package/dist-electron/services/local-ai-core/src/runtime/local-core-runtime-state.js +62 -1
  86. package/dist-electron/services/local-ai-core/src/runtime/runtime-detection-service.js +2 -12
  87. package/dist-electron/shared/desktop.js +3 -1
  88. package/dist-electron/src/pages/Threads/thread-chat-model.js +27 -18
  89. package/dist-electron/src/pages/Threads/thread-chat-permission.test.js +57 -18
  90. package/package.json +1 -1
  91. package/dist/renderer/assets/ThreadChat-BCdbTxBo.js +0 -23
  92. package/dist/renderer/assets/projects-Bx5p10th.js +0 -1
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stripAssistantReplayPrefix = stripAssistantReplayPrefix;
4
+ function stripAssistantReplayPrefix(rawText, priorAssistantMessages) {
5
+ const replayPrefix = priorAssistantMessages.join('');
6
+ if (!replayPrefix || !rawText) {
7
+ return rawText;
8
+ }
9
+ if (replayPrefix.startsWith(rawText)) {
10
+ return '';
11
+ }
12
+ if (priorAssistantMessages.some((message) => message.startsWith(rawText))) {
13
+ return '';
14
+ }
15
+ if (rawText.startsWith(replayPrefix)) {
16
+ return rawText.slice(replayPrefix.length);
17
+ }
18
+ const anchoredText = stripAfterLatestPriorMessageAnchor(rawText, priorAssistantMessages);
19
+ if (anchoredText !== null) {
20
+ return anchoredText;
21
+ }
22
+ const overlap = longestSuffixPrefixOverlap(replayPrefix, rawText);
23
+ if (overlap > 0 && overlap === rawText.length) {
24
+ return '';
25
+ }
26
+ return rawText;
27
+ }
28
+ function stripAfterLatestPriorMessageAnchor(rawText, priorAssistantMessages) {
29
+ let latestMatch = null;
30
+ for (const message of priorAssistantMessages) {
31
+ for (const anchor of createPriorMessageAnchors(message)) {
32
+ const index = rawText.lastIndexOf(anchor);
33
+ if (index < 0) {
34
+ continue;
35
+ }
36
+ const match = { index, length: anchor.length };
37
+ if (!latestMatch || match.index + match.length > latestMatch.index + latestMatch.length) {
38
+ latestMatch = match;
39
+ }
40
+ }
41
+ }
42
+ if (!latestMatch) {
43
+ return null;
44
+ }
45
+ return rawText.slice(latestMatch.index + latestMatch.length);
46
+ }
47
+ function createPriorMessageAnchors(message) {
48
+ const trimmed = message.trim();
49
+ if (trimmed.length < 32) {
50
+ return [];
51
+ }
52
+ const anchors = [];
53
+ for (const length of [240, 160, 96, 48, 32]) {
54
+ if (trimmed.length >= length) {
55
+ anchors.push(trimmed.slice(-length));
56
+ }
57
+ }
58
+ return anchors;
59
+ }
60
+ function longestSuffixPrefixOverlap(prefix, value) {
61
+ const max = Math.min(prefix.length, value.length);
62
+ for (let size = max; size > 0; size -= 1) {
63
+ if (prefix.endsWith(value.slice(0, size))) {
64
+ return size;
65
+ }
66
+ }
67
+ return 0;
68
+ }
@@ -395,7 +395,6 @@ class LocalCoreLarkGateway extends node_events_1.EventEmitter {
395
395
  const sessionKey = event.sessionKey;
396
396
  const route = this.threadRouting.get(sessionKey);
397
397
  if (!route) {
398
- this.options.log?.(`localcore-lark bridge route miss for sessionKey=${sessionKey} type=${event.type}`);
399
398
  return;
400
399
  }
401
400
  const routeInstanceId = route.instanceId || 'default';
@@ -481,7 +480,6 @@ class LocalCoreLarkGateway extends node_events_1.EventEmitter {
481
480
  const shouldThrottle = event.type === 'update_message' &&
482
481
  existingMessageId &&
483
482
  Date.now() - (turn.lastPatchedAtByMessageId[existingMessageId] || 0) < (renderedMessage.isFinal ? LARK_FINAL_PATCH_INTERVAL_MS : LARK_PROGRESS_PATCH_INTERVAL_MS);
484
- this.options.log?.(`localcore-lark bridge event type=${event.type} sessionKey=${sessionKey} hasMessageId=${Boolean(existingMessageId)} throttle=${shouldThrottle}`);
485
483
  if (shouldThrottle) {
486
484
  continue;
487
485
  }
@@ -369,7 +369,6 @@ class LocalCoreWeixinGateway extends node_events_1.EventEmitter {
369
369
  const sessionKey = event.sessionKey;
370
370
  const route = this.threadRouting.get(sessionKey);
371
371
  if (!route) {
372
- this.options.log?.(`localcore-weixin bridge route miss for sessionKey=${sessionKey} type=${event.type}`);
373
372
  return;
374
373
  }
375
374
  const routeInstanceId = route.instanceId || 'default';
@@ -8,7 +8,7 @@ const diagnostics_js_1 = require("./diagnostics.js");
8
8
  const event_bus_js_1 = require("./event-bus.js");
9
9
  const lifecycle_manager_js_1 = require("./lifecycle-manager.js");
10
10
  const plugin_registry_js_1 = require("./plugin-registry.js");
11
- const agent_localcore_acp_plugin_js_1 = require("../plugins/builtin/agent-localcore-acp-plugin.js");
11
+ const index_js_1 = require("../agents/index.js");
12
12
  const channel_lark_plugin_js_1 = require("../plugins/builtin/channel-lark-plugin.js");
13
13
  const channel_weixin_plugin_js_1 = require("../plugins/builtin/channel-weixin-plugin.js");
14
14
  const knowledge_ai_vector_plugin_js_1 = require("../plugins/builtin/knowledge-ai-vector-plugin.js");
@@ -35,8 +35,8 @@ function bootstrapLocalCoreKernel(options) {
35
35
  const lifecycle = new lifecycle_manager_js_1.LocalCoreLifecycleManager(plugins, context);
36
36
  const diagnostics = new diagnostics_js_1.LocalCoreDiagnostics(plugins, lifecycle);
37
37
  const builtIns = [
38
- ...['cursor', 'gemini', 'qoder', 'iflow'].map((agentType) => (0, agent_localcore_acp_plugin_js_1.createBuiltinStaticAgentCapabilityPlugin)(agentType)),
39
- (0, agent_localcore_acp_plugin_js_1.createBuiltinLocalCoreAcpAgentPlugin)(),
38
+ ...(0, index_js_1.getStaticAgentRuntimeDefinitions)().map((definition) => (0, index_js_1.createBuiltinStaticAgentCapabilityPlugin)(definition.agentType, definition.displayName)),
39
+ (0, index_js_1.createBuiltinLocalCoreAcpAgentPlugin)(),
40
40
  (0, scheduler_cron_plugin_js_1.createBuiltinCronSchedulerPlugin)(),
41
41
  ];
42
42
  for (const plugin of builtIns) {
@@ -163,10 +163,11 @@ function bootstrapLocalCoreRuntime(options) {
163
163
  }
164
164
  const agentPlugins = [
165
165
  localCoreAgentPlugin,
166
- (0, agent_localcore_acp_plugin_js_1.createBuiltinPiAgentPlugin)(),
167
- (0, agent_localcore_acp_plugin_js_1.createBuiltinOpencodeAgentPlugin)(),
168
- (0, agent_localcore_acp_plugin_js_1.createBuiltinCodexAgentPlugin)(),
169
- (0, agent_localcore_acp_plugin_js_1.createBuiltinClaudeCodeAgentPlugin)(),
166
+ (0, index_js_1.createBuiltinPiAgentPlugin)(),
167
+ (0, index_js_1.createBuiltinOpencodeAgentPlugin)(),
168
+ (0, index_js_1.createBuiltinCodexAgentPlugin)(),
169
+ (0, index_js_1.createBuiltinClaudeCodeAgentPlugin)(),
170
+ (0, index_js_1.createBuiltinHermesAgentPlugin)(),
170
171
  ];
171
172
  let workspaceRouter;
172
173
  let weixinChannelRuntime;
@@ -1,132 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createBuiltinLocalCoreAcpAgentPlugin = createBuiltinLocalCoreAcpAgentPlugin;
4
- exports.createBuiltinOpencodeAgentPlugin = createBuiltinOpencodeAgentPlugin;
5
- exports.createBuiltinPiAgentPlugin = createBuiltinPiAgentPlugin;
6
- exports.createBuiltinCodexAgentPlugin = createBuiltinCodexAgentPlugin;
7
- exports.createBuiltinClaudeCodeAgentPlugin = createBuiltinClaudeCodeAgentPlugin;
8
- exports.createBuiltinStaticAgentCapabilityPlugin = createBuiltinStaticAgentCapabilityPlugin;
9
- const desktop_js_1 = require("../../../../../shared/desktop.js");
10
- const workspace_route_config_js_1 = require("../../router/workspace-route-config.js");
11
- function createRuntime(agentType, match) {
12
- return {
13
- agentType,
14
- transport: desktop_js_1.LOCALCORE_ACP_AGENT_TYPE,
15
- displayName: agentType,
16
- matchesProject(project) {
17
- const normalizedAgentType = String(project.agent?.type || '').trim().toLowerCase();
18
- return match(normalizedAgentType);
19
- },
20
- createRoute(configState, project) {
21
- if (!this.matchesProject(project)) {
22
- return null;
23
- }
24
- return {
25
- kind: desktop_js_1.LOCALCORE_ACP_AGENT_TYPE,
26
- agentType,
27
- transport: desktop_js_1.LOCALCORE_ACP_AGENT_TYPE,
28
- config: {
29
- ...(0, workspace_route_config_js_1.toLocalCoreProjectConfig)(configState, project),
30
- agentType,
31
- },
32
- supportsStreamingProbe: true,
33
- };
34
- },
35
- };
36
- }
37
- function createBuiltinAgentPlugin(options) {
38
- let runtime = null;
39
- return {
40
- manifest: {
41
- id: options.pluginId,
42
- kind: 'agent',
43
- version: '0.1.0',
44
- provides: [`agent:${options.agentType}`],
45
- },
46
- capabilities: {
47
- agents: [
48
- {
49
- id: `agent.${options.agentType}`,
50
- agentType: options.agentType,
51
- displayName: options.displayName || options.agentType,
52
- },
53
- ],
54
- },
55
- createRuntime(_ctx) {
56
- if (!runtime) {
57
- runtime = createRuntime(options.agentType, options.match);
58
- }
59
- return { runtime };
60
- },
61
- };
62
- }
63
- function createBuiltinLocalCoreAcpAgentPlugin() {
64
- const plugin = createBuiltinAgentPlugin({
65
- pluginId: 'builtin.agent-localcore-acp',
66
- agentType: desktop_js_1.LOCALCORE_ACP_AGENT_TYPE,
67
- match: (normalizedAgentType) => !normalizedAgentType || normalizedAgentType === 'acp' || normalizedAgentType === desktop_js_1.LOCALCORE_ACP_AGENT_TYPE,
68
- displayName: 'LocalCore ACP',
69
- });
70
- plugin.capabilities = {
71
- ...plugin.capabilities,
72
- channels: [
73
- {
74
- id: `channel.${desktop_js_1.LOCALCORE_ACP_AGENT_TYPE}`,
75
- platform: desktop_js_1.LOCALCORE_ACP_AGENT_TYPE,
76
- displayName: 'LocalCore ACP',
77
- },
78
- ],
79
- };
80
- return plugin;
81
- }
82
- function createBuiltinOpencodeAgentPlugin() {
83
- return createBuiltinAgentPlugin({
84
- pluginId: 'builtin.agent-opencode',
85
- agentType: 'opencode',
86
- match: (normalizedAgentType) => normalizedAgentType === 'opencode',
87
- displayName: 'OpenCode',
88
- });
89
- }
90
- function createBuiltinPiAgentPlugin() {
91
- return createBuiltinAgentPlugin({
92
- pluginId: 'builtin.agent-pi',
93
- agentType: 'pi',
94
- match: (normalizedAgentType) => normalizedAgentType === 'pi',
95
- displayName: 'Pi',
96
- });
97
- }
98
- function createBuiltinCodexAgentPlugin() {
99
- return createBuiltinAgentPlugin({
100
- pluginId: 'builtin.agent-codex',
101
- agentType: 'codex',
102
- match: (normalizedAgentType) => normalizedAgentType === 'codex',
103
- displayName: 'Codex',
104
- });
105
- }
106
- function createBuiltinClaudeCodeAgentPlugin() {
107
- return createBuiltinAgentPlugin({
108
- pluginId: 'builtin.agent-claudecode',
109
- agentType: 'claudecode',
110
- match: (normalizedAgentType) => normalizedAgentType === 'claudecode',
111
- displayName: 'Claude Code',
112
- });
113
- }
114
- function createBuiltinStaticAgentCapabilityPlugin(agentType) {
115
- return {
116
- manifest: {
117
- id: `builtin.agent-${agentType}`,
118
- kind: 'agent',
119
- version: '0.1.0',
120
- provides: [`agent:${agentType}`],
121
- },
122
- capabilities: {
123
- agents: [
124
- {
125
- id: `agent.${agentType}`,
126
- agentType,
127
- displayName: agentType,
128
- },
129
- ],
130
- },
131
- };
132
- }
3
+ exports.createBuiltinStaticAgentCapabilityPlugin = exports.createBuiltinPiAgentPlugin = exports.createBuiltinOpencodeAgentPlugin = exports.createBuiltinLocalCoreAcpAgentPlugin = exports.createBuiltinHermesAgentPlugin = exports.createBuiltinClaudeCodeAgentPlugin = exports.createBuiltinCodexAgentPlugin = void 0;
4
+ var index_js_1 = require("../../agents/index.js");
5
+ Object.defineProperty(exports, "createBuiltinCodexAgentPlugin", { enumerable: true, get: function () { return index_js_1.createBuiltinCodexAgentPlugin; } });
6
+ Object.defineProperty(exports, "createBuiltinClaudeCodeAgentPlugin", { enumerable: true, get: function () { return index_js_1.createBuiltinClaudeCodeAgentPlugin; } });
7
+ Object.defineProperty(exports, "createBuiltinHermesAgentPlugin", { enumerable: true, get: function () { return index_js_1.createBuiltinHermesAgentPlugin; } });
8
+ Object.defineProperty(exports, "createBuiltinLocalCoreAcpAgentPlugin", { enumerable: true, get: function () { return index_js_1.createBuiltinLocalCoreAcpAgentPlugin; } });
9
+ Object.defineProperty(exports, "createBuiltinOpencodeAgentPlugin", { enumerable: true, get: function () { return index_js_1.createBuiltinOpencodeAgentPlugin; } });
10
+ Object.defineProperty(exports, "createBuiltinPiAgentPlugin", { enumerable: true, get: function () { return index_js_1.createBuiltinPiAgentPlugin; } });
11
+ Object.defineProperty(exports, "createBuiltinStaticAgentCapabilityPlugin", { enumerable: true, get: function () { return index_js_1.createBuiltinStaticAgentCapabilityPlugin; } });