@kenkaiiii/ggcoder 2.0.0 → 3.1.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 (105) hide show
  1. package/dist/cli.js +12 -3
  2. package/dist/cli.js.map +1 -1
  3. package/dist/core/agent-session.d.ts.map +1 -1
  4. package/dist/core/agent-session.js +1 -0
  5. package/dist/core/agent-session.js.map +1 -1
  6. package/dist/core/compaction/compactor.d.ts +8 -2
  7. package/dist/core/compaction/compactor.d.ts.map +1 -1
  8. package/dist/core/compaction/compactor.js +147 -18
  9. package/dist/core/compaction/compactor.js.map +1 -1
  10. package/dist/core/custom-commands.d.ts +13 -0
  11. package/dist/core/custom-commands.d.ts.map +1 -0
  12. package/dist/core/custom-commands.js +40 -0
  13. package/dist/core/custom-commands.js.map +1 -0
  14. package/dist/core/event-bus.d.ts +4 -0
  15. package/dist/core/event-bus.d.ts.map +1 -1
  16. package/dist/core/event-bus.js.map +1 -1
  17. package/dist/core/logger.d.ts +1 -0
  18. package/dist/core/logger.d.ts.map +1 -1
  19. package/dist/core/logger.js +6 -0
  20. package/dist/core/logger.js.map +1 -1
  21. package/dist/core/model-registry.d.ts +7 -0
  22. package/dist/core/model-registry.d.ts.map +1 -1
  23. package/dist/core/model-registry.js +21 -3
  24. package/dist/core/model-registry.js.map +1 -1
  25. package/dist/core/oauth/anthropic.d.ts.map +1 -1
  26. package/dist/core/oauth/anthropic.js +6 -4
  27. package/dist/core/oauth/anthropic.js.map +1 -1
  28. package/dist/core/process-manager.js +3 -3
  29. package/dist/core/process-manager.js.map +1 -1
  30. package/dist/core/prompt-commands.d.ts +14 -0
  31. package/dist/core/prompt-commands.d.ts.map +1 -0
  32. package/dist/core/prompt-commands.js +475 -0
  33. package/dist/core/prompt-commands.js.map +1 -0
  34. package/dist/core/settings-manager.d.ts +2 -0
  35. package/dist/core/settings-manager.d.ts.map +1 -1
  36. package/dist/core/settings-manager.js +3 -1
  37. package/dist/core/settings-manager.js.map +1 -1
  38. package/dist/index.d.ts +0 -1
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +0 -2
  41. package/dist/index.js.map +1 -1
  42. package/dist/system-prompt.d.ts.map +1 -1
  43. package/dist/system-prompt.js +9 -5
  44. package/dist/system-prompt.js.map +1 -1
  45. package/dist/ui/App.d.ts +15 -1
  46. package/dist/ui/App.d.ts.map +1 -1
  47. package/dist/ui/App.js +272 -24
  48. package/dist/ui/App.js.map +1 -1
  49. package/dist/ui/components/AssistantMessage.d.ts +2 -1
  50. package/dist/ui/components/AssistantMessage.d.ts.map +1 -1
  51. package/dist/ui/components/AssistantMessage.js +3 -2
  52. package/dist/ui/components/AssistantMessage.js.map +1 -1
  53. package/dist/ui/components/Banner.d.ts.map +1 -1
  54. package/dist/ui/components/Banner.js +27 -6
  55. package/dist/ui/components/Banner.js.map +1 -1
  56. package/dist/ui/components/CompactionNotice.d.ts +10 -0
  57. package/dist/ui/components/CompactionNotice.d.ts.map +1 -0
  58. package/dist/ui/components/CompactionNotice.js +31 -0
  59. package/dist/ui/components/CompactionNotice.js.map +1 -0
  60. package/dist/ui/components/Footer.d.ts +2 -1
  61. package/dist/ui/components/Footer.d.ts.map +1 -1
  62. package/dist/ui/components/Footer.js +9 -5
  63. package/dist/ui/components/Footer.js.map +1 -1
  64. package/dist/ui/components/InputArea.d.ts +7 -2
  65. package/dist/ui/components/InputArea.d.ts.map +1 -1
  66. package/dist/ui/components/InputArea.js +120 -8
  67. package/dist/ui/components/InputArea.js.map +1 -1
  68. package/dist/ui/components/SlashCommandMenu.d.ts +15 -0
  69. package/dist/ui/components/SlashCommandMenu.d.ts.map +1 -0
  70. package/dist/ui/components/SlashCommandMenu.js +32 -0
  71. package/dist/ui/components/SlashCommandMenu.js.map +1 -0
  72. package/dist/ui/components/StreamingArea.d.ts +2 -1
  73. package/dist/ui/components/StreamingArea.d.ts.map +1 -1
  74. package/dist/ui/components/StreamingArea.js +15 -3
  75. package/dist/ui/components/StreamingArea.js.map +1 -1
  76. package/dist/ui/components/SubAgentPanel.d.ts.map +1 -1
  77. package/dist/ui/components/SubAgentPanel.js +54 -16
  78. package/dist/ui/components/SubAgentPanel.js.map +1 -1
  79. package/dist/ui/components/ThinkingBlock.d.ts +11 -0
  80. package/dist/ui/components/ThinkingBlock.d.ts.map +1 -0
  81. package/dist/ui/components/ThinkingBlock.js +40 -0
  82. package/dist/ui/components/ThinkingBlock.js.map +1 -0
  83. package/dist/ui/components/ToolExecution.d.ts.map +1 -1
  84. package/dist/ui/components/ToolExecution.js +22 -5
  85. package/dist/ui/components/ToolExecution.js.map +1 -1
  86. package/dist/ui/components/UserMessage.d.ts +2 -1
  87. package/dist/ui/components/UserMessage.d.ts.map +1 -1
  88. package/dist/ui/components/UserMessage.js +4 -2
  89. package/dist/ui/components/UserMessage.js.map +1 -1
  90. package/dist/ui/hooks/useAgentLoop.d.ts +6 -3
  91. package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
  92. package/dist/ui/hooks/useAgentLoop.js +1 -1
  93. package/dist/ui/hooks/useAgentLoop.js.map +1 -1
  94. package/dist/ui/render.d.ts.map +1 -1
  95. package/dist/ui/render.js +22 -2
  96. package/dist/ui/render.js.map +1 -1
  97. package/dist/ui/theme/dark.json +2 -1
  98. package/dist/ui/theme/light.json +2 -1
  99. package/dist/ui/theme/theme.d.ts +1 -0
  100. package/dist/ui/theme/theme.d.ts.map +1 -1
  101. package/dist/utils/image.d.ts +24 -0
  102. package/dist/utils/image.d.ts.map +1 -0
  103. package/dist/utils/image.js +137 -0
  104. package/dist/utils/image.js.map +1 -0
  105. package/package.json +3 -3
@@ -19,5 +19,6 @@
19
19
  "diffContext": "#9ca3af",
20
20
  "spinnerColor": "#2563eb",
21
21
  "inputPrompt": "#2563eb",
22
- "footerText": "#9ca3af"
22
+ "footerText": "#9ca3af",
23
+ "commandColor": "#4f46e5"
23
24
  }
@@ -23,6 +23,7 @@ export declare const ThemeContext: import("react").Context<{
23
23
  spinnerColor: string;
24
24
  inputPrompt: string;
25
25
  footerText: string;
26
+ commandColor: string;
26
27
  }>;
27
28
  export declare function useTheme(): Theme;
28
29
  //# sourceMappingURL=theme.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/ui/theme/theme.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,aAAa,CAAuB;AAG1D,MAAM,MAAM,KAAK,GAAG,OAAO,SAAS,CAAC;AAErC,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,CAEvD;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;EAAkC,CAAC;AAE5D,wBAAgB,QAAQ,IAAI,KAAK,CAEhC"}
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/ui/theme/theme.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,aAAa,CAAuB;AAG1D,MAAM,MAAM,KAAK,GAAG,OAAO,SAAS,CAAC;AAErC,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,CAEvD;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;EAAkC,CAAC;AAE5D,wBAAgB,QAAQ,IAAI,KAAK,CAEhC"}
@@ -0,0 +1,24 @@
1
+ export interface ImageAttachment {
2
+ fileName: string;
3
+ filePath: string;
4
+ mediaType: string;
5
+ data: string;
6
+ }
7
+ /** Check if a file path points to an image based on extension. */
8
+ export declare function isImagePath(filePath: string): boolean;
9
+ /**
10
+ * Extract image file paths from input text by checking if tokens resolve
11
+ * to existing image files on disk. Returns verified paths and the remaining text.
12
+ */
13
+ export declare function extractImagePaths(text: string, cwd: string): Promise<{
14
+ imagePaths: string[];
15
+ cleanText: string;
16
+ }>;
17
+ /** Read an image file and return base64 data with media type. */
18
+ export declare function readImageFile(filePath: string): Promise<ImageAttachment>;
19
+ /**
20
+ * Try to read image data from the system clipboard (macOS only).
21
+ * Returns null if no image is on the clipboard.
22
+ */
23
+ export declare function getClipboardImage(): Promise<ImageAttachment | null>;
24
+ //# sourceMappingURL=image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../src/utils/image.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,kEAAkE;AAClE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGrD;AAwBD;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAuBtD;AAWD,iEAAiE;AACjE,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAW9E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CA+CnE"}
@@ -0,0 +1,137 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { execFile } from "node:child_process";
4
+ const IMAGE_EXTENSIONS = new Set([".png", ".jpg", ".jpeg", ".gif", ".webp", ".bmp"]);
5
+ const MEDIA_TYPES = {
6
+ ".png": "image/png",
7
+ ".jpg": "image/jpeg",
8
+ ".jpeg": "image/jpeg",
9
+ ".gif": "image/gif",
10
+ ".webp": "image/webp",
11
+ ".bmp": "image/bmp",
12
+ };
13
+ /** Check if a file path points to an image based on extension. */
14
+ export function isImagePath(filePath) {
15
+ const ext = path.extname(filePath).toLowerCase();
16
+ return IMAGE_EXTENSIONS.has(ext);
17
+ }
18
+ function resolvePath(filePath, cwd) {
19
+ let resolved = filePath.trim();
20
+ // Strip surrounding quotes
21
+ if ((resolved.startsWith("'") && resolved.endsWith("'")) ||
22
+ (resolved.startsWith('"') && resolved.endsWith('"'))) {
23
+ resolved = resolved.slice(1, -1);
24
+ }
25
+ // Strip file:// prefix
26
+ if (resolved.startsWith("file://")) {
27
+ resolved = resolved.slice(7);
28
+ }
29
+ // Resolve home dir
30
+ if (resolved.startsWith("~/")) {
31
+ resolved = path.join(process.env.HOME ?? "/", resolved.slice(2));
32
+ }
33
+ else if (!path.isAbsolute(resolved)) {
34
+ resolved = path.join(cwd, resolved);
35
+ }
36
+ return resolved;
37
+ }
38
+ /**
39
+ * Extract image file paths from input text by checking if tokens resolve
40
+ * to existing image files on disk. Returns verified paths and the remaining text.
41
+ */
42
+ export async function extractImagePaths(text, cwd) {
43
+ const imagePaths = [];
44
+ const cleanParts = [];
45
+ // Try the entire input as a single path first
46
+ const wholePath = resolvePath(text, cwd);
47
+ if (isImagePath(wholePath) && (await fileExists(wholePath))) {
48
+ return { imagePaths: [wholePath], cleanText: "" };
49
+ }
50
+ // Split on whitespace and check each token
51
+ const tokens = text.split(/\s+/);
52
+ for (const token of tokens) {
53
+ if (!token)
54
+ continue;
55
+ const resolved = resolvePath(token, cwd);
56
+ if (isImagePath(resolved) && (await fileExists(resolved))) {
57
+ imagePaths.push(resolved);
58
+ }
59
+ else {
60
+ cleanParts.push(token);
61
+ }
62
+ }
63
+ return { imagePaths, cleanText: cleanParts.join(" ") };
64
+ }
65
+ async function fileExists(filePath) {
66
+ try {
67
+ const stat = await fs.stat(filePath);
68
+ return stat.isFile();
69
+ }
70
+ catch {
71
+ return false;
72
+ }
73
+ }
74
+ /** Read an image file and return base64 data with media type. */
75
+ export async function readImageFile(filePath) {
76
+ const ext = path.extname(filePath).toLowerCase();
77
+ const mediaType = MEDIA_TYPES[ext] ?? "image/png";
78
+ const buffer = await fs.readFile(filePath);
79
+ const data = buffer.toString("base64");
80
+ return {
81
+ fileName: path.basename(filePath),
82
+ filePath,
83
+ mediaType,
84
+ data,
85
+ };
86
+ }
87
+ /**
88
+ * Try to read image data from the system clipboard (macOS only).
89
+ * Returns null if no image is on the clipboard.
90
+ */
91
+ export function getClipboardImage() {
92
+ if (process.platform !== "darwin")
93
+ return Promise.resolve(null);
94
+ return new Promise((resolve) => {
95
+ // Check if clipboard has image data
96
+ execFile("osascript", ["-e", "clipboard info"], (err, stdout) => {
97
+ if (err || (!stdout.includes("PNGf") && !stdout.includes("TIFF"))) {
98
+ resolve(null);
99
+ return;
100
+ }
101
+ // Determine format — prefer PNG
102
+ const isPng = stdout.includes("PNGf");
103
+ const clipClass = isPng ? "PNGf" : "TIFF";
104
+ const ext = isPng ? "png" : "tiff";
105
+ const mediaType = isPng ? "image/png" : "image/tiff";
106
+ // Write clipboard image to temp file, then read as base64
107
+ const tmpPath = `/tmp/ggcoder-clipboard-${Date.now()}.${ext}`;
108
+ const writeScript = [
109
+ `set imgData to the clipboard as «class ${clipClass}»`,
110
+ `set filePath to POSIX file "${tmpPath}"`,
111
+ `set fileRef to open for access filePath with write permission`,
112
+ `write imgData to fileRef`,
113
+ `close access fileRef`,
114
+ ].join("\n");
115
+ execFile("osascript", ["-e", writeScript], async (writeErr) => {
116
+ if (writeErr) {
117
+ resolve(null);
118
+ return;
119
+ }
120
+ try {
121
+ const buffer = await fs.readFile(tmpPath);
122
+ await fs.unlink(tmpPath).catch(() => { });
123
+ resolve({
124
+ fileName: `clipboard.${ext}`,
125
+ filePath: tmpPath,
126
+ mediaType,
127
+ data: buffer.toString("base64"),
128
+ });
129
+ }
130
+ catch {
131
+ resolve(null);
132
+ }
133
+ });
134
+ });
135
+ });
136
+ }
137
+ //# sourceMappingURL=image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.js","sourceRoot":"","sources":["../../src/utils/image.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kenkaiiii/ggcoder",
3
- "version": "2.0.0",
3
+ "version": "3.1.0",
4
4
  "type": "module",
5
5
  "description": "CLI coding agent with OAuth authentication for Anthropic and OpenAI",
6
6
  "license": "MIT",
@@ -33,8 +33,8 @@
33
33
  "marked-terminal": "^7.3.0",
34
34
  "react": "^19.2.4",
35
35
  "zod": "^4.3.6",
36
- "@kenkaiiii/gg-agent": "2.0.0",
37
- "@kenkaiiii/gg-ai": "2.0.0"
36
+ "@kenkaiiii/gg-ai": "3.1.0",
37
+ "@kenkaiiii/gg-agent": "3.1.0"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/node": "^25.3.3",