motia 0.6.3-beta.130-538881 → 0.6.4-beta.130
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/cjs/cli.js +16 -1
- package/dist/cjs/create/index.js +2 -14
- package/dist/cjs/create/interactive.d.ts +2 -0
- package/dist/cjs/create/interactive.js +28 -19
- package/dist/cjs/create/pull-rules.d.ts +7 -0
- package/dist/cjs/create/pull-rules.js +28 -0
- package/dist/cjs/create/setup-template.js +5 -3
- package/dist/cjs/create/templates/index.js +1 -1
- package/dist/cjs/create/templates/index.ts +1 -1
- package/dist/cjs/cursor-rules/dot-files/.claude/CLAUDE.md +398 -155
- package/dist/cjs/cursor-rules/dot-files/.claude/README.md +78 -26
- package/dist/cjs/cursor-rules/dot-files/.claude/settings.json +29 -65
- package/dist/esm/cli.js +16 -1
- package/dist/esm/create/index.js +2 -14
- package/dist/esm/create/interactive.d.ts +2 -0
- package/dist/esm/create/interactive.js +28 -19
- package/dist/esm/create/pull-rules.d.ts +7 -0
- package/dist/esm/create/pull-rules.js +21 -0
- package/dist/esm/create/setup-template.js +5 -3
- package/dist/esm/create/templates/index.js +1 -1
- package/dist/esm/create/templates/index.ts +1 -1
- package/dist/esm/cursor-rules/dot-files/.claude/CLAUDE.md +398 -155
- package/dist/esm/cursor-rules/dot-files/.claude/README.md +78 -26
- package/dist/esm/cursor-rules/dot-files/.claude/settings.json +29 -65
- package/dist/types/create/interactive.d.ts +2 -0
- package/dist/types/create/pull-rules.d.ts +7 -0
- package/package.json +4 -4
- /package/dist/cjs/create/templates/{typescript → nodejs}/motia-workbench.json +0 -0
- /package/dist/cjs/create/templates/{typescript → nodejs}/services/pet-store.ts.txt +0 -0
- /package/dist/cjs/create/templates/{typescript → nodejs}/services/types.ts.txt +0 -0
- /package/dist/cjs/create/templates/{typescript → nodejs}/steps/api.step.ts-features.json.txt +0 -0
- /package/dist/cjs/create/templates/{typescript → nodejs}/steps/api.step.ts.txt +0 -0
- /package/dist/cjs/create/templates/{typescript → nodejs}/steps/notification.step.ts.txt +0 -0
- /package/dist/cjs/create/templates/{typescript → nodejs}/steps/process-food-order.step.ts-features.json.txt +0 -0
- /package/dist/cjs/create/templates/{typescript → nodejs}/steps/process-food-order.step.ts.txt +0 -0
- /package/dist/cjs/create/templates/{typescript → nodejs}/steps/state-audit-cron.step.ts-features.json.txt +0 -0
- /package/dist/cjs/create/templates/{typescript → nodejs}/steps/state-audit-cron.step.ts.txt +0 -0
- /package/dist/cjs/create/templates/{typescript → nodejs}/tutorial.tsx.txt +0 -0
- /package/dist/esm/create/templates/{typescript → nodejs}/motia-workbench.json +0 -0
- /package/dist/esm/create/templates/{typescript → nodejs}/services/pet-store.ts.txt +0 -0
- /package/dist/esm/create/templates/{typescript → nodejs}/services/types.ts.txt +0 -0
- /package/dist/esm/create/templates/{typescript → nodejs}/steps/api.step.ts-features.json.txt +0 -0
- /package/dist/esm/create/templates/{typescript → nodejs}/steps/api.step.ts.txt +0 -0
- /package/dist/esm/create/templates/{typescript → nodejs}/steps/notification.step.ts.txt +0 -0
- /package/dist/esm/create/templates/{typescript → nodejs}/steps/process-food-order.step.ts-features.json.txt +0 -0
- /package/dist/esm/create/templates/{typescript → nodejs}/steps/process-food-order.step.ts.txt +0 -0
- /package/dist/esm/create/templates/{typescript → nodejs}/steps/state-audit-cron.step.ts-features.json.txt +0 -0
- /package/dist/esm/create/templates/{typescript → nodejs}/steps/state-audit-cron.step.ts.txt +0 -0
- /package/dist/esm/create/templates/{typescript → nodejs}/tutorial.tsx.txt +0 -0
package/dist/cjs/cli.js
CHANGED
|
@@ -24,10 +24,25 @@ commander_1.program
|
|
|
24
24
|
.command('create')
|
|
25
25
|
.description('Create a new motia project')
|
|
26
26
|
.option('-n, --name <project name>', 'The name for your project, used to create a directory, use ./ or . to create it under the existing directory')
|
|
27
|
+
.option('-t, --template <template>', 'The template to use for your project')
|
|
27
28
|
.option('-i, --interactive', 'Use interactive prompts to create project') // it's default
|
|
29
|
+
.option('-c, --confirm', 'Confirm the project creation', false)
|
|
28
30
|
.action((0, config_utils_1.handler)(async (arg, context) => {
|
|
29
31
|
const { createInteractive } = require('./create/interactive');
|
|
30
|
-
await createInteractive({
|
|
32
|
+
await createInteractive({
|
|
33
|
+
name: arg.name,
|
|
34
|
+
template: arg.template,
|
|
35
|
+
confirm: !!arg.confirm,
|
|
36
|
+
}, context);
|
|
37
|
+
}));
|
|
38
|
+
commander_1.program
|
|
39
|
+
.command('rules')
|
|
40
|
+
.command('pull')
|
|
41
|
+
.description('Install essential AI development guides (AGENTS.md, CLAUDE.md) and optional Cursor IDE rules')
|
|
42
|
+
.option('-f, --force', 'Overwrite existing files')
|
|
43
|
+
.action((0, config_utils_1.handler)(async (arg, context) => {
|
|
44
|
+
const { pullRules } = require('./create/pull-rules');
|
|
45
|
+
await pullRules({ force: arg.force, rootDir: process.cwd() }, context);
|
|
31
46
|
}));
|
|
32
47
|
commander_1.program
|
|
33
48
|
.command('generate-types')
|
package/dist/cjs/create/index.js
CHANGED
|
@@ -12,6 +12,7 @@ const generate_types_1 = require("../generate-types");
|
|
|
12
12
|
const version_1 = require("../version");
|
|
13
13
|
const setup_template_1 = require("./setup-template");
|
|
14
14
|
const utils_1 = require("./utils");
|
|
15
|
+
const pull_rules_1 = require("./pull-rules");
|
|
15
16
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
16
17
|
require('ts-node').register({
|
|
17
18
|
transpileOnly: true,
|
|
@@ -171,20 +172,7 @@ const create = async ({ projectName, template, cursorEnabled, context }) => {
|
|
|
171
172
|
context.log('gitignore-created', (message) => message.tag('success').append('File').append('.gitignore', 'cyan').append('has been created.'));
|
|
172
173
|
}
|
|
173
174
|
if (cursorEnabled) {
|
|
174
|
-
|
|
175
|
-
const cursorTemplateDir = path_1.default.join(__dirname, '..', 'cursor-rules', 'dot-files');
|
|
176
|
-
const files = fs_1.default.readdirSync(cursorTemplateDir);
|
|
177
|
-
for (const file of files) {
|
|
178
|
-
const targetFile = path_1.default.join(rootDir, file);
|
|
179
|
-
if (!(0, utils_1.checkIfDirectoryExists)(targetFile)) {
|
|
180
|
-
const isFolder = fs_1.default.statSync(path_1.default.join(cursorTemplateDir, file)).isDirectory();
|
|
181
|
-
fs_1.default.cpSync(path_1.default.join(cursorTemplateDir, file), targetFile, { recursive: isFolder });
|
|
182
|
-
context.log(`${file}-created`, (message) => message
|
|
183
|
-
.tag('success')
|
|
184
|
-
.append(isFolder ? 'Folder' : 'File')
|
|
185
|
-
.append(file, 'cyan')
|
|
186
|
-
.append('has been created.'));
|
|
187
|
-
}
|
|
175
|
+
await (0, pull_rules_1.pullRules)({ force: true, rootDir }, context);
|
|
188
176
|
}
|
|
189
177
|
if (template) {
|
|
190
178
|
await (0, setup_template_1.setupTemplate)(template, rootDir, context);
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { CliContext } from '../cloud/config-utils';
|
|
2
2
|
interface CreateInteractiveArgs {
|
|
3
3
|
name?: string;
|
|
4
|
+
template?: string;
|
|
5
|
+
confirm?: boolean;
|
|
4
6
|
}
|
|
5
7
|
export declare const createInteractive: (args: CreateInteractiveArgs, context: CliContext) => Promise<void>;
|
|
6
8
|
export {};
|
|
@@ -8,27 +8,30 @@ const inquirer_1 = __importDefault(require("inquirer"));
|
|
|
8
8
|
const colors_1 = __importDefault(require("colors"));
|
|
9
9
|
const index_1 = require("./index");
|
|
10
10
|
const choices = {
|
|
11
|
-
|
|
11
|
+
nodejs: 'Base (TypeScript)',
|
|
12
12
|
python: 'Base (Python)',
|
|
13
13
|
};
|
|
14
14
|
const createInteractive = async (args, context) => {
|
|
15
15
|
context.log('welcome', (message) => message.append('\n🚀 ' + colors_1.default.bold('Welcome to Motia Project Creator!')));
|
|
16
|
-
const questions = [
|
|
17
|
-
|
|
16
|
+
const questions = [];
|
|
17
|
+
let name = args.name;
|
|
18
|
+
let template = args.template;
|
|
19
|
+
if (!args.template) {
|
|
20
|
+
questions.push({
|
|
18
21
|
type: 'list',
|
|
19
22
|
name: 'template',
|
|
20
|
-
message: '
|
|
23
|
+
message: 'What template do you want to use? (Use arrow keys)',
|
|
21
24
|
choices: Object.keys(choices).map((key) => ({
|
|
22
25
|
name: choices[key],
|
|
23
26
|
value: key,
|
|
24
27
|
})),
|
|
25
|
-
}
|
|
26
|
-
|
|
28
|
+
});
|
|
29
|
+
}
|
|
27
30
|
if (!args.name) {
|
|
28
31
|
questions.push({
|
|
29
32
|
type: 'input',
|
|
30
33
|
name: 'projectName',
|
|
31
|
-
message: '
|
|
34
|
+
message: 'Project name (leave blank to use current folder):',
|
|
32
35
|
validate: (input) => {
|
|
33
36
|
if (input && input.trim().length > 0) {
|
|
34
37
|
if (!/^[a-zA-Z0-9][a-zA-Z0-9-_]*$/.test(input.trim())) {
|
|
@@ -40,21 +43,27 @@ const createInteractive = async (args, context) => {
|
|
|
40
43
|
filter: (input) => input.trim(),
|
|
41
44
|
});
|
|
42
45
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
46
|
+
if (!args.confirm) {
|
|
47
|
+
questions.push({
|
|
48
|
+
type: 'confirm',
|
|
49
|
+
name: 'proceed',
|
|
50
|
+
message: 'Proceed? [Y/n]:',
|
|
51
|
+
default: true,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
if (questions.length > 0) {
|
|
55
|
+
const answers = await inquirer_1.default.prompt(questions);
|
|
56
|
+
if (!args.confirm && !answers.proceed) {
|
|
57
|
+
context.log('cancelled', (message) => message.tag('info').append('\n❌ Project creation cancelled.'));
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
name = args.name || answers.projectName;
|
|
61
|
+
template = args.template || answers.template;
|
|
53
62
|
}
|
|
54
63
|
context.log('creating', (message) => message.append('\n🔨 Creating your Motia project...\n'));
|
|
55
64
|
await (0, index_1.create)({
|
|
56
|
-
projectName:
|
|
57
|
-
template:
|
|
65
|
+
projectName: name || '.',
|
|
66
|
+
template: template || 'nodejs',
|
|
58
67
|
cursorEnabled: true, // Default to true for cursor rules
|
|
59
68
|
context,
|
|
60
69
|
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.pullRules = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const pullRules = async (args, context) => {
|
|
10
|
+
const cursorTemplateDir = path_1.default.join(__dirname, '..', 'cursor-rules', 'dot-files');
|
|
11
|
+
const files = fs_1.default.readdirSync(cursorTemplateDir);
|
|
12
|
+
for (const file of files) {
|
|
13
|
+
const targetFile = path_1.default.join(args.rootDir, file);
|
|
14
|
+
const isFolder = fs_1.default.statSync(path_1.default.join(cursorTemplateDir, file)).isDirectory();
|
|
15
|
+
const type = isFolder ? 'Folder' : 'File';
|
|
16
|
+
if (args.force || !fs_1.default.existsSync(targetFile)) {
|
|
17
|
+
fs_1.default.cpSync(path_1.default.join(cursorTemplateDir, file), targetFile, {
|
|
18
|
+
recursive: isFolder,
|
|
19
|
+
force: true,
|
|
20
|
+
});
|
|
21
|
+
context.log(`${file}-created`, (message) => message.tag('success').append(type).append(file, 'cyan').append('has been created.'));
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
context.log(`${file}-skipped`, (message) => message.tag('warning').append(type).append(file, 'cyan').append('already exists, skipping...'));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
exports.pullRules = pullRules;
|
|
@@ -4,9 +4,11 @@ exports.setupTemplate = void 0;
|
|
|
4
4
|
const templates_1 = require("./templates");
|
|
5
5
|
const setupTemplate = async (template, rootDir, context) => {
|
|
6
6
|
if (!template || !(template in templates_1.templates)) {
|
|
7
|
-
context.log('template-not-found', (message) => message
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
context.log('template-not-found', (message) => message
|
|
8
|
+
.tag('failed')
|
|
9
|
+
.append(`Template ${template} not found, please use one of the following:`)
|
|
10
|
+
.append(Object.keys(templates_1.templates).join(', '), 'gray'));
|
|
11
|
+
process.exit(1);
|
|
10
12
|
}
|
|
11
13
|
await templates_1.templates[template](rootDir, context);
|
|
12
14
|
};
|
|
@@ -3,6 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.templates = void 0;
|
|
4
4
|
const generate_1 = require("./generate");
|
|
5
5
|
exports.templates = {
|
|
6
|
-
|
|
6
|
+
nodejs: (0, generate_1.generateTemplateSteps)('nodejs'),
|
|
7
7
|
python: (0, generate_1.generateTemplateSteps)('python'),
|
|
8
8
|
};
|