openpets 1.0.9 → 1.0.11
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 +6746 -4404
- package/dist/src/core/cli.js +1160 -36
- package/dist/src/core/cli.js.map +1 -1
- package/dist/src/core/discovery.d.ts +130 -0
- package/dist/src/core/discovery.d.ts.map +1 -0
- package/dist/src/core/discovery.js +327 -0
- package/dist/src/core/discovery.js.map +1 -0
- package/dist/src/core/index.d.ts +5 -5
- package/dist/src/core/index.d.ts.map +1 -1
- package/dist/src/core/index.js +7 -5
- package/dist/src/core/index.js.map +1 -1
- package/dist/src/core/mautrix-bridge.d.ts +17 -0
- package/dist/src/core/mautrix-bridge.d.ts.map +1 -1
- package/dist/src/core/mautrix-bridge.js +257 -0
- package/dist/src/core/mautrix-bridge.js.map +1 -1
- package/dist/src/core/pet-config.d.ts +611 -0
- package/dist/src/core/pet-config.d.ts.map +1 -0
- package/dist/src/core/pet-config.js +281 -0
- package/dist/src/core/pet-config.js.map +1 -0
- package/dist/src/core/pet-downloader.d.ts +50 -0
- package/dist/src/core/pet-downloader.d.ts.map +1 -0
- package/dist/src/core/pet-downloader.js +298 -0
- package/dist/src/core/pet-downloader.js.map +1 -0
- package/dist/src/core/pet-scanner.d.ts +14 -0
- package/dist/src/core/pet-scanner.d.ts.map +1 -0
- package/dist/src/core/pet-scanner.js +87 -0
- package/dist/src/core/pet-scanner.js.map +1 -0
- package/dist/src/core/registry-client.d.ts +97 -0
- package/dist/src/core/registry-client.d.ts.map +1 -0
- package/dist/src/core/registry-client.js +283 -0
- package/dist/src/core/registry-client.js.map +1 -0
- package/dist/src/core/search-pets.d.ts.map +1 -1
- package/dist/src/core/search-pets.js +31 -1
- package/dist/src/core/search-pets.js.map +1 -1
- package/dist/src/core/validate-pet.d.ts.map +1 -1
- package/dist/src/core/validate-pet.js +17 -19
- package/dist/src/core/validate-pet.js.map +1 -1
- package/dist/src/sdk/logger.d.ts +32 -0
- package/dist/src/sdk/logger.d.ts.map +1 -0
- package/dist/src/sdk/logger.js +119 -0
- package/dist/src/sdk/logger.js.map +1 -0
- package/dist/src/sdk/plugin-factory.d.ts +104 -0
- package/dist/src/sdk/plugin-factory.d.ts.map +1 -0
- package/dist/src/sdk/plugin-factory.js +540 -0
- package/dist/src/sdk/plugin-factory.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,540 @@
|
|
|
1
|
+
import { tool } from "@opencode-ai/plugin";
|
|
2
|
+
import { readFileSync, existsSync } from "fs";
|
|
3
|
+
import { resolve, dirname, join } from "path";
|
|
4
|
+
import { createLogger } from "./logger";
|
|
5
|
+
import { config } from "dotenv";
|
|
6
|
+
import * as zodRuntime from "zod";
|
|
7
|
+
/**
|
|
8
|
+
* Find the git root directory by walking up from the current directory
|
|
9
|
+
* Returns the directory containing .git, or null if not found
|
|
10
|
+
*/
|
|
11
|
+
function findGitRoot(startDir) {
|
|
12
|
+
let currentDir = resolve(startDir);
|
|
13
|
+
const root = resolve("/");
|
|
14
|
+
while (currentDir !== root) {
|
|
15
|
+
const gitPath = join(currentDir, ".git");
|
|
16
|
+
if (existsSync(gitPath)) {
|
|
17
|
+
return currentDir;
|
|
18
|
+
}
|
|
19
|
+
const parentDir = dirname(currentDir);
|
|
20
|
+
if (parentDir === currentDir)
|
|
21
|
+
break;
|
|
22
|
+
currentDir = parentDir;
|
|
23
|
+
}
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
// ============================================================================
|
|
27
|
+
// CRITICAL: SCHEMA FORMAT REQUIREMENTS
|
|
28
|
+
// ============================================================================
|
|
29
|
+
//
|
|
30
|
+
// 1. ALWAYS use tool.schema for the Zod instance (not direct "zod" import)
|
|
31
|
+
// This ensures the same Zod version as OpenCode
|
|
32
|
+
//
|
|
33
|
+
// 2. SIMPLE TYPES ONLY - Do NOT use nested schemas
|
|
34
|
+
// ✅ ALLOWED:
|
|
35
|
+
// - z.string()
|
|
36
|
+
// - z.number()
|
|
37
|
+
// - z.boolean()
|
|
38
|
+
// - z.array(z.string())
|
|
39
|
+
// - z.array(z.number())
|
|
40
|
+
// - z.object({ field: z.string() })
|
|
41
|
+
//
|
|
42
|
+
// ❌ NOT ALLOWED (will cause runtime errors):
|
|
43
|
+
// - z.array(z.object({...})) // Nested object in array
|
|
44
|
+
// - z.object({ nested: z.object({...}) }) // Nested object in object
|
|
45
|
+
// - z.record(z.string()) // Record with any nested type
|
|
46
|
+
// - z.union([z.object({...}), ...]) // Union with nested types
|
|
47
|
+
//
|
|
48
|
+
// 3. WORKAROUND for complex data structures:
|
|
49
|
+
// Use z.string() with JSON serialization
|
|
50
|
+
// Example:
|
|
51
|
+
// schema: z.object({
|
|
52
|
+
// dataJson: z.string().describe("JSON string of data array")
|
|
53
|
+
// }),
|
|
54
|
+
// execute(args) {
|
|
55
|
+
// const data = JSON.parse(args.dataJson)
|
|
56
|
+
// // ... process data
|
|
57
|
+
// }
|
|
58
|
+
//
|
|
59
|
+
// ============================================================================
|
|
60
|
+
export { tool };
|
|
61
|
+
export { zodRuntime as z };
|
|
62
|
+
const logger = createLogger("plugin-factory");
|
|
63
|
+
export function createPlugin(tools) {
|
|
64
|
+
const toolRecord = {};
|
|
65
|
+
for (const toolDef of tools) {
|
|
66
|
+
const schema = toolDef.schema;
|
|
67
|
+
toolRecord[toolDef.name] = tool({
|
|
68
|
+
description: toolDef.description,
|
|
69
|
+
args: schema.shape || schema,
|
|
70
|
+
execute: toolDef.execute
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
return { tool: toolRecord };
|
|
74
|
+
}
|
|
75
|
+
export function createSingleTool(definition) {
|
|
76
|
+
const schema = definition.schema;
|
|
77
|
+
return tool({
|
|
78
|
+
description: definition.description,
|
|
79
|
+
args: schema.shape || schema,
|
|
80
|
+
execute: definition.execute
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
function loadProviderSpec(providerPath, pluginDir) {
|
|
84
|
+
try {
|
|
85
|
+
let packagePath;
|
|
86
|
+
if (providerPath.startsWith('openpets/')) {
|
|
87
|
+
const petName = providerPath.replace('openpets/', '');
|
|
88
|
+
packagePath = resolve(pluginDir, `../${petName}/package.json`);
|
|
89
|
+
}
|
|
90
|
+
else if (providerPath.startsWith('@/utils/')) {
|
|
91
|
+
const normalizedPath = providerPath.replace('@/utils/', '');
|
|
92
|
+
packagePath = resolve(pluginDir, `../../src/utils/${normalizedPath}/package.json`);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
logger.debug(`Unknown provider path format: ${providerPath}`);
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
const packageJson = JSON.parse(readFileSync(packagePath, 'utf-8'));
|
|
99
|
+
if (packageJson.provider) {
|
|
100
|
+
return packageJson.provider;
|
|
101
|
+
}
|
|
102
|
+
if (packageJson.envVariables?.required) {
|
|
103
|
+
return {
|
|
104
|
+
name: packageJson.name || providerPath,
|
|
105
|
+
displayName: packageJson.description?.split('-')[0]?.trim() || providerPath,
|
|
106
|
+
envVars: {
|
|
107
|
+
required: packageJson.envVariables.required.map((env) => ({
|
|
108
|
+
name: env.name,
|
|
109
|
+
description: env.description,
|
|
110
|
+
example: env.example
|
|
111
|
+
}))
|
|
112
|
+
},
|
|
113
|
+
capabilities: packageJson.keywords?.filter((k) => k !== 'opencode' && k !== 'plugin') || []
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
logger.debug(`Could not load provider spec for ${providerPath}: ${error.message}`);
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
function validateProvider(providerPath, pluginDir) {
|
|
124
|
+
const spec = loadProviderSpec(providerPath, pluginDir);
|
|
125
|
+
if (!spec) {
|
|
126
|
+
return {
|
|
127
|
+
provider: providerPath,
|
|
128
|
+
configured: false,
|
|
129
|
+
missingVars: [],
|
|
130
|
+
spec: undefined
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
const missingVars = [];
|
|
134
|
+
for (const envVar of spec.envVars.required) {
|
|
135
|
+
if (!process.env[envVar.name]) {
|
|
136
|
+
missingVars.push(envVar.name);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
provider: providerPath,
|
|
141
|
+
configured: missingVars.length === 0,
|
|
142
|
+
missingVars,
|
|
143
|
+
spec
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
export function validateProviders(packageJson, pluginDir) {
|
|
147
|
+
const errors = [];
|
|
148
|
+
const requiredResults = [];
|
|
149
|
+
const optionalResults = [];
|
|
150
|
+
if (!packageJson.providers) {
|
|
151
|
+
return { hasRequiredProvider: true, requiredResults, optionalResults, errors };
|
|
152
|
+
}
|
|
153
|
+
const anyProviders = packageJson.providers.any || [];
|
|
154
|
+
const requiredProviders = packageJson.providers.required || [];
|
|
155
|
+
const optionalProviders = packageJson.providers.optional || [];
|
|
156
|
+
const allProviders = [...anyProviders, ...requiredProviders];
|
|
157
|
+
for (const providerPath of allProviders) {
|
|
158
|
+
const result = validateProvider(providerPath, pluginDir);
|
|
159
|
+
requiredResults.push(result);
|
|
160
|
+
}
|
|
161
|
+
for (const providerPath of optionalProviders) {
|
|
162
|
+
const result = validateProvider(providerPath, pluginDir);
|
|
163
|
+
optionalResults.push(result);
|
|
164
|
+
}
|
|
165
|
+
const hasRequiredProvider = requiredResults.length === 0 || requiredResults.some(r => r.configured);
|
|
166
|
+
if (!hasRequiredProvider && requiredResults.length > 0) {
|
|
167
|
+
const providerNames = requiredResults
|
|
168
|
+
.map(r => r.spec?.displayName || r.provider)
|
|
169
|
+
.join(', ');
|
|
170
|
+
errors.push(`At least one provider must be configured. Available providers: ${providerNames}`);
|
|
171
|
+
errors.push(`\nConfigure any one of the following:\n`);
|
|
172
|
+
for (const result of requiredResults) {
|
|
173
|
+
if (result.spec) {
|
|
174
|
+
errors.push(`${result.spec.displayName}:`);
|
|
175
|
+
for (const envVar of result.spec.envVars.required) {
|
|
176
|
+
errors.push(` - ${envVar.name}: ${envVar.description}`);
|
|
177
|
+
if (envVar.example) {
|
|
178
|
+
errors.push(` Example: ${envVar.example}`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
errors.push('');
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return { hasRequiredProvider, requiredResults, optionalResults, errors };
|
|
186
|
+
}
|
|
187
|
+
export function loadEnv(petId) {
|
|
188
|
+
const envVars = {};
|
|
189
|
+
try {
|
|
190
|
+
const cwd = resolve(process.cwd());
|
|
191
|
+
const gitRoot = findGitRoot(cwd);
|
|
192
|
+
// Determine paths to check - prioritize cwd, fall back to git root
|
|
193
|
+
const cwdDotenvPath = resolve(cwd, '.env');
|
|
194
|
+
const cwdPetsConfigPath = resolve(cwd, '.pets', 'config.json');
|
|
195
|
+
const gitRootDotenvPath = gitRoot ? resolve(gitRoot, '.env') : null;
|
|
196
|
+
const gitRootPetsConfigPath = gitRoot ? resolve(gitRoot, '.pets', 'config.json') : null;
|
|
197
|
+
logger.debug(`Loading env vars for pet: ${petId || 'global'}`, {
|
|
198
|
+
cwd,
|
|
199
|
+
gitRoot,
|
|
200
|
+
cwdDotenvExists: existsSync(cwdDotenvPath),
|
|
201
|
+
gitRootDotenvExists: gitRootDotenvPath ? existsSync(gitRootDotenvPath) : false
|
|
202
|
+
});
|
|
203
|
+
// Load from .pets/config.json - check git root first, then cwd (cwd takes precedence)
|
|
204
|
+
const petsConfigPaths = [gitRootPetsConfigPath, cwdPetsConfigPath].filter(Boolean);
|
|
205
|
+
for (const petsConfigPath of petsConfigPaths) {
|
|
206
|
+
if (petId && existsSync(petsConfigPath)) {
|
|
207
|
+
try {
|
|
208
|
+
const petsConfig = JSON.parse(readFileSync(petsConfigPath, 'utf-8'));
|
|
209
|
+
const petEnvConfig = petsConfig.envConfig?.[petId] || {};
|
|
210
|
+
for (const [key, value] of Object.entries(petEnvConfig)) {
|
|
211
|
+
if (typeof value === 'string' && value.length > 0) {
|
|
212
|
+
envVars[key] = value;
|
|
213
|
+
logger.debug(`Loaded from ${petsConfigPath}: ${key}`);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
logger.debug(`Failed to load pet config from ${petsConfigPath}: ${error.message}`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
// Load from .env files - check git root first, then cwd (cwd takes precedence)
|
|
223
|
+
const dotenvPaths = [gitRootDotenvPath, cwdDotenvPath].filter(Boolean);
|
|
224
|
+
for (const dotenvPath of dotenvPaths) {
|
|
225
|
+
if (existsSync(dotenvPath)) {
|
|
226
|
+
const dotenvResult = config({ path: dotenvPath });
|
|
227
|
+
if (dotenvResult.parsed) {
|
|
228
|
+
for (const [key, value] of Object.entries(dotenvResult.parsed)) {
|
|
229
|
+
if (value && value.length > 0) {
|
|
230
|
+
envVars[key] = value;
|
|
231
|
+
logger.debug(`Loaded from ${dotenvPath}: ${key}`);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
logger.info(`Loaded ${Object.keys(envVars).length} environment variables from project config`);
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
logger.error(`Error loading environment variables: ${error.message}`);
|
|
241
|
+
}
|
|
242
|
+
return envVars;
|
|
243
|
+
}
|
|
244
|
+
export function getEnv(key, petId) {
|
|
245
|
+
const envVars = loadEnv(petId);
|
|
246
|
+
return envVars[key];
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Set environment variables for a pet in .pets/config.json
|
|
250
|
+
* This is the proper way to persist pet-specific configuration
|
|
251
|
+
*
|
|
252
|
+
* @param petId - The pet identifier (e.g., "maps", "github")
|
|
253
|
+
* @param envVars - Key-value pairs to set
|
|
254
|
+
* @param projectDir - Optional project directory (defaults to cwd)
|
|
255
|
+
*/
|
|
256
|
+
export function setEnv(petId, envVars, projectDir) {
|
|
257
|
+
const { writeFileSync, existsSync, mkdirSync } = require("fs");
|
|
258
|
+
try {
|
|
259
|
+
const projectRoot = projectDir || resolve(process.cwd());
|
|
260
|
+
const petsDir = resolve(projectRoot, ".pets");
|
|
261
|
+
const petsConfigPath = resolve(petsDir, "config.json");
|
|
262
|
+
// Ensure .pets directory exists
|
|
263
|
+
if (!existsSync(petsDir)) {
|
|
264
|
+
mkdirSync(petsDir, { recursive: true });
|
|
265
|
+
logger.debug(`Created .pets directory at ${petsDir}`);
|
|
266
|
+
}
|
|
267
|
+
// Load existing config or create new one
|
|
268
|
+
let petsConfig = {
|
|
269
|
+
enabled: [],
|
|
270
|
+
disabled: [],
|
|
271
|
+
envConfig: {},
|
|
272
|
+
};
|
|
273
|
+
if (existsSync(petsConfigPath)) {
|
|
274
|
+
try {
|
|
275
|
+
const existing = JSON.parse(readFileSync(petsConfigPath, "utf-8"));
|
|
276
|
+
petsConfig = {
|
|
277
|
+
enabled: existing.enabled || [],
|
|
278
|
+
disabled: existing.disabled || [],
|
|
279
|
+
envConfig: existing.envConfig || {},
|
|
280
|
+
...existing
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
catch (error) {
|
|
284
|
+
logger.warn(`Could not parse existing .pets/config.json: ${error.message}`);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
// Ensure envConfig structure exists
|
|
288
|
+
if (!petsConfig.envConfig) {
|
|
289
|
+
petsConfig.envConfig = {};
|
|
290
|
+
}
|
|
291
|
+
// Create or update pet-specific env config
|
|
292
|
+
if (!petsConfig.envConfig[petId]) {
|
|
293
|
+
petsConfig.envConfig[petId] = {};
|
|
294
|
+
}
|
|
295
|
+
// Set the environment variables
|
|
296
|
+
for (const [key, value] of Object.entries(envVars)) {
|
|
297
|
+
if (value && value.trim()) {
|
|
298
|
+
petsConfig.envConfig[petId][key] = value.trim();
|
|
299
|
+
logger.debug(`Set ${key} for pet ${petId}`);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
// Update timestamp
|
|
303
|
+
petsConfig.last_updated = new Date().toISOString();
|
|
304
|
+
// Write config
|
|
305
|
+
writeFileSync(petsConfigPath, JSON.stringify(petsConfig, null, 2));
|
|
306
|
+
logger.info(`Saved environment variables for ${petId} to .pets/config.json`);
|
|
307
|
+
return { success: true, message: `Configuration saved for ${petId}` };
|
|
308
|
+
}
|
|
309
|
+
catch (error) {
|
|
310
|
+
logger.error(`Failed to save environment variables: ${error.message}`);
|
|
311
|
+
return { success: false, message: `Failed to save: ${error.message}` };
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Get the current .pets/config.json configuration
|
|
316
|
+
*/
|
|
317
|
+
export function getPetsConfig(projectDir) {
|
|
318
|
+
try {
|
|
319
|
+
const projectRoot = projectDir || resolve(process.cwd());
|
|
320
|
+
const petsConfigPath = resolve(projectRoot, ".pets", "config.json");
|
|
321
|
+
if (!existsSync(petsConfigPath)) {
|
|
322
|
+
return null;
|
|
323
|
+
}
|
|
324
|
+
return JSON.parse(readFileSync(petsConfigPath, "utf-8"));
|
|
325
|
+
}
|
|
326
|
+
catch (error) {
|
|
327
|
+
logger.error(`Failed to read .pets/config.json: ${error.message}`);
|
|
328
|
+
return null;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Clear environment variables for a pet from .pets/config.json
|
|
333
|
+
*/
|
|
334
|
+
export function clearEnv(petId, keys, projectDir) {
|
|
335
|
+
const { writeFileSync, existsSync } = require("fs");
|
|
336
|
+
try {
|
|
337
|
+
const projectRoot = projectDir || resolve(process.cwd());
|
|
338
|
+
const petsConfigPath = resolve(projectRoot, ".pets", "config.json");
|
|
339
|
+
if (!existsSync(petsConfigPath)) {
|
|
340
|
+
return { success: true, message: "No configuration to clear" };
|
|
341
|
+
}
|
|
342
|
+
const petsConfig = JSON.parse(readFileSync(petsConfigPath, "utf-8"));
|
|
343
|
+
if (!petsConfig.envConfig || !petsConfig.envConfig[petId]) {
|
|
344
|
+
return { success: true, message: "No configuration to clear for this pet" };
|
|
345
|
+
}
|
|
346
|
+
if (keys && keys.length > 0) {
|
|
347
|
+
// Clear specific keys
|
|
348
|
+
for (const key of keys) {
|
|
349
|
+
delete petsConfig.envConfig[petId][key];
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
else {
|
|
353
|
+
// Clear all keys for this pet
|
|
354
|
+
delete petsConfig.envConfig[petId];
|
|
355
|
+
}
|
|
356
|
+
petsConfig.last_updated = new Date().toISOString();
|
|
357
|
+
writeFileSync(petsConfigPath, JSON.stringify(petsConfig, null, 2));
|
|
358
|
+
return { success: true, message: `Cleared configuration for ${petId}` };
|
|
359
|
+
}
|
|
360
|
+
catch (error) {
|
|
361
|
+
logger.error(`Failed to clear environment variables: ${error.message}`);
|
|
362
|
+
return { success: false, message: `Failed to clear: ${error.message}` };
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Sync environment variables from .env file into .pets/config.json
|
|
367
|
+
* This ensures .pets/config.json is the single source of truth at runtime.
|
|
368
|
+
*
|
|
369
|
+
* - .env values take precedence and override .pets/config.json values
|
|
370
|
+
* - Only syncs to pets that are currently configured (in opencode.json)
|
|
371
|
+
* - Also ensures .pets/ is added to .gitignore
|
|
372
|
+
*
|
|
373
|
+
* @param projectDir - Optional project directory (defaults to cwd)
|
|
374
|
+
*/
|
|
375
|
+
export function syncEnvToConfig(projectDir) {
|
|
376
|
+
const { writeFileSync, existsSync, mkdirSync, appendFileSync } = require("fs");
|
|
377
|
+
try {
|
|
378
|
+
const projectRoot = projectDir || resolve(process.cwd());
|
|
379
|
+
const dotenvPath = resolve(projectRoot, '.env');
|
|
380
|
+
const petsDir = resolve(projectRoot, ".pets");
|
|
381
|
+
const petsConfigPath = resolve(petsDir, "config.json");
|
|
382
|
+
const gitignorePath = resolve(projectRoot, ".gitignore");
|
|
383
|
+
const opencodeJsonPath = resolve(projectRoot, "opencode.json");
|
|
384
|
+
logger.info(`Syncing .env to .pets/config.json in ${projectRoot}`);
|
|
385
|
+
// Ensure .pets directory exists
|
|
386
|
+
if (!existsSync(petsDir)) {
|
|
387
|
+
mkdirSync(petsDir, { recursive: true });
|
|
388
|
+
logger.debug(`Created .pets directory at ${petsDir}`);
|
|
389
|
+
}
|
|
390
|
+
// Ensure .pets/ is in .gitignore
|
|
391
|
+
ensurePetsInGitignore(gitignorePath);
|
|
392
|
+
// Load existing pets config or create new one
|
|
393
|
+
let petsConfig = {
|
|
394
|
+
enabled: [],
|
|
395
|
+
disabled: [],
|
|
396
|
+
envConfig: {},
|
|
397
|
+
};
|
|
398
|
+
if (existsSync(petsConfigPath)) {
|
|
399
|
+
try {
|
|
400
|
+
const existing = JSON.parse(readFileSync(petsConfigPath, "utf-8"));
|
|
401
|
+
petsConfig = {
|
|
402
|
+
enabled: existing.enabled || [],
|
|
403
|
+
disabled: existing.disabled || [],
|
|
404
|
+
envConfig: existing.envConfig || {},
|
|
405
|
+
...existing
|
|
406
|
+
};
|
|
407
|
+
}
|
|
408
|
+
catch (error) {
|
|
409
|
+
logger.warn(`Could not parse existing .pets/config.json: ${error.message}`);
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
if (!petsConfig.envConfig) {
|
|
413
|
+
petsConfig.envConfig = {};
|
|
414
|
+
}
|
|
415
|
+
// Get list of configured pets from opencode.json
|
|
416
|
+
const configuredPets = [];
|
|
417
|
+
if (existsSync(opencodeJsonPath)) {
|
|
418
|
+
try {
|
|
419
|
+
const opencodeConfig = JSON.parse(readFileSync(opencodeJsonPath, "utf-8"));
|
|
420
|
+
const plugins = opencodeConfig.plugin || [];
|
|
421
|
+
for (const plugin of plugins) {
|
|
422
|
+
// Extract pet ID from various formats
|
|
423
|
+
const petId = plugin
|
|
424
|
+
.replace(/^@openpets\//, '')
|
|
425
|
+
.replace(/^openpets\//, '')
|
|
426
|
+
.replace(/^\.\/pets\//, '')
|
|
427
|
+
.replace(/\/index\.ts$/, '')
|
|
428
|
+
.replace(/\/index\.js$/, '');
|
|
429
|
+
if (petId) {
|
|
430
|
+
configuredPets.push(petId);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
catch (error) {
|
|
435
|
+
logger.warn(`Could not read opencode.json: ${error.message}`);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
// Also include pets from .pets/config.json enabled list
|
|
439
|
+
for (const pet of petsConfig.enabled || []) {
|
|
440
|
+
if (!configuredPets.includes(pet)) {
|
|
441
|
+
configuredPets.push(pet);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
// If no .env file, nothing to sync
|
|
445
|
+
if (!existsSync(dotenvPath)) {
|
|
446
|
+
logger.debug("No .env file found, nothing to sync");
|
|
447
|
+
return { success: true, message: "No .env file found", synced: 0, pets: [] };
|
|
448
|
+
}
|
|
449
|
+
// Parse .env file
|
|
450
|
+
const dotenvResult = config({ path: dotenvPath });
|
|
451
|
+
if (!dotenvResult.parsed || Object.keys(dotenvResult.parsed).length === 0) {
|
|
452
|
+
logger.debug("No variables found in .env file");
|
|
453
|
+
return { success: true, message: "No variables in .env file", synced: 0, pets: [] };
|
|
454
|
+
}
|
|
455
|
+
const envVars = dotenvResult.parsed;
|
|
456
|
+
let syncedCount = 0;
|
|
457
|
+
const syncedPets = [];
|
|
458
|
+
// Create a "global" env config that applies to all pets
|
|
459
|
+
if (!petsConfig.envConfig["_global"]) {
|
|
460
|
+
petsConfig.envConfig["_global"] = {};
|
|
461
|
+
}
|
|
462
|
+
// Sync all .env variables to the global config
|
|
463
|
+
for (const [key, value] of Object.entries(envVars)) {
|
|
464
|
+
if (value && value.length > 0) {
|
|
465
|
+
petsConfig.envConfig["_global"][key] = value;
|
|
466
|
+
syncedCount++;
|
|
467
|
+
logger.debug(`Synced global: ${key}`);
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
// Also sync to each configured pet's specific config
|
|
471
|
+
for (const petId of configuredPets) {
|
|
472
|
+
if (!petsConfig.envConfig[petId]) {
|
|
473
|
+
petsConfig.envConfig[petId] = {};
|
|
474
|
+
}
|
|
475
|
+
// Merge global config into pet-specific config
|
|
476
|
+
// Pet-specific values (if any) take precedence over global
|
|
477
|
+
const globalConfig = petsConfig.envConfig["_global"] || {};
|
|
478
|
+
const petConfig = petsConfig.envConfig[petId] || {};
|
|
479
|
+
petsConfig.envConfig[petId] = {
|
|
480
|
+
...globalConfig,
|
|
481
|
+
...petConfig,
|
|
482
|
+
// .env values override everything
|
|
483
|
+
...envVars
|
|
484
|
+
};
|
|
485
|
+
syncedPets.push(petId);
|
|
486
|
+
}
|
|
487
|
+
// Update timestamp
|
|
488
|
+
petsConfig.last_updated = new Date().toISOString();
|
|
489
|
+
// Write config
|
|
490
|
+
writeFileSync(petsConfigPath, JSON.stringify(petsConfig, null, 2));
|
|
491
|
+
logger.info(`Synced ${syncedCount} env vars to .pets/config.json for ${syncedPets.length} pets`);
|
|
492
|
+
return {
|
|
493
|
+
success: true,
|
|
494
|
+
message: `Synced ${syncedCount} env vars for ${syncedPets.length} pets`,
|
|
495
|
+
synced: syncedCount,
|
|
496
|
+
pets: syncedPets
|
|
497
|
+
};
|
|
498
|
+
}
|
|
499
|
+
catch (error) {
|
|
500
|
+
logger.error(`Failed to sync env to config: ${error.message}`);
|
|
501
|
+
return { success: false, message: `Failed to sync: ${error.message}`, synced: 0, pets: [] };
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
/**
|
|
505
|
+
* Ensure .pets/ is in .gitignore
|
|
506
|
+
*/
|
|
507
|
+
function ensurePetsInGitignore(gitignorePath) {
|
|
508
|
+
const { writeFileSync, existsSync, appendFileSync } = require("fs");
|
|
509
|
+
const petsIgnorePattern = ".pets/";
|
|
510
|
+
try {
|
|
511
|
+
if (!existsSync(gitignorePath)) {
|
|
512
|
+
// Create .gitignore with .pets/
|
|
513
|
+
writeFileSync(gitignorePath, `# OpenPets configuration (contains sensitive env vars)\n${petsIgnorePattern}\n`);
|
|
514
|
+
logger.info("Created .gitignore with .pets/ entry");
|
|
515
|
+
return;
|
|
516
|
+
}
|
|
517
|
+
// Check if .pets/ is already in .gitignore
|
|
518
|
+
const content = readFileSync(gitignorePath, "utf-8");
|
|
519
|
+
const lines = content.split('\n');
|
|
520
|
+
// Check for various patterns that would ignore .pets
|
|
521
|
+
const petsPatterns = ['.pets/', '.pets', '/.pets/', '/.pets', '**/.pets/', '**/.pets'];
|
|
522
|
+
const isIgnored = lines.some(line => {
|
|
523
|
+
const trimmed = line.trim();
|
|
524
|
+
return petsPatterns.includes(trimmed) || trimmed === '.pets' || trimmed === '.pets/';
|
|
525
|
+
});
|
|
526
|
+
if (!isIgnored) {
|
|
527
|
+
// Append .pets/ to .gitignore
|
|
528
|
+
const newContent = content.endsWith('\n') ? content : content + '\n';
|
|
529
|
+
writeFileSync(gitignorePath, newContent + `\n# OpenPets configuration (contains sensitive env vars)\n${petsIgnorePattern}\n`);
|
|
530
|
+
logger.info("Added .pets/ to .gitignore");
|
|
531
|
+
}
|
|
532
|
+
else {
|
|
533
|
+
logger.debug(".pets/ already in .gitignore");
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
catch (error) {
|
|
537
|
+
logger.warn(`Could not update .gitignore: ${error.message}`);
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
//# sourceMappingURL=plugin-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-factory.js","sourceRoot":"","sources":["../../../../sdk/plugin-factory.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "openpets",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.11",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "CLI and runtime for OpenPets - AI plugin infrastructure",
|
|
6
6
|
"main": "./dist/src/core/index.js",
|
|
@@ -39,4 +39,4 @@
|
|
|
39
39
|
"peerDependencies": {
|
|
40
40
|
"@opencode-ai/plugin": "^1.0.106"
|
|
41
41
|
}
|
|
42
|
-
}
|
|
42
|
+
}
|