@caupulican/pi-adaptative 0.93.18 → 0.94.0

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 (164) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +3 -2
  3. package/dist/core/agent-session.d.ts +1 -0
  4. package/dist/core/agent-session.d.ts.map +1 -1
  5. package/dist/core/agent-session.js +22 -12
  6. package/dist/core/agent-session.js.map +1 -1
  7. package/dist/core/compaction-controller.d.ts +21 -0
  8. package/dist/core/compaction-controller.d.ts.map +1 -1
  9. package/dist/core/compaction-controller.js +149 -26
  10. package/dist/core/compaction-controller.js.map +1 -1
  11. package/dist/core/delegation/worker-agent-control-coordinator.d.ts.map +1 -1
  12. package/dist/core/delegation/worker-agent-control-coordinator.js +1 -0
  13. package/dist/core/delegation/worker-agent-control-coordinator.js.map +1 -1
  14. package/dist/core/delegation/worker-agent-control.d.ts +2 -0
  15. package/dist/core/delegation/worker-agent-control.d.ts.map +1 -1
  16. package/dist/core/delegation/worker-agent-control.js.map +1 -1
  17. package/dist/core/extensions/loader.d.ts +0 -1
  18. package/dist/core/extensions/loader.d.ts.map +1 -1
  19. package/dist/core/extensions/loader.js +0 -1
  20. package/dist/core/extensions/loader.js.map +1 -1
  21. package/dist/core/extensions/types.d.ts +0 -4
  22. package/dist/core/extensions/types.d.ts.map +1 -1
  23. package/dist/core/extensions/types.js.map +1 -1
  24. package/dist/core/foreground-lifecycle-adapter.d.ts +27 -0
  25. package/dist/core/foreground-lifecycle-adapter.d.ts.map +1 -0
  26. package/dist/core/foreground-lifecycle-adapter.js +61 -0
  27. package/dist/core/foreground-lifecycle-adapter.js.map +1 -0
  28. package/dist/core/foreground-lifecycle-controller.d.ts +48 -0
  29. package/dist/core/foreground-lifecycle-controller.d.ts.map +1 -0
  30. package/dist/core/foreground-lifecycle-controller.js +404 -0
  31. package/dist/core/foreground-lifecycle-controller.js.map +1 -0
  32. package/dist/core/foreground-recovery-controller.d.ts +3 -0
  33. package/dist/core/foreground-recovery-controller.d.ts.map +1 -1
  34. package/dist/core/foreground-recovery-controller.js +15 -1
  35. package/dist/core/foreground-recovery-controller.js.map +1 -1
  36. package/dist/core/goals/goal-state.d.ts.map +1 -1
  37. package/dist/core/goals/goal-state.js +9 -2
  38. package/dist/core/goals/goal-state.js.map +1 -1
  39. package/dist/core/keybindings.d.ts +2 -2
  40. package/dist/core/keybindings.d.ts.map +1 -1
  41. package/dist/core/keybindings.js +2 -2
  42. package/dist/core/keybindings.js.map +1 -1
  43. package/dist/core/memory/memory-manager.d.ts +22 -0
  44. package/dist/core/memory/memory-manager.d.ts.map +1 -1
  45. package/dist/core/memory/memory-manager.js +108 -49
  46. package/dist/core/memory/memory-manager.js.map +1 -1
  47. package/dist/core/model-router/session-buffer.d.ts +10 -2
  48. package/dist/core/model-router/session-buffer.d.ts.map +1 -1
  49. package/dist/core/model-router/session-buffer.js +35 -9
  50. package/dist/core/model-router/session-buffer.js.map +1 -1
  51. package/dist/core/model-router-controller.d.ts +20 -2
  52. package/dist/core/model-router-controller.d.ts.map +1 -1
  53. package/dist/core/model-router-controller.js +70 -17
  54. package/dist/core/model-router-controller.js.map +1 -1
  55. package/dist/core/provider-request-runtime-controller.d.ts +12 -1
  56. package/dist/core/provider-request-runtime-controller.d.ts.map +1 -1
  57. package/dist/core/provider-request-runtime-controller.js +45 -2
  58. package/dist/core/provider-request-runtime-controller.js.map +1 -1
  59. package/dist/core/tools/artifact-retrieve.d.ts.map +1 -1
  60. package/dist/core/tools/artifact-retrieve.js +0 -1
  61. package/dist/core/tools/artifact-retrieve.js.map +1 -1
  62. package/dist/core/tools/delegate.d.ts.map +1 -1
  63. package/dist/core/tools/delegate.js +4 -2
  64. package/dist/core/tools/delegate.js.map +1 -1
  65. package/dist/core/tools/edit.d.ts.map +1 -1
  66. package/dist/core/tools/edit.js +0 -7
  67. package/dist/core/tools/edit.js.map +1 -1
  68. package/dist/core/tools/find.d.ts.map +1 -1
  69. package/dist/core/tools/find.js +0 -1
  70. package/dist/core/tools/find.js.map +1 -1
  71. package/dist/core/tools/grep.d.ts.map +1 -1
  72. package/dist/core/tools/grep.js +0 -1
  73. package/dist/core/tools/grep.js.map +1 -1
  74. package/dist/core/tools/ls.d.ts.map +1 -1
  75. package/dist/core/tools/ls.js +0 -1
  76. package/dist/core/tools/ls.js.map +1 -1
  77. package/dist/core/tools/skill-audit.d.ts.map +1 -1
  78. package/dist/core/tools/skill-audit.js +0 -1
  79. package/dist/core/tools/skill-audit.js.map +1 -1
  80. package/dist/core/tools/skill.d.ts.map +1 -1
  81. package/dist/core/tools/skill.js +0 -1
  82. package/dist/core/tools/skill.js.map +1 -1
  83. package/dist/core/tools/skillify.d.ts.map +1 -1
  84. package/dist/core/tools/skillify.js +0 -1
  85. package/dist/core/tools/skillify.js.map +1 -1
  86. package/dist/core/tools/write.d.ts.map +1 -1
  87. package/dist/core/tools/write.js +1 -2
  88. package/dist/core/tools/write.js.map +1 -1
  89. package/dist/modes/interactive/components/action-transcript.d.ts +24 -0
  90. package/dist/modes/interactive/components/action-transcript.d.ts.map +1 -0
  91. package/dist/modes/interactive/components/action-transcript.js +72 -0
  92. package/dist/modes/interactive/components/action-transcript.js.map +1 -0
  93. package/dist/modes/interactive/components/active-tool-call-registry.d.ts +12 -0
  94. package/dist/modes/interactive/components/active-tool-call-registry.d.ts.map +1 -0
  95. package/dist/modes/interactive/components/active-tool-call-registry.js +25 -0
  96. package/dist/modes/interactive/components/active-tool-call-registry.js.map +1 -0
  97. package/dist/modes/interactive/components/activity-lane.d.ts +1 -1
  98. package/dist/modes/interactive/components/activity-lane.d.ts.map +1 -1
  99. package/dist/modes/interactive/components/activity-lane.js.map +1 -1
  100. package/dist/modes/interactive/components/assistant-message.d.ts +3 -3
  101. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  102. package/dist/modes/interactive/components/assistant-message.js +16 -20
  103. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  104. package/dist/modes/interactive/components/index.d.ts +0 -2
  105. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  106. package/dist/modes/interactive/components/index.js +0 -2
  107. package/dist/modes/interactive/components/index.js.map +1 -1
  108. package/dist/modes/interactive/components/tool-execution.d.ts +0 -7
  109. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  110. package/dist/modes/interactive/components/tool-execution.js +2 -76
  111. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  112. package/dist/modes/interactive/components/transcript-overlay.d.ts +15 -0
  113. package/dist/modes/interactive/components/transcript-overlay.d.ts.map +1 -0
  114. package/dist/modes/interactive/components/transcript-overlay.js +38 -0
  115. package/dist/modes/interactive/components/transcript-overlay.js.map +1 -0
  116. package/dist/modes/interactive/components/tree-selector.d.ts +1 -1
  117. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  118. package/dist/modes/interactive/components/tree-selector.js +7 -4
  119. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  120. package/dist/modes/interactive/interactive-event-controller.d.ts +3 -4
  121. package/dist/modes/interactive/interactive-event-controller.d.ts.map +1 -1
  122. package/dist/modes/interactive/interactive-event-controller.js +11 -10
  123. package/dist/modes/interactive/interactive-event-controller.js.map +1 -1
  124. package/dist/modes/interactive/interactive-mode.d.ts +15 -13
  125. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  126. package/dist/modes/interactive/interactive-mode.js +105 -184
  127. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  128. package/dist/modes/interactive/runtime-status-controller.d.ts +40 -0
  129. package/dist/modes/interactive/runtime-status-controller.d.ts.map +1 -0
  130. package/dist/modes/interactive/runtime-status-controller.js +147 -0
  131. package/dist/modes/interactive/runtime-status-controller.js.map +1 -0
  132. package/dist/modes/interactive/runtime-status.d.ts +15 -0
  133. package/dist/modes/interactive/runtime-status.d.ts.map +1 -0
  134. package/dist/modes/interactive/runtime-status.js +18 -0
  135. package/dist/modes/interactive/runtime-status.js.map +1 -0
  136. package/dist/modes/interactive/settings-selector-flow.d.ts.map +1 -1
  137. package/dist/modes/interactive/settings-selector-flow.js +3 -4
  138. package/dist/modes/interactive/settings-selector-flow.js.map +1 -1
  139. package/docs/UI_POLISH_ORCHESTRATION.md +4 -4
  140. package/docs/extensions.md +4 -12
  141. package/docs/json.md +1 -1
  142. package/docs/keybindings.md +3 -2
  143. package/docs/session-format.md +59 -4
  144. package/docs/settings.md +1 -1
  145. package/docs/task-steps.md +3 -3
  146. package/docs/tool-repair.md +1 -1
  147. package/docs/usage.md +1 -1
  148. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  149. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  150. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  151. package/examples/extensions/sandbox/package-lock.json +2 -2
  152. package/examples/extensions/sandbox/package.json +1 -1
  153. package/examples/extensions/with-deps/package-lock.json +2 -2
  154. package/examples/extensions/with-deps/package.json +1 -1
  155. package/npm-shrinkwrap.json +12 -12
  156. package/package.json +4 -4
  157. package/dist/modes/interactive/components/tool-group.d.ts +0 -25
  158. package/dist/modes/interactive/components/tool-group.d.ts.map +0 -1
  159. package/dist/modes/interactive/components/tool-group.js +0 -175
  160. package/dist/modes/interactive/components/tool-group.js.map +0 -1
  161. package/dist/modes/interactive/components/tool-panel-registry.d.ts +0 -30
  162. package/dist/modes/interactive/components/tool-panel-registry.d.ts.map +0 -1
  163. package/dist/modes/interactive/components/tool-panel-registry.js +0 -145
  164. package/dist/modes/interactive/components/tool-panel-registry.js.map +0 -1
@@ -1,145 +0,0 @@
1
- export function createToolPanelTenantKey(scope) {
2
- return [scope.sessionId || "no-session-id", scope.sessionFile || "no-session-file", scope.cwd].join("\0");
3
- }
4
- function backgroundScriptActionKey(tenantKey, selector) {
5
- return `${tenantKey}\0background_script:${selector}`;
6
- }
7
- function backgroundScriptSelector(record) {
8
- const action = String(record.action || "list");
9
- if (action === "start" && typeof record.name === "string" && record.name.trim())
10
- return record.name.trim();
11
- if (["status", "logs", "stop"].includes(action) && typeof record.id === "string" && record.id.trim()) {
12
- return record.id.trim();
13
- }
14
- return undefined;
15
- }
16
- function backgroundScriptResultSelectors(result) {
17
- if (!result || typeof result !== "object")
18
- return [];
19
- const details = result.details;
20
- if (!details || typeof details !== "object")
21
- return [];
22
- const job = details.job;
23
- if (!job || typeof job !== "object")
24
- return [];
25
- const record = job;
26
- const selectors = [record.id, record.name]
27
- .filter((value) => typeof value === "string" && value.trim().length > 0)
28
- .map((value) => value.trim());
29
- return [...new Set(selectors)];
30
- }
31
- export function getToolPanelActionKey(scope, toolName, args) {
32
- const tenantKey = createToolPanelTenantKey(scope);
33
- if (!args || typeof args !== "object")
34
- return toolName.endsWith("_status") ? `${tenantKey}\0${toolName}` : undefined;
35
- const record = args;
36
- const pathValue = record.path ?? record.file_path;
37
- if (["read", "edit", "write"].includes(toolName) && typeof pathValue === "string" && pathValue.trim()) {
38
- return `${tenantKey}\0${toolName}:${pathValue.trim()}`;
39
- }
40
- if (toolName === "background_script") {
41
- const selector = backgroundScriptSelector(record);
42
- return selector ? backgroundScriptActionKey(tenantKey, selector) : undefined;
43
- }
44
- if (toolName.endsWith("_status"))
45
- return `${tenantKey}\0${toolName}`;
46
- if (toolName === "learning_auto_learn_state")
47
- return `${tenantKey}\0${toolName}:${String(record.action || "read")}`;
48
- if (toolName === "task_steps")
49
- return `${tenantKey}\0${toolName}:${String(record.action || "list")}`;
50
- return undefined;
51
- }
52
- export function getToolPanelResultActionKeys(scope, toolName, result) {
53
- if (toolName !== "background_script")
54
- return [];
55
- const tenantKey = createToolPanelTenantKey(scope);
56
- return backgroundScriptResultSelectors(result).map((selector) => backgroundScriptActionKey(tenantKey, selector));
57
- }
58
- export function shouldReuseToolPanelInPlace(toolName, args) {
59
- return (toolName === "background_script" &&
60
- !!args &&
61
- typeof args === "object" &&
62
- !!backgroundScriptSelector(args));
63
- }
64
- // Reusable panels retain rendered arguments/results. Keep this aligned with the bounded live TUI
65
- // scrollback rather than pinning one component for every unique file/status action in a long process.
66
- const MAX_REUSABLE_TOOL_PANEL_ACTIONS = 256;
67
- export class ToolPanelRegistry {
68
- constructor() {
69
- this.panelsByAction = new Map();
70
- this.activeByCallId = new Map();
71
- this.actionKeyByCallId = new Map();
72
- }
73
- getReusable(actionKey, options) {
74
- if (!actionKey)
75
- return undefined;
76
- const panel = this.panelsByAction.get(actionKey);
77
- if (!panel || (!options?.allowActive && this.isActive(panel)))
78
- return undefined;
79
- // Refresh insertion order so eviction follows recent reuse rather than original creation.
80
- this.panelsByAction.delete(actionKey);
81
- this.panelsByAction.set(actionKey, panel);
82
- return panel;
83
- }
84
- rememberAction(actionKey, panel) {
85
- this.panelsByAction.delete(actionKey);
86
- this.panelsByAction.set(actionKey, panel);
87
- while (this.panelsByAction.size > MAX_REUSABLE_TOOL_PANEL_ACTIONS) {
88
- const oldest = this.panelsByAction.keys().next().value;
89
- if (oldest === undefined)
90
- break;
91
- this.panelsByAction.delete(oldest);
92
- }
93
- }
94
- replaceActiveForAction(toolCallId, panel, actionKey) {
95
- for (const [activeCallId, activeActionKey] of this.actionKeyByCallId.entries()) {
96
- if (activeActionKey !== actionKey)
97
- continue;
98
- this.activeByCallId.delete(activeCallId);
99
- this.actionKeyByCallId.delete(activeCallId);
100
- }
101
- this.register(toolCallId, panel, actionKey);
102
- }
103
- register(toolCallId, panel, actionKey) {
104
- this.activeByCallId.set(toolCallId, panel);
105
- if (actionKey) {
106
- this.rememberAction(actionKey, panel);
107
- this.actionKeyByCallId.set(toolCallId, actionKey);
108
- }
109
- }
110
- registerAliases(panel, actionKeys) {
111
- for (const actionKey of actionKeys) {
112
- this.rememberAction(actionKey, panel);
113
- }
114
- }
115
- hasActive(toolCallId) {
116
- return this.activeByCallId.has(toolCallId);
117
- }
118
- getActive(toolCallId) {
119
- return this.activeByCallId.get(toolCallId);
120
- }
121
- activeEntries() {
122
- return this.activeByCallId.entries();
123
- }
124
- isActive(panel) {
125
- for (const active of this.activeByCallId.values()) {
126
- if (active === panel)
127
- return true;
128
- }
129
- return false;
130
- }
131
- finish(toolCallId) {
132
- this.activeByCallId.delete(toolCallId);
133
- this.actionKeyByCallId.delete(toolCallId);
134
- }
135
- clearActive() {
136
- this.activeByCallId.clear();
137
- this.actionKeyByCallId.clear();
138
- }
139
- clearAll() {
140
- this.activeByCallId.clear();
141
- this.panelsByAction.clear();
142
- this.actionKeyByCallId.clear();
143
- }
144
- }
145
- //# sourceMappingURL=tool-panel-registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool-panel-registry.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tool-panel-registry.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ToolExecutionComponent } from \"./tool-execution.ts\";\n\nexport interface ToolPanelTenantScope {\n\tsessionId?: string;\n\tsessionFile?: string;\n\tcwd: string;\n}\n\nexport function createToolPanelTenantKey(scope: ToolPanelTenantScope): string {\n\treturn [scope.sessionId || \"no-session-id\", scope.sessionFile || \"no-session-file\", scope.cwd].join(\"\\0\");\n}\n\nfunction backgroundScriptActionKey(tenantKey: string, selector: string): string {\n\treturn `${tenantKey}\\0background_script:${selector}`;\n}\n\nfunction backgroundScriptSelector(record: Record<string, unknown>): string | undefined {\n\tconst action = String(record.action || \"list\");\n\tif (action === \"start\" && typeof record.name === \"string\" && record.name.trim()) return record.name.trim();\n\tif ([\"status\", \"logs\", \"stop\"].includes(action) && typeof record.id === \"string\" && record.id.trim()) {\n\t\treturn record.id.trim();\n\t}\n\treturn undefined;\n}\n\nfunction backgroundScriptResultSelectors(result: unknown): string[] {\n\tif (!result || typeof result !== \"object\") return [];\n\tconst details = (result as Record<string, unknown>).details;\n\tif (!details || typeof details !== \"object\") return [];\n\tconst job = (details as Record<string, unknown>).job;\n\tif (!job || typeof job !== \"object\") return [];\n\tconst record = job as Record<string, unknown>;\n\tconst selectors = [record.id, record.name]\n\t\t.filter((value): value is string => typeof value === \"string\" && value.trim().length > 0)\n\t\t.map((value) => value.trim());\n\treturn [...new Set(selectors)];\n}\n\nexport function getToolPanelActionKey(\n\tscope: ToolPanelTenantScope,\n\ttoolName: string,\n\targs: unknown,\n): string | undefined {\n\tconst tenantKey = createToolPanelTenantKey(scope);\n\tif (!args || typeof args !== \"object\") return toolName.endsWith(\"_status\") ? `${tenantKey}\\0${toolName}` : undefined;\n\tconst record = args as Record<string, unknown>;\n\tconst pathValue = record.path ?? record.file_path;\n\tif ([\"read\", \"edit\", \"write\"].includes(toolName) && typeof pathValue === \"string\" && pathValue.trim()) {\n\t\treturn `${tenantKey}\\0${toolName}:${pathValue.trim()}`;\n\t}\n\tif (toolName === \"background_script\") {\n\t\tconst selector = backgroundScriptSelector(record);\n\t\treturn selector ? backgroundScriptActionKey(tenantKey, selector) : undefined;\n\t}\n\tif (toolName.endsWith(\"_status\")) return `${tenantKey}\\0${toolName}`;\n\tif (toolName === \"learning_auto_learn_state\") return `${tenantKey}\\0${toolName}:${String(record.action || \"read\")}`;\n\tif (toolName === \"task_steps\") return `${tenantKey}\\0${toolName}:${String(record.action || \"list\")}`;\n\treturn undefined;\n}\n\nexport function getToolPanelResultActionKeys(scope: ToolPanelTenantScope, toolName: string, result: unknown): string[] {\n\tif (toolName !== \"background_script\") return [];\n\tconst tenantKey = createToolPanelTenantKey(scope);\n\treturn backgroundScriptResultSelectors(result).map((selector) => backgroundScriptActionKey(tenantKey, selector));\n}\n\nexport function shouldReuseToolPanelInPlace(toolName: string, args: unknown): boolean {\n\treturn (\n\t\ttoolName === \"background_script\" &&\n\t\t!!args &&\n\t\ttypeof args === \"object\" &&\n\t\t!!backgroundScriptSelector(args as Record<string, unknown>)\n\t);\n}\n\n// Reusable panels retain rendered arguments/results. Keep this aligned with the bounded live TUI\n// scrollback rather than pinning one component for every unique file/status action in a long process.\nconst MAX_REUSABLE_TOOL_PANEL_ACTIONS = 256;\n\nexport class ToolPanelRegistry {\n\tprivate readonly panelsByAction = new Map<string, ToolExecutionComponent>();\n\tprivate readonly activeByCallId = new Map<string, ToolExecutionComponent>();\n\tprivate readonly actionKeyByCallId = new Map<string, string>();\n\n\tgetReusable(actionKey: string | undefined, options?: { allowActive?: boolean }): ToolExecutionComponent | undefined {\n\t\tif (!actionKey) return undefined;\n\t\tconst panel = this.panelsByAction.get(actionKey);\n\t\tif (!panel || (!options?.allowActive && this.isActive(panel))) return undefined;\n\t\t// Refresh insertion order so eviction follows recent reuse rather than original creation.\n\t\tthis.panelsByAction.delete(actionKey);\n\t\tthis.panelsByAction.set(actionKey, panel);\n\t\treturn panel;\n\t}\n\n\tprivate rememberAction(actionKey: string, panel: ToolExecutionComponent): void {\n\t\tthis.panelsByAction.delete(actionKey);\n\t\tthis.panelsByAction.set(actionKey, panel);\n\t\twhile (this.panelsByAction.size > MAX_REUSABLE_TOOL_PANEL_ACTIONS) {\n\t\t\tconst oldest = this.panelsByAction.keys().next().value;\n\t\t\tif (oldest === undefined) break;\n\t\t\tthis.panelsByAction.delete(oldest);\n\t\t}\n\t}\n\n\treplaceActiveForAction(toolCallId: string, panel: ToolExecutionComponent, actionKey: string): void {\n\t\tfor (const [activeCallId, activeActionKey] of this.actionKeyByCallId.entries()) {\n\t\t\tif (activeActionKey !== actionKey) continue;\n\t\t\tthis.activeByCallId.delete(activeCallId);\n\t\t\tthis.actionKeyByCallId.delete(activeCallId);\n\t\t}\n\t\tthis.register(toolCallId, panel, actionKey);\n\t}\n\n\tregister(toolCallId: string, panel: ToolExecutionComponent, actionKey?: string): void {\n\t\tthis.activeByCallId.set(toolCallId, panel);\n\t\tif (actionKey) {\n\t\t\tthis.rememberAction(actionKey, panel);\n\t\t\tthis.actionKeyByCallId.set(toolCallId, actionKey);\n\t\t}\n\t}\n\n\tregisterAliases(panel: ToolExecutionComponent, actionKeys: string[]): void {\n\t\tfor (const actionKey of actionKeys) {\n\t\t\tthis.rememberAction(actionKey, panel);\n\t\t}\n\t}\n\n\thasActive(toolCallId: string): boolean {\n\t\treturn this.activeByCallId.has(toolCallId);\n\t}\n\n\tgetActive(toolCallId: string): ToolExecutionComponent | undefined {\n\t\treturn this.activeByCallId.get(toolCallId);\n\t}\n\n\tactiveEntries(): IterableIterator<[string, ToolExecutionComponent]> {\n\t\treturn this.activeByCallId.entries();\n\t}\n\n\tisActive(panel: ToolExecutionComponent): boolean {\n\t\tfor (const active of this.activeByCallId.values()) {\n\t\t\tif (active === panel) return true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tfinish(toolCallId: string): void {\n\t\tthis.activeByCallId.delete(toolCallId);\n\t\tthis.actionKeyByCallId.delete(toolCallId);\n\t}\n\n\tclearActive(): void {\n\t\tthis.activeByCallId.clear();\n\t\tthis.actionKeyByCallId.clear();\n\t}\n\n\tclearAll(): void {\n\t\tthis.activeByCallId.clear();\n\t\tthis.panelsByAction.clear();\n\t\tthis.actionKeyByCallId.clear();\n\t}\n}\n"]}