@framers/agentos-extensions-registry 0.1.0 → 0.1.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.
@@ -0,0 +1,171 @@
1
+ /**
2
+ * @fileoverview Manifest builder — creates pre-configured ExtensionManifest
3
+ * instances from the curated extension catalog.
4
+ *
5
+ * This is the primary API of the registry package. Instead of manually wiring
6
+ * each extension pack in the backend, consumers call `createCuratedManifest()`
7
+ * with their desired configuration.
8
+ *
9
+ * @module @framers/agentos-extensions-registry/manifest-builder
10
+ */
11
+ import { CHANNEL_CATALOG, getChannelEntries } from './channel-registry.js';
12
+ import { PROVIDER_CATALOG } from './provider-registry.js';
13
+ import { TOOL_CATALOG } from './tool-registry.js';
14
+ function isPackageInstalled(packageName) {
15
+ if (!packageName)
16
+ return false;
17
+ // Use import.meta.resolve (sync in Node 20.6+) for ESM-native resolution.
18
+ // This correctly handles packages that only export "import" conditions.
19
+ try {
20
+ import.meta.resolve(packageName);
21
+ return true;
22
+ }
23
+ catch {
24
+ // Not resolvable from this module's context (e.g. pnpm strict isolation).
25
+ // Defer to dynamic import at load time — tryImport() will catch actual failures.
26
+ return true;
27
+ }
28
+ }
29
+ /**
30
+ * Attempt to dynamically import a package. Returns the module if available,
31
+ * or `null` if the package is not installed.
32
+ */
33
+ async function tryImport(packageName) {
34
+ try {
35
+ return await import(packageName);
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ }
41
+ /**
42
+ * Check which extensions from the catalog are actually installed
43
+ * and mark them as available.
44
+ */
45
+ export async function getAvailableExtensions() {
46
+ const allEntries = [...TOOL_CATALOG, ...CHANNEL_CATALOG, ...PROVIDER_CATALOG];
47
+ // Prefer pure resolution checks. Dynamic-importing every optional dependency
48
+ // can be very slow in bundler/test runtimes that shim `import.meta`.
49
+ return allEntries.map((entry) => ({ ...entry, available: isPackageInstalled(entry.packageName) }));
50
+ }
51
+ /**
52
+ * Get available channel extensions.
53
+ */
54
+ export async function getAvailableChannels() {
55
+ return CHANNEL_CATALOG.map((entry) => ({ ...entry, available: isPackageInstalled(entry.packageName) }));
56
+ }
57
+ /**
58
+ * Creates a pre-configured `ExtensionManifest` with all available curated
59
+ * extensions. Missing optional dependencies are silently skipped.
60
+ *
61
+ * @example
62
+ * ```typescript
63
+ * import { createCuratedManifest } from '@framers/agentos-extensions-registry';
64
+ *
65
+ * // Enable all available extensions
66
+ * const manifest = await createCuratedManifest();
67
+ *
68
+ * // Selective: only Telegram + Discord channels, all tools
69
+ * const manifest = await createCuratedManifest({
70
+ * channels: ['telegram', 'discord'],
71
+ * tools: 'all',
72
+ * secrets: {
73
+ * 'telegram.botToken': process.env.TELEGRAM_BOT_TOKEN!,
74
+ * 'discord.botToken': process.env.DISCORD_BOT_TOKEN!,
75
+ * },
76
+ * });
77
+ *
78
+ * // Pass to AgentOS config
79
+ * const agentOS = new AgentOS({ extensionManifest: manifest });
80
+ * ```
81
+ */
82
+ export async function createCuratedManifest(options) {
83
+ const basePriority = options?.basePriority ?? 0;
84
+ const secrets = options?.secrets;
85
+ const logger = options?.logger ?? console;
86
+ const packs = [];
87
+ // Helper to load and push a catalog entry
88
+ const loadEntry = async (entry) => {
89
+ const override = options?.overrides?.[entry.name];
90
+ if (override?.enabled === false)
91
+ return;
92
+ const mod = await tryImport(entry.packageName);
93
+ if (!mod)
94
+ return;
95
+ const factory = mod.createExtensionPack ?? mod.default?.createExtensionPack ?? mod.default;
96
+ if (typeof factory !== 'function')
97
+ return;
98
+ const effectivePriority = override?.priority ?? basePriority + entry.defaultPriority;
99
+ const effectiveOptions = {
100
+ ...override?.options,
101
+ secrets,
102
+ // Most curated packs accept `options.priority` and map it onto descriptor priorities.
103
+ priority: override?.options?.priority ?? effectivePriority,
104
+ };
105
+ packs.push({
106
+ factory: () => factory({
107
+ options: effectiveOptions,
108
+ getSecret: (secretId) => secrets?.[secretId],
109
+ logger,
110
+ }),
111
+ // Priority applied to descriptors unless they override it individually.
112
+ priority: effectivePriority,
113
+ enabled: true,
114
+ identifier: `registry:${entry.name}`,
115
+ // Populate manifest entry options so AgentOS can evaluate `requiredSecrets` gating.
116
+ options: effectiveOptions,
117
+ });
118
+ };
119
+ // Split TOOL_CATALOG by category
120
+ const toolOnlyEntries = TOOL_CATALOG.filter((t) => t.category === 'tool' || t.category === 'integration');
121
+ const voiceEntries = TOOL_CATALOG.filter((t) => t.category === 'voice');
122
+ const productivityEntries = TOOL_CATALOG.filter((t) => t.category === 'productivity');
123
+ // ── Tool Extensions ──
124
+ const toolFilter = options?.tools ?? 'all';
125
+ const filteredTools = toolFilter === 'none'
126
+ ? []
127
+ : toolFilter === 'all'
128
+ ? toolOnlyEntries
129
+ : toolOnlyEntries.filter((t) => toolFilter.includes(t.name));
130
+ for (const entry of filteredTools) {
131
+ await loadEntry(entry);
132
+ }
133
+ // ── Voice Provider Extensions ──
134
+ const voiceFilter = options?.voice ?? 'all';
135
+ const filteredVoice = voiceFilter === 'none'
136
+ ? []
137
+ : voiceFilter === 'all'
138
+ ? voiceEntries
139
+ : voiceEntries.filter((t) => voiceFilter.includes(t.name));
140
+ for (const entry of filteredVoice) {
141
+ await loadEntry(entry);
142
+ }
143
+ // ── Productivity Extensions ──
144
+ const prodFilter = options?.productivity ?? 'all';
145
+ const filteredProd = prodFilter === 'none'
146
+ ? []
147
+ : prodFilter === 'all'
148
+ ? productivityEntries
149
+ : productivityEntries.filter((t) => prodFilter.includes(t.name));
150
+ for (const entry of filteredProd) {
151
+ await loadEntry(entry);
152
+ }
153
+ // ── Channel Extensions ──
154
+ const channelEntries = getChannelEntries(options?.channels);
155
+ for (const entry of channelEntries) {
156
+ await loadEntry(entry);
157
+ }
158
+ // ── Build Overrides ──
159
+ const manifestOverrides = options?.overrides
160
+ ? {
161
+ tools: Object.fromEntries(Object.entries(options.overrides)
162
+ .filter(([, v]) => v.enabled !== undefined || v.priority !== undefined)
163
+ .map(([k, v]) => [k, { enabled: v.enabled, priority: v.priority }])),
164
+ }
165
+ : undefined;
166
+ return {
167
+ packs,
168
+ overrides: manifestOverrides,
169
+ };
170
+ }
171
+ //# sourceMappingURL=manifest-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-builder.js","sourceRoot":"","sources":["../src/manifest-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAsB,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,SAAS,kBAAkB,CAAC,WAAmB;IAC7C,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IAE/B,0EAA0E;IAC1E,wEAAwE;IACxE,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,0EAA0E;QAC1E,iFAAiF;QACjF,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,SAAS,CAAC,WAAmB;IAC1C,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,MAAM,UAAU,GAAoB,CAAC,GAAG,YAAY,EAAE,GAAG,eAAe,EAAE,GAAG,gBAAgB,CAAC,CAAC;IAC/F,6EAA6E;IAC7E,qEAAqE;IACrE,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;AACrG,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1G,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAAyB;IACnE,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,IAAI,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,CAAC;IACjC,MAAM,MAAM,GAA+B,OAAO,EAAE,MAAM,IAAI,OAAO,CAAC;IACtE,MAAM,KAAK,GAAiC,EAAE,CAAC;IAE/C,0CAA0C;IAC1C,MAAM,SAAS,GAAG,KAAK,EAAE,KAAoB,EAAE,EAAE;QAC/C,MAAM,QAAQ,GAAG,OAAO,EAAE,SAAS,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,QAAQ,EAAE,OAAO,KAAK,KAAK;YAAE,OAAO;QAExC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,MAAM,OAAO,GAAG,GAAG,CAAC,mBAAmB,IAAI,GAAG,CAAC,OAAO,EAAE,mBAAmB,IAAI,GAAG,CAAC,OAAO,CAAC;QAC3F,IAAI,OAAO,OAAO,KAAK,UAAU;YAAE,OAAO;QAE1C,MAAM,iBAAiB,GAAG,QAAQ,EAAE,QAAQ,IAAI,YAAY,GAAG,KAAK,CAAC,eAAe,CAAC;QACrF,MAAM,gBAAgB,GAAG;YACvB,GAAG,QAAQ,EAAE,OAAO;YACpB,OAAO;YACP,sFAAsF;YACtF,QAAQ,EAAG,QAAQ,EAAE,OAA+C,EAAE,QAAQ,IAAI,iBAAiB;SACpG,CAAC;QAEF,KAAK,CAAC,IAAI,CAAC;YACT,OAAO,EAAE,GAAG,EAAE,CACZ,OAAO,CAAC;gBACN,OAAO,EAAE,gBAAgB;gBACzB,SAAS,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;gBACpD,MAAM;aACP,CAAC;YACJ,wEAAwE;YACxE,QAAQ,EAAE,iBAAiB;YAC3B,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,YAAY,KAAK,CAAC,IAAI,EAAE;YACpC,oFAAoF;YACpF,OAAO,EAAE,gBAAgB;SAC1B,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,iCAAiC;IACjC,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,CACzC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,aAAa,CAC7D,CAAC;IACF,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;IACxE,MAAM,mBAAmB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,CAAC;IAEtF,wBAAwB;IACxB,MAAM,UAAU,GAAG,OAAO,EAAE,KAAK,IAAI,KAAK,CAAC;IAC3C,MAAM,aAAa,GACjB,UAAU,KAAK,MAAM;QACnB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,UAAU,KAAK,KAAK;YACpB,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAEnE,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,kCAAkC;IAClC,MAAM,WAAW,GAAG,OAAO,EAAE,KAAK,IAAI,KAAK,CAAC;IAC5C,MAAM,aAAa,GACjB,WAAW,KAAK,MAAM;QACpB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,WAAW,KAAK,KAAK;YACrB,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAEjE,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,gCAAgC;IAChC,MAAM,UAAU,GAAG,OAAO,EAAE,YAAY,IAAI,KAAK,CAAC;IAClD,MAAM,YAAY,GAChB,UAAU,KAAK,MAAM;QACnB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,UAAU,KAAK,KAAK;YACpB,CAAC,CAAC,mBAAmB;YACrB,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAEvE,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,2BAA2B;IAC3B,MAAM,cAAc,GAAG,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAE5D,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,wBAAwB;IACxB,MAAM,iBAAiB,GAAG,OAAO,EAAE,SAAS;QAC1C,CAAC,CAAC;YACE,KAAK,EAAE,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;iBAC9B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC;iBACtE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CACtE;SACF;QACH,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO;QACL,KAAK;QACL,SAAS,EAAE,iBAAiB;KAC7B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * @fileoverview Provider registry — metadata catalog for all supported
3
+ * LLM / model provider extensions.
4
+ *
5
+ * Each entry defines the provider's metadata, default models, API base URL,
6
+ * and secret requirements. This catalog enables OpenClaw feature parity by
7
+ * enumerating every supported model provider in one place.
8
+ *
9
+ * @module @framers/agentos-extensions-registry/provider-registry
10
+ */
11
+ import type { ExtensionInfo } from './types.js';
12
+ /**
13
+ * Registry entry for a model provider extension.
14
+ * Extends the base ExtensionInfo with provider-specific fields.
15
+ */
16
+ export interface ProviderRegistryEntry extends ExtensionInfo {
17
+ /** Unique provider identifier (e.g. 'openai', 'anthropic'). */
18
+ providerId: string;
19
+ /** Default model ID used for general-purpose completions. */
20
+ defaultModel: string;
21
+ /** Cheapest / fastest model for lightweight tasks like sentiment analysis. */
22
+ smallModel: string;
23
+ /** Optional default API base URL. Omitted for SDK-based providers or user-specific endpoints. */
24
+ apiBaseUrl?: string;
25
+ /** Whether this provider supports OAuth-based authentication (e.g. consumer subscription tokens). */
26
+ supportsOAuth?: boolean;
27
+ }
28
+ /**
29
+ * Full catalog of model provider extensions.
30
+ * Ordered to match OpenClaw's models-config.providers layout.
31
+ */
32
+ export declare const PROVIDER_CATALOG: ProviderRegistryEntry[];
33
+ /**
34
+ * Get provider entries filtered by provider IDs.
35
+ *
36
+ * @param providerIds - Array of provider IDs to include, `'all'` for every
37
+ * provider, or `'none'` for an empty list. Defaults to `'all'`.
38
+ * @returns Matching provider registry entries.
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * // Get all providers
43
+ * const all = getProviderEntries();
44
+ *
45
+ * // Get specific providers
46
+ * const subset = getProviderEntries(['openai', 'anthropic', 'ollama']);
47
+ *
48
+ * // Disable providers
49
+ * const none = getProviderEntries('none');
50
+ * ```
51
+ */
52
+ export declare function getProviderEntries(providerIds?: string[] | 'all' | 'none'): ProviderRegistryEntry[];
53
+ /**
54
+ * Get a single provider entry by its provider ID.
55
+ *
56
+ * @param providerId - The provider identifier (e.g. 'openai', 'anthropic').
57
+ * @returns The matching entry, or `undefined` if not found.
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * const openai = getProviderEntry('openai');
62
+ * console.log(openai?.defaultModel); // 'gpt-4o'
63
+ * ```
64
+ */
65
+ export declare function getProviderEntry(providerId: string): ProviderRegistryEntry | undefined;
66
+ //# sourceMappingURL=provider-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-registry.d.ts","sourceRoot":"","sources":["../src/provider-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;;GAGG;AACH,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAC1D,+DAA+D;IAC/D,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,YAAY,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;IACnB,iGAAiG;IACjG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qGAAqG;IACrG,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,qBAAqB,EAmVnD,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,GAAG,MAAM,GACtC,qBAAqB,EAAE,CAIzB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,CAEtF"}
@@ -0,0 +1,386 @@
1
+ /**
2
+ * @fileoverview Provider registry — metadata catalog for all supported
3
+ * LLM / model provider extensions.
4
+ *
5
+ * Each entry defines the provider's metadata, default models, API base URL,
6
+ * and secret requirements. This catalog enables OpenClaw feature parity by
7
+ * enumerating every supported model provider in one place.
8
+ *
9
+ * @module @framers/agentos-extensions-registry/provider-registry
10
+ */
11
+ /**
12
+ * Full catalog of model provider extensions.
13
+ * Ordered to match OpenClaw's models-config.providers layout.
14
+ */
15
+ export const PROVIDER_CATALOG = [
16
+ // ── Major Cloud Providers ──
17
+ {
18
+ packageName: '@framers/agentos-ext-provider-openai',
19
+ name: 'provider-openai',
20
+ category: 'integration',
21
+ providerId: 'openai',
22
+ displayName: 'OpenAI',
23
+ description: 'OpenAI API — GPT-4o, GPT-4.1, o-series reasoning models.',
24
+ requiredSecrets: ['openai.apiKey'],
25
+ defaultPriority: 100,
26
+ available: false,
27
+ defaultModel: 'gpt-4o',
28
+ smallModel: 'gpt-4o-mini',
29
+ apiBaseUrl: 'https://api.openai.com/v1',
30
+ supportsOAuth: true,
31
+ },
32
+ {
33
+ packageName: '@framers/agentos-ext-provider-anthropic',
34
+ name: 'provider-anthropic',
35
+ category: 'integration',
36
+ providerId: 'anthropic',
37
+ displayName: 'Anthropic',
38
+ description: 'Anthropic API — Claude Opus 4.6, Sonnet 4.6, Haiku 4.5, and legacy models.',
39
+ requiredSecrets: ['anthropic.apiKey'],
40
+ defaultPriority: 100,
41
+ available: false,
42
+ defaultModel: 'claude-sonnet-4-6-20250514',
43
+ smallModel: 'claude-haiku-4-5-20251001',
44
+ apiBaseUrl: 'https://api.anthropic.com',
45
+ },
46
+ {
47
+ packageName: '@framers/agentos-ext-provider-ollama',
48
+ name: 'provider-ollama',
49
+ category: 'integration',
50
+ providerId: 'ollama',
51
+ displayName: 'Ollama',
52
+ description: 'Ollama local inference — run open-weight models (Llama, Mistral, etc.) on your own hardware.',
53
+ requiredSecrets: [],
54
+ defaultPriority: 90,
55
+ available: false,
56
+ defaultModel: 'llama3',
57
+ smallModel: 'llama3.2:3b',
58
+ apiBaseUrl: 'http://127.0.0.1:11434/v1',
59
+ },
60
+ {
61
+ packageName: '@framers/agentos-ext-provider-bedrock',
62
+ name: 'provider-bedrock',
63
+ category: 'integration',
64
+ providerId: 'bedrock',
65
+ displayName: 'AWS Bedrock',
66
+ description: 'AWS Bedrock — managed access to Anthropic Claude, Meta Llama, and other foundation models via AWS SDK.',
67
+ requiredSecrets: ['aws.accessKeyId', 'aws.secretAccessKey', 'aws.region'],
68
+ defaultPriority: 80,
69
+ available: false,
70
+ defaultModel: 'anthropic.claude-sonnet',
71
+ smallModel: 'anthropic.claude-haiku',
72
+ // No apiBaseUrl — Bedrock uses the AWS SDK with regional endpoints.
73
+ },
74
+ {
75
+ packageName: '@framers/agentos-ext-provider-gemini',
76
+ name: 'provider-gemini',
77
+ category: 'integration',
78
+ providerId: 'gemini',
79
+ displayName: 'Google Gemini',
80
+ description: 'Google Gemini API — Gemini 2.0 Flash, Pro, and multimodal models.',
81
+ requiredSecrets: ['gemini.apiKey'],
82
+ defaultPriority: 90,
83
+ available: false,
84
+ defaultModel: 'gemini-2.0-flash',
85
+ smallModel: 'gemini-2.0-flash-lite',
86
+ apiBaseUrl: 'https://generativelanguage.googleapis.com',
87
+ },
88
+ // ── Platform-Integrated Providers ──
89
+ {
90
+ packageName: '@framers/agentos-ext-provider-github-copilot',
91
+ name: 'provider-github-copilot',
92
+ category: 'integration',
93
+ providerId: 'github-copilot',
94
+ displayName: 'GitHub Copilot',
95
+ description: 'GitHub Copilot Chat API — uses your existing Copilot subscription for model access.',
96
+ requiredSecrets: ['github.copilotToken'],
97
+ defaultPriority: 70,
98
+ available: false,
99
+ defaultModel: 'gpt-4o',
100
+ smallModel: 'gpt-4o-mini',
101
+ apiBaseUrl: 'https://api.githubcopilot.com',
102
+ },
103
+ {
104
+ packageName: '@framers/agentos-ext-provider-cloudflare-ai',
105
+ name: 'provider-cloudflare-ai',
106
+ category: 'integration',
107
+ providerId: 'cloudflare-ai',
108
+ displayName: 'Cloudflare AI Gateway',
109
+ description: 'Cloudflare AI Gateway — proxy and observe requests to any upstream provider with caching and rate limiting.',
110
+ requiredSecrets: ['cloudflare.accountId', 'cloudflare.apiToken'],
111
+ defaultPriority: 60,
112
+ available: false,
113
+ defaultModel: '(configurable)',
114
+ smallModel: '(configurable)',
115
+ // No apiBaseUrl — user-specific Cloudflare gateway URL.
116
+ },
117
+ // ── Asian Market Providers ──
118
+ {
119
+ packageName: '@framers/agentos-ext-provider-minimax',
120
+ name: 'provider-minimax',
121
+ category: 'integration',
122
+ providerId: 'minimax',
123
+ displayName: 'Minimax',
124
+ description: 'Minimax API — MiniMax-M2.1 and VL-01 vision-language models.',
125
+ requiredSecrets: ['minimax.apiKey'],
126
+ defaultPriority: 60,
127
+ available: false,
128
+ defaultModel: 'MiniMax-M2.1',
129
+ smallModel: 'MiniMax-VL-01',
130
+ apiBaseUrl: 'https://api.minimax.chat/v1',
131
+ },
132
+ {
133
+ packageName: '@framers/agentos-ext-provider-qwen',
134
+ name: 'provider-qwen',
135
+ category: 'integration',
136
+ providerId: 'qwen',
137
+ displayName: 'Qwen',
138
+ description: 'Alibaba Qwen API — Qwen-Max, Qwen-Turbo, and Qwen-VL models.',
139
+ requiredSecrets: ['qwen.apiKey'],
140
+ defaultPriority: 60,
141
+ available: false,
142
+ defaultModel: 'qwen-max',
143
+ smallModel: 'qwen-turbo',
144
+ apiBaseUrl: 'https://portal.qwen.ai/v1',
145
+ },
146
+ {
147
+ packageName: '@framers/agentos-ext-provider-moonshot',
148
+ name: 'provider-moonshot',
149
+ category: 'integration',
150
+ providerId: 'moonshot',
151
+ displayName: 'Moonshot',
152
+ description: 'Moonshot AI (Kimi) API — long-context models with strong multilingual support.',
153
+ requiredSecrets: ['moonshot.apiKey'],
154
+ defaultPriority: 60,
155
+ available: false,
156
+ defaultModel: 'kimi-k2.5',
157
+ smallModel: 'kimi-k2-instant',
158
+ apiBaseUrl: 'https://api.moonshot.ai/v1',
159
+ },
160
+ {
161
+ packageName: '@framers/agentos-ext-provider-xiaomi-mimo',
162
+ name: 'provider-xiaomi-mimo',
163
+ category: 'integration',
164
+ providerId: 'xiaomi-mimo',
165
+ displayName: 'Xiaomi Mimo',
166
+ description: 'Xiaomi Mimo API — Mimo-v2-Flash model with Anthropic-compatible endpoint.',
167
+ requiredSecrets: ['xiaomi.apiKey'],
168
+ defaultPriority: 50,
169
+ available: false,
170
+ defaultModel: 'mimo-v2-flash',
171
+ smallModel: 'mimo-v2-flash',
172
+ apiBaseUrl: 'https://api.xiaomimimo.com/anthropic',
173
+ },
174
+ // ── New Providers (OpenClaw Upstream Parity) ──
175
+ {
176
+ packageName: '@framers/agentos-ext-provider-nvidia',
177
+ name: 'provider-nvidia',
178
+ category: 'integration',
179
+ providerId: 'nvidia',
180
+ displayName: 'NVIDIA',
181
+ description: 'NVIDIA API — Nemotron, Llama, and other models via NVIDIA AI Foundation Endpoints.',
182
+ requiredSecrets: ['nvidia.apiKey'],
183
+ defaultPriority: 70,
184
+ available: false,
185
+ defaultModel: 'nvidia/llama-3.1-nemotron-70b-instruct',
186
+ smallModel: 'nvidia/llama-3.1-8b-instruct',
187
+ apiBaseUrl: 'https://integrate.api.nvidia.com/v1',
188
+ },
189
+ {
190
+ packageName: '@framers/agentos-ext-provider-glm',
191
+ name: 'provider-glm',
192
+ category: 'integration',
193
+ providerId: 'glm',
194
+ displayName: 'GLM / Z.AI',
195
+ description: 'Zhipu AI GLM API — GLM-5, GLM-4 series models with strong Chinese language support.',
196
+ requiredSecrets: ['glm.apiKey'],
197
+ defaultPriority: 60,
198
+ available: false,
199
+ defaultModel: 'glm-5',
200
+ smallModel: 'glm-4-flash',
201
+ apiBaseUrl: 'https://open.bigmodel.cn/api/paas/v4',
202
+ },
203
+ {
204
+ packageName: '@framers/agentos-ext-provider-xai',
205
+ name: 'provider-xai',
206
+ category: 'integration',
207
+ providerId: 'xai',
208
+ displayName: 'xAI',
209
+ description: 'xAI Grok API — Grok-3 and Grok-3-mini models.',
210
+ requiredSecrets: ['xai.apiKey'],
211
+ defaultPriority: 70,
212
+ available: false,
213
+ defaultModel: 'grok-3',
214
+ smallModel: 'grok-3-mini',
215
+ apiBaseUrl: 'https://api.x.ai/v1',
216
+ },
217
+ {
218
+ packageName: '@framers/agentos-ext-provider-deepseek',
219
+ name: 'provider-deepseek',
220
+ category: 'integration',
221
+ providerId: 'deepseek',
222
+ displayName: 'DeepSeek',
223
+ description: 'DeepSeek API — DeepSeek-Chat and DeepSeek-Coder models with strong reasoning.',
224
+ requiredSecrets: ['deepseek.apiKey'],
225
+ defaultPriority: 70,
226
+ available: false,
227
+ defaultModel: 'deepseek-chat',
228
+ smallModel: 'deepseek-chat',
229
+ apiBaseUrl: 'https://api.deepseek.com/v1',
230
+ },
231
+ {
232
+ packageName: '@framers/agentos-ext-provider-groq',
233
+ name: 'provider-groq',
234
+ category: 'integration',
235
+ providerId: 'groq',
236
+ displayName: 'Groq',
237
+ description: 'Groq API — ultra-fast inference on LPU hardware for Llama and Mixtral models.',
238
+ requiredSecrets: ['groq.apiKey'],
239
+ defaultPriority: 80,
240
+ available: false,
241
+ defaultModel: 'llama-3.3-70b-versatile',
242
+ smallModel: 'llama-3.1-8b-instant',
243
+ apiBaseUrl: 'https://api.groq.com/openai/v1',
244
+ },
245
+ {
246
+ packageName: '@framers/agentos-ext-provider-together',
247
+ name: 'provider-together',
248
+ category: 'integration',
249
+ providerId: 'together',
250
+ displayName: 'Together AI',
251
+ description: 'Together AI API — serverless inference for open-weight models at scale.',
252
+ requiredSecrets: ['together.apiKey'],
253
+ defaultPriority: 70,
254
+ available: false,
255
+ defaultModel: 'meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo',
256
+ smallModel: 'meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo',
257
+ apiBaseUrl: 'https://api.together.xyz/v1',
258
+ },
259
+ {
260
+ packageName: '@framers/agentos-ext-provider-fireworks',
261
+ name: 'provider-fireworks',
262
+ category: 'integration',
263
+ providerId: 'fireworks',
264
+ displayName: 'Fireworks AI',
265
+ description: 'Fireworks AI API — fast, cost-effective inference with function calling support.',
266
+ requiredSecrets: ['fireworks.apiKey'],
267
+ defaultPriority: 70,
268
+ available: false,
269
+ defaultModel: 'accounts/fireworks/models/llama-v3p1-70b-instruct',
270
+ smallModel: 'accounts/fireworks/models/llama-v3p1-8b-instruct',
271
+ apiBaseUrl: 'https://api.fireworks.ai/inference/v1',
272
+ },
273
+ {
274
+ packageName: '@framers/agentos-ext-provider-perplexity',
275
+ name: 'provider-perplexity',
276
+ category: 'integration',
277
+ providerId: 'perplexity',
278
+ displayName: 'Perplexity',
279
+ description: 'Perplexity AI API — Sonar models with built-in web search capabilities.',
280
+ requiredSecrets: ['perplexity.apiKey'],
281
+ defaultPriority: 70,
282
+ available: false,
283
+ defaultModel: 'llama-3.1-sonar-large-128k-online',
284
+ smallModel: 'llama-3.1-sonar-small-128k-online',
285
+ apiBaseUrl: 'https://api.perplexity.ai',
286
+ },
287
+ {
288
+ packageName: '@framers/agentos-ext-provider-mistral',
289
+ name: 'provider-mistral',
290
+ category: 'integration',
291
+ providerId: 'mistral',
292
+ displayName: 'Mistral AI',
293
+ description: 'Mistral AI API — Mistral Large, Small, and Codestral models.',
294
+ requiredSecrets: ['mistral.apiKey'],
295
+ defaultPriority: 70,
296
+ available: false,
297
+ defaultModel: 'mistral-large-latest',
298
+ smallModel: 'mistral-small-latest',
299
+ apiBaseUrl: 'https://api.mistral.ai/v1',
300
+ },
301
+ {
302
+ packageName: '@framers/agentos-ext-provider-cohere',
303
+ name: 'provider-cohere',
304
+ category: 'integration',
305
+ providerId: 'cohere',
306
+ displayName: 'Cohere',
307
+ description: 'Cohere API — Command-R series models with strong RAG and tool-use capabilities.',
308
+ requiredSecrets: ['cohere.apiKey'],
309
+ defaultPriority: 60,
310
+ available: false,
311
+ defaultModel: 'command-r-plus',
312
+ smallModel: 'command-r',
313
+ apiBaseUrl: 'https://api.cohere.com/v1',
314
+ },
315
+ // ── Aggregator / Router Providers ──
316
+ {
317
+ packageName: '@framers/agentos-ext-provider-venice',
318
+ name: 'provider-venice',
319
+ category: 'integration',
320
+ providerId: 'venice',
321
+ displayName: 'Venice',
322
+ description: 'Venice AI — privacy-focused inference with no data retention, supports open-weight models.',
323
+ requiredSecrets: ['venice.apiKey'],
324
+ defaultPriority: 50,
325
+ available: false,
326
+ defaultModel: 'venice-default',
327
+ smallModel: 'venice-fast',
328
+ apiBaseUrl: 'https://api.venice.ai/v1',
329
+ },
330
+ {
331
+ packageName: '@framers/agentos-ext-provider-openrouter',
332
+ name: 'provider-openrouter',
333
+ category: 'integration',
334
+ providerId: 'openrouter',
335
+ displayName: 'OpenRouter',
336
+ description: 'OpenRouter — unified API gateway to 200+ models from multiple providers with automatic fallback.',
337
+ requiredSecrets: ['openrouter.apiKey'],
338
+ defaultPriority: 80,
339
+ available: false,
340
+ defaultModel: 'auto',
341
+ smallModel: 'auto',
342
+ apiBaseUrl: 'https://openrouter.ai/api/v1',
343
+ },
344
+ ];
345
+ /**
346
+ * Get provider entries filtered by provider IDs.
347
+ *
348
+ * @param providerIds - Array of provider IDs to include, `'all'` for every
349
+ * provider, or `'none'` for an empty list. Defaults to `'all'`.
350
+ * @returns Matching provider registry entries.
351
+ *
352
+ * @example
353
+ * ```typescript
354
+ * // Get all providers
355
+ * const all = getProviderEntries();
356
+ *
357
+ * // Get specific providers
358
+ * const subset = getProviderEntries(['openai', 'anthropic', 'ollama']);
359
+ *
360
+ * // Disable providers
361
+ * const none = getProviderEntries('none');
362
+ * ```
363
+ */
364
+ export function getProviderEntries(providerIds) {
365
+ if (providerIds === 'none')
366
+ return [];
367
+ if (!providerIds || providerIds === 'all')
368
+ return [...PROVIDER_CATALOG];
369
+ return PROVIDER_CATALOG.filter((entry) => providerIds.includes(entry.providerId));
370
+ }
371
+ /**
372
+ * Get a single provider entry by its provider ID.
373
+ *
374
+ * @param providerId - The provider identifier (e.g. 'openai', 'anthropic').
375
+ * @returns The matching entry, or `undefined` if not found.
376
+ *
377
+ * @example
378
+ * ```typescript
379
+ * const openai = getProviderEntry('openai');
380
+ * console.log(openai?.defaultModel); // 'gpt-4o'
381
+ * ```
382
+ */
383
+ export function getProviderEntry(providerId) {
384
+ return PROVIDER_CATALOG.find((entry) => entry.providerId === providerId);
385
+ }
386
+ //# sourceMappingURL=provider-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-registry.js","sourceRoot":"","sources":["../src/provider-registry.ts"],"names":[],"mappings":"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"}