opencode-agora 0.4.0 → 0.4.2
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/README.md +89 -415
- package/dist/atomic-write.d.ts +10 -0
- package/dist/atomic-write.d.ts.map +1 -0
- package/dist/atomic-write.js +23 -0
- package/dist/atomic-write.js.map +1 -0
- package/dist/auth/refresh.d.ts +17 -0
- package/dist/auth/refresh.d.ts.map +1 -0
- package/dist/auth/refresh.js +50 -0
- package/dist/auth/refresh.js.map +1 -0
- package/dist/cli/app.d.ts +11 -19
- package/dist/cli/app.d.ts.map +1 -1
- package/dist/cli/app.js +159 -2028
- package/dist/cli/app.js.map +1 -1
- package/dist/cli/commands/browse.d.ts +4 -0
- package/dist/cli/commands/browse.d.ts.map +1 -0
- package/dist/cli/commands/browse.js +80 -0
- package/dist/cli/commands/browse.js.map +1 -0
- package/dist/cli/commands/chat.d.ts +4 -0
- package/dist/cli/commands/chat.d.ts.map +1 -0
- package/dist/cli/commands/chat.js +125 -0
- package/dist/cli/commands/chat.js.map +1 -0
- package/dist/cli/commands/community.d.ts +12 -0
- package/dist/cli/commands/community.d.ts.map +1 -0
- package/dist/cli/commands/community.js +453 -0
- package/dist/cli/commands/community.js.map +1 -0
- package/dist/cli/commands/export.d.ts +3 -0
- package/dist/cli/commands/export.d.ts.map +1 -0
- package/dist/cli/commands/export.js +108 -0
- package/dist/cli/commands/export.js.map +1 -0
- package/dist/cli/commands/init.d.ts +4 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +299 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/learn.d.ts +4 -0
- package/dist/cli/commands/learn.d.ts.map +1 -0
- package/dist/cli/commands/learn.js +62 -0
- package/dist/cli/commands/learn.js.map +1 -0
- package/dist/cli/commands/marketplace.d.ts +9 -0
- package/dist/cli/commands/marketplace.d.ts.map +1 -0
- package/dist/cli/commands/marketplace.js +321 -0
- package/dist/cli/commands/marketplace.js.map +1 -0
- package/dist/cli/commands/notify.d.ts +3 -0
- package/dist/cli/commands/notify.d.ts.map +1 -0
- package/dist/cli/commands/notify.js +59 -0
- package/dist/cli/commands/notify.js.map +1 -0
- package/dist/cli/commands/operations.d.ts +16 -0
- package/dist/cli/commands/operations.d.ts.map +1 -0
- package/dist/cli/commands/operations.js +1041 -0
- package/dist/cli/commands/operations.js.map +1 -0
- package/dist/cli/commands/outdated.d.ts +3 -0
- package/dist/cli/commands/outdated.d.ts.map +1 -0
- package/dist/cli/commands/outdated.js +48 -0
- package/dist/cli/commands/outdated.js.map +1 -0
- package/dist/cli/commands/ping.d.ts +3 -0
- package/dist/cli/commands/ping.d.ts.map +1 -0
- package/dist/cli/commands/ping.js +56 -0
- package/dist/cli/commands/ping.js.map +1 -0
- package/dist/cli/commands/scan.d.ts +3 -0
- package/dist/cli/commands/scan.d.ts.map +1 -0
- package/dist/cli/commands/scan.js +35 -0
- package/dist/cli/commands/scan.js.map +1 -0
- package/dist/cli/commands/today.d.ts +3 -0
- package/dist/cli/commands/today.d.ts.map +1 -0
- package/dist/cli/commands/today.js +142 -0
- package/dist/cli/commands/today.js.map +1 -0
- package/dist/cli/commands/types.d.ts +5 -0
- package/dist/cli/commands/types.d.ts.map +1 -0
- package/dist/cli/commands/types.js +2 -0
- package/dist/cli/commands/types.js.map +1 -0
- package/dist/cli/commands/watch.d.ts +3 -0
- package/dist/cli/commands/watch.d.ts.map +1 -0
- package/dist/cli/commands/watch.js +41 -0
- package/dist/cli/commands/watch.js.map +1 -0
- package/dist/cli/commands/welcome.d.ts +3 -0
- package/dist/cli/commands/welcome.d.ts.map +1 -0
- package/dist/cli/commands/welcome.js +97 -0
- package/dist/cli/commands/welcome.js.map +1 -0
- package/dist/cli/commands-meta.d.ts.map +1 -1
- package/dist/cli/commands-meta.js +286 -29
- package/dist/cli/commands-meta.js.map +1 -1
- package/dist/cli/completions-gen.d.ts +2 -0
- package/dist/cli/completions-gen.d.ts.map +1 -0
- package/dist/cli/completions-gen.js +195 -0
- package/dist/cli/completions-gen.js.map +1 -0
- package/dist/cli/completions.d.ts.map +1 -1
- package/dist/cli/completions.js +42 -5
- package/dist/cli/completions.js.map +1 -1
- package/dist/cli/flags.d.ts +19 -0
- package/dist/cli/flags.d.ts.map +1 -0
- package/dist/cli/flags.js +91 -0
- package/dist/cli/flags.js.map +1 -0
- package/dist/cli/format.d.ts +19 -0
- package/dist/cli/format.d.ts.map +1 -0
- package/dist/cli/format.js +249 -0
- package/dist/cli/format.js.map +1 -0
- package/dist/cli/helpers.d.ts +95 -0
- package/dist/cli/helpers.d.ts.map +1 -0
- package/dist/cli/helpers.js +301 -0
- package/dist/cli/helpers.js.map +1 -0
- package/dist/cli/mcp-server.d.ts +7 -1
- package/dist/cli/mcp-server.d.ts.map +1 -1
- package/dist/cli/mcp-server.js +70 -2
- package/dist/cli/mcp-server.js.map +1 -1
- package/dist/cli/menu.d.ts.map +1 -1
- package/dist/cli/menu.js +11 -3
- package/dist/cli/menu.js.map +1 -1
- package/dist/cli/pages/community.d.ts +6 -0
- package/dist/cli/pages/community.d.ts.map +1 -1
- package/dist/cli/pages/community.js +882 -64
- package/dist/cli/pages/community.js.map +1 -1
- package/dist/cli/pages/helpers.d.ts +14 -9
- package/dist/cli/pages/helpers.d.ts.map +1 -1
- package/dist/cli/pages/helpers.js +37 -6
- package/dist/cli/pages/helpers.js.map +1 -1
- package/dist/cli/pages/home.d.ts +1 -0
- package/dist/cli/pages/home.d.ts.map +1 -1
- package/dist/cli/pages/home.js +203 -120
- package/dist/cli/pages/home.js.map +1 -1
- package/dist/cli/pages/marketplace.d.ts +2 -0
- package/dist/cli/pages/marketplace.d.ts.map +1 -1
- package/dist/cli/pages/marketplace.js +524 -62
- package/dist/cli/pages/marketplace.js.map +1 -1
- package/dist/cli/pages/news.d.ts +28 -0
- package/dist/cli/pages/news.d.ts.map +1 -1
- package/dist/cli/pages/news.js +209 -82
- package/dist/cli/pages/news.js.map +1 -1
- package/dist/cli/pages/settings.d.ts.map +1 -1
- package/dist/cli/pages/settings.js +163 -33
- package/dist/cli/pages/settings.js.map +1 -1
- package/dist/cli/pages/types.d.ts +1 -1
- package/dist/cli/pages/types.d.ts.map +1 -1
- package/dist/cli/prompter.d.ts.map +1 -1
- package/dist/cli/prompter.js +43 -8
- package/dist/cli/prompter.js.map +1 -1
- package/dist/cli/shell.d.ts +2 -2
- package/dist/cli/shell.d.ts.map +1 -1
- package/dist/cli/shell.js +321 -18
- package/dist/cli/shell.js.map +1 -1
- package/dist/cli/tui.d.ts +1 -1
- package/dist/cli/tui.d.ts.map +1 -1
- package/dist/cli/tui.js +69 -23
- package/dist/cli/tui.js.map +1 -1
- package/dist/community/client.d.ts +45 -8
- package/dist/community/client.d.ts.map +1 -1
- package/dist/community/client.js +118 -23
- package/dist/community/client.js.map +1 -1
- package/dist/community/search.d.ts +25 -0
- package/dist/community/search.d.ts.map +1 -0
- package/dist/community/search.js +62 -0
- package/dist/community/search.js.map +1 -0
- package/dist/community/types.d.ts +21 -0
- package/dist/community/types.d.ts.map +1 -1
- package/dist/community/types.js +1 -1
- package/dist/config.d.ts +0 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +0 -15
- package/dist/config.js.map +1 -1
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +142 -68
- package/dist/data.js.map +1 -1
- package/dist/format.d.ts +0 -2
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +0 -2
- package/dist/format.js.map +1 -1
- package/dist/hubs/cache.d.ts +6 -0
- package/dist/hubs/cache.d.ts.map +1 -0
- package/dist/hubs/cache.js +46 -0
- package/dist/hubs/cache.js.map +1 -0
- package/dist/hubs/enrichment.d.ts +43 -0
- package/dist/hubs/enrichment.d.ts.map +1 -0
- package/dist/hubs/enrichment.js +239 -0
- package/dist/hubs/enrichment.js.map +1 -0
- package/dist/hubs/github.d.ts +12 -0
- package/dist/hubs/github.d.ts.map +1 -0
- package/dist/hubs/github.js +54 -0
- package/dist/hubs/github.js.map +1 -0
- package/dist/hubs/huggingface.d.ts +27 -0
- package/dist/hubs/huggingface.d.ts.map +1 -0
- package/dist/hubs/huggingface.js +88 -0
- package/dist/hubs/huggingface.js.map +1 -0
- package/dist/hubs/quality.d.ts +26 -0
- package/dist/hubs/quality.d.ts.map +1 -0
- package/dist/hubs/quality.js +57 -0
- package/dist/hubs/quality.js.map +1 -0
- package/dist/hubs/types.d.ts +30 -0
- package/dist/hubs/types.d.ts.map +1 -0
- package/dist/hubs/types.js +2 -0
- package/dist/hubs/types.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +84 -0
- package/dist/index.js.map +1 -1
- package/dist/init.js +2 -2
- package/dist/init.js.map +1 -1
- package/dist/live.d.ts +10 -0
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +31 -1
- package/dist/live.js.map +1 -1
- package/dist/marketplace.d.ts +16 -3
- package/dist/marketplace.d.ts.map +1 -1
- package/dist/marketplace.js +174 -7
- package/dist/marketplace.js.map +1 -1
- package/dist/news/cache.d.ts.map +1 -1
- package/dist/news/cache.js +4 -3
- package/dist/news/cache.js.map +1 -1
- package/dist/news/score.js +1 -1
- package/dist/news/sources/arxiv.d.ts.map +1 -1
- package/dist/news/sources/arxiv.js +10 -6
- package/dist/news/sources/arxiv.js.map +1 -1
- package/dist/news/sources/github-trending.d.ts.map +1 -1
- package/dist/news/sources/github-trending.js +9 -5
- package/dist/news/sources/github-trending.js.map +1 -1
- package/dist/news/sources/hn.d.ts.map +1 -1
- package/dist/news/sources/hn.js +8 -4
- package/dist/news/sources/hn.js.map +1 -1
- package/dist/news/sources/reddit.d.ts.map +1 -1
- package/dist/news/sources/reddit.js +5 -4
- package/dist/news/sources/reddit.js.map +1 -1
- package/dist/news/sources/rss.d.ts +10 -11
- package/dist/news/sources/rss.d.ts.map +1 -1
- package/dist/news/sources/rss.js +11 -99
- package/dist/news/sources/rss.js.map +1 -1
- package/dist/news/types.d.ts +3 -0
- package/dist/news/types.d.ts.map +1 -1
- package/dist/news/types.js +15 -6
- package/dist/news/types.js.map +1 -1
- package/dist/outdated.d.ts +24 -0
- package/dist/outdated.d.ts.map +1 -0
- package/dist/outdated.js +53 -0
- package/dist/outdated.js.map +1 -0
- package/dist/preferences.d.ts.map +1 -1
- package/dist/preferences.js +4 -4
- package/dist/preferences.js.map +1 -1
- package/dist/scan.d.ts +26 -0
- package/dist/scan.d.ts.map +1 -0
- package/dist/scan.js +179 -0
- package/dist/scan.js.map +1 -0
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +14 -20
- package/dist/settings.js.map +1 -1
- package/dist/state.d.ts +9 -2
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +41 -19
- package/dist/state.js.map +1 -1
- package/dist/types.d.ts +13 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/ui.d.ts +1 -1
- package/dist/ui.js +1 -1
- package/package.json +4 -2
|
@@ -0,0 +1,453 @@
|
|
|
1
|
+
import { BOARD_IDS } from '../../community/types.js';
|
|
2
|
+
import { communityBoardsSource, communityThreadsSource, communityThreadSource, createThreadSource, createReplySource, voteSource, flagSource, adminHideSource, adminLogSource, adminRecomputeSource } from '../../community/client.js';
|
|
3
|
+
import { createDiscussionSource, discussionsSource, flagMarketplaceSource } from '../../live.js';
|
|
4
|
+
import { normalizeNewsSource, DEFAULT_NEWS_CONFIG, hostFromUrl } from '../../news/types.js';
|
|
5
|
+
import { rankItems } from '../../news/score.js';
|
|
6
|
+
import { readCache, writeCache, isStale } from '../../news/cache.js';
|
|
7
|
+
import { hnSource } from '../../news/sources/hn.js';
|
|
8
|
+
import { redditSource } from '../../news/sources/reddit.js';
|
|
9
|
+
import { githubTrendingSource } from '../../news/sources/github-trending.js';
|
|
10
|
+
import { arxivSource } from '../../news/sources/arxiv.js';
|
|
11
|
+
import { formatNumber } from '../../format.js';
|
|
12
|
+
import { stringFlag, requiredStringFlag, numberFlag, sourceOptions, writeSourceOptions, sourceLabel, warnFallback, sourcePayload, writeLine, writeJson, usageError, detectDataDir, contentInput, discussionCategoryFlag } from '../helpers.js';
|
|
13
|
+
import { header, truncate } from '../format.js';
|
|
14
|
+
export const commandNews = async (parsed, io, style) => {
|
|
15
|
+
const query = parsed.args.join(' ');
|
|
16
|
+
const sourceOpt = stringFlag(parsed, 'source', 's');
|
|
17
|
+
const source = sourceOpt ? normalizeNewsSource(sourceOpt) : undefined;
|
|
18
|
+
const limit = numberFlag(parsed, 'limit', 'n') || 20;
|
|
19
|
+
const refresh = Boolean(parsed.flags.refresh);
|
|
20
|
+
const dataDir = detectDataDir(parsed, io);
|
|
21
|
+
let cached = readCache(dataDir);
|
|
22
|
+
const now = new Date();
|
|
23
|
+
const config = DEFAULT_NEWS_CONFIG;
|
|
24
|
+
const adapters = [
|
|
25
|
+
['hn', hnSource],
|
|
26
|
+
['reddit', redditSource],
|
|
27
|
+
['github-trending', githubTrendingSource],
|
|
28
|
+
['arxiv', arxivSource]
|
|
29
|
+
];
|
|
30
|
+
const fetchWithTimeout = (fn, ms = 10000) => {
|
|
31
|
+
const controller = new AbortController();
|
|
32
|
+
let timer;
|
|
33
|
+
return new Promise((resolve, reject) => {
|
|
34
|
+
timer = setTimeout(() => {
|
|
35
|
+
controller.abort();
|
|
36
|
+
reject(new Error('timeout'));
|
|
37
|
+
}, ms);
|
|
38
|
+
fn(controller.signal).then((val) => {
|
|
39
|
+
clearTimeout(timer);
|
|
40
|
+
resolve(val);
|
|
41
|
+
}, (err) => {
|
|
42
|
+
clearTimeout(timer);
|
|
43
|
+
reject(err);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
const refreshSource = async (src, adapter) => {
|
|
48
|
+
try {
|
|
49
|
+
const fresh = await fetchWithTimeout((signal) => adapter.fetch({ signal }));
|
|
50
|
+
cached = cached.filter((i) => i.source !== src);
|
|
51
|
+
cached.push(...fresh);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// keep stale
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
if (refresh) {
|
|
58
|
+
for (const [src, adapter] of adapters) {
|
|
59
|
+
await refreshSource(src, adapter);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
for (const [src, adapter] of adapters) {
|
|
64
|
+
const cfg = config.sources[src];
|
|
65
|
+
if (cfg?.enabled && isStale(cached, src, cfg.ttlMinutes, now)) {
|
|
66
|
+
await refreshSource(src, adapter);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const ranked = rankItems(cached, config, now);
|
|
71
|
+
writeCache(dataDir, cached);
|
|
72
|
+
let items = ranked;
|
|
73
|
+
if (query) {
|
|
74
|
+
const q = query.toLowerCase();
|
|
75
|
+
items = items.filter((i) => i.title.toLowerCase().includes(q) || i.tags.some((t) => t.includes(q)));
|
|
76
|
+
}
|
|
77
|
+
if (source) {
|
|
78
|
+
items = items.filter((i) => i.source === source);
|
|
79
|
+
}
|
|
80
|
+
items = items.slice(0, limit);
|
|
81
|
+
if (parsed.flags.json) {
|
|
82
|
+
writeJson(io.stdout, { count: items.length, items, source: source || 'all' });
|
|
83
|
+
return 0;
|
|
84
|
+
}
|
|
85
|
+
if (items.length === 0) {
|
|
86
|
+
writeLine(io.stdout, 'No news items found.');
|
|
87
|
+
return 0;
|
|
88
|
+
}
|
|
89
|
+
writeLine(io.stdout, header('agora news', [`${items.length} stories`, source ? `source: ${source}` : 'all sources'], style));
|
|
90
|
+
writeLine(io.stdout, '');
|
|
91
|
+
for (const item of items) {
|
|
92
|
+
const ageH = Math.round((now.getTime() - new Date(item.publishedAt).getTime()) / 3600000);
|
|
93
|
+
const age = ageH < 1 ? '<1h' : ageH < 24 ? `${ageH}h` : `${Math.round(ageH / 24)}d`;
|
|
94
|
+
const host = hostFromUrl(item.url);
|
|
95
|
+
writeLine(io.stdout, `${style.accent(item.source.padEnd(6))} ${style.dim(age.padEnd(4))} ${style.accent(formatNumber(item.engagement).padStart(7))} ${style.dim('s' + item.score.toFixed(2))} ${item.title}`);
|
|
96
|
+
if (host)
|
|
97
|
+
writeLine(io.stdout, ` ${style.dim(host)}`);
|
|
98
|
+
if (query)
|
|
99
|
+
writeLine(io.stdout, '');
|
|
100
|
+
}
|
|
101
|
+
return 0;
|
|
102
|
+
};
|
|
103
|
+
export const commandCommunity = async (parsed, io, style) => {
|
|
104
|
+
const boardArg = parsed.args[0];
|
|
105
|
+
if (boardArg !== undefined && !BOARD_IDS.includes(boardArg)) {
|
|
106
|
+
return usageError(io, `Unknown board "${boardArg}". Valid: ${BOARD_IDS.join(', ')}`);
|
|
107
|
+
}
|
|
108
|
+
const board = boardArg;
|
|
109
|
+
const sortRaw = stringFlag(parsed, 'sort') || 'active';
|
|
110
|
+
if (!['top', 'new', 'active'].includes(sortRaw)) {
|
|
111
|
+
return usageError(io, `Unknown sort "${sortRaw}". Valid: top, new, active`);
|
|
112
|
+
}
|
|
113
|
+
const sort = sortRaw;
|
|
114
|
+
const opts = await sourceOptions(parsed, io);
|
|
115
|
+
if (board) {
|
|
116
|
+
const result = await communityThreadsSource(opts, board, sort);
|
|
117
|
+
const threads = result.data.threads;
|
|
118
|
+
if (parsed.flags.json) {
|
|
119
|
+
writeJson(io.stdout, { board, sort, count: threads.length, threads });
|
|
120
|
+
return 0;
|
|
121
|
+
}
|
|
122
|
+
if (threads.length === 0) {
|
|
123
|
+
writeLine(io.stdout, `No threads in /${board}.`);
|
|
124
|
+
return 0;
|
|
125
|
+
}
|
|
126
|
+
writeLine(io.stdout, header(`agora community /${board}`, [`${threads.length} threads`, `sort: ${sort}`], style));
|
|
127
|
+
writeLine(io.stdout, '');
|
|
128
|
+
for (const t of threads) {
|
|
129
|
+
const ageH = Math.round((Date.now() - new Date(t.createdAt).getTime()) / 3600000);
|
|
130
|
+
writeLine(io.stdout, ` ${style.accent(t.title)}`);
|
|
131
|
+
writeLine(io.stdout, ` ${style.dim(t.author + ' \u00b7 ' + ageH + 'h \u00b7 ' + t.score + '\u2191 \u00b7 ' + t.replyCount + ' replies')}`);
|
|
132
|
+
}
|
|
133
|
+
return 0;
|
|
134
|
+
}
|
|
135
|
+
const boardsResult = await communityBoardsSource(opts);
|
|
136
|
+
const boards = boardsResult.data.boards;
|
|
137
|
+
if (parsed.flags.json) {
|
|
138
|
+
writeJson(io.stdout, { boards });
|
|
139
|
+
return 0;
|
|
140
|
+
}
|
|
141
|
+
writeLine(io.stdout, header('agora community', [`${boards.length} boards`], style));
|
|
142
|
+
writeLine(io.stdout, '');
|
|
143
|
+
for (const b of boards) {
|
|
144
|
+
writeLine(io.stdout, ` ${style.accent('/' + b.id.padEnd(12))} ${style.dim(b.threadCount + ' threads, ' + b.newToday + ' new today')}`);
|
|
145
|
+
}
|
|
146
|
+
writeLine(io.stdout, '');
|
|
147
|
+
writeLine(io.stdout, style.dim('Run `agora community <board>` to see threads.'));
|
|
148
|
+
return 0;
|
|
149
|
+
};
|
|
150
|
+
export const commandThread = async (parsed, io, style) => {
|
|
151
|
+
const id = parsed.args[0];
|
|
152
|
+
if (!id)
|
|
153
|
+
return usageError(io, 'thread requires a thread id');
|
|
154
|
+
const opts = await sourceOptions(parsed, io);
|
|
155
|
+
const result = await communityThreadSource(opts, id);
|
|
156
|
+
const { thread, replies } = result.data;
|
|
157
|
+
if (!thread)
|
|
158
|
+
return usageError(io, `Thread not found: ${id}`);
|
|
159
|
+
if (parsed.flags.json) {
|
|
160
|
+
writeJson(io.stdout, { thread, replies });
|
|
161
|
+
return 0;
|
|
162
|
+
}
|
|
163
|
+
const ageH = Math.round((Date.now() - new Date(thread.createdAt).getTime()) / 3600000);
|
|
164
|
+
writeLine(io.stdout, style.bold(thread.title));
|
|
165
|
+
writeLine(io.stdout, `${style.dim(thread.author + ' \u00b7 ' + ageH + 'h \u00b7 ' + thread.score + '\u2191 \u00b7 ' + thread.replyCount + ' replies')}`);
|
|
166
|
+
writeLine(io.stdout, '');
|
|
167
|
+
writeLine(io.stdout, thread.content);
|
|
168
|
+
if (replies.length > 0) {
|
|
169
|
+
writeLine(io.stdout, '');
|
|
170
|
+
writeLine(io.stdout, style.dim('--- replies ---'));
|
|
171
|
+
for (const r of replies) {
|
|
172
|
+
const rAgeH = Math.round((Date.now() - new Date(r.createdAt).getTime()) / 3600000);
|
|
173
|
+
writeLine(io.stdout, ` ${style.dim(r.author + ' \u00b7 ' + rAgeH + 'h')} ${style.accent(r.score + '\u2191')}`);
|
|
174
|
+
writeLine(io.stdout, ` ${r.content}`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return 0;
|
|
178
|
+
};
|
|
179
|
+
export const commandPost = async (parsed, io, style) => {
|
|
180
|
+
const source = await writeSourceOptions(parsed, io);
|
|
181
|
+
if (!source.ok)
|
|
182
|
+
return usageError(io, source.error);
|
|
183
|
+
const board = (stringFlag(parsed, 'board') || stringFlag(parsed, 'b'));
|
|
184
|
+
const title = requiredStringFlag(parsed, 'title');
|
|
185
|
+
const content = contentInput(parsed, io);
|
|
186
|
+
if (!board || !title || !content) {
|
|
187
|
+
return usageError(io, 'post requires --board, --title and --content or --content-file');
|
|
188
|
+
}
|
|
189
|
+
const result = await createThreadSource(source.options, { board, title, content });
|
|
190
|
+
if (parsed.flags.json) {
|
|
191
|
+
writeJson(io.stdout, sourcePayload(result, { thread: result.data.thread }));
|
|
192
|
+
return 0;
|
|
193
|
+
}
|
|
194
|
+
writeLine(io.stdout, `Posted to /${board}: ${style.accent(result.data.thread?.title || title)}`);
|
|
195
|
+
writeLine(io.stdout, `${sourceLabel(result)}`);
|
|
196
|
+
return 0;
|
|
197
|
+
};
|
|
198
|
+
export const commandReply = async (parsed, io, style) => {
|
|
199
|
+
const parentId = parsed.args[0];
|
|
200
|
+
if (!parentId)
|
|
201
|
+
return usageError(io, 'reply requires a thread or reply id');
|
|
202
|
+
const source = await writeSourceOptions(parsed, io);
|
|
203
|
+
if (!source.ok)
|
|
204
|
+
return usageError(io, source.error);
|
|
205
|
+
const content = contentInput(parsed, io);
|
|
206
|
+
if (!content)
|
|
207
|
+
return usageError(io, 'reply requires --content or --content-file');
|
|
208
|
+
const result = await createReplySource(source.options, parentId, {
|
|
209
|
+
content,
|
|
210
|
+
parentId: stringFlag(parsed, 'parentId')
|
|
211
|
+
});
|
|
212
|
+
if (parsed.flags.json) {
|
|
213
|
+
writeJson(io.stdout, sourcePayload(result, { reply: result.data.reply }));
|
|
214
|
+
return 0;
|
|
215
|
+
}
|
|
216
|
+
writeLine(io.stdout, `Replied to ${style.accent(parentId)}`);
|
|
217
|
+
writeLine(io.stdout, `${sourceLabel(result)}`);
|
|
218
|
+
return 0;
|
|
219
|
+
};
|
|
220
|
+
export const commandVote = async (parsed, io, style) => {
|
|
221
|
+
const id = parsed.args[0];
|
|
222
|
+
if (!id)
|
|
223
|
+
return usageError(io, 'vote requires a thread or reply id');
|
|
224
|
+
const source = await writeSourceOptions(parsed, io);
|
|
225
|
+
if (!source.ok)
|
|
226
|
+
return usageError(io, source.error);
|
|
227
|
+
const up = parsed.flags.up === true;
|
|
228
|
+
const down = parsed.flags.down === true;
|
|
229
|
+
if (!up && !down)
|
|
230
|
+
return usageError(io, 'vote requires --up or --down');
|
|
231
|
+
const value = up ? 1 : -1;
|
|
232
|
+
const targetType = (stringFlag(parsed, 'type') || 'discussion');
|
|
233
|
+
await voteSource(source.options, id, { value, targetType });
|
|
234
|
+
if (parsed.flags.json) {
|
|
235
|
+
writeJson(io.stdout, { id, value, targetType, success: true });
|
|
236
|
+
return 0;
|
|
237
|
+
}
|
|
238
|
+
writeLine(io.stdout, up ? `Upvoted ${style.accent(id)}` : `Downvoted ${style.accent(id)}`);
|
|
239
|
+
return 0;
|
|
240
|
+
};
|
|
241
|
+
export const commandFlag = async (parsed, io, style) => {
|
|
242
|
+
const id = parsed.args[0];
|
|
243
|
+
if (!id)
|
|
244
|
+
return usageError(io, 'flag requires an item id');
|
|
245
|
+
const flagMarketplace = (kind) => !kind || kind === 'package' || kind === 'workflow';
|
|
246
|
+
const reasonOpt = stringFlag(parsed, 'reason');
|
|
247
|
+
const validReasons = ['spam', 'harassment', 'undisclosed-llm', 'malicious', 'other'];
|
|
248
|
+
const reason = (reasonOpt && validReasons.includes(reasonOpt) ? reasonOpt : 'other');
|
|
249
|
+
const type = stringFlag(parsed, 'type') || 'discussion';
|
|
250
|
+
if (flagMarketplace(type)) {
|
|
251
|
+
const source = await writeSourceOptions(parsed, io);
|
|
252
|
+
if (!source.ok)
|
|
253
|
+
return usageError(io, source.error);
|
|
254
|
+
const targetType = (type === 'workflow' ? 'workflow' : 'package');
|
|
255
|
+
const result = await flagMarketplaceSource(source.options, id, {
|
|
256
|
+
reason,
|
|
257
|
+
targetType,
|
|
258
|
+
notes: stringFlag(parsed, 'notes')
|
|
259
|
+
});
|
|
260
|
+
if (parsed.flags.json) {
|
|
261
|
+
writeJson(io.stdout, {
|
|
262
|
+
id,
|
|
263
|
+
reason,
|
|
264
|
+
targetType,
|
|
265
|
+
success: result.data.success,
|
|
266
|
+
deduplicated: result.data.deduplicated
|
|
267
|
+
});
|
|
268
|
+
return result.data.success ? 0 : 1;
|
|
269
|
+
}
|
|
270
|
+
if (result.data.deduplicated) {
|
|
271
|
+
writeLine(io.stdout, `Already flagged ${style.accent(id)}`);
|
|
272
|
+
}
|
|
273
|
+
else if (result.data.success) {
|
|
274
|
+
writeLine(io.stdout, `Flagged ${style.accent(id)} for ${reason} (${targetType})`);
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
writeLine(io.stdout, `Could not flag — API not configured. Run \`agora auth login --api-url <url>\` first.`);
|
|
278
|
+
return 1;
|
|
279
|
+
}
|
|
280
|
+
return 0;
|
|
281
|
+
}
|
|
282
|
+
const source = await writeSourceOptions(parsed, io);
|
|
283
|
+
if (!source.ok)
|
|
284
|
+
return usageError(io, source.error);
|
|
285
|
+
const targetType = (type === 'discussion' || type === 'reply' ? type : 'discussion');
|
|
286
|
+
await flagSource(source.options, id, { reason, targetType, notes: stringFlag(parsed, 'notes') });
|
|
287
|
+
if (parsed.flags.json) {
|
|
288
|
+
writeJson(io.stdout, { id, reason, targetType, success: true });
|
|
289
|
+
return 0;
|
|
290
|
+
}
|
|
291
|
+
writeLine(io.stdout, `Flagged ${style.accent(id)} for ${reason}`);
|
|
292
|
+
return 0;
|
|
293
|
+
};
|
|
294
|
+
export const commandDiscussions = async (parsed, io, style) => {
|
|
295
|
+
const category = stringFlag(parsed, 'category', 'c') || 'all';
|
|
296
|
+
const query = parsed.args.join(' ');
|
|
297
|
+
const result = await discussionsSource({ ...(await sourceOptions(parsed, io)), category, query });
|
|
298
|
+
const discussions = result.data;
|
|
299
|
+
warnFallback(result, io);
|
|
300
|
+
if (parsed.flags.json) {
|
|
301
|
+
writeJson(io.stdout, sourcePayload(result, { category, query, count: discussions.length, discussions }));
|
|
302
|
+
return 0;
|
|
303
|
+
}
|
|
304
|
+
if (discussions.length === 0) {
|
|
305
|
+
writeLine(io.stdout, 'No discussions found.');
|
|
306
|
+
return 0;
|
|
307
|
+
}
|
|
308
|
+
writeLine(io.stdout, header('agora discussions', [`${discussions.length} results`, sourceLabel(result)], style));
|
|
309
|
+
writeLine(io.stdout, '');
|
|
310
|
+
writeLine(io.stdout, discussions
|
|
311
|
+
.map((discussion, index) => {
|
|
312
|
+
return [
|
|
313
|
+
`${index + 1}. ${style.accent(discussion.title)} ${style.dim('[' + discussion.category + ']')}`,
|
|
314
|
+
` ${truncate(discussion.content, 88)}`,
|
|
315
|
+
` ${style.dim('replies ' + discussion.replies + ' · stars ' + discussion.stars + ' · by ' + discussion.author)}`
|
|
316
|
+
].join('\n');
|
|
317
|
+
})
|
|
318
|
+
.join('\n\n'));
|
|
319
|
+
return 0;
|
|
320
|
+
};
|
|
321
|
+
export const commandDiscuss = async (parsed, io, style) => {
|
|
322
|
+
const source = await writeSourceOptions(parsed, io);
|
|
323
|
+
if (!source.ok)
|
|
324
|
+
return usageError(io, source.error);
|
|
325
|
+
const title = requiredStringFlag(parsed, 'title');
|
|
326
|
+
const content = contentInput(parsed, io);
|
|
327
|
+
if (!title || !content) {
|
|
328
|
+
return usageError(io, 'discuss requires --title and --content or --content-file');
|
|
329
|
+
}
|
|
330
|
+
const category = discussionCategoryFlag(parsed);
|
|
331
|
+
if (!category.ok)
|
|
332
|
+
return usageError(io, category.error);
|
|
333
|
+
const result = await createDiscussionSource(source.options, {
|
|
334
|
+
title,
|
|
335
|
+
content,
|
|
336
|
+
category: category.value
|
|
337
|
+
});
|
|
338
|
+
if (parsed.flags.json) {
|
|
339
|
+
writeJson(io.stdout, sourcePayload(result, { discussion: result.data }));
|
|
340
|
+
return 0;
|
|
341
|
+
}
|
|
342
|
+
writeLine(io.stdout, `Created discussion ${style.accent(result.data.id)}`);
|
|
343
|
+
writeLine(io.stdout, `${result.data.title} (${sourceLabel(result)})`);
|
|
344
|
+
return 0;
|
|
345
|
+
};
|
|
346
|
+
export const commandAdmin = async (parsed, io, style) => {
|
|
347
|
+
const sub = parsed.args[0];
|
|
348
|
+
if (sub === 'hide') {
|
|
349
|
+
const id = parsed.args[1];
|
|
350
|
+
if (!id)
|
|
351
|
+
return usageError(io, 'admin hide requires an id');
|
|
352
|
+
const reason = stringFlag(parsed, 'reason');
|
|
353
|
+
if (!reason)
|
|
354
|
+
return usageError(io, 'admin hide requires --reason');
|
|
355
|
+
const targetType = (stringFlag(parsed, 'type') || 'discussion');
|
|
356
|
+
if (targetType !== 'discussion' && targetType !== 'reply') {
|
|
357
|
+
return usageError(io, '--type must be discussion or reply');
|
|
358
|
+
}
|
|
359
|
+
const source = await writeSourceOptions(parsed, io);
|
|
360
|
+
if (!source.ok)
|
|
361
|
+
return usageError(io, source.error);
|
|
362
|
+
try {
|
|
363
|
+
const result = await adminHideSource(source.options, id, { targetType, reason });
|
|
364
|
+
if (parsed.flags.json) {
|
|
365
|
+
writeJson(io.stdout, result.data);
|
|
366
|
+
return 0;
|
|
367
|
+
}
|
|
368
|
+
writeLine(io.stdout, `Hid ${style.accent(id)} (${targetType}); audit id ${style.dim(result.data.id)}`);
|
|
369
|
+
return 0;
|
|
370
|
+
}
|
|
371
|
+
catch (e) {
|
|
372
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
373
|
+
if (msg === 'Admin access required') {
|
|
374
|
+
writeLine(io.stderr, 'Admin access required');
|
|
375
|
+
return 1;
|
|
376
|
+
}
|
|
377
|
+
throw e;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
if (sub === 'log') {
|
|
381
|
+
const limit = numberFlag(parsed, 'limit') || 50;
|
|
382
|
+
const source = await writeSourceOptions(parsed, io);
|
|
383
|
+
if (!source.ok)
|
|
384
|
+
return usageError(io, source.error);
|
|
385
|
+
try {
|
|
386
|
+
const result = await adminLogSource(source.options, { limit });
|
|
387
|
+
const entries = result.data.entries;
|
|
388
|
+
if (parsed.flags.json) {
|
|
389
|
+
writeJson(io.stdout, { entries });
|
|
390
|
+
return 0;
|
|
391
|
+
}
|
|
392
|
+
if (entries.length === 0) {
|
|
393
|
+
writeLine(io.stdout, 'No kill-switch log entries.');
|
|
394
|
+
return 0;
|
|
395
|
+
}
|
|
396
|
+
const COL = { at: 20, op: 16, type: 12, target: 24 };
|
|
397
|
+
writeLine(io.stdout, [
|
|
398
|
+
'acted_at'.padEnd(COL.at),
|
|
399
|
+
'operator'.padEnd(COL.op),
|
|
400
|
+
'type'.padEnd(COL.type),
|
|
401
|
+
'target'.padEnd(COL.target),
|
|
402
|
+
'reason'
|
|
403
|
+
].join(' '));
|
|
404
|
+
writeLine(io.stdout, '-'.repeat(COL.at + COL.op + COL.type + COL.target + 40));
|
|
405
|
+
for (const e of entries) {
|
|
406
|
+
writeLine(io.stdout, [
|
|
407
|
+
e.actedAt.slice(0, COL.at).padEnd(COL.at),
|
|
408
|
+
e.operatorUsername.slice(0, COL.op).padEnd(COL.op),
|
|
409
|
+
e.targetType.slice(0, COL.type).padEnd(COL.type),
|
|
410
|
+
e.targetId.slice(0, COL.target).padEnd(COL.target),
|
|
411
|
+
e.reason
|
|
412
|
+
].join(' '));
|
|
413
|
+
}
|
|
414
|
+
return 0;
|
|
415
|
+
}
|
|
416
|
+
catch (e) {
|
|
417
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
418
|
+
if (msg === 'Admin access required') {
|
|
419
|
+
writeLine(io.stderr, 'Admin access required');
|
|
420
|
+
return 1;
|
|
421
|
+
}
|
|
422
|
+
throw e;
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
if (sub === 'recompute') {
|
|
426
|
+
const source = await writeSourceOptions(parsed, io);
|
|
427
|
+
if (!source.ok)
|
|
428
|
+
return usageError(io, source.error);
|
|
429
|
+
try {
|
|
430
|
+
const result = await adminRecomputeSource(source.options);
|
|
431
|
+
if (parsed.flags.json) {
|
|
432
|
+
writeJson(io.stdout, result.data);
|
|
433
|
+
return 0;
|
|
434
|
+
}
|
|
435
|
+
writeLine(io.stdout, `Recomputed ${result.data.recomputed} users in ${result.data.durationMs}ms`);
|
|
436
|
+
return 0;
|
|
437
|
+
}
|
|
438
|
+
catch (e) {
|
|
439
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
440
|
+
if (msg === 'Admin access required') {
|
|
441
|
+
writeLine(io.stderr, 'Admin access required');
|
|
442
|
+
return 1;
|
|
443
|
+
}
|
|
444
|
+
throw e;
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
writeLine(io.stdout, 'Usage:');
|
|
448
|
+
writeLine(io.stdout, ' agora admin hide <id> --reason <r> [--type discussion|reply]');
|
|
449
|
+
writeLine(io.stdout, ' agora admin log [--limit 50]');
|
|
450
|
+
writeLine(io.stdout, ' agora admin recompute');
|
|
451
|
+
return 1;
|
|
452
|
+
};
|
|
453
|
+
//# sourceMappingURL=community.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"community.js","sourceRoot":"","sources":["../../../src/cli/commands/community.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/export.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA8DjD,eAAO,MAAM,aAAa,EAAE,cA0D3B,CAAC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { getMarketplaceItems } from '../../marketplace.js';
|
|
2
|
+
import { searchMarketplaceSource } from '../../live.js';
|
|
3
|
+
import { stringFlag, numberFlag, sourceOptions, warnFallback, writeLine, writeJson, usageError } from '../helpers.js';
|
|
4
|
+
import { header } from '../format.js';
|
|
5
|
+
function toCsv(items) {
|
|
6
|
+
const headerRow = 'id,name,kind,category,author,stars,installs,tags,description';
|
|
7
|
+
const rows = items.map((i) => {
|
|
8
|
+
const fields = [
|
|
9
|
+
escapeCsv(i.id),
|
|
10
|
+
escapeCsv(i.name),
|
|
11
|
+
i.kind,
|
|
12
|
+
i.category,
|
|
13
|
+
escapeCsv(i.author),
|
|
14
|
+
String(i.stars ?? 0),
|
|
15
|
+
String(i.installs ?? 0),
|
|
16
|
+
escapeCsv((i.tags ?? []).join(';')),
|
|
17
|
+
escapeCsv(i.description)
|
|
18
|
+
];
|
|
19
|
+
return fields.join(',');
|
|
20
|
+
});
|
|
21
|
+
return [headerRow, ...rows].join('\n');
|
|
22
|
+
}
|
|
23
|
+
function escapeCsv(value) {
|
|
24
|
+
if (value.includes(',') || value.includes('"') || value.includes('\n')) {
|
|
25
|
+
return `"${value.replace(/"/g, '""')}"`;
|
|
26
|
+
}
|
|
27
|
+
return value;
|
|
28
|
+
}
|
|
29
|
+
function toMarkdown(items) {
|
|
30
|
+
const lines = ['| id | name | kind | category | author | stars | installs | tags |'];
|
|
31
|
+
lines.push('|' + ['---', '---', '---', '---', '---', '---', '---', '---'].join('|') + '|');
|
|
32
|
+
for (const i of items) {
|
|
33
|
+
lines.push(`| ${i.id} | ${escapeMd(i.name)} | ${i.kind} | ${i.category} | ${escapeMd(i.author)} | ${i.stars ?? 0} | ${i.installs ?? 0} | ${(i.tags ?? []).join(', ')} |`);
|
|
34
|
+
}
|
|
35
|
+
return lines.join('\n');
|
|
36
|
+
}
|
|
37
|
+
function escapeMd(value) {
|
|
38
|
+
return value.replace(/\|/g, '\\|');
|
|
39
|
+
}
|
|
40
|
+
function toTable(items, _style) {
|
|
41
|
+
const idW = Math.max(4, ...items.map((i) => i.id.length));
|
|
42
|
+
const nameW = Math.max(4, ...items.map((i) => i.name.length));
|
|
43
|
+
const catW = Math.max(8, ...items.map((i) => i.category.length));
|
|
44
|
+
const authorW = Math.max(6, ...items.map((i) => i.author.length));
|
|
45
|
+
const hr = `+-${'-'.repeat(idW)}-+-${'-'.repeat(nameW)}-+-${'-'.repeat(4)}-+-${'-'.repeat(catW)}-+-${'-'.repeat(authorW)}-+-${'-'.repeat(6)}-+-${'-'.repeat(8)}-+`;
|
|
46
|
+
const hdr = `| ${'id'.padEnd(idW)} | ${'name'.padEnd(nameW)} | kind | ${'category'.padEnd(catW)} | ${'author'.padEnd(authorW)} | stars | installs |`;
|
|
47
|
+
const rows = items.map((i) => {
|
|
48
|
+
const name = i.name.length > nameW ? i.name.slice(0, nameW - 1) + '\u2026' : i.name.padEnd(nameW);
|
|
49
|
+
return `| ${i.id.padEnd(idW)} | ${name} | ${i.kind.padEnd(4)} | ${i.category.padEnd(catW)} | ${i.author.padEnd(authorW)} | ${String(i.stars ?? 0).padStart(5)} | ${String(i.installs ?? 0).padStart(7)} |`;
|
|
50
|
+
});
|
|
51
|
+
return [hr, hdr, hr, ...rows, hr].join('\n');
|
|
52
|
+
}
|
|
53
|
+
export const commandExport = async (parsed, io, style) => {
|
|
54
|
+
const format = (stringFlag(parsed, 'format', 'f') || 'json');
|
|
55
|
+
const query = parsed.args.join(' ');
|
|
56
|
+
const category = stringFlag(parsed, 'category', 'c') || 'all';
|
|
57
|
+
const limit = numberFlag(parsed, 'limit', 'n') || 0;
|
|
58
|
+
const validFormats = ['json', 'csv', 'markdown', 'table'];
|
|
59
|
+
if (!validFormats.includes(format)) {
|
|
60
|
+
return usageError(io, `Unknown format "${format}". Use --format json|csv|markdown|table`);
|
|
61
|
+
}
|
|
62
|
+
let items;
|
|
63
|
+
if (parsed.flags.api || parsed.flags.live) {
|
|
64
|
+
const result = await searchMarketplaceSource({
|
|
65
|
+
...(await sourceOptions(parsed, io)),
|
|
66
|
+
query,
|
|
67
|
+
category,
|
|
68
|
+
limit: limit || 1000
|
|
69
|
+
});
|
|
70
|
+
items = result.data;
|
|
71
|
+
warnFallback(result, io);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
items = getMarketplaceItems()
|
|
75
|
+
.filter((i) => {
|
|
76
|
+
if (category !== 'all' && i.category !== category)
|
|
77
|
+
return false;
|
|
78
|
+
if (query && !i.id.toLowerCase().includes(query.toLowerCase()) && !i.name.toLowerCase().includes(query.toLowerCase()) && !i.description.toLowerCase().includes(query.toLowerCase()))
|
|
79
|
+
return false;
|
|
80
|
+
return true;
|
|
81
|
+
});
|
|
82
|
+
if (limit > 0)
|
|
83
|
+
items = items.slice(0, limit);
|
|
84
|
+
}
|
|
85
|
+
if (items.length === 0) {
|
|
86
|
+
writeLine(io.stdout, 'No items match the export criteria.');
|
|
87
|
+
return 0;
|
|
88
|
+
}
|
|
89
|
+
if (format === 'json') {
|
|
90
|
+
writeJson(io.stdout, { count: items.length, items });
|
|
91
|
+
return 0;
|
|
92
|
+
}
|
|
93
|
+
if (format === 'csv') {
|
|
94
|
+
writeLine(io.stdout, toCsv(items));
|
|
95
|
+
return 0;
|
|
96
|
+
}
|
|
97
|
+
if (format === 'markdown') {
|
|
98
|
+
writeLine(io.stdout, header('agora export', [`${items.length} items`, format], style));
|
|
99
|
+
writeLine(io.stdout, '');
|
|
100
|
+
writeLine(io.stdout, toMarkdown(items));
|
|
101
|
+
return 0;
|
|
102
|
+
}
|
|
103
|
+
writeLine(io.stdout, header('agora export', [`${items.length} items`, format], style));
|
|
104
|
+
writeLine(io.stdout, '');
|
|
105
|
+
writeLine(io.stdout, toTable(items, style));
|
|
106
|
+
return 0;
|
|
107
|
+
};
|
|
108
|
+
//# sourceMappingURL=export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/cli/commands/export.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA6FjD,eAAO,MAAM,WAAW,EAAE,cA6JzB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,cAoExB,CAAC"}
|