openpets 1.0.5 → 1.0.6

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 (96) hide show
  1. package/dist/data/api.json +3172 -0
  2. package/dist/src/core/ai-client-base/index.d.ts +47 -0
  3. package/dist/src/core/ai-client-base/index.d.ts.map +1 -0
  4. package/dist/src/core/ai-client-base/index.js +168 -0
  5. package/dist/src/core/ai-client-base/index.js.map +1 -0
  6. package/dist/src/core/browser.d.ts +10 -0
  7. package/dist/src/core/browser.d.ts.map +1 -0
  8. package/{browser.ts → dist/src/core/browser.js} +4 -4
  9. package/dist/src/core/browser.js.map +1 -0
  10. package/dist/src/core/build-pet.d.ts +2 -0
  11. package/dist/src/core/build-pet.d.ts.map +1 -0
  12. package/dist/src/core/build-pet.js +364 -0
  13. package/dist/src/core/build-pet.js.map +1 -0
  14. package/dist/src/core/cli.d.ts +3 -0
  15. package/dist/src/core/cli.d.ts.map +1 -0
  16. package/dist/src/core/cli.js +244 -0
  17. package/dist/src/core/cli.js.map +1 -0
  18. package/dist/src/core/config-manager.d.ts +13 -0
  19. package/dist/src/core/config-manager.d.ts.map +1 -0
  20. package/dist/src/core/config-manager.js +59 -0
  21. package/dist/src/core/config-manager.js.map +1 -0
  22. package/dist/src/core/deploy-pet.d.ts +2 -0
  23. package/dist/src/core/deploy-pet.d.ts.map +1 -0
  24. package/dist/src/core/deploy-pet.js +66 -0
  25. package/dist/src/core/deploy-pet.js.map +1 -0
  26. package/dist/src/core/index.d.ts +11 -0
  27. package/dist/src/core/index.d.ts.map +1 -0
  28. package/dist/src/core/index.js +11 -0
  29. package/dist/src/core/index.js.map +1 -0
  30. package/dist/src/core/local-cache.d.ts +69 -0
  31. package/dist/src/core/local-cache.d.ts.map +1 -0
  32. package/dist/src/core/local-cache.js +212 -0
  33. package/dist/src/core/local-cache.js.map +1 -0
  34. package/dist/src/core/logger.d.ts.map +1 -0
  35. package/{logger.js → dist/src/core/logger.js} +8 -9
  36. package/dist/src/core/logger.js.map +1 -0
  37. package/dist/src/core/mcp-factory.d.ts +12 -0
  38. package/dist/src/core/mcp-factory.d.ts.map +1 -0
  39. package/dist/src/core/mcp-factory.js +143 -0
  40. package/dist/src/core/mcp-factory.js.map +1 -0
  41. package/dist/src/core/mcp-server.d.ts +3 -0
  42. package/dist/src/core/mcp-server.d.ts.map +1 -0
  43. package/dist/src/core/mcp-server.js +55 -0
  44. package/dist/src/core/mcp-server.js.map +1 -0
  45. package/dist/src/core/migrate-plugin.d.ts +15 -0
  46. package/dist/src/core/migrate-plugin.d.ts.map +1 -0
  47. package/dist/src/core/migrate-plugin.js +181 -0
  48. package/dist/src/core/migrate-plugin.js.map +1 -0
  49. package/dist/src/core/pets-registry.d.ts +47 -0
  50. package/dist/src/core/pets-registry.d.ts.map +1 -0
  51. package/dist/src/core/pets-registry.js +109 -0
  52. package/dist/src/core/pets-registry.js.map +1 -0
  53. package/dist/src/core/plugin-factory.d.ts +58 -0
  54. package/dist/src/core/plugin-factory.d.ts.map +1 -0
  55. package/dist/src/core/plugin-factory.js +212 -0
  56. package/dist/src/core/plugin-factory.js.map +1 -0
  57. package/dist/src/core/prompt-utils.d.ts +14 -0
  58. package/dist/src/core/prompt-utils.d.ts.map +1 -0
  59. package/dist/src/core/prompt-utils.js +106 -0
  60. package/dist/src/core/prompt-utils.js.map +1 -0
  61. package/dist/src/core/schema-helpers.d.ts +33 -0
  62. package/dist/src/core/schema-helpers.d.ts.map +1 -0
  63. package/dist/src/core/schema-helpers.js +46 -0
  64. package/dist/src/core/schema-helpers.js.map +1 -0
  65. package/dist/src/core/search-pets.d.ts +29 -0
  66. package/dist/src/core/search-pets.d.ts.map +1 -0
  67. package/dist/src/core/search-pets.js +196 -0
  68. package/dist/src/core/search-pets.js.map +1 -0
  69. package/dist/src/core/types.d.ts +63 -0
  70. package/dist/src/core/types.d.ts.map +1 -0
  71. package/dist/src/core/types.js +2 -0
  72. package/dist/src/core/types.js.map +1 -0
  73. package/dist/src/core/validate-pet.d.ts +40 -0
  74. package/dist/src/core/validate-pet.d.ts.map +1 -0
  75. package/dist/src/core/validate-pet.js +650 -0
  76. package/dist/src/core/validate-pet.js.map +1 -0
  77. package/package.json +8 -21
  78. package/ai-client-base/index.ts +0 -229
  79. package/build-pet.ts +0 -429
  80. package/cli.ts +0 -268
  81. package/config-manager.ts +0 -82
  82. package/deploy-pet.ts +0 -91
  83. package/index.ts +0 -10
  84. package/local-cache.ts +0 -280
  85. package/logger.ts +0 -143
  86. package/mcp-factory.ts +0 -180
  87. package/mcp-server.ts +0 -69
  88. package/migrate-plugin.ts +0 -220
  89. package/pets-registry.ts +0 -160
  90. package/plugin-factory.ts +0 -300
  91. package/prompt-utils.ts +0 -130
  92. package/schema-helpers.ts +0 -59
  93. package/search-pets.ts +0 -267
  94. package/types.ts +0 -68
  95. package/validate-pet.ts +0 -749
  96. /package/{logger.d.ts → dist/src/core/logger.d.ts} +0 -0
package/search-pets.ts DELETED
@@ -1,267 +0,0 @@
1
- import type { Pet } from "./types";
2
-
3
- const REMOTE_API_URL = "https://pets.studio/api.json";
4
-
5
- function isDevMode(): boolean {
6
- if (typeof process !== 'undefined' && process.env) {
7
- return process.env.PETS_DEV_MODE === "true" || process.env.PETS_DEV_MODE === "1";
8
- }
9
- if (typeof window !== 'undefined' && (window as any).PETS_DEV_MODE) {
10
- return true;
11
- }
12
- return false;
13
- }
14
-
15
- export interface SearchResult {
16
- id: string;
17
- name: string;
18
- description: string;
19
- keywords: string[];
20
- matchReason: string;
21
- matchScore: number;
22
- }
23
-
24
- export interface PetApiData {
25
- name: string;
26
- description: string;
27
- keywords?: string[];
28
- title: string;
29
- version?: string;
30
- source_code_url?: string;
31
- tools?: Array<{ name: string; description: string }>;
32
- queries?: string[];
33
- scenarios?: Record<string, string | string[]>;
34
- [key: string]: any;
35
- }
36
-
37
- type SearchIndex = {
38
- id: string;
39
- nameLower: string;
40
- descLower: string;
41
- keywordsLower: string[];
42
- toolsText: string;
43
- queriesText: string;
44
- scenariosText: string;
45
- data: PetApiData;
46
- };
47
-
48
- let searchIndex: SearchIndex[] | null = null;
49
- let apiDataCache: Record<string, PetApiData> | null = null;
50
-
51
- async function fetchApiData(): Promise<Record<string, PetApiData>> {
52
- if (apiDataCache) return apiDataCache;
53
-
54
- if (isDevMode()) {
55
- try {
56
- const localApiData = await import("../../data/api.json");
57
- apiDataCache = localApiData.default as Record<string, PetApiData>;
58
- return apiDataCache;
59
- } catch (error) {
60
- console.warn("Failed to load local api.json, falling back to remote:", error);
61
- }
62
- }
63
-
64
- try {
65
- const response = await fetch(REMOTE_API_URL);
66
- if (!response.ok) {
67
- throw new Error(`Failed to fetch API data: ${response.status} ${response.statusText}`);
68
- }
69
- apiDataCache = await response.json();
70
- return apiDataCache!;
71
- } catch (error) {
72
- console.error("Failed to fetch remote API data:", error);
73
-
74
- if (!isDevMode()) {
75
- try {
76
- const localApiData = await import("../../data/api.json");
77
- console.warn("Using local api.json as fallback");
78
- apiDataCache = localApiData.default as Record<string, PetApiData>;
79
- return apiDataCache;
80
- } catch (fallbackError) {
81
- console.error("Failed to load local api.json as fallback:", fallbackError);
82
- }
83
- }
84
-
85
- throw new Error("Unable to load API data from remote or local sources");
86
- }
87
- }
88
-
89
- async function buildSearchIndex(): Promise<SearchIndex[]> {
90
- if (searchIndex) return searchIndex;
91
-
92
- const apiData = await fetchApiData();
93
-
94
- searchIndex = Object.entries(apiData).map(
95
- ([petId, petData]) => {
96
- const toolsText = petData.tools
97
- ? petData.tools
98
- .map((t) => `${t.name} ${t.description}`)
99
- .join(" ")
100
- .toLowerCase()
101
- : "";
102
-
103
- const queriesText = petData.queries
104
- ? petData.queries.join(" ").toLowerCase()
105
- : "";
106
-
107
- const scenariosText = petData.scenarios
108
- ? Object.values(petData.scenarios).flat().join(" ").toLowerCase()
109
- : "";
110
-
111
- const shortId = petId.replace("openpets/", "");
112
-
113
- return {
114
- id: shortId,
115
- nameLower: petData.name.toLowerCase(),
116
- descLower: petData.description.toLowerCase(),
117
- keywordsLower: petData.keywords?.map((k) => k.toLowerCase()) || [],
118
- toolsText,
119
- queriesText,
120
- scenariosText,
121
- data: petData,
122
- };
123
- }
124
- );
125
-
126
- return searchIndex;
127
- }
128
-
129
- function calculateScore(
130
- searchTerm: string,
131
- index: SearchIndex
132
- ): { score: number; fields: string[] } | null {
133
- const fields: string[] = [];
134
- let maxScore = 0;
135
-
136
- if (index.nameLower.includes(searchTerm)) {
137
- const isExact = index.nameLower === searchTerm;
138
- const startsWithSearch = index.nameLower.startsWith(searchTerm);
139
- fields.push("name");
140
- maxScore = isExact ? 100 : startsWithSearch ? 95 : 85;
141
- }
142
-
143
- if (index.keywordsLower.some((k) => k.includes(searchTerm))) {
144
- fields.push("keywords");
145
- maxScore = Math.max(maxScore, 90);
146
- }
147
-
148
- if (index.descLower.includes(searchTerm)) {
149
- fields.push("description");
150
- maxScore = Math.max(maxScore, 75);
151
- }
152
-
153
- if (index.toolsText && index.toolsText.includes(searchTerm)) {
154
- fields.push("tools");
155
- maxScore = Math.max(maxScore, 70);
156
- }
157
-
158
- if (index.queriesText && index.queriesText.includes(searchTerm)) {
159
- fields.push("queries");
160
- maxScore = Math.max(maxScore, 60);
161
- }
162
-
163
- if (index.scenariosText && index.scenariosText.includes(searchTerm)) {
164
- fields.push("scenarios");
165
- maxScore = Math.max(maxScore, 50);
166
- }
167
-
168
- return fields.length > 0 ? { score: maxScore, fields } : null;
169
- }
170
-
171
- export async function searchPets(query: string): Promise<SearchResult[]> {
172
- if (!query || query.trim().length === 0) {
173
- return [];
174
- }
175
-
176
- const searchTerm = query.toLowerCase().trim();
177
- const searchTerms = searchTerm.split(/\s+/).filter((t) => t.length > 0);
178
- const index = await buildSearchIndex();
179
- const results: SearchResult[] = [];
180
-
181
- for (const item of index) {
182
- let bestMatch: { score: number; fields: string[] } | null = null;
183
-
184
- if (searchTerms.length === 1) {
185
- bestMatch = calculateScore(searchTerm, item);
186
- } else {
187
- const matches = searchTerms
188
- .map((term) => calculateScore(term, item))
189
- .filter(Boolean);
190
-
191
- if (matches.length === searchTerms.length) {
192
- const allFields = new Set<string>();
193
- let totalScore = 0;
194
-
195
- matches.forEach((m) => {
196
- if (m) {
197
- m.fields.forEach((f) => allFields.add(f));
198
- totalScore += m.score;
199
- }
200
- });
201
-
202
- bestMatch = {
203
- score: Math.min(100, Math.floor(totalScore / searchTerms.length)),
204
- fields: Array.from(allFields),
205
- };
206
- } else if (matches.length > 0) {
207
- const allFields = new Set<string>();
208
- let maxScore = 0;
209
-
210
- matches.forEach((m) => {
211
- if (m) {
212
- m.fields.forEach((f) => allFields.add(f));
213
- maxScore = Math.max(maxScore, m.score);
214
- }
215
- });
216
-
217
- bestMatch = {
218
- score: Math.floor(maxScore * 0.7),
219
- fields: Array.from(allFields),
220
- };
221
- }
222
- }
223
-
224
- if (bestMatch) {
225
- results.push({
226
- id: item.id,
227
- name: item.data.name,
228
- description: item.data.description,
229
- keywords: item.data.keywords || [],
230
- matchReason: `Matched in: ${bestMatch.fields.join(", ")}`,
231
- matchScore: bestMatch.score,
232
- });
233
- }
234
- }
235
-
236
- return results.sort((a, b) => b.matchScore - a.matchScore);
237
- }
238
-
239
- export function clearSearchCache(): void {
240
- searchIndex = null;
241
- apiDataCache = null;
242
- }
243
-
244
- export function createPetFromApiData(petId: string, petData: PetApiData): Pet {
245
- const shortId = petId.replace("openpets/", "");
246
- const { tools, ...restData } = petData;
247
- return {
248
- id: shortId,
249
- ...restData,
250
- displayName: petData.title,
251
- version: petData.version || "1.0.0",
252
- source_code_url: petData.source_code_url || `https://github.com/raggle-ai/pets/tree/main/pets/${shortId}`,
253
- queriesCount: petData.queries?.length || 0,
254
- queries: petData.queries || [],
255
- keywords: petData.keywords || [],
256
- tools: tools?.map(t => ({ ...t, schema: {} })),
257
- enabled: false,
258
- opencodeJsonPath: "",
259
- };
260
- }
261
-
262
- export async function getAllPets(): Promise<Pet[]> {
263
- const apiData = await fetchApiData();
264
- return Object.entries(apiData).map(
265
- ([petId, petData]) => createPetFromApiData(petId, petData)
266
- );
267
- }
package/types.ts DELETED
@@ -1,68 +0,0 @@
1
- export interface EnvVariable {
2
- name: string
3
- description: string
4
- provider: string
5
- priority: number
6
- url?: string
7
- setupUrl?: string
8
- default?: string
9
- }
10
-
11
- export interface Provider {
12
- name: string
13
- description: string
14
- priority: number
15
- homepage?: string
16
- envVariables?: EnvVariable[]
17
- }
18
-
19
- export interface EnvVariables {
20
- required?: EnvVariable[]
21
- optional?: EnvVariable[]
22
- note?: string
23
- }
24
-
25
- export interface PetData {
26
- name: string
27
- description: string
28
- keywords: string[]
29
- source_code_url: string
30
- homepage?: string
31
- icon?: string
32
- envVariables?: EnvVariables
33
- queries: string[]
34
- scenarios?: Record<string, string | string[]>
35
- providers?: Provider[]
36
- connected_pets?: string[]
37
- }
38
-
39
- export interface Tool {
40
- name: string
41
- description: string
42
- schema: Record<string, any>
43
- }
44
-
45
- export interface Pet {
46
- id: string
47
- name: string
48
- displayName: string
49
- description: string
50
- keywords: string[]
51
- source_code_url: string
52
- version: string
53
- icon?: string
54
- homepage?: string
55
- envVariables?: EnvVariables
56
- queries: string[]
57
- queriesCount: number
58
- tools?: Tool[]
59
- scenarios?: Record<string, string | string[]>
60
- providers?: Provider[]
61
- connected_pets?: string[]
62
- enabled: boolean
63
- opencodeJsonPath: string
64
- }
65
-
66
- export interface PetRegistry {
67
- [key: string]: PetData
68
- }