opencode-agora 0.4.2 → 0.4.3

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 (184) hide show
  1. package/README.md +42 -2
  2. package/dist/cli/app.d.ts.map +1 -1
  3. package/dist/cli/app.js +14 -0
  4. package/dist/cli/app.js.map +1 -1
  5. package/dist/cli/commands/browse.d.ts.map +1 -1
  6. package/dist/cli/commands/browse.js +1 -5
  7. package/dist/cli/commands/browse.js.map +1 -1
  8. package/dist/cli/commands/capabilities.d.ts +3 -0
  9. package/dist/cli/commands/capabilities.d.ts.map +1 -0
  10. package/dist/cli/commands/capabilities.js +146 -0
  11. package/dist/cli/commands/capabilities.js.map +1 -0
  12. package/dist/cli/commands/community.d.ts.map +1 -1
  13. package/dist/cli/commands/community.js.map +1 -1
  14. package/dist/cli/commands/curate.d.ts +9 -0
  15. package/dist/cli/commands/curate.d.ts.map +1 -0
  16. package/dist/cli/commands/curate.js +62 -0
  17. package/dist/cli/commands/curate.js.map +1 -0
  18. package/dist/cli/commands/doctor.d.ts +3 -0
  19. package/dist/cli/commands/doctor.d.ts.map +1 -0
  20. package/dist/cli/commands/doctor.js +77 -0
  21. package/dist/cli/commands/doctor.js.map +1 -0
  22. package/dist/cli/commands/export.d.ts.map +1 -1
  23. package/dist/cli/commands/export.js +5 -3
  24. package/dist/cli/commands/export.js.map +1 -1
  25. package/dist/cli/commands/freeze.d.ts +3 -0
  26. package/dist/cli/commands/freeze.d.ts.map +1 -0
  27. package/dist/cli/commands/freeze.js +62 -0
  28. package/dist/cli/commands/freeze.js.map +1 -0
  29. package/dist/cli/commands/init.d.ts.map +1 -1
  30. package/dist/cli/commands/init.js +5 -1
  31. package/dist/cli/commands/init.js.map +1 -1
  32. package/dist/cli/commands/installed.d.ts +3 -0
  33. package/dist/cli/commands/installed.d.ts.map +1 -0
  34. package/dist/cli/commands/installed.js +82 -0
  35. package/dist/cli/commands/installed.js.map +1 -0
  36. package/dist/cli/commands/marketplace.d.ts.map +1 -1
  37. package/dist/cli/commands/marketplace.js.map +1 -1
  38. package/dist/cli/commands/notify.d.ts.map +1 -1
  39. package/dist/cli/commands/notify.js.map +1 -1
  40. package/dist/cli/commands/operations.d.ts.map +1 -1
  41. package/dist/cli/commands/operations.js +64 -1
  42. package/dist/cli/commands/operations.js.map +1 -1
  43. package/dist/cli/commands/ping.js +2 -1
  44. package/dist/cli/commands/ping.js.map +1 -1
  45. package/dist/cli/commands/scan.js.map +1 -1
  46. package/dist/cli/commands/sync.d.ts +3 -0
  47. package/dist/cli/commands/sync.d.ts.map +1 -0
  48. package/dist/cli/commands/sync.js +172 -0
  49. package/dist/cli/commands/sync.js.map +1 -0
  50. package/dist/cli/commands/today.d.ts.map +1 -1
  51. package/dist/cli/commands/today.js +11 -3
  52. package/dist/cli/commands/today.js.map +1 -1
  53. package/dist/cli/commands/try.d.ts +3 -0
  54. package/dist/cli/commands/try.d.ts.map +1 -0
  55. package/dist/cli/commands/try.js +157 -0
  56. package/dist/cli/commands/try.js.map +1 -0
  57. package/dist/cli/commands/watch.d.ts.map +1 -1
  58. package/dist/cli/commands/watch.js.map +1 -1
  59. package/dist/cli/commands/welcome.d.ts.map +1 -1
  60. package/dist/cli/commands/welcome.js +6 -27
  61. package/dist/cli/commands/welcome.js.map +1 -1
  62. package/dist/cli/commands-meta.d.ts +1 -1
  63. package/dist/cli/commands-meta.d.ts.map +1 -1
  64. package/dist/cli/commands-meta.js +222 -21
  65. package/dist/cli/commands-meta.js.map +1 -1
  66. package/dist/cli/completions-gen.d.ts.map +1 -1
  67. package/dist/cli/completions-gen.js +130 -52
  68. package/dist/cli/completions-gen.js.map +1 -1
  69. package/dist/cli/flags.d.ts.map +1 -1
  70. package/dist/cli/flags.js +7 -0
  71. package/dist/cli/flags.js.map +1 -1
  72. package/dist/cli/format.js +1 -1
  73. package/dist/cli/format.js.map +1 -1
  74. package/dist/cli/helpers.d.ts.map +1 -1
  75. package/dist/cli/helpers.js.map +1 -1
  76. package/dist/cli/mcp-server.d.ts +5 -0
  77. package/dist/cli/mcp-server.d.ts.map +1 -1
  78. package/dist/cli/mcp-server.js +222 -0
  79. package/dist/cli/mcp-server.js.map +1 -1
  80. package/dist/cli/pages/community.d.ts.map +1 -1
  81. package/dist/cli/pages/community.js +4 -7
  82. package/dist/cli/pages/community.js.map +1 -1
  83. package/dist/cli/pages/home.d.ts.map +1 -1
  84. package/dist/cli/pages/home.js +22 -8
  85. package/dist/cli/pages/home.js.map +1 -1
  86. package/dist/cli/pages/marketplace.d.ts.map +1 -1
  87. package/dist/cli/pages/marketplace.js +12 -9
  88. package/dist/cli/pages/marketplace.js.map +1 -1
  89. package/dist/cli/pages/news.d.ts.map +1 -1
  90. package/dist/cli/pages/news.js.map +1 -1
  91. package/dist/cli/pages/stack.d.ts +3 -0
  92. package/dist/cli/pages/stack.d.ts.map +1 -0
  93. package/dist/cli/pages/stack.js +373 -0
  94. package/dist/cli/pages/stack.js.map +1 -0
  95. package/dist/cli/pages/types.d.ts +1 -1
  96. package/dist/cli/pages/types.d.ts.map +1 -1
  97. package/dist/cli/shell.d.ts +1 -1
  98. package/dist/cli/shell.d.ts.map +1 -1
  99. package/dist/cli/shell.js +52 -2
  100. package/dist/cli/shell.js.map +1 -1
  101. package/dist/cli/tui.d.ts.map +1 -1
  102. package/dist/cli/tui.js +14 -4
  103. package/dist/cli/tui.js.map +1 -1
  104. package/dist/community/client.d.ts.map +1 -1
  105. package/dist/community/client.js +3 -1
  106. package/dist/community/client.js.map +1 -1
  107. package/dist/curator/index.d.ts +95 -0
  108. package/dist/curator/index.d.ts.map +1 -0
  109. package/dist/curator/index.js +446 -0
  110. package/dist/curator/index.js.map +1 -0
  111. package/dist/hubs/enrichment.d.ts.map +1 -1
  112. package/dist/hubs/enrichment.js.map +1 -1
  113. package/dist/index.d.ts.map +1 -1
  114. package/dist/index.js +3 -1
  115. package/dist/index.js.map +1 -1
  116. package/dist/marketplace.d.ts +2 -1
  117. package/dist/marketplace.d.ts.map +1 -1
  118. package/dist/marketplace.js +86 -17
  119. package/dist/marketplace.js.map +1 -1
  120. package/dist/outdated.d.ts.map +1 -1
  121. package/dist/outdated.js +25 -4
  122. package/dist/outdated.js.map +1 -1
  123. package/dist/scan.d.ts.map +1 -1
  124. package/dist/scan.js +83 -15
  125. package/dist/scan.js.map +1 -1
  126. package/dist/search/catalog-index.d.ts +107 -0
  127. package/dist/search/catalog-index.d.ts.map +1 -0
  128. package/dist/search/catalog-index.js +276 -0
  129. package/dist/search/catalog-index.js.map +1 -0
  130. package/dist/stack/adapters/claude-code.d.ts +3 -0
  131. package/dist/stack/adapters/claude-code.d.ts.map +1 -0
  132. package/dist/stack/adapters/claude-code.js +282 -0
  133. package/dist/stack/adapters/claude-code.js.map +1 -0
  134. package/dist/stack/adapters/cursor.d.ts +3 -0
  135. package/dist/stack/adapters/cursor.d.ts.map +1 -0
  136. package/dist/stack/adapters/cursor.js +232 -0
  137. package/dist/stack/adapters/cursor.js.map +1 -0
  138. package/dist/stack/adapters/opencode.d.ts +3 -0
  139. package/dist/stack/adapters/opencode.d.ts.map +1 -0
  140. package/dist/stack/adapters/opencode.js +177 -0
  141. package/dist/stack/adapters/opencode.js.map +1 -0
  142. package/dist/stack/adapters/windsurf.d.ts +3 -0
  143. package/dist/stack/adapters/windsurf.d.ts.map +1 -0
  144. package/dist/stack/adapters/windsurf.js +218 -0
  145. package/dist/stack/adapters/windsurf.js.map +1 -0
  146. package/dist/stack/capability-cache.d.ts +19 -0
  147. package/dist/stack/capability-cache.d.ts.map +1 -0
  148. package/dist/stack/capability-cache.js +41 -0
  149. package/dist/stack/capability-cache.js.map +1 -0
  150. package/dist/stack/doctor.d.ts +30 -0
  151. package/dist/stack/doctor.d.ts.map +1 -0
  152. package/dist/stack/doctor.js +227 -0
  153. package/dist/stack/doctor.js.map +1 -0
  154. package/dist/stack/manifest.d.ts +40 -0
  155. package/dist/stack/manifest.d.ts.map +1 -0
  156. package/dist/stack/manifest.js +342 -0
  157. package/dist/stack/manifest.js.map +1 -0
  158. package/dist/stack/mcp-probe.d.ts +23 -0
  159. package/dist/stack/mcp-probe.d.ts.map +1 -0
  160. package/dist/stack/mcp-probe.js +230 -0
  161. package/dist/stack/mcp-probe.js.map +1 -0
  162. package/dist/stack/path-resolve.d.ts +7 -0
  163. package/dist/stack/path-resolve.d.ts.map +1 -0
  164. package/dist/stack/path-resolve.js +37 -0
  165. package/dist/stack/path-resolve.js.map +1 -0
  166. package/dist/stack/registry.d.ts +11 -0
  167. package/dist/stack/registry.d.ts.map +1 -0
  168. package/dist/stack/registry.js +42 -0
  169. package/dist/stack/registry.js.map +1 -0
  170. package/dist/stack/sync.d.ts +20 -0
  171. package/dist/stack/sync.d.ts.map +1 -0
  172. package/dist/stack/sync.js +226 -0
  173. package/dist/stack/sync.js.map +1 -0
  174. package/dist/stack/types.d.ts +53 -0
  175. package/dist/stack/types.d.ts.map +1 -0
  176. package/dist/stack/types.js +2 -0
  177. package/dist/stack/types.js.map +1 -0
  178. package/dist/transcript.d.ts +14 -0
  179. package/dist/transcript.d.ts.map +1 -1
  180. package/dist/transcript.js +98 -1
  181. package/dist/transcript.js.map +1 -1
  182. package/dist/types.d.ts +4 -0
  183. package/dist/types.d.ts.map +1 -1
  184. package/package.json +2 -1
@@ -0,0 +1,373 @@
1
+ import { vlen, rail, noRail, sep, frame, padRight, truncate } from './helpers.js';
2
+ import { readAllServers, groupServersByName, detectTools } from '../../stack/registry.js';
3
+ import { checkStack } from '../../stack/doctor.js';
4
+ import { readCapabilityCache } from '../../stack/capability-cache.js';
5
+ import { detectAgoraDataDir } from '../../state.js';
6
+ const state = {
7
+ servers: [],
8
+ health: null,
9
+ caps: new Map(),
10
+ selected: 0,
11
+ mode: 'list',
12
+ probing: false,
13
+ loaded: false,
14
+ error: undefined
15
+ };
16
+ function buildStackEnv(ctx) {
17
+ return {
18
+ cwd: ctx.io.cwd,
19
+ home: ctx.io.env?.HOME,
20
+ env: ctx.io.env
21
+ };
22
+ }
23
+ function getDataDir(ctx) {
24
+ return detectAgoraDataDir({ env: ctx.io.env });
25
+ }
26
+ async function loadStack(ctx) {
27
+ state.error = undefined;
28
+ try {
29
+ const env = buildStackEnv(ctx);
30
+ const allServers = readAllServers(env);
31
+ const grouped = groupServersByName(allServers);
32
+ const entries = [];
33
+ for (const [name, instances] of grouped) {
34
+ entries.push({ name, instances });
35
+ }
36
+ state.servers = entries;
37
+ // Static checks only — no probe on mount
38
+ const health = await checkStack(allServers, { ...env, probe: false });
39
+ state.health = health;
40
+ // Load capability cache
41
+ const dataDir = getDataDir(ctx);
42
+ const capList = readCapabilityCache(dataDir);
43
+ const capsMap = new Map();
44
+ for (const cap of capList) {
45
+ capsMap.set(cap.name, cap);
46
+ }
47
+ state.caps = capsMap;
48
+ state.loaded = true;
49
+ }
50
+ catch (err) {
51
+ state.error = err instanceof Error ? err.message : String(err);
52
+ state.loaded = true;
53
+ }
54
+ }
55
+ function healthGlyph(status, style) {
56
+ if (status === 'ok')
57
+ return style.accent('✓');
58
+ if (status === 'warn')
59
+ return style.orange('⚠');
60
+ return style.bold('✗');
61
+ }
62
+ function checkGlyph(ok, level, style) {
63
+ if (ok)
64
+ return style.accent('✓');
65
+ if (level === 'warn')
66
+ return style.orange('⚠');
67
+ return style.bold('✗');
68
+ }
69
+ export const stackPage = {
70
+ id: 'stack',
71
+ title: 'STACK',
72
+ navLabel: 'Stack',
73
+ navIcon: 'X',
74
+ hotkeys: [
75
+ { key: 'j/k', label: 'nav' },
76
+ { key: 'Enter', label: 'details' },
77
+ { key: 'p', label: 'probe' },
78
+ { key: 'r', label: 'refresh' },
79
+ { key: 'Esc', label: 'back' }
80
+ ],
81
+ async mount(ctx) {
82
+ state.mode = 'list';
83
+ state.selected = 0;
84
+ state.loaded = false;
85
+ await loadStack(ctx);
86
+ },
87
+ render(ctx) {
88
+ const { style, width, height } = ctx;
89
+ const lines = [];
90
+ // ── Header ────────────────────────────────────────────────────────────────
91
+ const totalServers = state.servers.length;
92
+ const totalTools = state.servers.reduce((n, e) => n + e.instances.length, 0);
93
+ const summary = totalServers === 0
94
+ ? style.dim('no servers configured')
95
+ : style.dim(totalServers +
96
+ (totalServers === 1 ? ' server' : ' servers') +
97
+ ' · ' +
98
+ totalTools +
99
+ (totalTools === 1 ? ' instance' : ' instances'));
100
+ const health = state.health;
101
+ const healthSummary = health
102
+ ? ' ' +
103
+ style.accent('ok: ' + health.summary.ok) +
104
+ style.dim(' · ') +
105
+ style.orange('warn: ' + health.summary.warn) +
106
+ style.dim(' · ') +
107
+ style.dim('error: ' + health.summary.error)
108
+ : '';
109
+ lines.push(' ' + style.bold(style.accent('STACK')) + ' ' + summary + healthSummary);
110
+ lines.push(' ' + sep('', width - 2, style));
111
+ // ── Error state ────────────────────────────────────────────────────────────
112
+ if (state.error) {
113
+ lines.push('');
114
+ lines.push(' ' + style.bold('Error loading stack:'));
115
+ lines.push(' ' + style.dim(state.error));
116
+ lines.push('');
117
+ lines.push(' ' + style.accent('r') + style.dim(' refresh'));
118
+ return frame(lines, width, height);
119
+ }
120
+ // ── Loading ────────────────────────────────────────────────────────────────
121
+ if (!state.loaded) {
122
+ lines.push('');
123
+ lines.push(' ' + style.dim('Loading…'));
124
+ return frame(lines, width, height);
125
+ }
126
+ // ── Empty state ────────────────────────────────────────────────────────────
127
+ if (state.servers.length === 0) {
128
+ lines.push('');
129
+ const toolResults = detectTools(buildStackEnv(ctx));
130
+ const detected = toolResults.filter((t) => t.present).map((t) => t.adapter.displayName);
131
+ if (detected.length > 0) {
132
+ lines.push(' ' + style.dim('Detected tools: ') + detected.join(', '));
133
+ lines.push('');
134
+ }
135
+ lines.push(' ' + style.dim('No MCP servers configured.'));
136
+ lines.push(' ' +
137
+ style.dim('Run ') +
138
+ style.accent('agora install <name>') +
139
+ style.dim(' to add a server, or ') +
140
+ style.accent('agora search') +
141
+ style.dim(' to browse.'));
142
+ lines.push('');
143
+ lines.push(' ' +
144
+ style.dim('Tools appear here after they are probed with ') +
145
+ style.accent('p') +
146
+ style.dim('.'));
147
+ lines.push('');
148
+ lines.push(' ' + style.accent('r') + style.dim(' refresh'));
149
+ return frame(lines, width, height);
150
+ }
151
+ // ── Detail mode ───────────────────────────────────────────────────────────
152
+ if (state.mode === 'detail') {
153
+ const entry = state.servers[state.selected];
154
+ if (!entry)
155
+ return frame(lines, width, height);
156
+ const serverHealth = health?.servers.find((h) => h.name === entry.name);
157
+ const glyph = serverHealth ? healthGlyph(serverHealth.status, style) : style.dim('?');
158
+ const detail = [];
159
+ detail.push(' ' + glyph + ' ' + style.bold(style.accent(entry.name)));
160
+ detail.push(' ' + sep('', width - 2, style));
161
+ detail.push('');
162
+ // Instances
163
+ detail.push(' ' + style.dim('Instances'));
164
+ for (const inst of entry.instances) {
165
+ const transport = inst.transport === 'local' ? style.dim('local') : style.dim('remote');
166
+ const scope = style.dim('[' + inst.scope + ']');
167
+ const cmd = inst.transport === 'local' ? (inst.command ?? []).join(' ') : (inst.url ?? '');
168
+ const enabledNote = inst.enabled === false ? ' ' + style.orange('disabled') : '';
169
+ detail.push(' ' + style.bold(inst.tool) + ' ' + scope + ' ' + transport + enabledNote);
170
+ if (cmd) {
171
+ detail.push(' ' + style.dim(truncate(cmd, width - 6)));
172
+ }
173
+ }
174
+ detail.push('');
175
+ // Health checks
176
+ if (serverHealth && serverHealth.checks.length > 0) {
177
+ detail.push(' ' + sep('Health checks', width - 2, style));
178
+ for (const check of serverHealth.checks) {
179
+ const g = checkGlyph(check.ok, check.level, style);
180
+ const name = padRight(check.name, 28);
181
+ const detail2 = check.detail ? style.dim(check.detail) : '';
182
+ detail.push(' ' + g + ' ' + name + detail2);
183
+ }
184
+ detail.push('');
185
+ }
186
+ else if (serverHealth && serverHealth.checks.length === 0) {
187
+ detail.push(' ' + style.dim('No issues detected.'));
188
+ detail.push('');
189
+ }
190
+ // Cached capabilities
191
+ const caps = state.caps.get(entry.name);
192
+ detail.push(' ' + sep('Tools', width - 2, style));
193
+ if (state.probing) {
194
+ detail.push(' ' + style.dim('Probing…'));
195
+ }
196
+ else if (caps && caps.tools.length > 0) {
197
+ for (const tool of caps.tools) {
198
+ const desc = tool.description ? style.dim(' — ' + tool.description) : '';
199
+ detail.push(' ' + style.bold(tool.name) + desc);
200
+ }
201
+ }
202
+ else {
203
+ detail.push(' ' +
204
+ style.dim('(probe to discover tools — press ') +
205
+ style.accent('p') +
206
+ style.dim(')'));
207
+ }
208
+ detail.push('');
209
+ // Footer
210
+ const footer = [
211
+ ' ' + sep('', width - 2, style),
212
+ ' ' + style.accent('p') + style.dim(' probe ') + style.accent('Esc') + style.dim(' back')
213
+ ];
214
+ const padCount = Math.max(0, height - lines.length - detail.length - footer.length);
215
+ lines.push(...detail);
216
+ for (let i = 0; i < padCount; i++)
217
+ lines.push('');
218
+ lines.push(...footer);
219
+ return frame(lines, width, height);
220
+ }
221
+ // ── List mode ─────────────────────────────────────────────────────────────
222
+ state.selected = Math.min(state.selected, Math.max(0, state.servers.length - 1));
223
+ const limit = Math.max(0, height - lines.length - 1);
224
+ const start = Math.max(0, Math.min(state.selected - Math.floor(limit / 2), state.servers.length - limit));
225
+ for (let i = 0; i < limit && start + i < state.servers.length; i++) {
226
+ const entry = state.servers[start + i];
227
+ if (!entry)
228
+ continue;
229
+ const selected = start + i === state.selected;
230
+ const lead = selected ? rail(style) : noRail();
231
+ const serverHealth = health?.servers.find((h) => h.name === entry.name);
232
+ const glyph = serverHealth ? healthGlyph(serverHealth.status, style) : style.dim('·');
233
+ // Tools this server is configured in
234
+ const toolList = [...new Set(entry.instances.map((inst) => inst.tool + ':' + inst.scope))];
235
+ const toolStr = toolList.join(' ');
236
+ // Cached tool count
237
+ const caps = state.caps.get(entry.name);
238
+ const toolCount = caps && caps.tools.length > 0 ? style.dim(' · ' + caps.tools.length + ' tools') : '';
239
+ // Transport type
240
+ const transports = [...new Set(entry.instances.map((inst) => inst.transport))].join('/');
241
+ const probingNote = state.probing && selected ? ' ' + style.dim('probing…') : '';
242
+ const nameCell = selected ? style.bold(entry.name) : entry.name;
243
+ const left = ' ' + lead + glyph + ' ' + nameCell + probingNote;
244
+ const right = style.dim(transports) + toolCount;
245
+ const room = width - vlen(left) - vlen(right) - 3;
246
+ const mid = room > 2 ? ' ' + style.dim(truncate(toolStr, Math.max(0, room - 2))) : '';
247
+ const gap = ' '.repeat(Math.max(1, room - vlen(mid) - 1));
248
+ lines.push(left + mid + gap + right);
249
+ }
250
+ lines.push(' ' +
251
+ (state.servers.length > limit
252
+ ? style.dim('servers ' +
253
+ (start + 1) +
254
+ '–' +
255
+ Math.min(start + limit, state.servers.length) +
256
+ ' of ' +
257
+ state.servers.length)
258
+ : style.dim(state.servers.length + (state.servers.length === 1 ? ' server' : ' servers'))));
259
+ return frame(lines, width, height);
260
+ },
261
+ async handleKey(event, ctx) {
262
+ if (state.mode === 'detail') {
263
+ switch (event.key) {
264
+ case 'esc':
265
+ state.mode = 'list';
266
+ ctx.repaint();
267
+ return { kind: 'none' };
268
+ case 'p': {
269
+ const entry = state.servers[state.selected];
270
+ if (!entry)
271
+ return { kind: 'none' };
272
+ // Only probe if there's a local instance
273
+ const hasLocal = entry.instances.some((inst) => inst.transport === 'local');
274
+ if (!hasLocal) {
275
+ return { kind: 'status', message: 'No local instances to probe for ' + entry.name };
276
+ }
277
+ state.probing = true;
278
+ ctx.repaint();
279
+ try {
280
+ const env = buildStackEnv(ctx);
281
+ const dataDir = getDataDir(ctx);
282
+ await checkStack(entry.instances, { ...env, probe: true, dataDir });
283
+ // Refresh this server's health in our overall health
284
+ const refreshedHealth = await checkStack(state.servers.flatMap((e) => e.instances), { ...env, probe: false });
285
+ state.health = refreshedHealth;
286
+ // Reload caps
287
+ const capList = readCapabilityCache(dataDir);
288
+ for (const cap of capList) {
289
+ state.caps.set(cap.name, cap);
290
+ }
291
+ }
292
+ catch (err) {
293
+ state.probing = false;
294
+ ctx.repaint();
295
+ return {
296
+ kind: 'status',
297
+ message: 'Probe failed: ' + (err instanceof Error ? err.message : String(err)),
298
+ tone: 'error'
299
+ };
300
+ }
301
+ state.probing = false;
302
+ ctx.repaint();
303
+ return { kind: 'status', message: 'Probed ' + state.servers[state.selected]?.name };
304
+ }
305
+ default:
306
+ return { kind: 'none' };
307
+ }
308
+ }
309
+ // list mode
310
+ switch (event.key) {
311
+ case 'j':
312
+ case 'down':
313
+ state.selected = Math.min(state.servers.length - 1, state.selected + 1);
314
+ ctx.repaint();
315
+ return { kind: 'none' };
316
+ case 'k':
317
+ case 'up':
318
+ state.selected = Math.max(0, state.selected - 1);
319
+ ctx.repaint();
320
+ return { kind: 'none' };
321
+ case 'enter':
322
+ if (state.servers.length > 0) {
323
+ state.mode = 'detail';
324
+ ctx.repaint();
325
+ }
326
+ return { kind: 'none' };
327
+ case 'esc':
328
+ return { kind: 'none' };
329
+ case 'r':
330
+ state.loaded = false;
331
+ ctx.repaint();
332
+ loadStack(ctx).then(() => ctx.repaint());
333
+ return { kind: 'none' };
334
+ case 'p': {
335
+ const entry = state.servers[state.selected];
336
+ if (!entry)
337
+ return { kind: 'none' };
338
+ const hasLocal = entry.instances.some((inst) => inst.transport === 'local');
339
+ if (!hasLocal) {
340
+ return { kind: 'status', message: 'No local instances to probe for ' + entry.name };
341
+ }
342
+ state.probing = true;
343
+ ctx.repaint();
344
+ try {
345
+ const env = buildStackEnv(ctx);
346
+ const dataDir = getDataDir(ctx);
347
+ await checkStack(entry.instances, { ...env, probe: true, dataDir });
348
+ const refreshedHealth = await checkStack(state.servers.flatMap((e) => e.instances), { ...env, probe: false });
349
+ state.health = refreshedHealth;
350
+ const capList = readCapabilityCache(dataDir);
351
+ for (const cap of capList) {
352
+ state.caps.set(cap.name, cap);
353
+ }
354
+ }
355
+ catch (err) {
356
+ state.probing = false;
357
+ ctx.repaint();
358
+ return {
359
+ kind: 'status',
360
+ message: 'Probe failed: ' + (err instanceof Error ? err.message : String(err)),
361
+ tone: 'error'
362
+ };
363
+ }
364
+ state.probing = false;
365
+ ctx.repaint();
366
+ return { kind: 'status', message: 'Probed ' + (state.servers[state.selected]?.name ?? '') };
367
+ }
368
+ default:
369
+ return { kind: 'none' };
370
+ }
371
+ }
372
+ };
373
+ //# sourceMappingURL=stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack.js","sourceRoot":"","sources":["../../../src/cli/pages/stack.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { Styler } from '../../ui.js';
2
2
  import type { CliIo } from '../flags.js';
3
- export type PageId = 'home' | 'marketplace' | 'community' | 'news' | 'settings';
3
+ export type PageId = 'home' | 'marketplace' | 'stack' | 'community' | 'news' | 'settings';
4
4
  export interface KeyEvent {
5
5
  raw: string;
6
6
  key: 'up' | 'down' | 'left' | 'right' | 'enter' | 'esc' | 'tab' | 'backspace' | 'space' | 'pageup' | 'pagedown' | 'home' | 'end' | string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cli/pages/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,aAAa,GAAG,WAAW,GAAG,MAAM,GAAG,UAAU,CAAC;AAEhF,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EACC,IAAI,GACJ,MAAM,GACN,MAAM,GACN,OAAO,GACP,OAAO,GACP,KAAK,GACL,KAAK,GACL,WAAW,GACX,OAAO,GACP,QAAQ,GACR,UAAU,GACV,MAAM,GACN,KAAK,GACL,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAE1E,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,QAAQ,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,OAAO,CAAC,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAAC;IACjC,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAChF"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cli/pages/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,aAAa,GAAG,OAAO,GAAG,WAAW,GAAG,MAAM,GAAG,UAAU,CAAC;AAE1F,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EACC,IAAI,GACJ,MAAM,GACN,MAAM,GACN,OAAO,GACP,OAAO,GACP,KAAK,GACL,KAAK,GACL,WAAW,GACX,OAAO,GACP,QAAQ,GACR,UAAU,GACV,MAAM,GACN,KAAK,GACL,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAE1E,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,QAAQ,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,OAAO,CAAC,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAAC;IACjC,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAChF"}
@@ -5,7 +5,7 @@ export type Dispatch = {
5
5
  kind: 'noop';
6
6
  } | {
7
7
  kind: 'meta';
8
- sub: 'help' | 'quit' | 'exit' | 'clear' | 'transcript' | 'menu' | 'terminal' | 'verbose' | 'quiet' | 'medium' | 'last' | 'again' | 'dry-run' | 'env' | 'jobs' | 'fg' | 'bg' | 'abc';
8
+ sub: 'help' | 'quit' | 'exit' | 'clear' | 'transcript' | 'menu' | 'terminal' | 'verbose' | 'quiet' | 'medium' | 'last' | 'again' | 'dry-run' | 'env' | 'jobs' | 'fg' | 'bg' | 'abc' | 'sessions' | 'recall';
9
9
  args?: string;
10
10
  } | {
11
11
  kind: 'tui';
@@ -1 +1 @@
1
- {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/cli/shell.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AASxC,OAAO,EAAiD,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AAatF,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,aAAa,GAAG,WAAW,GAAG,MAAM,GAAG,UAAU,CAAC;AAEnF,MAAM,MAAM,QAAQ,GAChB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IACE,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EACC,MAAM,GACN,MAAM,GACN,MAAM,GACN,OAAO,GACP,YAAY,GACZ,MAAM,GACN,UAAU,GACV,SAAS,GACT,OAAO,GACP,QAAQ,GACR,MAAM,GACN,OAAO,GACP,SAAS,GACT,KAAK,GACL,MAAM,GACN,IAAI,GACJ,IAAI,GACJ,KAAK,CAAC;IACV,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GACD;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAoFlC,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CA0BvD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,QAAQ,CAwE7F;AA0JD,wBAAsB,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA+wBxE"}
1
+ {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/cli/shell.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAWxC,OAAO,EAAiD,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AAatF,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,aAAa,GAAG,WAAW,GAAG,MAAM,GAAG,UAAU,CAAC;AAEnF,MAAM,MAAM,QAAQ,GAChB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IACE,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EACC,MAAM,GACN,MAAM,GACN,MAAM,GACN,OAAO,GACP,YAAY,GACZ,MAAM,GACN,UAAU,GACV,SAAS,GACT,OAAO,GACP,QAAQ,GACR,MAAM,GACN,OAAO,GACP,SAAS,GACT,KAAK,GACL,MAAM,GACN,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,UAAU,GACV,QAAQ,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GACD;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAoFlC,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CA0BvD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,QAAQ,CA8E7F;AA0JD,wBAAsB,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAu0BxE"}
package/dist/cli/shell.js CHANGED
@@ -8,7 +8,7 @@ import { runTui } from './tui.js';
8
8
  import { AGORA_VERSION } from './app.js';
9
9
  import { FREE_MODELS } from './commands/chat.js';
10
10
  import { detectAgoraDataDir, loadAgoraState, resolveSavedItems } from '../state.js';
11
- import { appendTranscript, loadSessionMeta, readTranscript, recentBashContext, writeSessionMeta } from '../transcript.js';
11
+ import { appendTranscript, listSessions, loadSessionMeta, readTranscript, recentBashContext, searchTranscripts, writeSessionMeta } from '../transcript.js';
12
12
  import { gradientText, renderBanner, supportsTrueColor } from '../ui.js';
13
13
  import { createChatRenderer } from './chat-renderer.js';
14
14
  import { readLine } from './prompter.js';
@@ -144,6 +144,10 @@ export function classifyInput(line, isExecutable) {
144
144
  return { kind: 'meta', sub: 'last' };
145
145
  if (trimmed === '/again')
146
146
  return { kind: 'meta', sub: 'again' };
147
+ if (trimmed === '/sessions')
148
+ return { kind: 'meta', sub: 'sessions' };
149
+ if (trimmed === '/recall' || trimmed.startsWith('/recall '))
150
+ return { kind: 'meta', sub: 'recall', args: trimmed.slice(8).trim() };
147
151
  if (trimmed === '/jobs')
148
152
  return { kind: 'meta', sub: 'jobs' };
149
153
  if (trimmed === '/fg' || trimmed.startsWith('/fg '))
@@ -169,7 +173,10 @@ export function classifyInput(line, isExecutable) {
169
173
  const letterDisp = LETTER_SHORTCUTS[trimmed];
170
174
  if (letterDisp) {
171
175
  if (letterDisp.kind === 'meta') {
172
- return { kind: 'meta', sub: letterDisp.sub };
176
+ return {
177
+ kind: 'meta',
178
+ sub: letterDisp.sub
179
+ };
173
180
  }
174
181
  if (letterDisp.kind === 'tui') {
175
182
  return { kind: 'tui', page: letterDisp.page };
@@ -429,6 +436,8 @@ export async function runShell(io, style) {
429
436
  '/jobs',
430
437
  '/fg',
431
438
  '/bg',
439
+ '/sessions',
440
+ '/recall',
432
441
  ...agoraSlashCommands
433
442
  ];
434
443
  // Deduplicate: /news, /home etc may appear in both lists
@@ -688,6 +697,45 @@ export async function runShell(io, style) {
688
697
  }
689
698
  continue;
690
699
  }
700
+ if (dispatch.sub === 'sessions') {
701
+ const sessions = listSessions(dataDir);
702
+ if (sessions.length === 0) {
703
+ process.stdout.write(style.dim('No sessions recorded yet.') + '\n');
704
+ }
705
+ else {
706
+ process.stdout.write(style.accent('Recent sessions') + '\n');
707
+ for (const s of sessions) {
708
+ const activity = s.lastActivity.slice(0, 19);
709
+ const turns = s.turnCount + (s.turnCount === 1 ? ' turn' : ' turns');
710
+ process.stdout.write(' ' +
711
+ style.dim(activity) +
712
+ ' ' +
713
+ style.accent(shortCwd(s.cwd)) +
714
+ ' ' +
715
+ style.dim(turns) +
716
+ '\n');
717
+ }
718
+ }
719
+ continue;
720
+ }
721
+ if (dispatch.sub === 'recall') {
722
+ const query = dispatch.args ?? '';
723
+ if (!query) {
724
+ process.stdout.write(style.dim('Usage: /recall <query>') + '\n');
725
+ continue;
726
+ }
727
+ const matches = searchTranscripts(dataDir, query);
728
+ if (matches.length === 0) {
729
+ process.stdout.write(style.dim('no matches') + '\n');
730
+ }
731
+ else {
732
+ for (const m of matches) {
733
+ process.stdout.write(style.dim(shortCwd(m.cwd) + ' ' + m.timestamp.slice(0, 19)) + '\n');
734
+ process.stdout.write(' ' + m.snippet + '\n');
735
+ }
736
+ }
737
+ continue;
738
+ }
691
739
  if (dispatch.sub === 'bg') {
692
740
  if (jobs.size === 0) {
693
741
  process.stdout.write(style.dim('No background jobs. Append & to run a command in the background.') + '\n');
@@ -1099,6 +1147,8 @@ function printHelp(style) {
1099
1147
  ' /jobs list background jobs',
1100
1148
  ' /fg [N] bring job N (or last) to foreground',
1101
1149
  ' /bg [N] resume job N (or last) in background',
1150
+ ' /sessions list all recorded shell sessions (cwd, turns, last activity)',
1151
+ ' /recall <q> search across all session transcripts for <q>',
1102
1152
  '',
1103
1153
  style.dim('Verbosity:'),
1104
1154
  ' /verbose /medium /quiet',