@kenkaiiii/ggcoder 5.75.1 → 5.77.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 (133) hide show
  1. package/README.md +56 -40
  2. package/dist/app-sidecar/auth-routes.js +4 -1
  3. package/dist/app-sidecar/auth-routes.js.map +1 -1
  4. package/dist/app-sidecar/repo-polls.d.ts +5 -2
  5. package/dist/app-sidecar/repo-polls.js +20 -0
  6. package/dist/app-sidecar/repo-polls.js.map +1 -1
  7. package/dist/app-sidecar/route-context.d.ts +2 -0
  8. package/dist/app-sidecar.js +30 -0
  9. package/dist/app-sidecar.js.map +1 -1
  10. package/dist/chat-agents/jiwa.js +2 -0
  11. package/dist/chat-agents/jiwa.js.map +1 -1
  12. package/dist/chat-agents/memory.js +2 -0
  13. package/dist/chat-agents/memory.js.map +1 -1
  14. package/dist/cli/auth.js +13 -9
  15. package/dist/cli/auth.js.map +1 -1
  16. package/dist/cli.js +8 -9
  17. package/dist/cli.js.map +1 -1
  18. package/dist/core/checklist-prompt.d.ts +9 -2
  19. package/dist/core/checklist-prompt.js +26 -7
  20. package/dist/core/checklist-prompt.js.map +1 -1
  21. package/dist/core/checklist-snapshot.js +1 -1
  22. package/dist/core/checklist-snapshot.js.map +1 -1
  23. package/dist/core/checklist-store.d.ts +5 -1
  24. package/dist/core/checklist-store.js +35 -4
  25. package/dist/core/checklist-store.js.map +1 -1
  26. package/dist/core/event-bus.d.ts +1 -1
  27. package/dist/core/event-bus.js +39 -13
  28. package/dist/core/event-bus.js.map +1 -1
  29. package/dist/core/extensions/plugin-bundles.js +4 -2
  30. package/dist/core/extensions/plugin-bundles.js.map +1 -1
  31. package/dist/core/hashline.d.ts +10 -8
  32. package/dist/core/hashline.js.map +1 -1
  33. package/dist/core/mcp/client.js +2 -0
  34. package/dist/core/mcp/client.js.map +1 -1
  35. package/dist/core/mcp/loopback.d.ts +2 -2
  36. package/dist/core/mcp/loopback.js +2 -2
  37. package/dist/core/mcp/shared-pool.js +4 -3
  38. package/dist/core/mcp/shared-pool.js.map +1 -1
  39. package/dist/core/persistent-shell.js +2 -1
  40. package/dist/core/persistent-shell.js.map +1 -1
  41. package/dist/core/process-manager.js +9 -1
  42. package/dist/core/process-manager.js.map +1 -1
  43. package/dist/core/project-health-scan.d.ts +109 -0
  44. package/dist/core/project-health-scan.js +673 -0
  45. package/dist/core/project-health-scan.js.map +1 -0
  46. package/dist/core/project-health-score.d.ts +41 -0
  47. package/dist/core/project-health-score.js +257 -0
  48. package/dist/core/project-health-score.js.map +1 -0
  49. package/dist/core/prompt-commands.js +15 -2
  50. package/dist/core/prompt-commands.js.map +1 -1
  51. package/dist/core/session-manager.js.map +1 -1
  52. package/dist/core/session-storage.d.ts +1 -0
  53. package/dist/core/session-storage.js +1 -1
  54. package/dist/core/session-storage.js.map +1 -1
  55. package/dist/core/subagent-manager.js +11 -6
  56. package/dist/core/subagent-manager.js.map +1 -1
  57. package/dist/core/subagent-receipt.js +3 -4
  58. package/dist/core/subagent-receipt.js.map +1 -1
  59. package/dist/core/ui-adoption.js +2 -0
  60. package/dist/core/ui-adoption.js.map +1 -1
  61. package/dist/core/ui-registry.js +5 -4
  62. package/dist/core/ui-registry.js.map +1 -1
  63. package/dist/core/verification-gate.js +4 -2
  64. package/dist/core/verification-gate.js.map +1 -1
  65. package/dist/core/verify-commands.js +2 -3
  66. package/dist/core/verify-commands.js.map +1 -1
  67. package/dist/modes/agent-home-mode.js +1 -4
  68. package/dist/modes/agent-home-mode.js.map +1 -1
  69. package/dist/modes/subagent-worker-mode.js +13 -8
  70. package/dist/modes/subagent-worker-mode.js.map +1 -1
  71. package/dist/tools/checklist.d.ts +5 -4
  72. package/dist/tools/checklist.js +17 -4
  73. package/dist/tools/checklist.js.map +1 -1
  74. package/dist/tools/edit.js.map +1 -1
  75. package/dist/tools/grep.js +3 -2
  76. package/dist/tools/grep.js.map +1 -1
  77. package/dist/tools/index.js +7 -5
  78. package/dist/tools/index.js.map +1 -1
  79. package/dist/ui/App.js +20 -26
  80. package/dist/ui/App.js.map +1 -1
  81. package/dist/ui/components/InputArea.js +0 -2
  82. package/dist/ui/components/InputArea.js.map +1 -1
  83. package/dist/ui/components/ToolExecution.js +4 -3
  84. package/dist/ui/components/ToolExecution.js.map +1 -1
  85. package/dist/ui/hooks/useAgentLoop.js +7 -6
  86. package/dist/ui/hooks/useAgentLoop.js.map +1 -1
  87. package/dist/ui/sessions.js +1 -5
  88. package/dist/ui/sessions.js.map +1 -1
  89. package/dist/ui/utils/highlight.d.ts +0 -5
  90. package/dist/ui/utils/highlight.js +3 -49
  91. package/dist/ui/utils/highlight.js.map +1 -1
  92. package/dist/ui/utils/markdown-renderer.d.ts +6 -0
  93. package/dist/ui/utils/markdown-renderer.js +21 -5
  94. package/dist/ui/utils/markdown-renderer.js.map +1 -1
  95. package/dist/utils/process.js +3 -3
  96. package/dist/utils/process.js.map +1 -1
  97. package/package.json +5 -8
  98. package/dist/core/file-lock.d.ts +0 -1
  99. package/dist/core/file-lock.js +0 -3
  100. package/dist/core/file-lock.js.map +0 -1
  101. package/dist/core/oauth/pkce.d.ts +0 -1
  102. package/dist/core/oauth/pkce.js +0 -3
  103. package/dist/core/oauth/pkce.js.map +0 -1
  104. package/dist/ui/activity-phrases.d.ts +0 -10
  105. package/dist/ui/activity-phrases.js +0 -184
  106. package/dist/ui/activity-phrases.js.map +0 -1
  107. package/dist/ui/components/PlanApproval.d.ts +0 -8
  108. package/dist/ui/components/PlanApproval.js +0 -60
  109. package/dist/ui/components/PlanApproval.js.map +0 -1
  110. package/dist/ui/components/PlanBanner.d.ts +0 -6
  111. package/dist/ui/components/PlanBanner.js +0 -31
  112. package/dist/ui/components/PlanBanner.js.map +0 -1
  113. package/dist/ui/components/PlanProgress.d.ts +0 -7
  114. package/dist/ui/components/PlanProgress.js +0 -30
  115. package/dist/ui/components/PlanProgress.js.map +0 -1
  116. package/dist/ui/hooks/useMinDisplayTime.d.ts +0 -10
  117. package/dist/ui/hooks/useMinDisplayTime.js +0 -34
  118. package/dist/ui/hooks/useMinDisplayTime.js.map +0 -1
  119. package/dist/ui/hooks/useSessionManager.d.ts +0 -12
  120. package/dist/ui/hooks/useSessionManager.js +0 -43
  121. package/dist/ui/hooks/useSessionManager.js.map +0 -1
  122. package/dist/ui/hooks/useSlashCommands.d.ts +0 -6
  123. package/dist/ui/hooks/useSlashCommands.js +0 -11
  124. package/dist/ui/hooks/useSlashCommands.js.map +0 -1
  125. package/dist/ui/terminal-history-spacing.d.ts +0 -1
  126. package/dist/ui/terminal-history-spacing.js +0 -2
  127. package/dist/ui/terminal-history-spacing.js.map +0 -1
  128. package/dist/ui/utils/markdown-cache.d.ts +0 -10
  129. package/dist/ui/utils/markdown-cache.js +0 -58
  130. package/dist/ui/utils/markdown-cache.js.map +0 -1
  131. package/dist/ui/utils/token-to-ansi.d.ts +0 -8
  132. package/dist/ui/utils/token-to-ansi.js +0 -323
  133. package/dist/ui/utils/token-to-ansi.js.map +0 -1
@@ -1,184 +0,0 @@
1
- // ── Phrase lists ────────────────────────────────────────────
2
- const CONTEXTUAL_PHRASES = [
3
- {
4
- keywords: /\b(bug|fix|error|issue|broken|crash|fail|wrong)\b/i,
5
- phrases: [
6
- "Sleuthing",
7
- "Autopsying",
8
- "Exorcising",
9
- "Defenestrating",
10
- "Interrogating",
11
- "Lobotomizing",
12
- ],
13
- },
14
- {
15
- keywords: /\b(refactor|clean|improve|optimize|simplify|restructure)\b/i,
16
- phrases: ["Feng-shuiing", "Decluttering", "Liposuctioning", "Tidying", "Unboggling"],
17
- },
18
- {
19
- keywords: /\b(test|spec|coverage|assert|expect|describe|it\()\b/i,
20
- phrases: ["Hypothesizing", "Stress-testing", "Poking", "Prodding"],
21
- },
22
- {
23
- keywords: /\b(build|deploy|ci|cd|pipeline|docker|config)\b/i,
24
- phrases: ["Plumbing", "Wrenching", "Scaffolding", "Riveting"],
25
- },
26
- {
27
- keywords: /\b(style|css|ui|layout|design|color|theme|display|render)\b/i,
28
- phrases: ["Bedazzling", "Glamorizing", "Primping", "Beautifying", "Razzle-dazzling"],
29
- },
30
- {
31
- keywords: /\b(add|create|new|implement|feature|make|build)\b/i,
32
- phrases: ["Conjuring", "Manifesting", "Birthing", "Forging", "Concocting"],
33
- },
34
- {
35
- keywords: /\b(explain|how|why|what|understand|describe)\b/i,
36
- phrases: ["Deciphering", "Unraveling", "Demystifying", "Philosophizing", "Pontificating"],
37
- },
38
- {
39
- keywords: /\b(delete|remove|drop|clean\s*up|prune|trim)\b/i,
40
- phrases: ["Obliterating", "Yeeting", "Vaporizing", "Annihilating"],
41
- },
42
- {
43
- keywords: /\b(move|rename|reorganize|restructure|migrate)\b/i,
44
- phrases: ["Teleporting", "Transmogrifying", "Shuffleboarding", "Rearranging"],
45
- },
46
- {
47
- keywords: /\b(fetch|url|http|api|request|web|download|scrape)\b/i,
48
- phrases: ["Spelunking", "Foraging", "Scavenging", "Pilfering"],
49
- },
50
- {
51
- keywords: /\b(debug|log|trace|inspect|breakpoint|stack\s*trace)\b/i,
52
- phrases: ["Snooping", "Wiretapping", "Surveilling", "Bloodhounding", "Magnifying"],
53
- },
54
- {
55
- keywords: /\b(type|types|interface|generic|typescript|schema)\b/i,
56
- phrases: ["Taxonomizing", "Cataloguing", "Classifying", "Pigeonholing"],
57
- },
58
- {
59
- keywords: /\b(commit|push|pull|merge|rebase|branch|git|pr)\b/i,
60
- phrases: ["Bookkeeping", "Chronicling", "Timestamping", "Rubberstamping"],
61
- },
62
- {
63
- keywords: /\b(install|dependency|package|upgrade|update|version)\b/i,
64
- phrases: ["Stockpiling", "Hoarding", "Wrangling", "Rummaging"],
65
- },
66
- ];
67
- export const PLANNING_PHRASES = [
68
- "Scheming",
69
- "Cartographing",
70
- "Blueprinting",
71
- "Masterminding",
72
- "Strategizing",
73
- "Machinating",
74
- "Plotting",
75
- ];
76
- export const GENERAL_PHRASES = [
77
- "Cogitating",
78
- "Ruminating",
79
- "Percolating",
80
- "Noodling",
81
- "Discombobulating",
82
- "Brainstorming",
83
- "Marinating",
84
- "Simmering",
85
- "Fermenting",
86
- "Perambulating",
87
- "Gesticulating",
88
- "Hallucinating",
89
- "Pontificating",
90
- "Amalgamating",
91
- "Confabulating",
92
- ];
93
- export const WAITING_PHRASES = [
94
- "Waiting",
95
- "Connecting",
96
- "Starting",
97
- "Warming up",
98
- "Contacting model",
99
- "Awaiting response",
100
- ];
101
- export const THINKING_PHRASES = [
102
- "Cogitating",
103
- "Ruminating",
104
- "Meditating",
105
- "Brooding",
106
- "Noodling",
107
- "Percolating",
108
- "Musing",
109
- "Wool-gathering",
110
- ];
111
- export const GENERATING_PHRASES = [
112
- "Scribbling",
113
- "Regurgitating",
114
- "Channeling",
115
- "Materializing",
116
- "Distilling",
117
- "Secreting",
118
- "Extruding",
119
- ];
120
- export const TOOLS_GENERIC = [
121
- "Tinkering",
122
- "Fiddling",
123
- "Puttering",
124
- "Rummaging",
125
- "Monkeywrenching",
126
- "Gadgeteering",
127
- ];
128
- export const TOOL_PHRASES = {
129
- bash: ["Incantating", "Summoning", "Invoking"],
130
- read: ["Absorbing", "Devouring", "Scrutinizing"],
131
- write: ["Inscribing", "Etching", "Chiseling"],
132
- edit: ["Surgifying", "Transplanting", "Frankensteining"],
133
- grep: ["Rummaging", "Sifting", "Bloodhounding"],
134
- find: ["Dowsing", "Spelunking", "Sniffing"],
135
- ls: ["Cataloguing", "Inventorying", "Surveying"],
136
- source_path: ["Provenancing", "Sourcing", "Unearthing"],
137
- subagent: ["Cloning", "Spawning", "Mitosing"],
138
- web_fetch: ["Pilfering", "Scrounging", "Plundering"],
139
- web_search: ["Scouting", "Reconnoitering", "Prospecting"],
140
- tasks: ["Wrangling", "Herding", "Corralling"],
141
- task_output: ["Eavesdropping", "Intercepting"],
142
- task_stop: ["Guillotining", "Tranquilizing"],
143
- };
144
- function selectToolPhrases(activeToolNames) {
145
- if (activeToolNames.length === 0)
146
- return TOOLS_GENERIC;
147
- const phrases = [];
148
- for (const name of activeToolNames) {
149
- const specific = TOOL_PHRASES[name];
150
- if (specific)
151
- phrases.push(...specific);
152
- }
153
- return phrases.length > 0 ? phrases : TOOLS_GENERIC;
154
- }
155
- export function selectPhrases(phase, userMessage, activeToolNames, thinkingEnabled = true) {
156
- switch (phase) {
157
- case "thinking":
158
- return THINKING_PHRASES;
159
- case "generating":
160
- return GENERATING_PHRASES;
161
- case "tools":
162
- return selectToolPhrases(activeToolNames);
163
- default: {
164
- if (!thinkingEnabled)
165
- return WAITING_PHRASES;
166
- // waiting / idle — use contextual phrases based on user message
167
- for (const set of CONTEXTUAL_PHRASES) {
168
- if (set.keywords.test(userMessage)) {
169
- return [...set.phrases, ...GENERAL_PHRASES.slice(0, 3)];
170
- }
171
- }
172
- return GENERAL_PHRASES;
173
- }
174
- }
175
- }
176
- export function shuffleArray(arr) {
177
- const shuffled = [...arr];
178
- for (let i = shuffled.length - 1; i > 0; i--) {
179
- const j = Math.floor(Math.random() * (i + 1));
180
- [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];
181
- }
182
- return shuffled;
183
- }
184
- //# sourceMappingURL=activity-phrases.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"activity-phrases.js","sourceRoot":"","sources":["../../src/ui/activity-phrases.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import React from "react";
2
- interface PlanApprovalProps {
3
- planPath: string;
4
- planContent: string;
5
- onDecision: (decision: "approve" | "reject" | "cancel", feedback?: string) => void;
6
- }
7
- export declare function PlanApproval({ planPath, planContent, onDecision }: PlanApprovalProps): React.JSX.Element;
8
- export {};
@@ -1,60 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import React, { useState } from "react";
3
- import { Text, Box, useInput } from "ink";
4
- import { useTheme } from "../theme/theme.js";
5
- import { useTerminalSize } from "../hooks/useTerminalSize.js";
6
- import { Markdown } from "./Markdown.js";
7
- import { visualWidth } from "../utils/table-text.js";
8
- const ART_LINE_1 = " ▀█▀ █ █ █▀▀ █▀█ █ █▀█ █▄ █";
9
- const ART_LINE_2 = " █ █▀█ ██▄ █▀▀ █▄▄ █▀█ █ ▀█";
10
- // Use visual width (not .length) so padding is correct on all terminals
11
- const ART_VISUAL_WIDTH = visualWidth(ART_LINE_1);
12
- // ║ + space on each side = 4
13
- const FRAME_OVERHEAD = 4;
14
- function frameLine(content, innerWidth) {
15
- const contentVisual = visualWidth(content);
16
- const pad = Math.max(0, innerWidth - contentVisual);
17
- return "║ " + content + " ".repeat(pad) + " ║";
18
- }
19
- export function PlanApproval({ planPath, planContent, onDecision }) {
20
- const theme = useTheme();
21
- const { columns } = useTerminalSize();
22
- const [mode, setMode] = useState("prompt");
23
- const [feedback, setFeedback] = useState("");
24
- useInput((input, key) => {
25
- if (mode === "feedback") {
26
- if (key.return) {
27
- onDecision("reject", feedback);
28
- return;
29
- }
30
- if (key.escape) {
31
- setMode("prompt");
32
- setFeedback("");
33
- return;
34
- }
35
- if (key.backspace || key.delete) {
36
- setFeedback((prev) => prev.slice(0, -1));
37
- return;
38
- }
39
- if (input && !key.ctrl && !key.meta) {
40
- setFeedback((prev) => prev + input);
41
- }
42
- return;
43
- }
44
- // Prompt mode
45
- const lower = input.toLowerCase();
46
- if (lower === "a") {
47
- onDecision("approve");
48
- }
49
- else if (lower === "r") {
50
- setMode("feedback");
51
- }
52
- else if (lower === "c" || key.escape) {
53
- onDecision("cancel");
54
- }
55
- });
56
- const innerWidth = Math.max(ART_VISUAL_WIDTH, columns - FRAME_OVERHEAD);
57
- const statusContent = "Review plan · Awaiting your decision";
58
- return (_jsxs(Box, { flexDirection: "column", marginTop: 1, width: columns, children: [_jsx(Text, { color: theme.planPrimary, children: "╔" + "═".repeat(innerWidth + 2) + "╗" }), _jsx(Text, { color: theme.planPrimary, children: frameLine(ART_LINE_1, innerWidth) }), _jsx(Text, { color: theme.planPrimary, children: frameLine(ART_LINE_2, innerWidth) }), _jsx(Text, { color: theme.planPrimary, children: "╠" + "═".repeat(innerWidth + 2) + "╣" }), _jsx(Text, { color: theme.planPrimary, children: frameLine(statusContent, innerWidth) }), _jsx(Text, { color: theme.planPrimary, children: "╚" + "═".repeat(innerWidth + 2) + "╝" }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: theme.textDim, children: "Plan: " }), _jsx(Text, { color: theme.planPrimary, children: planPath })] }), _jsx(Box, { marginTop: 1, borderStyle: "round", borderColor: theme.planBorder, paddingLeft: 1, paddingRight: 1, flexDirection: "column", children: _jsx(Markdown, { children: planContent }) }), mode === "prompt" ? (_jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: theme.planPrimary, bold: true, children: "[A]" }), _jsx(Text, { color: theme.text, children: "pprove " }), _jsx(Text, { color: theme.planPrimary, bold: true, children: "[R]" }), _jsx(Text, { color: theme.text, children: "eject with feedback " }), _jsx(Text, { color: theme.planPrimary, bold: true, children: "[C]" }), _jsx(Text, { color: theme.text, children: "ancel" })] })) : (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: theme.planPrimary, children: "Feedback (Enter to submit, Esc to cancel):" }), _jsx(Box, { children: _jsxs(Text, { color: theme.text, children: ["> ", feedback, "\u258D"] }) })] }))] }));
59
- }
60
- //# sourceMappingURL=PlanApproval.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PlanApproval.js","sourceRoot":"","sources":["../../../src/ui/components/PlanApproval.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- import React from "react";
2
- interface PlanBannerProps {
3
- status?: "researching" | "drafting" | "awaiting_approval";
4
- }
5
- export declare function PlanBanner({ status }: PlanBannerProps): React.JSX.Element;
6
- export {};
@@ -1,31 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import React from "react";
3
- import { Text, Box } from "ink";
4
- import { useTheme } from "../theme/theme.js";
5
- import { useTerminalSize } from "../hooks/useTerminalSize.js";
6
- import { visualWidth } from "../utils/table-text.js";
7
- const ART_LINE_1 = " ▀█▀ █ █ █▀▀ █▀█ █ █▀█ █▄ █";
8
- const ART_LINE_2 = " █ █▀█ ██▄ █▀▀ █▄▄ █▀█ █ ▀█";
9
- // Use visual width (not .length) so padding is correct on all terminals
10
- const ART_VISUAL_WIDTH = visualWidth(ART_LINE_1);
11
- // ║ + space on each side = 4
12
- const FRAME_OVERHEAD = 4;
13
- function frameLine(content, innerWidth) {
14
- const contentVisual = visualWidth(content);
15
- const pad = Math.max(0, innerWidth - contentVisual);
16
- return "║ " + content + " ".repeat(pad) + " ║";
17
- }
18
- export function PlanBanner({ status = "researching" }) {
19
- const theme = useTheme();
20
- const { columns } = useTerminalSize();
21
- const statusText = status === "awaiting_approval"
22
- ? "Awaiting approval..."
23
- : status === "drafting"
24
- ? "Drafting plan..."
25
- : "Researching...";
26
- // Scale the frame to terminal width, but never narrower than the ASCII art
27
- const innerWidth = Math.max(ART_VISUAL_WIDTH, columns - FRAME_OVERHEAD);
28
- const statusContent = "Read-only mode · " + statusText;
29
- return (_jsxs(Box, { flexDirection: "column", marginTop: 1, width: columns, children: [_jsx(Text, { color: theme.planPrimary, children: "╔" + "═".repeat(innerWidth + 2) + "╗" }), _jsx(Text, { color: theme.planPrimary, children: frameLine(ART_LINE_1, innerWidth) }), _jsx(Text, { color: theme.planPrimary, children: frameLine(ART_LINE_2, innerWidth) }), _jsx(Text, { color: theme.planPrimary, children: "╠" + "═".repeat(innerWidth + 2) + "╣" }), _jsx(Text, { color: theme.planPrimary, children: frameLine(statusContent, innerWidth) }), _jsx(Text, { color: theme.planPrimary, children: "╚" + "═".repeat(innerWidth + 2) + "╝" })] }));
30
- }
31
- //# sourceMappingURL=PlanBanner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PlanBanner.js","sourceRoot":"","sources":["../../../src/ui/components/PlanBanner.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAMrD,MAAM,UAAU,GAAG,iCAAiC,CAAC;AACrD,MAAM,UAAU,GAAG,iCAAiC,CAAC;AAErD,wEAAwE;AACxE,MAAM,gBAAgB,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;AAEjD,6BAA6B;AAC7B,MAAM,cAAc,GAAG,CAAC,CAAC;AAEzB,SAAS,SAAS,CAAC,OAAe,EAAE,UAAkB;IACpD,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,aAAa,CAAC,CAAC;IACpD,OAAO,IAAI,GAAG,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa,EAAmB;IACpE,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,EAAE,CAAC;IAEtC,MAAM,UAAU,GACd,MAAM,KAAK,mBAAmB;QAC5B,CAAC,CAAC,sBAAsB;QACxB,CAAC,CAAC,MAAM,KAAK,UAAU;YACrB,CAAC,CAAC,kBAAkB;YACpB,CAAC,CAAC,gBAAgB,CAAC;IAEzB,2EAA2E;IAC3E,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,OAAO,GAAG,cAAc,CAAC,CAAC;IAExE,MAAM,aAAa,GAAG,mBAAmB,GAAG,UAAU,CAAC;IAEvD,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,aACtD,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,WAAW,YAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,GAAG,GAAQ,EAC/E,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,WAAW,YAAG,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,GAAQ,EAC1E,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,WAAW,YAAG,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,GAAQ,EAC1E,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,WAAW,YAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,GAAG,GAAQ,EAC/E,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,WAAW,YAAG,SAAS,CAAC,aAAa,EAAE,UAAU,CAAC,GAAQ,EAC7E,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,WAAW,YAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,GAAG,GAAQ,IAC3E,CACP,CAAC;AACJ,CAAC"}
@@ -1,7 +0,0 @@
1
- import React from "react";
2
- import type { PlanStep } from "../../utils/plan-steps.js";
3
- interface PlanProgressProps {
4
- steps: PlanStep[];
5
- }
6
- export declare function PlanProgress({ steps }: PlanProgressProps): React.JSX.Element | null;
7
- export {};
@@ -1,30 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import React from "react";
3
- import { Text, Box } from "ink";
4
- import { useTheme } from "../theme/theme.js";
5
- import { useTerminalSize } from "../hooks/useTerminalSize.js";
6
- export function PlanProgress({ steps }) {
7
- const theme = useTheme();
8
- const { columns } = useTerminalSize();
9
- if (steps.length === 0)
10
- return null;
11
- const done = steps.filter((s) => s.completed).length;
12
- const total = steps.length;
13
- const current = steps.find((s) => !s.completed);
14
- // Compact progress bar
15
- const barWidth = Math.min(total, 20);
16
- const filledWidth = Math.round((done / total) * barWidth);
17
- const bar = "\u2588".repeat(filledWidth) + "\u2591".repeat(barWidth - filledWidth);
18
- // Calculate available space for current step text
19
- // "Plan " (5) + bar (barWidth) + " " (1) + "n/n" (count) + " \u2500 n. " (prefix ~6)
20
- const countStr = `${done}/${total}`;
21
- const fixedWidth = 5 + barWidth + 1 + countStr.length + 1;
22
- const stepPrefix = current ? `\u2500 ${current.step}. ` : "";
23
- const availableForText = columns - fixedWidth - stepPrefix.length - 1;
24
- let stepText = current?.text ?? "";
25
- if (stepText.length > availableForText) {
26
- stepText = availableForText > 4 ? stepText.slice(0, availableForText - 3) + "..." : "";
27
- }
28
- return (_jsx(Box, { flexDirection: "column", marginTop: 1, marginBottom: 0, children: _jsxs(Box, { gap: 1, children: [_jsx(Text, { color: theme.planPrimary, bold: true, children: "Plan" }), _jsx(Text, { color: done === total ? theme.success : theme.planPrimary, children: bar }), _jsx(Text, { color: theme.textDim, children: countStr }), current && stepText && (_jsxs(Text, { color: theme.textDim, children: [stepPrefix, stepText] })), done === total && (_jsx(Text, { color: theme.success, bold: true, children: "\u2713 Done" }))] }) }));
29
- }
30
- //# sourceMappingURL=PlanProgress.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PlanProgress.js","sourceRoot":"","sources":["../../../src/ui/components/PlanProgress.tsx"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- /**
2
- * Hold a value for at least `minMs` milliseconds before switching to the
3
- * next value. Prevents rapid visual flicker when values change faster
4
- * than a human can read (e.g. collapsed tool group hints).
5
- *
6
- * If the value changes again before the timer fires the timer restarts
7
- * with the newest value, so the displayed value is never stale by more
8
- * than one transition.
9
- */
10
- export declare function useMinDisplayTime<T>(value: T, minMs?: number): T;
@@ -1,34 +0,0 @@
1
- import { useState, useRef, useEffect } from "react";
2
- /**
3
- * Hold a value for at least `minMs` milliseconds before switching to the
4
- * next value. Prevents rapid visual flicker when values change faster
5
- * than a human can read (e.g. collapsed tool group hints).
6
- *
7
- * If the value changes again before the timer fires the timer restarts
8
- * with the newest value, so the displayed value is never stale by more
9
- * than one transition.
10
- */
11
- export function useMinDisplayTime(value, minMs = 700) {
12
- const [displayed, setDisplayed] = useState(value);
13
- const timerRef = useRef(null);
14
- const latestRef = useRef(value);
15
- latestRef.current = value;
16
- useEffect(() => {
17
- // First render — sync immediately
18
- if (displayed === value)
19
- return;
20
- // Clear any pending timer
21
- if (timerRef.current)
22
- clearTimeout(timerRef.current);
23
- timerRef.current = setTimeout(() => {
24
- setDisplayed(latestRef.current);
25
- timerRef.current = null;
26
- }, minMs);
27
- return () => {
28
- if (timerRef.current)
29
- clearTimeout(timerRef.current);
30
- };
31
- }, [value, minMs, displayed]);
32
- return displayed;
33
- }
34
- //# sourceMappingURL=useMinDisplayTime.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useMinDisplayTime.js","sourceRoot":"","sources":["../../../src/ui/hooks/useMinDisplayTime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEpD;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAI,KAAQ,EAAE,KAAK,GAAG,GAAG;IACxD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,MAAM,CAAuC,IAAI,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEhC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;IAE1B,SAAS,CAAC,GAAG,EAAE;QACb,kCAAkC;QAClC,IAAI,SAAS,KAAK,KAAK;YAAE,OAAO;QAEhC,0BAA0B;QAC1B,IAAI,QAAQ,CAAC,OAAO;YAAE,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAErD,QAAQ,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YACjC,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAChC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1B,CAAC,EAAE,KAAK,CAAC,CAAC;QAEV,OAAO,GAAG,EAAE;YACV,IAAI,QAAQ,CAAC,OAAO;gBAAE,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACvD,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;IAE9B,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -1,12 +0,0 @@
1
- import type { Message } from "@kenkaiiii/gg-ai";
2
- import { type SessionInfo } from "../../core/session-manager.js";
3
- import type { Provider } from "@kenkaiiii/gg-ai";
4
- export interface UseSessionManagerReturn {
5
- sessionId: string;
6
- sessionPath: string;
7
- create: (cwd: string, provider: Provider, model: string) => Promise<void>;
8
- load: (sessionPath: string) => Promise<Message[]>;
9
- persistMessages: (messages: Message[], fromIndex: number) => Promise<void>;
10
- listSessions: (cwd: string) => Promise<SessionInfo[]>;
11
- }
12
- export declare function useSessionManager(sessionsDir: string): UseSessionManagerReturn;
@@ -1,43 +0,0 @@
1
- import { useState, useCallback, useRef } from "react";
2
- import { SessionManager } from "../../core/session-manager.js";
3
- import crypto from "node:crypto";
4
- export function useSessionManager(sessionsDir) {
5
- const managerRef = useRef(new SessionManager(sessionsDir));
6
- const [sessionId, setSessionId] = useState("");
7
- const [sessionPath, setSessionPath] = useState("");
8
- const create = useCallback(async (cwd, provider, model) => {
9
- const session = await managerRef.current.create(cwd, provider, model);
10
- setSessionId(session.id);
11
- setSessionPath(session.path);
12
- }, []);
13
- const load = useCallback(async (path) => {
14
- const loaded = await managerRef.current.load(path);
15
- return managerRef.current.getMessages(loaded.entries);
16
- }, []);
17
- const persistMessages = useCallback(async (messages, fromIndex) => {
18
- if (!sessionPath)
19
- return;
20
- for (let i = fromIndex; i < messages.length; i++) {
21
- const entry = {
22
- type: "message",
23
- id: crypto.randomUUID(),
24
- parentId: null,
25
- timestamp: new Date().toISOString(),
26
- message: messages[i],
27
- };
28
- await managerRef.current.appendEntry(sessionPath, entry);
29
- }
30
- }, [sessionPath]);
31
- const listSessions = useCallback(async (cwd) => {
32
- return managerRef.current.list(cwd);
33
- }, []);
34
- return {
35
- sessionId,
36
- sessionPath,
37
- create,
38
- load,
39
- persistMessages,
40
- listSessions,
41
- };
42
- }
43
- //# sourceMappingURL=useSessionManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useSessionManager.js","sourceRoot":"","sources":["../../../src/ui/hooks/useSessionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAuC,MAAM,+BAA+B,CAAC;AACpG,OAAO,MAAM,MAAM,aAAa,CAAC;AAYjC,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;IAC3D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC/C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEnD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,EAAE,GAAW,EAAE,QAAkB,EAAE,KAAa,EAAE,EAAE;QAClF,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QACtE,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACzB,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC9C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,OAAO,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,eAAe,GAAG,WAAW,CACjC,KAAK,EAAE,QAAmB,EAAE,SAAiB,EAAE,EAAE;QAC/C,IAAI,CAAC,WAAW;YAAE,OAAO;QACzB,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACjD,MAAM,KAAK,GAAiB;gBAC1B,IAAI,EAAE,SAAS;gBACf,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;gBACvB,QAAQ,EAAE,IAAI;gBACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;aACrB,CAAC;YACF,MAAM,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC,EACD,CAAC,WAAW,CAAC,CACd,CAAC;IAEF,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,EAAE,GAAW,EAAE,EAAE;QACrD,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,SAAS;QACT,WAAW;QACX,MAAM;QACN,IAAI;QACJ,eAAe;QACf,YAAY;KACb,CAAC;AACJ,CAAC"}
@@ -1,6 +0,0 @@
1
- import type { SlashCommandRegistry, SlashCommandContext } from "../../core/slash-commands.js";
2
- export interface UseSlashCommandsReturn {
3
- isSlashCommand: (input: string) => boolean;
4
- execute: (input: string) => Promise<string | null>;
5
- }
6
- export declare function useSlashCommands(registry: SlashCommandRegistry, context: SlashCommandContext): UseSlashCommandsReturn;
@@ -1,11 +0,0 @@
1
- import { useCallback } from "react";
2
- export function useSlashCommands(registry, context) {
3
- const isSlashCommand = useCallback((input) => {
4
- return registry.parse(input.trim()) !== null;
5
- }, [registry]);
6
- const execute = useCallback(async (input) => {
7
- return registry.execute(input.trim(), context);
8
- }, [registry, context]);
9
- return { isSlashCommand, execute };
10
- }
11
- //# sourceMappingURL=useSlashCommands.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useSlashCommands.js","sourceRoot":"","sources":["../../../src/ui/hooks/useSlashCommands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAQpC,MAAM,UAAU,gBAAgB,CAC9B,QAA8B,EAC9B,OAA4B;IAE5B,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,KAAa,EAAE,EAAE;QAChB,OAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;IAC/C,CAAC,EACD,CAAC,QAAQ,CAAC,CACX,CAAC;IAEF,MAAM,OAAO,GAAG,WAAW,CACzB,KAAK,EAAE,KAAa,EAAE,EAAE;QACtB,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC,EACD,CAAC,QAAQ,EAAE,OAAO,CAAC,CACpB,CAAC;IAEF,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;AACrC,CAAC"}
@@ -1 +0,0 @@
1
- export { isTranscriptSpacingKind as isAgentSpacingKind } from "./transcript/spacing.js";
@@ -1,2 +0,0 @@
1
- export { isTranscriptSpacingKind as isAgentSpacingKind } from "./transcript/spacing.js";
2
- //# sourceMappingURL=terminal-history-spacing.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"terminal-history-spacing.js","sourceRoot":"","sources":["../../src/ui/terminal-history-spacing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,IAAI,kBAAkB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -1,10 +0,0 @@
1
- /** LRU cache for rendered markdown ANSI strings, scoped by theme + width. */
2
- declare class MarkdownAnsiCache {
3
- private cache;
4
- get(body: string, themeName: string, columns: number): string | undefined;
5
- set(body: string, themeName: string, columns: number, ansi: string): void;
6
- private key;
7
- }
8
- export declare const markdownAnsiCache: MarkdownAnsiCache;
9
- export declare function containsMarkdownSyntax(text: string): boolean;
10
- export {};
@@ -1,58 +0,0 @@
1
- const MAX_SIZE = 500;
2
- /**
3
- * cyrb53 — fast 53-bit non-cryptographic string hash.
4
- * ~50–100× faster than SHA-256 for cache keying. Collision risk is
5
- * negligible at our 500-entry working set.
6
- * https://stackoverflow.com/a/52171480
7
- */
8
- function cyrb53(str, seed = 0) {
9
- let h1 = 0xdeadbeef ^ seed;
10
- let h2 = 0x41c6ce57 ^ seed;
11
- for (let i = 0; i < str.length; i++) {
12
- const ch = str.charCodeAt(i);
13
- h1 = Math.imul(h1 ^ ch, 2654435761);
14
- h2 = Math.imul(h2 ^ ch, 1597334677);
15
- }
16
- h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909);
17
- h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909);
18
- return (4294967296 * (2097151 & h2) + (h1 >>> 0)).toString(36);
19
- }
20
- /** LRU cache for rendered markdown ANSI strings, scoped by theme + width. */
21
- class MarkdownAnsiCache {
22
- cache = new Map();
23
- get(body, themeName, columns) {
24
- const key = this.key(body, themeName, columns);
25
- const entry = this.cache.get(key);
26
- if (!entry)
27
- return undefined;
28
- // Move to end (most recently used)
29
- this.cache.delete(key);
30
- this.cache.set(key, entry);
31
- return entry;
32
- }
33
- set(body, themeName, columns, ansi) {
34
- const key = this.key(body, themeName, columns);
35
- this.cache.delete(key);
36
- this.cache.set(key, ansi);
37
- if (this.cache.size > MAX_SIZE) {
38
- const oldest = this.cache.keys().next().value;
39
- this.cache.delete(oldest);
40
- }
41
- }
42
- key(body, themeName, columns) {
43
- return `${themeName}:${columns}:${cyrb53(body)}`;
44
- }
45
- }
46
- export const markdownAnsiCache = new MarkdownAnsiCache();
47
- /**
48
- * Check whether text contains markdown syntax worth parsing.
49
- * If it doesn't, the caller can skip marked.lexer() entirely.
50
- * Matches Claude Code's MD_SYNTAX_RE patterns.
51
- */
52
- const MARKDOWN_SYNTAX_RE = /[#*`|[>\-_~]|\n\n|^\d+\. |\n\d+\. /m;
53
- export function containsMarkdownSyntax(text) {
54
- // Only check the first 500 chars for performance
55
- const sample = text.length > 500 ? text.slice(0, 500) : text;
56
- return MARKDOWN_SYNTAX_RE.test(sample);
57
- }
58
- //# sourceMappingURL=markdown-cache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdown-cache.js","sourceRoot":"","sources":["../../../src/ui/utils/markdown-cache.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG,GAAG,CAAC;AAErB;;;;;GAKG;AACH,SAAS,MAAM,CAAC,GAAW,EAAE,IAAI,GAAG,CAAC;IACnC,IAAI,EAAE,GAAG,UAAU,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,GAAG,UAAU,GAAG,IAAI,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC7B,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;QACpC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;IACtC,CAAC;IACD,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IACvF,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IACvF,OAAO,CAAC,UAAU,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,6EAA6E;AAC7E,MAAM,iBAAiB;IACb,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE1C,GAAG,CAAC,IAAY,EAAE,SAAiB,EAAE,OAAe;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,mCAAmC;QACnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,GAAG,CAAC,IAAY,EAAE,SAAiB,EAAE,OAAe,EAAE,IAAY;QAChE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC1B,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,QAAQ,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAM,CAAC;YAC/C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAEO,GAAG,CAAC,IAAY,EAAE,SAAiB,EAAE,OAAe;QAC1D,OAAO,GAAG,SAAS,IAAI,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IACnD,CAAC;CACF;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC;AAEzD;;;;GAIG;AACH,MAAM,kBAAkB,GAAG,qCAAqC,CAAC;AAEjE,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,iDAAiD;IACjD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7D,OAAO,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACzC,CAAC"}
@@ -1,8 +0,0 @@
1
- import { type Token } from "marked";
2
- import type { Theme } from "../theme/theme.js";
3
- /**
4
- * Convert an array of marked block-level tokens into a single ANSI string.
5
- * Each block is separated by a blank line. The result can be passed directly
6
- * to Ink's `<Text>`.
7
- */
8
- export declare function tokensToAnsi(tokens: Token[], theme: Theme, columns: number): string;