microfox 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/CHANGELOG.md +72 -0
- package/README.md +114 -0
- package/dist/agent-template.txt +486 -0
- package/dist/background-agent/.gitignore.txt +22 -0
- package/dist/background-agent/eslint.config.js.txt +48 -0
- package/dist/background-agent/microfox.json.txt +4 -0
- package/dist/background-agent/openapi.md.txt +1 -0
- package/dist/background-agent/package.json.txt +47 -0
- package/dist/background-agent/serverless.yml.txt +123 -0
- package/dist/background-agent/src/functions/cron-paginate.ts.txt +135 -0
- package/dist/background-agent/src/functions/cron-populate.ts.txt +33 -0
- package/dist/background-agent/src/functions/route-trigger-index.ts.txt +157 -0
- package/dist/background-agent/src/functions/route-trigger-populate.ts.txt +0 -0
- package/dist/background-agent/src/functions/sqs-index.ts.txt +147 -0
- package/dist/background-agent/src/helpers/ragRedis.ts.txt +78 -0
- package/dist/background-agent/src/index.ts.txt +69 -0
- package/dist/background-agent/tsconfig.json.txt +33 -0
- package/dist/chunk-4HNHBA2H.mjs +104 -0
- package/dist/chunk-4HNHBA2H.mjs.map +1 -0
- package/dist/chunk-ARAHSYJI.mjs +263 -0
- package/dist/chunk-ARAHSYJI.mjs.map +1 -0
- package/dist/chunk-JGAX4PD6.mjs +290 -0
- package/dist/chunk-JGAX4PD6.mjs.map +1 -0
- package/dist/chunk-KPJJOO76.mjs +12 -0
- package/dist/chunk-KPJJOO76.mjs.map +1 -0
- package/dist/chunk-TZQZMKHP.mjs +11 -0
- package/dist/chunk-TZQZMKHP.mjs.map +1 -0
- package/dist/chunk-UFRGJMF4.mjs +154 -0
- package/dist/chunk-UFRGJMF4.mjs.map +1 -0
- package/dist/chunk-UHWJTQKW.mjs +139 -0
- package/dist/chunk-UHWJTQKW.mjs.map +1 -0
- package/dist/chunk-UYROVW53.mjs +89 -0
- package/dist/chunk-UYROVW53.mjs.map +1 -0
- package/dist/chunk-XGFSFWK3.mjs +113 -0
- package/dist/chunk-XGFSFWK3.mjs.map +1 -0
- package/dist/cli.d.mts +2 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +1154 -0
- package/dist/cli.js.map +1 -0
- package/dist/cli.mjs +52 -0
- package/dist/cli.mjs.map +1 -0
- package/dist/commands/add.d.mts +5 -0
- package/dist/commands/add.d.ts +5 -0
- package/dist/commands/add.js +126 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/add.mjs +10 -0
- package/dist/commands/add.mjs.map +1 -0
- package/dist/commands/code.d.mts +5 -0
- package/dist/commands/code.d.ts +5 -0
- package/dist/commands/code.js +187 -0
- package/dist/commands/code.js.map +1 -0
- package/dist/commands/code.mjs +9 -0
- package/dist/commands/code.mjs.map +1 -0
- package/dist/commands/install.d.mts +5 -0
- package/dist/commands/install.d.ts +5 -0
- package/dist/commands/install.js +296 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/install.mjs +9 -0
- package/dist/commands/install.mjs.map +1 -0
- package/dist/commands/kickstart.d.mts +5 -0
- package/dist/commands/kickstart.d.ts +5 -0
- package/dist/commands/kickstart.js +322 -0
- package/dist/commands/kickstart.js.map +1 -0
- package/dist/commands/kickstart.mjs +10 -0
- package/dist/commands/kickstart.mjs.map +1 -0
- package/dist/commands/push.d.mts +5 -0
- package/dist/commands/push.d.ts +5 -0
- package/dist/commands/push.js +137 -0
- package/dist/commands/push.js.map +1 -0
- package/dist/commands/push.mjs +9 -0
- package/dist/commands/push.mjs.map +1 -0
- package/dist/commands/status.d.mts +7 -0
- package/dist/commands/status.d.ts +7 -0
- package/dist/commands/status.js +148 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/status.mjs +13 -0
- package/dist/commands/status.mjs.map +1 -0
- package/dist/commands/update.d.mts +5 -0
- package/dist/commands/update.d.ts +5 -0
- package/dist/commands/update.js +172 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/update.mjs +9 -0
- package/dist/commands/update.mjs.map +1 -0
- package/dist/index.d.mts +20 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.js +406 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +14 -0
- package/dist/index.mjs.map +1 -0
- package/dist/package-template.txt +494 -0
- package/package.json +68 -0
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __create = Object.create;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
8
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __export = (target, all) => {
|
|
10
|
+
for (var name in all)
|
|
11
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from))
|
|
16
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
17
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
18
|
+
}
|
|
19
|
+
return to;
|
|
20
|
+
};
|
|
21
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
24
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
25
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
26
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
27
|
+
mod
|
|
28
|
+
));
|
|
29
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
|
+
|
|
31
|
+
// src/commands/kickstart.ts
|
|
32
|
+
var kickstart_exports = {};
|
|
33
|
+
__export(kickstart_exports, {
|
|
34
|
+
kickstartCommand: () => kickstartCommand
|
|
35
|
+
});
|
|
36
|
+
module.exports = __toCommonJS(kickstart_exports);
|
|
37
|
+
var import_commander = require("commander");
|
|
38
|
+
var import_fs = __toESM(require("fs"));
|
|
39
|
+
var import_path = __toESM(require("path"));
|
|
40
|
+
var import_chalk = __toESM(require("chalk"));
|
|
41
|
+
var import_readline_sync = __toESM(require("readline-sync"));
|
|
42
|
+
var import_inquirer = __toESM(require("inquirer"));
|
|
43
|
+
|
|
44
|
+
// src/utils/getProjectRoot.ts
|
|
45
|
+
var getWorkingDirectory = () => {
|
|
46
|
+
return process.cwd();
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
// src/utils/npmChecker.ts
|
|
50
|
+
async function isPackageNameAvailable(packageName) {
|
|
51
|
+
try {
|
|
52
|
+
const controller = new AbortController();
|
|
53
|
+
const timeoutId = setTimeout(() => controller.abort(), 5e3);
|
|
54
|
+
const response = await fetch(`https://registry.npmjs.org/${packageName}`, {
|
|
55
|
+
signal: controller.signal
|
|
56
|
+
});
|
|
57
|
+
clearTimeout(timeoutId);
|
|
58
|
+
if (response.ok) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
if (response.status === 404) {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
console.warn(
|
|
65
|
+
`Warning: Unexpected status ${response.status} when checking npm availability for ${packageName}. Proceeding with caution.`
|
|
66
|
+
);
|
|
67
|
+
return false;
|
|
68
|
+
} catch (error) {
|
|
69
|
+
if (error.name === "AbortError") {
|
|
70
|
+
console.warn(
|
|
71
|
+
`Warning: Timeout when checking npm availability for ${packageName}. Proceeding with caution.`
|
|
72
|
+
);
|
|
73
|
+
} else {
|
|
74
|
+
console.warn(
|
|
75
|
+
`Warning: Could not check npm availability for ${packageName}. Proceeding with caution.`
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async function checkPackageNameAndPrompt(packageName) {
|
|
82
|
+
const readlineSync2 = require("readline-sync");
|
|
83
|
+
let currentName = (packageName == null ? void 0 : packageName.startsWith("@microfox/")) ? packageName : `@microfox/${packageName}`;
|
|
84
|
+
while (true) {
|
|
85
|
+
console.log(`\u{1F50D} Checking npm availability for "${currentName}"...`);
|
|
86
|
+
const isAvailable = await isPackageNameAvailable(currentName);
|
|
87
|
+
if (isAvailable) {
|
|
88
|
+
console.log(`\u2705 Package name "${currentName}" is available on npm!`);
|
|
89
|
+
return currentName;
|
|
90
|
+
} else {
|
|
91
|
+
console.log(`\u274C Package name "${currentName}" is already taken on npm.`);
|
|
92
|
+
const newName = readlineSync2.question(
|
|
93
|
+
"Please enter a new package name: "
|
|
94
|
+
);
|
|
95
|
+
if (!newName || newName.trim() === "") {
|
|
96
|
+
console.log("\u274C Invalid package name. Please try again.");
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
currentName = newName.trim();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// src/commands/kickstart.ts
|
|
105
|
+
async function createAgentProject(agentName) {
|
|
106
|
+
const workingDir = getWorkingDirectory();
|
|
107
|
+
const agentDir = import_path.default.join(workingDir, agentName);
|
|
108
|
+
if (import_fs.default.existsSync(agentDir)) {
|
|
109
|
+
throw new Error(`Directory already exists at ${agentDir}`);
|
|
110
|
+
}
|
|
111
|
+
console.log(
|
|
112
|
+
import_chalk.default.blue(
|
|
113
|
+
`\u{1F680} Creating agent ${import_chalk.default.bold(agentName)} at ${agentDir}
|
|
114
|
+
`
|
|
115
|
+
)
|
|
116
|
+
);
|
|
117
|
+
import_fs.default.mkdirSync(agentDir, { recursive: true });
|
|
118
|
+
const templatePath = import_path.default.resolve(__dirname, "agent-template.txt");
|
|
119
|
+
const templateContent = import_fs.default.readFileSync(templatePath, "utf-8");
|
|
120
|
+
const fileSections = templateContent.split("--- filename: ").slice(1);
|
|
121
|
+
for (const section of fileSections) {
|
|
122
|
+
const lines = section.split("\n");
|
|
123
|
+
const filePath = lines.shift().trim();
|
|
124
|
+
const content = lines.join("\n").replace(/<%= agentName %>/g, agentName);
|
|
125
|
+
const destPath = import_path.default.join(agentDir, filePath);
|
|
126
|
+
const destDir = import_path.default.dirname(destPath);
|
|
127
|
+
if (!import_fs.default.existsSync(destDir)) {
|
|
128
|
+
import_fs.default.mkdirSync(destDir, { recursive: true });
|
|
129
|
+
}
|
|
130
|
+
import_fs.default.writeFileSync(destPath, content);
|
|
131
|
+
console.log(import_chalk.default.green(`\u2705 Created ${filePath}`));
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
async function createPackageProject(packageName) {
|
|
135
|
+
const simpleName = packageName.includes("/") ? packageName.split("/")[1] : packageName;
|
|
136
|
+
const titleName = simpleName.split("-").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
|
|
137
|
+
const description = `A TypeScript SDK for ${titleName}.`;
|
|
138
|
+
const className = simpleName.split("-").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join("") + "Sdk";
|
|
139
|
+
const workingDir = getWorkingDirectory();
|
|
140
|
+
const packageDir = import_path.default.join(workingDir, simpleName);
|
|
141
|
+
if (import_fs.default.existsSync(packageDir)) {
|
|
142
|
+
throw new Error(`Directory already exists at ${packageDir}`);
|
|
143
|
+
}
|
|
144
|
+
console.log(
|
|
145
|
+
import_chalk.default.blue(
|
|
146
|
+
`\u{1F680} Creating package ${import_chalk.default.bold(packageName)} at ${packageDir}
|
|
147
|
+
`
|
|
148
|
+
)
|
|
149
|
+
);
|
|
150
|
+
import_fs.default.mkdirSync(packageDir, { recursive: true });
|
|
151
|
+
const templatePath = import_path.default.resolve(__dirname, "package-template.txt");
|
|
152
|
+
const templateContent = import_fs.default.readFileSync(templatePath, "utf-8");
|
|
153
|
+
const fileSections = templateContent.split("--- filename: ").slice(1);
|
|
154
|
+
for (const section of fileSections) {
|
|
155
|
+
const lines = section.split("\n");
|
|
156
|
+
const filePath = lines.shift().trim().replace(/<%= simpleName %>/g, simpleName);
|
|
157
|
+
let content = lines.join("\n");
|
|
158
|
+
content = content.replace(/<%= packageName %>/g, packageName);
|
|
159
|
+
content = content.replace(/<%= simpleName %>/g, simpleName);
|
|
160
|
+
content = content.replace(/<%= titleName %>/g, titleName);
|
|
161
|
+
content = content.replace(/<%= description %>/g, description);
|
|
162
|
+
content = content.replace(/<%= className %>/g, className);
|
|
163
|
+
const destPath = import_path.default.join(packageDir, filePath);
|
|
164
|
+
const destDir = import_path.default.dirname(destPath);
|
|
165
|
+
if (!import_fs.default.existsSync(destDir)) {
|
|
166
|
+
import_fs.default.mkdirSync(destDir, { recursive: true });
|
|
167
|
+
}
|
|
168
|
+
import_fs.default.writeFileSync(destPath, content);
|
|
169
|
+
console.log(import_chalk.default.green(`\u2705 Created ${filePath}`));
|
|
170
|
+
}
|
|
171
|
+
const docsDir = import_path.default.join(packageDir, "docs");
|
|
172
|
+
const docsConstructors = import_path.default.join(docsDir, "constructors");
|
|
173
|
+
const docsFunctions = import_path.default.join(docsDir, "functions");
|
|
174
|
+
import_fs.default.mkdirSync(docsDir, { recursive: true });
|
|
175
|
+
import_fs.default.mkdirSync(docsConstructors, { recursive: true });
|
|
176
|
+
import_fs.default.mkdirSync(docsFunctions, { recursive: true });
|
|
177
|
+
}
|
|
178
|
+
async function createBackgroundAgentProject(agentName) {
|
|
179
|
+
const workingDir = getWorkingDirectory();
|
|
180
|
+
const agentDir = import_path.default.join(workingDir, agentName);
|
|
181
|
+
if (import_fs.default.existsSync(agentDir)) {
|
|
182
|
+
throw new Error(`Directory already exists at ${agentDir}`);
|
|
183
|
+
}
|
|
184
|
+
console.log(
|
|
185
|
+
import_chalk.default.blue(
|
|
186
|
+
`\u{1F680} Creating background agent ${import_chalk.default.bold(agentName)} at ${agentDir}
|
|
187
|
+
`
|
|
188
|
+
)
|
|
189
|
+
);
|
|
190
|
+
import_fs.default.mkdirSync(agentDir, { recursive: true });
|
|
191
|
+
const templateDir = import_path.default.resolve(__dirname, "background-agent");
|
|
192
|
+
const copyTemplates = (src, dest) => {
|
|
193
|
+
const entries = import_fs.default.readdirSync(src, { withFileTypes: true });
|
|
194
|
+
for (const entry of entries) {
|
|
195
|
+
const srcPath = import_path.default.join(src, entry.name);
|
|
196
|
+
const destPath = import_path.default.join(dest, entry.name.replace(/\.txt$/, ""));
|
|
197
|
+
if (entry.isDirectory()) {
|
|
198
|
+
import_fs.default.mkdirSync(destPath, { recursive: true });
|
|
199
|
+
copyTemplates(srcPath, destPath);
|
|
200
|
+
} else if (entry.name.endsWith(".txt")) {
|
|
201
|
+
const templateContent = import_fs.default.readFileSync(srcPath, "utf-8");
|
|
202
|
+
const content = templateContent.replace(/<%= agentName %>/g, agentName);
|
|
203
|
+
import_fs.default.writeFileSync(destPath, content);
|
|
204
|
+
console.log(import_chalk.default.green(`\u2705 Created ${import_path.default.relative(agentDir, destPath)}`));
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
copyTemplates(templateDir, agentDir);
|
|
209
|
+
}
|
|
210
|
+
async function kickstartAction() {
|
|
211
|
+
console.log(import_chalk.default.cyan("\u{1F680} Let's kickstart your new project!\n"));
|
|
212
|
+
const { boilerplateType } = await import_inquirer.default.prompt([
|
|
213
|
+
{
|
|
214
|
+
type: "list",
|
|
215
|
+
name: "boilerplateType",
|
|
216
|
+
message: "Select boilerplate type:",
|
|
217
|
+
choices: ["package", "agent"]
|
|
218
|
+
}
|
|
219
|
+
]);
|
|
220
|
+
if (!boilerplateType) {
|
|
221
|
+
console.log(import_chalk.default.yellow("Operation cancelled."));
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
if (boilerplateType === "agent") {
|
|
225
|
+
const { agentType } = await import_inquirer.default.prompt([
|
|
226
|
+
{
|
|
227
|
+
type: "list",
|
|
228
|
+
name: "agentType",
|
|
229
|
+
message: "Select agent type:",
|
|
230
|
+
choices: ["plain", "background"]
|
|
231
|
+
}
|
|
232
|
+
]);
|
|
233
|
+
if (agentType === "plain") {
|
|
234
|
+
const agentName = import_readline_sync.default.question(
|
|
235
|
+
import_chalk.default.yellow("\u{1F4E6} Enter agent name: ")
|
|
236
|
+
);
|
|
237
|
+
if (!agentName.trim()) {
|
|
238
|
+
throw new Error("Agent name cannot be empty");
|
|
239
|
+
}
|
|
240
|
+
await createAgentProject(agentName.trim());
|
|
241
|
+
console.log(
|
|
242
|
+
import_chalk.default.green(
|
|
243
|
+
`
|
|
244
|
+
\u{1F389} Successfully created agent ${import_chalk.default.bold(agentName)}!`
|
|
245
|
+
)
|
|
246
|
+
);
|
|
247
|
+
console.log(import_chalk.default.gray(`\u{1F4CD} Located at ${import_path.default.join(getWorkingDirectory(), agentName)}`));
|
|
248
|
+
console.log(import_chalk.default.yellow("\n\u{1F4A1} Next steps:"));
|
|
249
|
+
console.log(import_chalk.default.yellow(` 1. cd ${agentName}`));
|
|
250
|
+
console.log(import_chalk.default.yellow(" 2. npm install"));
|
|
251
|
+
console.log(import_chalk.default.yellow(" 3. Configure your env.json"));
|
|
252
|
+
console.log(import_chalk.default.yellow(" 4. npm run dev"));
|
|
253
|
+
console.log(import_chalk.default.yellow(" 5. Start developing your agent!"));
|
|
254
|
+
} else if (agentType === "background") {
|
|
255
|
+
const agentName = import_readline_sync.default.question(
|
|
256
|
+
import_chalk.default.yellow("\u{1F4E6} Enter agent name: ")
|
|
257
|
+
);
|
|
258
|
+
if (!agentName.trim()) {
|
|
259
|
+
throw new Error("Agent name cannot be empty");
|
|
260
|
+
}
|
|
261
|
+
await createBackgroundAgentProject(agentName.trim());
|
|
262
|
+
console.log(
|
|
263
|
+
import_chalk.default.green(
|
|
264
|
+
`
|
|
265
|
+
\u{1F389} Successfully created background agent ${import_chalk.default.bold(agentName)}!`
|
|
266
|
+
)
|
|
267
|
+
);
|
|
268
|
+
console.log(import_chalk.default.gray(`\u{1F4CD} Located at ${import_path.default.join(getWorkingDirectory(), agentName)}`));
|
|
269
|
+
console.log(import_chalk.default.yellow("\n\u{1F4A1} Next steps:"));
|
|
270
|
+
console.log(import_chalk.default.yellow(` 1. cd ${agentName}`));
|
|
271
|
+
console.log(import_chalk.default.yellow(" 2. npm install"));
|
|
272
|
+
console.log(import_chalk.default.yellow(" 3. Configure your env.json"));
|
|
273
|
+
console.log(import_chalk.default.yellow(" 4. npm run dev"));
|
|
274
|
+
console.log(import_chalk.default.yellow(" 5. Start developing your agent!"));
|
|
275
|
+
}
|
|
276
|
+
} else if (boilerplateType === "package") {
|
|
277
|
+
const packageName = import_readline_sync.default.question(
|
|
278
|
+
import_chalk.default.yellow("\u{1F4E6} Enter package name: ")
|
|
279
|
+
);
|
|
280
|
+
if (!packageName.trim()) {
|
|
281
|
+
throw new Error("Package name cannot be empty");
|
|
282
|
+
}
|
|
283
|
+
const finalPackageName = await checkPackageNameAndPrompt(`@microfox/${packageName.trim()}`);
|
|
284
|
+
await createPackageProject(finalPackageName);
|
|
285
|
+
const simpleName = finalPackageName.includes("/") ? finalPackageName.split("/")[1] : finalPackageName;
|
|
286
|
+
console.log(
|
|
287
|
+
import_chalk.default.green(
|
|
288
|
+
`
|
|
289
|
+
\u{1F389} Successfully created package ${import_chalk.default.bold(finalPackageName)}!`
|
|
290
|
+
)
|
|
291
|
+
);
|
|
292
|
+
console.log(import_chalk.default.gray(`\u{1F4CD} Located at ${import_path.default.join(getWorkingDirectory(), simpleName)}`));
|
|
293
|
+
console.log(import_chalk.default.yellow("\n\u{1F4A1} Next steps:"));
|
|
294
|
+
console.log(import_chalk.default.yellow(` 1. cd ${simpleName}`));
|
|
295
|
+
console.log(import_chalk.default.yellow(" 2. npm install"));
|
|
296
|
+
console.log(import_chalk.default.yellow(" 3. npm run build"));
|
|
297
|
+
console.log(import_chalk.default.yellow(" 4. npm test"));
|
|
298
|
+
console.log(import_chalk.default.yellow(" 5. Start developing your SDK!"));
|
|
299
|
+
console.log(
|
|
300
|
+
import_chalk.default.gray(
|
|
301
|
+
`
|
|
302
|
+
\u{1F4DA} Your package is ready to be published to npm as "${finalPackageName}"`
|
|
303
|
+
)
|
|
304
|
+
);
|
|
305
|
+
} else {
|
|
306
|
+
console.log(import_chalk.default.red('Invalid boilerplate type selected. Please choose "package" or "agent".'));
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
var kickstartCommand = new import_commander.Command("kickstart").description("Kickstart a new TypeScript SDK or agent package").action(async () => {
|
|
310
|
+
try {
|
|
311
|
+
console.log(import_chalk.default.blue("\u{1F680} Package Kickstarter\n"));
|
|
312
|
+
await kickstartAction();
|
|
313
|
+
} catch (error) {
|
|
314
|
+
console.error(import_chalk.default.red("\u274C Error:"), error instanceof Error ? error.message : String(error));
|
|
315
|
+
process.exit(1);
|
|
316
|
+
}
|
|
317
|
+
});
|
|
318
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
319
|
+
0 && (module.exports = {
|
|
320
|
+
kickstartCommand
|
|
321
|
+
});
|
|
322
|
+
//# sourceMappingURL=kickstart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/commands/kickstart.ts","../../src/utils/getProjectRoot.ts","../../src/utils/npmChecker.ts"],"sourcesContent":["import { Command } from 'commander';\nimport fs from 'fs';\nimport path from 'path';\nimport chalk from 'chalk';\nimport readlineSync from 'readline-sync';\nimport inquirer from 'inquirer';\nimport { getWorkingDirectory } from '../utils/getProjectRoot';\nimport { checkPackageNameAndPrompt } from '../utils/npmChecker';\n\nasync function createAgentProject(agentName: string): Promise<void> {\n const workingDir = getWorkingDirectory();\n const agentDir = path.join(workingDir, agentName);\n\n if (fs.existsSync(agentDir)) {\n throw new Error(`Directory already exists at ${agentDir}`);\n }\n\n console.log(\n chalk.blue(\n `🚀 Creating agent ${chalk.bold(agentName)} at ${agentDir}\\n`,\n ),\n );\n\n fs.mkdirSync(agentDir, { recursive: true });\n\n const templatePath = path.resolve(__dirname, 'agent-template.txt');\n const templateContent = fs.readFileSync(templatePath, 'utf-8');\n\n const fileSections = templateContent.split('--- filename: ').slice(1);\n\n for (const section of fileSections) {\n const lines = section.split('\\n');\n const filePath = lines.shift()!.trim();\n const content = lines.join('\\n').replace(/<%= agentName %>/g, agentName);\n \n const destPath = path.join(agentDir, filePath);\n const destDir = path.dirname(destPath);\n\n if (!fs.existsSync(destDir)) {\n fs.mkdirSync(destDir, { recursive: true });\n }\n\n fs.writeFileSync(destPath, content);\n console.log(chalk.green(`✅ Created ${filePath}`));\n }\n}\n\nasync function createPackageProject(packageName: string): Promise<void> {\n const simpleName = packageName.includes('/')\n ? packageName.split('/')[1]\n : packageName;\n const titleName = simpleName\n .split('-')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n const description = `A TypeScript SDK for ${titleName}.`;\n const className = simpleName.split('-').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join('') + 'Sdk';\n\n const workingDir = getWorkingDirectory();\n const packageDir = path.join(workingDir, simpleName);\n\n if (fs.existsSync(packageDir)) {\n throw new Error(`Directory already exists at ${packageDir}`);\n }\n\n console.log(\n chalk.blue(\n `🚀 Creating package ${chalk.bold(packageName)} at ${packageDir}\\n`,\n ),\n );\n \n fs.mkdirSync(packageDir, { recursive: true });\n\n const templatePath = path.resolve(__dirname, 'package-template.txt');\n const templateContent = fs.readFileSync(templatePath, 'utf-8');\n\n const fileSections = templateContent.split('--- filename: ').slice(1);\n\n for (const section of fileSections) {\n const lines = section.split('\\n');\n const filePath = lines.shift()!.trim().replace(/<%= simpleName %>/g, simpleName);\n let content = lines.join('\\n');\n\n content = content.replace(/<%= packageName %>/g, packageName);\n content = content.replace(/<%= simpleName %>/g, simpleName);\n content = content.replace(/<%= titleName %>/g, titleName);\n content = content.replace(/<%= description %>/g, description);\n content = content.replace(/<%= className %>/g, className);\n\n const destPath = path.join(packageDir, filePath);\n const destDir = path.dirname(destPath);\n\n if (!fs.existsSync(destDir)) {\n fs.mkdirSync(destDir, { recursive: true });\n }\n\n fs.writeFileSync(destPath, content);\n console.log(chalk.green(`✅ Created ${filePath}`));\n }\n\n const docsDir = path.join(packageDir, 'docs');\n const docsConstructors = path.join(docsDir, 'constructors');\n const docsFunctions = path.join(docsDir, 'functions');\n\n fs.mkdirSync(docsDir, { recursive: true });\n fs.mkdirSync(docsConstructors, { recursive: true });\n fs.mkdirSync(docsFunctions, { recursive: true });\n}\n\nasync function createBackgroundAgentProject(agentName: string): Promise<void> {\n const workingDir = getWorkingDirectory();\n const agentDir = path.join(workingDir, agentName);\n \n if (fs.existsSync(agentDir)) {\n throw new Error(`Directory already exists at ${agentDir}`);\n }\n \n console.log(\n chalk.blue(\n `🚀 Creating background agent ${chalk.bold(agentName)} at ${agentDir}\\n`,\n ),\n );\n \n fs.mkdirSync(agentDir, { recursive: true });\n \n const templateDir = path.resolve(__dirname, 'background-agent');\n \n const copyTemplates = (src: string, dest: string) => {\n const entries = fs.readdirSync(src, { withFileTypes: true });\n for (const entry of entries) {\n const srcPath = path.join(src, entry.name);\n const destPath = path.join(dest, entry.name.replace(/\\.txt$/, ''));\n \n if (entry.isDirectory()) {\n fs.mkdirSync(destPath, { recursive: true });\n copyTemplates(srcPath, destPath);\n } else if (entry.name.endsWith('.txt')) {\n const templateContent = fs.readFileSync(srcPath, 'utf-8');\n const content = templateContent.replace(/<%= agentName %>/g, agentName);\n fs.writeFileSync(destPath, content);\n console.log(chalk.green(`✅ Created ${path.relative(agentDir, destPath)}`));\n }\n }\n };\n \n copyTemplates(templateDir, agentDir);\n}\n\nasync function kickstartAction(): Promise<void> {\n console.log(chalk.cyan(\"🚀 Let's kickstart your new project!\\n\"));\n\n const { boilerplateType } = await inquirer.prompt([\n {\n type: 'list',\n name: 'boilerplateType',\n message: 'Select boilerplate type:',\n choices: ['package', 'agent'],\n },\n ]);\n\n if (!boilerplateType) {\n console.log(chalk.yellow('Operation cancelled.'));\n return;\n }\n\n if (boilerplateType === 'agent') {\n const { agentType } = await inquirer.prompt([\n {\n type: 'list',\n name: 'agentType',\n message: 'Select agent type:',\n choices: ['plain', 'background'],\n },\n ]);\n \n if(agentType === 'plain'){\n const agentName = readlineSync.question(\n chalk.yellow('📦 Enter agent name: '),\n );\n \n if (!agentName.trim()) {\n throw new Error('Agent name cannot be empty');\n }\n await createAgentProject(agentName.trim());\n \n console.log(\n chalk.green(\n `\\n🎉 Successfully created agent ${chalk.bold(agentName)}!`,\n ),\n );\n console.log(chalk.gray(`📍 Located at ${path.join(getWorkingDirectory(), agentName)}`));\n console.log(chalk.yellow('\\n💡 Next steps:'));\n console.log(chalk.yellow(` 1. cd ${agentName}`));\n console.log(chalk.yellow(' 2. npm install'));\n console.log(chalk.yellow(' 3. Configure your env.json'));\n console.log(chalk.yellow(' 4. npm run dev'));\n console.log(chalk.yellow(' 5. Start developing your agent!'));\n\n } else if (agentType === 'background') {\n const agentName = readlineSync.question(\n chalk.yellow('📦 Enter agent name: '),\n );\n \n if (!agentName.trim()) {\n throw new Error('Agent name cannot be empty');\n }\n await createBackgroundAgentProject(agentName.trim());\n\n console.log(\n chalk.green(\n `\\n🎉 Successfully created background agent ${chalk.bold(agentName)}!`,\n ),\n );\n console.log(chalk.gray(`📍 Located at ${path.join(getWorkingDirectory(), agentName)}`));\n console.log(chalk.yellow('\\n💡 Next steps:'));\n console.log(chalk.yellow(` 1. cd ${agentName}`));\n console.log(chalk.yellow(' 2. npm install'));\n console.log(chalk.yellow(' 3. Configure your env.json'));\n console.log(chalk.yellow(' 4. npm run dev'));\n console.log(chalk.yellow(' 5. Start developing your agent!'));\n }\n\n } else if (boilerplateType === 'package') {\n // Ask for package name interactively\n const packageName = readlineSync.question(\n chalk.yellow('📦 Enter package name: '),\n );\n\n if (!packageName.trim()) {\n throw new Error('Package name cannot be empty');\n }\n\n // Check npm availability and get final package name\n const finalPackageName = await checkPackageNameAndPrompt(`@microfox/${packageName.trim()}`);\n await createPackageProject(finalPackageName);\n\n const simpleName = finalPackageName.includes('/')\n ? finalPackageName.split('/')[1]\n : finalPackageName;\n\n console.log(\n chalk.green(\n `\\n🎉 Successfully created package ${chalk.bold(finalPackageName)}!`,\n ),\n );\n console.log(chalk.gray(`📍 Located at ${path.join(getWorkingDirectory(), simpleName)}`));\n console.log(chalk.yellow('\\n💡 Next steps:'));\n console.log(chalk.yellow(` 1. cd ${simpleName}`));\n console.log(chalk.yellow(' 2. npm install'));\n console.log(chalk.yellow(' 3. npm run build'));\n console.log(chalk.yellow(' 4. npm test'));\n console.log(chalk.yellow(' 5. Start developing your SDK!'));\n console.log(\n chalk.gray(\n `\\n📚 Your package is ready to be published to npm as \"${finalPackageName}\"`,\n ),\n );\n } else {\n console.log(chalk.red('Invalid boilerplate type selected. Please choose \"package\" or \"agent\".'));\n }\n}\n\nexport const kickstartCommand = new Command('kickstart')\n .description('Kickstart a new TypeScript SDK or agent package')\n .action(async () => {\n try {\n console.log(chalk.blue('🚀 Package Kickstarter\\n'));\n await kickstartAction();\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n","export const getWorkingDirectory = () => {\n // Return the current working directory where the CLI is executed\n // This allows creating packages in any directory\n return process.cwd();\n}; ","export async function isPackageNameAvailable(\n packageName: string,\n): Promise<boolean> {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 5000);\n\n const response = await fetch(`https://registry.npmjs.org/${packageName}`, {\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n // If we get a 200 response, the package exists\n if (response.ok) {\n return false;\n }\n\n // If we get a 404, the package doesn't exist (available)\n if (response.status === 404) {\n return true;\n }\n\n // For other status codes, assume unavailable for safety\n console.warn(\n `Warning: Unexpected status ${response.status} when checking npm availability for ${packageName}. Proceeding with caution.`,\n );\n return false;\n } catch (error: any) {\n // For network errors, timeouts, etc., assume unavailable for safety\n if (error.name === 'AbortError') {\n console.warn(\n `Warning: Timeout when checking npm availability for ${packageName}. Proceeding with caution.`,\n );\n } else {\n console.warn(\n `Warning: Could not check npm availability for ${packageName}. Proceeding with caution.`,\n );\n }\n return false;\n }\n}\n\nexport async function checkPackageNameAndPrompt(\n packageName: string,\n): Promise<string> {\n const readlineSync = require('readline-sync');\n let currentName = packageName?.startsWith('@microfox/')\n ? packageName\n : `@microfox/${packageName}`;\n\n while (true) {\n console.log(`🔍 Checking npm availability for \"${currentName}\"...`);\n\n const isAvailable = await isPackageNameAvailable(currentName);\n\n if (isAvailable) {\n console.log(`✅ Package name \"${currentName}\" is available on npm!`);\n return currentName;\n } else {\n console.log(`❌ Package name \"${currentName}\" is already taken on npm.`);\n\n const newName = readlineSync.question(\n 'Please enter a new package name: ',\n );\n if (!newName || newName.trim() === '') {\n console.log('❌ Invalid package name. Please try again.');\n continue;\n }\n\n currentName = newName.trim();\n }\n }\n}\n"],"mappings":"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","names":["readlineSync","path","fs","chalk","inquirer","readlineSync"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __create = Object.create;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
8
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __export = (target, all) => {
|
|
10
|
+
for (var name in all)
|
|
11
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from))
|
|
16
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
17
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
18
|
+
}
|
|
19
|
+
return to;
|
|
20
|
+
};
|
|
21
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
24
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
25
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
26
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
27
|
+
mod
|
|
28
|
+
));
|
|
29
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
|
+
|
|
31
|
+
// src/commands/push.ts
|
|
32
|
+
var push_exports = {};
|
|
33
|
+
__export(push_exports, {
|
|
34
|
+
pushCommand: () => pushCommand
|
|
35
|
+
});
|
|
36
|
+
module.exports = __toCommonJS(push_exports);
|
|
37
|
+
var import_commander = require("commander");
|
|
38
|
+
var import_fs = __toESM(require("fs"));
|
|
39
|
+
var import_path = __toESM(require("path"));
|
|
40
|
+
var import_chalk = __toESM(require("chalk"));
|
|
41
|
+
var import_axios = __toESM(require("axios"));
|
|
42
|
+
var import_micromatch = __toESM(require("micromatch"));
|
|
43
|
+
var API_ENDPOINT = "https://staging-cicd.microfox.app/api/deployments/new-agent-cli";
|
|
44
|
+
var getDirectoryFiles = (dir, basePath = "", ignorePatterns) => {
|
|
45
|
+
const structure = [];
|
|
46
|
+
const items = import_fs.default.readdirSync(dir, { withFileTypes: true });
|
|
47
|
+
for (const item of items) {
|
|
48
|
+
const relativePath = import_path.default.join(basePath, item.name);
|
|
49
|
+
if (import_micromatch.default.isMatch(relativePath, ignorePatterns)) {
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (item.isDirectory()) {
|
|
53
|
+
structure.push(...getDirectoryFiles(import_path.default.join(dir, item.name), relativePath, ignorePatterns));
|
|
54
|
+
} else {
|
|
55
|
+
structure.push({
|
|
56
|
+
type: "file",
|
|
57
|
+
name: item.name,
|
|
58
|
+
path: relativePath.replace(/\\/g, "/"),
|
|
59
|
+
content: import_fs.default.readFileSync(import_path.default.join(dir, item.name), "utf-8")
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return structure;
|
|
64
|
+
};
|
|
65
|
+
async function pushAction() {
|
|
66
|
+
const cwd = process.cwd();
|
|
67
|
+
const microfoxConfigPath = import_path.default.join(cwd, "microfox.json");
|
|
68
|
+
if (!import_fs.default.existsSync(microfoxConfigPath)) {
|
|
69
|
+
console.error(import_chalk.default.red("\u274C Error: `microfox.json` not found in the current directory."));
|
|
70
|
+
console.log(import_chalk.default.yellow("This command must be run from the root of an agent project."));
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
console.log(import_chalk.default.cyan("\u{1F680} Pushing your agent to Microfox..."));
|
|
74
|
+
const microfoxConfig = JSON.parse(import_fs.default.readFileSync(microfoxConfigPath, "utf-8"));
|
|
75
|
+
let agentApiKey;
|
|
76
|
+
const envPath = import_path.default.join(cwd, "env.json");
|
|
77
|
+
if (import_fs.default.existsSync(envPath)) {
|
|
78
|
+
try {
|
|
79
|
+
const envConfig = JSON.parse(import_fs.default.readFileSync(envPath, "utf-8"));
|
|
80
|
+
agentApiKey = envConfig.AGENT_API_KEY;
|
|
81
|
+
} catch (e) {
|
|
82
|
+
console.warn(import_chalk.default.yellow("\u26A0\uFE0F Could not read or parse `env.json`. The AGENT_API_KEY will not be sent."));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
const stage = microfoxConfig.stage || "prod";
|
|
86
|
+
const ignored = microfoxConfig.ignored || [];
|
|
87
|
+
const defaultIgnore = ["node_modules/**", ".git/**", "dist/**", ".build/**", ".serverless/**", ".DS_Store", "package-lock.json", "pnpm-lock.yaml"];
|
|
88
|
+
const allIgnored = [...defaultIgnore, ...ignored];
|
|
89
|
+
const files = getDirectoryFiles(cwd, "", allIgnored);
|
|
90
|
+
try {
|
|
91
|
+
console.log(import_chalk.default.blue("\u{1F4E6} Bundling and deploying your agent..."));
|
|
92
|
+
const response = await import_axios.default.post(
|
|
93
|
+
API_ENDPOINT,
|
|
94
|
+
{
|
|
95
|
+
stage,
|
|
96
|
+
isLocal: false,
|
|
97
|
+
dir: files
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
headers: {
|
|
101
|
+
"x-agent-api-key": agentApiKey
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
);
|
|
105
|
+
if (response.status === 200) {
|
|
106
|
+
console.log(import_chalk.default.green("\u2705 Deployment successful!"));
|
|
107
|
+
console.log(import_chalk.default.green(` Run ID: ${response.data.runId}`));
|
|
108
|
+
console.log(import_chalk.default.green(` Message: ${response.data.message}`));
|
|
109
|
+
} else {
|
|
110
|
+
console.error(import_chalk.default.red(`\u274C Deployment failed with status: ${response.status}`));
|
|
111
|
+
console.error(response.data);
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
} catch (error) {
|
|
115
|
+
console.error(import_chalk.default.red("\u274C An error occurred during deployment:"));
|
|
116
|
+
if (import_axios.default.isAxiosError(error) && error.response) {
|
|
117
|
+
console.error(import_chalk.default.red(` Status: ${error.response.status}`));
|
|
118
|
+
console.error(import_chalk.default.red(` Data: ${JSON.stringify(error.response.data, null, 2)}`));
|
|
119
|
+
} else {
|
|
120
|
+
console.error(error);
|
|
121
|
+
}
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
var pushCommand = new import_commander.Command("push").description("Deploy your agent to the Microfox platform").action(async () => {
|
|
126
|
+
try {
|
|
127
|
+
await pushAction();
|
|
128
|
+
} catch (error) {
|
|
129
|
+
console.error(import_chalk.default.red("\u274C Error:"), error instanceof Error ? error.message : String(error));
|
|
130
|
+
process.exit(1);
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
134
|
+
0 && (module.exports = {
|
|
135
|
+
pushCommand
|
|
136
|
+
});
|
|
137
|
+
//# sourceMappingURL=push.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/commands/push.ts"],"sourcesContent":["import { Command } from 'commander';\nimport fs from 'fs';\nimport path from 'path';\nimport chalk from 'chalk';\nimport axios from 'axios';\nimport micromatch from 'micromatch';\n\ninterface FileDirectory {\n type: 'file' | 'directory';\n name: string;\n path: string;\n content?: string;\n children?: FileDirectory[];\n}\n\nconst API_ENDPOINT = 'https://staging-cicd.microfox.app/api/deployments/new-agent-cli';\n\nconst getDirectoryFiles = (dir: string, basePath: string = '', ignorePatterns: string[]): FileDirectory[] => {\n const structure: FileDirectory[] = [];\n const items = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const item of items) {\n const relativePath = path.join(basePath, item.name);\n if (micromatch.isMatch(relativePath, ignorePatterns)) {\n continue;\n }\n\n if (item.isDirectory()) {\n structure.push(...getDirectoryFiles(path.join(dir, item.name), relativePath, ignorePatterns));\n } else {\n structure.push({\n type: 'file',\n name: item.name,\n path: relativePath.replace(/\\\\/g, '/'),\n content: fs.readFileSync(path.join(dir, item.name), 'utf-8'),\n });\n }\n }\n return structure;\n};\n\nasync function pushAction(): Promise<void> {\n const cwd = process.cwd();\n const microfoxConfigPath = path.join(cwd, 'microfox.json');\n\n if (!fs.existsSync(microfoxConfigPath)) {\n console.error(chalk.red('❌ Error: `microfox.json` not found in the current directory.'));\n console.log(chalk.yellow('This command must be run from the root of an agent project.'));\n process.exit(1);\n }\n\n console.log(chalk.cyan('🚀 Pushing your agent to Microfox...'));\n\n const microfoxConfig = JSON.parse(fs.readFileSync(microfoxConfigPath, 'utf-8'));\n\n let agentApiKey: string | undefined;\n const envPath = path.join(cwd, 'env.json');\n if (fs.existsSync(envPath)) {\n try {\n const envConfig = JSON.parse(fs.readFileSync(envPath, 'utf-8'));\n agentApiKey = envConfig.AGENT_API_KEY;\n } catch (e) {\n console.warn(chalk.yellow('⚠️ Could not read or parse `env.json`. The AGENT_API_KEY will not be sent.'));\n }\n }\n\n const stage = microfoxConfig.stage || 'prod';\n const ignored: string[] = microfoxConfig.ignored || [];\n\n const defaultIgnore = ['node_modules/**', '.git/**', 'dist/**', '.build/**', '.serverless/**', '.DS_Store', 'package-lock.json', 'pnpm-lock.yaml'];\n const allIgnored = [...defaultIgnore, ...ignored];\n\n const files: FileDirectory[] = getDirectoryFiles(cwd, '', allIgnored);\n\n // console.log(JSON.stringify(files, null, 2));\n \n try {\n console.log(chalk.blue('📦 Bundling and deploying your agent...'));\n const response = await axios.post(\n API_ENDPOINT,\n {\n stage,\n isLocal: false,\n dir: files,\n },\n {\n headers: {\n 'x-agent-api-key': agentApiKey,\n },\n },\n );\n\n if (response.status === 200) {\n console.log(chalk.green('✅ Deployment successful!'));\n console.log(chalk.green(` Run ID: ${response.data.runId}`));\n console.log(chalk.green(` Message: ${response.data.message}`));\n } else {\n console.error(chalk.red(`❌ Deployment failed with status: ${response.status}`));\n console.error(response.data);\n process.exit(1);\n }\n } catch (error) {\n console.error(chalk.red('❌ An error occurred during deployment:'));\n if (axios.isAxiosError(error) && error.response) {\n console.error(chalk.red(` Status: ${error.response.status}`));\n console.error(chalk.red(` Data: ${JSON.stringify(error.response.data, null, 2)}`));\n } else {\n console.error(error);\n }\n process.exit(1);\n }\n}\n\nexport const pushCommand = new Command('push')\n .description('Deploy your agent to the Microfox platform')\n .action(async () => {\n try {\n await pushAction();\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n }); "],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAwB;AACxB,gBAAe;AACf,kBAAiB;AACjB,mBAAkB;AAClB,mBAAkB;AAClB,wBAAuB;AAUvB,IAAM,eAAe;AAErB,IAAM,oBAAoB,CAAC,KAAa,WAAmB,IAAI,mBAA8C;AAC3G,QAAM,YAA6B,CAAC;AACpC,QAAM,QAAQ,UAAAA,QAAG,YAAY,KAAK,EAAE,eAAe,KAAK,CAAC;AAEzD,aAAW,QAAQ,OAAO;AACxB,UAAM,eAAe,YAAAC,QAAK,KAAK,UAAU,KAAK,IAAI;AAClD,QAAI,kBAAAC,QAAW,QAAQ,cAAc,cAAc,GAAG;AACpD;AAAA,IACF;AAEA,QAAI,KAAK,YAAY,GAAG;AACtB,gBAAU,KAAK,GAAG,kBAAkB,YAAAD,QAAK,KAAK,KAAK,KAAK,IAAI,GAAG,cAAc,cAAc,CAAC;AAAA,IAC9F,OAAO;AACL,gBAAU,KAAK;AAAA,QACb,MAAM;AAAA,QACN,MAAM,KAAK;AAAA,QACX,MAAM,aAAa,QAAQ,OAAO,GAAG;AAAA,QACrC,SAAS,UAAAD,QAAG,aAAa,YAAAC,QAAK,KAAK,KAAK,KAAK,IAAI,GAAG,OAAO;AAAA,MAC7D,CAAC;AAAA,IACH;AAAA,EACF;AACA,SAAO;AACT;AAEA,eAAe,aAA4B;AACzC,QAAM,MAAM,QAAQ,IAAI;AACxB,QAAM,qBAAqB,YAAAA,QAAK,KAAK,KAAK,eAAe;AAEzD,MAAI,CAAC,UAAAD,QAAG,WAAW,kBAAkB,GAAG;AACtC,YAAQ,MAAM,aAAAG,QAAM,IAAI,mEAA8D,CAAC;AACvF,YAAQ,IAAI,aAAAA,QAAM,OAAO,6DAA6D,CAAC;AACvF,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,UAAQ,IAAI,aAAAA,QAAM,KAAK,6CAAsC,CAAC;AAE9D,QAAM,iBAAiB,KAAK,MAAM,UAAAH,QAAG,aAAa,oBAAoB,OAAO,CAAC;AAE9E,MAAI;AACJ,QAAM,UAAU,YAAAC,QAAK,KAAK,KAAK,UAAU;AACzC,MAAI,UAAAD,QAAG,WAAW,OAAO,GAAG;AAC1B,QAAI;AACF,YAAM,YAAY,KAAK,MAAM,UAAAA,QAAG,aAAa,SAAS,OAAO,CAAC;AAC9D,oBAAc,UAAU;AAAA,IAC1B,SAAS,GAAG;AACV,cAAQ,KAAK,aAAAG,QAAM,OAAO,uFAA6E,CAAC;AAAA,IAC1G;AAAA,EACF;AAEA,QAAM,QAAQ,eAAe,SAAS;AACtC,QAAM,UAAoB,eAAe,WAAW,CAAC;AAErD,QAAM,gBAAgB,CAAC,mBAAmB,WAAW,WAAW,aAAa,kBAAkB,aAAa,qBAAqB,gBAAgB;AACjJ,QAAM,aAAa,CAAC,GAAG,eAAe,GAAG,OAAO;AAEhD,QAAM,QAAyB,kBAAkB,KAAK,IAAI,UAAU;AAIpE,MAAI;AACF,YAAQ,IAAI,aAAAA,QAAM,KAAK,gDAAyC,CAAC;AACjE,UAAM,WAAW,MAAM,aAAAC,QAAM;AAAA,MAC3B;AAAA,MACA;AAAA,QACE;AAAA,QACA,SAAS;AAAA,QACT,KAAK;AAAA,MACP;AAAA,MACA;AAAA,QACE,SAAS;AAAA,UACP,mBAAmB;AAAA,QACrB;AAAA,MACF;AAAA,IACF;AAEA,QAAI,SAAS,WAAW,KAAK;AAC3B,cAAQ,IAAI,aAAAD,QAAM,MAAM,+BAA0B,CAAC;AACnD,cAAQ,IAAI,aAAAA,QAAM,MAAM,cAAc,SAAS,KAAK,KAAK,EAAE,CAAC;AAC5D,cAAQ,IAAI,aAAAA,QAAM,MAAM,eAAe,SAAS,KAAK,OAAO,EAAE,CAAC;AAAA,IACjE,OAAO;AACL,cAAQ,MAAM,aAAAA,QAAM,IAAI,yCAAoC,SAAS,MAAM,EAAE,CAAC;AAC9E,cAAQ,MAAM,SAAS,IAAI;AAC3B,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,MAAM,aAAAA,QAAM,IAAI,6CAAwC,CAAC;AACjE,QAAI,aAAAC,QAAM,aAAa,KAAK,KAAK,MAAM,UAAU;AAC/C,cAAQ,MAAM,aAAAD,QAAM,IAAI,cAAc,MAAM,SAAS,MAAM,EAAE,CAAC;AAC9D,cAAQ,MAAM,aAAAA,QAAM,IAAI,YAAY,KAAK,UAAU,MAAM,SAAS,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC;AAAA,IACrF,OAAO;AACL,cAAQ,MAAM,KAAK;AAAA,IACrB;AACA,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAEO,IAAM,cAAc,IAAI,yBAAQ,MAAM,EACxC,YAAY,4CAA4C,EACxD,OAAO,YAAY;AAChB,MAAI;AACA,UAAM,WAAW;AAAA,EACrB,SAAS,OAAO;AACZ,YAAQ,MAAM,aAAAA,QAAM,IAAI,eAAU,GAAG,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAC3F,YAAQ,KAAK,CAAC;AAAA,EAClB;AACJ,CAAC;","names":["fs","path","micromatch","chalk","axios"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|