pm4ai 0.0.73

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.

Potentially problematic release.


This version of pm4ai might be problematic. Click here for more details.

Files changed (51) hide show
  1. package/README.md +34 -0
  2. package/dist/audit-oQQfgtxr.mjs +287 -0
  3. package/dist/cleanup-M-ALxTqh.mjs +35 -0
  4. package/dist/cli.d.mts +1 -0
  5. package/dist/cli.mjs +77 -0
  6. package/dist/dashboard-DVRNZGun.mjs +39 -0
  7. package/dist/discover-d8ENQC1K.mjs +172 -0
  8. package/dist/fix-BcMN_cuG.mjs +260 -0
  9. package/dist/fix-DvtItv_V.mjs +2 -0
  10. package/dist/guide-BS7-RqpH.d.mts +4 -0
  11. package/dist/guide-CifUmtQN.mjs +59 -0
  12. package/dist/guide.d.mts +2 -0
  13. package/dist/guide.mjs +2 -0
  14. package/dist/ignores-BBl55eUM.mjs +37 -0
  15. package/dist/index.d.mts +83 -0
  16. package/dist/index.mjs +11 -0
  17. package/dist/init-C-073mRX.mjs +120 -0
  18. package/dist/list-QdJPgkEO.mjs +31 -0
  19. package/dist/package-NpIViQjo.mjs +4 -0
  20. package/dist/schemas-Dsbtf6P2.mjs +51 -0
  21. package/dist/schemas.d.mts +48 -0
  22. package/dist/schemas.mjs +2 -0
  23. package/dist/setup-BPuE4oWT.mjs +164 -0
  24. package/dist/status-ByiuW1iF.mjs +2 -0
  25. package/dist/status-CzCNkG58.mjs +1775 -0
  26. package/dist/sync-DN1rgN3P.mjs +732 -0
  27. package/dist/templates/cli/package.json +30 -0
  28. package/dist/templates/cli/src/cli.ts +16 -0
  29. package/dist/templates/cli/src/index.ts +2 -0
  30. package/dist/templates/cli/src/tui.tsx +57 -0
  31. package/dist/templates/cli/tsdown.config.ts +9 -0
  32. package/dist/templates/docs/content/docs/index.mdx +6 -0
  33. package/dist/templates/docs/package.json +20 -0
  34. package/dist/templates/docs/source.config.ts +16 -0
  35. package/dist/templates/docs/src/app/(home)/page.tsx +11 -0
  36. package/dist/templates/lib/package.json +22 -0
  37. package/dist/templates/lib/src/index.ts +2 -0
  38. package/dist/templates/lib/tsdown.config.ts +9 -0
  39. package/dist/templates/root-package.txt +38 -0
  40. package/dist/templates/web/package.json +17 -0
  41. package/dist/templates/web/src/app/page.tsx +6 -0
  42. package/dist/templates/web/src/app/providers.tsx +15 -0
  43. package/dist/utils-CpkOMuQN.mjs +221 -0
  44. package/dist/watch-D4OSFClu.mjs +566 -0
  45. package/dist/watch-emitter-uTmZ3oQd.mjs +177 -0
  46. package/dist/watch-state-DIMHiLr5.d.mts +118 -0
  47. package/dist/watch-state-wF-NfC-k.mjs +274 -0
  48. package/dist/watch-state.d.mts +2 -0
  49. package/dist/watch-state.mjs +2 -0
  50. package/dist/watch-types-BzSNCGb2.mjs +22 -0
  51. package/package.json +65 -0
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "__NAME__",
3
+ "version": "0.0.1",
4
+ "description": "__NAME__ CLI",
5
+ "license": "MIT",
6
+ "author": "1qh",
7
+ "type": "module",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.mts",
11
+ "import": "./dist/index.mjs"
12
+ }
13
+ },
14
+ "main": "dist/index.mjs",
15
+ "types": "dist/index.d.mts",
16
+ "bin": {
17
+ "__NAME__": "dist/cli.mjs"
18
+ },
19
+ "files": [
20
+ "dist"
21
+ ],
22
+ "scripts": {
23
+ "build": "tsdown"
24
+ },
25
+ "dependencies": {
26
+ "ink": "latest",
27
+ "ink-spinner": "latest",
28
+ "react": "latest"
29
+ }
30
+ }
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env bun
2
+ /* eslint-disable no-console */
3
+ import pkg from '../package.json' with { type: 'json' }
4
+
5
+ const args = process.argv.slice(2)
6
+ const flags = new Set(args.filter(a => a.startsWith('-')))
7
+ const command = args.find(a => !a.startsWith('-'))
8
+ if (flags.has('--version') || flags.has('-v')) console.log(pkg.version)
9
+ else if (command === 'hello') console.log(`Hello from ${pkg.name}!`)
10
+ else if (command === 'tui') {
11
+ const { run } = await import('./tui.js')
12
+ await run()
13
+ } else
14
+ console.log(
15
+ `${pkg.name} v${pkg.version}\n\nCommands:\n hello — say hello\n tui — interactive terminal UI\n -v — show version`
16
+ )
@@ -0,0 +1,2 @@
1
+ const greet = (name: string) => `Hello, ${name}!`
2
+ export { greet }
@@ -0,0 +1,57 @@
1
+ import { Box, render, Text, useApp, useInput } from 'ink'
2
+ import Spinner from 'ink-spinner'
3
+ import { useState } from 'react'
4
+ import pkg from '../package.json' with { type: 'json' }
5
+
6
+ const ITEMS = ['build', 'test', 'deploy']
7
+ const App = () => {
8
+ const app = useApp()
9
+ const [selected, setSelected] = useState(0)
10
+ const [running, setRunning] = useState<null | string>(null)
11
+ const [done, setDone] = useState<Set<string>>(() => new Set())
12
+ useInput((input, key) => {
13
+ if (input === 'q') app.exit()
14
+ if (key.upArrow || input === 'k') setSelected(i => Math.max(0, i - 1))
15
+ if (key.downArrow || input === 'j') setSelected(i => Math.min(ITEMS.length - 1, i + 1))
16
+ if (key.return && !running) {
17
+ const item = ITEMS[selected]
18
+ if (item && !done.has(item)) {
19
+ setRunning(item)
20
+ setTimeout(() => {
21
+ setDone(prev => new Set([...prev, item]))
22
+ setRunning(null)
23
+ }, 1500)
24
+ }
25
+ }
26
+ })
27
+ return (
28
+ <Box flexDirection='column'>
29
+ <Box gap={1} paddingLeft={1}>
30
+ <Text bold color='magenta'>
31
+ ⚡ {pkg.name}
32
+ </Text>
33
+ <Text dimColor>{ITEMS.length} tasks</Text>
34
+ </Box>
35
+ {ITEMS.map((item, i) => (
36
+ <Box gap={1} key={item} paddingLeft={1}>
37
+ <Text color={i === selected ? 'cyan' : undefined}>{i === selected ? '›' : ' '}</Text>
38
+ {running === item ? (
39
+ <Spinner type='dots' />
40
+ ) : (
41
+ <Text color={done.has(item) ? 'green' : undefined}>{done.has(item) ? '✔' : '·'}</Text>
42
+ )}
43
+ <Text bold={i === selected}>{item}</Text>
44
+ </Box>
45
+ ))}
46
+ <Box paddingLeft={1} paddingTop={1}>
47
+ <Text dimColor>↑↓/jk select · ↵ run · q quit</Text>
48
+ </Box>
49
+ </Box>
50
+ )
51
+ }
52
+ App.displayName = 'App'
53
+ const run = async () => {
54
+ const app = render(<App />)
55
+ await app.waitUntilExit()
56
+ }
57
+ export { run }
@@ -0,0 +1,9 @@
1
+ import { defineConfig } from 'tsdown'
2
+
3
+ export default defineConfig({
4
+ clean: true,
5
+ dts: true,
6
+ entry: ['src/index.ts', 'src/cli.ts', 'src/tui.tsx'],
7
+ format: 'esm',
8
+ outDir: 'dist'
9
+ })
@@ -0,0 +1,6 @@
1
+ ---
2
+ title: Getting Started
3
+ description: __NAME__ documentation
4
+ ---
5
+ ## Welcome
6
+ This is the documentation for **__NAME__**.
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "docs",
3
+ "version": "0.0.0",
4
+ "private": true,
5
+ "scripts": {
6
+ "build": "bunx --bun fumadocs-mdx && bunx --bun next build",
7
+ "dev": "next dev",
8
+ "postinstall": "bunx --bun fumadocs-mdx",
9
+ "start": "next start"
10
+ },
11
+ "dependencies": {
12
+ "fumadocs-core": "latest",
13
+ "fumadocs-mdx": "latest",
14
+ "fumadocs-ui": "latest",
15
+ "lucide-react": "latest",
16
+ "next": "latest",
17
+ "react": "latest",
18
+ "react-dom": "latest"
19
+ }
20
+ }
@@ -0,0 +1,16 @@
1
+ import { metaSchema, pageSchema } from 'fumadocs-core/source/schema'
2
+ import { defineConfig, defineDocs } from 'fumadocs-mdx/config'
3
+
4
+ export const docs = defineDocs({
5
+ dir: 'content/docs',
6
+ docs: {
7
+ postprocess: {
8
+ includeProcessedMarkdown: true
9
+ },
10
+ schema: pageSchema
11
+ },
12
+ meta: {
13
+ schema: metaSchema
14
+ }
15
+ })
16
+ export default defineConfig({})
@@ -0,0 +1,11 @@
1
+ import Link from 'next/link'
2
+
3
+ const Page = () => (
4
+ <div className='flex flex-1 flex-col items-center justify-center gap-8 px-4'>
5
+ <h1 className='text-6xl font-extrabold tracking-tighter'>__NAME__</h1>
6
+ <Link className='rounded-full bg-primary px-8 py-3 text-sm font-semibold text-primary-foreground' href='/docs'>
7
+ Get Started
8
+ </Link>
9
+ </div>
10
+ )
11
+ export default Page
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "@__NAME__/lib",
3
+ "version": "0.0.1",
4
+ "description": "Shared utilities",
5
+ "license": "MIT",
6
+ "author": "1qh",
7
+ "type": "module",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.mts",
11
+ "import": "./dist/index.mjs"
12
+ }
13
+ },
14
+ "main": "dist/index.mjs",
15
+ "types": "dist/index.d.mts",
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "scripts": {
20
+ "build": "tsdown"
21
+ }
22
+ }
@@ -0,0 +1,2 @@
1
+ const greet = (name: string) => `Hello, ${name}!`
2
+ export { greet }
@@ -0,0 +1,9 @@
1
+ import { defineConfig } from 'tsdown'
2
+
3
+ export default defineConfig({
4
+ clean: true,
5
+ dts: true,
6
+ entry: ['src/index.ts'],
7
+ format: 'esm',
8
+ outDir: 'dist'
9
+ })
@@ -0,0 +1,38 @@
1
+ {
2
+ "private": true,
3
+ "workspaces": [
4
+ "packages/*",
5
+ "apps/*",
6
+ "readonly/ui"
7
+ ],
8
+ "scripts": {
9
+ "action": "sh up.sh",
10
+ "build": "bash -c \"turbo build --output-logs=errors-only 2> >(grep -vE 'WARNING|Could not resolve workspaces|missing field|Turborepo will still function' >&2)\"",
11
+ "check": "lintmax check",
12
+ "clean": "sh clean.sh",
13
+ "fix": "lintmax fix",
14
+ "postinstall": "sherif",
15
+ "prepare": "bunx simple-git-hooks"
16
+ },
17
+ "simple-git-hooks": {
18
+ "pre-commit": "sh up.sh && git add -u"
19
+ },
20
+ "devDependencies": {
21
+ "@types/node": "latest",
22
+ "lintmax": "latest",
23
+ "sherif": "latest",
24
+ "simple-git-hooks": "latest",
25
+ "tsdown": "latest",
26
+ "turbo": "latest",
27
+ "typescript": "latest",
28
+ "unrun": "latest"
29
+ },
30
+ "packageManager": "__PACKAGE_MANAGER__",
31
+ "trustedDependencies": [
32
+ "esbuild",
33
+ "lintmax",
34
+ "msw",
35
+ "sharp",
36
+ "simple-git-hooks"
37
+ ]
38
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "web",
3
+ "version": "0.0.0",
4
+ "private": true,
5
+ "scripts": {
6
+ "build": "next build",
7
+ "dev": "next dev --turbo",
8
+ "start": "next start"
9
+ },
10
+ "dependencies": {
11
+ "@a/ui": "workspace:*",
12
+ "next": "latest",
13
+ "next-themes": "latest",
14
+ "react": "latest",
15
+ "react-dom": "latest"
16
+ }
17
+ }
@@ -0,0 +1,6 @@
1
+ const Page = () => (
2
+ <div className='flex min-h-screen items-center justify-center'>
3
+ <h1 className='text-4xl font-bold'>Welcome</h1>
4
+ </div>
5
+ )
6
+ export default Page
@@ -0,0 +1,15 @@
1
+ 'use client'
2
+ import type { ReactNode } from 'react'
3
+ import { Toaster } from '@a/ui/components/sonner'
4
+ import { TooltipProvider } from '@a/ui/components/tooltip'
5
+ import { ThemeProvider } from 'next-themes'
6
+
7
+ const Providers = ({ children }: { children: ReactNode }) => (
8
+ <ThemeProvider attribute='class' defaultTheme='dark' disableTransitionOnChange enableSystem={false}>
9
+ <TooltipProvider>
10
+ {children}
11
+ <Toaster />
12
+ </TooltipProvider>
13
+ </ThemeProvider>
14
+ )
15
+ export { Providers }
@@ -0,0 +1,221 @@
1
+ import { $, Glob, file, write } from "bun";
2
+ import { existsSync, readFileSync } from "node:fs";
3
+ import { dirname, join } from "node:path";
4
+ //#region src/constants.ts
5
+ const selfPkg = JSON.parse(readFileSync(join(import.meta.dirname, "..", "package.json"), "utf8"));
6
+ const PKG_NAME = selfPkg.name ?? "pm4ai";
7
+ const DEFAULT_LICENSE = selfPkg.license ?? "MIT";
8
+ const LINTMAX_PKG = "lintmax";
9
+ const TSDOWN_BASE = {
10
+ clean: true,
11
+ deps: { neverBundle: ["bun"] },
12
+ dts: true,
13
+ format: "esm",
14
+ outDir: "dist"
15
+ };
16
+ const DEFAULT_FILES = [TSDOWN_BASE.outDir];
17
+ const REQUIRED_ROOT_DEVDEPS = selfPkg.requiredDevDeps ?? [];
18
+ const DEFAULT_DEP_VERSION = "latest";
19
+ const CLAUDE_MD = "CLAUDE.md";
20
+ const CONFIG_DIR = ".pm4ai";
21
+ const EXPECTED = {
22
+ preCommit: "sh up.sh && git add -u",
23
+ prepare: "bunx simple-git-hooks",
24
+ tsconfigExtends: `${LINTMAX_PKG}/tsconfig`,
25
+ vercelInstall: "bun i"
26
+ };
27
+ const TURBO_FLAG = "--output-logs=errors-only";
28
+ const TURBO_WARNING_FILTER = "WARNING|Could not resolve workspaces|missing field|Turborepo will still function";
29
+ const filterTurboWorkspaceWarning = (cmd) => `bash -c "${cmd} 2> >(grep -vE '${TURBO_WARNING_FILTER}' >&2)"`;
30
+ const DEFAULT_SCRIPTS = {
31
+ build: filterTurboWorkspaceWarning(`turbo build ${TURBO_FLAG}`),
32
+ check: `${LINTMAX_PKG} check`,
33
+ clean: "sh clean.sh",
34
+ fix: `${LINTMAX_PKG} fix`,
35
+ postinstall: "sherif",
36
+ prepare: EXPECTED.prepare
37
+ };
38
+ const FORBIDDEN_LOCKFILES = [
39
+ "package-lock.json",
40
+ "yarn.lock",
41
+ "pnpm-lock.yaml",
42
+ ".npmrc",
43
+ ".yarnrc",
44
+ ".yarnrc.yml"
45
+ ];
46
+ const FORBIDDEN_PM_PREFIXES = [
47
+ "npm ",
48
+ "npx ",
49
+ "yarn ",
50
+ "pnpm "
51
+ ];
52
+ const MONOREPO_NAME = "pm4ai-monorepo";
53
+ const MUST_EXIST_FILES = ["turbo.json", "tsconfig.json"];
54
+ const SWIFTBAR_FONT = "| font=Menlo size=13";
55
+ const READONLY_UI = "readonly/ui";
56
+ const UI_PACKAGE_NAME = "@a/ui";
57
+ const RG_EXCLUDE_DIRS = [
58
+ "node_modules",
59
+ "readonly",
60
+ ".next",
61
+ "dist",
62
+ "_generated",
63
+ "generated"
64
+ ];
65
+ const RG_EXCLUDE_FILES = ["banned.ts"];
66
+ const RG_EXCLUDE = [...RG_EXCLUDE_DIRS.flatMap((d) => ["-g", `!${d}`]), ...RG_EXCLUDE_FILES.flatMap((f) => ["-g", `!**/${f}`])];
67
+ const VERBATIM_FILES = [
68
+ "clean.sh",
69
+ "up.sh",
70
+ "bunfig.toml",
71
+ ".gitignore"
72
+ ];
73
+ const CONDITIONAL_VERBATIM_FILES = [
74
+ {
75
+ extendable: true,
76
+ path: ".github/workflows/ci.yml",
77
+ when: "github"
78
+ },
79
+ {
80
+ path: "postcss.config.ts",
81
+ when: "tailwind"
82
+ },
83
+ {
84
+ path: "apps/docs/src/app/global.css",
85
+ when: "fumadocs"
86
+ },
87
+ {
88
+ path: "tools/prune-versions.ts",
89
+ when: "publishable"
90
+ }
91
+ ];
92
+ const CONDITIONAL_MUST_EXIST_FILES = [{
93
+ path: "postcss.config.ts",
94
+ when: "tailwind"
95
+ }, {
96
+ path: ".github/workflows/ci.yml",
97
+ when: "github"
98
+ }];
99
+ //#endregion
100
+ //#region src/utils.ts
101
+ /** biome-ignore-all lint/suspicious/noEmptyBlockStatements: intentional catch-swallow */
102
+ const readJson = async (path) => {
103
+ const f = file(path);
104
+ if (!await f.exists()) return;
105
+ try {
106
+ const raw = await f.json();
107
+ if (typeof raw === "object" && raw !== null && !Array.isArray(raw)) return raw;
108
+ } catch {}
109
+ };
110
+ const readPkg = async (path) => {
111
+ return await readJson(path);
112
+ };
113
+ const projectName = (path) => path.split("/").pop() ?? "";
114
+ const getBunVersion = async () => {
115
+ return (await $`bun --version`.quiet().nothrow()).stdout.toString().trim();
116
+ };
117
+ const ghRepoRe = /github\.com[/:](?<repo>[^/]+\/[^/.]+)/u;
118
+ const getGhRepo = async (projectPath) => {
119
+ const result = await $`git remote get-url origin`.cwd(projectPath).quiet().nothrow();
120
+ return ghRepoRe.exec(result.stdout.toString().trim())?.groups?.repo;
121
+ };
122
+ const collectWorkspacePackages = async (projectPath) => {
123
+ const rootPkgPath = join(projectPath, "package.json");
124
+ const rootPkg = await readPkg(rootPkgPath);
125
+ if (!rootPkg) return [];
126
+ const results = [{
127
+ path: rootPkgPath,
128
+ pkg: rootPkg
129
+ }];
130
+ const workspaces = rootPkg.workspaces ?? [];
131
+ const negated = new Set(workspaces.filter((w) => w.startsWith("!")).map((w) => w.slice(1)));
132
+ const positive = workspaces.filter((w) => !w.startsWith("!"));
133
+ const matched = /* @__PURE__ */ new Set();
134
+ for (const ws of positive) {
135
+ const glob = new Glob(ws);
136
+ for (const match of glob.scanSync({
137
+ cwd: projectPath,
138
+ onlyFiles: false
139
+ })) if (!negated.has(match)) matched.add(match);
140
+ }
141
+ const wsPkgPaths = [...matched].map((m) => join(projectPath, m, "package.json")).filter((p) => existsSync(p));
142
+ const wsPkgs = await Promise.all(wsPkgPaths.map(async (p) => {
143
+ const pkg = await readPkg(p);
144
+ return pkg ? {
145
+ path: p,
146
+ pkg
147
+ } : void 0;
148
+ }));
149
+ for (const wp of wsPkgs) if (wp) results.push(wp);
150
+ return results;
151
+ };
152
+ let verbose = false;
153
+ const setVerbose = (v) => {
154
+ verbose = v;
155
+ };
156
+ const debug = (...args) => {
157
+ if (verbose) console.error("[pm4ai]", ...args);
158
+ };
159
+ const findGitRoot = () => {
160
+ let dir = process.cwd();
161
+ while (dir !== "/") {
162
+ if (existsSync(join(dir, ".git"))) return dir;
163
+ dir = dirname(dir);
164
+ }
165
+ };
166
+ const isInsideProject = async () => {
167
+ const root = findGitRoot();
168
+ if (!root) return;
169
+ if ((await collectWorkspacePackages(root)).some(({ pkg }) => {
170
+ return "lintmax" in {
171
+ ...pkg.dependencies,
172
+ ...pkg.devDependencies
173
+ };
174
+ })) return root;
175
+ };
176
+ const rel = (fullPath, base) => fullPath.replace(`${base}/`, "");
177
+ const getTsconfigTypes = (config) => config.compilerOptions?.types;
178
+ const writeJson = async (path, data) => write(file(path), `${JSON.stringify(data, null, 2)}\n`);
179
+ const isSkippedPath = (path) => path.includes("readonly/") || path.includes(".next/");
180
+ const gitCleanRe = /\bgit\s+clean\s+\S+\s*/gu;
181
+ const detectCapabilities = async (projectPath) => {
182
+ const entries = await collectWorkspacePackages(projectPath);
183
+ const allDeps = /* @__PURE__ */ new Set();
184
+ for (const { pkg } of entries) {
185
+ for (const k of Object.keys(pkg.dependencies ?? {})) allDeps.add(k);
186
+ for (const k of Object.keys(pkg.devDependencies ?? {})) allDeps.add(k);
187
+ }
188
+ const github = Boolean(await getGhRepo(projectPath));
189
+ const tailwind = allDeps.has("tailwindcss") || allDeps.has("@tailwindcss/postcss") || [...allDeps].some((d) => d.startsWith("@tailwindcss/"));
190
+ return {
191
+ fumadocs: allDeps.has("fumadocs-ui"),
192
+ github,
193
+ publishable: entries.some(({ pkg }) => pkg.name && !pkg.private),
194
+ tailwind
195
+ };
196
+ };
197
+ const resolveManagedFiles = async (projectPath) => {
198
+ const caps = await detectCapabilities(projectPath);
199
+ const verbatim = VERBATIM_FILES.map((path) => ({
200
+ extendable: false,
201
+ path
202
+ }));
203
+ const conditional = CONDITIONAL_VERBATIM_FILES.filter((c) => caps[c.when]).map((c) => ({
204
+ extendable: c.extendable ?? false,
205
+ path: c.path
206
+ }));
207
+ return [...verbatim, ...conditional];
208
+ };
209
+ const TRAILING_WS_RE = /\s+$/u;
210
+ const normalizeTail = (content) => content.replace(TRAILING_WS_RE, "");
211
+ const isExtended = (canonical, consumer) => normalizeTail(consumer).startsWith(normalizeTail(canonical));
212
+ const buildPkgDepMap = (entries) => {
213
+ const result = /* @__PURE__ */ new Map();
214
+ for (const { pkg } of entries) if (pkg.name) {
215
+ const deps = new Set(Object.entries(pkg.dependencies ?? {}).filter(([n, v]) => !(v.startsWith("workspace:") || n.startsWith("@types/"))).map(([n]) => n));
216
+ result.set(pkg.name, deps);
217
+ }
218
+ return result;
219
+ };
220
+ //#endregion
221
+ export { MONOREPO_NAME as A, UI_PACKAGE_NAME as B, DEFAULT_FILES as C, FORBIDDEN_LOCKFILES as D, EXPECTED as E, RG_EXCLUDE as F, SWIFTBAR_FONT as I, TSDOWN_BASE as L, PKG_NAME as M, READONLY_UI as N, FORBIDDEN_PM_PREFIXES as O, REQUIRED_ROOT_DEVDEPS as P, TURBO_FLAG as R, DEFAULT_DEP_VERSION as S, DEFAULT_SCRIPTS as T, filterTurboWorkspaceWarning as V, setVerbose as _, getBunVersion as a, CONDITIONAL_MUST_EXIST_FILES as b, gitCleanRe as c, isSkippedPath as d, projectName as f, resolveManagedFiles as g, rel as h, detectCapabilities as i, MUST_EXIST_FILES as j, LINTMAX_PKG as k, isExtended as l, readPkg as m, collectWorkspacePackages as n, getGhRepo as o, readJson as p, debug as r, getTsconfigTypes as s, buildPkgDepMap as t, isInsideProject as u, writeJson as v, DEFAULT_LICENSE as w, CONFIG_DIR as x, CLAUDE_MD as y, TURBO_WARNING_FILTER as z };