Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
843d0ae
Remove old files
haydenbleasel Feb 21, 2026
984b8ad
Install Ultracite
haydenbleasel Feb 21, 2026
59df84a
Disable high-issue rules
haydenbleasel Feb 21, 2026
cec35a6
Turborepo-specific stylistic tweaks
haydenbleasel Feb 21, 2026
ef75689
Disable rules, restore ignore patterns
haydenbleasel Feb 21, 2026
5ee7e77
More edits
haydenbleasel Feb 21, 2026
8adc9e5
More edits
haydenbleasel Feb 21, 2026
5925fbc
Disable experimental sorting
haydenbleasel Feb 21, 2026
16ba029
Update .oxlintrc.json
haydenbleasel Feb 21, 2026
b79f9be
Misc fixes
haydenbleasel Feb 21, 2026
6bde5f9
Update .oxlintrc.json
haydenbleasel Feb 21, 2026
f1fadd6
Update .oxlintrc.json
haydenbleasel Feb 21, 2026
e64b461
Initial fixes
haydenbleasel Feb 21, 2026
4c34c9e
Enable prefer-const
haydenbleasel Feb 21, 2026
7f522d7
Enable unicorn/no-hex-escape
haydenbleasel Feb 21, 2026
d837403
Enable unicorn/filename-case
haydenbleasel Feb 21, 2026
7c7f099
Enable unicorn/no-array-for-each
haydenbleasel Feb 21, 2026
ce3d47e
Fix stale refs
haydenbleasel Feb 21, 2026
f60e8bc
Merge branch 'main' into ultracite
haydenbleasel Feb 21, 2026
45fce09
Merge branch 'main' into ultracite
haydenbleasel Feb 21, 2026
c9ac87e
Merge branch 'main' into ultracite
haydenbleasel Feb 22, 2026
400b4d0
Update package.json
haydenbleasel Feb 22, 2026
3eb571e
Fix import issue
haydenbleasel Feb 22, 2026
f0529ce
Update .oxlintrc.json
haydenbleasel Feb 22, 2026
de1cabb
Simplify ignore patterns
haydenbleasel Feb 22, 2026
8785d79
Restore vscode settings
haydenbleasel Feb 22, 2026
dce6830
Merge branch 'main' into ultracite
haydenbleasel Feb 23, 2026
61d8b2f
Update package.json
haydenbleasel Feb 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
30 changes: 24 additions & 6 deletions .oxfmtrc.jsonc
Original file line number Diff line number Diff line change
@@ -1,11 +1,29 @@
// Ultracite oxfmt Configuration
// https://oxc.rs/docs/guide/usage/formatter/config-file-reference.html
{
"$schema": "./node_modules/oxfmt/configuration_schema.json",
// Use Prettier v2 defaults (the repo was on v2.8.7)
"printWidth": 80,
// No trailing commas - required for JSON compatibility
"tabWidth": 2,
"useTabs": false,
"semi": true,
"singleQuote": false,
"quoteProps": "as-needed",
"jsxSingleQuote": false,
"trailingComma": "none",
// Disable formatting of embedded code blocks (JSON in markdown)
"embeddedLanguageFormatting": "off",
// Disable features that differ from Prettier defaults
"experimentalSortPackageJson": false
"bracketSpacing": true,
"bracketSameLine": false,
"arrowParens": "always",
"endOfLine": "lf",
"ignorePatterns": [
"build/",
"crates/",
"cli/",
"examples/",
"packages/eslint-plugin-turbo/__fixtures__",
"packages/create-turbo/templates",
"turborepo-tests/",
"buildcontainer/",
"scripts/",
"apps/docs"
]
}
171 changes: 135 additions & 36 deletions .oxlintrc.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"$schema": "https://raw.githubusercontent.com/oxc-project/oxlint/main/npm/oxlint/configuration_schema.json",
"$schema": "./node_modules/oxlint/configuration_schema.json",
"extends": ["./node_modules/ultracite/config/oxlint/core/.oxlintrc.json"],
"ignorePatterns": [
"build/",
"crates/",
Expand All @@ -10,41 +11,139 @@
"turborepo-tests/",
"buildcontainer/",
"scripts/",
".github/",
".devcontainer/",
".cargo/",
".config/",
".cursor/",
".vscode/",
".husky/",
".conductor/"
"apps/docs"
],
"rules": {
"no-unused-vars": [
"warn",
{
"vars": "all",
"varsIgnorePattern": "^_",
"args": "after-used",
"argsIgnorePattern": "^_",
"caughtErrors": "none",
"destructuredArrayIgnorePattern": "^_"
}
],
"unicorn/no-empty-file": "off"
},
"overrides": [
{
"files": ["**/__fixtures__/**/*", "**/fixtures/**/*"],
"rules": {
"no-unused-expressions": "off"
}
},
{
"files": ["**/next-env.d.ts"],
"rules": {
"@typescript-eslint/triple-slash-reference": "off"
}
}
]
"jest/no-confusing-set-timeout": "off",
"jest/no-untyped-mock-factory": "off",
"func-style": "off",
"sort-keys": "off",
"import/no-relative-parent-imports": "off",
"import/no-nodejs-modules": "off",
"max-statements": "off",
"jest/no-conditional-in-test": "off",
"jest/require-hook": "off",
"no-inline-comments": "off",
"unicorn/numeric-separators-style": "off",
"typescript/consistent-type-definitions": "off",
"no-use-before-define": "off",
"promise/prefer-await-to-then": "off",
"jsdoc/check-tag-names": "off",
"jest/no-conditional-expect": "off",
"promise/prefer-await-to-callbacks": "off",
"require-await": "off",
"jest/valid-title": "off",
"jest/max-expects": "off",
"jest/no-hooks": "off",
"typescript/no-explicit-any": "off",
"no-unused-vars": "off",
"no-plusplus": "off",
"prefer-template": "off",
"prefer-destructuring": "off",
"no-shadow": "off",
"no-negated-condition": "off",
"typescript/no-non-null-assertion": "off",
"unicorn/consistent-function-scoping": "off",
"vitest/no-import-node-test": "off",
"no-useless-return": "off",
"no-unused-expressions": "off",
"promise/avoid-new": "off",
"class-methods-use-this": "off",
"no-empty-function": "off",
"no-new": "off",
"unicorn/no-empty-file": "off",
"default-case": "off",
"typescript/consistent-type-imports": "off",
"unicorn/prefer-spread": "off",
"no-alert": "off",
"vitest/consistent-test-filename": "off",
"jest/require-top-level-describe": "off",
"import/no-named-as-default-member": "off",
"complexity": "off",
"no-void": "off",
"no-warning-comments": "off",
"unicorn/prefer-logical-operator-over-ternary": "off",
"unicorn/no-await-expression-member": "off",
"unicorn/prefer-add-event-listener": "off",
"unicorn/no-immediate-mutation": "off",
"import/no-named-as-default": "off",
"no-nested-ternary": "off",
"unicorn/no-array-reduce": "off",
"jsdoc/require-param-type": "off",
"typescript/ban-types": "off",
"import/no-absolute-path": "off",
"unicorn/new-for-builtins": "off",
"promise/no-nesting": "off",
"typescript/parameter-properties": "off",
"no-promise-executor-return": "off",
"jest/prefer-each": "off",
"unicorn/no-useless-error-capture-stack-trace": "off",
"unicorn/no-abusive-eslint-disable": "off",
"unicorn/no-object-as-default-parameter": "off",
"oxc/no-accumulating-spread": "off",
"jsdoc/require-returns-type": "off",
"promise/param-names": "off",
"typescript/no-unsafe-function-type": "off",
"node/global-require": "off",
"jest/expect-expect": "off",
"import/default": "off",
"import/no-cycle": "off",
"import/no-duplicates": "off",
"no-duplicate-imports": "off",
"typescript/no-extraneous-class": "off",
"unicorn/no-lonely-if": "off",
"typescript/no-empty-object-type": "off",
"eqeqeq": "off",
"unicorn/prefer-response-static-json": "off",
"array-callback-return": "off",
"import/no-webpack-loader-syntax": "off",
"unicorn/prefer-object-from-entries": "off",
"unicorn/prefer-array-find": "off",
"promise/no-multiple-resolved": "off",
"unicorn/prefer-modern-math-apis": "off",
"unicorn/no-useless-switch-case": "off",
"typescript/no-inferrable-types": "off",
"func-names": "off",
"guard-for-in": "off",
"typescript/ban-ts-comment": "off",
"jest/no-done-callback": "off",
"no-eq-null": "off",
"no-param-reassign": "off",
"unicorn/no-document-cookie": "off",
"unicorn/no-useless-collection-argument": "off",
"oxc/no-barrel-file": "off",
"unicorn/require-post-message-target-origin": "off",
"jest/prefer-to-be": "off",
"unicorn/prefer-string-replace-all": "off",
"vitest/prefer-to-be-truthy": "off",
"typescript/array-type": "off",
"jest/consistent-test-it": "off",
"unicorn/text-encoding-identifier-case": "off",
"unicorn/no-nested-ternary": "off",
"unicorn/no-array-sort": "off",
"arrow-body-style": "off",
"curly": "off",
"unicorn/no-useless-undefined": "off",
"unicorn/catch-error-name": "off",
"unicorn/prefer-optional-catch-binding": "off",
"import/consistent-type-specifier-style": "off",
"typescript/no-import-type-side-effects": "off",
"typescript/consistent-indexed-object-style": "off",
"unicorn/prefer-set-has": "off",
"vars-on-top": "off",
"unicorn/throw-new-error": "off",
"typescript/prefer-ts-expect-error": "off",
"unicorn/no-console-spaces": "off",
"preserve-caught-error": "off",
"vitest/prefer-to-be-falsy": "off",
"typescript/prefer-function-type": "off",
"jest/prefer-strict-equal": "off",
"vitest/prefer-called-once": "off",
"vitest/prefer-describe-function-title": "off",
"jest/prefer-called-with": "off",
"vitest/prefer-import-in-mock": "off",
"jest/prefer-lowercase-title": "off",
"unicorn/prefer-string-slice": "off",
"typescript/ban-tslint-comment": "off"
}
}
3 changes: 3 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,6 @@ __generated__/
*.toml

apps/docs/content/openapi/**/*.mdx

# oxfmt parse error
packages/turbo-utils/__tests__/convertCase.test.ts
64 changes: 56 additions & 8 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,4 @@
{
"eslint.validate": [
"javascript",
"javascriptreact",
"typescript",
"typescriptreact"
],
"eslint.workingDirectories": [{ "mode": "auto" }],
"debug.javascript.unmapMissingSources": true,
"files.associations": {
"libturbo.h": "c",
Expand All @@ -18,11 +11,66 @@
"files.insertFinalNewline": false,
"files.trimTrailingWhitespace": false
},
"editor.defaultFormatter": "esbenp.prettier-vscode",
"typescript.tsdk": "node_modules/typescript/lib",
"json.schemas": [
{
"fileMatch": ["turbo.json"],
"url": "./packages/turbo-types/schemas/schema.json"
}
]
],
"editor.formatOnSave": true,
"editor.formatOnPaste": true,
"emmet.showExpandedAbbreviation": "never",
"[javascript]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[javascriptreact]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[typescript]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[typescriptreact]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[json]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[jsonc]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[yaml]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[html]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[vue]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[vue-html]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[handlebars]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[css]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[scss]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[less]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[graphql]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[markdown]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"editor.codeActionsOnSave": {
"source.fixAll.oxc": "explicit"
}
}
7 changes: 4 additions & 3 deletions apps/agents/app/api/slack/actions/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ export async function POST(request: Request) {

switch (action.action_id) {
case "approve_repro_request": {
const issueNumber = parseInt(action.value ?? "0", 10);
const issueNumber = Number.parseInt(action.value ?? "0", 10);
if (!issueNumber) break;

await addComment(issueNumber, REPRODUCTION_REQUEST);
Expand All @@ -51,7 +51,7 @@ export async function POST(request: Request) {
}

case "repro_dismiss": {
const issueNumber = parseInt(action.value ?? "0", 10);
const issueNumber = Number.parseInt(action.value ?? "0", 10);
const issueRef = issueNumber
? ` for <https://github.com/vercel/turborepo/issues/${issueNumber}|#${issueNumber}>`
: "";
Expand All @@ -63,8 +63,9 @@ export async function POST(request: Request) {
break;
}

default:
default: {
break;
}
}

return new Response("OK", { status: 200 });
Expand Down
2 changes: 1 addition & 1 deletion apps/agents/lib/slack.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export async function verifySlackRequest(
}

const fiveMinutesAgo = Math.floor(Date.now() / 1000) - 60 * 5;
if (parseInt(timestamp, 10) < fiveMinutesAgo) {
if (Number.parseInt(timestamp, 10) < fiveMinutesAgo) {
throw new Error("Slack request too old");
}

Expand Down
12 changes: 6 additions & 6 deletions apps/agents/sandbox/audit-fix-agent.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ const agent = new ToolLoopAgent({
),
execute: async function ({ command, cwd, allowFailure }) {
console.log("$ " + command);
var output = shell(command, {
const output = shell(command, {
cwd: cwd ?? REPO_DIR,
allowFailure: allowFailure ?? false
});
Expand All @@ -131,7 +131,7 @@ const agent = new ToolLoopAgent({
})
),
execute: async function ({ path }) {
var fullPath = REPO_DIR + "/" + path;
const fullPath = REPO_DIR + "/" + path;
if (!existsSync(fullPath)) {
return "File not found: " + path;
}
Expand All @@ -148,7 +148,7 @@ const agent = new ToolLoopAgent({
})
),
execute: async function ({ path, content }) {
var fullPath = REPO_DIR + "/" + path;
const fullPath = REPO_DIR + "/" + path;
writeFileSync(fullPath, content, "utf-8");
return "Wrote " + content.length + " bytes to " + path;
}
Expand All @@ -164,7 +164,7 @@ const agent = new ToolLoopAgent({
})
),
execute: async function ({ pattern }) {
var output = shell("find . -path './" + pattern + "' | head -50", {
const output = shell("find . -path './" + pattern + "' | head -50", {
allowFailure: true
});
return output || "(no matches)";
Expand Down Expand Up @@ -201,14 +201,14 @@ async function main() {
console.log("Starting audit fix agent...");

try {
var result = await agent.generate({
const result = await agent.generate({
prompt:
"Run security audits on this repo and fix the vulnerabilities. Follow the strategy in your instructions exactly — audit, fix manifests, reinstall, verify, report. Do not over-analyze. Act quickly."
});

console.log("\nAgent finished.");

var reportCall = result.steps
const reportCall = result.steps
.flatMap(function (s) {
return s.toolCalls ?? [];
})
Expand Down
Loading
Loading