@pellux/goodvibes-tui 1.0.0 → 1.7.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 +130 -127
- package/README.md +32 -14
- package/docs/foundation-artifacts/operator-contract.json +1 -1
- package/package.json +2 -2
- package/src/cli/ensure-goodvibes-gitignore.ts +32 -0
- package/src/cli/entrypoint.ts +2 -0
- package/src/core/alert-gating.ts +67 -0
- package/src/core/approval-alert.ts +72 -0
- package/src/core/budget-breach-notifier.ts +106 -0
- package/src/core/conversation-rendering.ts +19 -0
- package/src/core/conversation.ts +58 -0
- package/src/core/focus-tracker.ts +41 -0
- package/src/core/long-task-notifier.ts +33 -6
- package/src/core/stream-event-wiring.ts +104 -2
- package/src/core/stream-stall-watchdog.ts +41 -17
- package/src/core/system-message-router.ts +37 -51
- package/src/core/turn-cancellation.ts +20 -0
- package/src/core/turn-event-wiring.ts +64 -3
- package/src/export/cost-utils.ts +126 -8
- package/src/input/command-registry.ts +54 -1
- package/src/input/commands/checkpoint-runtime.ts +280 -0
- package/src/input/commands/codebase-runtime.ts +192 -0
- package/src/input/commands/diff-runtime.ts +61 -30
- package/src/input/commands/eval.ts +1 -1
- package/src/input/commands/health-runtime.ts +1 -1
- package/src/input/commands/image-runtime.ts +112 -0
- package/src/input/commands/intelligence-runtime.ts +11 -1
- package/src/input/commands/local-auth-runtime.ts +4 -1
- package/src/input/commands/local-runtime.ts +9 -3
- package/src/input/commands/marketplace-runtime.ts +2 -2
- package/src/input/commands/memory.ts +6 -1
- package/src/input/commands/operator-panel-runtime.ts +40 -24
- package/src/input/commands/planning-runtime.ts +26 -3
- package/src/input/commands/platform-sandbox-runtime.ts +1 -6
- package/src/input/commands/plugin-runtime.ts +2 -2
- package/src/input/commands/policy-dispatch.ts +21 -0
- package/src/input/commands/provider-accounts-runtime.ts +1 -1
- package/src/input/commands/qrcode-runtime.ts +3 -3
- package/src/input/commands/recall-review.ts +35 -0
- package/src/input/commands/remote-runtime.ts +3 -3
- package/src/input/commands/runtime-services.ts +54 -13
- package/src/input/commands/services-runtime.ts +1 -1
- package/src/input/commands/session-content.ts +12 -0
- package/src/input/commands/session-workflow.ts +19 -1
- package/src/input/commands/settings-sync-runtime.ts +1 -1
- package/src/input/commands/share-runtime.ts +9 -2
- package/src/input/commands/shell-core.ts +15 -7
- package/src/input/commands/skills-runtime.ts +2 -8
- package/src/input/commands/subscription-runtime.ts +2 -2
- package/src/input/commands/test-runtime.ts +277 -0
- package/src/input/commands/websearch-runtime.ts +101 -0
- package/src/input/commands/work-plan-runtime.ts +36 -10
- package/src/input/commands/workstream-runtime.ts +338 -0
- package/src/input/commands.ts +12 -0
- package/src/input/config-modal-types.ts +161 -0
- package/src/input/config-modal.ts +377 -0
- package/src/input/feed-context-factory.ts +7 -8
- package/src/input/handler-command-route.ts +27 -17
- package/src/input/handler-content-actions.ts +22 -8
- package/src/input/handler-feed-routes.ts +107 -7
- package/src/input/handler-feed.ts +49 -13
- package/src/input/handler-interactions.ts +3 -3
- package/src/input/handler-modal-routes.ts +65 -0
- package/src/input/handler-modal-stack.ts +3 -5
- package/src/input/handler-modal-token-routes.ts +16 -49
- package/src/input/handler-picker-routes.ts +11 -94
- package/src/input/handler-shortcuts.ts +24 -14
- package/src/input/handler-types.ts +3 -6
- package/src/input/handler-ui-state.ts +10 -22
- package/src/input/handler.ts +10 -28
- package/src/input/keybindings.ts +22 -8
- package/src/input/model-picker-types.ts +24 -6
- package/src/input/model-picker.ts +58 -0
- package/src/input/panel-integration-actions.ts +9 -170
- package/src/input/settings-modal-data.ts +95 -0
- package/src/input/settings-modal-mutations.ts +6 -4
- package/src/main.ts +41 -44
- package/src/panels/agent-inspector-shared.ts +35 -11
- package/src/panels/base-panel.ts +22 -1
- package/src/panels/builtin/agent.ts +21 -107
- package/src/panels/builtin/development.ts +16 -62
- package/src/panels/builtin/knowledge.ts +8 -32
- package/src/panels/builtin/operations.ts +84 -428
- package/src/panels/builtin/session.ts +21 -112
- package/src/panels/builtin/shared.ts +9 -43
- package/src/panels/builtin-modals.ts +218 -0
- package/src/panels/builtin-panels.ts +5 -0
- package/src/panels/cost-tracker-panel.ts +63 -14
- package/src/panels/diff-panel.ts +123 -60
- package/src/panels/eval-registry.ts +60 -0
- package/src/panels/fleet-panel.ts +800 -0
- package/src/panels/fleet-read-model.ts +477 -0
- package/src/panels/fleet-steer.ts +92 -0
- package/src/panels/fleet-stop.ts +125 -0
- package/src/panels/fleet-tabs.ts +230 -0
- package/src/panels/fleet-transcript.ts +356 -0
- package/src/panels/git-panel.ts +9 -9
- package/src/panels/index.ts +7 -31
- package/src/panels/local-auth-panel.ts +10 -0
- package/src/panels/modals/hooks-modal.ts +187 -0
- package/src/panels/modals/keybindings-modal.ts +151 -0
- package/src/panels/modals/knowledge-modal.ts +158 -0
- package/src/panels/modals/local-auth-modal.ts +132 -0
- package/src/panels/modals/marketplace-modal.ts +218 -0
- package/src/panels/modals/memory-modal.ts +180 -0
- package/src/panels/modals/modal-surface-helpers.ts +54 -0
- package/src/panels/modals/modal-theme.ts +36 -0
- package/src/panels/modals/pairing-modal.ts +144 -0
- package/src/panels/modals/planning-modal.ts +282 -0
- package/src/panels/modals/plugins-modal.ts +174 -0
- package/src/panels/modals/policy-modal.ts +256 -0
- package/src/panels/modals/provider-health-modal.ts +136 -0
- package/src/panels/modals/remote-modal.ts +115 -0
- package/src/panels/modals/sandbox-modal.ts +150 -0
- package/src/panels/modals/security-modal.ts +217 -0
- package/src/panels/modals/services-modal.ts +179 -0
- package/src/panels/modals/settings-sync-modal.ts +142 -0
- package/src/panels/modals/skills-modal.ts +189 -0
- package/src/panels/modals/subscription-modal.ts +172 -0
- package/src/panels/modals/work-plan-modal.ts +149 -0
- package/src/panels/panel-confirm-overlay.ts +72 -0
- package/src/panels/panel-manager.ts +108 -5
- package/src/panels/project-planning-answer-actions.ts +4 -2
- package/src/panels/scrollable-list-panel.ts +9 -0
- package/src/panels/skills-panel.ts +7 -51
- package/src/panels/token-budget-panel.ts +5 -3
- package/src/panels/types.ts +26 -0
- package/src/permissions/hunk-selection.ts +179 -0
- package/src/permissions/prompt.ts +60 -4
- package/src/renderer/compaction-history-modal.ts +19 -3
- package/src/renderer/compaction-preview.ts +13 -2
- package/src/renderer/compaction-quality.ts +100 -0
- package/src/renderer/config-modal.ts +81 -0
- package/src/renderer/conversation-overlays.ts +10 -17
- package/src/renderer/fleet-tab-strip.ts +56 -0
- package/src/renderer/footer-tips.ts +10 -2
- package/src/renderer/git-status.ts +40 -0
- package/src/renderer/help-overlay.ts +2 -2
- package/src/renderer/model-workspace.ts +44 -1
- package/src/renderer/panel-workspace-bar.ts +8 -2
- package/src/renderer/shell-surface.ts +8 -1
- package/src/renderer/turn-injection.ts +114 -0
- package/src/renderer/ui-factory.ts +91 -7
- package/src/runtime/bootstrap-command-context.ts +24 -1
- package/src/runtime/bootstrap-command-parts.ts +36 -7
- package/src/runtime/bootstrap-core.ts +19 -4
- package/src/runtime/bootstrap-hook-bridge.ts +5 -0
- package/src/runtime/bootstrap-shell.ts +41 -17
- package/src/runtime/bootstrap.ts +11 -17
- package/src/runtime/code-index-services.ts +112 -0
- package/src/runtime/orchestrator-core-services.ts +49 -0
- package/src/runtime/process-lifecycle.ts +3 -1
- package/src/runtime/services.ts +91 -43
- package/src/runtime/ui-services.ts +8 -0
- package/src/runtime/workstream-services.ts +195 -0
- package/src/shell/blocking-input.ts +22 -1
- package/src/shell/ui-openers.ts +129 -17
- package/src/utils/format-duration.ts +8 -18
- package/src/utils/splash-lines.ts +1 -1
- package/src/version.ts +1 -1
- package/src/panels/agent-inspector-panel.ts +0 -786
- package/src/panels/approval-panel.ts +0 -252
- package/src/panels/automation-control-panel.ts +0 -479
- package/src/panels/cockpit-panel.ts +0 -481
- package/src/panels/cockpit-read-model.ts +0 -233
- package/src/panels/communication-panel.ts +0 -256
- package/src/panels/control-plane-panel.ts +0 -470
- package/src/panels/debug-panel.ts +0 -609
- package/src/panels/docs-panel.ts +0 -375
- package/src/panels/eval-panel.ts +0 -627
- package/src/panels/file-explorer-panel.ts +0 -664
- package/src/panels/file-preview-panel.ts +0 -517
- package/src/panels/hooks-panel.ts +0 -401
- package/src/panels/incident-review-panel.ts +0 -406
- package/src/panels/intelligence-panel.ts +0 -383
- package/src/panels/knowledge-graph-panel.ts +0 -506
- package/src/panels/marketplace-panel.ts +0 -399
- package/src/panels/memory-panel.ts +0 -558
- package/src/panels/ops-control-panel.ts +0 -329
- package/src/panels/ops-strategy-panel.ts +0 -321
- package/src/panels/orchestration-panel.ts +0 -465
- package/src/panels/panel-list-panel.ts +0 -557
- package/src/panels/plan-dashboard-panel.ts +0 -707
- package/src/panels/policy-panel.ts +0 -517
- package/src/panels/project-planning-panel.ts +0 -721
- package/src/panels/provider-health-panel.ts +0 -678
- package/src/panels/provider-health-tracker.ts +0 -306
- package/src/panels/provider-health-views.ts +0 -560
- package/src/panels/qr-panel.ts +0 -280
- package/src/panels/remote-panel.ts +0 -534
- package/src/panels/routes-panel.ts +0 -241
- package/src/panels/sandbox-panel.ts +0 -456
- package/src/panels/security-panel.ts +0 -447
- package/src/panels/services-panel.ts +0 -329
- package/src/panels/session-browser-panel.ts +0 -487
- package/src/panels/settings-sync-panel.ts +0 -398
- package/src/panels/subscription-panel.ts +0 -342
- package/src/panels/symbol-outline-panel.ts +0 -619
- package/src/panels/system-messages-panel.ts +0 -364
- package/src/panels/tasks-panel.ts +0 -608
- package/src/panels/thinking-panel.ts +0 -333
- package/src/panels/tool-inspector-panel.ts +0 -537
- package/src/panels/work-plan-panel.ts +0 -530
- package/src/panels/worktree-panel.ts +0 -360
- package/src/panels/wrfc-panel.ts +0 -790
- package/src/renderer/agent-detail-modal.ts +0 -465
- package/src/renderer/live-tail-modal.ts +0 -156
- package/src/renderer/process-modal.ts +0 -656
- package/src/renderer/qr-renderer.ts +0 -120
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { formatDuration } from '../utils/format-duration.ts';
|
|
2
|
-
import { calcSessionCost } from '../export/cost-utils.ts';
|
|
2
|
+
import { calcSessionCost, isModelPriced } from '../export/cost-utils.ts';
|
|
3
3
|
import type { AgentEvent } from '@/runtime/index.ts';
|
|
4
4
|
import type { UiEventFeed } from '../runtime/ui-events.ts';
|
|
5
5
|
|
|
@@ -7,7 +7,8 @@ export type AgentInspectorEntryKind = 'user' | 'assistant' | 'tool_call' | 'tool
|
|
|
7
7
|
|
|
8
8
|
// ---------------------------------------------------------------------------
|
|
9
9
|
// Shared agent status / stall constants
|
|
10
|
-
// Used by
|
|
10
|
+
// Used by the Fleet panel's agent views and read-model consumers (formerly also
|
|
11
|
+
// AgentDetailModal, which was retired in W6.1).
|
|
11
12
|
// ---------------------------------------------------------------------------
|
|
12
13
|
|
|
13
14
|
/** Terminal statuses — cancel not offered; stall check skipped. */
|
|
@@ -171,6 +172,8 @@ export function formatAgentCost(usd: number): string {
|
|
|
171
172
|
export interface AgentUsageSummary {
|
|
172
173
|
readonly tokens: number;
|
|
173
174
|
readonly cost: number;
|
|
175
|
+
/** False when the model never resolved to a real price — `cost` is a zero placeholder, not a real reading. */
|
|
176
|
+
readonly priced: boolean;
|
|
174
177
|
}
|
|
175
178
|
|
|
176
179
|
interface AgentUsageLike {
|
|
@@ -183,22 +186,43 @@ interface AgentUsageLike {
|
|
|
183
186
|
readonly model?: string | null;
|
|
184
187
|
}
|
|
185
188
|
|
|
189
|
+
/**
|
|
190
|
+
* True when a usage object carries actual reported token data rather than
|
|
191
|
+
* being present-but-empty. W0.9: the SDK's AgentRecord.usage is initialised
|
|
192
|
+
* to an all-zero object at agent spawn (platform/tools/agent/manager.ts) and
|
|
193
|
+
* — in the currently pinned SDK version — is never updated past that, so a
|
|
194
|
+
* plain truthiness check on `rec.usage` treats every agent, including ones
|
|
195
|
+
* that did real work, as "has data" and renders a fabricated $0.00/0-token
|
|
196
|
+
* reading. Guarding on real (nonzero) counts instead keeps today's "n/a"
|
|
197
|
+
* honest and lights up automatically once a future SDK actually populates
|
|
198
|
+
* usage — no further TUI change needed.
|
|
199
|
+
*/
|
|
200
|
+
export function hasReportedUsage(
|
|
201
|
+
usage: AgentUsageLike['usage'],
|
|
202
|
+
): usage is NonNullable<AgentUsageLike['usage']> {
|
|
203
|
+
if (!usage) return false;
|
|
204
|
+
return usage.inputTokens > 0 || usage.outputTokens > 0
|
|
205
|
+
|| (usage.cacheReadTokens ?? 0) > 0 || (usage.cacheWriteTokens ?? 0) > 0;
|
|
206
|
+
}
|
|
207
|
+
|
|
186
208
|
/**
|
|
187
209
|
* Total token count + cost for an agent record's usage, or null when no usage
|
|
188
210
|
* data has landed yet (honest-UX: never fabricate a $0.00/0-token reading for
|
|
189
211
|
* an agent that simply hasn't reported usage).
|
|
190
212
|
*/
|
|
191
213
|
export function summarizeAgentUsage(rec: AgentUsageLike): AgentUsageSummary | null {
|
|
192
|
-
if (!rec.usage) return null;
|
|
193
|
-
const
|
|
214
|
+
if (!hasReportedUsage(rec.usage)) return null;
|
|
215
|
+
const usage = rec.usage;
|
|
216
|
+
const model = rec.model ?? 'unknown';
|
|
217
|
+
const inputTokens = usage.inputTokens + (usage.cacheReadTokens ?? 0) + (usage.cacheWriteTokens ?? 0);
|
|
194
218
|
const cost = calcSessionCost(
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
219
|
+
usage.inputTokens,
|
|
220
|
+
usage.outputTokens,
|
|
221
|
+
usage.cacheReadTokens ?? 0,
|
|
222
|
+
usage.cacheWriteTokens ?? 0,
|
|
223
|
+
model,
|
|
200
224
|
);
|
|
201
|
-
return { tokens: inputTokens +
|
|
225
|
+
return { tokens: inputTokens + usage.outputTokens, cost, priced: isModelPriced(model) };
|
|
202
226
|
}
|
|
203
227
|
|
|
204
228
|
// ---------------------------------------------------------------------------
|
|
@@ -226,7 +250,7 @@ export function buildWrfcCostSegments(
|
|
|
226
250
|
segments.push([segments.length > 0 ? ' Tokens ' : ' Tokens ', palette.label]);
|
|
227
251
|
segments.push([formatTokens(usage.tokens), palette.info]);
|
|
228
252
|
segments.push([' Cost ', palette.label]);
|
|
229
|
-
segments.push([formatAgentCost(usage.cost), palette.info]);
|
|
253
|
+
segments.push([usage.priced ? formatAgentCost(usage.cost) : 'unpriced', palette.info]);
|
|
230
254
|
}
|
|
231
255
|
return segments.length > 0 ? segments : null;
|
|
232
256
|
}
|
package/src/panels/base-panel.ts
CHANGED
|
@@ -9,6 +9,20 @@ import { fitDisplay } from '../utils/terminal-width.ts';
|
|
|
9
9
|
/** Canonical error-surface foreground (bad/red), kept out of the render body. */
|
|
10
10
|
const ERROR_FG = '#ef4444';
|
|
11
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Frame requester wired by main.ts to the render scheduler. Without it,
|
|
14
|
+
* markDirty() only sets a flag the compositor reads when a frame is ALREADY
|
|
15
|
+
* being composed for another reason (input, streaming) — so a live panel
|
|
16
|
+
* (fleet ticks, registry subscriptions) sat visibly stale while the app was
|
|
17
|
+
* idle until the next keypress (Wave-6 replay finding). The scheduler
|
|
18
|
+
* coalesces same-tick requests, so this stays cheap.
|
|
19
|
+
*/
|
|
20
|
+
let panelFrameRequester: (() => void) | null = null;
|
|
21
|
+
|
|
22
|
+
export function setPanelFrameRequester(requester: (() => void) | null): void {
|
|
23
|
+
panelFrameRequester = requester;
|
|
24
|
+
}
|
|
25
|
+
|
|
12
26
|
export abstract class BasePanel implements Panel {
|
|
13
27
|
public needsRender = true;
|
|
14
28
|
public isTransient = false;
|
|
@@ -219,7 +233,14 @@ export abstract class BasePanel implements Panel {
|
|
|
219
233
|
/** R2: Called by the compositor after a successful render to clear the dirty flag. */
|
|
220
234
|
public markRendered(): void { this.needsRender = false; }
|
|
221
235
|
|
|
222
|
-
protected markDirty(): void {
|
|
236
|
+
protected markDirty(): void {
|
|
237
|
+
// Request only on the false→true transition: a pending frame already
|
|
238
|
+
// covers repeat marks, and a panel that dirties itself mid-render must
|
|
239
|
+
// not schedule frames forever.
|
|
240
|
+
const wasDirty = this.needsRender;
|
|
241
|
+
this.needsRender = true;
|
|
242
|
+
if (!wasDirty) panelFrameRequester?.();
|
|
243
|
+
}
|
|
223
244
|
|
|
224
245
|
/**
|
|
225
246
|
* Check whether the panel is currently permitted to render.
|
|
@@ -1,113 +1,27 @@
|
|
|
1
1
|
import type { PanelManager } from '../panel-manager.ts';
|
|
2
|
-
import { AgentInspectorPanel } from '../agent-inspector-panel.ts';
|
|
3
|
-
import { ThinkingPanel } from '../thinking-panel.ts';
|
|
4
|
-
import { ToolInspectorPanel } from '../tool-inspector-panel.ts';
|
|
5
|
-
import { WrfcPanel } from '../wrfc-panel.ts';
|
|
6
|
-
import { ProjectPlanningPanel } from '../project-planning-panel.ts';
|
|
7
|
-
import { WorkPlanPanel } from '../work-plan-panel.ts';
|
|
8
2
|
import type { ResolvedBuiltinPanelDeps } from './shared.ts';
|
|
9
|
-
import { requireUiServices } from './shared.ts';
|
|
10
3
|
|
|
4
|
+
// W6.1 (the purge): thinking, tools, inspector, and wrfc were registered here
|
|
5
|
+
// before the purge. thinking/tools were DELETE-disposition (no surviving
|
|
6
|
+
// human surface — thinking already renders inline in the transcript, tool
|
|
7
|
+
// results render inline plus per-node in Fleet); inspector/wrfc were
|
|
8
|
+
// RETIRE-INTO-FLEET (their live console is subsumed by the Fleet panel,
|
|
9
|
+
// operations.ts:84). See registerOperationsPanels for the fleet
|
|
10
|
+
// registration and .goodvibes/audit/2026-07-04-wave6-briefs.json (W6.1) for
|
|
11
|
+
// the full disposition map.
|
|
11
12
|
export function registerAgentPanels(manager: PanelManager, deps: ResolvedBuiltinPanelDeps): void {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
factory: () => new ThinkingPanel(requireUiServices(deps).events.turns),
|
|
21
|
-
});
|
|
13
|
+
// Compat: '/panel open agent-logs' and 'inspector' (and any saved
|
|
14
|
+
// layout/muscle memory) still resolve — redirected straight to fleet.
|
|
15
|
+
// Repointed from agent-logs->inspector (WO-110) now that inspector itself
|
|
16
|
+
// is retired; alias resolution is a single hop (PanelManager._resolveId),
|
|
17
|
+
// so this must point at the real surviving id, not at another alias.
|
|
18
|
+
manager.registerAlias('agent-logs', 'fleet');
|
|
19
|
+
manager.registerAlias('inspector', 'fleet');
|
|
20
|
+
manager.registerAlias('wrfc', 'fleet');
|
|
22
21
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
description: 'Chronological tool call inspector with expandable args/results and filtering',
|
|
29
|
-
preload: true,
|
|
30
|
-
retainOnClose: true,
|
|
31
|
-
factory: () => {
|
|
32
|
-
const ui = requireUiServices(deps);
|
|
33
|
-
return new ToolInspectorPanel(ui.events.tools, ui.events.turns);
|
|
34
|
-
},
|
|
35
|
-
});
|
|
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.)
|
|
43
|
-
manager.registerType({
|
|
44
|
-
id: 'inspector',
|
|
45
|
-
name: 'Inspector',
|
|
46
|
-
icon: 'I',
|
|
47
|
-
category: 'agent',
|
|
48
|
-
description: 'Live per-agent console: timeline, tool calls, WRFC/cost badges, pause/filter/follow, and cancel',
|
|
49
|
-
preload: true,
|
|
50
|
-
retainOnClose: true,
|
|
51
|
-
factory: () => {
|
|
52
|
-
const ui = requireUiServices(deps);
|
|
53
|
-
return new AgentInspectorPanel({
|
|
54
|
-
agentManager: ui.agents.agentManager,
|
|
55
|
-
agentMessageBus: ui.agents.agentMessageBus,
|
|
56
|
-
agentEvents: ui.events.agents,
|
|
57
|
-
workingDirectory: ui.environment.workingDirectory,
|
|
58
|
-
cancelAgent: (agentId: string) => ui.agents.agentManager.cancel(agentId),
|
|
59
|
-
requestRender: deps.requestRender,
|
|
60
|
-
});
|
|
61
|
-
},
|
|
62
|
-
});
|
|
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
|
-
|
|
68
|
-
manager.registerType({
|
|
69
|
-
id: 'wrfc',
|
|
70
|
-
name: 'WRFC',
|
|
71
|
-
icon: 'W',
|
|
72
|
-
category: 'agent',
|
|
73
|
-
description: 'WRFC chain view: write, review, fix, and confirm cycle status',
|
|
74
|
-
preload: true,
|
|
75
|
-
retainOnClose: true,
|
|
76
|
-
factory: () => {
|
|
77
|
-
const ui = requireUiServices(deps);
|
|
78
|
-
return new WrfcPanel(ui.events.workflows, {
|
|
79
|
-
controller: ui.agents.wrfcController,
|
|
80
|
-
cancelChain: (agentId: string) => ui.agents.agentManager.cancel(agentId),
|
|
81
|
-
});
|
|
82
|
-
},
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
manager.registerType({
|
|
86
|
-
id: 'work-plan',
|
|
87
|
-
name: 'Work Plan',
|
|
88
|
-
// WO-152: was 'L' (collided with panel-list).
|
|
89
|
-
icon: '◧',
|
|
90
|
-
category: 'agent',
|
|
91
|
-
description: 'Persistent workspace checklist for multi-step work and cross-session task tracking',
|
|
92
|
-
preload: true,
|
|
93
|
-
retainOnClose: true,
|
|
94
|
-
factory: () => new WorkPlanPanel(deps.workPlanStore),
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
manager.registerType({
|
|
98
|
-
id: 'project-planning',
|
|
99
|
-
name: 'Planning',
|
|
100
|
-
icon: 'P',
|
|
101
|
-
category: 'agent',
|
|
102
|
-
description: 'Passive project planning artifacts: readiness, questions, decisions, language, task graph, and agent handoff metadata',
|
|
103
|
-
preload: true,
|
|
104
|
-
retainOnClose: true,
|
|
105
|
-
factory: () => new ProjectPlanningPanel({
|
|
106
|
-
service: deps.projectPlanningService,
|
|
107
|
-
projectId: deps.projectPlanningProjectId,
|
|
108
|
-
requestRender: deps.requestRender,
|
|
109
|
-
submitAnswer: deps.submitPlanningAnswer,
|
|
110
|
-
dismissPlanning: deps.dismissPlanning,
|
|
111
|
-
}),
|
|
112
|
-
});
|
|
22
|
+
// W6.1 (the purge) — group B (WO-P): 'work-plan' and 'project-planning'
|
|
23
|
+
// migrated to the 'work-plan-modal' / 'planning-modal' config-modal surfaces.
|
|
24
|
+
// Their surfaces AND panel→modal redirects are registered centrally in
|
|
25
|
+
// registerBuiltinModals (builtin-modals.ts). Panel registrations retired here.
|
|
26
|
+
void deps;
|
|
113
27
|
}
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import type { PanelManager } from '../panel-manager.ts';
|
|
2
2
|
import { GitPanel } from '../git-panel.ts';
|
|
3
3
|
import { DiffPanel } from '../diff-panel.ts';
|
|
4
|
-
import { PlanDashboardPanel } from '../plan-dashboard-panel.ts';
|
|
5
4
|
import { CostTrackerPanel } from '../cost-tracker-panel.ts';
|
|
6
|
-
import { IntelligencePanel } from '../intelligence-panel.ts';
|
|
7
|
-
import { FileExplorerPanel } from '../file-explorer-panel.ts';
|
|
8
|
-
import { FilePreviewPanel } from '../file-preview-panel.ts';
|
|
9
|
-
import { SymbolOutlinePanel } from '../symbol-outline-panel.ts';
|
|
10
5
|
import type { ResolvedBuiltinPanelDeps } from './shared.ts';
|
|
11
6
|
import { requireUiServices, withUnconfiguredFallback } from './shared.ts';
|
|
12
7
|
|
|
8
|
+
// W6.1 (the purge): plan, intelligence, explorer, preview, and symbols were
|
|
9
|
+
// registered here before the purge. plan was RETIRE-INTO-FLEET (its
|
|
10
|
+
// execution-plan view is subsumed by Fleet — operations.ts:84); the other
|
|
11
|
+
// four were DELETE-disposition (no surviving human surface — intelligence's
|
|
12
|
+
// read-model still backs the surviving `/intelligence` CLI subcommands, see
|
|
13
|
+
// intelligence-runtime.ts; explorer/preview/symbols had no dedicated
|
|
14
|
+
// read-model to preserve). See .goodvibes/audit/2026-07-04-wave6-briefs.json
|
|
15
|
+
// (W6.1) for the full disposition map.
|
|
13
16
|
export function registerDevelopmentPanels(manager: PanelManager, deps: ResolvedBuiltinPanelDeps): void {
|
|
14
17
|
manager.registerType({
|
|
15
18
|
id: 'git',
|
|
@@ -26,19 +29,9 @@ export function registerDevelopmentPanels(manager: PanelManager, deps: ResolvedB
|
|
|
26
29
|
),
|
|
27
30
|
});
|
|
28
31
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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: '▤',
|
|
35
|
-
category: 'agent',
|
|
36
|
-
description: 'Active execution plan with phase progress and item status',
|
|
37
|
-
factory: () => {
|
|
38
|
-
const ui = requireUiServices(deps);
|
|
39
|
-
return new PlanDashboardPanel(ui.events.workflows, { planManager: deps.planManager });
|
|
40
|
-
},
|
|
41
|
-
});
|
|
32
|
+
// Compat: '/panel open plan' (and any saved layout/muscle memory) still
|
|
33
|
+
// resolves — redirected to fleet, which absorbs the execution-plan view.
|
|
34
|
+
manager.registerAlias('plan', 'fleet');
|
|
42
35
|
|
|
43
36
|
manager.registerType({
|
|
44
37
|
id: 'diff',
|
|
@@ -46,7 +39,7 @@ export function registerDevelopmentPanels(manager: PanelManager, deps: ResolvedB
|
|
|
46
39
|
icon: 'D',
|
|
47
40
|
category: 'development',
|
|
48
41
|
description: 'Unified diff view of agent file changes',
|
|
49
|
-
factory: () => new DiffPanel(requireUiServices(deps).environment.workingDirectory),
|
|
42
|
+
factory: () => new DiffPanel(requireUiServices(deps).environment.workingDirectory, deps.requestRender),
|
|
50
43
|
});
|
|
51
44
|
|
|
52
45
|
// WO-110: 'inspector' registration moved to builtin/agent.ts (category
|
|
@@ -73,52 +66,13 @@ export function registerDevelopmentPanels(manager: PanelManager, deps: ResolvedB
|
|
|
73
66
|
return new CostTrackerPanel(ui.events.turns, ui.events.agents, getOrchestratorUsage!, {
|
|
74
67
|
budgetThreshold,
|
|
75
68
|
getAgentStatus: (id) => ui.agents.agentManager.getStatus(id),
|
|
69
|
+
configAccess: {
|
|
70
|
+
get: (key) => deps.configManager.get(key as Parameters<typeof deps.configManager.get>[0]),
|
|
71
|
+
set: (key, value) => deps.configManager.set(key as Parameters<typeof deps.configManager.set>[0], value as never),
|
|
72
|
+
},
|
|
76
73
|
});
|
|
77
74
|
},
|
|
78
75
|
),
|
|
79
76
|
});
|
|
80
77
|
}
|
|
81
|
-
|
|
82
|
-
manager.registerType({
|
|
83
|
-
id: 'intelligence',
|
|
84
|
-
name: 'Intelligence',
|
|
85
|
-
icon: 'J',
|
|
86
|
-
category: 'development',
|
|
87
|
-
description: 'Workspace diagnostics, symbol search, hover, and completion readiness with recovery guidance',
|
|
88
|
-
factory: () => new IntelligencePanel(requireUiServices(deps).readModels.intelligence),
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
manager.registerType({
|
|
92
|
-
id: 'explorer',
|
|
93
|
-
name: 'Explorer',
|
|
94
|
-
icon: 'E',
|
|
95
|
-
category: 'development',
|
|
96
|
-
description: 'File system browser with keyboard navigation',
|
|
97
|
-
factory: () => {
|
|
98
|
-
const ui = requireUiServices(deps);
|
|
99
|
-
return new FileExplorerPanel(ui.environment.workingDirectory, ui.environment.workingDirectory);
|
|
100
|
-
},
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
manager.registerType({
|
|
104
|
-
id: 'preview',
|
|
105
|
-
name: 'Preview',
|
|
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: '◑',
|
|
111
|
-
category: 'development',
|
|
112
|
-
description: 'Syntax-highlighted file preview',
|
|
113
|
-
factory: () => new FilePreviewPanel(),
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
manager.registerType({
|
|
117
|
-
id: 'symbols',
|
|
118
|
-
name: 'Symbols',
|
|
119
|
-
icon: 'S',
|
|
120
|
-
category: 'development',
|
|
121
|
-
description: 'Symbol outline for the active file: functions, classes, and exports',
|
|
122
|
-
factory: () => new SymbolOutlinePanel(),
|
|
123
|
-
});
|
|
124
78
|
}
|
|
@@ -1,36 +1,12 @@
|
|
|
1
1
|
import type { PanelManager } from '../panel-manager.ts';
|
|
2
|
-
import {
|
|
3
|
-
import { KnowledgeGraphPanel } from '../knowledge-graph-panel.ts';
|
|
4
|
-
import { requireKnowledgeApi, withUnconfiguredFallback, type ResolvedBuiltinPanelDeps } from './shared.ts';
|
|
2
|
+
import type { ResolvedBuiltinPanelDeps } from './shared.ts';
|
|
5
3
|
|
|
4
|
+
// W6.1 (the purge) — group B: 'knowledge' and 'memory' migrated to the
|
|
5
|
+
// 'knowledge-modal' / 'memory-modal' config-modal surfaces. Both surfaces and
|
|
6
|
+
// their panel→modal redirects are registered centrally in registerBuiltinModals
|
|
7
|
+
// (src/panels/builtin-modals.ts). This registrar is intentionally empty
|
|
8
|
+
// post-migration, kept as a stable call site invoked from registerBuiltinPanels.
|
|
6
9
|
export function registerKnowledgePanels(manager: PanelManager, deps: ResolvedBuiltinPanelDeps): void {
|
|
7
|
-
manager
|
|
8
|
-
|
|
9
|
-
name: 'Knowledge',
|
|
10
|
-
icon: 'K',
|
|
11
|
-
category: 'agent',
|
|
12
|
-
description: 'Live SDK knowledge graph: nodes, sources, issue review queue, and search',
|
|
13
|
-
factory: () => new KnowledgeGraphPanel(requireKnowledgeApi(deps), () => manager.open('memory')),
|
|
14
|
-
});
|
|
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
|
-
{
|
|
20
|
-
const { memoryRegistry } = deps;
|
|
21
|
-
manager.registerType({
|
|
22
|
-
id: 'memory',
|
|
23
|
-
name: 'Memory',
|
|
24
|
-
icon: 'M',
|
|
25
|
-
category: 'agent',
|
|
26
|
-
description: 'Project memory: decisions, constraints, incidents, and patterns with provenance links',
|
|
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
|
-
),
|
|
34
|
-
});
|
|
35
|
-
}
|
|
10
|
+
void manager;
|
|
11
|
+
void deps;
|
|
36
12
|
}
|