@kenkaiiii/ggcoder 5.23.3 → 5.25.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 (90) hide show
  1. package/dist/app-sidecar.js +318 -12
  2. package/dist/app-sidecar.js.map +1 -1
  3. package/dist/core/agent-session-add-dir.test.d.ts +2 -0
  4. package/dist/core/agent-session-add-dir.test.d.ts.map +1 -0
  5. package/dist/core/agent-session-add-dir.test.js +110 -0
  6. package/dist/core/agent-session-add-dir.test.js.map +1 -0
  7. package/dist/core/agent-session.d.ts +29 -0
  8. package/dist/core/agent-session.d.ts.map +1 -1
  9. package/dist/core/agent-session.js +74 -4
  10. package/dist/core/agent-session.js.map +1 -1
  11. package/dist/core/local-endpoint-store.d.ts +50 -0
  12. package/dist/core/local-endpoint-store.d.ts.map +1 -0
  13. package/dist/core/local-endpoint-store.js +201 -0
  14. package/dist/core/local-endpoint-store.js.map +1 -0
  15. package/dist/core/local-endpoint-store.test.d.ts +2 -0
  16. package/dist/core/local-endpoint-store.test.d.ts.map +1 -0
  17. package/dist/core/local-endpoint-store.test.js +131 -0
  18. package/dist/core/local-endpoint-store.test.js.map +1 -0
  19. package/dist/core/network-guard.d.ts +47 -0
  20. package/dist/core/network-guard.d.ts.map +1 -0
  21. package/dist/core/network-guard.js +208 -0
  22. package/dist/core/network-guard.js.map +1 -0
  23. package/dist/core/network-guard.test.d.ts +2 -0
  24. package/dist/core/network-guard.test.d.ts.map +1 -0
  25. package/dist/core/network-guard.test.js +72 -0
  26. package/dist/core/network-guard.test.js.map +1 -0
  27. package/dist/core/prompt-commands.d.ts.map +1 -1
  28. package/dist/core/prompt-commands.js +55 -36
  29. package/dist/core/prompt-commands.js.map +1 -1
  30. package/dist/core/prompt-commands.test.js +49 -2
  31. package/dist/core/prompt-commands.test.js.map +1 -1
  32. package/dist/core/session-export.d.ts +98 -0
  33. package/dist/core/session-export.d.ts.map +1 -0
  34. package/dist/core/session-export.js +356 -0
  35. package/dist/core/session-export.js.map +1 -0
  36. package/dist/core/session-export.test.d.ts +2 -0
  37. package/dist/core/session-export.test.d.ts.map +1 -0
  38. package/dist/core/session-export.test.js +353 -0
  39. package/dist/core/session-export.test.js.map +1 -0
  40. package/dist/core/settings-manager.d.ts +5 -0
  41. package/dist/core/settings-manager.d.ts.map +1 -1
  42. package/dist/core/settings-manager.js +10 -0
  43. package/dist/core/settings-manager.js.map +1 -1
  44. package/dist/core/slash-commands.d.ts +18 -0
  45. package/dist/core/slash-commands.d.ts.map +1 -1
  46. package/dist/core/slash-commands.js +32 -0
  47. package/dist/core/slash-commands.js.map +1 -1
  48. package/dist/core/slash-commands.test.d.ts +2 -0
  49. package/dist/core/slash-commands.test.d.ts.map +1 -0
  50. package/dist/core/slash-commands.test.js +59 -0
  51. package/dist/core/slash-commands.test.js.map +1 -0
  52. package/dist/core/workspace-guard.d.ts +2 -0
  53. package/dist/core/workspace-guard.d.ts.map +1 -1
  54. package/dist/core/workspace-guard.js +4 -1
  55. package/dist/core/workspace-guard.js.map +1 -1
  56. package/dist/core/workspace-guard.test.js +21 -0
  57. package/dist/core/workspace-guard.test.js.map +1 -1
  58. package/dist/system-prompt.d.ts +11 -1
  59. package/dist/system-prompt.d.ts.map +1 -1
  60. package/dist/system-prompt.js +19 -4
  61. package/dist/system-prompt.js.map +1 -1
  62. package/dist/system-prompt.test.js +9 -0
  63. package/dist/system-prompt.test.js.map +1 -1
  64. package/dist/tools/bash.d.ts +2 -1
  65. package/dist/tools/bash.d.ts.map +1 -1
  66. package/dist/tools/bash.js +9 -1
  67. package/dist/tools/bash.js.map +1 -1
  68. package/dist/tools/bash.test.js +19 -0
  69. package/dist/tools/bash.test.js.map +1 -1
  70. package/dist/tools/grep.d.ts +3 -1
  71. package/dist/tools/grep.d.ts.map +1 -1
  72. package/dist/tools/grep.js +132 -10
  73. package/dist/tools/grep.js.map +1 -1
  74. package/dist/tools/grep.test.js +53 -0
  75. package/dist/tools/grep.test.js.map +1 -1
  76. package/dist/tools/index.d.ts +6 -0
  77. package/dist/tools/index.d.ts.map +1 -1
  78. package/dist/tools/index.js +3 -3
  79. package/dist/tools/index.js.map +1 -1
  80. package/dist/tools/web-fetch.d.ts +2 -1
  81. package/dist/tools/web-fetch.d.ts.map +1 -1
  82. package/dist/tools/web-fetch.js +17 -6
  83. package/dist/tools/web-fetch.js.map +1 -1
  84. package/dist/tools/web-fetch.test.js +34 -0
  85. package/dist/tools/web-fetch.test.js.map +1 -1
  86. package/dist/tools/web-search.d.ts +2 -1
  87. package/dist/tools/web-search.d.ts.map +1 -1
  88. package/dist/tools/web-search.js +21 -5
  89. package/dist/tools/web-search.js.map +1 -1
  90. package/package.json +4 -4
@@ -0,0 +1,356 @@
1
+ import { restoreUserRow, restoreAssistantTexts } from "./session-history.js";
2
+ /**
3
+ * Markdown transcript export.
4
+ *
5
+ * Renders a session's persisted messages into a single self-contained `.md`
6
+ * file a human can read, paste into a PR, or hand to a teammate. Deliberately
7
+ * NOT built on the webview's `Item[]`: the app keeps tool activity in the
8
+ * pinned LiveToolPanel and never in the transcript, so serializing from there
9
+ * would export a chat with the actual work missing.
10
+ *
11
+ * Bubble text goes through the SAME `restoreUserRow` / `restoreAssistantTexts`
12
+ * helpers the `/history` resume path uses, so what lands in the file matches
13
+ * what the user saw on screen (steering wrappers, attachment notes and
14
+ * autopilot preambles stripped) rather than the raw provider payload.
15
+ */
16
+ /** Hard cap on a single tool result's rendered text. Sessions already cap
17
+ * persisted tool text at 40k chars; an export is for reading, so it gets a
18
+ * much tighter budget — enough to see what happened, not a data dump. */
19
+ export const MAX_TOOL_RESULT_CHARS = 1500;
20
+ /** Hard cap on a single tool call's rendered arguments. */
21
+ export const MAX_TOOL_ARGS_CHARS = 800;
22
+ /** Distinct entries named in one summary line before it says “+N more”. Sized
23
+ * for a coalesced burst (a whole run of tool work between two paragraphs), not
24
+ * a single message — too low and every line degenerates into “+37 more”. */
25
+ const MAX_SUMMARY_TOOLS = 8;
26
+ // ── Filename ───────────────────────────────────────────────
27
+ function pad(n) {
28
+ return String(n).padStart(2, "0");
29
+ }
30
+ /** `2026-07-26-1402` — local time, sortable, and unique enough that two
31
+ * exports in the same day don't silently collide in the save dialog. */
32
+ export function exportTimestamp(date) {
33
+ return (`${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}` +
34
+ `-${pad(date.getHours())}${pad(date.getMinutes())}`);
35
+ }
36
+ /**
37
+ * Default filename offered in the native save dialog, e.g.
38
+ * `your-chat-2026-07-26-1402.md`. Coding sessions say `session` instead of
39
+ * `chat` so a folder of exports stays self-describing.
40
+ */
41
+ export function defaultExportFilename(mode, date = new Date()) {
42
+ const kind = mode === "chat" ? "chat" : "session";
43
+ return `your-${kind}-${exportTimestamp(date)}.md`;
44
+ }
45
+ // ── Rendering helpers ──────────────────────────────────────
46
+ function truncate(text, max) {
47
+ if (text.length <= max)
48
+ return text;
49
+ const omitted = text.length - max;
50
+ return `${text.slice(0, max)}\n… ${omitted.toLocaleString()} more characters truncated`;
51
+ }
52
+ /** Fence a block with enough backticks that any fences inside it survive. */
53
+ function fence(body, lang = "") {
54
+ let ticks = 3;
55
+ for (const run of body.match(/`{3,}/g) ?? [])
56
+ ticks = Math.max(ticks, run.length + 1);
57
+ const bar = "`".repeat(ticks);
58
+ return `${bar}${lang}\n${body}\n${bar}`;
59
+ }
60
+ /** Flatten a tool result's content (string or block array) to display text.
61
+ * Image/video blocks become a one-line placeholder — inlining base64 would
62
+ * turn a screenshot-heavy session into an unopenable multi-megabyte file. */
63
+ function toolResultText(content) {
64
+ if (typeof content === "string")
65
+ return content;
66
+ const parts = [];
67
+ for (const block of content) {
68
+ if (block.type === "text")
69
+ parts.push(block.text);
70
+ else if (block.type === "image")
71
+ parts.push(`[image: ${block.mediaType}]`);
72
+ else if (block.type === "video")
73
+ parts.push(`[video: ${block.mediaType}]`);
74
+ }
75
+ return parts.join("\n");
76
+ }
77
+ /** Longest argument value the `<summary>` row shows before clipping. */
78
+ const SUMMARY_ARG_CHARS = 90;
79
+ /** Argument keys the summary row will show, most identifying first. */
80
+ const SUMMARY_ARG_KEYS = [
81
+ "file_path",
82
+ "path",
83
+ "command",
84
+ "pattern",
85
+ "query",
86
+ "url",
87
+ "task",
88
+ ];
89
+ /** The argument key `toolSummary` picked for this call, if any. */
90
+ function summaryKey(args) {
91
+ return SUMMARY_ARG_KEYS.find((key) => {
92
+ const v = args[key];
93
+ return typeof v === "string" && v.trim().length > 0;
94
+ });
95
+ }
96
+ /** One-line summary of a tool call for the `<details>` summary row: the tool
97
+ * name plus its most identifying argument (path, command, pattern, …). */
98
+ export function toolSummary(name, args) {
99
+ const key = summaryKey(args);
100
+ const primary = key ? String(args[key]) : "";
101
+ const oneLine = primary.replace(/\s+/g, " ").trim();
102
+ const clipped = oneLine.length > SUMMARY_ARG_CHARS ? `${oneLine.slice(0, SUMMARY_ARG_CHARS - 1)}…` : oneLine;
103
+ return clipped ? `${name} · ${clipped}` : name;
104
+ }
105
+ /**
106
+ * Render a tool call's arguments, or null when there's nothing worth showing.
107
+ *
108
+ * A lone string argument (the overwhelmingly common shape — `bash`'s command, a
109
+ * `web_fetch` url) is rendered raw in a fence: `JSON.stringify` would turn a
110
+ * shell one-liner into unreadable `\"` / `\n` soup. It's dropped entirely when
111
+ * the summary row already showed that exact value in full, so short calls don't
112
+ * say the same thing twice. Everything else falls back to pretty JSON.
113
+ */
114
+ export function renderToolArgs(args) {
115
+ const entries = Object.entries(args);
116
+ const only = entries.length === 1 ? entries[0] : undefined;
117
+ if (only && typeof only[1] === "string") {
118
+ const [key, raw] = only;
119
+ const value = raw.trim();
120
+ if (!value)
121
+ return null;
122
+ // Redundant only when the summary actually rendered THIS key and didn't
123
+ // clip it — an unlisted key (e.g. subagent's `agent`) never reached the
124
+ // summary, so its value still has to be shown here.
125
+ const shownWhole = key === summaryKey(args) && value.replace(/\s+/g, " ").length <= SUMMARY_ARG_CHARS;
126
+ if (shownWhole)
127
+ return null;
128
+ return fence(truncate(value, MAX_TOOL_ARGS_CHARS), key === "command" ? "sh" : "");
129
+ }
130
+ const json = JSON.stringify(args, null, 2);
131
+ if (!json || json === "{}")
132
+ return null;
133
+ return fence(truncate(json, MAX_TOOL_ARGS_CHARS), "json");
134
+ }
135
+ /** Longest argument value a summary line shows per tool — tighter than the
136
+ * `<details>` row, since several of these share one line. */
137
+ const SUMMARY_LINE_ARG_CHARS = 44;
138
+ /**
139
+ * One dim line standing in for a burst of tool calls, e.g.
140
+ * `_🔧 read src/a.ts · bash pnpm build · edit App.tsx · +4 more_`.
141
+ *
142
+ * Entries are deduped so an agent that reads the same file three times says it
143
+ * once, and capped so a 40-tool burst doesn't become a wall. Failures are still
144
+ * called out — a reader skimming for what went wrong shouldn't have to re-export
145
+ * at `full` to discover that something did.
146
+ */
147
+ export function renderToolSummaryLine(calls) {
148
+ if (calls.length === 0)
149
+ return null;
150
+ const seen = [];
151
+ for (const call of calls) {
152
+ const key = summaryKey(call.args);
153
+ const arg = key ? String(call.args[key]).replace(/\s+/g, " ").trim() : "";
154
+ const clipped = arg.length > SUMMARY_LINE_ARG_CHARS ? `${arg.slice(0, SUMMARY_LINE_ARG_CHARS - 1)}…` : arg;
155
+ const label = clipped ? `${call.name} ${clipped}` : call.name;
156
+ if (!seen.includes(label))
157
+ seen.push(label);
158
+ }
159
+ const shown = seen.slice(0, MAX_SUMMARY_TOOLS);
160
+ const hidden = seen.length - shown.length;
161
+ const parts = [...shown];
162
+ if (hidden > 0)
163
+ parts.push(`+${hidden} more`);
164
+ const failures = calls.filter((c) => c.failed).length;
165
+ const suffix = failures > 0 ? ` — ${failures} failed` : "";
166
+ return `_🔧 ${parts.join(" · ")}${suffix}_`;
167
+ }
168
+ function renderToolBlock(name, args, result) {
169
+ const lines = [];
170
+ const flag = result?.isError ? " — failed" : "";
171
+ lines.push(`<details>`);
172
+ lines.push(`<summary>🔧 ${escapeHtml(toolSummary(name, args))}${flag}</summary>`);
173
+ lines.push("");
174
+ const renderedArgs = renderToolArgs(args);
175
+ if (renderedArgs)
176
+ lines.push(renderedArgs);
177
+ if (result && result.text.trim()) {
178
+ lines.push("");
179
+ lines.push(fence(truncate(result.text.trim(), MAX_TOOL_RESULT_CHARS)));
180
+ }
181
+ lines.push("");
182
+ lines.push(`</details>`);
183
+ return lines.join("\n");
184
+ }
185
+ function escapeHtml(text) {
186
+ return text
187
+ .replace(/&/g, "&amp;")
188
+ .replace(/</g, "&lt;")
189
+ .replace(/>/g, "&gt;")
190
+ .replace(/"/g, "&quot;");
191
+ }
192
+ // ── Main serializer ────────────────────────────────────────
193
+ /**
194
+ * Render a session's messages as Markdown.
195
+ *
196
+ * System messages are always dropped (the system prompt is ours, not the
197
+ * user's, and shipping it in a shared file leaks internals). Compaction
198
+ * summaries and self-correction hook prompts are machine-facing injections —
199
+ * they render as a quiet italic marker instead of a user bubble, exactly like
200
+ * the app shows them.
201
+ */
202
+ export function sessionToMarkdown(meta, messages, options = {}) {
203
+ const { toolDetail = "summary", includeThinking = false } = options;
204
+ const date = meta.date ?? new Date();
205
+ // Pair tool calls with their results up front — the result lives in a later
206
+ // `tool` message, but it belongs with the call that produced it (inside its
207
+ // `<details>` block at `full`, or as the failure count at `summary`).
208
+ const resultsByCallId = new Map();
209
+ for (const msg of messages) {
210
+ if (msg.role !== "tool")
211
+ continue;
212
+ for (const tr of msg.content) {
213
+ resultsByCallId.set(tr.toolCallId, {
214
+ text: toolResultText(tr.content),
215
+ isError: tr.isError ?? false,
216
+ });
217
+ }
218
+ }
219
+ const out = [];
220
+ const title = meta.mode === "chat" ? "Chat transcript" : "Coding session";
221
+ out.push(`# ${title}`);
222
+ out.push("");
223
+ const metaLines = [
224
+ `- **Date:** ${date.toLocaleString()}`,
225
+ `- **Model:** ${meta.model} (${meta.provider})`,
226
+ `- **Project:** \`${meta.cwd}\``,
227
+ ];
228
+ if (meta.sessionId)
229
+ metaLines.push(`- **Session:** \`${meta.sessionId.slice(0, 8)}\``);
230
+ out.push(metaLines.join("\n"));
231
+ out.push("");
232
+ out.push("---");
233
+ // Anything the reader would consider content: a bubble, a reply, or a tool
234
+ // call. Only a truly empty session gets the placeholder line.
235
+ let rows = 0;
236
+ // At `summary`, tool calls accumulate across consecutive assistant messages
237
+ // and flush as ONE line when the narrative resumes (prose, a user turn, or
238
+ // the end). A tool-using agent emits one assistant message per call, so
239
+ // per-message lines would stack twenty identical-looking markers between two
240
+ // paragraphs — which is the very noise this mode exists to remove. Coalesced,
241
+ // that run reads as a single “then it went and did these things” beat.
242
+ let pending = [];
243
+ const flushPending = () => {
244
+ if (pending.length === 0)
245
+ return;
246
+ const line = renderToolSummaryLine(pending);
247
+ pending = [];
248
+ if (!line)
249
+ return;
250
+ rows++;
251
+ out.push("");
252
+ out.push(line);
253
+ };
254
+ for (const msg of messages) {
255
+ if (msg.role === "system" || msg.role === "tool")
256
+ continue;
257
+ if (msg.role === "user") {
258
+ const restored = restoreUserRow(msg.content);
259
+ const text = restored.text.trim();
260
+ const isHook = HOOK_PREFIXES.some((p) => text.startsWith(p));
261
+ const isCompaction = text.startsWith("[Previous conversation summary]");
262
+ flushPending();
263
+ if (isHook) {
264
+ out.push("");
265
+ out.push(`> _(agent self-correction check)_`);
266
+ continue;
267
+ }
268
+ if (isCompaction) {
269
+ out.push("");
270
+ out.push(`> _(conversation compacted here)_`);
271
+ continue;
272
+ }
273
+ if (!text && restored.images.length === 0)
274
+ continue;
275
+ rows++;
276
+ out.push("");
277
+ out.push("## 🧑‍💻 You");
278
+ out.push("");
279
+ if (text)
280
+ out.push(text);
281
+ if (restored.images.length > 0) {
282
+ out.push("");
283
+ out.push(`_${restored.images.length} image${restored.images.length === 1 ? "" : "s"} attached_`);
284
+ }
285
+ continue;
286
+ }
287
+ // Assistant: reasoning (optional), then one section per text block, then
288
+ // any tool calls it made.
289
+ if (includeThinking && typeof msg.content !== "string") {
290
+ const thinking = msg.content
291
+ .filter((c) => c.type === "thinking")
292
+ .map((c) => (c.type === "thinking" ? c.text : ""))
293
+ .join("\n")
294
+ .trim();
295
+ if (thinking) {
296
+ flushPending();
297
+ out.push("");
298
+ out.push("<details>");
299
+ out.push("<summary>💭 Thinking</summary>");
300
+ out.push("");
301
+ out.push(thinking);
302
+ out.push("");
303
+ out.push("</details>");
304
+ }
305
+ }
306
+ for (const blockText of restoreAssistantTexts(msg.content)) {
307
+ if (!blockText.trim())
308
+ continue;
309
+ flushPending();
310
+ rows++;
311
+ out.push("");
312
+ out.push("## ✨ GG Coder");
313
+ out.push("");
314
+ out.push(blockText.trim());
315
+ }
316
+ if (toolDetail !== "none" && typeof msg.content !== "string") {
317
+ const calls = msg.content.flatMap((block) => block.type === "tool_call"
318
+ ? [{ id: block.id, name: block.name, args: block.args ?? {} }]
319
+ : []);
320
+ if (toolDetail === "full") {
321
+ for (const call of calls) {
322
+ rows++;
323
+ out.push("");
324
+ out.push(renderToolBlock(call.name, call.args, resultsByCallId.get(call.id)));
325
+ }
326
+ }
327
+ else {
328
+ for (const call of calls) {
329
+ pending.push({
330
+ name: call.name,
331
+ args: call.args,
332
+ failed: resultsByCallId.get(call.id)?.isError ?? false,
333
+ });
334
+ }
335
+ }
336
+ }
337
+ }
338
+ flushPending();
339
+ if (rows === 0) {
340
+ out.push("");
341
+ out.push("_This session has no messages yet._");
342
+ }
343
+ out.push("");
344
+ return `${out
345
+ .join("\n")
346
+ .replace(/\n{3,}/g, "\n\n")
347
+ .trim()}\n`;
348
+ }
349
+ /** Prefixes of the agent's self-correction hook prompts (mirrors the sidecar's
350
+ * `detectHookKind`) — machine-facing injections, never user bubbles. */
351
+ const HOOK_PREFIXES = [
352
+ "Ideal? Review the actual work",
353
+ "Stuck? You've repeated essentially",
354
+ "Re-ground. The conversation was just compacted",
355
+ ];
356
+ //# sourceMappingURL=session-export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-export.js","sourceRoot":"","sources":["../../src/core/session-export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=session-export.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-export.test.d.ts","sourceRoot":"","sources":["../../src/core/session-export.test.ts"],"names":[],"mappings":""}