opencode-agora 0.3.0 → 0.4.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 (168) hide show
  1. package/README.md +217 -52
  2. package/dist/cli/app.d.ts +3 -0
  3. package/dist/cli/app.d.ts.map +1 -1
  4. package/dist/cli/app.js +1053 -183
  5. package/dist/cli/app.js.map +1 -1
  6. package/dist/cli/chat-renderer.d.ts +31 -0
  7. package/dist/cli/chat-renderer.d.ts.map +1 -0
  8. package/dist/cli/chat-renderer.js +275 -0
  9. package/dist/cli/chat-renderer.js.map +1 -0
  10. package/dist/cli/commands-meta.d.ts +21 -0
  11. package/dist/cli/commands-meta.d.ts.map +1 -0
  12. package/dist/cli/commands-meta.js +600 -0
  13. package/dist/cli/commands-meta.js.map +1 -0
  14. package/dist/cli/completions.d.ts +18 -0
  15. package/dist/cli/completions.d.ts.map +1 -0
  16. package/dist/cli/completions.js +190 -0
  17. package/dist/cli/completions.js.map +1 -0
  18. package/dist/cli/mcp-server.d.ts +4 -0
  19. package/dist/cli/mcp-server.d.ts.map +1 -0
  20. package/dist/cli/mcp-server.js +277 -0
  21. package/dist/cli/mcp-server.js.map +1 -0
  22. package/dist/cli/menu.d.ts +7 -0
  23. package/dist/cli/menu.d.ts.map +1 -0
  24. package/dist/cli/menu.js +164 -0
  25. package/dist/cli/menu.js.map +1 -0
  26. package/dist/cli/pages/community.d.ts +3 -0
  27. package/dist/cli/pages/community.d.ts.map +1 -0
  28. package/dist/cli/pages/community.js +276 -0
  29. package/dist/cli/pages/community.js.map +1 -0
  30. package/dist/cli/pages/helpers.d.ts +32 -0
  31. package/dist/cli/pages/helpers.d.ts.map +1 -0
  32. package/dist/cli/pages/helpers.js +67 -0
  33. package/dist/cli/pages/helpers.js.map +1 -0
  34. package/dist/cli/pages/home.d.ts +3 -0
  35. package/dist/cli/pages/home.d.ts.map +1 -0
  36. package/dist/cli/pages/home.js +148 -0
  37. package/dist/cli/pages/home.js.map +1 -0
  38. package/dist/cli/pages/marketplace.d.ts +3 -0
  39. package/dist/cli/pages/marketplace.d.ts.map +1 -0
  40. package/dist/cli/pages/marketplace.js +179 -0
  41. package/dist/cli/pages/marketplace.js.map +1 -0
  42. package/dist/cli/pages/news.d.ts +3 -0
  43. package/dist/cli/pages/news.d.ts.map +1 -0
  44. package/dist/cli/pages/news.js +561 -0
  45. package/dist/cli/pages/news.js.map +1 -0
  46. package/dist/cli/pages/settings.d.ts +3 -0
  47. package/dist/cli/pages/settings.d.ts.map +1 -0
  48. package/dist/cli/pages/settings.js +166 -0
  49. package/dist/cli/pages/settings.js.map +1 -0
  50. package/dist/cli/pages/types.d.ts +67 -0
  51. package/dist/cli/pages/types.d.ts.map +1 -0
  52. package/dist/cli/pages/types.js +2 -0
  53. package/dist/cli/pages/types.js.map +1 -0
  54. package/dist/cli/prompter.d.ts +135 -0
  55. package/dist/cli/prompter.d.ts.map +1 -0
  56. package/dist/cli/prompter.js +675 -0
  57. package/dist/cli/prompter.js.map +1 -0
  58. package/dist/cli/shell.d.ts +23 -0
  59. package/dist/cli/shell.d.ts.map +1 -0
  60. package/dist/cli/shell.js +819 -0
  61. package/dist/cli/shell.js.map +1 -0
  62. package/dist/cli/tui.d.ts +7 -0
  63. package/dist/cli/tui.d.ts.map +1 -0
  64. package/dist/cli/tui.js +373 -0
  65. package/dist/cli/tui.js.map +1 -0
  66. package/dist/cli.js +1 -1
  67. package/dist/cli.js.map +1 -1
  68. package/dist/commands.d.ts +14 -0
  69. package/dist/commands.d.ts.map +1 -0
  70. package/dist/commands.js +28 -0
  71. package/dist/commands.js.map +1 -0
  72. package/dist/community/client.d.ts +47 -0
  73. package/dist/community/client.d.ts.map +1 -0
  74. package/dist/community/client.js +245 -0
  75. package/dist/community/client.js.map +1 -0
  76. package/dist/community/types.d.ts +50 -0
  77. package/dist/community/types.d.ts.map +1 -0
  78. package/dist/community/types.js +11 -0
  79. package/dist/community/types.js.map +1 -0
  80. package/dist/config.d.ts +1 -3
  81. package/dist/config.d.ts.map +1 -1
  82. package/dist/config.js +0 -17
  83. package/dist/config.js.map +1 -1
  84. package/dist/data.d.ts +1 -1
  85. package/dist/data.d.ts.map +1 -1
  86. package/dist/data.js +667 -3
  87. package/dist/data.js.map +1 -1
  88. package/dist/format.d.ts +5 -39
  89. package/dist/format.d.ts.map +1 -1
  90. package/dist/format.js +5 -120
  91. package/dist/format.js.map +1 -1
  92. package/dist/history.d.ts +13 -0
  93. package/dist/history.d.ts.map +1 -0
  94. package/dist/history.js +37 -0
  95. package/dist/history.js.map +1 -0
  96. package/dist/index.d.ts.map +1 -1
  97. package/dist/index.js +114 -234
  98. package/dist/index.js.map +1 -1
  99. package/dist/init.d.ts.map +1 -1
  100. package/dist/init.js +4 -9
  101. package/dist/init.js.map +1 -1
  102. package/dist/live.d.ts +4 -0
  103. package/dist/live.d.ts.map +1 -1
  104. package/dist/live.js +11 -3
  105. package/dist/live.js.map +1 -1
  106. package/dist/marketplace.d.ts +9 -0
  107. package/dist/marketplace.d.ts.map +1 -1
  108. package/dist/marketplace.js +105 -15
  109. package/dist/marketplace.js.map +1 -1
  110. package/dist/news/cache.d.ts +13 -0
  111. package/dist/news/cache.d.ts.map +1 -0
  112. package/dist/news/cache.js +65 -0
  113. package/dist/news/cache.js.map +1 -0
  114. package/dist/news/score.d.ts +4 -0
  115. package/dist/news/score.d.ts.map +1 -0
  116. package/dist/news/score.js +43 -0
  117. package/dist/news/score.js.map +1 -0
  118. package/dist/news/sources/arxiv.d.ts +9 -0
  119. package/dist/news/sources/arxiv.d.ts.map +1 -0
  120. package/dist/news/sources/arxiv.js +103 -0
  121. package/dist/news/sources/arxiv.js.map +1 -0
  122. package/dist/news/sources/github-trending.d.ts +9 -0
  123. package/dist/news/sources/github-trending.d.ts.map +1 -0
  124. package/dist/news/sources/github-trending.js +93 -0
  125. package/dist/news/sources/github-trending.js.map +1 -0
  126. package/dist/news/sources/hn.d.ts +9 -0
  127. package/dist/news/sources/hn.d.ts.map +1 -0
  128. package/dist/news/sources/hn.js +53 -0
  129. package/dist/news/sources/hn.js.map +1 -0
  130. package/dist/news/sources/reddit.d.ts +9 -0
  131. package/dist/news/sources/reddit.d.ts.map +1 -0
  132. package/dist/news/sources/reddit.js +68 -0
  133. package/dist/news/sources/reddit.js.map +1 -0
  134. package/dist/news/sources/rss.d.ts +14 -0
  135. package/dist/news/sources/rss.d.ts.map +1 -0
  136. package/dist/news/sources/rss.js +102 -0
  137. package/dist/news/sources/rss.js.map +1 -0
  138. package/dist/news/types.d.ts +39 -0
  139. package/dist/news/types.d.ts.map +1 -0
  140. package/dist/news/types.js +47 -0
  141. package/dist/news/types.js.map +1 -0
  142. package/dist/preferences.d.ts +14 -0
  143. package/dist/preferences.d.ts.map +1 -0
  144. package/dist/preferences.js +31 -0
  145. package/dist/preferences.js.map +1 -0
  146. package/dist/settings.d.ts +26 -0
  147. package/dist/settings.d.ts.map +1 -0
  148. package/dist/settings.js +257 -0
  149. package/dist/settings.js.map +1 -0
  150. package/dist/transcript.d.ts +28 -0
  151. package/dist/transcript.d.ts.map +1 -0
  152. package/dist/transcript.js +79 -0
  153. package/dist/transcript.js.map +1 -0
  154. package/dist/types.d.ts +6 -1
  155. package/dist/types.d.ts.map +1 -1
  156. package/dist/ui.d.ts +157 -0
  157. package/dist/ui.d.ts.map +1 -0
  158. package/dist/ui.js +296 -0
  159. package/dist/ui.js.map +1 -0
  160. package/package.json +11 -9
  161. package/dist/api.d.ts +0 -72
  162. package/dist/api.d.ts.map +0 -1
  163. package/dist/api.js +0 -109
  164. package/dist/api.js.map +0 -1
  165. package/dist/logger.d.ts +0 -20
  166. package/dist/logger.d.ts.map +0 -1
  167. package/dist/logger.js +0 -59
  168. package/dist/logger.js.map +0 -1
package/dist/ui.js ADDED
@@ -0,0 +1,296 @@
1
+ /**
2
+ * Terminal styling for the agora CLI — a flat, minimal look: one accent colour
3
+ * for identifiers, dim for everything secondary, plain foreground for body text,
4
+ * plus a gradient wordmark banner and a rounded header frame for the standalone
5
+ * hub experience.
6
+ *
7
+ * Colour is opt-in. It is emitted only to an interactive TTY, and never under
8
+ * `NO_COLOR`, `TERM=dumb`, or `--json`. Non-TTY callers (pipes, the test
9
+ * harness) get plain strings, so output stays assertable.
10
+ *
11
+ * The wordmark art, gradient, and accent colour below come from the Claude
12
+ * Design handoff (docs/claude-design-brief.md → `agora-wordmark.ts`). Palette:
13
+ * "agora at golden hour" — Aegean blue → marble warm → terracotta.
14
+ */
15
+ const RESET = '\x1b[0m';
16
+ /**
17
+ * ACCENT — used for package identifiers in list output. A desaturated amber:
18
+ * high contrast on both light and dark terminals, and distinct from the
19
+ * gradient stops so ids never blend into the banner.
20
+ */
21
+ export const ACCENT = {
22
+ hex: '#D4A85A',
23
+ rgb: [212, 168, 90],
24
+ ansi256: 179, // xterm-256 warm gold
25
+ ansiBasic: 33 // ANSI yellow (fg) — 16-colour fallback
26
+ };
27
+ export const ORANGE = {
28
+ hex: '#FF8C00',
29
+ rgb: [255, 140, 0],
30
+ ansi256: 208,
31
+ ansiBasic: 33
32
+ };
33
+ const plain = {
34
+ accent: (value) => value,
35
+ dim: (value) => value,
36
+ bold: (value) => value,
37
+ orange: (value) => value
38
+ };
39
+ /**
40
+ * Builds a styler. The accent colour is emitted as 24-bit when the terminal
41
+ * advertises truecolor, otherwise as the nearest xterm-256 cube colour.
42
+ */
43
+ export function createStyler(useColor, trueColor = false) {
44
+ if (!useColor)
45
+ return plain;
46
+ const accentCode = trueColor
47
+ ? `38;2;${ACCENT.rgb[0]};${ACCENT.rgb[1]};${ACCENT.rgb[2]}`
48
+ : `38;5;${ACCENT.ansi256}`;
49
+ const wrap = (code) => (value) => `\x1b[${code}m${value}${RESET}`;
50
+ const orangeCode = trueColor
51
+ ? `38;2;${ORANGE.rgb[0]};${ORANGE.rgb[1]};${ORANGE.rgb[2]}`
52
+ : `38;5;${ORANGE.ansi256}`;
53
+ return {
54
+ accent: wrap(accentCode),
55
+ dim: wrap('2'),
56
+ bold: wrap('1'),
57
+ orange: wrap(orangeCode)
58
+ };
59
+ }
60
+ export function shouldUseColor(stream, env, json) {
61
+ if (json)
62
+ return false;
63
+ if (env.NO_COLOR != null)
64
+ return false;
65
+ if (env.TERM === 'dumb')
66
+ return false;
67
+ return Boolean(stream.isTTY);
68
+ }
69
+ /** 24-bit colour is only safe to emit when the terminal advertises it. */
70
+ export function supportsTrueColor(env) {
71
+ const colorterm = env.COLORTERM ?? '';
72
+ return colorterm === 'truecolor' || colorterm === '24bit';
73
+ }
74
+ // ── Wordmark + banner ───────────────────────────────────────────────────────
75
+ /**
76
+ * Carved-relief letterforms (7 rows × 52 cols). Built from a SOLID skeleton +
77
+ * an algorithmic shading pass: cells whose neighbour above is empty get `▓`
78
+ * (top highlight), cells whose neighbour below is empty get `▒` (bottom
79
+ * shadow), plus a few weather specks on stroke interiors. The pass only ever
80
+ * rewrites existing `█` cells, so it cannot bleed into the O / R counters.
81
+ * Reads as top-lit carved stone; survives `NO_COLOR` because the texture is
82
+ * in the *characters*, not the colours.
83
+ */
84
+ export const AGORA_WORDMARK_RELIEF = [
85
+ ' ▓▓▓ ▓▓▓▓▓ ▓▓▓▓▓ ▓▓▓▓▓▓ ▓▓▓ ',
86
+ ' ▓▒▒▒▓ ▓█ ▒▓ ▓█ █▓ ██ █▓ ▓▒▒▒▓ ',
87
+ ' ▓▒ █▓ █▒ █▒ ██ █▒ █▒ ▓▒ █▓ ',
88
+ ' ██ ▒█ ██ ▓▓▓▓ ██ ██ ██▓▓▓▒ ██ ▒█ ',
89
+ ' ██▓▓▓██ ██ ▒█ ██ █▒ ██ ▒▒ ██▓▓▓██ ',
90
+ ' ██ █▒ ▒█ █▒ ▒█ █▒ ██ ▒▓ ██ █▒ ',
91
+ ' ▒▒ ▒▒ ▒▓▓▓▒ ▒▓▓▓▒ ▒▒ ▒▓ ▒▒ ▒▒ '
92
+ ];
93
+ /**
94
+ * BANNER_GRADIENT — 3 stops sampled across the wordmark's columns.
95
+ * "Marble & terracotta": warm cream → terracotta → deep brick. A purely
96
+ * warm Mediterranean sweep; neither endpoint touches pure black or white,
97
+ * so it holds contrast on either terminal background.
98
+ */
99
+ export const BANNER_GRADIENT = [
100
+ [220, 196, 158], // #DCC49E warm cream
101
+ [198, 106, 74], // #C66A4A terracotta
102
+ [148, 64, 56] // #944038 deep brick
103
+ ];
104
+ function lerp(a, b, t) {
105
+ return Math.round(a + (b - a) * t);
106
+ }
107
+ /** Nearest colour in the xterm-256 6×6×6 cube — the fallback when truecolor is off. */
108
+ function rgbTo256(rgb) {
109
+ const axis = (v) => Math.round((v / 255) * 5);
110
+ return 16 + 36 * axis(rgb[0]) + 6 * axis(rgb[1]) + axis(rgb[2]);
111
+ }
112
+ export function colorize(char, rgb, trueColor) {
113
+ const code = trueColor ? `38;2;${rgb[0]};${rgb[1]};${rgb[2]}` : `38;5;${rgbTo256(rgb)}`;
114
+ return `\x1b[${code}m${char}${RESET}`;
115
+ }
116
+ export function sampleGradient(stops, t) {
117
+ if (stops.length === 1)
118
+ return stops[0];
119
+ const clamped = Math.min(1, Math.max(0, t));
120
+ const span = clamped * (stops.length - 1);
121
+ const index = Math.min(stops.length - 2, Math.floor(span));
122
+ const local = span - index;
123
+ const from = stops[index];
124
+ const to = stops[index + 1];
125
+ return [lerp(from[0], to[0], local), lerp(from[1], to[1], local), lerp(from[2], to[2], local)];
126
+ }
127
+ /** Colorizes each character of `text` across BANNER_GRADIENT stops. */
128
+ export function gradientText(text, opts) {
129
+ if (text.length === 0)
130
+ return text;
131
+ let out = '';
132
+ for (let i = 0; i < text.length; i++) {
133
+ const t = text.length === 1 ? 0 : i / (text.length - 1);
134
+ const rgb = sampleGradient(BANNER_GRADIENT, t);
135
+ out += colorize(text[i], rgb, opts.trueColor);
136
+ }
137
+ return out;
138
+ }
139
+ /**
140
+ * Renders the AGORA wordmark with a left-to-right gradient applied per column
141
+ * (so the gradient stays aligned across all rows), followed by an optional
142
+ * dim subtitle. Degrades to plain block letters when colour is off.
143
+ */
144
+ export function renderBanner(opts) {
145
+ const rows = AGORA_WORDMARK_RELIEF;
146
+ const width = Math.max(...rows.map((line) => line.length));
147
+ const lines = rows.map((line) => {
148
+ if (!opts.color)
149
+ return line;
150
+ let out = '';
151
+ for (let col = 0; col < line.length; col += 1) {
152
+ const char = line[col];
153
+ if (char === ' ') {
154
+ out += char;
155
+ continue;
156
+ }
157
+ const rgb = sampleGradient(BANNER_GRADIENT, col / (width - 1));
158
+ out += colorize(char, rgb, opts.trueColor);
159
+ }
160
+ return out;
161
+ });
162
+ if (opts.subtitle) {
163
+ const subtitle = opts.color ? `\x1b[2m${opts.subtitle}${RESET}` : opts.subtitle;
164
+ lines.push('', subtitle);
165
+ }
166
+ return lines.join('\n');
167
+ }
168
+ /**
169
+ * A calm rounded-corner frame for the welcome header — rounded corners, single
170
+ * sides, a half-block "pillar" prefix on each content line (the pillar reads as
171
+ * a small column — fitting for the agora). The first line is the bold accent
172
+ * title; the rest are dim body text. Border and pillar are accent-tinted; body
173
+ * text is left uncoloured per the design spec.
174
+ */
175
+ export function renderBox(title, body, opts) {
176
+ const styler = createStyler(opts.color, opts.trueColor);
177
+ const contentLines = [title, ...body];
178
+ const textWidth = Math.max(...contentLines.map((line) => line.length));
179
+ // layout per row: │ + 2 pad + "▍ " + text(textWidth) + 2 pad + │
180
+ const inner = 2 + 2 + textWidth + 2;
181
+ const top = styler.accent(`╭${'─'.repeat(inner)}╮`);
182
+ const bottom = styler.accent(`╰${'─'.repeat(inner)}╯`);
183
+ const blank = `${styler.accent('│')}${' '.repeat(inner)}${styler.accent('│')}`;
184
+ const row = (text, isTitle) => {
185
+ const trailing = ' '.repeat(textWidth - text.length);
186
+ const styledText = isTitle ? styler.bold(text) : text;
187
+ return `${styler.accent('│')} ${styler.accent('▍')} ${styledText}${trailing} ${styler.accent('│')}`;
188
+ };
189
+ return [top, blank, ...contentLines.map((line, i) => row(line, i === 0)), blank, bottom].join('\n');
190
+ }
191
+ // ── Movement tints — distinct per-kind accent for the ▍ marker ──────────────
192
+ /**
193
+ * One tint per chat-movement kind so a transcript reads at a glance:
194
+ * thinking = cool grey-tan (low energy), tool = terracotta (mid), response =
195
+ * accent amber (full). All three sit inside the BANNER_GRADIENT palette.
196
+ */
197
+ export const MOVEMENT_COLOR = {
198
+ thinking: { hex: '#8A7866', rgb: [138, 120, 102] },
199
+ tool: { hex: '#C66A4A', rgb: [198, 106, 74] },
200
+ response: { hex: '#D4A85A', rgb: [212, 168, 90] }
201
+ };
202
+ /** Colorize `▍` with the tint for a given movement kind. */
203
+ export function movementBar(kind, opts) {
204
+ return colorize('▍', MOVEMENT_COLOR[kind].rgb, opts.trueColor);
205
+ }
206
+ // ── Meander — Greek-key frieze + loading bar ────────────────────────────────
207
+ /**
208
+ * 52-cell middle row of zigzag teeth — alternating upper-half / lower-half
209
+ * blocks. In a 3-row frieze the teeth attach to the top bar (`▀▀`) and the
210
+ * bottom bar (`▄▄`) alternately, creating voids that zigzag between top and
211
+ * bottom — the classic Greek-key reading.
212
+ */
213
+ export const MEANDER = '▀▀▄▄'.repeat(13);
214
+ /** Solid 52-cell bar — the top and bottom of the Greek-key frieze. */
215
+ const MEANDER_BAR = '█'.repeat(52);
216
+ const MEANDER_DIM = [107, 98, 83]; // #6B6253 — brightened for dark terminal visibility
217
+ const MEANDER_TAIL = [122, 90, 72]; // #7A5A48 — warm-dim trailing tail
218
+ /** Per-cell colour for the indeterminate wave at time `tMs`. */
219
+ function meanderWaveColor(i, tMs) {
220
+ const speed = 0.018; // cells per ms
221
+ const period = MEANDER.length + 8; // 8-cell pause between sweeps
222
+ const head = Math.floor(tMs * speed) % period;
223
+ const dist = (head - i + period) % period;
224
+ if (dist === 0)
225
+ return ACCENT.rgb;
226
+ if (dist <= 2)
227
+ return MOVEMENT_COLOR.tool.rgb;
228
+ if (dist <= 4)
229
+ return MEANDER_TAIL;
230
+ return MEANDER_DIM;
231
+ }
232
+ /** Per-cell colour for the determinate progress bar at `pct`. */
233
+ function meanderProgressColor(i, pct) {
234
+ const n = MEANDER.length;
235
+ const filled = Math.round((n * Math.max(0, Math.min(100, pct))) / 100);
236
+ if (i < filled - 1)
237
+ return ACCENT.rgb;
238
+ if (i === filled - 1)
239
+ return MOVEMENT_COLOR.tool.rgb;
240
+ return MEANDER_DIM;
241
+ }
242
+ function renderMeanderRow(row, mode, opts) {
243
+ let out = '';
244
+ for (let i = 0; i < row.length; i++) {
245
+ const ch = row[i];
246
+ let rgb;
247
+ if (mode === 'wave')
248
+ rgb = meanderWaveColor(i, opts.tMs ?? 0);
249
+ else if (mode === 'progress')
250
+ rgb = meanderProgressColor(i, opts.pct ?? 0);
251
+ else
252
+ rgb = MEANDER_DIM;
253
+ out += colorize(ch, rgb, opts.trueColor);
254
+ }
255
+ return out;
256
+ }
257
+ /**
258
+ * Render the meander. `idle` and `wave` return a 3-row Greek-key ribbon
259
+ * (solid bar + square teeth + solid bar). `progress` returns a single inline
260
+ * row of square teeth so it can be redrawn in place with `\r`.
261
+ */
262
+ export function renderMeander(opts) {
263
+ const mode = opts.mode ?? 'idle';
264
+ if (mode === 'progress') {
265
+ return renderMeanderRow(MEANDER, mode, opts);
266
+ }
267
+ return [
268
+ renderMeanderRow(MEANDER_BAR, mode, opts),
269
+ renderMeanderRow(MEANDER, mode, opts),
270
+ renderMeanderRow(MEANDER_BAR, mode, opts)
271
+ ].join('\n');
272
+ }
273
+ // ── Mascot — Ionic column capital that dances while the model thinks ────────
274
+ /**
275
+ * 5-char dancing figure built from the top of an Ionic column: the corner
276
+ * brackets `╭ ╮ ╰ ╯` form the *abacus* (flat slab), the two `⊙` characters
277
+ * are the *volutes* (spiral scrolls), and the `─` between them is the
278
+ * *echinus*. Only the abacus corners swap between frames — the volutes and
279
+ * echinus are fixed — so the eye reads it as one figure swaying, not four
280
+ * different glyphs flickering.
281
+ *
282
+ * Lifecycle: paint while a `thinking` movement is in flight; clear the line
283
+ * on the first response token so the user's eye lands on the answer, not the
284
+ * dance. Survives `NO_COLOR` because the silhouette is in the characters.
285
+ */
286
+ export const MASCOT_FRAMES = [
287
+ '╭⊙─⊙╮', // both corners up — abacus level
288
+ '╭⊙─⊙╯', // right corner dips — column leans right
289
+ '╰⊙─⊙╯', // both corners down
290
+ '╰⊙─⊙╮' // left corner dips — column leans left
291
+ ];
292
+ /** Pick the current mascot frame given elapsed thinking time in ms. */
293
+ export function mascotFrame(tMs) {
294
+ return MASCOT_FRAMES[Math.floor(tMs / 200) % MASCOT_FRAMES.length];
295
+ }
296
+ //# sourceMappingURL=ui.js.map
package/dist/ui.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "opencode-agora",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Agora - The Developer's Terminal Marketplace & Community Hub for OpenCode",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "type": "module",
8
8
  "bin": {
9
- "agora": "./dist/cli.js",
10
- "opencode-agora": "./dist/cli.js"
9
+ "agora": "dist/cli.js",
10
+ "opencode-agora": "dist/cli.js"
11
11
  },
12
12
  "repository": {
13
13
  "type": "git",
@@ -26,7 +26,7 @@
26
26
  "dist"
27
27
  ],
28
28
  "scripts": {
29
- "build": "tsc",
29
+ "build": "rm -rf dist && tsc && chmod +x dist/cli.js",
30
30
  "dev": "bun run build && cp -r dist/* ~/.config/opencode/plugins/agora/",
31
31
  "hub:dev": "bun hub/server.ts",
32
32
  "typecheck": "tsc -p tsconfig.check.json",
@@ -49,18 +49,20 @@
49
49
  "author": "IrgenSlj",
50
50
  "license": "MIT",
51
51
  "dependencies": {
52
- "zod": "^3.24.0"
52
+ "@clack/prompts": "^1.4.0",
53
+ "@modelcontextprotocol/sdk": "^1.29.0",
54
+ "zod": "^4.4.3"
53
55
  },
54
56
  "devDependencies": {
55
- "@eslint/js": "^9.0.0",
57
+ "@eslint/js": "^10.0.1",
56
58
  "@opencode-ai/plugin": "^1.0.0",
57
59
  "@types/bun": "^1.2.0",
58
- "@types/node": "^22.0.0",
60
+ "@types/node": "^25.8.0",
59
61
  "bun-types": "^1.2.0",
60
- "eslint": "^9.0.0",
62
+ "eslint": "^10.3.0",
61
63
  "eslint-config-prettier": "^10.0.0",
62
64
  "prettier": "^3.0.0",
63
- "typescript": "^5.7.0",
65
+ "typescript": "^6.0.3",
64
66
  "typescript-eslint": "^8.0.0"
65
67
  }
66
68
  }
package/dist/api.d.ts DELETED
@@ -1,72 +0,0 @@
1
- export interface Package {
2
- id: string;
3
- name: string;
4
- description: string;
5
- author: string;
6
- version: string;
7
- category: string;
8
- tags: string[];
9
- stars: number;
10
- installs: number;
11
- repository?: string;
12
- npm_package?: string;
13
- created_at: string;
14
- }
15
- export interface Workflow {
16
- id: string;
17
- name: string;
18
- description: string;
19
- author: string;
20
- prompt: string;
21
- model?: string;
22
- tags: string[];
23
- stars: number;
24
- forks: number;
25
- created_at: string;
26
- }
27
- export interface Discussion {
28
- id: string;
29
- title: string;
30
- content: string;
31
- author: string;
32
- category: string;
33
- stars: number;
34
- reply_count: number;
35
- created_at: string;
36
- }
37
- export interface User {
38
- id: string;
39
- username: string;
40
- display_name?: string;
41
- bio?: string;
42
- avatar_url?: string;
43
- package_count?: number;
44
- workflow_count?: number;
45
- discussion_count?: number;
46
- created_at?: string;
47
- }
48
- export declare function searchPackages(query: string, category?: string): Promise<Package[]>;
49
- export declare function getPackage(id: string): Promise<Package | null>;
50
- export declare function searchWorkflows(query: string): Promise<Workflow[]>;
51
- export declare function getWorkflow(id: string): Promise<Workflow | null>;
52
- export declare function getTrending(_type?: 'packages' | 'workflows' | 'all'): Promise<{
53
- packages: unknown[];
54
- workflows: unknown[];
55
- }>;
56
- export declare function getDiscussions(category?: string): Promise<Discussion[]>;
57
- export declare function createDiscussion(data: {
58
- title: string;
59
- content: string;
60
- category: string;
61
- author?: string;
62
- }, token?: string): Promise<{
63
- id: string;
64
- } | null>;
65
- export declare function getUser(username: string): Promise<User | null>;
66
- export declare function searchNpmPackages(query: string): Promise<{
67
- npm: any[];
68
- mcp: any[];
69
- }>;
70
- export declare function getMcpPackage(name: string): Promise<any | null>;
71
- export declare function getGitHubRepo(owner: string, repo: string): Promise<any | null>;
72
- //# sourceMappingURL=api.d.ts.map
package/dist/api.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
package/dist/api.js DELETED
@@ -1,109 +0,0 @@
1
- const API_BASE = process.env.AGORA_API_URL || '';
2
- export async function searchPackages(query, category) {
3
- if (!API_BASE)
4
- return [];
5
- const params = new URLSearchParams({ q: query });
6
- if (category)
7
- params.set('category', category);
8
- const res = await fetch(`${API_BASE}/api/packages?${params}`);
9
- if (!res.ok)
10
- return [];
11
- const data = (await res.json());
12
- return data.packages || [];
13
- }
14
- export async function getPackage(id) {
15
- if (!API_BASE)
16
- return null;
17
- const res = await fetch(`${API_BASE}/api/packages/${id}`);
18
- if (!res.ok)
19
- return null;
20
- const data = (await res.json());
21
- return data.package || null;
22
- }
23
- export async function searchWorkflows(query) {
24
- if (!API_BASE)
25
- return [];
26
- const res = await fetch(`${API_BASE}/api/workflows?q=${encodeURIComponent(query)}`);
27
- if (!res.ok)
28
- return [];
29
- const data = (await res.json());
30
- return data.workflows || [];
31
- }
32
- export async function getWorkflow(id) {
33
- if (!API_BASE)
34
- return null;
35
- const res = await fetch(`${API_BASE}/api/workflows/${id}`);
36
- if (!res.ok)
37
- return null;
38
- const data = (await res.json());
39
- return data.workflow || null;
40
- }
41
- export async function getTrending(_type = 'all') {
42
- if (!API_BASE)
43
- return { packages: [], workflows: [] };
44
- const res = await fetch(`${API_BASE}/api/trending`);
45
- if (!res.ok)
46
- return { packages: [], workflows: [] };
47
- return res.json();
48
- }
49
- export async function getDiscussions(category) {
50
- if (!API_BASE)
51
- return [];
52
- const params = category ? `?category=${category}` : '';
53
- const res = await fetch(`${API_BASE}/api/discussions${params}`);
54
- if (!res.ok)
55
- return [];
56
- const data = (await res.json());
57
- return data.discussions || [];
58
- }
59
- export async function createDiscussion(data, token) {
60
- if (!API_BASE) {
61
- throw new Error('AGORA_API_URL is not set. The hosted backend is not yet deployed — set AGORA_API_URL to your self-hosted backend (see backend/) to use --api mode.');
62
- }
63
- const headers = new Headers({ 'Content-Type': 'application/json' });
64
- if (token)
65
- headers.set('Authorization', `Bearer ${token}`);
66
- const res = await fetch(`${API_BASE}/api/discussions`, {
67
- method: 'POST',
68
- headers,
69
- body: JSON.stringify(data)
70
- });
71
- if (!res.ok)
72
- return null;
73
- const payload = (await res.json());
74
- return payload.discussion || payload;
75
- }
76
- export async function getUser(username) {
77
- if (!API_BASE)
78
- return null;
79
- const res = await fetch(`${API_BASE}/api/users/${username}`);
80
- if (!res.ok)
81
- return null;
82
- const data = (await res.json());
83
- return data.user || null;
84
- }
85
- export async function searchNpmPackages(query) {
86
- if (!API_BASE)
87
- return { npm: [], mcp: [] };
88
- const res = await fetch(`${API_BASE}/api/aggregate/packages?q=${encodeURIComponent(query)}`);
89
- if (!res.ok)
90
- return { npm: [], mcp: [] };
91
- return res.json();
92
- }
93
- export async function getMcpPackage(name) {
94
- if (!API_BASE)
95
- return null;
96
- const res = await fetch(`${API_BASE}/api/aggregate/mcp/${name}`);
97
- if (!res.ok)
98
- return null;
99
- return res.json();
100
- }
101
- export async function getGitHubRepo(owner, repo) {
102
- if (!API_BASE)
103
- return null;
104
- const res = await fetch(`${API_BASE}/api/aggregate/github/${owner}/${repo}`);
105
- if (!res.ok)
106
- return null;
107
- return res.json();
108
- }
109
- //# sourceMappingURL=api.js.map
package/dist/api.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
package/dist/logger.d.ts DELETED
@@ -1,20 +0,0 @@
1
- export declare enum LogLevel {
2
- DEBUG = 0,
3
- INFO = 1,
4
- WARN = 2,
5
- ERROR = 3
6
- }
7
- declare class Logger {
8
- private level;
9
- setLevel(level: LogLevel): void;
10
- debug(...args: any[]): void;
11
- info(...args: any[]): void;
12
- warn(...args: any[]): void;
13
- error(...args: any[]): void;
14
- }
15
- export declare const logger: Logger;
16
- export declare function formatError(error: unknown): string;
17
- export declare function safeExecute<T>(fn: () => T, fallback: T, context?: string): T;
18
- export declare function safeExecuteAsync<T>(fn: () => Promise<T>, fallback: T, context?: string): Promise<T>;
19
- export {};
20
- //# sourceMappingURL=logger.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;CACV;AAED,cAAM,MAAM;IACV,OAAO,CAAC,KAAK,CAA2B;IAExC,QAAQ,CAAC,KAAK,EAAE,QAAQ;IAIxB,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE;IAMpB,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE;IAMnB,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE;IAMnB,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE;CAKrB;AAED,eAAO,MAAM,MAAM,QAAe,CAAC;AAEnC,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKlD;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,SAAK,GAAG,CAAC,CAOxE;AAED,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,QAAQ,EAAE,CAAC,EACX,OAAO,SAAK,GACX,OAAO,CAAC,CAAC,CAAC,CAOZ"}
package/dist/logger.js DELETED
@@ -1,59 +0,0 @@
1
- export var LogLevel;
2
- (function (LogLevel) {
3
- LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
4
- LogLevel[LogLevel["INFO"] = 1] = "INFO";
5
- LogLevel[LogLevel["WARN"] = 2] = "WARN";
6
- LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
7
- })(LogLevel || (LogLevel = {}));
8
- class Logger {
9
- level = LogLevel.INFO;
10
- setLevel(level) {
11
- this.level = level;
12
- }
13
- debug(...args) {
14
- if (this.level <= LogLevel.DEBUG) {
15
- console.debug('[Agora DEBUG]', ...args);
16
- }
17
- }
18
- info(...args) {
19
- if (this.level <= LogLevel.INFO) {
20
- console.log('[Agora INFO]', ...args);
21
- }
22
- }
23
- warn(...args) {
24
- if (this.level <= LogLevel.WARN) {
25
- console.warn('[Agora WARN]', ...args);
26
- }
27
- }
28
- error(...args) {
29
- if (this.level <= LogLevel.ERROR) {
30
- console.error('[Agora ERROR]', ...args);
31
- }
32
- }
33
- }
34
- export const logger = new Logger();
35
- export function formatError(error) {
36
- if (error instanceof Error) {
37
- return `${error.message}${error.stack ? `\n${error.stack}` : ''}`;
38
- }
39
- return String(error);
40
- }
41
- export function safeExecute(fn, fallback, context = '') {
42
- try {
43
- return fn();
44
- }
45
- catch (error) {
46
- logger.error(`Error in ${context}:`, formatError(error));
47
- return fallback;
48
- }
49
- }
50
- export async function safeExecuteAsync(fn, fallback, context = '') {
51
- try {
52
- return await fn();
53
- }
54
- catch (error) {
55
- logger.error(`Async error in ${context}:`, formatError(error));
56
- return fallback;
57
- }
58
- }
59
- //# sourceMappingURL=logger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,yCAAS,CAAA;IACT,uCAAQ,CAAA;IACR,uCAAQ,CAAA;IACR,yCAAS,CAAA;AACX,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB;AAED,MAAM,MAAM;IACF,KAAK,GAAa,QAAQ,CAAC,IAAI,CAAC;IAExC,QAAQ,CAAC,KAAe;QACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,GAAG,IAAW;QAClB,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,IAAI,CAAC,GAAG,IAAW;QACjB,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,IAAI,CAAC,GAAG,IAAW;QACjB,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,IAAW;QAClB,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;AAEnC,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACpE,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,WAAW,CAAI,EAAW,EAAE,QAAW,EAAE,OAAO,GAAG,EAAE;IACnE,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,YAAY,OAAO,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QACzD,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAoB,EACpB,QAAW,EACX,OAAO,GAAG,EAAE;IAEZ,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,kBAAkB,OAAO,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC"}