opencode-agora 0.2.2 → 0.3.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.
- package/dist/api.d.ts +4 -1
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +7 -7
- package/dist/api.js.map +1 -1
- package/dist/cli/app.d.ts.map +1 -1
- package/dist/cli/app.js +152 -47
- package/dist/cli/app.js.map +1 -1
- package/dist/config-files.d.ts.map +1 -1
- package/dist/config-files.js +11 -8
- package/dist/config-files.js.map +1 -1
- package/dist/config.d.ts +7 -5
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +18 -12
- package/dist/config.js.map +1 -1
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +398 -594
- package/dist/data.js.map +1 -1
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +8 -6
- package/dist/format.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +69 -34
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +4 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +101 -44
- package/dist/init.js.map +1 -1
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +76 -16
- package/dist/live.js.map +1 -1
- package/dist/marketplace.d.ts.map +1 -1
- package/dist/marketplace.js +23 -18
- package/dist/marketplace.js.map +1 -1
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +7 -6
- package/dist/state.js.map +1 -1
- package/package.json +13 -4
package/dist/api.d.ts
CHANGED
|
@@ -49,7 +49,10 @@ export declare function searchPackages(query: string, category?: string): Promis
|
|
|
49
49
|
export declare function getPackage(id: string): Promise<Package | null>;
|
|
50
50
|
export declare function searchWorkflows(query: string): Promise<Workflow[]>;
|
|
51
51
|
export declare function getWorkflow(id: string): Promise<Workflow | null>;
|
|
52
|
-
export declare function getTrending(_type?: 'packages' | 'workflows' | 'all'): Promise<
|
|
52
|
+
export declare function getTrending(_type?: 'packages' | 'workflows' | 'all'): Promise<{
|
|
53
|
+
packages: unknown[];
|
|
54
|
+
workflows: unknown[];
|
|
55
|
+
}>;
|
|
53
56
|
export declare function getDiscussions(category?: string): Promise<Discussion[]>;
|
|
54
57
|
export declare function createDiscussion(data: {
|
|
55
58
|
title: string;
|
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAUzF;AAED,wBAAsB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAOpE;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAOxE;AAED,wBAAsB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAOtE;AAED,wBAAsB,WAAW,
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/api.js
CHANGED
|
@@ -8,7 +8,7 @@ export async function searchPackages(query, category) {
|
|
|
8
8
|
const res = await fetch(`${API_BASE}/api/packages?${params}`);
|
|
9
9
|
if (!res.ok)
|
|
10
10
|
return [];
|
|
11
|
-
const data = await res.json();
|
|
11
|
+
const data = (await res.json());
|
|
12
12
|
return data.packages || [];
|
|
13
13
|
}
|
|
14
14
|
export async function getPackage(id) {
|
|
@@ -17,7 +17,7 @@ export async function getPackage(id) {
|
|
|
17
17
|
const res = await fetch(`${API_BASE}/api/packages/${id}`);
|
|
18
18
|
if (!res.ok)
|
|
19
19
|
return null;
|
|
20
|
-
const data = await res.json();
|
|
20
|
+
const data = (await res.json());
|
|
21
21
|
return data.package || null;
|
|
22
22
|
}
|
|
23
23
|
export async function searchWorkflows(query) {
|
|
@@ -26,7 +26,7 @@ export async function searchWorkflows(query) {
|
|
|
26
26
|
const res = await fetch(`${API_BASE}/api/workflows?q=${encodeURIComponent(query)}`);
|
|
27
27
|
if (!res.ok)
|
|
28
28
|
return [];
|
|
29
|
-
const data = await res.json();
|
|
29
|
+
const data = (await res.json());
|
|
30
30
|
return data.workflows || [];
|
|
31
31
|
}
|
|
32
32
|
export async function getWorkflow(id) {
|
|
@@ -35,7 +35,7 @@ export async function getWorkflow(id) {
|
|
|
35
35
|
const res = await fetch(`${API_BASE}/api/workflows/${id}`);
|
|
36
36
|
if (!res.ok)
|
|
37
37
|
return null;
|
|
38
|
-
const data = await res.json();
|
|
38
|
+
const data = (await res.json());
|
|
39
39
|
return data.workflow || null;
|
|
40
40
|
}
|
|
41
41
|
export async function getTrending(_type = 'all') {
|
|
@@ -53,7 +53,7 @@ export async function getDiscussions(category) {
|
|
|
53
53
|
const res = await fetch(`${API_BASE}/api/discussions${params}`);
|
|
54
54
|
if (!res.ok)
|
|
55
55
|
return [];
|
|
56
|
-
const data = await res.json();
|
|
56
|
+
const data = (await res.json());
|
|
57
57
|
return data.discussions || [];
|
|
58
58
|
}
|
|
59
59
|
export async function createDiscussion(data, token) {
|
|
@@ -70,7 +70,7 @@ export async function createDiscussion(data, token) {
|
|
|
70
70
|
});
|
|
71
71
|
if (!res.ok)
|
|
72
72
|
return null;
|
|
73
|
-
const payload = await res.json();
|
|
73
|
+
const payload = (await res.json());
|
|
74
74
|
return payload.discussion || payload;
|
|
75
75
|
}
|
|
76
76
|
export async function getUser(username) {
|
|
@@ -79,7 +79,7 @@ export async function getUser(username) {
|
|
|
79
79
|
const res = await fetch(`${API_BASE}/api/users/${username}`);
|
|
80
80
|
if (!res.ok)
|
|
81
81
|
return null;
|
|
82
|
-
const data = await res.json();
|
|
82
|
+
const data = (await res.json());
|
|
83
83
|
return data.user || null;
|
|
84
84
|
}
|
|
85
85
|
export async function searchNpmPackages(query) {
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC;AAqDjD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAa,EAAE,QAAiB;IACnE,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACjD,IAAI,QAAQ;QAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAE/C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,iBAAiB,MAAM,EAAE,CAAC,CAAC;IAC9D,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IAEvB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/cli/app.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/cli/app.ts"],"names":[],"mappings":"AAUA,OAAO,EAKL,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAeL,KAAK,SAAS,EAGf,MAAM,YAAY,CAAC;AAqBpB,KAAK,YAAY,GAAG;IAClB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC/B,CAAC;AAEF,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;CACzC;AAaD,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAmEvE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAsDpD;AAwwCD,wBAAgB,cAAc,IAAI,eAAe,EAAE,CAElD"}
|
package/dist/cli/app.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { execSync } from 'node:child_process';
|
|
2
|
-
import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
2
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
|
-
import pkg from '../../package.json';
|
|
5
4
|
import { formatConfigJson } from '../config.js';
|
|
6
5
|
import { detectOpenCodeConfigPath, doctorOpenCodeConfig, loadOpenCodeConfig, writeOpenCodeConfig } from '../config-files.js';
|
|
7
6
|
import { createInstallPlan, getInstallKind, getMarketplaceItems, getTrendingTags } from '../marketplace.js';
|
|
@@ -9,8 +8,18 @@ import { scanProject, generateInitPlan, applyInitPlan, runCommands } from '../in
|
|
|
9
8
|
import { sampleWorkflows, dataRefreshedAt } from '../data.js';
|
|
10
9
|
import { createDiscussionSource, discussionsSource, findMarketplaceSource, createReviewSource, findTutorialSource, listReviewsSource, profileSource, publishPackageSource, publishWorkflowSource, searchMarketplaceSource, trendingMarketplaceSource, tutorialsSource } from '../live.js';
|
|
11
10
|
import { clearAuthState, detectAgoraDataDir, getAuthState, getAgoraStatePath, loadAgoraState, removeItemFromState, resolveSavedItems, saveItemToState, setAuthState, writeAgoraState } from '../state.js';
|
|
11
|
+
const pkg = JSON.parse(readFileSync(new URL('../../package.json', import.meta.url), 'utf8'));
|
|
12
12
|
const VERSION = pkg.version;
|
|
13
|
-
const booleanFlags = new Set([
|
|
13
|
+
const booleanFlags = new Set([
|
|
14
|
+
'api',
|
|
15
|
+
'help',
|
|
16
|
+
'json',
|
|
17
|
+
'live',
|
|
18
|
+
'offline',
|
|
19
|
+
'version',
|
|
20
|
+
'verbose',
|
|
21
|
+
'write'
|
|
22
|
+
]);
|
|
14
23
|
export async function runCli(argv, io) {
|
|
15
24
|
const parsed = parseArgs(argv);
|
|
16
25
|
if (parsed.flags.version) {
|
|
@@ -92,7 +101,9 @@ export function parseArgs(argv) {
|
|
|
92
101
|
if (inlineValue !== undefined) {
|
|
93
102
|
flags[key] = inlineValue;
|
|
94
103
|
}
|
|
95
|
-
else if (!booleanFlags.has(key) &&
|
|
104
|
+
else if (!booleanFlags.has(key) &&
|
|
105
|
+
argv[index + 1] &&
|
|
106
|
+
(!argv[index + 1].startsWith('-') || /^-\d/.test(argv[index + 1]))) {
|
|
96
107
|
flags[key] = argv[index + 1];
|
|
97
108
|
index += 1;
|
|
98
109
|
}
|
|
@@ -103,7 +114,9 @@ export function parseArgs(argv) {
|
|
|
103
114
|
}
|
|
104
115
|
if (arg.startsWith('-') && arg.length > 1) {
|
|
105
116
|
const key = shortFlag(arg);
|
|
106
|
-
if (!booleanFlags.has(key) &&
|
|
117
|
+
if (!booleanFlags.has(key) &&
|
|
118
|
+
argv[index + 1] &&
|
|
119
|
+
(!argv[index + 1].startsWith('-') || /^-\d/.test(argv[index + 1]))) {
|
|
107
120
|
flags[key] = argv[index + 1];
|
|
108
121
|
index += 1;
|
|
109
122
|
}
|
|
@@ -124,7 +137,12 @@ async function commandSearch(parsed, io) {
|
|
|
124
137
|
const query = parsed.args.join(' ');
|
|
125
138
|
const category = stringFlag(parsed, 'category', 'c') || 'all';
|
|
126
139
|
const limit = numberFlag(parsed, 'limit', 'n') || 10;
|
|
127
|
-
const result = await searchMarketplaceSource({
|
|
140
|
+
const result = await searchMarketplaceSource({
|
|
141
|
+
...sourceOptions(parsed, io),
|
|
142
|
+
query,
|
|
143
|
+
category,
|
|
144
|
+
limit
|
|
145
|
+
});
|
|
128
146
|
const results = result.data;
|
|
129
147
|
warnFallback(result, io);
|
|
130
148
|
if (parsed.flags.json) {
|
|
@@ -146,7 +164,11 @@ async function commandBrowse(parsed, io) {
|
|
|
146
164
|
const id = parsed.args[0];
|
|
147
165
|
if (!id)
|
|
148
166
|
return usageError(io, 'browse requires an item id');
|
|
149
|
-
const result = await findMarketplaceSource({
|
|
167
|
+
const result = await findMarketplaceSource({
|
|
168
|
+
...sourceOptions(parsed, io),
|
|
169
|
+
id,
|
|
170
|
+
type: stringFlag(parsed, 'type', 't')
|
|
171
|
+
});
|
|
150
172
|
const item = result.data;
|
|
151
173
|
warnFallback(result, io);
|
|
152
174
|
if (!item)
|
|
@@ -176,7 +198,12 @@ async function commandTrending(parsed, io) {
|
|
|
176
198
|
async function commandWorkflows(parsed, io) {
|
|
177
199
|
const query = parsed.args.join(' ');
|
|
178
200
|
const limit = numberFlag(parsed, 'limit', 'n') || 10;
|
|
179
|
-
const result = await searchMarketplaceSource({
|
|
201
|
+
const result = await searchMarketplaceSource({
|
|
202
|
+
...sourceOptions(parsed, io),
|
|
203
|
+
query,
|
|
204
|
+
category: 'workflow',
|
|
205
|
+
limit
|
|
206
|
+
});
|
|
180
207
|
const workflows = result.data.filter((item) => item.kind === 'workflow');
|
|
181
208
|
warnFallback(result, io);
|
|
182
209
|
if (parsed.flags.json) {
|
|
@@ -193,7 +220,12 @@ async function commandTutorials(parsed, io) {
|
|
|
193
220
|
if (!level.ok)
|
|
194
221
|
return usageError(io, level.error);
|
|
195
222
|
const limit = numberFlag(parsed, 'limit', 'n') || 20;
|
|
196
|
-
const result = await tutorialsSource({
|
|
223
|
+
const result = await tutorialsSource({
|
|
224
|
+
...sourceOptions(parsed, io),
|
|
225
|
+
query,
|
|
226
|
+
level: level.value,
|
|
227
|
+
limit
|
|
228
|
+
});
|
|
197
229
|
const tutorials = result.data;
|
|
198
230
|
warnFallback(result, io);
|
|
199
231
|
if (parsed.flags.json) {
|
|
@@ -245,13 +277,15 @@ async function commandDiscussions(parsed, io) {
|
|
|
245
277
|
return 0;
|
|
246
278
|
}
|
|
247
279
|
writeLine(io.stdout, `Agora discussions (${discussions.length}, source: ${result.source})`);
|
|
248
|
-
writeLine(io.stdout, discussions
|
|
280
|
+
writeLine(io.stdout, discussions
|
|
281
|
+
.map((discussion, index) => {
|
|
249
282
|
return [
|
|
250
283
|
`${index + 1}. ${discussion.title} [${discussion.category}]`,
|
|
251
284
|
` ${truncate(discussion.content, 88)}`,
|
|
252
285
|
` replies ${discussion.replies} | stars ${discussion.stars} | by ${discussion.author}`
|
|
253
286
|
].join('\n');
|
|
254
|
-
})
|
|
287
|
+
})
|
|
288
|
+
.join('\n\n'));
|
|
255
289
|
return 0;
|
|
256
290
|
}
|
|
257
291
|
async function commandDiscuss(parsed, io) {
|
|
@@ -259,7 +293,7 @@ async function commandDiscuss(parsed, io) {
|
|
|
259
293
|
if (!source.ok)
|
|
260
294
|
return usageError(io, source.error);
|
|
261
295
|
const title = requiredStringFlag(parsed, 'title');
|
|
262
|
-
const content = contentInput(parsed);
|
|
296
|
+
const content = contentInput(parsed, io);
|
|
263
297
|
if (!title || !content) {
|
|
264
298
|
return usageError(io, 'discuss requires --title and --content or --content-file');
|
|
265
299
|
}
|
|
@@ -283,7 +317,11 @@ async function commandInstall(parsed, io) {
|
|
|
283
317
|
const id = parsed.args[0];
|
|
284
318
|
if (!id)
|
|
285
319
|
return usageError(io, 'install requires an item id');
|
|
286
|
-
const source = await findMarketplaceSource({
|
|
320
|
+
const source = await findMarketplaceSource({
|
|
321
|
+
...sourceOptions(parsed, io),
|
|
322
|
+
id,
|
|
323
|
+
type: stringFlag(parsed, 'type', 't')
|
|
324
|
+
});
|
|
287
325
|
const item = source.data;
|
|
288
326
|
warnFallback(source, io);
|
|
289
327
|
if (!item)
|
|
@@ -345,8 +383,34 @@ async function commandInstall(parsed, io) {
|
|
|
345
383
|
async function commandInit(parsed, io) {
|
|
346
384
|
const cwd = io.cwd || process.cwd();
|
|
347
385
|
const scan = scanProject(cwd);
|
|
386
|
+
const plan = generateInitPlan(scan);
|
|
387
|
+
const configPath = detectOpenCodeConfigPath({ cwd, env: io.env });
|
|
348
388
|
if (parsed.flags.json) {
|
|
349
|
-
|
|
389
|
+
if (parsed.flags.dryRun) {
|
|
390
|
+
writeJson(io.stdout, {
|
|
391
|
+
projectType: scan.type,
|
|
392
|
+
frameworks: scan.frameworks,
|
|
393
|
+
config: plan.config,
|
|
394
|
+
servers: plan.servers,
|
|
395
|
+
commands: plan.commands,
|
|
396
|
+
dryRun: true
|
|
397
|
+
});
|
|
398
|
+
return 0;
|
|
399
|
+
}
|
|
400
|
+
applyInitPlan(plan, configPath);
|
|
401
|
+
const installResults = plan.commands.length ? runCommands(plan.commands) : [];
|
|
402
|
+
const installed = installResults.filter((r) => r.ok).length;
|
|
403
|
+
const failed = installResults.filter((r) => !r.ok).length;
|
|
404
|
+
writeJson(io.stdout, {
|
|
405
|
+
projectType: scan.type,
|
|
406
|
+
frameworks: scan.frameworks,
|
|
407
|
+
config: plan.config,
|
|
408
|
+
servers: plan.servers,
|
|
409
|
+
commands: plan.commands,
|
|
410
|
+
installResults,
|
|
411
|
+
installed,
|
|
412
|
+
failed
|
|
413
|
+
});
|
|
350
414
|
return 0;
|
|
351
415
|
}
|
|
352
416
|
writeLine(io.stdout, `Scanning ${cwd}...`);
|
|
@@ -359,15 +423,15 @@ async function commandInit(parsed, io) {
|
|
|
359
423
|
writeLine(io.stdout, ' Tests: detected');
|
|
360
424
|
if (scan.hasDatabase)
|
|
361
425
|
writeLine(io.stdout, ' Database: detected');
|
|
362
|
-
const plan = generateInitPlan(scan);
|
|
363
|
-
const configPath = detectOpenCodeConfigPath({ cwd, env: io.env });
|
|
364
426
|
if (!parsed.flags.dryRun) {
|
|
365
427
|
applyInitPlan(plan, configPath);
|
|
366
428
|
writeLine(io.stdout, `\nWrote config to ${configPath}`);
|
|
367
429
|
if (plan.commands.length) {
|
|
368
430
|
writeLine(io.stdout, '\nInstalling MCP server packages...');
|
|
369
|
-
runCommands(plan.commands);
|
|
370
|
-
|
|
431
|
+
const installResults = runCommands(plan.commands);
|
|
432
|
+
const installed = installResults.filter((r) => r.ok).length;
|
|
433
|
+
const failed = installResults.filter((r) => !r.ok).length;
|
|
434
|
+
writeLine(io.stdout, ` Installed ${installed} of ${plan.commands.length} packages${failed ? ` (${failed} failed)` : ''}`);
|
|
371
435
|
}
|
|
372
436
|
writeLine(io.stdout, '\n✓ Agora initialized! Restart OpenCode to pick up the changes.');
|
|
373
437
|
writeLine(io.stdout, ' Plugin "opencode-agora" is now registered in your config.');
|
|
@@ -412,11 +476,13 @@ ${workflow.prompt}
|
|
|
412
476
|
writeFileSync(skillPath, skillContent, 'utf8');
|
|
413
477
|
const configPath = detectOpenCodeConfigPath({ cwd, env: io.env });
|
|
414
478
|
const loaded = loadOpenCodeConfig(configPath);
|
|
415
|
-
|
|
479
|
+
if (loaded.error)
|
|
480
|
+
return usageError(io, `${loaded.path}: ${loaded.error}`);
|
|
481
|
+
const plugins = new Set(loaded.config.plugin || []);
|
|
416
482
|
plugins.add(skillId);
|
|
417
483
|
const updatedConfig = {
|
|
418
484
|
...loaded.config,
|
|
419
|
-
|
|
485
|
+
plugin: Array.from(plugins)
|
|
420
486
|
};
|
|
421
487
|
writeOpenCodeConfig(configPath, updatedConfig);
|
|
422
488
|
if (parsed.flags.json) {
|
|
@@ -514,7 +580,11 @@ async function commandSave(parsed, io) {
|
|
|
514
580
|
const id = parsed.args[0];
|
|
515
581
|
if (!id)
|
|
516
582
|
return usageError(io, 'save requires an item id');
|
|
517
|
-
const source = await findMarketplaceSource({
|
|
583
|
+
const source = await findMarketplaceSource({
|
|
584
|
+
...sourceOptions(parsed, io),
|
|
585
|
+
id,
|
|
586
|
+
type: stringFlag(parsed, 'type', 't')
|
|
587
|
+
});
|
|
518
588
|
const item = source.data;
|
|
519
589
|
warnFallback(source, io);
|
|
520
590
|
if (!item)
|
|
@@ -625,8 +695,8 @@ async function commandPublish(parsed, io) {
|
|
|
625
695
|
writeLine(io.stdout, `${result.data.name} (${result.source})`);
|
|
626
696
|
return 0;
|
|
627
697
|
}
|
|
628
|
-
const prompt = promptInput(parsed);
|
|
629
|
-
if (
|
|
698
|
+
const prompt = promptInput(parsed, io);
|
|
699
|
+
if (prompt === undefined) {
|
|
630
700
|
return usageError(io, 'publish workflow requires --prompt or --prompt-file');
|
|
631
701
|
}
|
|
632
702
|
const result = await publishWorkflowSource(source.options, {
|
|
@@ -707,7 +777,8 @@ async function commandProfile(parsed, io) {
|
|
|
707
777
|
return 0;
|
|
708
778
|
}
|
|
709
779
|
function formatItemList(items) {
|
|
710
|
-
return items
|
|
780
|
+
return items
|
|
781
|
+
.map((item, index) => {
|
|
711
782
|
const installs = item.kind === 'package' ? ` | installs ${formatCount(item.installs)}` : '';
|
|
712
783
|
return [
|
|
713
784
|
`${index + 1}. ${item.id} [${item.category}]`,
|
|
@@ -715,7 +786,8 @@ function formatItemList(items) {
|
|
|
715
786
|
` ${truncate(item.description, 88)}`,
|
|
716
787
|
` stars ${formatCount(item.stars)}${installs} | by ${item.author}`
|
|
717
788
|
].join('\n');
|
|
718
|
-
})
|
|
789
|
+
})
|
|
790
|
+
.join('\n\n');
|
|
719
791
|
}
|
|
720
792
|
function formatItemDetail(item) {
|
|
721
793
|
const lines = [
|
|
@@ -748,7 +820,8 @@ function formatItemDetail(item) {
|
|
|
748
820
|
return lines.join('\n');
|
|
749
821
|
}
|
|
750
822
|
function formatSavedList(items) {
|
|
751
|
-
return items
|
|
823
|
+
return items
|
|
824
|
+
.map((entry, index) => {
|
|
752
825
|
if (!entry.item) {
|
|
753
826
|
return [
|
|
754
827
|
`${index + 1}. ${entry.saved.id} [missing]`,
|
|
@@ -761,16 +834,19 @@ function formatSavedList(items) {
|
|
|
761
834
|
` ${truncate(entry.item.description, 88)}`,
|
|
762
835
|
` saved ${formatDate(entry.saved.savedAt)}`
|
|
763
836
|
].join('\n');
|
|
764
|
-
})
|
|
837
|
+
})
|
|
838
|
+
.join('\n\n');
|
|
765
839
|
}
|
|
766
840
|
function formatReviewList(reviews) {
|
|
767
|
-
return reviews
|
|
841
|
+
return reviews
|
|
842
|
+
.map((review, index) => {
|
|
768
843
|
return [
|
|
769
844
|
`${index + 1}. ${review.itemId} [${review.itemType}]`,
|
|
770
845
|
` rating ${review.rating}/5 by ${review.author}`,
|
|
771
846
|
` ${truncate(review.content, 88)}`
|
|
772
847
|
].join('\n');
|
|
773
|
-
})
|
|
848
|
+
})
|
|
849
|
+
.join('\n\n');
|
|
774
850
|
}
|
|
775
851
|
function formatProfileDetail(profile) {
|
|
776
852
|
const lines = [
|
|
@@ -789,14 +865,16 @@ function formatProfileDetail(profile) {
|
|
|
789
865
|
return lines.join('\n');
|
|
790
866
|
}
|
|
791
867
|
function formatTutorialList(tutorials) {
|
|
792
|
-
return tutorials
|
|
868
|
+
return tutorials
|
|
869
|
+
.map((tutorial, index) => {
|
|
793
870
|
return [
|
|
794
871
|
`${index + 1}. ${tutorial.id} [${tutorial.level}]`,
|
|
795
872
|
` ${tutorial.title}`,
|
|
796
873
|
` ${truncate(tutorial.description, 88)}`,
|
|
797
874
|
` ${tutorial.duration} | ${tutorial.steps.length} steps`
|
|
798
875
|
].join('\n');
|
|
799
|
-
})
|
|
876
|
+
})
|
|
877
|
+
.join('\n\n');
|
|
800
878
|
}
|
|
801
879
|
function formatTutorialStep(tutorial, stepNumber) {
|
|
802
880
|
const payload = tutorialStepPayload(tutorial, stepNumber);
|
|
@@ -898,9 +976,9 @@ function numberFlag(parsed, longName, shortName) {
|
|
|
898
976
|
return Number.isFinite(parsedValue) ? parsedValue : undefined;
|
|
899
977
|
}
|
|
900
978
|
function authTokenInput(parsed, io) {
|
|
901
|
-
return requiredStringFlag(parsed, 'token') ||
|
|
979
|
+
return (requiredStringFlag(parsed, 'token') ||
|
|
902
980
|
envString(io, 'AGORA_TOKEN') ||
|
|
903
|
-
envString(io, 'AGORA_API_TOKEN');
|
|
981
|
+
envString(io, 'AGORA_API_TOKEN'));
|
|
904
982
|
}
|
|
905
983
|
function envString(io, name) {
|
|
906
984
|
const value = io.env?.[name];
|
|
@@ -933,12 +1011,13 @@ function sourceOptions(parsed, io) {
|
|
|
933
1011
|
const storedAuth = getAuthState(loadAgoraState(detectDataDir(parsed, io)));
|
|
934
1012
|
const storedApiUrl = storedAuth?.apiUrl;
|
|
935
1013
|
const apiUrl = explicitApiUrl || envApiUrl || storedApiUrl || '';
|
|
936
|
-
const useApi = !parsed.flags.offline &&
|
|
937
|
-
parsed.flags.
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
1014
|
+
const useApi = !parsed.flags.offline &&
|
|
1015
|
+
Boolean(parsed.flags.api ||
|
|
1016
|
+
parsed.flags.live ||
|
|
1017
|
+
explicitApiUrl ||
|
|
1018
|
+
envApiUrl ||
|
|
1019
|
+
storedApiUrl ||
|
|
1020
|
+
io.env?.AGORA_USE_API === 'true');
|
|
942
1021
|
return {
|
|
943
1022
|
useApi,
|
|
944
1023
|
apiUrl,
|
|
@@ -950,10 +1029,16 @@ function sourceOptions(parsed, io) {
|
|
|
950
1029
|
function writeSourceOptions(parsed, io) {
|
|
951
1030
|
const options = sourceOptions(parsed, io);
|
|
952
1031
|
if (!options.apiUrl) {
|
|
953
|
-
return {
|
|
1032
|
+
return {
|
|
1033
|
+
ok: false,
|
|
1034
|
+
error: 'This command requires --api-url, AGORA_API_URL, or an auth login API URL'
|
|
1035
|
+
};
|
|
954
1036
|
}
|
|
955
1037
|
if (!options.token) {
|
|
956
|
-
return {
|
|
1038
|
+
return {
|
|
1039
|
+
ok: false,
|
|
1040
|
+
error: 'This command requires --token, AGORA_TOKEN, AGORA_API_TOKEN, or agora auth login'
|
|
1041
|
+
};
|
|
957
1042
|
}
|
|
958
1043
|
return {
|
|
959
1044
|
ok: true,
|
|
@@ -966,7 +1051,10 @@ function writeSourceOptions(parsed, io) {
|
|
|
966
1051
|
function readSourceOptions(parsed, io) {
|
|
967
1052
|
const options = sourceOptions(parsed, io);
|
|
968
1053
|
if (!options.apiUrl) {
|
|
969
|
-
return {
|
|
1054
|
+
return {
|
|
1055
|
+
ok: false,
|
|
1056
|
+
error: 'This command requires --api-url, AGORA_API_URL, or an auth login API URL'
|
|
1057
|
+
};
|
|
970
1058
|
}
|
|
971
1059
|
return { ok: true, options: { ...options, useApi: true } };
|
|
972
1060
|
}
|
|
@@ -974,24 +1062,35 @@ function tagsFlag(parsed) {
|
|
|
974
1062
|
const value = stringFlag(parsed, 'tags');
|
|
975
1063
|
if (!value)
|
|
976
1064
|
return [];
|
|
977
|
-
return value
|
|
1065
|
+
return value
|
|
1066
|
+
.split(',')
|
|
1067
|
+
.map((tag) => tag.trim())
|
|
1068
|
+
.filter(Boolean);
|
|
978
1069
|
}
|
|
979
|
-
function promptInput(parsed) {
|
|
1070
|
+
function promptInput(parsed, io) {
|
|
980
1071
|
const prompt = stringFlag(parsed, 'prompt');
|
|
981
1072
|
if (prompt)
|
|
982
1073
|
return prompt;
|
|
983
1074
|
const promptFile = stringFlag(parsed, 'promptFile');
|
|
984
1075
|
if (!promptFile)
|
|
985
1076
|
return undefined;
|
|
1077
|
+
if (!existsSync(promptFile)) {
|
|
1078
|
+
usageError(io, `prompt-file not found: ${promptFile}`);
|
|
1079
|
+
return undefined;
|
|
1080
|
+
}
|
|
986
1081
|
return readFileSync(promptFile, 'utf8');
|
|
987
1082
|
}
|
|
988
|
-
function contentInput(parsed) {
|
|
1083
|
+
function contentInput(parsed, io) {
|
|
989
1084
|
const content = requiredStringFlag(parsed, 'content');
|
|
990
1085
|
if (content)
|
|
991
1086
|
return content;
|
|
992
1087
|
const contentFile = stringFlag(parsed, 'contentFile');
|
|
993
1088
|
if (!contentFile)
|
|
994
1089
|
return undefined;
|
|
1090
|
+
if (!existsSync(contentFile)) {
|
|
1091
|
+
usageError(io, `content-file not found: ${contentFile}`);
|
|
1092
|
+
return undefined;
|
|
1093
|
+
}
|
|
995
1094
|
return readFileSync(contentFile, 'utf8').trim();
|
|
996
1095
|
}
|
|
997
1096
|
function itemTypeFlag(parsed, itemId) {
|
|
@@ -1002,10 +1101,16 @@ function itemTypeFlag(parsed, itemId) {
|
|
|
1002
1101
|
}
|
|
1003
1102
|
function discussionCategoryFlag(parsed) {
|
|
1004
1103
|
const category = stringFlag(parsed, 'category', 'c') || 'discussion';
|
|
1005
|
-
if (category === 'question' ||
|
|
1104
|
+
if (category === 'question' ||
|
|
1105
|
+
category === 'idea' ||
|
|
1106
|
+
category === 'showcase' ||
|
|
1107
|
+
category === 'discussion') {
|
|
1006
1108
|
return { ok: true, value: category };
|
|
1007
1109
|
}
|
|
1008
|
-
return {
|
|
1110
|
+
return {
|
|
1111
|
+
ok: false,
|
|
1112
|
+
error: 'discussion category must be question, idea, showcase, or discussion'
|
|
1113
|
+
};
|
|
1009
1114
|
}
|
|
1010
1115
|
function tutorialLevelFlag(parsed) {
|
|
1011
1116
|
const level = stringFlag(parsed, 'level') || 'all';
|