agentgui 1.0.10 → 1.0.12

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.
package/acp-launcher.js CHANGED
@@ -219,62 +219,7 @@ export default class ACPConnection {
219
219
  }
220
220
 
221
221
  async _sendPrintPrompt(prompt) {
222
- const text = typeof prompt === 'string' ? prompt : (Array.isArray(prompt) ? prompt.map(p => p.text || '').join('\n') : String(prompt));
223
- let apiKey;
224
- try { apiKey = fs.readFileSync(API_KEY_PATH, 'utf-8').trim(); }
225
- catch (e) { throw new Error('No API key found at ' + API_KEY_PATH); }
226
-
227
- const body = JSON.stringify({
228
- model: 'claude-sonnet-4-20250514',
229
- max_tokens: 4096,
230
- system: RIPPLEUI_SYSTEM_PROMPT,
231
- messages: [{ role: 'user', content: text }],
232
- stream: true,
233
- });
234
-
235
- const res = await fetch(API_URL, {
236
- method: 'POST',
237
- headers: {
238
- 'Content-Type': 'application/json',
239
- 'x-api-key': apiKey,
240
- 'anthropic-version': '2023-06-01',
241
- },
242
- body,
243
- });
244
-
245
- if (!res.ok) {
246
- const errText = await res.text();
247
- throw new Error(`Anthropic API ${res.status}: ${errText.substring(0, 200)}`);
248
- }
249
-
250
- let fullText = '';
251
- const reader = res.body.getReader();
252
- const decoder = new TextDecoder();
253
- let buf = '';
254
-
255
- while (true) {
256
- const { done, value } = await reader.read();
257
- if (done) break;
258
- buf += decoder.decode(value, { stream: true });
259
- const lines = buf.split('\n');
260
- buf = lines.pop() || '';
261
- for (const line of lines) {
262
- if (!line.startsWith('data: ')) continue;
263
- const data = line.slice(6);
264
- if (data === '[DONE]') continue;
265
- try {
266
- const evt = JSON.parse(data);
267
- if (evt.type === 'content_block_delta' && evt.delta?.text) {
268
- fullText += evt.delta.text;
269
- if (this.onUpdate) {
270
- this.onUpdate({ update: { sessionUpdate: 'agent_message_chunk', content: { text: evt.delta.text } } });
271
- }
272
- }
273
- } catch (_) {}
274
- }
275
- }
276
-
277
- return { stopReason: 'end_turn', result: fullText };
222
+ throw new Error('Claude Code uses OAuth and requires the ACP bridge. The fallback to direct API calls is not supported because OAuth tokens cannot be used with the Anthropic API directly. Please ensure claude-code-acp is available in your PATH.');
278
223
  }
279
224
 
280
225
  isRunning() {
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "agentgui",
3
- "version": "1.0.10",
3
+ "version": "1.0.12",
4
4
  "description": "Multi-agent ACP client with real-time communication",
5
5
  "type": "module",
6
6
  "main": "server.js",
7
7
  "bin": {
8
- "gmgui": "./bin/gmgui.cjs",
9
- "start": "./bin/gmgui.cjs"
8
+ "agentgui": "./bin/gmgui.cjs",
9
+ "gmgui": "./bin/gmgui.cjs"
10
10
  },
11
11
  "repository": {
12
12
  "type": "git",
package/color-table.html DELETED
@@ -1,41 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Color Table - RippleUI</title>
7
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/rippleui@1.12.1/dist/css/styles.css" />
8
- </head>
9
- <body class="p-8">
10
- <div class="container mx-auto">
11
- <h1 class="text-3xl font-bold mb-6">Color Table</h1>
12
-
13
- <table class="table">
14
- <thead>
15
- <tr>
16
- <th>Color Name</th>
17
- <th>Hex Code</th>
18
- <th>Preview</th>
19
- </tr>
20
- </thead>
21
- <tbody>
22
- <tr>
23
- <td>Red</td>
24
- <td>#FF0000</td>
25
- <td><span class="badge badge-solid-error">Red</span></td>
26
- </tr>
27
- <tr>
28
- <td>Green</td>
29
- <td>#00FF00</td>
30
- <td><span class="badge badge-solid-success">Green</span></td>
31
- </tr>
32
- <tr>
33
- <td>Blue</td>
34
- <td>#0000FF</td>
35
- <td><span class="badge badge-solid-primary">Blue</span></td>
36
- </tr>
37
- </tbody>
38
- </table>
39
- </div>
40
- </body>
41
- </html>
package/install.sh DELETED
@@ -1,147 +0,0 @@
1
- #!/bin/bash
2
- set -euo pipefail
3
-
4
- # GMGUI Installation Script
5
- # Robust, error-handled installation with proper cleanup
6
-
7
- # Enable error handling and cleanup
8
- TMPDIR=""
9
- EXIT_CODE=0
10
-
11
- cleanup() {
12
- local code=$?
13
- if [ -n "$TMPDIR" ] && [ -d "$TMPDIR" ]; then
14
- rm -rf "$TMPDIR" 2>/dev/null || true
15
- fi
16
- if [ $code -ne 0 ] && [ $code -ne 130 ]; then
17
- echo "Error: Installation failed. Check messages above." >&2
18
- fi
19
- exit $code
20
- }
21
-
22
- # Handle interrupts gracefully
23
- handle_interrupt() {
24
- echo ""
25
- echo "Installation interrupted. Cleaning up..." >&2
26
- exit 130
27
- }
28
-
29
- trap cleanup EXIT
30
- trap handle_interrupt SIGINT SIGTERM
31
-
32
- # Detect runtime (prefer bun, fall back to node)
33
- RUNTIME=""
34
- if command -v bun &> /dev/null; then
35
- RUNTIME=bun
36
- elif command -v node &> /dev/null; then
37
- RUNTIME=node
38
- else
39
- echo "Error: Neither bun nor node is installed." >&2
40
- echo "Install one with:" >&2
41
- echo " • Bun (recommended, 3-4x faster):" >&2
42
- echo " curl -fsSL https://bun.sh/install | bash" >&2
43
- echo " • Node.js:" >&2
44
- echo " curl https://nodejs.org/en/download/" >&2
45
- exit 1
46
- fi
47
-
48
- # Verify curl or wget is available
49
- if ! command -v curl &> /dev/null && ! command -v wget &> /dev/null; then
50
- echo "Error: Neither curl nor wget found. Install one to download gmgui." >&2
51
- exit 1
52
- fi
53
-
54
- # Create temp directory with secure permissions
55
- TMPDIR=$(mktemp -d) || {
56
- echo "Error: Could not create temporary directory." >&2
57
- exit 1
58
- }
59
-
60
- # Verify we have write access to temp directory
61
- if ! [ -w "$TMPDIR" ]; then
62
- echo "Error: No write permission to temporary directory." >&2
63
- exit 1
64
- fi
65
-
66
- # Check disk space (need at least 200MB)
67
- AVAILABLE_KB=$(df "$TMPDIR" 2>/dev/null | tail -1 | awk '{print $4}' || echo 0)
68
- if [ "$AVAILABLE_KB" -lt 200000 ]; then
69
- echo "Warning: Low disk space. At least 200MB recommended." >&2
70
- fi
71
-
72
- echo "Downloading gmgui from GitHub..."
73
- cd "$TMPDIR"
74
-
75
- # Use git if available, otherwise use curl/wget to download tarball
76
- if command -v git &> /dev/null; then
77
- # Git clone with error handling
78
- if ! git clone --depth=1 https://github.com/AnEntrypoint/gmgui.git . 2>&1 | grep -v "^Cloning"; then
79
- echo "Warning: Git clone failed, trying tarball download..." >&2
80
- # Fallback to tarball
81
- if command -v curl &> /dev/null; then
82
- curl -fsSL https://github.com/AnEntrypoint/gmgui/archive/refs/heads/main.tar.gz | tar xz --strip-components=1 || {
83
- echo "Error: Could not download gmgui from GitHub." >&2
84
- exit 1
85
- }
86
- else
87
- wget -qO- https://github.com/AnEntrypoint/gmgui/archive/refs/heads/main.tar.gz | tar xz --strip-components=1 || {
88
- echo "Error: Could not download gmgui from GitHub." >&2
89
- exit 1
90
- }
91
- fi
92
- fi
93
- else
94
- echo "Downloading tarball (git not available)..."
95
- # Download tarball with curl or wget
96
- if command -v curl &> /dev/null; then
97
- curl -fsSL https://github.com/AnEntrypoint/gmgui/archive/refs/heads/main.tar.gz | tar xz --strip-components=1 || {
98
- echo "Error: Could not download gmgui from GitHub." >&2
99
- exit 1
100
- }
101
- else
102
- wget -qO- https://github.com/AnEntrypoint/gmgui/archive/refs/heads/main.tar.gz | tar xz --strip-components=1 || {
103
- echo "Error: Could not download gmgui from GitHub." >&2
104
- exit 1
105
- }
106
- fi
107
- fi
108
-
109
- # Verify essential files were downloaded
110
- if [ ! -f server.js ] || [ ! -f package.json ]; then
111
- echo "Error: Downloaded files appear corrupted. Missing server.js or package.json." >&2
112
- exit 1
113
- fi
114
-
115
- echo "Installing dependencies with $RUNTIME..."
116
- if [ "$RUNTIME" = "bun" ]; then
117
- if ! bun install --frozen-lockfile 2>&1 | grep -E "added|removed|found|vulnerabilities" | tail -1; then
118
- # Warn but don't fail if grep doesn't match
119
- bun install --frozen-lockfile 2>&1 | tail -3
120
- fi
121
- else
122
- if ! npm install 2>&1 | grep -E "added|removed|found|vulnerabilities" | tail -1; then
123
- # Warn but don't fail if grep doesn't match
124
- npm install 2>&1 | tail -3
125
- fi
126
-
127
- # For Node.js, install better-sqlite3 if not already present
128
- echo "Installing better-sqlite3 for Node.js..."
129
- if ! npm install better-sqlite3 2>&1 | grep -E "added|removed|found|vulnerabilities" | tail -1; then
130
- # Warn but don't fail - may already be installed
131
- echo "Note: better-sqlite3 installation completed." >&2
132
- fi
133
- fi
134
-
135
- echo ""
136
- echo "✓ Installation complete!"
137
- echo ""
138
- echo "Starting gmgui server on http://localhost:3000"
139
- echo "Press Ctrl+C to stop"
140
- echo ""
141
-
142
- # Start server with proper error handling
143
- if [ "$RUNTIME" = "bun" ]; then
144
- exec bun run server.js
145
- else
146
- exec node server.js
147
- fi
package/test-block.html DELETED
@@ -1,181 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Hero Card</title>
7
- <link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,700;1,700&family=DM+Sans:wght@400;500&display=swap" rel="stylesheet">
8
- <style>
9
- *,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
10
-
11
- :root {
12
- --ink: #0a0a0a;
13
- --cream: #f4f0eb;
14
- --accent: #c8553d;
15
- --accent-light: #e8886e;
16
- --glass: rgba(244, 240, 235, 0.06);
17
- }
18
-
19
- html, body {
20
- height: 100%;
21
- font-family: 'DM Sans', sans-serif;
22
- background: var(--ink);
23
- display: flex;
24
- align-items: center;
25
- justify-content: center;
26
- overflow: hidden;
27
- }
28
-
29
- body::before {
30
- content: '';
31
- position: fixed;
32
- inset: 0;
33
- background:
34
- radial-gradient(ellipse 80% 60% at 20% 80%, rgba(200, 85, 61, 0.12), transparent),
35
- radial-gradient(ellipse 60% 50% at 80% 20%, rgba(232, 136, 110, 0.08), transparent);
36
- pointer-events: none;
37
- }
38
-
39
- .noise {
40
- position: fixed;
41
- inset: 0;
42
- opacity: 0.035;
43
- background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
44
- background-size: 200px;
45
- pointer-events: none;
46
- }
47
-
48
- .card {
49
- position: relative;
50
- width: min(520px, 90vw);
51
- padding: 56px 48px 48px;
52
- border: 1px solid rgba(244, 240, 235, 0.08);
53
- border-radius: 2px;
54
- background: var(--glass);
55
- backdrop-filter: blur(40px);
56
- -webkit-backdrop-filter: blur(40px);
57
- animation: cardIn 1s cubic-bezier(0.16, 1, 0.3, 1) both;
58
- }
59
-
60
- @keyframes cardIn {
61
- from { opacity: 0; transform: translateY(32px) scale(0.97); }
62
- to { opacity: 1; transform: translateY(0) scale(1); }
63
- }
64
-
65
- .card::before {
66
- content: '';
67
- position: absolute;
68
- top: -1px; left: 48px; right: 48px;
69
- height: 1px;
70
- background: linear-gradient(90deg, transparent, var(--accent), transparent);
71
- }
72
-
73
- .label {
74
- font-size: 10px;
75
- font-weight: 500;
76
- letter-spacing: 0.25em;
77
- text-transform: uppercase;
78
- color: var(--accent-light);
79
- margin-bottom: 28px;
80
- animation: fadeUp 0.8s cubic-bezier(0.16, 1, 0.3, 1) 0.15s both;
81
- }
82
-
83
- .heading {
84
- font-family: 'Playfair Display', serif;
85
- font-size: clamp(2rem, 5vw, 2.75rem);
86
- font-weight: 700;
87
- line-height: 1.15;
88
- color: var(--cream);
89
- margin-bottom: 20px;
90
- animation: fadeUp 0.8s cubic-bezier(0.16, 1, 0.3, 1) 0.25s both;
91
- }
92
-
93
- .heading em {
94
- font-style: italic;
95
- color: var(--accent-light);
96
- }
97
-
98
- .desc {
99
- font-size: 15px;
100
- line-height: 1.7;
101
- color: rgba(244, 240, 235, 0.5);
102
- max-width: 38ch;
103
- margin-bottom: 40px;
104
- animation: fadeUp 0.8s cubic-bezier(0.16, 1, 0.3, 1) 0.35s both;
105
- }
106
-
107
- .cta {
108
- display: inline-flex;
109
- align-items: center;
110
- gap: 12px;
111
- padding: 14px 32px;
112
- font-family: 'DM Sans', sans-serif;
113
- font-size: 13px;
114
- font-weight: 500;
115
- letter-spacing: 0.12em;
116
- text-transform: uppercase;
117
- color: var(--cream);
118
- background: var(--accent);
119
- border: none;
120
- border-radius: 1px;
121
- cursor: pointer;
122
- transition: background 0.3s, transform 0.2s, box-shadow 0.3s;
123
- animation: fadeUp 0.8s cubic-bezier(0.16, 1, 0.3, 1) 0.45s both;
124
- }
125
-
126
- .cta:hover {
127
- background: var(--accent-light);
128
- transform: translateY(-1px);
129
- box-shadow: 0 8px 32px rgba(200, 85, 61, 0.3);
130
- }
131
-
132
- .cta:active {
133
- transform: translateY(0);
134
- }
135
-
136
- .cta svg {
137
- width: 16px;
138
- height: 16px;
139
- transition: transform 0.3s;
140
- }
141
-
142
- .cta:hover svg {
143
- transform: translateX(3px);
144
- }
145
-
146
- .rule {
147
- display: block;
148
- width: 40px;
149
- height: 1px;
150
- background: rgba(244, 240, 235, 0.12);
151
- margin-bottom: 24px;
152
- animation: ruleIn 1s cubic-bezier(0.16, 1, 0.3, 1) 0.3s both;
153
- }
154
-
155
- @keyframes fadeUp {
156
- from { opacity: 0; transform: translateY(16px); }
157
- to { opacity: 1; transform: translateY(0); }
158
- }
159
-
160
- @keyframes ruleIn {
161
- from { opacity: 0; width: 0; }
162
- to { opacity: 1; width: 40px; }
163
- }
164
- </style>
165
- </head>
166
- <body>
167
- <div class="noise"></div>
168
- <div class="card">
169
- <p class="label">Introducing</p>
170
- <h1 class="heading">Craft something<br><em>extraordinary</em></h1>
171
- <span class="rule"></span>
172
- <p class="desc">Where restraint meets ambition. Build interfaces that command attention through precision, not noise.</p>
173
- <button class="cta">
174
- Get started
175
- <svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
176
- <path d="M3 8h10M9 4l4 4-4 4"/>
177
- </svg>
178
- </button>
179
- </div>
180
- </body>
181
- </html>