task-o-matic 0.0.4 ā 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/bin.js +0 -0
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +185 -59
- package/dist/lib/better-t-stack-cli.d.ts +1 -0
- package/dist/lib/better-t-stack-cli.d.ts.map +1 -1
- package/dist/lib/better-t-stack-cli.js +8 -2
- package/dist/mcp/server.js +0 -0
- package/dist/types/options.d.ts +1 -0
- package/dist/types/options.d.ts.map +1 -1
- package/package.json +3 -3
package/dist/cli/bin.js
CHANGED
|
File without changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/commands/workflow.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/commands/workflow.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2BpC,eAAO,MAAM,eAAe,SAiExB,CAAC"}
|
|
@@ -10,6 +10,7 @@ const chalk_1 = __importDefault(require("chalk"));
|
|
|
10
10
|
const fs_1 = require("fs");
|
|
11
11
|
const path_1 = require("path");
|
|
12
12
|
const config_1 = require("../lib/config");
|
|
13
|
+
const better_t_stack_cli_1 = require("../lib/better-t-stack-cli");
|
|
13
14
|
const prd_1 = require("../services/prd");
|
|
14
15
|
const tasks_1 = require("../services/tasks");
|
|
15
16
|
const workflow_ai_assistant_1 = require("../services/workflow-ai-assistant");
|
|
@@ -72,7 +73,7 @@ exports.workflowCommand = new commander_1.Command("workflow")
|
|
|
72
73
|
*/
|
|
73
74
|
async function stepInitialize(state, aiOptions, streamingOptions) {
|
|
74
75
|
console.log(chalk_1.default.blue.bold("\nš¦ Step 1: Project Initialization\n"));
|
|
75
|
-
// Check if already initialized
|
|
76
|
+
// Check if already initialized in current directory
|
|
76
77
|
const taskOMaticDir = config_1.configManager.getTaskOMaticDir();
|
|
77
78
|
const alreadyInitialized = (0, fs_1.existsSync)(taskOMaticDir);
|
|
78
79
|
if (alreadyInitialized) {
|
|
@@ -91,25 +92,127 @@ async function stepInitialize(state, aiOptions, streamingOptions) {
|
|
|
91
92
|
state.currentStep = "define-prd";
|
|
92
93
|
return;
|
|
93
94
|
}
|
|
95
|
+
const projectName = await (0, workflow_prompts_1.textInputPrompt)("What is the name of your project?", "my-app");
|
|
96
|
+
// IMMEDIATE DIRECTORY CREATION AND SWITCH
|
|
97
|
+
const projectDir = (0, path_1.resolve)(process.cwd(), projectName);
|
|
98
|
+
if (!(0, fs_1.existsSync)(projectDir)) {
|
|
99
|
+
(0, fs_1.mkdirSync)(projectDir, { recursive: true });
|
|
100
|
+
console.log(chalk_1.default.green(`\nā Created directory: ${projectName}`));
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
console.log(chalk_1.default.yellow(`\nā Directory ${projectName} already exists`));
|
|
104
|
+
}
|
|
105
|
+
console.log(chalk_1.default.cyan(` š Switching to project directory: ${projectDir}\n`));
|
|
106
|
+
process.chdir(projectDir);
|
|
107
|
+
config_1.configManager.setWorkingDirectory(projectDir);
|
|
108
|
+
state.projectDir = projectDir;
|
|
109
|
+
// Initialize task-o-matic in the NEW directory
|
|
110
|
+
console.log(chalk_1.default.cyan(" Initializing task-o-matic...\n"));
|
|
111
|
+
const newTaskOMaticDir = (0, path_1.join)(projectDir, ".task-o-matic");
|
|
112
|
+
if (!(0, fs_1.existsSync)(newTaskOMaticDir)) {
|
|
113
|
+
(0, fs_1.mkdirSync)(newTaskOMaticDir, { recursive: true });
|
|
114
|
+
["tasks", "prd", "logs"].forEach((dir) => {
|
|
115
|
+
(0, fs_1.mkdirSync)((0, path_1.join)(newTaskOMaticDir, dir), { recursive: true });
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
// AI Configuration Step - ALWAYS ask for this first
|
|
119
|
+
console.log(chalk_1.default.blue.bold("\nš¤ Step 1.1: AI Configuration\n"));
|
|
120
|
+
const aiProvider = await (0, workflow_prompts_1.selectPrompt)("Select AI Provider:", [
|
|
121
|
+
{ name: "OpenRouter", value: "openrouter" },
|
|
122
|
+
{ name: "Anthropic", value: "anthropic" },
|
|
123
|
+
{ name: "OpenAI", value: "openai" },
|
|
124
|
+
{ name: "Custom (e.g. local LLM)", value: "custom" },
|
|
125
|
+
]);
|
|
126
|
+
let aiProviderUrl;
|
|
127
|
+
if (aiProvider === "custom") {
|
|
128
|
+
aiProviderUrl = await (0, workflow_prompts_1.textInputPrompt)("Enter Custom Provider URL:", "http://localhost:11434/v1");
|
|
129
|
+
}
|
|
130
|
+
const defaultModel = aiProvider === "openrouter"
|
|
131
|
+
? "anthropic/claude-3.5-sonnet"
|
|
132
|
+
: aiProvider === "anthropic"
|
|
133
|
+
? "claude-3-5-sonnet-20240620"
|
|
134
|
+
: aiProvider === "openai"
|
|
135
|
+
? "gpt-4o"
|
|
136
|
+
: "llama3";
|
|
137
|
+
const aiModel = await (0, workflow_prompts_1.textInputPrompt)("Enter AI Model:", defaultModel);
|
|
138
|
+
// Check/Ask for API Key
|
|
139
|
+
const providerKeyName = aiProvider === "openai"
|
|
140
|
+
? "OPENAI_API_KEY"
|
|
141
|
+
: aiProvider === "anthropic"
|
|
142
|
+
? "ANTHROPIC_API_KEY"
|
|
143
|
+
: aiProvider === "openrouter"
|
|
144
|
+
? "OPENROUTER_API_KEY"
|
|
145
|
+
: "AI_API_KEY";
|
|
146
|
+
// Check if key exists in current env
|
|
147
|
+
let apiKey = process.env[providerKeyName];
|
|
148
|
+
if (!apiKey) {
|
|
149
|
+
console.log(chalk_1.default.yellow(`\nā ļø No API key found for ${aiProvider}`));
|
|
150
|
+
apiKey = await (0, workflow_prompts_1.textInputPrompt)(`Enter your ${aiProvider} API Key:`);
|
|
151
|
+
}
|
|
152
|
+
// Save AI Config to .env immediately in the new project dir
|
|
153
|
+
const envPath = (0, path_1.join)(projectDir, ".env");
|
|
154
|
+
let envContent = "";
|
|
155
|
+
if ((0, fs_1.existsSync)(envPath)) {
|
|
156
|
+
envContent = (0, fs_1.readFileSync)(envPath, "utf-8");
|
|
157
|
+
}
|
|
158
|
+
if (!envContent.includes("AI_PROVIDER=")) {
|
|
159
|
+
envContent += `AI_PROVIDER=${aiProvider}\n`;
|
|
160
|
+
}
|
|
161
|
+
if (!envContent.includes("AI_MODEL=")) {
|
|
162
|
+
envContent += `AI_MODEL=${aiModel}\n`;
|
|
163
|
+
}
|
|
164
|
+
if (aiProviderUrl && !envContent.includes("AI_PROVIDER_URL=")) {
|
|
165
|
+
envContent += `AI_PROVIDER_URL=${aiProviderUrl}\n`;
|
|
166
|
+
}
|
|
167
|
+
if (!envContent.includes(`${providerKeyName}=`)) {
|
|
168
|
+
envContent += `${providerKeyName}=${apiKey}\n`;
|
|
169
|
+
}
|
|
170
|
+
(0, fs_1.writeFileSync)(envPath, envContent);
|
|
171
|
+
// Update process.env for immediate use
|
|
172
|
+
process.env.AI_PROVIDER = aiProvider;
|
|
173
|
+
process.env.AI_MODEL = aiModel;
|
|
174
|
+
process.env[providerKeyName] = apiKey;
|
|
175
|
+
if (aiProviderUrl) {
|
|
176
|
+
process.env.AI_PROVIDER_URL = aiProviderUrl;
|
|
177
|
+
}
|
|
178
|
+
// Update ConfigManager
|
|
179
|
+
config_1.configManager.setAIConfig({
|
|
180
|
+
provider: aiProvider,
|
|
181
|
+
model: aiModel,
|
|
182
|
+
apiKey: apiKey,
|
|
183
|
+
baseURL: aiProviderUrl,
|
|
184
|
+
});
|
|
185
|
+
console.log(chalk_1.default.green("ā AI Configuration saved"));
|
|
186
|
+
// Stack Configuration Step
|
|
187
|
+
console.log(chalk_1.default.blue.bold("\nš¦ Step 1.2: Stack Configuration\n"));
|
|
94
188
|
// Choose initialization method
|
|
95
|
-
let initMethod = await (0, workflow_prompts_1.selectPrompt)("How would you like to configure your project?", [
|
|
189
|
+
let initMethod = await (0, workflow_prompts_1.selectPrompt)("How would you like to configure your project stack?", [
|
|
96
190
|
{ name: "Quick start (recommended defaults)", value: "quick" },
|
|
97
191
|
{ name: "Custom configuration", value: "custom" },
|
|
98
192
|
{ name: "AI-assisted (describe your project)", value: "ai" },
|
|
99
193
|
]);
|
|
100
194
|
let config;
|
|
101
195
|
if (initMethod === "ai") {
|
|
102
|
-
console.log(chalk_1.default.cyan("\nš¤ AI-Assisted Configuration\n"));
|
|
196
|
+
console.log(chalk_1.default.cyan("\nš¤ AI-Assisted Stack Configuration\n"));
|
|
103
197
|
const description = await (0, workflow_prompts_1.textInputPrompt)("Describe your project (e.g., 'A SaaS app for team collaboration with real-time features'):");
|
|
104
198
|
console.log(chalk_1.default.gray("\n Analyzing your requirements...\n"));
|
|
105
199
|
config = await workflow_ai_assistant_1.workflowAIAssistant.assistInitConfig({
|
|
106
200
|
userDescription: description,
|
|
107
|
-
aiOptions
|
|
201
|
+
aiOptions: {
|
|
202
|
+
aiProvider,
|
|
203
|
+
aiModel,
|
|
204
|
+
aiKey: apiKey,
|
|
205
|
+
aiProviderUrl,
|
|
206
|
+
},
|
|
108
207
|
streamingOptions,
|
|
109
208
|
});
|
|
209
|
+
// Override AI's project name with user's choice
|
|
210
|
+
config.projectName = projectName;
|
|
211
|
+
// Override AI config with what we just set
|
|
212
|
+
config.aiProvider = aiProvider;
|
|
213
|
+
config.aiModel = aiModel;
|
|
110
214
|
console.log(chalk_1.default.green("\nā AI Recommendations:"));
|
|
111
215
|
console.log(chalk_1.default.gray(` Project: ${config.projectName}`));
|
|
112
|
-
console.log(chalk_1.default.gray(` AI Provider: ${config.aiProvider}`));
|
|
113
216
|
console.log(chalk_1.default.gray(` Frontend: ${config.frontend || "none"}`));
|
|
114
217
|
console.log(chalk_1.default.gray(` Backend: ${config.backend || "none"}`));
|
|
115
218
|
console.log(chalk_1.default.gray(` Database: ${config.database || "none"}`));
|
|
@@ -125,9 +228,9 @@ async function stepInitialize(state, aiOptions, streamingOptions) {
|
|
|
125
228
|
}
|
|
126
229
|
if (initMethod === "quick") {
|
|
127
230
|
config = {
|
|
128
|
-
projectName:
|
|
129
|
-
aiProvider:
|
|
130
|
-
aiModel:
|
|
231
|
+
projectName: projectName,
|
|
232
|
+
aiProvider: aiProvider,
|
|
233
|
+
aiModel: aiModel,
|
|
131
234
|
frontend: "next",
|
|
132
235
|
backend: "hono",
|
|
133
236
|
database: "sqlite",
|
|
@@ -137,14 +240,9 @@ async function stepInitialize(state, aiOptions, streamingOptions) {
|
|
|
137
240
|
}
|
|
138
241
|
else if (initMethod === "custom") {
|
|
139
242
|
config = {
|
|
140
|
-
projectName:
|
|
141
|
-
aiProvider:
|
|
142
|
-
|
|
143
|
-
"anthropic",
|
|
144
|
-
"openai",
|
|
145
|
-
"custom",
|
|
146
|
-
]),
|
|
147
|
-
aiModel: await (0, workflow_prompts_1.textInputPrompt)("AI Model:", "anthropic/claude-3.5-sonnet"),
|
|
243
|
+
projectName: projectName,
|
|
244
|
+
aiProvider: aiProvider,
|
|
245
|
+
aiModel: aiModel,
|
|
148
246
|
};
|
|
149
247
|
const shouldBootstrap = await (0, workflow_prompts_1.confirmPrompt)("Bootstrap with Better-T-Stack?", true);
|
|
150
248
|
if (shouldBootstrap) {
|
|
@@ -172,51 +270,64 @@ async function stepInitialize(state, aiOptions, streamingOptions) {
|
|
|
172
270
|
config.auth = await (0, workflow_prompts_1.confirmPrompt)("Include authentication?", true);
|
|
173
271
|
}
|
|
174
272
|
}
|
|
175
|
-
//
|
|
176
|
-
console.log(chalk_1.default.cyan("\n Initializing project...\n"));
|
|
177
|
-
// Create .task-o-matic directory
|
|
178
|
-
if (!(0, fs_1.existsSync)(taskOMaticDir)) {
|
|
179
|
-
(0, fs_1.mkdirSync)(taskOMaticDir, { recursive: true });
|
|
180
|
-
["tasks", "prd", "logs"].forEach((dir) => {
|
|
181
|
-
(0, fs_1.mkdirSync)((0, path_1.join)(taskOMaticDir, dir), { recursive: true });
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
// Save configuration
|
|
185
|
-
config_1.configManager.setConfig({
|
|
186
|
-
ai: {
|
|
187
|
-
provider: config.aiProvider, // Cast to satisfy AIProvider type
|
|
188
|
-
model: config.aiModel,
|
|
189
|
-
maxTokens: 32768,
|
|
190
|
-
temperature: 0.5,
|
|
191
|
-
},
|
|
192
|
-
});
|
|
193
|
-
config_1.configManager.save();
|
|
194
|
-
console.log(chalk_1.default.green("ā Project initialized"));
|
|
195
|
-
// Bootstrap if configured
|
|
273
|
+
// Bootstrap Logic
|
|
196
274
|
if (config.frontend || config.backend) {
|
|
197
275
|
const shouldBootstrap = await (0, workflow_prompts_1.confirmPrompt)("Bootstrap project now?", true);
|
|
198
276
|
if (shouldBootstrap) {
|
|
199
277
|
console.log(chalk_1.default.cyan("\n Bootstrapping with Better-T-Stack...\n"));
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
278
|
+
try {
|
|
279
|
+
// We are already in the project directory.
|
|
280
|
+
// We pass "." as the project name so Better-T-Stack scaffolds in the current directory.
|
|
281
|
+
const result = await (0, better_t_stack_cli_1.runBetterTStackCLI)({
|
|
282
|
+
projectName: ".", // Force scaffolding in current dir
|
|
283
|
+
frontend: config.frontend || "next",
|
|
284
|
+
backend: config.backend || "hono",
|
|
285
|
+
database: config.database || "sqlite",
|
|
286
|
+
noAuth: !config.auth,
|
|
287
|
+
// Default values for required fields that might be missing from simple config
|
|
288
|
+
orm: "drizzle",
|
|
289
|
+
packageManager: "npm",
|
|
290
|
+
runtime: "node",
|
|
291
|
+
noInstall: false,
|
|
292
|
+
noGit: false,
|
|
293
|
+
}, process.cwd());
|
|
294
|
+
if (result.success) {
|
|
295
|
+
console.log(chalk_1.default.green(`\nā ${result.message}\n`));
|
|
296
|
+
// Fix up the configuration files
|
|
297
|
+
// Because we passed ".", the config file is named ".-bts-config.json" and contains projectName: "."
|
|
298
|
+
const dotConfigPath = (0, path_1.join)(newTaskOMaticDir, ".-bts-config.json");
|
|
299
|
+
const realConfigPath = (0, path_1.join)(newTaskOMaticDir, `${projectName}-bts-config.json`);
|
|
300
|
+
const stackConfigPath = (0, path_1.join)(newTaskOMaticDir, "stack.json");
|
|
301
|
+
if ((0, fs_1.existsSync)(dotConfigPath)) {
|
|
302
|
+
const configContent = JSON.parse((0, fs_1.readFileSync)(dotConfigPath, "utf-8"));
|
|
303
|
+
configContent.projectName = projectName; // Fix the project name
|
|
304
|
+
const newContent = JSON.stringify(configContent, null, 2);
|
|
305
|
+
(0, fs_1.writeFileSync)(realConfigPath, newContent);
|
|
306
|
+
(0, fs_1.writeFileSync)(stackConfigPath, newContent);
|
|
307
|
+
// Remove the temporary dot config
|
|
308
|
+
const { unlinkSync } = require("fs");
|
|
309
|
+
unlinkSync(dotConfigPath);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
console.log(chalk_1.default.red(`\nā Bootstrap failed: ${result.message}\n`));
|
|
314
|
+
console.log(chalk_1.default.yellow("You can try running 'task-o-matic init bootstrap' manually later.\n"));
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
catch (error) {
|
|
318
|
+
console.log(chalk_1.default.red(`\nā Bootstrap failed: ${error}\n`));
|
|
319
|
+
}
|
|
213
320
|
}
|
|
214
321
|
}
|
|
322
|
+
// Save configuration
|
|
323
|
+
config_1.configManager.save();
|
|
324
|
+
console.log(chalk_1.default.green("ā Project initialized"));
|
|
215
325
|
state.initialized = true;
|
|
216
326
|
state.projectName = config.projectName;
|
|
217
327
|
state.aiConfig = {
|
|
218
|
-
provider:
|
|
219
|
-
model:
|
|
328
|
+
provider: aiProvider,
|
|
329
|
+
model: aiModel,
|
|
330
|
+
key: apiKey,
|
|
220
331
|
};
|
|
221
332
|
state.currentStep = "define-prd";
|
|
222
333
|
}
|
|
@@ -405,18 +516,33 @@ async function stepSplitTasks(state, aiOptions, streamingOptions) {
|
|
|
405
516
|
console.log(chalk_1.default.gray(" No tasks selected"));
|
|
406
517
|
return;
|
|
407
518
|
}
|
|
519
|
+
let globalSplitMethod = "interactive";
|
|
520
|
+
let globalCustomInstructions;
|
|
521
|
+
if (tasksToSplit.length > 1) {
|
|
522
|
+
globalSplitMethod = await (0, workflow_prompts_1.selectPrompt)("How would you like to split these tasks?", [
|
|
523
|
+
{ name: "Interactive (ask for each task)", value: "interactive" },
|
|
524
|
+
{ name: "Standard AI split for ALL", value: "standard" },
|
|
525
|
+
{ name: "Same custom instructions for ALL", value: "custom" },
|
|
526
|
+
]);
|
|
527
|
+
if (globalSplitMethod === "custom") {
|
|
528
|
+
globalCustomInstructions = await (0, workflow_prompts_1.textInputPrompt)("Custom instructions for ALL tasks (e.g., 'Break into 2-4 hour chunks'):", "");
|
|
529
|
+
}
|
|
530
|
+
}
|
|
408
531
|
for (const taskId of tasksToSplit) {
|
|
409
532
|
const task = state.tasks.find((t) => t.id === taskId);
|
|
410
533
|
if (!task)
|
|
411
534
|
continue;
|
|
412
535
|
console.log(chalk_1.default.cyan(`\n Splitting: ${task.title}\n`));
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
536
|
+
let splitMethod = globalSplitMethod;
|
|
537
|
+
let customInstructions = globalCustomInstructions;
|
|
538
|
+
if (globalSplitMethod === "interactive") {
|
|
539
|
+
splitMethod = await (0, workflow_prompts_1.selectPrompt)("Split method:", [
|
|
540
|
+
{ name: "Standard AI split", value: "standard" },
|
|
541
|
+
{ name: "Custom instructions", value: "custom" },
|
|
542
|
+
]);
|
|
543
|
+
if (splitMethod === "custom") {
|
|
544
|
+
customInstructions = await (0, workflow_prompts_1.textInputPrompt)("Custom instructions (e.g., 'Break into 2-4 hour chunks'):", "");
|
|
545
|
+
}
|
|
420
546
|
}
|
|
421
547
|
try {
|
|
422
548
|
const result = await tasks_1.taskService.splitTask(taskId, aiOptions, undefined, // promptOverride
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"better-t-stack-cli.d.ts","sourceRoot":"","sources":["../../src/lib/better-t-stack-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAKrC,qBAAa,mBAAmB;IACxB,aAAa,CACjB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,SAAS,EACjB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;
|
|
1
|
+
{"version":3,"file":"better-t-stack-cli.d.ts","sourceRoot":"","sources":["../../src/lib/better-t-stack-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAKrC,qBAAa,mBAAmB;IACxB,aAAa,CACjB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,SAAS,EACjB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IAqDF,OAAO,CAAC,kBAAkB;YAyBZ,aAAa;CAqB5B;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,WAAW,EACpB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAsCtE"}
|
|
@@ -68,7 +68,9 @@ class BetterTStackService {
|
|
|
68
68
|
git: config.git,
|
|
69
69
|
install: config.install,
|
|
70
70
|
addons: config.addons,
|
|
71
|
-
examples: config.examples
|
|
71
|
+
examples: config.examples && config.examples.length > 0
|
|
72
|
+
? config.examples
|
|
73
|
+
: undefined,
|
|
72
74
|
disableAnalytics: true,
|
|
73
75
|
};
|
|
74
76
|
}
|
|
@@ -114,5 +116,9 @@ async function runBetterTStackCLI(options, workingDirectory) {
|
|
|
114
116
|
examples: options.examples || [],
|
|
115
117
|
};
|
|
116
118
|
const result = await btsService.createProject(options.projectName || options.name || "", btsConfig, workingDirectory);
|
|
117
|
-
return {
|
|
119
|
+
return {
|
|
120
|
+
success: result.success,
|
|
121
|
+
message: result.message,
|
|
122
|
+
projectPath: result.projectPath,
|
|
123
|
+
};
|
|
118
124
|
}
|
package/dist/mcp/server.js
CHANGED
|
File without changes
|
package/dist/types/options.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/types/options.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/types/options.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "task-o-matic",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.7",
|
|
4
4
|
"description": "AI-powered task management CLI",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"task-management",
|
|
@@ -50,8 +50,8 @@
|
|
|
50
50
|
"start": "node dist/cli/bin.js",
|
|
51
51
|
"check-types": "tsc --noEmit --skipLibCheck",
|
|
52
52
|
"test": "mocha -r tsx/cjs src/test/**/*.test.ts",
|
|
53
|
-
"prepare": "npm run build",
|
|
54
|
-
"prepublishOnly": "bun run build && bun test"
|
|
53
|
+
"prepare": "npm run build && chmod +x dist/cli/bin.js",
|
|
54
|
+
"prepublishOnly": "bun run build && chmod +x dist/cli/bin.js && bun test"
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
57
|
"@ai-sdk/anthropic": "^2.0.44",
|