@pellux/goodvibes-tui 0.28.0 → 1.0.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.
- package/CHANGELOG.md +133 -0
- package/README.md +1 -1
- package/package.json +1 -1
- package/src/core/conversation-line-cache.ts +432 -0
- package/src/core/conversation-rendering.ts +11 -3
- package/src/core/conversation.ts +50 -4
- package/src/input/commands/cost-runtime.ts +49 -0
- package/src/input/commands/operator-runtime.ts +5 -1
- package/src/input/commands.ts +2 -0
- package/src/input/handler-content-actions.ts +8 -3
- package/src/input/handler-feed-routes.ts +12 -35
- package/src/input/handler-feed.ts +4 -8
- package/src/input/handler-shortcuts.ts +51 -0
- package/src/input/handler.ts +43 -6
- package/src/input/input-history.ts +17 -4
- package/src/input/keybindings.ts +48 -8
- package/src/input/panel-integration-actions.ts +107 -1
- package/src/main.ts +19 -11
- package/src/panels/agent-inspector-panel.ts +125 -36
- package/src/panels/agent-inspector-shared.ts +144 -0
- package/src/panels/approval-panel.ts +67 -16
- package/src/panels/automation-control-panel.ts +368 -124
- package/src/panels/base-panel.ts +1 -1
- package/src/panels/builtin/agent.ts +28 -37
- package/src/panels/builtin/development.ts +40 -32
- package/src/panels/builtin/knowledge.ts +15 -6
- package/src/panels/builtin/operations.ts +178 -117
- package/src/panels/builtin/session.ts +35 -9
- package/src/panels/builtin/shared.ts +98 -6
- package/src/panels/cockpit-panel.ts +232 -73
- package/src/panels/communication-panel.ts +58 -20
- package/src/panels/confirm-state.ts +8 -1
- package/src/panels/control-plane-panel.ts +351 -118
- package/src/panels/cost-tracker-panel.ts +165 -7
- package/src/panels/debug-panel.ts +312 -159
- package/src/panels/diff-panel.ts +209 -57
- package/src/panels/docs-panel.ts +152 -66
- package/src/panels/eval-panel.ts +220 -42
- package/src/panels/file-explorer-panel.ts +202 -122
- package/src/panels/file-preview-panel.ts +132 -57
- package/src/panels/git-panel.ts +310 -129
- package/src/panels/hooks-panel.ts +150 -22
- package/src/panels/incident-review-panel.ts +223 -35
- package/src/panels/index.ts +0 -4
- package/src/panels/intelligence-panel.ts +212 -86
- package/src/panels/knowledge-graph-panel.ts +461 -101
- package/src/panels/local-auth-panel.ts +240 -28
- package/src/panels/marketplace-panel.ts +193 -26
- package/src/panels/memory-panel.ts +78 -77
- package/src/panels/ops-control-panel.ts +146 -29
- package/src/panels/ops-strategy-panel.ts +72 -4
- package/src/panels/orchestration-panel.ts +231 -69
- package/src/panels/panel-list-panel.ts +154 -131
- package/src/panels/panel-manager.ts +97 -9
- package/src/panels/plan-dashboard-panel.ts +333 -17
- package/src/panels/plugins-panel.ts +184 -29
- package/src/panels/policy-panel.ts +210 -38
- package/src/panels/polish-core.ts +7 -2
- package/src/panels/polish.ts +23 -4
- package/src/panels/project-planning-answer-actions.ts +134 -0
- package/src/panels/project-planning-panel.ts +62 -113
- package/src/panels/provider-health-panel.ts +434 -518
- package/src/panels/provider-health-routes.ts +203 -0
- package/src/panels/provider-health-tracker.ts +194 -6
- package/src/panels/provider-health-views.ts +560 -0
- package/src/panels/qr-panel.ts +116 -30
- package/src/panels/remote-panel.ts +114 -36
- package/src/panels/routes-panel.ts +63 -22
- package/src/panels/sandbox-panel.ts +174 -42
- package/src/panels/scrollable-list-panel.ts +19 -135
- package/src/panels/security-panel.ts +133 -33
- package/src/panels/services-panel.ts +116 -64
- package/src/panels/session-browser-panel.ts +73 -2
- package/src/panels/session-maintenance.ts +4 -122
- package/src/panels/settings-sync-panel.ts +335 -72
- package/src/panels/skills-panel.ts +157 -89
- package/src/panels/subscription-panel.ts +86 -33
- package/src/panels/symbol-outline-panel.ts +248 -108
- package/src/panels/system-messages-panel.ts +114 -13
- package/src/panels/tasks-panel.ts +326 -139
- package/src/panels/thinking-panel.ts +43 -10
- package/src/panels/token-budget-panel.ts +194 -18
- package/src/panels/tool-inspector-panel.ts +144 -34
- package/src/panels/types.ts +40 -4
- package/src/panels/work-plan-panel.ts +280 -17
- package/src/panels/worktree-panel.ts +175 -42
- package/src/panels/wrfc-panel.ts +116 -24
- package/src/renderer/agent-detail-modal.ts +37 -8
- package/src/renderer/code-block.ts +58 -28
- package/src/renderer/context-inspector.ts +3 -6
- package/src/renderer/conversation-overlays.ts +25 -11
- package/src/renderer/conversation-surface.ts +1 -21
- package/src/renderer/diff-view.ts +6 -4
- package/src/renderer/footer-tips.ts +41 -0
- package/src/renderer/fullscreen-primitives.ts +23 -17
- package/src/renderer/fullscreen-workspace.ts +2 -7
- package/src/renderer/help-overlay.ts +91 -14
- package/src/renderer/hint-grammar.ts +52 -0
- package/src/renderer/history-search-overlay.ts +10 -16
- package/src/renderer/layout.ts +7 -7
- package/src/renderer/markdown.ts +9 -1
- package/src/renderer/modal-factory.ts +23 -15
- package/src/renderer/model-picker-overlay.ts +8 -485
- package/src/renderer/model-workspace.ts +9 -24
- package/src/renderer/overlay-box.ts +23 -19
- package/src/renderer/process-indicator.ts +15 -25
- package/src/renderer/profile-picker-modal.ts +13 -14
- package/src/renderer/prompt-content-width.ts +16 -0
- package/src/renderer/search-overlay.ts +27 -6
- package/src/renderer/selection-modal-overlay.ts +3 -1
- package/src/renderer/semantic-diff.ts +1 -1
- package/src/renderer/session-picker-modal.ts +6 -4
- package/src/renderer/settings-modal-helpers.ts +10 -34
- package/src/renderer/settings-modal.ts +70 -10
- package/src/renderer/shell-surface.ts +54 -15
- package/src/renderer/status-glyphs.ts +11 -9
- package/src/renderer/surface-layout.ts +0 -12
- package/src/renderer/term-caps.ts +1 -1
- package/src/renderer/theme.ts +60 -3
- package/src/renderer/tool-call.ts +6 -20
- package/src/renderer/ui-factory.ts +48 -37
- package/src/renderer/ui-primitives.ts +41 -3
- package/src/runtime/bootstrap-shell.ts +35 -18
- package/src/runtime/diagnostics/panels/index.ts +0 -3
- package/src/runtime/render-scheduler.ts +80 -0
- package/src/shell/ui-openers.ts +14 -22
- package/src/utils/format-duration.ts +2 -2
- package/src/utils/splash-lines.ts +54 -5
- package/src/version.ts +1 -1
- package/src/work-plans/work-plan-store.ts +13 -0
- package/src/panels/agent-logs-panel.ts +0 -635
- package/src/panels/agent-logs-shared.ts +0 -129
- package/src/panels/context-visualizer-panel.ts +0 -238
- package/src/panels/forensics-panel.ts +0 -378
- package/src/panels/provider-account-snapshot.ts +0 -259
- package/src/panels/provider-accounts-panel.ts +0 -255
- package/src/panels/provider-stats-panel.ts +0 -391
- package/src/panels/schedule-panel.ts +0 -365
- package/src/panels/watchers-panel.ts +0 -213
- package/src/renderer/file-tree.ts +0 -153
- package/src/renderer/progress.ts +0 -99
- package/src/renderer/status-token.ts +0 -67
- package/src/runtime/diagnostics/panels/panel-resources.ts +0 -118
- package/src/runtime/diagnostics/panels/policy.ts +0 -177
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import type { PanelManager } from '../panel-manager.ts';
|
|
2
|
-
import {
|
|
3
|
-
import { ContextVisualizerPanel } from '../context-visualizer-panel.ts';
|
|
2
|
+
import { AgentInspectorPanel } from '../agent-inspector-panel.ts';
|
|
4
3
|
import { ThinkingPanel } from '../thinking-panel.ts';
|
|
5
4
|
import { ToolInspectorPanel } from '../tool-inspector-panel.ts';
|
|
6
5
|
import { WrfcPanel } from '../wrfc-panel.ts';
|
|
7
|
-
import { SchedulePanel } from '../schedule-panel.ts';
|
|
8
6
|
import { ProjectPlanningPanel } from '../project-planning-panel.ts';
|
|
9
7
|
import { WorkPlanPanel } from '../work-plan-panel.ts';
|
|
10
8
|
import type { ResolvedBuiltinPanelDeps } from './shared.ts';
|
|
11
|
-
import {
|
|
9
|
+
import { requireUiServices } from './shared.ts';
|
|
12
10
|
|
|
13
11
|
export function registerAgentPanels(manager: PanelManager, deps: ResolvedBuiltinPanelDeps): void {
|
|
14
12
|
manager.registerType({
|
|
@@ -18,6 +16,7 @@ export function registerAgentPanels(manager: PanelManager, deps: ResolvedBuiltin
|
|
|
18
16
|
category: 'ai',
|
|
19
17
|
description: 'Stream model reasoning tokens in real-time with collapsible blocks per turn',
|
|
20
18
|
preload: true,
|
|
19
|
+
retainOnClose: true,
|
|
21
20
|
factory: () => new ThinkingPanel(requireUiServices(deps).events.turns),
|
|
22
21
|
});
|
|
23
22
|
|
|
@@ -28,47 +27,44 @@ export function registerAgentPanels(manager: PanelManager, deps: ResolvedBuiltin
|
|
|
28
27
|
category: 'ai',
|
|
29
28
|
description: 'Chronological tool call inspector with expandable args/results and filtering',
|
|
30
29
|
preload: true,
|
|
30
|
+
retainOnClose: true,
|
|
31
31
|
factory: () => {
|
|
32
32
|
const ui = requireUiServices(deps);
|
|
33
33
|
return new ToolInspectorPanel(ui.events.tools, ui.events.turns);
|
|
34
34
|
},
|
|
35
35
|
});
|
|
36
36
|
|
|
37
|
+
// WO-110: agent-logs merged into inspector — one deep agent console with
|
|
38
|
+
// the correct JSONL parser + cancel, plus agent-logs' follow/pause/filter
|
|
39
|
+
// ergonomics. Registration moved here (category 'agent') from
|
|
40
|
+
// builtin/development.ts. (WO-113 retired the 'context' registration that
|
|
41
|
+
// previously lived here: ContextVisualizerPanel merged into TokenBudgetPanel,
|
|
42
|
+
// aliased in builtin/session.ts.)
|
|
37
43
|
manager.registerType({
|
|
38
|
-
id: '
|
|
39
|
-
name: '
|
|
40
|
-
icon: '
|
|
41
|
-
category: 'ai',
|
|
42
|
-
description: 'Context window visualizer: stacked bar showing token usage per section',
|
|
43
|
-
preload: true,
|
|
44
|
-
factory: () => new ContextVisualizerPanel(
|
|
45
|
-
requireUiServices(deps).events.turns,
|
|
46
|
-
deps.sessionMemoryStore,
|
|
47
|
-
deps.configManager,
|
|
48
|
-
deps.getOrchestratorUsage,
|
|
49
|
-
deps.getCtxWindow ?? deps.contextWindow,
|
|
50
|
-
requireUiServices(deps).readModels.session,
|
|
51
|
-
() => deps.orchestrator?.lastInputTokens ?? 0,
|
|
52
|
-
),
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
manager.registerType({
|
|
56
|
-
id: 'agent-logs',
|
|
57
|
-
name: 'Agents',
|
|
58
|
-
icon: 'A',
|
|
44
|
+
id: 'inspector',
|
|
45
|
+
name: 'Inspector',
|
|
46
|
+
icon: 'I',
|
|
59
47
|
category: 'agent',
|
|
60
|
-
description: '
|
|
48
|
+
description: 'Live per-agent console: timeline, tool calls, WRFC/cost badges, pause/filter/follow, and cancel',
|
|
61
49
|
preload: true,
|
|
50
|
+
retainOnClose: true,
|
|
62
51
|
factory: () => {
|
|
63
52
|
const ui = requireUiServices(deps);
|
|
64
|
-
return new
|
|
53
|
+
return new AgentInspectorPanel({
|
|
65
54
|
agentManager: ui.agents.agentManager,
|
|
55
|
+
agentMessageBus: ui.agents.agentMessageBus,
|
|
56
|
+
agentEvents: ui.events.agents,
|
|
66
57
|
workingDirectory: ui.environment.workingDirectory,
|
|
58
|
+
cancelAgent: (agentId: string) => ui.agents.agentManager.cancel(agentId),
|
|
67
59
|
requestRender: deps.requestRender,
|
|
68
60
|
});
|
|
69
61
|
},
|
|
70
62
|
});
|
|
71
63
|
|
|
64
|
+
// Compat: '/panel open agent-logs' (and any saved layout/muscle memory)
|
|
65
|
+
// still resolves — redirected to the merged inspector console.
|
|
66
|
+
manager.registerAlias('agent-logs', 'inspector');
|
|
67
|
+
|
|
72
68
|
manager.registerType({
|
|
73
69
|
id: 'wrfc',
|
|
74
70
|
name: 'WRFC',
|
|
@@ -76,6 +72,7 @@ export function registerAgentPanels(manager: PanelManager, deps: ResolvedBuiltin
|
|
|
76
72
|
category: 'agent',
|
|
77
73
|
description: 'WRFC chain view: write, review, fix, and confirm cycle status',
|
|
78
74
|
preload: true,
|
|
75
|
+
retainOnClose: true,
|
|
79
76
|
factory: () => {
|
|
80
77
|
const ui = requireUiServices(deps);
|
|
81
78
|
return new WrfcPanel(ui.events.workflows, {
|
|
@@ -88,10 +85,12 @@ export function registerAgentPanels(manager: PanelManager, deps: ResolvedBuiltin
|
|
|
88
85
|
manager.registerType({
|
|
89
86
|
id: 'work-plan',
|
|
90
87
|
name: 'Work Plan',
|
|
91
|
-
|
|
88
|
+
// WO-152: was 'L' (collided with panel-list).
|
|
89
|
+
icon: '◧',
|
|
92
90
|
category: 'agent',
|
|
93
91
|
description: 'Persistent workspace checklist for multi-step work and cross-session task tracking',
|
|
94
92
|
preload: true,
|
|
93
|
+
retainOnClose: true,
|
|
95
94
|
factory: () => new WorkPlanPanel(deps.workPlanStore),
|
|
96
95
|
});
|
|
97
96
|
|
|
@@ -102,6 +101,7 @@ export function registerAgentPanels(manager: PanelManager, deps: ResolvedBuiltin
|
|
|
102
101
|
category: 'agent',
|
|
103
102
|
description: 'Passive project planning artifacts: readiness, questions, decisions, language, task graph, and agent handoff metadata',
|
|
104
103
|
preload: true,
|
|
104
|
+
retainOnClose: true,
|
|
105
105
|
factory: () => new ProjectPlanningPanel({
|
|
106
106
|
service: deps.projectPlanningService,
|
|
107
107
|
projectId: deps.projectPlanningProjectId,
|
|
@@ -110,13 +110,4 @@ export function registerAgentPanels(manager: PanelManager, deps: ResolvedBuiltin
|
|
|
110
110
|
dismissPlanning: deps.dismissPlanning,
|
|
111
111
|
}),
|
|
112
112
|
});
|
|
113
|
-
|
|
114
|
-
manager.registerType({
|
|
115
|
-
id: 'schedule',
|
|
116
|
-
name: 'Schedule',
|
|
117
|
-
icon: 'Z',
|
|
118
|
-
category: 'agent',
|
|
119
|
-
description: 'Scheduled agent tasks: cron expressions, next run time, enable/disable, run history',
|
|
120
|
-
factory: () => new SchedulePanel(requireAutomationManager(deps)),
|
|
121
|
-
});
|
|
122
113
|
}
|
|
@@ -2,14 +2,13 @@ import type { PanelManager } from '../panel-manager.ts';
|
|
|
2
2
|
import { GitPanel } from '../git-panel.ts';
|
|
3
3
|
import { DiffPanel } from '../diff-panel.ts';
|
|
4
4
|
import { PlanDashboardPanel } from '../plan-dashboard-panel.ts';
|
|
5
|
-
import { AgentInspectorPanel } from '../agent-inspector-panel.ts';
|
|
6
5
|
import { CostTrackerPanel } from '../cost-tracker-panel.ts';
|
|
7
6
|
import { IntelligencePanel } from '../intelligence-panel.ts';
|
|
8
7
|
import { FileExplorerPanel } from '../file-explorer-panel.ts';
|
|
9
8
|
import { FilePreviewPanel } from '../file-preview-panel.ts';
|
|
10
9
|
import { SymbolOutlinePanel } from '../symbol-outline-panel.ts';
|
|
11
10
|
import type { ResolvedBuiltinPanelDeps } from './shared.ts';
|
|
12
|
-
import { requireUiServices } from './shared.ts';
|
|
11
|
+
import { requireUiServices, withUnconfiguredFallback } from './shared.ts';
|
|
13
12
|
|
|
14
13
|
export function registerDevelopmentPanels(manager: PanelManager, deps: ResolvedBuiltinPanelDeps): void {
|
|
15
14
|
manager.registerType({
|
|
@@ -18,16 +17,27 @@ export function registerDevelopmentPanels(manager: PanelManager, deps: ResolvedB
|
|
|
18
17
|
icon: 'G',
|
|
19
18
|
category: 'development',
|
|
20
19
|
description: 'Git status, staged/unstaged changes, and recent commits',
|
|
21
|
-
|
|
20
|
+
// sessionChangeTracker is optional: when a caller wires it into
|
|
21
|
+
// BuiltinPanelDeps, the Git panel highlights files touched this session.
|
|
22
|
+
factory: () => new GitPanel(
|
|
23
|
+
requireUiServices(deps).environment.workingDirectory,
|
|
24
|
+
deps.requestRender,
|
|
25
|
+
deps.sessionChangeTracker ? () => deps.sessionChangeTracker!.getChangedFiles() : undefined,
|
|
26
|
+
),
|
|
22
27
|
});
|
|
23
28
|
|
|
24
29
|
manager.registerType({
|
|
25
30
|
id: 'plan',
|
|
26
31
|
name: 'Plan',
|
|
27
|
-
|
|
32
|
+
// Distinct from Planning's 'P' (builtin/agent.ts) — interim glyph per
|
|
33
|
+
// WO-128; WO-152 owns the registry-wide icon-uniqueness assertion.
|
|
34
|
+
icon: '▤',
|
|
28
35
|
category: 'agent',
|
|
29
36
|
description: 'Active execution plan with phase progress and item status',
|
|
30
|
-
factory: () =>
|
|
37
|
+
factory: () => {
|
|
38
|
+
const ui = requireUiServices(deps);
|
|
39
|
+
return new PlanDashboardPanel(ui.events.workflows, { planManager: deps.planManager });
|
|
40
|
+
},
|
|
31
41
|
});
|
|
32
42
|
|
|
33
43
|
manager.registerType({
|
|
@@ -39,39 +49,33 @@ export function registerDevelopmentPanels(manager: PanelManager, deps: ResolvedB
|
|
|
39
49
|
factory: () => new DiffPanel(requireUiServices(deps).environment.workingDirectory),
|
|
40
50
|
});
|
|
41
51
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
name: 'Inspector',
|
|
45
|
-
icon: 'I',
|
|
46
|
-
category: 'agent',
|
|
47
|
-
description: "Detailed timeline view of a specific agent's messages and tool calls",
|
|
48
|
-
factory: () => {
|
|
49
|
-
const ui = requireUiServices(deps);
|
|
50
|
-
return new AgentInspectorPanel({
|
|
51
|
-
agentManager: ui.agents.agentManager,
|
|
52
|
-
agentMessageBus: ui.agents.agentMessageBus,
|
|
53
|
-
workingDirectory: ui.environment.workingDirectory,
|
|
54
|
-
cancelAgent: (agentId: string) => ui.agents.agentManager.cancel(agentId),
|
|
55
|
-
requestRender: deps.requestRender,
|
|
56
|
-
});
|
|
57
|
-
},
|
|
58
|
-
});
|
|
52
|
+
// WO-110: 'inspector' registration moved to builtin/agent.ts (category
|
|
53
|
+
// 'agent') — it now absorbs the merged agent-logs capabilities.
|
|
59
54
|
|
|
60
|
-
if (deps.getOrchestratorUsage)
|
|
55
|
+
// WO-152: always registered (was gated behind `if (deps.getOrchestratorUsage)`,
|
|
56
|
+
// so `/panel open cost` reported "Unknown panel" on builds without usage
|
|
57
|
+
// tracking wired). Falls back to a "dependency not configured" empty state.
|
|
58
|
+
{
|
|
61
59
|
const { getOrchestratorUsage, budgetThreshold } = deps;
|
|
62
60
|
manager.registerType({
|
|
63
61
|
id: 'cost',
|
|
64
62
|
name: 'Cost',
|
|
65
63
|
icon: '$',
|
|
66
|
-
category: '
|
|
64
|
+
category: 'providers',
|
|
67
65
|
description: 'Estimated costs per session, agent, and plan with budget alerts',
|
|
68
|
-
factory: (
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
66
|
+
factory: withUnconfiguredFallback(
|
|
67
|
+
getOrchestratorUsage !== undefined,
|
|
68
|
+
'cost', 'Cost', '$', 'providers',
|
|
69
|
+
' Cost tracking not configured for this session.',
|
|
70
|
+
'This runtime was not wired with orchestrator usage tracking at bootstrap, so no cost data is available.',
|
|
71
|
+
() => {
|
|
72
|
+
const ui = requireUiServices(deps);
|
|
73
|
+
return new CostTrackerPanel(ui.events.turns, ui.events.agents, getOrchestratorUsage!, {
|
|
74
|
+
budgetThreshold,
|
|
75
|
+
getAgentStatus: (id) => ui.agents.agentManager.getStatus(id),
|
|
76
|
+
});
|
|
77
|
+
},
|
|
78
|
+
),
|
|
75
79
|
});
|
|
76
80
|
}
|
|
77
81
|
|
|
@@ -99,7 +103,11 @@ export function registerDevelopmentPanels(manager: PanelManager, deps: ResolvedB
|
|
|
99
103
|
manager.registerType({
|
|
100
104
|
id: 'preview',
|
|
101
105
|
name: 'Preview',
|
|
102
|
-
|
|
106
|
+
// WO-152: was 'V' in the registry vs the live panel's own 'P' (base-panel
|
|
107
|
+
// super() call) — a pre-existing registry/instance icon mismatch as well
|
|
108
|
+
// as a collision (project-planning and plugins both also used 'P').
|
|
109
|
+
// Unified to a single unique glyph in both places.
|
|
110
|
+
icon: '◑',
|
|
103
111
|
category: 'development',
|
|
104
112
|
description: 'Syntax-highlighted file preview',
|
|
105
113
|
factory: () => new FilePreviewPanel(),
|
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
import type { PanelManager } from '../panel-manager.ts';
|
|
2
2
|
import { MemoryPanel } from '../memory-panel.ts';
|
|
3
3
|
import { KnowledgeGraphPanel } from '../knowledge-graph-panel.ts';
|
|
4
|
-
import type
|
|
4
|
+
import { requireKnowledgeApi, withUnconfiguredFallback, type ResolvedBuiltinPanelDeps } from './shared.ts';
|
|
5
5
|
|
|
6
6
|
export function registerKnowledgePanels(manager: PanelManager, deps: ResolvedBuiltinPanelDeps): void {
|
|
7
|
-
// KnowledgeGraphPanel is a no-arg panel — always register it regardless of memoryRegistry.
|
|
8
7
|
manager.registerType({
|
|
9
8
|
id: 'knowledge',
|
|
10
9
|
name: 'Knowledge',
|
|
11
10
|
icon: 'K',
|
|
12
11
|
category: 'agent',
|
|
13
|
-
description: '
|
|
14
|
-
factory: () => new KnowledgeGraphPanel(),
|
|
12
|
+
description: 'Live SDK knowledge graph: nodes, sources, issue review queue, and search',
|
|
13
|
+
factory: () => new KnowledgeGraphPanel(requireKnowledgeApi(deps), () => manager.open('memory')),
|
|
15
14
|
});
|
|
16
|
-
if (deps.memoryRegistry)
|
|
15
|
+
// WO-152: always registered (was gated behind `if (deps.memoryRegistry)`,
|
|
16
|
+
// so `/panel open memory` reported "Unknown panel" on builds without a
|
|
17
|
+
// memory registry wired). Falls back to a "dependency not configured"
|
|
18
|
+
// empty state.
|
|
19
|
+
{
|
|
17
20
|
const { memoryRegistry } = deps;
|
|
18
21
|
manager.registerType({
|
|
19
22
|
id: 'memory',
|
|
@@ -21,7 +24,13 @@ export function registerKnowledgePanels(manager: PanelManager, deps: ResolvedBui
|
|
|
21
24
|
icon: 'M',
|
|
22
25
|
category: 'agent',
|
|
23
26
|
description: 'Project memory: decisions, constraints, incidents, and patterns with provenance links',
|
|
24
|
-
factory: (
|
|
27
|
+
factory: withUnconfiguredFallback(
|
|
28
|
+
memoryRegistry !== undefined,
|
|
29
|
+
'memory', 'Memory', 'M', 'agent',
|
|
30
|
+
' Memory registry not configured for this session.',
|
|
31
|
+
'This runtime was not wired with a project memory registry at bootstrap, so no memory data is available.',
|
|
32
|
+
() => new MemoryPanel(memoryRegistry!),
|
|
33
|
+
),
|
|
25
34
|
});
|
|
26
35
|
}
|
|
27
36
|
}
|