anantham-v2 2.0.3 → 2.0.5

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 (66) hide show
  1. package/dist/bin/anantham.js +10 -1
  2. package/dist/bin/anantham.js.map +1 -1
  3. package/dist/cli/command-registry.d.ts.map +1 -1
  4. package/dist/cli/command-registry.js +178 -99
  5. package/dist/cli/command-registry.js.map +1 -1
  6. package/dist/domain/tui.d.ts +1 -1
  7. package/dist/domain/tui.d.ts.map +1 -1
  8. package/dist/domain/tui.js +1 -0
  9. package/dist/domain/tui.js.map +1 -1
  10. package/dist/persistence/index.d.ts +2 -0
  11. package/dist/persistence/index.d.ts.map +1 -1
  12. package/dist/persistence/index.js +2 -0
  13. package/dist/persistence/index.js.map +1 -1
  14. package/dist/persistence/model-catalog-cache.d.ts +92 -0
  15. package/dist/persistence/model-catalog-cache.d.ts.map +1 -0
  16. package/dist/persistence/model-catalog-cache.js +430 -0
  17. package/dist/persistence/model-catalog-cache.js.map +1 -0
  18. package/dist/persistence/openrouter-key-validator.d.ts +40 -0
  19. package/dist/persistence/openrouter-key-validator.d.ts.map +1 -0
  20. package/dist/persistence/openrouter-key-validator.js +183 -0
  21. package/dist/persistence/openrouter-key-validator.js.map +1 -0
  22. package/dist/persistence/token-metrics-manager.d.ts +8 -2
  23. package/dist/persistence/token-metrics-manager.d.ts.map +1 -1
  24. package/dist/persistence/token-metrics-manager.js +60 -7
  25. package/dist/persistence/token-metrics-manager.js.map +1 -1
  26. package/dist/persistence/user-config-manager.d.ts +33 -9
  27. package/dist/persistence/user-config-manager.d.ts.map +1 -1
  28. package/dist/persistence/user-config-manager.js +133 -11
  29. package/dist/persistence/user-config-manager.js.map +1 -1
  30. package/dist/tui/index.d.ts +1 -0
  31. package/dist/tui/index.d.ts.map +1 -1
  32. package/dist/tui/index.js +1 -0
  33. package/dist/tui/index.js.map +1 -1
  34. package/dist/tui/model-accordion-browser.d.ts +80 -0
  35. package/dist/tui/model-accordion-browser.d.ts.map +1 -0
  36. package/dist/tui/model-accordion-browser.js +487 -0
  37. package/dist/tui/model-accordion-browser.js.map +1 -0
  38. package/dist/tui/model-catalog-cache.d.ts +7 -0
  39. package/dist/tui/model-catalog-cache.d.ts.map +1 -0
  40. package/dist/tui/model-catalog-cache.js +7 -0
  41. package/dist/tui/model-catalog-cache.js.map +1 -0
  42. package/dist/tui/teamwork-preview-canvas.d.ts +63 -0
  43. package/dist/tui/teamwork-preview-canvas.d.ts.map +1 -0
  44. package/dist/tui/teamwork-preview-canvas.js +294 -0
  45. package/dist/tui/teamwork-preview-canvas.js.map +1 -0
  46. package/dist/tui/terminal-layout.d.ts +56 -2
  47. package/dist/tui/terminal-layout.d.ts.map +1 -1
  48. package/dist/tui/terminal-layout.js +258 -22
  49. package/dist/tui/terminal-layout.js.map +1 -1
  50. package/dist/tui/terminal-logo-renderer.d.ts +63 -0
  51. package/dist/tui/terminal-logo-renderer.d.ts.map +1 -0
  52. package/dist/tui/terminal-logo-renderer.js +304 -0
  53. package/dist/tui/terminal-logo-renderer.js.map +1 -0
  54. package/dist/tui/token-usage-tracker.d.ts +8 -0
  55. package/dist/tui/token-usage-tracker.d.ts.map +1 -0
  56. package/dist/tui/token-usage-tracker.js +8 -0
  57. package/dist/tui/token-usage-tracker.js.map +1 -0
  58. package/dist/tui/tui-controller.d.ts +13 -0
  59. package/dist/tui/tui-controller.d.ts.map +1 -1
  60. package/dist/tui/tui-controller.js +116 -6
  61. package/dist/tui/tui-controller.js.map +1 -1
  62. package/dist/tui/tui-renderer.d.ts +3 -1
  63. package/dist/tui/tui-renderer.d.ts.map +1 -1
  64. package/dist/tui/tui-renderer.js +31 -41
  65. package/dist/tui/tui-renderer.js.map +1 -1
  66. package/package.json +1 -1
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Anantham V2 — Multi-Agent ASCII Orchestration Topology Canvas.
3
+ * Renders rich ASCII multi-agent orchestration topology (/teamwork-preview)
4
+ * for interactive TUI viewports and headless CLI execution.
5
+ */
6
+ export type AgentState = "IDLE" | "PLANNING" | "EXECUTING";
7
+ export interface AgentTopologyNode {
8
+ id: string;
9
+ name: string;
10
+ role: string;
11
+ state: AgentState;
12
+ worktree?: string;
13
+ }
14
+ export interface OrchestrationMetricsData {
15
+ workersCount: number;
16
+ fencingToken: string;
17
+ epoch: number;
18
+ depthWaves: number;
19
+ leaseHeld: string;
20
+ ttlRemaining: string;
21
+ heartbeatAgo: string;
22
+ worktrees: string[];
23
+ durability?: string;
24
+ security?: string;
25
+ }
26
+ export interface CanvasRenderOptions {
27
+ ansi?: boolean;
28
+ nodes?: AgentTopologyNode[];
29
+ metrics?: Partial<OrchestrationMetricsData>;
30
+ }
31
+ export declare class TeamworkPreviewCanvas {
32
+ static readonly DEFAULT_NODES: AgentTopologyNode[];
33
+ static readonly DEFAULT_METRICS: OrchestrationMetricsData;
34
+ /**
35
+ * Format active state pill with TrueColor or clean plain-text fallback.
36
+ * - IDLE: Emerald (\x1b[38;2;0;242;152m)
37
+ * - PLANNING: Amber (\x1b[38;2;255;154;60m)
38
+ * - EXECUTING: Cyan (\x1b[38;2;0;242;254m)
39
+ */
40
+ static formatPill(state: AgentState, ansi?: boolean): string;
41
+ /**
42
+ * Render lines formatted for TUI viewport.
43
+ * Standard 2-column topology fits in 78 columns and <= 17 rows.
44
+ * When width < 76, switches adaptively to a single-column vertical pipeline.
45
+ */
46
+ static render(width?: number, _height?: number, options?: CanvasRenderOptions): string[];
47
+ /**
48
+ * Render multi-line string preserving the two test anchors:
49
+ * - "❖ Teamwork Preview Harness Status: ONLINE"
50
+ * - "Parallel Workers : 4"
51
+ * for backward compatibility with existing integration tests and headless CLI execution.
52
+ */
53
+ static renderText(options?: CanvasRenderOptions): string;
54
+ /**
55
+ * 78-column, 16-row 2-column grid multi-agent topology.
56
+ */
57
+ private static renderGridTopology;
58
+ /**
59
+ * Vertical pipeline topology when viewport width < 76 columns.
60
+ */
61
+ private static renderVerticalPipeline;
62
+ }
63
+ //# sourceMappingURL=teamwork-preview-canvas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teamwork-preview-canvas.d.ts","sourceRoot":"","sources":["../../src/tui/teamwork-preview-canvas.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,CAAC;AAE3D,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,CAAC;CAC7C;AAED,qBAAa,qBAAqB;IAChC,gBAAuB,aAAa,EAAE,iBAAiB,EAAE,CA6BvD;IAEF,gBAAuB,eAAe,EAAE,wBAAwB,CAW9D;IAEF;;;;;OAKG;WACW,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,GAAE,OAAc,GAAG,MAAM;IAazE;;;;OAIG;WACW,MAAM,CAClB,KAAK,GAAE,MAAW,EAClB,OAAO,GAAE,MAAW,EACpB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,MAAM,EAAE;IAUX;;;;;OAKG;WACW,UAAU,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM;IAoB/D;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAqKjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;CAoFtC"}
@@ -0,0 +1,294 @@
1
+ /**
2
+ * Anantham V2 — Multi-Agent ASCII Orchestration Topology Canvas.
3
+ * Renders rich ASCII multi-agent orchestration topology (/teamwork-preview)
4
+ * for interactive TUI viewports and headless CLI execution.
5
+ */
6
+ import { AnsiGradient } from "./ansi-gradient.js";
7
+ import { TuiSanitizer } from "./tui-sanitizer.js";
8
+ export class TeamworkPreviewCanvas {
9
+ static DEFAULT_NODES = [
10
+ {
11
+ id: "architect",
12
+ name: "ARCHITECT",
13
+ role: "Wave Plan",
14
+ state: "PLANNING",
15
+ worktree: "/wt/architect",
16
+ },
17
+ {
18
+ id: "coder",
19
+ name: "CODER",
20
+ role: "Coder",
21
+ state: "EXECUTING",
22
+ worktree: "/wt/coder-1, 2",
23
+ },
24
+ {
25
+ id: "reviewer",
26
+ name: "REVIEWER",
27
+ role: "Gate Audits",
28
+ state: "IDLE",
29
+ worktree: "/wt/reviewer",
30
+ },
31
+ {
32
+ id: "sre",
33
+ name: "SRE / AUDITOR",
34
+ role: "ToolGW/RPO-0",
35
+ state: "IDLE",
36
+ worktree: "/wt/sre",
37
+ },
38
+ ];
39
+ static DEFAULT_METRICS = {
40
+ workersCount: 4,
41
+ fencingToken: "0x04F2",
42
+ epoch: 14,
43
+ depthWaves: 3,
44
+ leaseHeld: "4/4 held",
45
+ ttlRemaining: "284s / 300s",
46
+ heartbeatAgo: "1.2s ago",
47
+ worktrees: ["/wt/architect", "/wt/coder-1", "/wt/coder-2", "/wt/sre"],
48
+ durability: "SQLite WAL (synchronous = FULL, RPO-0)",
49
+ security: "ToolGateway sandboxed",
50
+ };
51
+ /**
52
+ * Format active state pill with TrueColor or clean plain-text fallback.
53
+ * - IDLE: Emerald (\x1b[38;2;0;242;152m)
54
+ * - PLANNING: Amber (\x1b[38;2;255;154;60m)
55
+ * - EXECUTING: Cyan (\x1b[38;2;0;242;254m)
56
+ */
57
+ static formatPill(state, ansi = true) {
58
+ switch (state) {
59
+ case "IDLE":
60
+ return ansi ? "\x1b[38;2;0;242;152m● [IDLE]\x1b[0m" : "● [IDLE]";
61
+ case "PLANNING":
62
+ return ansi ? "\x1b[38;2;255;154;60m▲ [PLANNING]\x1b[0m" : "▲ [PLANNING]";
63
+ case "EXECUTING":
64
+ return ansi ? "\x1b[38;2;0;242;254m⚡ [EXECUTING]\x1b[0m" : "⚡ [EXECUTING]";
65
+ default:
66
+ return `[${state}]`;
67
+ }
68
+ }
69
+ /**
70
+ * Render lines formatted for TUI viewport.
71
+ * Standard 2-column topology fits in 78 columns and <= 17 rows.
72
+ * When width < 76, switches adaptively to a single-column vertical pipeline.
73
+ */
74
+ static render(width = 80, _height = 24, options) {
75
+ const isAnsi = options?.ansi ?? AnsiGradient.isTrueColorSupported();
76
+ if (width < 76) {
77
+ return this.renderVerticalPipeline(width, { ...options, ansi: isAnsi });
78
+ }
79
+ return this.renderGridTopology({ ...options, ansi: isAnsi });
80
+ }
81
+ /**
82
+ * Render multi-line string preserving the two test anchors:
83
+ * - "❖ Teamwork Preview Harness Status: ONLINE"
84
+ * - "Parallel Workers : 4"
85
+ * for backward compatibility with existing integration tests and headless CLI execution.
86
+ */
87
+ static renderText(options) {
88
+ const isAnsi = options?.ansi ?? AnsiGradient.isTrueColorSupported();
89
+ const canvasLines = this.render(80, 24, { ...options, ansi: isAnsi });
90
+ const lines = [
91
+ "❖ Teamwork Preview Harness Status: ONLINE",
92
+ " Engine : Anantham V2 Autonomous Agent Coordinator",
93
+ " Parallel Workers : 4 active worker execution slots",
94
+ " Task Partitioning: Wave DAG with generation-fenced leases",
95
+ " Durability : SQLite WAL (synchronous = FULL, RPO-0)",
96
+ " Safety Boundary : ToolGateway sandboxed capability routing",
97
+ "",
98
+ ...canvasLines,
99
+ "",
100
+ "Autonomous team preview ready. Submit prompt tasks via interactive CLI or TUI.",
101
+ ];
102
+ return lines.join("\n");
103
+ }
104
+ /**
105
+ * 78-column, 16-row 2-column grid multi-agent topology.
106
+ */
107
+ static renderGridTopology(options) {
108
+ const ansi = options?.ansi ?? false;
109
+ const nodes = options?.nodes ?? this.DEFAULT_NODES;
110
+ const metrics = {
111
+ ...this.DEFAULT_METRICS,
112
+ ...(options?.metrics ?? {}),
113
+ };
114
+ const architect = nodes.find((n) => n.id === "architect") ?? this.DEFAULT_NODES[0];
115
+ const coder = nodes.find((n) => n.id === "coder") ?? this.DEFAULT_NODES[1];
116
+ const reviewer = nodes.find((n) => n.id === "reviewer") ?? this.DEFAULT_NODES[2];
117
+ const sre = nodes.find((n) => n.id === "sre") ?? this.DEFAULT_NODES[3];
118
+ // Color tokens
119
+ const cCyan = ansi ? "\x1b[38;2;0;242;254m" : "";
120
+ const cAmber = ansi ? "\x1b[38;2;255;154;60m" : "";
121
+ const cEmerald = ansi ? "\x1b[38;2;0;242;152m" : "";
122
+ const cDim = ansi ? "\x1b[90m" : "";
123
+ const cBold = ansi ? "\x1b[1m" : "";
124
+ const cReset = ansi ? "\x1b[0m" : "";
125
+ const pillArch = this.formatPill(architect.state, ansi);
126
+ const pillCoder = this.formatPill(coder.state, ansi);
127
+ const pillRev = this.formatPill(reviewer.state, ansi);
128
+ const pillSre = this.formatPill(sre.state, ansi);
129
+ const lines = [];
130
+ // Helper to wrap 74 visible chars into a 78-char row
131
+ const row = (styledContent, plainLen) => {
132
+ const pad = Math.max(0, 74 - plainLen);
133
+ return `${cCyan}│${cReset} ${styledContent}${" ".repeat(pad)} ${cCyan}│${cReset}`;
134
+ };
135
+ // Row 1: Outer Header (78 chars)
136
+ // "╭─" (2) + " ❖ MULTI-AGENT ORCHESTRATION TOPOLOGY " (38) + "─".repeat(37) (37) + "╮" (1) = 78
137
+ const titleText = " ❖ MULTI-AGENT ORCHESTRATION TOPOLOGY ";
138
+ const dashesTop = "─".repeat(37);
139
+ lines.push(`${cCyan}╭─${cBold}${titleText}${cReset}${cCyan}${dashesTop}╮${cReset}`);
140
+ // Row 2: Top Box Top Borders & Wave DAG Delegation Corridor
141
+ // Left: ┌─[ ARCHITECT ]──────────┐ (26)
142
+ // Middle: ── Wave DAG Del ──► (22)
143
+ // Right: ┌─[ CODER ]──────────────┐ (26)
144
+ // Total = 26 + 22 + 26 = 74
145
+ const topArchBox = `${cAmber}┌─[ ARCHITECT ]──────────┐${cReset}`;
146
+ const topCoderBox = `${cCyan}┌─[ CODER ]──────────────┐${cReset}`;
147
+ const midWaveDag = `${cDim} ── Wave DAG Del ──► ${cReset}`;
148
+ lines.push(row(`${topArchBox}${midWaveDag}${topCoderBox}`, 74));
149
+ // Row 3: State Pills & Task Contracts Corridor
150
+ // Inside Arch (24): " ▲ [PLANNING] Wave Plan " -> 1 + 12 + 1 + 9 + 1 = 24
151
+ // Inside Coder (24): " ⚡ [EXECUTING] Coder " -> 1 + 13 + 1 + 5 + 4 = 24
152
+ // Middle (22): " ◄── Task Contracts " (22)
153
+ const row3ArchInside = ` ${pillArch} ${architect.role.padEnd(9)} `;
154
+ const row3CoderInside = ` ${pillCoder} ${coder.role.padEnd(5)} `;
155
+ const midTaskContracts = `${cDim} ◄── Task Contracts ${cReset}`;
156
+ lines.push(row(`${cAmber}│${cReset}${row3ArchInside}${cAmber}│${cReset}${midTaskContracts}${cCyan}│${cReset}${row3CoderInside}${cCyan}│${cReset}`, 74));
157
+ // Row 4: Worktrees
158
+ // Inside Arch (24): " Tree: /wt/architect " (7 + 16 + 1 = 24)
159
+ // Inside Coder (24): " Tree: /wt/coder-1, 2 " (7 + 16 + 1 = 24)
160
+ // Middle (22): 22 spaces
161
+ const treeArch = ` Tree: ${(architect.worktree ?? "/wt/architect").padEnd(16)} `;
162
+ const treeCoder = ` Tree: ${(coder.worktree ?? "/wt/coder-1, 2").padEnd(16)} `;
163
+ const midSpace22 = " ".repeat(22);
164
+ lines.push(row(`${cAmber}│${cReset}${cDim}${treeArch}${cReset}${cAmber}│${cReset}${midSpace22}${cCyan}│${cReset}${cDim}${treeCoder}${cReset}${cCyan}│${cReset}`, 74));
165
+ // Row 5: Top Box Bottom Borders (74)
166
+ const botArchBox = `${cAmber}└────────────────────────┘${cReset}`;
167
+ const botCoderBox = `${cCyan}└────────────────────────┘${cReset}`;
168
+ lines.push(row(`${botArchBox}${midSpace22}${botCoderBox}`, 74));
169
+ // Row 6: Vertical Routing Paths (74)
170
+ // Left (26): " ▲ Health & Fencing Token" (26)
171
+ // Mid (22): 22 spaces
172
+ // Right (26): " Code Diffs ▼ Critique ▲" (26)
173
+ const routeLeft = `${cEmerald} ▲ Health & Fencing Token${cReset}`;
174
+ const routeRight = `${cCyan} Code Diffs ${cReset}${cDim}▼${cReset}${cAmber} Critique ▲${cReset}`;
175
+ lines.push(row(`${routeLeft}${midSpace22}${routeRight}`, 74));
176
+ // Row 7: Bottom Box Top Borders (74)
177
+ // Left: ┌─[ SRE / AUDITOR ]──────┐ (26)
178
+ // Right: ┌─[ REVIEWER ]───────────┐ (26)
179
+ const topSreBox = `${cEmerald}┌─[ SRE / AUDITOR ]──────┐${cReset}`;
180
+ const topRevBox = `${cAmber}┌─[ REVIEWER ]───────────┐${cReset}`;
181
+ lines.push(row(`${topSreBox}${midSpace22}${topRevBox}`, 74));
182
+ // Row 8: Bottom State Pills & Verified Checkpoint Corridor (74)
183
+ // Inside SRE (24): " ● [IDLE] ToolGW/RPO-0 " (24)
184
+ // Middle (22): " ◄── Verified Chkpt " (22)
185
+ // Inside Rev (24): " ● [IDLE] Gate Audits " (24)
186
+ const row8SreInside = ` ${pillSre} ${sre.role.padEnd(12)} `;
187
+ const midVerified = `${cDim} ◄── Verified Chkpt ${cReset}`;
188
+ const row8RevInside = ` ${pillRev} ${reviewer.role.padEnd(11)} `;
189
+ lines.push(row(`${cEmerald}│${cReset}${row8SreInside}${cEmerald}│${cReset}${midVerified}${cAmber}│${cReset}${row8RevInside}${cAmber}│${cReset}`, 74));
190
+ // Row 9: Worktrees & Policy Gates Corridor (74)
191
+ // Inside SRE (24): " Tree: /wt/sre " (7 + 16 + 1 = 24)
192
+ // Middle (22): " ── Policy Gates ──► " (22)
193
+ // Inside Rev (24): " Tree: /wt/reviewer " (7 + 16 + 1 = 24)
194
+ const treeSre = ` Tree: ${(sre.worktree ?? "/wt/sre").padEnd(16)} `;
195
+ const midPolicy = `${cDim} ── Policy Gates ──► ${cReset}`;
196
+ const treeRev = ` Tree: ${(reviewer.worktree ?? "/wt/reviewer").padEnd(16)} `;
197
+ lines.push(row(`${cEmerald}│${cReset}${cDim}${treeSre}${cReset}${cEmerald}│${cReset}${midPolicy}${cAmber}│${cReset}${cDim}${treeRev}${cReset}${cAmber}│${cReset}`, 74));
198
+ // Row 10: Bottom Box Bottom Borders (74)
199
+ const botSreBox = `${cEmerald}└────────────────────────┘${cReset}`;
200
+ const botRevBox = `${cAmber}└────────────────────────┘${cReset}`;
201
+ lines.push(row(`${botSreBox}${midSpace22}${botRevBox}`, 74));
202
+ // Row 11: Summary Metrics Divider (78 chars)
203
+ // "├─" (2) + " SUMMARY METRICS " (17) + "─".repeat(58) (58) + "┤" (1) = 78
204
+ const dashMetrics = "─".repeat(58);
205
+ lines.push(`${cCyan}├─${cBold} SUMMARY METRICS ${cReset}${cCyan}${dashMetrics}┤${cReset}`);
206
+ // Row 12: Worktrees Metric (78 chars)
207
+ const wtStr = metrics.worktrees.join(", ");
208
+ const m1Text = `Worktrees : ${metrics.workersCount} active [${wtStr}]`;
209
+ const m1Plain = m1Text.length > 74 ? m1Text.slice(0, 74) : m1Text;
210
+ lines.push(row(`${cBold}${m1Plain}${cReset}`, m1Plain.length));
211
+ // Row 13: Wave DAG Fencing Metric (78 chars)
212
+ const m2Text = `Wave DAG : Token #${metrics.fencingToken} (Fence: ACTIVE | Epoch: ${metrics.epoch} | Depth: ${metrics.depthWaves} waves)`;
213
+ const m2Plain = m2Text.length > 74 ? m2Text.slice(0, 74) : m2Text;
214
+ lines.push(row(`${cDim}${m2Plain}${cReset}`, m2Plain.length));
215
+ // Row 14: Lease Durations Metric (78 chars)
216
+ const m3Text = `Leases : ${metrics.leaseHeld} (TTL: ${metrics.ttlRemaining} | Heartbeat: ${metrics.heartbeatAgo} | Drift: 0ms)`;
217
+ const m3Plain = m3Text.length > 74 ? m3Text.slice(0, 74) : m3Text;
218
+ lines.push(row(`${cDim}${m3Plain}${cReset}`, m3Plain.length));
219
+ // Row 15: Durability & Security Metric (78 chars)
220
+ const m4Text = `Durability: ${metrics.durability ?? "SQLite WAL (synchronous = FULL, RPO-0)"} | ${metrics.security ?? "ToolGateway sandboxed"}`;
221
+ const m4Plain = m4Text.length > 74 ? m4Text.slice(0, 74) : m4Text;
222
+ lines.push(row(`${cDim}${m4Plain}${cReset}`, m4Plain.length));
223
+ // Row 16: Bottom Border (78 chars)
224
+ // "╰" (1) + "─".repeat(76) (76) + "╯" (1) = 78
225
+ const botDash = "─".repeat(76);
226
+ lines.push(`${cCyan}╰${botDash}╯${cReset}`);
227
+ return lines;
228
+ }
229
+ /**
230
+ * Vertical pipeline topology when viewport width < 76 columns.
231
+ */
232
+ static renderVerticalPipeline(width, options) {
233
+ const ansi = options?.ansi ?? false;
234
+ const nodes = options?.nodes ?? this.DEFAULT_NODES;
235
+ const metrics = {
236
+ ...this.DEFAULT_METRICS,
237
+ ...(options?.metrics ?? {}),
238
+ };
239
+ const cCyan = ansi ? "\x1b[38;2;0;242;254m" : "";
240
+ const cAmber = ansi ? "\x1b[38;2;255;154;60m" : "";
241
+ const cEmerald = ansi ? "\x1b[38;2;0;242;152m" : "";
242
+ const cDim = ansi ? "\x1b[90m" : "";
243
+ const cBold = ansi ? "\x1b[1m" : "";
244
+ const cReset = ansi ? "\x1b[0m" : "";
245
+ const boxW = Math.max(30, Math.min(width - 2, 42));
246
+ const innerW = boxW - 2;
247
+ const lines = [];
248
+ lines.push(`${cCyan}╭─${cBold} TOPOLOGY PIPELINE ${cReset}${cCyan}${"─".repeat(Math.max(0, boxW - 21))}╮${cReset}`);
249
+ for (let i = 0; i < nodes.length; i++) {
250
+ const node = nodes[i];
251
+ const pill = this.formatPill(node.state, ansi);
252
+ const color = node.id === "architect" ? cAmber : node.id === "coder" ? cCyan : cEmerald;
253
+ // Node Box Header
254
+ const headTitle = `[ ${node.name} ]`;
255
+ const padHead = Math.max(0, innerW - headTitle.length - 2);
256
+ lines.push(`${color}┌─${cBold}${headTitle}${cReset}${color}${"─".repeat(padHead)}┐${cReset}`);
257
+ // Node Box Body
258
+ const stateLine = ` State: ${pill}`;
259
+ const cleanStateLen = TuiSanitizer.stripAnsi(stateLine).length;
260
+ lines.push(`${color}│${cReset}${stateLine}${" ".repeat(Math.max(0, innerW - cleanStateLen))}${color}│${cReset}`);
261
+ const roleLine = ` Role : ${node.role}`;
262
+ lines.push(`${color}│${cReset}${roleLine.padEnd(innerW)}${color}│${cReset}`);
263
+ if (node.worktree) {
264
+ const wtLine = ` Tree : ${node.worktree}`;
265
+ lines.push(`${color}│${cReset}${cDim}${wtLine.padEnd(innerW)}${cReset}${color}│${cReset}`);
266
+ }
267
+ // Route transition to next node
268
+ if (i < nodes.length - 1) {
269
+ lines.push(`${color}└─────────────┬───────────┘${cReset}`);
270
+ const routeLabel = i === 0
271
+ ? "Wave DAG Delegation ──►"
272
+ : i === 1
273
+ ? "Code Diffs / Review ──►"
274
+ : "Verified Checkpoint ──►";
275
+ lines.push(`${cDim} │ ${routeLabel}${cReset}`);
276
+ lines.push(`${cDim} ▼${cReset}`);
277
+ }
278
+ else {
279
+ lines.push(`${color}└─────────────────────────┘${cReset}`);
280
+ }
281
+ }
282
+ // Compact Summary Metrics
283
+ lines.push(`${cCyan}├─${cBold} METRICS ${cReset}${cCyan}${"─".repeat(Math.max(0, boxW - 11))}┤${cReset}`);
284
+ const m1 = ` Workers: ${metrics.workersCount} active | Token #${metrics.fencingToken}`;
285
+ const m1Clean = m1.length > innerW ? m1.slice(0, innerW) : m1.padEnd(innerW);
286
+ lines.push(`${cCyan}│${cReset}${m1Clean}${cCyan}│${cReset}`);
287
+ const m2 = ` Leases : ${metrics.leaseHeld} (TTL: ${metrics.ttlRemaining})`;
288
+ const m2Clean = m2.length > innerW ? m2.slice(0, innerW) : m2.padEnd(innerW);
289
+ lines.push(`${cCyan}│${cReset}${m2Clean}${cCyan}│${cReset}`);
290
+ lines.push(`${cCyan}╰${"─".repeat(boxW - 2)}╯${cReset}`);
291
+ return lines;
292
+ }
293
+ }
294
+ //# sourceMappingURL=teamwork-preview-canvas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teamwork-preview-canvas.js","sourceRoot":"","sources":["../../src/tui/teamwork-preview-canvas.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,25 @@ export interface TabItem {
11
11
  mode: TuiViewMode;
12
12
  active: boolean;
13
13
  }
14
+ export interface AntigravityHeaderOptions {
15
+ status?: string;
16
+ projectId?: string;
17
+ sessionId?: string;
18
+ dimensions?: TuiDimensions;
19
+ width?: number;
20
+ activeModel?: string;
21
+ gateway?: string;
22
+ logoPath?: string;
23
+ brandColor?: string;
24
+ }
25
+ export interface PromptBarOptions {
26
+ width: number;
27
+ commandPrompt?: string;
28
+ isCommandMode?: boolean;
29
+ cursorPosition?: number;
30
+ bottomRule?: boolean;
31
+ ruleChar?: string;
32
+ }
14
33
  /**
15
34
  * ANSI Terminal Layout & Box Drawing Engine.
16
35
  * PRD Part 2 Section 186.
@@ -70,13 +89,48 @@ export declare class TerminalLayout {
70
89
  */
71
90
  static renderStatusBar(status: string, projectId: string | undefined, sessionId: string | undefined, dimensions: TuiDimensions): string;
72
91
  /**
73
- * Render Antigravity Header with coiled infinity serpent branding & status pill.
92
+ * Render Antigravity Header with coiled infinity serpent branding, dock layout, and status pill.
74
93
  */
75
- static renderAntigravityHeader(status: string, projectId: string | undefined, sessionId: string | undefined, dimensions: TuiDimensions, activeModel?: string): string[];
94
+ static renderAntigravityHeader(options: AntigravityHeaderOptions): string[];
95
+ static renderAntigravityHeader(status: string, projectId?: string, sessionId?: string, dimensions?: TuiDimensions, activeModel?: string): string[];
76
96
  /**
77
97
  * Render horizontal divider.
78
98
  */
79
99
  static renderDivider(width: number, char?: string): string;
100
+ /**
101
+ * Helper to resolve command prompt prefix and suffix decorations and their visible lengths.
102
+ * Shared between renderPromptBar and getPromptCursorCol to guarantee zero layout drift.
103
+ */
104
+ static getPromptDecorations(width: number, commandPrompt: string): {
105
+ prefix: string;
106
+ suffix: string;
107
+ visPrefixLen: number;
108
+ visSuffixLen: number;
109
+ isUltraNarrow: boolean;
110
+ isNarrow: boolean;
111
+ isSlash: boolean;
112
+ };
113
+ /**
114
+ * Render Antigravity Prompt Bar framed by divider rule lines.
115
+ * Preserves exact row indexing and bottom-line indexing for terminal stability.
116
+ */
117
+ static renderPromptBar(options: PromptBarOptions): string[];
118
+ /**
119
+ * Frame prompt text with an upper divider rule, preserving prompt as the final line.
120
+ */
121
+ static framePromptLine(promptText: string, width: number, char?: string): string[];
122
+ /**
123
+ * Helper to calculate the exact 1-based terminal row index for the prompt line.
124
+ * Guarantees cursor positioning does not point to a bottom divider rule.
125
+ */
126
+ static getPromptRowIndex(totalLines: number, hasBottomRule?: boolean): number;
127
+ /**
128
+ * Helper to calculate the exact 1-based terminal column index for the cursor.
129
+ * Strips ANSI sequences from prefix and suffix to prevent ANSI offset drift.
130
+ * Strictly tracks visible display characters, accounts for horizontal ellipsis scrolling,
131
+ * and clamps coordinates to [1, width].
132
+ */
133
+ static getPromptCursorCol(width: number, commandPrompt: string, cursorPosition: number, isCommandMode: boolean): number;
80
134
  /**
81
135
  * Render formatted 2-column table with aligned headers.
82
136
  */
@@ -1 +1 @@
1
- {"version":3,"file":"terminal-layout.d.ts","sourceRoot":"","sources":["../../src/tui/terminal-layout.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAExE,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;CAC/C;AAED,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,qBAAa,cAAc;IACzB,gBAAuB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAwC5B;IAEF;;OAEG;WACW,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,UAAe,GAAG,MAAM,EAAE;IA0C1E;;OAEG;WACW,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAalE;;OAEG;WACW,eAAe,CAC3B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,UAAU,EAAE,aAAa,GACxB,MAAM;IAeT;;OAEG;WACW,uBAAuB,CACnC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,UAAU,EAAE,aAAa,EACzB,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,EAAE;IAoCX;;OAEG;WACW,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,SAAM,GAAG,MAAM;IAI9D;;OAEG;WACW,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;CAgB9F"}
1
+ {"version":3,"file":"terminal-layout.d.ts","sourceRoot":"","sources":["../../src/tui/terminal-layout.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAExE,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;CAC/C;AAED,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,qBAAa,cAAc;IACzB,gBAAuB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAwC5B;IAEF;;OAEG;WACW,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,UAAe,GAAG,MAAM,EAAE;IA0C1E;;OAEG;WACW,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAalE;;OAEG;WACW,eAAe,CAC3B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,UAAU,EAAE,aAAa,GACxB,MAAM;IAeT;;OAEG;WACW,uBAAuB,CAAC,OAAO,EAAE,wBAAwB,GAAG,MAAM,EAAE;WACpE,uBAAuB,CACnC,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,aAAa,EAC1B,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,EAAE;IA2IX;;OAEG;WACW,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,SAAM,GAAG,MAAM;IAI9D;;;OAGG;WACW,oBAAoB,CAChC,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,GACpB;QACD,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,OAAO,CAAC;QACvB,QAAQ,EAAE,OAAO,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;KAClB;IA2BD;;;OAGG;WACW,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,EAAE;IAoElE;;OAEG;WACW,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,SAAM,GAAG,MAAM,EAAE;IAOtF;;;OAGG;WACW,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,UAAQ,GAAG,MAAM;IAIlF;;;;;OAKG;WACW,kBAAkB,CAC9B,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,OAAO,GACrB,MAAM;IA0BT;;OAEG;WACW,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;CAgB9F"}