@kenkaiiii/ggcoder 5.75.0 → 5.76.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 (137) 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 +18 -0
  5. package/dist/app-sidecar/repo-polls.js +45 -0
  6. package/dist/app-sidecar/repo-polls.js.map +1 -0
  7. package/dist/app-sidecar/route-context.d.ts +2 -0
  8. package/dist/app-sidecar.js +65 -63
  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 +27 -1
  75. package/dist/tools/edit.js.map +1 -1
  76. package/dist/tools/grep.js +3 -2
  77. package/dist/tools/grep.js.map +1 -1
  78. package/dist/tools/index.js +7 -5
  79. package/dist/tools/index.js.map +1 -1
  80. package/dist/ui/App.js +20 -26
  81. package/dist/ui/App.js.map +1 -1
  82. package/dist/ui/components/InputArea.js +0 -2
  83. package/dist/ui/components/InputArea.js.map +1 -1
  84. package/dist/ui/components/ToolExecution.js +4 -3
  85. package/dist/ui/components/ToolExecution.js.map +1 -1
  86. package/dist/ui/hooks/useAgentLoop.js +7 -6
  87. package/dist/ui/hooks/useAgentLoop.js.map +1 -1
  88. package/dist/ui/sessions.js +1 -5
  89. package/dist/ui/sessions.js.map +1 -1
  90. package/dist/ui/utils/highlight.d.ts +0 -5
  91. package/dist/ui/utils/highlight.js +3 -49
  92. package/dist/ui/utils/highlight.js.map +1 -1
  93. package/dist/ui/utils/markdown-renderer.d.ts +6 -0
  94. package/dist/ui/utils/markdown-renderer.js +21 -5
  95. package/dist/ui/utils/markdown-renderer.js.map +1 -1
  96. package/dist/utils/process.js +3 -3
  97. package/dist/utils/process.js.map +1 -1
  98. package/dist/utils/shared-poll.d.ts +37 -0
  99. package/dist/utils/shared-poll.js +104 -0
  100. package/dist/utils/shared-poll.js.map +1 -0
  101. package/package.json +5 -8
  102. package/dist/core/file-lock.d.ts +0 -1
  103. package/dist/core/file-lock.js +0 -3
  104. package/dist/core/file-lock.js.map +0 -1
  105. package/dist/core/oauth/pkce.d.ts +0 -1
  106. package/dist/core/oauth/pkce.js +0 -3
  107. package/dist/core/oauth/pkce.js.map +0 -1
  108. package/dist/ui/activity-phrases.d.ts +0 -10
  109. package/dist/ui/activity-phrases.js +0 -184
  110. package/dist/ui/activity-phrases.js.map +0 -1
  111. package/dist/ui/components/PlanApproval.d.ts +0 -8
  112. package/dist/ui/components/PlanApproval.js +0 -60
  113. package/dist/ui/components/PlanApproval.js.map +0 -1
  114. package/dist/ui/components/PlanBanner.d.ts +0 -6
  115. package/dist/ui/components/PlanBanner.js +0 -31
  116. package/dist/ui/components/PlanBanner.js.map +0 -1
  117. package/dist/ui/components/PlanProgress.d.ts +0 -7
  118. package/dist/ui/components/PlanProgress.js +0 -30
  119. package/dist/ui/components/PlanProgress.js.map +0 -1
  120. package/dist/ui/hooks/useMinDisplayTime.d.ts +0 -10
  121. package/dist/ui/hooks/useMinDisplayTime.js +0 -34
  122. package/dist/ui/hooks/useMinDisplayTime.js.map +0 -1
  123. package/dist/ui/hooks/useSessionManager.d.ts +0 -12
  124. package/dist/ui/hooks/useSessionManager.js +0 -43
  125. package/dist/ui/hooks/useSessionManager.js.map +0 -1
  126. package/dist/ui/hooks/useSlashCommands.d.ts +0 -6
  127. package/dist/ui/hooks/useSlashCommands.js +0 -11
  128. package/dist/ui/hooks/useSlashCommands.js.map +0 -1
  129. package/dist/ui/terminal-history-spacing.d.ts +0 -1
  130. package/dist/ui/terminal-history-spacing.js +0 -2
  131. package/dist/ui/terminal-history-spacing.js.map +0 -1
  132. package/dist/ui/utils/markdown-cache.d.ts +0 -10
  133. package/dist/ui/utils/markdown-cache.js +0 -58
  134. package/dist/ui/utils/markdown-cache.js.map +0 -1
  135. package/dist/ui/utils/token-to-ansi.d.ts +0 -8
  136. package/dist/ui/utils/token-to-ansi.js +0 -323
  137. package/dist/ui/utils/token-to-ansi.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-poll.js","sourceRoot":"","sources":["../../src/utils/shared-poll.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@kenkaiiii/ggcoder",
3
- "version": "5.75.0",
3
+ "version": "5.76.0",
4
4
  "type": "module",
5
- "description": "CLI coding agent with OAuth authentication for Anthropic, OpenAI, and Gemini",
5
+ "description": "Lean CLI coding agent for 12 LLM providers and local models, with OAuth for Anthropic, OpenAI and Gemini",
6
6
  "license": "MIT",
7
7
  "engines": {
8
8
  "node": ">=22"
@@ -98,16 +98,13 @@
98
98
  "@jridgewell/trace-mapping": "^0.3.25",
99
99
  "@kenkaiiii/agent-home-sdk": "^0.3.8",
100
100
  "@modelcontextprotocol/client": "^2.0.0",
101
- "ansi-regex": "^6.2.2",
102
101
  "chalk": "^5.6.2",
103
- "cli-highlight": "^2.1.11",
104
102
  "diff": "^8.0.3",
105
103
  "fast-glob": "^3.3.3",
106
104
  "ignore": "^7.0.5",
107
105
  "ink": "npm:@kenkaiiii/ink@6.8.0-gg.2",
108
106
  "lowlight": "^3.3.0",
109
107
  "marked": "^15.0.12",
110
- "marked-terminal": "^7.3.0",
111
108
  "opensrc": "^0.7.2",
112
109
  "react": "^19.2.5",
113
110
  "sharp": "^0.35.3",
@@ -118,9 +115,9 @@
118
115
  "typescript-language-server": "^5.3.0",
119
116
  "wrap-ansi": "^10.0.0",
120
117
  "zod": "^4.4.3",
121
- "@kenkaiiii/gg-agent": "5.75.0",
122
- "@kenkaiiii/gg-ai": "5.75.0",
123
- "@kenkaiiii/gg-core": "5.75.0"
118
+ "@kenkaiiii/gg-agent": "5.76.0",
119
+ "@kenkaiiii/gg-ai": "5.76.0",
120
+ "@kenkaiiii/gg-core": "5.76.0"
124
121
  },
125
122
  "optionalDependencies": {
126
123
  "@huggingface/transformers": "4.2.0",
@@ -1 +0,0 @@
1
- export { withFileLock } from "@kenkaiiii/gg-core";
@@ -1,3 +0,0 @@
1
- // Moved to @kenkaiiii/gg-core.
2
- export { withFileLock } from "@kenkaiiii/gg-core";
3
- //# sourceMappingURL=file-lock.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-lock.js","sourceRoot":"","sources":["../../src/core/file-lock.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
@@ -1 +0,0 @@
1
- export { generatePKCE } from "@kenkaiiii/gg-core";
@@ -1,3 +0,0 @@
1
- // Moved to @kenkaiiii/gg-core.
2
- export { generatePKCE } from "@kenkaiiii/gg-core";
3
- //# sourceMappingURL=pkce.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pkce.js","sourceRoot":"","sources":["../../../src/core/oauth/pkce.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
@@ -1,10 +0,0 @@
1
- import type { ActivityPhase } from "./hooks/useAgentLoop.js";
2
- export declare const PLANNING_PHRASES: string[];
3
- export declare const GENERAL_PHRASES: string[];
4
- export declare const WAITING_PHRASES: string[];
5
- export declare const THINKING_PHRASES: string[];
6
- export declare const GENERATING_PHRASES: string[];
7
- export declare const TOOLS_GENERIC: string[];
8
- export declare const TOOL_PHRASES: Record<string, string[]>;
9
- export declare function selectPhrases(phase: ActivityPhase, userMessage: string, activeToolNames: string[], thinkingEnabled?: boolean): string[];
10
- export declare function shuffleArray<T>(arr: T[]): T[];
@@ -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 {};