opencode-agora 0.2.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.
Files changed (59) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +309 -0
  3. package/dist/api.d.ts +69 -0
  4. package/dist/api.d.ts.map +1 -0
  5. package/dist/api.js +109 -0
  6. package/dist/api.js.map +1 -0
  7. package/dist/cli/app.d.ts +22 -0
  8. package/dist/cli/app.d.ts.map +1 -0
  9. package/dist/cli/app.js +1111 -0
  10. package/dist/cli/app.js.map +1 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +10 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/config-files.d.ts +27 -0
  16. package/dist/config-files.d.ts.map +1 -0
  17. package/dist/config-files.js +78 -0
  18. package/dist/config-files.js.map +1 -0
  19. package/dist/config.d.ts +24 -0
  20. package/dist/config.d.ts.map +1 -0
  21. package/dist/config.js +73 -0
  22. package/dist/config.js.map +1 -0
  23. package/dist/data.d.ts +8 -0
  24. package/dist/data.d.ts.map +1 -0
  25. package/dist/data.js +1123 -0
  26. package/dist/data.js.map +1 -0
  27. package/dist/format.d.ts +40 -0
  28. package/dist/format.d.ts.map +1 -0
  29. package/dist/format.js +127 -0
  30. package/dist/format.js.map +1 -0
  31. package/dist/index.d.ts +4 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +430 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/init.d.ts +22 -0
  36. package/dist/init.d.ts.map +1 -0
  37. package/dist/init.js +199 -0
  38. package/dist/init.js.map +1 -0
  39. package/dist/live.d.ts +100 -0
  40. package/dist/live.d.ts.map +1 -0
  41. package/dist/live.js +443 -0
  42. package/dist/live.js.map +1 -0
  43. package/dist/logger.d.ts +20 -0
  44. package/dist/logger.d.ts.map +1 -0
  45. package/dist/logger.js +59 -0
  46. package/dist/logger.js.map +1 -0
  47. package/dist/marketplace.d.ts +51 -0
  48. package/dist/marketplace.d.ts.map +1 -0
  49. package/dist/marketplace.js +219 -0
  50. package/dist/marketplace.js.map +1 -0
  51. package/dist/state.d.ts +46 -0
  52. package/dist/state.d.ts.map +1 -0
  53. package/dist/state.js +169 -0
  54. package/dist/state.js.map +1 -0
  55. package/dist/types.d.ts +70 -0
  56. package/dist/types.d.ts.map +1 -0
  57. package/dist/types.js +2 -0
  58. package/dist/types.js.map +1 -0
  59. package/package.json +57 -0
@@ -0,0 +1,219 @@
1
+ import { samplePackages, sampleWorkflows, sampleDiscussions, sampleTutorials, trendingTags } from './data.js';
2
+ const CONFIG_SCHEMA = 'https://opencode.ai/config.json';
3
+ export function getMarketplaceItems() {
4
+ return [
5
+ ...samplePackages.map((pkg) => ({ ...pkg, kind: 'package' })),
6
+ ...sampleWorkflows.map((workflow) => ({
7
+ ...workflow,
8
+ kind: 'workflow',
9
+ category: 'workflow',
10
+ installs: workflow.forks
11
+ }))
12
+ ];
13
+ }
14
+ export function searchMarketplaceItems(options = {}) {
15
+ const query = normalize(options.query || '');
16
+ const category = normalizeCategory(options.category || 'all');
17
+ const limit = normalizeLimit(options.limit);
18
+ const results = getMarketplaceItems()
19
+ .filter((item) => matchesCategory(item, category))
20
+ .filter((item) => matchesQuery(item, query))
21
+ .sort(sortByRelevance(query));
22
+ return limit ? results.slice(0, limit) : results;
23
+ }
24
+ export function findMarketplaceItem(id, options = {}) {
25
+ const target = normalize(id);
26
+ const type = normalize(options.type || '');
27
+ const items = getMarketplaceItems().filter((item) => {
28
+ if (type === 'package')
29
+ return item.kind === 'package';
30
+ if (type === 'workflow')
31
+ return item.kind === 'workflow';
32
+ return true;
33
+ });
34
+ return (items.find((item) => normalize(item.id) === target) ||
35
+ items.find((item) => normalize(item.name) === target) ||
36
+ items.find((item) => normalize(item.id).includes(target)) ||
37
+ items.find((item) => normalize(item.name).includes(target)) ||
38
+ null);
39
+ }
40
+ export function getTrendingItems(options = {}) {
41
+ const category = normalizeCategory(options.category || 'all');
42
+ const limit = normalizeLimit(options.limit) || 5;
43
+ return getMarketplaceItems()
44
+ .filter((item) => matchesCategory(item, category))
45
+ .sort((a, b) => b.stars - a.stars)
46
+ .slice(0, limit);
47
+ }
48
+ export function getDiscussions(category = 'all', query = '') {
49
+ const normalizedCategory = normalize(category);
50
+ const normalizedQuery = normalize(query);
51
+ return sampleDiscussions
52
+ .filter((discussion) => normalizedCategory === 'all' || discussion.category === normalizedCategory)
53
+ .filter((discussion) => {
54
+ if (!normalizedQuery)
55
+ return true;
56
+ return normalize(`${discussion.title} ${discussion.content} ${discussion.author}`).includes(normalizedQuery);
57
+ })
58
+ .sort((a, b) => b.stars - a.stars);
59
+ }
60
+ export function getTutorials(options = {}) {
61
+ const query = normalize(options.query || '');
62
+ const level = normalizeTutorialLevel(options.level || 'all');
63
+ const limit = normalizeLimit(options.limit);
64
+ const tutorials = sampleTutorials
65
+ .filter((tutorial) => level === 'all' || tutorial.level === level)
66
+ .filter((tutorial) => matchesTutorialQuery(tutorial, query))
67
+ .sort((a, b) => a.title.localeCompare(b.title));
68
+ return limit ? tutorials.slice(0, limit) : tutorials;
69
+ }
70
+ export function findTutorial(id) {
71
+ const target = normalize(id);
72
+ return (sampleTutorials.find((tutorial) => normalize(tutorial.id) === target) ||
73
+ sampleTutorials.find((tutorial) => normalize(tutorial.title) === target) ||
74
+ sampleTutorials.find((tutorial) => normalize(tutorial.id).includes(target)) ||
75
+ sampleTutorials.find((tutorial) => normalize(tutorial.title).includes(target)) ||
76
+ null);
77
+ }
78
+ export function getTrendingTags(limit = 8) {
79
+ return trendingTags.slice(0, limit);
80
+ }
81
+ export function createInstallPlan(item, existingConfig = {}) {
82
+ const installKind = getInstallKind(item);
83
+ if (installKind === 'unsupported') {
84
+ return {
85
+ item,
86
+ installable: false,
87
+ reason: `${item.name} does not expose an install target yet`,
88
+ config: normalizeConfig(existingConfig),
89
+ commands: [],
90
+ notes: ['This item can be browsed, but Agora cannot install it automatically yet.']
91
+ };
92
+ }
93
+ const config = buildOpenCodeConfig([item], existingConfig);
94
+ const commands = installKind === 'mcp' && item.kind === 'package' && item.npmPackage
95
+ ? [`npm install -g ${item.npmPackage}`]
96
+ : [];
97
+ const notes = installKind === 'workflow'
98
+ ? [`Workflow will be registered as plugin ${workflowPluginName(item)}.`]
99
+ : ['MCP server will be added to mcpServers.'];
100
+ return {
101
+ item,
102
+ installable: true,
103
+ config,
104
+ commands,
105
+ notes
106
+ };
107
+ }
108
+ export function buildOpenCodeConfig(items, existingConfig = {}) {
109
+ const normalized = normalizeConfig(existingConfig);
110
+ const mcpServers = { ...(normalized.mcpServers || {}) };
111
+ const plugins = new Set(normalized.plugins || []);
112
+ for (const item of items) {
113
+ if (item.kind === 'package' && item.npmPackage) {
114
+ mcpServers[item.id] = {
115
+ command: 'npx',
116
+ args: [item.npmPackage],
117
+ env: {}
118
+ };
119
+ }
120
+ if (item.kind === 'workflow') {
121
+ plugins.add(workflowPluginName(item));
122
+ }
123
+ }
124
+ return {
125
+ $schema: normalized.$schema || CONFIG_SCHEMA,
126
+ mcpServers,
127
+ plugins: Array.from(plugins)
128
+ };
129
+ }
130
+ export function getInstallKind(item) {
131
+ if (item.kind === 'package' && item.npmPackage)
132
+ return 'mcp';
133
+ if (item.kind === 'workflow')
134
+ return 'workflow';
135
+ return 'unsupported';
136
+ }
137
+ export function workflowPluginName(workflow) {
138
+ return workflow.id.replace(/^wf-/, 'skill-');
139
+ }
140
+ export function normalizeCategory(category) {
141
+ const normalized = normalize(category);
142
+ if (normalized === 'packages')
143
+ return 'package';
144
+ if (normalized === 'workflows')
145
+ return 'workflow';
146
+ if (['all', 'package', 'mcp', 'prompt', 'workflow', 'skill'].includes(normalized)) {
147
+ return normalized;
148
+ }
149
+ return 'all';
150
+ }
151
+ export function normalizeTutorialLevel(level) {
152
+ const normalized = normalize(level);
153
+ if (normalized === 'beginner' || normalized === 'intermediate' || normalized === 'advanced') {
154
+ return normalized;
155
+ }
156
+ return 'all';
157
+ }
158
+ function matchesCategory(item, category) {
159
+ if (category === 'all')
160
+ return true;
161
+ if (category === 'package')
162
+ return item.kind === 'package';
163
+ if (category === 'workflow')
164
+ return item.kind === 'workflow' || item.category === 'workflow';
165
+ return item.category === category;
166
+ }
167
+ function matchesQuery(item, query) {
168
+ if (!query)
169
+ return true;
170
+ const searchable = [
171
+ item.id,
172
+ item.name,
173
+ item.description,
174
+ item.author,
175
+ item.category,
176
+ ...item.tags
177
+ ].join(' ');
178
+ return normalize(searchable).includes(query);
179
+ }
180
+ function matchesTutorialQuery(tutorial, query) {
181
+ if (!query)
182
+ return true;
183
+ const searchable = [
184
+ tutorial.id,
185
+ tutorial.title,
186
+ tutorial.description,
187
+ tutorial.level,
188
+ tutorial.duration,
189
+ ...tutorial.steps.flatMap((step) => [step.title, step.content, step.code || ''])
190
+ ].join(' ');
191
+ return normalize(searchable).includes(query);
192
+ }
193
+ function sortByRelevance(query) {
194
+ return (a, b) => {
195
+ if (!query)
196
+ return b.stars - a.stars;
197
+ const aName = normalize(a.name).includes(query) ? 1 : 0;
198
+ const bName = normalize(b.name).includes(query) ? 1 : 0;
199
+ if (aName !== bName)
200
+ return bName - aName;
201
+ return b.stars - a.stars;
202
+ };
203
+ }
204
+ function normalizeConfig(config) {
205
+ return {
206
+ $schema: config.$schema || CONFIG_SCHEMA,
207
+ mcpServers: config.mcpServers || {},
208
+ plugins: config.plugins || []
209
+ };
210
+ }
211
+ function normalize(value) {
212
+ return value.trim().toLowerCase();
213
+ }
214
+ function normalizeLimit(limit) {
215
+ if (!limit || !Number.isFinite(limit) || limit < 1)
216
+ return undefined;
217
+ return Math.floor(limit);
218
+ }
219
+ //# sourceMappingURL=marketplace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../src/marketplace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { MarketplaceItem } from './marketplace.js';
2
+ export interface StatePathOptions {
3
+ explicitDir?: string;
4
+ cwd?: string;
5
+ home?: string;
6
+ env?: Record<string, string | undefined>;
7
+ }
8
+ export interface SavedItem {
9
+ id: string;
10
+ savedAt: string;
11
+ item?: MarketplaceItem;
12
+ }
13
+ export interface AuthState {
14
+ token: string;
15
+ apiUrl?: string;
16
+ savedAt: string;
17
+ }
18
+ export interface AgoraState {
19
+ version: 1;
20
+ savedItems: SavedItem[];
21
+ auth?: AuthState;
22
+ }
23
+ export interface ResolvedSavedItem {
24
+ saved: SavedItem;
25
+ item: MarketplaceItem | null;
26
+ }
27
+ export declare function detectAgoraDataDir(options?: StatePathOptions): string;
28
+ export declare function getAgoraStatePath(dataDir: string): string;
29
+ export declare function loadAgoraState(dataDir: string): AgoraState;
30
+ export declare function writeAgoraState(dataDir: string, state: AgoraState): void;
31
+ export declare function saveItemToState(state: AgoraState, item: MarketplaceItem, now?: Date): {
32
+ state: AgoraState;
33
+ added: boolean;
34
+ };
35
+ export declare function removeItemFromState(state: AgoraState, id: string): {
36
+ state: AgoraState;
37
+ removed: boolean;
38
+ };
39
+ export declare function setAuthState(state: AgoraState, auth: {
40
+ token: string;
41
+ apiUrl?: string;
42
+ }, now?: Date): AgoraState;
43
+ export declare function clearAuthState(state: AgoraState): AgoraState;
44
+ export declare function getAuthState(state: AgoraState): AuthState | undefined;
45
+ export declare function resolveSavedItems(state: AgoraState): ResolvedSavedItem[];
46
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGxD,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,eAAe,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,CAAC,CAAC;IACX,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,eAAe,GAAG,IAAI,CAAC;CAC9B;AAID,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,gBAAqB,GAAG,MAAM,CAezE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAa1D;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAaxE;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,eAAe,EACrB,GAAG,OAAa,GACf;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAmBvC;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,UAAU,EACjB,EAAE,EAAE,MAAM,GACT;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAWzC;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EACxC,GAAG,OAAa,GACf,UAAU,CASZ;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAO5D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,CAErE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,iBAAiB,EAAE,CAKxE"}
package/dist/state.js ADDED
@@ -0,0 +1,169 @@
1
+ import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { isAbsolute, join, resolve } from 'node:path';
4
+ import { findMarketplaceItem } from './marketplace.js';
5
+ const STATE_FILE = 'state.json';
6
+ export function detectAgoraDataDir(options = {}) {
7
+ const cwd = options.cwd || process.cwd();
8
+ const home = options.home || homedir();
9
+ const env = options.env || process.env;
10
+ const configured = options.explicitDir || env.AGORA_HOME;
11
+ if (configured) {
12
+ return resolvePath(configured, cwd, home);
13
+ }
14
+ const xdgConfigHome = env.XDG_CONFIG_HOME
15
+ ? resolvePath(env.XDG_CONFIG_HOME, cwd, home)
16
+ : join(home, '.config');
17
+ return join(xdgConfigHome, 'agora');
18
+ }
19
+ export function getAgoraStatePath(dataDir) {
20
+ return join(dataDir, STATE_FILE);
21
+ }
22
+ export function loadAgoraState(dataDir) {
23
+ const statePath = getAgoraStatePath(dataDir);
24
+ if (!existsSync(statePath)) {
25
+ return createEmptyState();
26
+ }
27
+ try {
28
+ const parsed = JSON.parse(readFileSync(statePath, 'utf8'));
29
+ return normalizeState(parsed);
30
+ }
31
+ catch {
32
+ return createEmptyState();
33
+ }
34
+ }
35
+ export function writeAgoraState(dataDir, state) {
36
+ mkdirSync(dataDir, { recursive: true });
37
+ const statePath = getAgoraStatePath(dataDir);
38
+ writeFileSync(statePath, `${JSON.stringify(normalizeState(state), null, 2)}\n`, {
39
+ encoding: 'utf8',
40
+ mode: 0o600
41
+ });
42
+ try {
43
+ chmodSync(statePath, 0o600);
44
+ }
45
+ catch {
46
+ // Best effort: some filesystems do not support POSIX permissions.
47
+ }
48
+ }
49
+ export function saveItemToState(state, item, now = new Date()) {
50
+ if (state.savedItems.some((saved) => saved.id === item.id)) {
51
+ return { state: normalizeState(state), added: false };
52
+ }
53
+ return {
54
+ state: normalizeState({
55
+ ...state,
56
+ savedItems: [
57
+ {
58
+ id: item.id,
59
+ savedAt: now.toISOString(),
60
+ item
61
+ },
62
+ ...state.savedItems
63
+ ]
64
+ }),
65
+ added: true
66
+ };
67
+ }
68
+ export function removeItemFromState(state, id) {
69
+ const normalized = normalizeState(state);
70
+ const nextItems = normalized.savedItems.filter((saved) => saved.id !== id);
71
+ return {
72
+ state: {
73
+ ...normalized,
74
+ savedItems: nextItems
75
+ },
76
+ removed: nextItems.length !== normalized.savedItems.length
77
+ };
78
+ }
79
+ export function setAuthState(state, auth, now = new Date()) {
80
+ return normalizeState({
81
+ ...state,
82
+ auth: {
83
+ token: auth.token.trim(),
84
+ apiUrl: auth.apiUrl?.trim() || undefined,
85
+ savedAt: now.toISOString()
86
+ }
87
+ });
88
+ }
89
+ export function clearAuthState(state) {
90
+ const normalized = normalizeState(state);
91
+ return {
92
+ version: 1,
93
+ savedItems: normalized.savedItems
94
+ };
95
+ }
96
+ export function getAuthState(state) {
97
+ return normalizeState(state).auth;
98
+ }
99
+ export function resolveSavedItems(state) {
100
+ return normalizeState(state).savedItems.map((saved) => ({
101
+ saved,
102
+ item: saved.item || findMarketplaceItem(saved.id)
103
+ }));
104
+ }
105
+ function createEmptyState() {
106
+ return {
107
+ version: 1,
108
+ savedItems: []
109
+ };
110
+ }
111
+ function normalizeState(state) {
112
+ const seen = new Set();
113
+ const savedItems = Array.isArray(state.savedItems)
114
+ ? state.savedItems
115
+ .filter((saved) => {
116
+ return Boolean(saved && typeof saved.id === 'string' && typeof saved.savedAt === 'string');
117
+ })
118
+ .map((saved) => ({
119
+ id: saved.id,
120
+ savedAt: saved.savedAt,
121
+ item: isMarketplaceItem(saved.item) ? saved.item : undefined
122
+ }))
123
+ .filter((saved) => {
124
+ if (seen.has(saved.id))
125
+ return false;
126
+ seen.add(saved.id);
127
+ return true;
128
+ })
129
+ : [];
130
+ return {
131
+ version: 1,
132
+ savedItems,
133
+ auth: normalizeAuthState(state.auth)
134
+ };
135
+ }
136
+ function normalizeAuthState(auth) {
137
+ if (!auth || typeof auth !== 'object')
138
+ return undefined;
139
+ const candidate = auth;
140
+ const token = typeof candidate.token === 'string' ? candidate.token.trim() : '';
141
+ if (!token)
142
+ return undefined;
143
+ const apiUrl = typeof candidate.apiUrl === 'string' && candidate.apiUrl.trim()
144
+ ? candidate.apiUrl.trim()
145
+ : undefined;
146
+ const savedAt = typeof candidate.savedAt === 'string' && candidate.savedAt
147
+ ? candidate.savedAt
148
+ : new Date(0).toISOString();
149
+ return {
150
+ token,
151
+ apiUrl,
152
+ savedAt
153
+ };
154
+ }
155
+ function resolvePath(filePath, cwd, home) {
156
+ const expanded = filePath === '~' || filePath.startsWith('~/')
157
+ ? join(home, filePath.slice(2))
158
+ : filePath;
159
+ return isAbsolute(expanded) ? expanded : resolve(cwd, expanded);
160
+ }
161
+ function isMarketplaceItem(value) {
162
+ if (!value || typeof value !== 'object')
163
+ return false;
164
+ const candidate = value;
165
+ return Boolean(typeof candidate.id === 'string' &&
166
+ typeof candidate.name === 'string' &&
167
+ (candidate.kind === 'package' || candidate.kind === 'workflow'));
168
+ }
169
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ export interface AgoraPlugin {
2
+ }
3
+ export interface Package {
4
+ id: string;
5
+ name: string;
6
+ description: string;
7
+ author: string;
8
+ version: string;
9
+ category: 'mcp' | 'prompt' | 'workflow' | 'skill';
10
+ tags: string[];
11
+ stars: number;
12
+ installs: number;
13
+ repository?: string;
14
+ npmPackage?: string;
15
+ createdAt: string;
16
+ }
17
+ export interface Workflow {
18
+ id: string;
19
+ name: string;
20
+ description: string;
21
+ author: string;
22
+ prompt: string;
23
+ model?: string;
24
+ tags: string[];
25
+ stars: number;
26
+ forks: number;
27
+ createdAt: string;
28
+ }
29
+ export interface Discussion {
30
+ id: string;
31
+ title: string;
32
+ author: string;
33
+ content: string;
34
+ category: 'question' | 'idea' | 'showcase' | 'discussion';
35
+ replies: number;
36
+ stars: number;
37
+ createdAt: string;
38
+ }
39
+ export interface Tutorial {
40
+ id: string;
41
+ title: string;
42
+ description: string;
43
+ level: 'beginner' | 'intermediate' | 'advanced';
44
+ duration: string;
45
+ steps: TutorialStep[];
46
+ }
47
+ export interface TutorialStep {
48
+ title: string;
49
+ content: string;
50
+ code?: string;
51
+ }
52
+ export interface Profile {
53
+ username: string;
54
+ displayName: string;
55
+ bio?: string;
56
+ packages: number;
57
+ workflows: number;
58
+ discussions: number;
59
+ joinedAt: string;
60
+ }
61
+ export interface Review {
62
+ id: string;
63
+ itemId: string;
64
+ itemType: 'package' | 'workflow';
65
+ author: string;
66
+ rating: number;
67
+ content: string;
68
+ createdAt: string;
69
+ }
70
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;CAAG;AAE/B,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,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IAClD,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;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,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,YAAY,CAAC;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,CAAC;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,SAAS,GAAG,UAAU,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "opencode-agora",
3
+ "version": "0.2.2",
4
+ "description": "Agora - The Developer's Terminal Marketplace & Community Hub for OpenCode",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "type": "module",
8
+ "bin": {
9
+ "agora": "./dist/cli.js",
10
+ "opencode-agora": "./dist/cli.js"
11
+ },
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "https://github.com/IrgenSlj/agora.git"
15
+ },
16
+ "homepage": "https://github.com/IrgenSlj/agora",
17
+ "bugs": "https://github.com/IrgenSlj/agora/issues",
18
+ "engines": {
19
+ "bun": ">=1.0.0",
20
+ "node": ">=18.0.0"
21
+ },
22
+ "publishConfig": {
23
+ "access": "public"
24
+ },
25
+ "files": [
26
+ "dist"
27
+ ],
28
+ "scripts": {
29
+ "build": "tsc",
30
+ "dev": "bun run build && cp -r dist/* ~/.config/opencode/plugins/agora/",
31
+ "hub:dev": "bun hub/server.ts",
32
+ "typecheck": "tsc --noEmit",
33
+ "test": "bun test",
34
+ "prepublishOnly": "bun run build",
35
+ "refresh:data": "bun scripts/refresh-data.ts"
36
+ },
37
+ "keywords": [
38
+ "opencode",
39
+ "opencode-plugin",
40
+ "mcp",
41
+ "marketplace",
42
+ "community",
43
+ "developer-tools"
44
+ ],
45
+ "author": "IrgenSlj",
46
+ "license": "MIT",
47
+ "dependencies": {
48
+ "zod": "^3.24.0"
49
+ },
50
+ "devDependencies": {
51
+ "@opencode-ai/plugin": "^1.0.0",
52
+ "@types/bun": "^1.2.0",
53
+ "@types/node": "^22.0.0",
54
+ "typescript": "^5.7.0",
55
+ "bun-types": "^1.2.0"
56
+ }
57
+ }