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.
Files changed (100) hide show
  1. package/dist/data/api.json +6658 -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 +392 -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 +12 -0
  27. package/dist/src/core/index.d.ts.map +1 -0
  28. package/dist/src/core/index.js +12 -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/mautrix-bridge.d.ts +93 -0
  38. package/dist/src/core/mautrix-bridge.d.ts.map +1 -0
  39. package/dist/src/core/mautrix-bridge.js +1046 -0
  40. package/dist/src/core/mautrix-bridge.js.map +1 -0
  41. package/dist/src/core/mcp-factory.d.ts +12 -0
  42. package/dist/src/core/mcp-factory.d.ts.map +1 -0
  43. package/dist/src/core/mcp-factory.js +143 -0
  44. package/dist/src/core/mcp-factory.js.map +1 -0
  45. package/dist/src/core/mcp-server.d.ts +3 -0
  46. package/dist/src/core/mcp-server.d.ts.map +1 -0
  47. package/dist/src/core/mcp-server.js +55 -0
  48. package/dist/src/core/mcp-server.js.map +1 -0
  49. package/dist/src/core/migrate-plugin.d.ts +15 -0
  50. package/dist/src/core/migrate-plugin.d.ts.map +1 -0
  51. package/dist/src/core/migrate-plugin.js +181 -0
  52. package/dist/src/core/migrate-plugin.js.map +1 -0
  53. package/dist/src/core/pets-registry.d.ts +47 -0
  54. package/dist/src/core/pets-registry.d.ts.map +1 -0
  55. package/dist/src/core/pets-registry.js +109 -0
  56. package/dist/src/core/pets-registry.js.map +1 -0
  57. package/dist/src/core/plugin-factory.d.ts +58 -0
  58. package/dist/src/core/plugin-factory.d.ts.map +1 -0
  59. package/dist/src/core/plugin-factory.js +212 -0
  60. package/dist/src/core/plugin-factory.js.map +1 -0
  61. package/dist/src/core/prompt-utils.d.ts +14 -0
  62. package/dist/src/core/prompt-utils.d.ts.map +1 -0
  63. package/dist/src/core/prompt-utils.js +106 -0
  64. package/dist/src/core/prompt-utils.js.map +1 -0
  65. package/dist/src/core/schema-helpers.d.ts +30 -0
  66. package/dist/src/core/schema-helpers.d.ts.map +1 -0
  67. package/dist/src/core/schema-helpers.js +46 -0
  68. package/dist/src/core/schema-helpers.js.map +1 -0
  69. package/dist/src/core/search-pets.d.ts +29 -0
  70. package/dist/src/core/search-pets.d.ts.map +1 -0
  71. package/dist/src/core/search-pets.js +196 -0
  72. package/dist/src/core/search-pets.js.map +1 -0
  73. package/dist/src/core/types.d.ts +63 -0
  74. package/dist/src/core/types.d.ts.map +1 -0
  75. package/dist/src/core/types.js +2 -0
  76. package/dist/src/core/types.js.map +1 -0
  77. package/dist/src/core/validate-pet.d.ts +40 -0
  78. package/dist/src/core/validate-pet.d.ts.map +1 -0
  79. package/dist/src/core/validate-pet.js +650 -0
  80. package/dist/src/core/validate-pet.js.map +1 -0
  81. package/package.json +15 -28
  82. package/ai-client-base/index.ts +0 -229
  83. package/build-pet.ts +0 -429
  84. package/cli.ts +0 -268
  85. package/config-manager.ts +0 -82
  86. package/deploy-pet.ts +0 -91
  87. package/index.ts +0 -10
  88. package/local-cache.ts +0 -280
  89. package/logger.ts +0 -143
  90. package/mcp-factory.ts +0 -180
  91. package/mcp-server.ts +0 -69
  92. package/migrate-plugin.ts +0 -220
  93. package/pets-registry.ts +0 -160
  94. package/plugin-factory.ts +0 -300
  95. package/prompt-utils.ts +0 -130
  96. package/schema-helpers.ts +0 -59
  97. package/search-pets.ts +0 -267
  98. package/types.ts +0 -68
  99. package/validate-pet.ts +0 -749
  100. /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":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AAC1D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAEvC,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,CAAA;AA0B5C,MAAM,OAAO,YAAY;IACf,IAAI,GAA6B,IAAI,GAAG,EAAE,CAAA;IAC1C,OAAO,CAAQ;IAEvB,YAAY,OAAgB;QAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;QAC1D,IAAI,CAAC,QAAQ,EAAE,CAAA;IACjB,CAAC;IAEO,QAAQ;QACd,IAAI,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9B,MAAM,CAAC,IAAI,CAAC,6BAA6B,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;gBACxD,OAAM;YACR,CAAC;YAED,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;YAElE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oBACxF,SAAQ;gBACV,CAAC;gBAED,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;gBAC7C,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;gBAEpD,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;oBACjC,SAAQ;gBACV,CAAC;gBAED,IAAI,CAAC;oBACH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAA;oBAEtE,MAAM,QAAQ,GAAgB;wBAC5B,EAAE,EAAE,KAAK,CAAC,IAAI;wBACd,IAAI,EAAE,WAAW,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI;wBACpC,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,EAAE;wBAC1C,OAAO,EAAE,WAAW,CAAC,OAAO,IAAI,OAAO;wBACvC,QAAQ,EAAE,WAAW,CAAC,QAAQ,IAAI,EAAE;wBACpC,MAAM,EAAE,WAAW,CAAC,MAAM;wBAC1B,UAAU,EAAE,WAAW,CAAC,UAAU;wBAClC,OAAO,EAAE,WAAW,CAAC,OAAO;wBAC5B,SAAS,EAAE,WAAW,CAAC,SAAS;wBAChC,YAAY,EAAE,WAAW,CAAC,YAAY;wBACtC,KAAK,EAAE,WAAW,CAAC,KAAK;qBACzB,CAAA;oBAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;oBACnC,MAAM,CAAC,KAAK,CAAC,eAAe,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;gBAC3C,CAAC;gBAAC,OAAO,KAAU,EAAE,CAAC;oBACpB,MAAM,CAAC,KAAK,CAAC,sBAAsB,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;gBACpE,CAAC;YACH,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,CAAA;QAC9C,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,wBAAwB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;QACvD,CAAC;IACH,CAAC;IAED,UAAU;QACR,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;IACvC,CAAC;IAED,MAAM,CAAC,EAAU;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC1B,CAAC;IAED,UAAU,CAAC,KAAa;QACtB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,UAAU,EAAE,CAAA;QAC1B,CAAC;QAED,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAA;QAClD,MAAM,OAAO,GAAkB,EAAE,CAAA;QAEjC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACrC,MAAM,cAAc,GAAG;gBACrB,GAAG,CAAC,EAAE;gBACN,GAAG,CAAC,IAAI;gBACR,GAAG,CAAC,WAAW;gBACf,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;gBACvB,GAAG,CAAC,MAAM,IAAI,EAAE;aACjB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;YAEzB,IAAI,cAAc,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACnB,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,iBAAiB,CAAC,QAAkB;QAClC,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACpC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CACtB,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CACzE,CACF,CAAA;IACH,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAA;QACjB,IAAI,CAAC,QAAQ,EAAE,CAAA;IACjB,CAAC;CACF;AAED,IAAI,eAAe,GAAwB,IAAI,CAAA;AAE/C,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,eAAe,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,CAAA;IAC7C,CAAC;IACD,OAAO,eAAe,CAAA;AACxB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAa,EAAE,OAAgB;IAClE,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;IACzC,OAAO,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;AACnC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;IACzC,OAAO,QAAQ,CAAC,UAAU,EAAE,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAU,EAAE,OAAgB;IAC7D,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;IACzC,OAAO,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAC5B,CAAC"}
@@ -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":"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"}
@@ -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