with one click
flow-error-eslint-compliance
// Fix ESLint issues in migrated Output SDK code. Use when seeing lint errors after migration, or when writing new Output SDK code that needs to follow project conventions.
// Fix ESLint issues in migrated Output SDK code. Use when seeing lint errors after migration, or when writing new Output SDK code that needs to follow project conventions.
Validate and fix folder structure for Output SDK workflows. Use to ensure migrated workflows follow the correct structure conventions.
Convert Flow SDK activities.ts to Output SDK steps.ts. Use when migrating activity functions to step definitions with typed parameters.
Convert inline prompts and prompt arrays to .prompt files with YAML frontmatter. Use when migrating prompts from Flow SDK format to Output SDK prompt files.
Convert Flow SDK workflow class to Output SDK workflow() function. Use when migrating workflow.ts files from class-based to functional definitions.
Create scenario files for testing migrated Output SDK workflows. Use to set up test inputs in the scenarios/ subfolder.
Remove try-catch antipattern from step calls during Flow to Output SDK migration. Use when converting workflow code that wraps step calls in try-catch blocks.
| name | flow-error-eslint-compliance |
| description | Fix ESLint issues in migrated Output SDK code. Use when seeing lint errors after migration, or when writing new Output SDK code that needs to follow project conventions. |
| allowed-tools | ["Bash","Read","Write","Grep","Edit"] |
This skill helps fix ESLint issues that commonly arise during Flow to Output SDK migration. The Output SDK project enforces strict ESLint rules that must be followed in all code.
After Migration:
npm run lint shows errorsDuring Code Review:
Never use trailing commas in arrays, objects, or function parameters.
// WRONG
const config = {
name: 'workflow',
version: '1.0', // trailing comma
};
const items = [
'item1',
'item2', // trailing comma
];
// CORRECT
const config = {
name: 'workflow',
version: '1.0'
};
const items = [
'item1',
'item2'
];
Always include spaces inside array brackets.
// WRONG
const items = [item1, item2];
const empty = [];
// CORRECT
const items = [ item1, item2 ];
const empty = []; // empty arrays don't need spaces
Don't use return await, just return the promise directly.
// WRONG
async function getData() {
return await fetchData();
}
// CORRECT
async function getData() {
return fetchData();
}
// Also CORRECT (if you need to do something after)
async function getData() {
const result = await fetchData();
console.log( 'Fetched:', result );
return result;
}
Break long lines to stay under 150 characters.
// WRONG
const { output } = await generateText( { prompt: 'analyze@v1', variables: { topic: input.topic, context: input.context, additionalInfo: input.additionalInfo }, output: Output.object( { schema: z.object( { result: z.string() } ) } ) } );
// CORRECT
const { output } = await generateText( {
prompt: 'analyze@v1',
variables: {
topic: input.topic,
context: input.context,
additionalInfo: input.additionalInfo
},
output: Output.object( {
schema: z.object( { result: z.string() } )
} )
} );
Always include spaces inside parentheses (except empty ones).
// WRONG
if (condition) {
doSomething(arg1, arg2);
}
for (let i = 0; i < 10; i++) {
}
// CORRECT
if ( condition ) {
doSomething( arg1, arg2 );
}
for ( let i = 0; i < 10; i++ ) {
}
// Empty parentheses don't need spaces
fn();
new Class();
Use single quotes for strings, not double quotes.
// WRONG
const name = "workflow";
import { step } from "@outputai/core";
// CORRECT
const name = 'workflow';
import { step } from '@outputai/core';
Add spaces around operators.
// WRONG
const sum = a+b;
const isValid = count>0&&count<10;
// CORRECT
const sum = a + b;
const isValid = count > 0 && count < 10;
Use camelCase for variable names.
// WRONG
const user_name = 'John';
const UserData = {};
// CORRECT
const userName = 'John';
const userData = {};
Never use var, always use const or let.
// WRONG
var count = 0;
var name = 'test';
// CORRECT
let count = 0;
const name = 'test';
Include spaces inside object braces.
// WRONG
const obj = {key: 'value'};
// CORRECT
const obj = { key: 'value' };
npm run lint:fix
npx eslint src/workflows/my-workflow/*.ts
npx eslint --fix src/workflows/my-workflow/*.ts
import {z} from "@outputai/core";
import {step, workflow} from "@outputai/core";
const InputSchema = z.object({
user_id: z.string(),
search_query: z.string(),
});
export const searchStep = step({
name: "searchStep",
inputSchema: InputSchema,
fn: async (input) => {
var results = [];
if(input.search_query.length>0) {
const data = await fetchResults(input.search_query, input.user_id);
results = [data.item1, data.item2,];
}
return await processResults({results: results,});
},
});
import { z } from '@outputai/core';
import { step, workflow } from '@outputai/core';
const InputSchema = z.object( {
userId: z.string(),
searchQuery: z.string()
} );
export const searchStep = step( {
name: 'searchStep',
inputSchema: InputSchema,
fn: async ( input ) => {
let results = [];
if ( input.searchQuery.length > 0 ) {
const data = await fetchResults( input.searchQuery, input.userId );
results = [ data.item1, data.item2 ];
}
return processResults( { results: results } );
}
} );
// Flow SDK style (may have inconsistent quotes/spacing)
import {z} from "zod";
import { WorkflowScope } from "@flow/sdk";
// Output SDK style (consistent single quotes, spacing)
import { z, step, workflow } from '@outputai/core';
// Flow SDK style
async function myActivity(param1: string, param2: number) {
// ...
}
// Output SDK style with ESLint compliance
export const myStep = step( {
name: 'myStep',
inputSchema: z.object( {
param1: z.string(),
param2: z.number()
} ),
fn: async ( input ) => {
const { param1, param2 } = input;
// ...
}
} );
npm run lint
npm run lint:fix
Review any errors that couldn't be auto-fixed and apply the rules above.
npm run lint
# Should exit with 0 errors
flow-error-zod-import - Zod import source issuesflow-convert-activities-to-steps - Step conversion with proper styleflow-validation-checklist - Complete migration validation