openpets 1.0.5 → 1.0.7
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/data/api.json +6658 -0
- package/dist/src/core/ai-client-base/index.d.ts +47 -0
- package/dist/src/core/ai-client-base/index.d.ts.map +1 -0
- package/dist/src/core/ai-client-base/index.js +168 -0
- package/dist/src/core/ai-client-base/index.js.map +1 -0
- package/dist/src/core/browser.d.ts +10 -0
- package/dist/src/core/browser.d.ts.map +1 -0
- package/{browser.ts → dist/src/core/browser.js} +4 -4
- package/dist/src/core/browser.js.map +1 -0
- package/dist/src/core/build-pet.d.ts +2 -0
- package/dist/src/core/build-pet.d.ts.map +1 -0
- package/dist/src/core/build-pet.js +392 -0
- package/dist/src/core/build-pet.js.map +1 -0
- package/dist/src/core/cli.d.ts +3 -0
- package/dist/src/core/cli.d.ts.map +1 -0
- package/dist/src/core/cli.js +244 -0
- package/dist/src/core/cli.js.map +1 -0
- package/dist/src/core/config-manager.d.ts +13 -0
- package/dist/src/core/config-manager.d.ts.map +1 -0
- package/dist/src/core/config-manager.js +59 -0
- package/dist/src/core/config-manager.js.map +1 -0
- package/dist/src/core/deploy-pet.d.ts +2 -0
- package/dist/src/core/deploy-pet.d.ts.map +1 -0
- package/dist/src/core/deploy-pet.js +66 -0
- package/dist/src/core/deploy-pet.js.map +1 -0
- package/dist/src/core/index.d.ts +12 -0
- package/dist/src/core/index.d.ts.map +1 -0
- package/dist/src/core/index.js +12 -0
- package/dist/src/core/index.js.map +1 -0
- package/dist/src/core/local-cache.d.ts +69 -0
- package/dist/src/core/local-cache.d.ts.map +1 -0
- package/dist/src/core/local-cache.js +212 -0
- package/dist/src/core/local-cache.js.map +1 -0
- package/dist/src/core/logger.d.ts.map +1 -0
- package/{logger.js → dist/src/core/logger.js} +8 -9
- package/dist/src/core/logger.js.map +1 -0
- package/dist/src/core/mautrix-bridge.d.ts +93 -0
- package/dist/src/core/mautrix-bridge.d.ts.map +1 -0
- package/dist/src/core/mautrix-bridge.js +1046 -0
- package/dist/src/core/mautrix-bridge.js.map +1 -0
- package/dist/src/core/mcp-factory.d.ts +12 -0
- package/dist/src/core/mcp-factory.d.ts.map +1 -0
- package/dist/src/core/mcp-factory.js +143 -0
- package/dist/src/core/mcp-factory.js.map +1 -0
- package/dist/src/core/mcp-server.d.ts +3 -0
- package/dist/src/core/mcp-server.d.ts.map +1 -0
- package/dist/src/core/mcp-server.js +55 -0
- package/dist/src/core/mcp-server.js.map +1 -0
- package/dist/src/core/migrate-plugin.d.ts +15 -0
- package/dist/src/core/migrate-plugin.d.ts.map +1 -0
- package/dist/src/core/migrate-plugin.js +181 -0
- package/dist/src/core/migrate-plugin.js.map +1 -0
- package/dist/src/core/pets-registry.d.ts +47 -0
- package/dist/src/core/pets-registry.d.ts.map +1 -0
- package/dist/src/core/pets-registry.js +109 -0
- package/dist/src/core/pets-registry.js.map +1 -0
- package/dist/src/core/plugin-factory.d.ts +58 -0
- package/dist/src/core/plugin-factory.d.ts.map +1 -0
- package/dist/src/core/plugin-factory.js +212 -0
- package/dist/src/core/plugin-factory.js.map +1 -0
- package/dist/src/core/prompt-utils.d.ts +14 -0
- package/dist/src/core/prompt-utils.d.ts.map +1 -0
- package/dist/src/core/prompt-utils.js +106 -0
- package/dist/src/core/prompt-utils.js.map +1 -0
- package/dist/src/core/schema-helpers.d.ts +30 -0
- package/dist/src/core/schema-helpers.d.ts.map +1 -0
- package/dist/src/core/schema-helpers.js +46 -0
- package/dist/src/core/schema-helpers.js.map +1 -0
- package/dist/src/core/search-pets.d.ts +29 -0
- package/dist/src/core/search-pets.d.ts.map +1 -0
- package/dist/src/core/search-pets.js +196 -0
- package/dist/src/core/search-pets.js.map +1 -0
- package/dist/src/core/types.d.ts +63 -0
- package/dist/src/core/types.d.ts.map +1 -0
- package/dist/src/core/types.js +2 -0
- package/dist/src/core/types.js.map +1 -0
- package/dist/src/core/validate-pet.d.ts +40 -0
- package/dist/src/core/validate-pet.d.ts.map +1 -0
- package/dist/src/core/validate-pet.js +650 -0
- package/dist/src/core/validate-pet.js.map +1 -0
- package/package.json +15 -28
- package/ai-client-base/index.ts +0 -229
- package/build-pet.ts +0 -429
- package/cli.ts +0 -268
- package/config-manager.ts +0 -82
- package/deploy-pet.ts +0 -91
- package/index.ts +0 -10
- package/local-cache.ts +0 -280
- package/logger.ts +0 -143
- package/mcp-factory.ts +0 -180
- package/mcp-server.ts +0 -69
- package/migrate-plugin.ts +0 -220
- package/pets-registry.ts +0 -160
- package/plugin-factory.ts +0 -300
- package/prompt-utils.ts +0 -130
- package/schema-helpers.ts +0 -59
- package/search-pets.ts +0 -267
- package/types.ts +0 -68
- package/validate-pet.ts +0 -749
- /package/{logger.d.ts → dist/src/core/logger.d.ts} +0 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { readdirSync, existsSync, readFileSync } from "fs";
|
|
2
|
+
import { join, resolve } from "path";
|
|
3
|
+
import { createLogger } from "./logger";
|
|
4
|
+
const logger = createLogger("pets-registry");
|
|
5
|
+
export class PetsRegistry {
|
|
6
|
+
pets = new Map();
|
|
7
|
+
petsDir;
|
|
8
|
+
constructor(petsDir) {
|
|
9
|
+
this.petsDir = petsDir || resolve(__dirname, "../../pets");
|
|
10
|
+
this.loadPets();
|
|
11
|
+
}
|
|
12
|
+
loadPets() {
|
|
13
|
+
try {
|
|
14
|
+
if (!existsSync(this.petsDir)) {
|
|
15
|
+
logger.warn(`Pets directory not found: ${this.petsDir}`);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const entries = readdirSync(this.petsDir, { withFileTypes: true });
|
|
19
|
+
for (const entry of entries) {
|
|
20
|
+
if (!entry.isDirectory() || entry.name.startsWith('.') || entry.name === 'node_modules') {
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
const petDir = join(this.petsDir, entry.name);
|
|
24
|
+
const packageJsonPath = join(petDir, 'package.json');
|
|
25
|
+
if (!existsSync(packageJsonPath)) {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
|
30
|
+
const metadata = {
|
|
31
|
+
id: entry.name,
|
|
32
|
+
name: packageJson.name || entry.name,
|
|
33
|
+
description: packageJson.description || '',
|
|
34
|
+
version: packageJson.version || '1.0.0',
|
|
35
|
+
keywords: packageJson.keywords || [],
|
|
36
|
+
author: packageJson.author,
|
|
37
|
+
repository: packageJson.repository,
|
|
38
|
+
queries: packageJson.queries,
|
|
39
|
+
scenarios: packageJson.scenarios,
|
|
40
|
+
envVariables: packageJson.envVariables,
|
|
41
|
+
utils: packageJson.utils
|
|
42
|
+
};
|
|
43
|
+
this.pets.set(entry.name, metadata);
|
|
44
|
+
logger.debug(`Loaded pet: ${entry.name}`);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
logger.error(`Failed to load pet ${entry.name}: ${error.message}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
logger.info(`Loaded ${this.pets.size} pets`);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
logger.error(`Failed to load pets: ${error.message}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
getAllPets() {
|
|
57
|
+
return Array.from(this.pets.values());
|
|
58
|
+
}
|
|
59
|
+
getPet(id) {
|
|
60
|
+
return this.pets.get(id);
|
|
61
|
+
}
|
|
62
|
+
searchPets(query) {
|
|
63
|
+
if (!query || query.trim() === '') {
|
|
64
|
+
return this.getAllPets();
|
|
65
|
+
}
|
|
66
|
+
const normalizedQuery = query.toLowerCase().trim();
|
|
67
|
+
const results = [];
|
|
68
|
+
for (const pet of this.pets.values()) {
|
|
69
|
+
const searchableText = [
|
|
70
|
+
pet.id,
|
|
71
|
+
pet.name,
|
|
72
|
+
pet.description,
|
|
73
|
+
...(pet.keywords || []),
|
|
74
|
+
pet.author || '',
|
|
75
|
+
].join(' ').toLowerCase();
|
|
76
|
+
if (searchableText.includes(normalizedQuery)) {
|
|
77
|
+
results.push(pet);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return results;
|
|
81
|
+
}
|
|
82
|
+
getPetsByCategory(keywords) {
|
|
83
|
+
return this.getAllPets().filter(pet => keywords.some(keyword => pet.keywords?.some(k => k.toLowerCase().includes(keyword.toLowerCase()))));
|
|
84
|
+
}
|
|
85
|
+
reload() {
|
|
86
|
+
this.pets.clear();
|
|
87
|
+
this.loadPets();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
let defaultRegistry = null;
|
|
91
|
+
export function getPetsRegistry(petsDir) {
|
|
92
|
+
if (!defaultRegistry) {
|
|
93
|
+
defaultRegistry = new PetsRegistry(petsDir);
|
|
94
|
+
}
|
|
95
|
+
return defaultRegistry;
|
|
96
|
+
}
|
|
97
|
+
export function searchPetsInRegistry(query, petsDir) {
|
|
98
|
+
const registry = getPetsRegistry(petsDir);
|
|
99
|
+
return registry.searchPets(query);
|
|
100
|
+
}
|
|
101
|
+
export function getAllPetsFromRegistry(petsDir) {
|
|
102
|
+
const registry = getPetsRegistry(petsDir);
|
|
103
|
+
return registry.getAllPets();
|
|
104
|
+
}
|
|
105
|
+
export function getPetFromRegistry(id, petsDir) {
|
|
106
|
+
const registry = getPetsRegistry(petsDir);
|
|
107
|
+
return registry.getPet(id);
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=pets-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pets-registry.js","sourceRoot":"","sources":["../../../pets-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { tool } from "@opencode-ai/plugin";
|
|
2
|
+
import type * as z from "zod";
|
|
3
|
+
import * as zodRuntime from "zod";
|
|
4
|
+
export { tool };
|
|
5
|
+
export { zodRuntime as z };
|
|
6
|
+
export interface ToolDefinition<T extends Record<string, any> = any> {
|
|
7
|
+
name: string;
|
|
8
|
+
description: string;
|
|
9
|
+
schema: z.ZodType<any, any, any>;
|
|
10
|
+
execute: (args: T, context?: any) => Promise<string>;
|
|
11
|
+
}
|
|
12
|
+
export interface ProviderSpec {
|
|
13
|
+
name: string;
|
|
14
|
+
displayName: string;
|
|
15
|
+
envVars: {
|
|
16
|
+
required: Array<{
|
|
17
|
+
name: string;
|
|
18
|
+
description: string;
|
|
19
|
+
example?: string;
|
|
20
|
+
}>;
|
|
21
|
+
};
|
|
22
|
+
capabilities: string[];
|
|
23
|
+
comingSoon?: string[];
|
|
24
|
+
credentialsUrl?: string;
|
|
25
|
+
credentialsDocUrl?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface ProviderValidationResult {
|
|
28
|
+
provider: string;
|
|
29
|
+
configured: boolean;
|
|
30
|
+
missingVars: string[];
|
|
31
|
+
spec?: ProviderSpec;
|
|
32
|
+
}
|
|
33
|
+
export interface ProviderValidationReport {
|
|
34
|
+
hasRequiredProvider: boolean;
|
|
35
|
+
requiredResults: ProviderValidationResult[];
|
|
36
|
+
optionalResults: ProviderValidationResult[];
|
|
37
|
+
errors: string[];
|
|
38
|
+
}
|
|
39
|
+
export type ToolRecord = Record<string, {
|
|
40
|
+
description: string;
|
|
41
|
+
args: z.ZodObject<any>;
|
|
42
|
+
execute: (args: any, context?: any) => Promise<string>;
|
|
43
|
+
}>;
|
|
44
|
+
export declare function createPlugin(tools: ToolDefinition[]): {
|
|
45
|
+
tool: ToolRecord;
|
|
46
|
+
};
|
|
47
|
+
export declare function createSingleTool<T extends Record<string, any>>(definition: Omit<ToolDefinition<T>, 'name'>): {
|
|
48
|
+
description: string;
|
|
49
|
+
args: z.ZodObject<any>;
|
|
50
|
+
execute: (args: T, context?: any) => Promise<string>;
|
|
51
|
+
};
|
|
52
|
+
export declare function validateProviders(packageJson: any, pluginDir: string): ProviderValidationReport;
|
|
53
|
+
export interface EnvConfig {
|
|
54
|
+
[key: string]: string;
|
|
55
|
+
}
|
|
56
|
+
export declare function loadEnv(petId?: string): EnvConfig;
|
|
57
|
+
export declare function getEnv(key: string, petId?: string): string | undefined;
|
|
58
|
+
//# sourceMappingURL=plugin-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-factory.d.ts","sourceRoot":"","sources":["../../../plugin-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { tool } from "@opencode-ai/plugin";
|
|
2
|
+
import { readFileSync, existsSync } from "fs";
|
|
3
|
+
import { resolve } from "path";
|
|
4
|
+
import { createLogger } from "./logger";
|
|
5
|
+
import { config } from "dotenv";
|
|
6
|
+
import * as zodRuntime from "zod";
|
|
7
|
+
// ============================================================================
|
|
8
|
+
// CRITICAL: SCHEMA FORMAT REQUIREMENTS
|
|
9
|
+
// ============================================================================
|
|
10
|
+
//
|
|
11
|
+
// 1. ALWAYS use tool.schema for the Zod instance (not direct "zod" import)
|
|
12
|
+
// This ensures the same Zod version as OpenCode
|
|
13
|
+
//
|
|
14
|
+
// 2. SIMPLE TYPES ONLY - Do NOT use nested schemas
|
|
15
|
+
// ✅ ALLOWED:
|
|
16
|
+
// - z.string()
|
|
17
|
+
// - z.number()
|
|
18
|
+
// - z.boolean()
|
|
19
|
+
// - z.array(z.string())
|
|
20
|
+
// - z.array(z.number())
|
|
21
|
+
// - z.object({ field: z.string() })
|
|
22
|
+
//
|
|
23
|
+
// ❌ NOT ALLOWED (will cause runtime errors):
|
|
24
|
+
// - z.array(z.object({...})) // Nested object in array
|
|
25
|
+
// - z.object({ nested: z.object({...}) }) // Nested object in object
|
|
26
|
+
// - z.record(z.string()) // Record with any nested type
|
|
27
|
+
// - z.union([z.object({...}), ...]) // Union with nested types
|
|
28
|
+
//
|
|
29
|
+
// 3. WORKAROUND for complex data structures:
|
|
30
|
+
// Use z.string() with JSON serialization
|
|
31
|
+
// Example:
|
|
32
|
+
// schema: z.object({
|
|
33
|
+
// dataJson: z.string().describe("JSON string of data array")
|
|
34
|
+
// }),
|
|
35
|
+
// execute(args) {
|
|
36
|
+
// const data = JSON.parse(args.dataJson)
|
|
37
|
+
// // ... process data
|
|
38
|
+
// }
|
|
39
|
+
//
|
|
40
|
+
// ============================================================================
|
|
41
|
+
export { tool };
|
|
42
|
+
export { zodRuntime as z };
|
|
43
|
+
const logger = createLogger("plugin-factory");
|
|
44
|
+
export function createPlugin(tools) {
|
|
45
|
+
const toolRecord = {};
|
|
46
|
+
for (const toolDef of tools) {
|
|
47
|
+
const schema = toolDef.schema;
|
|
48
|
+
toolRecord[toolDef.name] = tool({
|
|
49
|
+
description: toolDef.description,
|
|
50
|
+
args: schema.shape || schema,
|
|
51
|
+
execute: toolDef.execute
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
return { tool: toolRecord };
|
|
55
|
+
}
|
|
56
|
+
export function createSingleTool(definition) {
|
|
57
|
+
const schema = definition.schema;
|
|
58
|
+
return tool({
|
|
59
|
+
description: definition.description,
|
|
60
|
+
args: schema.shape || schema,
|
|
61
|
+
execute: definition.execute
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
function loadProviderSpec(providerPath, pluginDir) {
|
|
65
|
+
try {
|
|
66
|
+
let packagePath;
|
|
67
|
+
if (providerPath.startsWith('openpets/')) {
|
|
68
|
+
const petName = providerPath.replace('openpets/', '');
|
|
69
|
+
packagePath = resolve(pluginDir, `../${petName}/package.json`);
|
|
70
|
+
}
|
|
71
|
+
else if (providerPath.startsWith('@/utils/')) {
|
|
72
|
+
const normalizedPath = providerPath.replace('@/utils/', '');
|
|
73
|
+
packagePath = resolve(pluginDir, `../../src/utils/${normalizedPath}/package.json`);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
logger.debug(`Unknown provider path format: ${providerPath}`);
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
const packageJson = JSON.parse(readFileSync(packagePath, 'utf-8'));
|
|
80
|
+
if (packageJson.provider) {
|
|
81
|
+
return packageJson.provider;
|
|
82
|
+
}
|
|
83
|
+
if (packageJson.envVariables?.required) {
|
|
84
|
+
return {
|
|
85
|
+
name: packageJson.name || providerPath,
|
|
86
|
+
displayName: packageJson.description?.split('-')[0]?.trim() || providerPath,
|
|
87
|
+
envVars: {
|
|
88
|
+
required: packageJson.envVariables.required.map((env) => ({
|
|
89
|
+
name: env.name,
|
|
90
|
+
description: env.description,
|
|
91
|
+
example: env.example
|
|
92
|
+
}))
|
|
93
|
+
},
|
|
94
|
+
capabilities: packageJson.keywords?.filter((k) => k !== 'opencode' && k !== 'plugin') || []
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
logger.debug(`Could not load provider spec for ${providerPath}: ${error.message}`);
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function validateProvider(providerPath, pluginDir) {
|
|
105
|
+
const spec = loadProviderSpec(providerPath, pluginDir);
|
|
106
|
+
if (!spec) {
|
|
107
|
+
return {
|
|
108
|
+
provider: providerPath,
|
|
109
|
+
configured: false,
|
|
110
|
+
missingVars: [],
|
|
111
|
+
spec: undefined
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
const missingVars = [];
|
|
115
|
+
for (const envVar of spec.envVars.required) {
|
|
116
|
+
if (!process.env[envVar.name]) {
|
|
117
|
+
missingVars.push(envVar.name);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
provider: providerPath,
|
|
122
|
+
configured: missingVars.length === 0,
|
|
123
|
+
missingVars,
|
|
124
|
+
spec
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
export function validateProviders(packageJson, pluginDir) {
|
|
128
|
+
const errors = [];
|
|
129
|
+
const requiredResults = [];
|
|
130
|
+
const optionalResults = [];
|
|
131
|
+
if (!packageJson.providers) {
|
|
132
|
+
return { hasRequiredProvider: true, requiredResults, optionalResults, errors };
|
|
133
|
+
}
|
|
134
|
+
const anyProviders = packageJson.providers.any || [];
|
|
135
|
+
const requiredProviders = packageJson.providers.required || [];
|
|
136
|
+
const optionalProviders = packageJson.providers.optional || [];
|
|
137
|
+
const allProviders = [...anyProviders, ...requiredProviders];
|
|
138
|
+
for (const providerPath of allProviders) {
|
|
139
|
+
const result = validateProvider(providerPath, pluginDir);
|
|
140
|
+
requiredResults.push(result);
|
|
141
|
+
}
|
|
142
|
+
for (const providerPath of optionalProviders) {
|
|
143
|
+
const result = validateProvider(providerPath, pluginDir);
|
|
144
|
+
optionalResults.push(result);
|
|
145
|
+
}
|
|
146
|
+
const hasRequiredProvider = requiredResults.length === 0 || requiredResults.some(r => r.configured);
|
|
147
|
+
if (!hasRequiredProvider && requiredResults.length > 0) {
|
|
148
|
+
const providerNames = requiredResults
|
|
149
|
+
.map(r => r.spec?.displayName || r.provider)
|
|
150
|
+
.join(', ');
|
|
151
|
+
errors.push(`At least one provider must be configured. Available providers: ${providerNames}`);
|
|
152
|
+
errors.push(`\nConfigure any one of the following:\n`);
|
|
153
|
+
for (const result of requiredResults) {
|
|
154
|
+
if (result.spec) {
|
|
155
|
+
errors.push(`${result.spec.displayName}:`);
|
|
156
|
+
for (const envVar of result.spec.envVars.required) {
|
|
157
|
+
errors.push(` - ${envVar.name}: ${envVar.description}`);
|
|
158
|
+
if (envVar.example) {
|
|
159
|
+
errors.push(` Example: ${envVar.example}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
errors.push('');
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return { hasRequiredProvider, requiredResults, optionalResults, errors };
|
|
167
|
+
}
|
|
168
|
+
export function loadEnv(petId) {
|
|
169
|
+
const envVars = {};
|
|
170
|
+
try {
|
|
171
|
+
const projectRoot = resolve(process.cwd());
|
|
172
|
+
const dotenvPath = resolve(projectRoot, '.env');
|
|
173
|
+
const petsConfigPath = resolve(projectRoot, '.pets', 'config.json');
|
|
174
|
+
logger.debug(`Loading env vars for pet: ${petId || 'global'}`);
|
|
175
|
+
if (petId && existsSync(petsConfigPath)) {
|
|
176
|
+
try {
|
|
177
|
+
const petsConfig = JSON.parse(readFileSync(petsConfigPath, 'utf-8'));
|
|
178
|
+
const petEnvConfig = petsConfig.envConfig?.[petId] || {};
|
|
179
|
+
for (const [key, value] of Object.entries(petEnvConfig)) {
|
|
180
|
+
if (typeof value === 'string' && value.length > 0) {
|
|
181
|
+
envVars[key] = value;
|
|
182
|
+
logger.debug(`Loaded from .pets/config.json: ${key}`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
logger.debug(`Failed to load pet config: ${error.message}`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
if (existsSync(dotenvPath)) {
|
|
191
|
+
const dotenvResult = config({ path: dotenvPath });
|
|
192
|
+
if (dotenvResult.parsed) {
|
|
193
|
+
for (const [key, value] of Object.entries(dotenvResult.parsed)) {
|
|
194
|
+
if (value && value.length > 0) {
|
|
195
|
+
envVars[key] = value;
|
|
196
|
+
logger.debug(`Loaded from .env (overriding if exists): ${key}`);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
logger.info(`Loaded ${Object.keys(envVars).length} environment variables from project config`);
|
|
202
|
+
}
|
|
203
|
+
catch (error) {
|
|
204
|
+
logger.error(`Error loading environment variables: ${error.message}`);
|
|
205
|
+
}
|
|
206
|
+
return envVars;
|
|
207
|
+
}
|
|
208
|
+
export function getEnv(key, petId) {
|
|
209
|
+
const envVars = loadEnv(petId);
|
|
210
|
+
return envVars[key];
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=plugin-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-factory.js","sourceRoot":"","sources":["../../../plugin-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
interface PetPrompt {
|
|
2
|
+
name: string;
|
|
3
|
+
content: string;
|
|
4
|
+
description: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function extractPetPrompts(agentsMdPath: string, enabledPets: string[]): PetPrompt[];
|
|
7
|
+
export declare function writePetPrompts(prompts: PetPrompt[], outputDir: string): void;
|
|
8
|
+
export declare function readPetsConfig(configPath: string): {
|
|
9
|
+
enabled: string[];
|
|
10
|
+
disabled: string[];
|
|
11
|
+
};
|
|
12
|
+
export declare function writePetsConfig(configPath: string, enabled: string[], disabled: string[]): void;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=prompt-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-utils.d.ts","sourceRoot":"","sources":["../../../prompt-utils.ts"],"names":[],"mappings":"AAGA,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAkB1F;AA2DD,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAU7E;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAe5F;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAc/F"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { readFileSync, existsSync, writeFileSync, mkdirSync } from 'fs';
|
|
2
|
+
import { join, dirname } from 'path';
|
|
3
|
+
export function extractPetPrompts(agentsMdPath, enabledPets) {
|
|
4
|
+
if (!existsSync(agentsMdPath)) {
|
|
5
|
+
console.warn(`AGENTS.md not found at ${agentsMdPath}`);
|
|
6
|
+
return [];
|
|
7
|
+
}
|
|
8
|
+
const agentsContent = readFileSync(agentsMdPath, 'utf-8');
|
|
9
|
+
const prompts = [];
|
|
10
|
+
for (const pet of enabledPets) {
|
|
11
|
+
const petName = pet.replace('openpets/', '');
|
|
12
|
+
const prompt = extractPromptForPet(agentsContent, petName);
|
|
13
|
+
if (prompt) {
|
|
14
|
+
prompts.push(prompt);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return prompts;
|
|
18
|
+
}
|
|
19
|
+
function extractPromptForPet(content, petName) {
|
|
20
|
+
// Simple regex to find plugin section
|
|
21
|
+
const pattern = '### [^\\n]*`pets/' + petName + '`';
|
|
22
|
+
const pluginRegex = new RegExp(pattern, 'i');
|
|
23
|
+
const match = content.match(pluginRegex);
|
|
24
|
+
if (!match) {
|
|
25
|
+
console.warn(`No section found for pet: ${petName}`);
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
const startIndex = match.index;
|
|
29
|
+
const afterHeader = content.substring(startIndex + match[0].length);
|
|
30
|
+
// Find next ### section or end of file
|
|
31
|
+
const nextSectionMatch = afterHeader.match(/### /);
|
|
32
|
+
const endIndex = nextSectionMatch ? startIndex + match[0].length + nextSectionMatch.index : content.length;
|
|
33
|
+
const sectionContent = content.substring(startIndex, endIndex).trim();
|
|
34
|
+
// Extract description (first paragraph)
|
|
35
|
+
const lines = sectionContent.split('\\n');
|
|
36
|
+
let description = '';
|
|
37
|
+
for (let i = 0; i < lines.length; i++) {
|
|
38
|
+
if (lines[i].trim() && !lines[i].startsWith('**') && !lines[i].startsWith('*')) {
|
|
39
|
+
description = lines[i].trim();
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (!description) {
|
|
44
|
+
description = `System prompt for ${petName} plugin`;
|
|
45
|
+
}
|
|
46
|
+
// Build simple system prompt
|
|
47
|
+
const systemPrompt = `# ${petName.charAt(0).toUpperCase() + petName.slice(1)} Plugin
|
|
48
|
+
|
|
49
|
+
${description}
|
|
50
|
+
|
|
51
|
+
## Usage Guidance
|
|
52
|
+
|
|
53
|
+
This plugin provides tools for interacting with ${petName} services.
|
|
54
|
+
|
|
55
|
+
## Important Notes
|
|
56
|
+
|
|
57
|
+
- Always check for required environment variables before using tools
|
|
58
|
+
- Read tool descriptions carefully to understand parameters
|
|
59
|
+
- Handle errors gracefully and provide helpful feedback to users
|
|
60
|
+
`;
|
|
61
|
+
return {
|
|
62
|
+
name: petName,
|
|
63
|
+
content: systemPrompt,
|
|
64
|
+
description
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export function writePetPrompts(prompts, outputDir) {
|
|
68
|
+
if (!existsSync(outputDir)) {
|
|
69
|
+
mkdirSync(outputDir, { recursive: true });
|
|
70
|
+
}
|
|
71
|
+
for (const prompt of prompts) {
|
|
72
|
+
const promptPath = join(outputDir, `${prompt.name}.md`);
|
|
73
|
+
writeFileSync(promptPath, prompt.content, 'utf-8');
|
|
74
|
+
console.log(`Wrote prompt: ${promptPath}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
export function readPetsConfig(configPath) {
|
|
78
|
+
if (!existsSync(configPath)) {
|
|
79
|
+
return { enabled: [], disabled: [] };
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
const config = JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
83
|
+
return {
|
|
84
|
+
enabled: config.enabled || [],
|
|
85
|
+
disabled: config.disabled || []
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
console.warn(`Error reading pets config: ${error}`);
|
|
90
|
+
return { enabled: [], disabled: [] };
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export function writePetsConfig(configPath, enabled, disabled) {
|
|
94
|
+
const configDir = dirname(configPath);
|
|
95
|
+
if (!existsSync(configDir)) {
|
|
96
|
+
mkdirSync(configDir, { recursive: true });
|
|
97
|
+
}
|
|
98
|
+
const config = {
|
|
99
|
+
enabled,
|
|
100
|
+
disabled,
|
|
101
|
+
lastUpdated: new Date().toISOString()
|
|
102
|
+
};
|
|
103
|
+
writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');
|
|
104
|
+
console.log(`Wrote pets config: ${configPath}`);
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=prompt-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-utils.js","sourceRoot":"","sources":["../../../prompt-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AACvE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAQpC,MAAM,UAAU,iBAAiB,CAAC,YAAoB,EAAE,WAAqB;IAC3E,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,0BAA0B,YAAY,EAAE,CAAC,CAAA;QACtD,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,aAAa,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IACzD,MAAM,OAAO,GAAgB,EAAE,CAAA;IAE/B,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;QAC5C,MAAM,MAAM,GAAG,mBAAmB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;QAC1D,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACtB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAe,EAAE,OAAe;IAC3D,wCAAwC;IACxC,MAAM,OAAO,GAAG,mBAAmB,GAAG,OAAO,GAAG,GAAG,CAAA;IACnD,MAAM,WAAW,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;IAExC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,6BAA6B,OAAO,EAAE,CAAC,CAAA;QACpD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,KAAM,CAAA;IAC/B,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IAEnE,uCAAuC;IACvC,MAAM,gBAAgB,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAClD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,CAAC,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,gBAAgB,CAAC,KAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAA;IAE3G,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAA;IAErE,wCAAwC;IACxC,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACzC,IAAI,WAAW,GAAG,EAAE,CAAA;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/E,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YAC7B,MAAK;QACP,CAAC;IACH,CAAC;IAED,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,WAAW,GAAG,qBAAqB,OAAO,SAAS,CAAA;IACrD,CAAC;IAED,6BAA6B;IAC7B,MAAM,YAAY,GAAG,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;;EAE5E,WAAW;;;;kDAIqC,OAAO;;;;;;;CAOxD,CAAA;IAEC,OAAO;QACL,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,YAAY;QACrB,WAAW;KACZ,CAAA;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAoB,EAAE,SAAiB;IACrE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3C,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,MAAM,CAAC,IAAI,KAAK,CAAC,CAAA;QACvD,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAClD,OAAO,CAAC,GAAG,CAAC,iBAAiB,UAAU,EAAE,CAAC,CAAA;IAC5C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,UAAkB;IAC/C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;IACtC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAA;QAC5D,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;YAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;SAChC,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,8BAA8B,KAAK,EAAE,CAAC,CAAA;QACnD,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;IACtC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,UAAkB,EAAE,OAAiB,EAAE,QAAkB;IACvF,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IACrC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3C,CAAC;IAED,MAAM,MAAM,GAAG;QACb,OAAO;QACP,QAAQ;QACR,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC,CAAA;IAED,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;IACnE,OAAO,CAAC,GAAG,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAA;AACjD,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const commonSchemas: {
|
|
3
|
+
id: z.ZodString;
|
|
4
|
+
url: z.ZodString;
|
|
5
|
+
email: z.ZodString;
|
|
6
|
+
pagination: {
|
|
7
|
+
perPage: z.ZodOptional<z.ZodNumber>;
|
|
8
|
+
page: z.ZodOptional<z.ZodNumber>;
|
|
9
|
+
};
|
|
10
|
+
search: z.ZodOptional<z.ZodString>;
|
|
11
|
+
state: (values: string[]) => z.ZodOptional<z.ZodEnum<{
|
|
12
|
+
[x: string]: string;
|
|
13
|
+
}>>;
|
|
14
|
+
};
|
|
15
|
+
export declare function withPagination<T extends z.ZodRawShape>(shape: T): z.ZodObject<T & {
|
|
16
|
+
perPage: z.ZodOptional<z.ZodNumber>;
|
|
17
|
+
page: z.ZodOptional<z.ZodNumber>;
|
|
18
|
+
} extends infer T_1 ? { -readonly [P in keyof T_1]: T_1[P]; } : never, z.core.$strip>;
|
|
19
|
+
export declare function optional<T extends z.ZodTypeAny>(schema: T): z.ZodOptional<T>;
|
|
20
|
+
export declare function arrayOf<T extends z.ZodTypeAny>(schema: T): z.ZodArray<T>;
|
|
21
|
+
export declare function stringEnum(...values: string[]): z.ZodEnum<{
|
|
22
|
+
[x: string]: string;
|
|
23
|
+
}>;
|
|
24
|
+
export declare function stringField(description: string): z.ZodString;
|
|
25
|
+
export declare function optionalString(description: string): z.ZodOptional<z.ZodString>;
|
|
26
|
+
export declare function numberField(description: string): z.ZodNumber;
|
|
27
|
+
export declare function optionalNumber(description: string): z.ZodOptional<z.ZodNumber>;
|
|
28
|
+
export declare function booleanField(description: string): z.ZodBoolean;
|
|
29
|
+
export declare function optionalBoolean(description: string): z.ZodOptional<z.ZodBoolean>;
|
|
30
|
+
//# sourceMappingURL=schema-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-helpers.d.ts","sourceRoot":"","sources":["../../../schema-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,aAAa;;;;;;;;;oBAYR,MAAM,EAAE;;;CACzB,CAAA;AAED,wBAAgB,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC;;;sFAK/D;AAED,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,oBAEzD;AAED,wBAAgB,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,iBAExD;AAED,wBAAgB,UAAU,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE;;GAE7C;AAED,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,eAE9C;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,8BAEjD;AAED,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,eAE9C;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,8BAEjD;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,gBAE/C;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,+BAElD"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const commonSchemas = {
|
|
3
|
+
id: z.string().describe("Unique identifier"),
|
|
4
|
+
url: z.string().url().describe("URL"),
|
|
5
|
+
email: z.string().email().describe("Email address"),
|
|
6
|
+
pagination: {
|
|
7
|
+
perPage: z.number().optional().describe("Number of results per page (default: 20, max: 100)"),
|
|
8
|
+
page: z.number().optional().describe("Page number")
|
|
9
|
+
},
|
|
10
|
+
search: z.string().optional().describe("Search query"),
|
|
11
|
+
state: (values) => z.enum(values).optional().describe("Filter by state")
|
|
12
|
+
};
|
|
13
|
+
export function withPagination(shape) {
|
|
14
|
+
return z.object({
|
|
15
|
+
...shape,
|
|
16
|
+
...commonSchemas.pagination
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
export function optional(schema) {
|
|
20
|
+
return schema.optional();
|
|
21
|
+
}
|
|
22
|
+
export function arrayOf(schema) {
|
|
23
|
+
return z.array(schema);
|
|
24
|
+
}
|
|
25
|
+
export function stringEnum(...values) {
|
|
26
|
+
return z.enum(values);
|
|
27
|
+
}
|
|
28
|
+
export function stringField(description) {
|
|
29
|
+
return z.string().describe(description);
|
|
30
|
+
}
|
|
31
|
+
export function optionalString(description) {
|
|
32
|
+
return z.string().optional().describe(description);
|
|
33
|
+
}
|
|
34
|
+
export function numberField(description) {
|
|
35
|
+
return z.number().describe(description);
|
|
36
|
+
}
|
|
37
|
+
export function optionalNumber(description) {
|
|
38
|
+
return z.number().optional().describe(description);
|
|
39
|
+
}
|
|
40
|
+
export function booleanField(description) {
|
|
41
|
+
return z.boolean().describe(description);
|
|
42
|
+
}
|
|
43
|
+
export function optionalBoolean(description) {
|
|
44
|
+
return z.boolean().optional().describe(description);
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=schema-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-helpers.js","sourceRoot":"","sources":["../../../schema-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC5C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;IACrC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;IAEnD,UAAU,EAAE;QACV,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;QAC7F,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;KACpD;IAED,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;IAEtD,KAAK,EAAE,CAAC,MAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAA+B,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;CAC5G,CAAA;AAED,MAAM,UAAU,cAAc,CAA0B,KAAQ;IAC9D,OAAO,CAAC,CAAC,MAAM,CAAC;QACd,GAAG,KAAK;QACR,GAAG,aAAa,CAAC,UAAU;KAC5B,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAyB,MAAS;IACxD,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAA;AAC1B,CAAC;AAED,MAAM,UAAU,OAAO,CAAyB,MAAS;IACvD,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;AACxB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAG,MAAgB;IAC5C,OAAO,CAAC,CAAC,IAAI,CAAC,MAA+B,CAAC,CAAA;AAChD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,WAAmB;IAC7C,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,WAAmB;IAChD,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;AACpD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,WAAmB;IAC7C,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,WAAmB;IAChD,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;AACpD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;AAC1C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,WAAmB;IACjD,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;AACrD,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Pet } from "./types";
|
|
2
|
+
export interface SearchResult {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
keywords: string[];
|
|
7
|
+
matchReason: string;
|
|
8
|
+
matchScore: number;
|
|
9
|
+
}
|
|
10
|
+
export interface PetApiData {
|
|
11
|
+
name: string;
|
|
12
|
+
description: string;
|
|
13
|
+
keywords?: string[];
|
|
14
|
+
title: string;
|
|
15
|
+
version?: string;
|
|
16
|
+
source_code_url?: string;
|
|
17
|
+
tools?: Array<{
|
|
18
|
+
name: string;
|
|
19
|
+
description: string;
|
|
20
|
+
}>;
|
|
21
|
+
queries?: string[];
|
|
22
|
+
scenarios?: Record<string, string | string[]>;
|
|
23
|
+
[key: string]: any;
|
|
24
|
+
}
|
|
25
|
+
export declare function searchPets(query: string): Promise<SearchResult[]>;
|
|
26
|
+
export declare function clearSearchCache(): void;
|
|
27
|
+
export declare function createPetFromApiData(petId: string, petData: PetApiData): Pet;
|
|
28
|
+
export declare function getAllPets(): Promise<Pet[]>;
|
|
29
|
+
//# sourceMappingURL=search-pets.d.ts.map
|