pm4ai 0.0.6

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.
Files changed (81) hide show
  1. package/dist/audit.d.ts +20 -0
  2. package/dist/audit.d.ts.map +1 -0
  3. package/dist/audit.js +254 -0
  4. package/dist/audit.js.map +1 -0
  5. package/dist/check-cache.d.ts +21 -0
  6. package/dist/check-cache.d.ts.map +1 -0
  7. package/dist/check-cache.js +89 -0
  8. package/dist/check-cache.js.map +1 -0
  9. package/dist/check-worker.d.ts +2 -0
  10. package/dist/check-worker.d.ts.map +1 -0
  11. package/dist/check-worker.js +42 -0
  12. package/dist/check-worker.js.map +1 -0
  13. package/dist/checks.d.ts +11 -0
  14. package/dist/checks.d.ts.map +1 -0
  15. package/dist/checks.js +176 -0
  16. package/dist/checks.js.map +1 -0
  17. package/dist/cli.d.ts +2 -0
  18. package/dist/cli.d.ts.map +1 -0
  19. package/dist/cli.js +44 -0
  20. package/dist/cli.js.map +1 -0
  21. package/dist/constants.d.ts +22 -0
  22. package/dist/constants.d.ts.map +1 -0
  23. package/dist/constants.js +22 -0
  24. package/dist/constants.js.map +1 -0
  25. package/dist/discover.d.ts +19 -0
  26. package/dist/discover.d.ts.map +1 -0
  27. package/dist/discover.js +132 -0
  28. package/dist/discover.js.map +1 -0
  29. package/dist/fix.d.ts +5 -0
  30. package/dist/fix.d.ts.map +1 -0
  31. package/dist/fix.js +182 -0
  32. package/dist/fix.js.map +1 -0
  33. package/dist/format.d.ts +9 -0
  34. package/dist/format.d.ts.map +1 -0
  35. package/dist/format.js +93 -0
  36. package/dist/format.js.map +1 -0
  37. package/dist/guide.d.ts +2 -0
  38. package/dist/guide.d.ts.map +1 -0
  39. package/dist/guide.js +50 -0
  40. package/dist/guide.js.map +1 -0
  41. package/dist/index.d.ts +8 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +7 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/infer.d.ts +4 -0
  46. package/dist/infer.d.ts.map +1 -0
  47. package/dist/infer.js +56 -0
  48. package/dist/infer.js.map +1 -0
  49. package/dist/init.d.ts +3 -0
  50. package/dist/init.d.ts.map +1 -0
  51. package/dist/init.js +75 -0
  52. package/dist/init.js.map +1 -0
  53. package/dist/log.d.ts +12 -0
  54. package/dist/log.d.ts.map +1 -0
  55. package/dist/log.js +26 -0
  56. package/dist/log.js.map +1 -0
  57. package/dist/preflight.d.ts +3 -0
  58. package/dist/preflight.d.ts.map +1 -0
  59. package/dist/preflight.js +29 -0
  60. package/dist/preflight.js.map +1 -0
  61. package/dist/setup.d.ts +3 -0
  62. package/dist/setup.d.ts.map +1 -0
  63. package/dist/setup.js +67 -0
  64. package/dist/setup.js.map +1 -0
  65. package/dist/status.d.ts +4 -0
  66. package/dist/status.d.ts.map +1 -0
  67. package/dist/status.js +66 -0
  68. package/dist/status.js.map +1 -0
  69. package/dist/sync.d.ts +9 -0
  70. package/dist/sync.d.ts.map +1 -0
  71. package/dist/sync.js +301 -0
  72. package/dist/sync.js.map +1 -0
  73. package/dist/types.d.ts +26 -0
  74. package/dist/types.d.ts.map +1 -0
  75. package/dist/types.js +1 -0
  76. package/dist/types.js.map +1 -0
  77. package/dist/utils.d.ts +15 -0
  78. package/dist/utils.d.ts.map +1 -0
  79. package/dist/utils.js +83 -0
  80. package/dist/utils.js.map +1 -0
  81. package/package.json +42 -0
@@ -0,0 +1,20 @@
1
+ import type { Issue, PackageJson } from './types.js';
2
+ interface PkgEntry {
3
+ path: string;
4
+ pkg: PackageJson;
5
+ }
6
+ declare const checkPackageConventions: (pkgs: PkgEntry[], projectPath: string) => Issue[];
7
+ declare const checkNotLatest: (pkgs: PkgEntry[], projectPath: string) => Issue[];
8
+ declare const checkDuplicates: (pkgs: PkgEntry[], projectPath: string) => Issue[];
9
+ declare const usesForbidden: (cmd: string) => boolean;
10
+ declare const checkScripts: (pkgs: PkgEntry[], projectPath: string) => Issue[];
11
+ declare const checkRootScripts: (rootPkg: PackageJson) => Issue[];
12
+ declare const checkRootWorkspacesAndDevDeps: (rootPkg: PackageJson) => Issue[];
13
+ declare const checkTrustedDeps: (rootPkg: PackageJson) => Issue[];
14
+ declare const checkPublishedPkgConventions: (pkgs: PkgEntry[], projectPath: string) => Issue[];
15
+ declare const checkAppPackages: (pkgs: PkgEntry[], projectPath: string) => Issue[];
16
+ declare const checkSubPkgScripts: (pkgs: PkgEntry[], projectPath: string) => Issue[];
17
+ declare const audit: (projectPath: string) => Promise<Issue[]>;
18
+ export { audit, checkAppPackages, checkDuplicates, checkNotLatest, checkPackageConventions, checkPublishedPkgConventions, checkRootScripts, checkRootWorkspacesAndDevDeps, checkScripts, checkSubPkgScripts, checkTrustedDeps, usesForbidden };
19
+ export type { PkgEntry };
20
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AASpD,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,WAAW,CAAA;CACjB;AAgDD,QAAA,MAAM,uBAAuB,GAAI,MAAM,QAAQ,EAAE,EAAE,aAAa,MAAM,KAAG,KAAK,EAkB7E,CAAA;AACD,QAAA,MAAM,cAAc,GAAI,MAAM,QAAQ,EAAE,EAAE,aAAa,MAAM,KAAG,KAAK,EAUpE,CAAA;AACD,QAAA,MAAM,eAAe,GAAI,MAAM,QAAQ,EAAE,EAAE,aAAa,MAAM,KAAG,KAAK,EA2BrE,CAAA;AACD,QAAA,MAAM,aAAa,GAAI,KAAK,MAAM,YAC0E,CAAA;AAE5G,QAAA,MAAM,YAAY,GAAI,MAAM,QAAQ,EAAE,EAAE,aAAa,MAAM,KAAG,KAAK,EAiBlE,CAAA;AACD,QAAA,MAAM,gBAAgB,GAAI,SAAS,WAAW,KAAG,KAAK,EASrD,CAAA;AACD,QAAA,MAAM,6BAA6B,GAAI,SAAS,WAAW,KAAG,KAAK,EAQlE,CAAA;AACD,QAAA,MAAM,gBAAgB,GAAI,SAAS,WAAW,KAAG,KAAK,EAMrD,CAAA;AACD,QAAA,MAAM,4BAA4B,GAAI,MAAM,QAAQ,EAAE,EAAE,aAAa,MAAM,KAAG,KAAK,EASlF,CAAA;AACD,QAAA,MAAM,gBAAgB,GAAI,MAAM,QAAQ,EAAE,EAAE,aAAa,MAAM,KAAG,KAAK,EAOtE,CAAA;AAED,QAAA,MAAM,kBAAkB,GAAI,MAAM,QAAQ,EAAE,EAAE,aAAa,MAAM,KAAG,KAAK,EAWxE,CAAA;AACD,QAAA,MAAM,KAAK,GAAU,aAAa,MAAM,KAAG,OAAO,CAAC,KAAK,EAAE,CAgDzD,CAAA;AACD,OAAO,EACL,KAAK,EACL,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,uBAAuB,EACvB,4BAA4B,EAC5B,gBAAgB,EAChB,6BAA6B,EAC7B,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACd,CAAA;AACD,YAAY,EAAE,QAAQ,EAAE,CAAA"}
package/dist/audit.js ADDED
@@ -0,0 +1,254 @@
1
+ import { $ } from 'bun';
2
+ import { join } from 'node:path';
3
+ import { FORBIDDEN_PM_PREFIXES, REQUIRED_ROOT_DEVDEPS, REQUIRED_TRUSTED_DEPS, SKIP_PATTERNS, TURBO_FLAG } from './constants.js';
4
+ import { collectWorkspacePackages, debug } from './utils.js';
5
+ const latestNpmVersionCache = new Map();
6
+ const fetchNpmVersion = async (pkg) => {
7
+ const url = `https://registry.npmjs.org/${pkg}/latest`;
8
+ const res = await fetch(url).catch(() => undefined);
9
+ if (!res?.ok) {
10
+ debug('fetch failed:', url);
11
+ return;
12
+ }
13
+ const data = (await res.json());
14
+ return data.version;
15
+ };
16
+ const getLatestNpmVersion = async (pkg) => {
17
+ const cached = latestNpmVersionCache.get(pkg);
18
+ if (cached)
19
+ return cached;
20
+ const p = fetchNpmVersion(pkg);
21
+ latestNpmVersionCache.set(pkg, p);
22
+ const v = await p;
23
+ if (!v)
24
+ latestNpmVersionCache.delete(pkg);
25
+ return v;
26
+ };
27
+ let latestBunVersionCache;
28
+ const fetchBunVersion = async () => {
29
+ const url = 'https://api.github.com/repos/oven-sh/bun/releases/latest';
30
+ const res = await fetch(url).catch(() => undefined);
31
+ if (!res?.ok) {
32
+ debug('fetch failed:', url);
33
+ return;
34
+ }
35
+ const data = (await res.json());
36
+ return data.tag_name.replace('bun-v', '');
37
+ };
38
+ const getLatestBunVersion = async () => {
39
+ if (latestBunVersionCache)
40
+ return latestBunVersionCache;
41
+ latestBunVersionCache = fetchBunVersion();
42
+ const v = await latestBunVersionCache;
43
+ if (!v)
44
+ latestBunVersionCache = undefined;
45
+ return v;
46
+ };
47
+ const isAutoSynced = (pkgPath) => SKIP_PATTERNS.some(p => pkgPath.includes(p));
48
+ const getDepsFromPkg = (pkg) => {
49
+ const result = new Map();
50
+ for (const field of ['dependencies', 'devDependencies']) {
51
+ const deps = pkg[field];
52
+ if (deps)
53
+ for (const [n, v] of Object.entries(deps))
54
+ result.set(n, v);
55
+ }
56
+ return result;
57
+ };
58
+ const checkPackageConventions = (pkgs, projectPath) => {
59
+ const issues = [];
60
+ const filtered = pkgs.filter(p => !isAutoSynced(p.path) && p.path !== join(projectPath, 'package.json'));
61
+ for (const { path: pkgPath, pkg } of filtered) {
62
+ const shortPath = pkgPath.replace(`${projectPath}/`, '');
63
+ const isPublished = !pkg.private && (pkg.exports ?? pkg.main ?? pkg.bin);
64
+ if (isPublished) {
65
+ if (pkg.type !== 'module')
66
+ issues.push({ detail: `${shortPath} should have "type": "module"`, type: 'drift' });
67
+ if (!pkg.files)
68
+ issues.push({ detail: `${shortPath} missing "files" field`, type: 'drift' });
69
+ if (!pkg.license)
70
+ issues.push({ detail: `${shortPath} missing "license" field`, type: 'drift' });
71
+ if (!pkg.repository)
72
+ issues.push({ detail: `${shortPath} missing "repository" field`, type: 'drift' });
73
+ }
74
+ const devDeps = pkg.devDependencies;
75
+ const externalDevDeps = devDeps ? Object.entries(devDeps).filter(([, v]) => !v.startsWith('workspace:')) : [];
76
+ if (externalDevDeps.length > 0)
77
+ issues.push({ detail: `${shortPath} devDependencies should be hoisted to root`, type: 'drift' });
78
+ }
79
+ return issues;
80
+ };
81
+ const checkNotLatest = (pkgs, projectPath) => {
82
+ const issues = [];
83
+ const filtered = pkgs.filter(p => !isAutoSynced(p.path));
84
+ for (const { path: pkgPath, pkg } of filtered) {
85
+ const shortPath = pkgPath.replace(`${projectPath}/`, '');
86
+ for (const [name, version] of getDepsFromPkg(pkg))
87
+ if (version !== 'latest' && !version.startsWith('workspace:') && !version.startsWith('^'))
88
+ issues.push({ detail: `${name} should be "latest" or "^major" (got ${version}) in ${shortPath}`, type: 'dep' });
89
+ }
90
+ return issues;
91
+ };
92
+ const checkDuplicates = (pkgs, projectPath) => {
93
+ const issues = [];
94
+ const pkgDepsByName = new Map();
95
+ for (const { pkg } of pkgs.filter(p => p.pkg.name)) {
96
+ const prodDeps = pkg.dependencies;
97
+ const deps = new Set(Object.entries(prodDeps ?? {})
98
+ .filter(([n, v]) => !(v.startsWith('workspace:') || n.startsWith('@types/')))
99
+ .map(([n]) => n));
100
+ const { name } = pkg;
101
+ if (name)
102
+ pkgDepsByName.set(name, deps);
103
+ }
104
+ const filtered = pkgs.filter(p => !isAutoSynced(p.path));
105
+ for (const { path: pkgPath, pkg } of filtered) {
106
+ const shortPath = pkgPath.replace(`${projectPath}/`, '');
107
+ const allDeps = [...getDepsFromPkg(pkg)];
108
+ const wsDeps = allDeps.filter(([, v]) => v.startsWith('workspace:')).map(([n]) => n);
109
+ const ownDeps = new Set(allDeps.filter(([, v]) => !v.startsWith('workspace:')).map(([n]) => n));
110
+ const providedByWs = new Set();
111
+ for (const ws of wsDeps)
112
+ for (const d of pkgDepsByName.get(ws) ?? [])
113
+ providedByWs.add(d);
114
+ const isRoot = pkgPath === join(projectPath, 'package.json');
115
+ const duplicated = [...ownDeps].filter(d => providedByWs.has(d) && !(isRoot && REQUIRED_ROOT_DEVDEPS.includes(d)));
116
+ for (const dep of duplicated)
117
+ issues.push({ detail: `${dep} in ${shortPath} already provided by workspace dep`, type: 'duplicate' });
118
+ }
119
+ return issues;
120
+ };
121
+ const usesForbidden = (cmd) => FORBIDDEN_PM_PREFIXES.some(p => cmd.startsWith(p) || cmd.includes(` && ${p}`) || cmd.includes(` || ${p}`));
122
+ const turboRe = /\bturbo\b/u;
123
+ const checkScripts = (pkgs, projectPath) => {
124
+ const issues = [];
125
+ const rootPkgPath = join(projectPath, 'package.json');
126
+ const filtered = pkgs.filter(p => !isAutoSynced(p.path));
127
+ for (const { path: pkgPath, pkg } of filtered) {
128
+ const shortPath = pkgPath.replace(`${projectPath}/`, '');
129
+ const isRoot = pkgPath === rootPkgPath;
130
+ const scripts = Object.entries(pkg.scripts ?? {});
131
+ for (const [script, cmd] of scripts) {
132
+ if (usesForbidden(cmd))
133
+ issues.push({ detail: `"${script}" uses non-bun pm in ${shortPath}`, type: 'forbidden' });
134
+ if (isRoot && turboRe.test(cmd) && !cmd.includes(TURBO_FLAG) && !script.startsWith('dev'))
135
+ issues.push({ detail: `"${script}" missing ${TURBO_FLAG}`, type: 'drift' });
136
+ }
137
+ if (!isRoot && scripts.some(([s]) => s === 'clean'))
138
+ issues.push({ detail: `${shortPath} has redundant "clean" script, use root clean.sh`, type: 'drift' });
139
+ }
140
+ return issues;
141
+ };
142
+ const checkRootScripts = (rootPkg) => {
143
+ const issues = [];
144
+ const scripts = rootPkg.scripts ?? {};
145
+ if (!scripts.build?.includes('turbo'))
146
+ issues.push({ detail: 'root "build" should use turbo', type: 'drift' });
147
+ if (scripts.check && !scripts.check.includes('lintmax') && !scripts.check.includes('cli.js check'))
148
+ issues.push({ detail: 'root "check" should include "lintmax check"', type: 'drift' });
149
+ if (scripts.fix && !scripts.fix.includes('lintmax') && !scripts.fix.includes('cli.js fix'))
150
+ issues.push({ detail: 'root "fix" should include "lintmax fix"', type: 'drift' });
151
+ return issues;
152
+ };
153
+ const checkRootWorkspacesAndDevDeps = (rootPkg) => {
154
+ const issues = [];
155
+ if (!rootPkg.workspaces || rootPkg.workspaces.length === 0)
156
+ issues.push({ detail: 'root missing "workspaces" field', type: 'missing' });
157
+ const allDeps = { ...rootPkg.dependencies, ...rootPkg.devDependencies };
158
+ for (const dep of REQUIRED_ROOT_DEVDEPS)
159
+ if (!allDeps[dep])
160
+ issues.push({ detail: `root missing "${dep}" in devDependencies`, type: 'missing' });
161
+ return issues;
162
+ };
163
+ const checkTrustedDeps = (rootPkg) => {
164
+ const issues = [];
165
+ const trusted = rootPkg.trustedDependencies ?? [];
166
+ for (const dep of REQUIRED_TRUSTED_DEPS)
167
+ if (!trusted.includes(dep))
168
+ issues.push({ detail: `root missing "${dep}" in trustedDependencies`, type: 'missing' });
169
+ return issues;
170
+ };
171
+ const checkPublishedPkgConventions = (pkgs, projectPath) => {
172
+ const issues = [];
173
+ const published = pkgs.filter(p => !p.pkg.private && (p.pkg.exports ?? p.pkg.main ?? p.pkg.bin) && p.pkg.name);
174
+ for (const { path: pkgPath, pkg } of published) {
175
+ const shortPath = pkgPath.replace(`${projectPath}/`, '');
176
+ if (!pkg.scripts?.postpublish)
177
+ issues.push({ detail: `${shortPath} published but missing "postpublish" cleanup`, type: 'drift' });
178
+ }
179
+ return issues;
180
+ };
181
+ const checkAppPackages = (pkgs, projectPath) => {
182
+ const issues = [];
183
+ for (const { path: pkgPath, pkg } of pkgs) {
184
+ const rel = pkgPath.replace(`${projectPath}/`, '');
185
+ if (rel.startsWith('apps/') && !pkg.private)
186
+ issues.push({ detail: `${rel} should be private`, type: 'drift' });
187
+ }
188
+ return issues;
189
+ };
190
+ const gitCleanRe = /\bgit\s+clean\b/u;
191
+ const checkSubPkgScripts = (pkgs, projectPath) => {
192
+ const issues = [];
193
+ const rootPkgPath = join(projectPath, 'package.json');
194
+ const filtered = pkgs.filter(p => !isAutoSynced(p.path) && p.path !== rootPkgPath);
195
+ for (const { path: pkgPath, pkg } of filtered) {
196
+ const shortPath = pkgPath.replace(`${projectPath}/`, '');
197
+ for (const [script, cmd] of Object.entries(pkg.scripts ?? {}))
198
+ if (gitCleanRe.test(cmd))
199
+ issues.push({ detail: `"${script}" uses git clean in ${shortPath}, use rm -rf`, type: 'forbidden' });
200
+ }
201
+ return issues;
202
+ };
203
+ const audit = async (projectPath) => {
204
+ const issues = [];
205
+ const entries = await collectWorkspacePackages(projectPath);
206
+ const pkgs = entries.map(e => ({ path: e.path, pkg: e.pkg }));
207
+ const rootPkg = pkgs[0]?.pkg;
208
+ const bunVersion = rootPkg?.packageManager?.replace('bun@', '');
209
+ if (bunVersion) {
210
+ const latest = await getLatestBunVersion();
211
+ if (latest && bunVersion !== latest)
212
+ issues.push({ detail: `${bunVersion} behind latest ${latest}`, type: 'bun' });
213
+ }
214
+ const rootDeps = getDepsFromPkg(rootPkg ?? {});
215
+ const lintmaxVersion = rootDeps.get('lintmax');
216
+ if (lintmaxVersion && !lintmaxVersion.startsWith('workspace:')) {
217
+ const lintmaxLatest = await getLatestNpmVersion('lintmax');
218
+ if (lintmaxLatest) {
219
+ const result = await $ `bun why lintmax`.cwd(projectPath).quiet().nothrow();
220
+ const resolved = result.stdout.toString().trim();
221
+ if (resolved && !resolved.includes(lintmaxLatest))
222
+ issues.push({ detail: `resolved version behind latest ${lintmaxLatest}`, type: 'lintmax' });
223
+ }
224
+ }
225
+ if (rootPkg) {
226
+ issues.push(...checkRootScripts(rootPkg));
227
+ issues.push(...checkRootWorkspacesAndDevDeps(rootPkg));
228
+ issues.push(...checkTrustedDeps(rootPkg));
229
+ }
230
+ issues.push(...checkPackageConventions(pkgs, projectPath));
231
+ issues.push(...checkNotLatest(pkgs, projectPath));
232
+ issues.push(...checkDuplicates(pkgs, projectPath));
233
+ issues.push(...checkScripts(pkgs, projectPath));
234
+ issues.push(...checkPublishedPkgConventions(pkgs, projectPath));
235
+ issues.push(...checkAppPackages(pkgs, projectPath));
236
+ issues.push(...checkSubPkgScripts(pkgs, projectPath));
237
+ const publishedPkgs = pkgs.filter(p => !p.pkg.private && (p.pkg.exports ?? p.pkg.main ?? p.pkg.bin) && p.pkg.name);
238
+ await Promise.all(publishedPkgs.map(async (p) => {
239
+ const r = await $ `bun pm view ${p.pkg.name} versions --json`.quiet().nothrow();
240
+ if (r.exitCode !== 0)
241
+ return;
242
+ try {
243
+ const versions = JSON.parse(r.stdout.toString());
244
+ if (versions.length > 1)
245
+ issues.push({ detail: `${p.pkg.name} has ${versions.length} versions published, run cleanup`, type: 'drift' });
246
+ }
247
+ catch {
248
+ /* Noop */
249
+ }
250
+ }));
251
+ return issues;
252
+ };
253
+ export { audit, checkAppPackages, checkDuplicates, checkNotLatest, checkPackageConventions, checkPublishedPkgConventions, checkRootScripts, checkRootWorkspacesAndDevDeps, checkScripts, checkSubPkgScripts, checkTrustedDeps, usesForbidden };
254
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ interface CheckResult {
2
+ at: string;
3
+ commit: string;
4
+ pass: boolean;
5
+ summary?: string;
6
+ violations: number;
7
+ }
8
+ declare const readCheckResult: (projectPath: string) => CheckResult | undefined;
9
+ declare const getHeadCommit: (projectPath: string) => string;
10
+ declare const getCodeCommitsSince: (projectPath: string, commit: string) => number;
11
+ declare const isCheckRunning: (projectPath: string) => boolean;
12
+ declare const writeCheckResult: (opts: {
13
+ pass: boolean;
14
+ projectPath: string;
15
+ summary?: string;
16
+ violations: number;
17
+ }) => void;
18
+ declare const spawnBackgroundCheck: (projectPath: string) => void;
19
+ export { getCodeCommitsSince, getHeadCommit, isCheckRunning, readCheckResult, spawnBackgroundCheck, writeCheckResult };
20
+ export type { CheckResult };
21
+ //# sourceMappingURL=check-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-cache.d.ts","sourceRoot":"","sources":["../src/check-cache.ts"],"names":[],"mappings":"AASA,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;CACnB;AAMD,QAAA,MAAM,eAAe,GAAI,aAAa,MAAM,KAAG,WAAW,GAAG,SAM5D,CAAA;AACD,QAAA,MAAM,aAAa,GAAI,aAAa,MAAM,KAAG,MAK5C,CAAA;AACD,QAAA,MAAM,mBAAmB,GAAI,aAAa,MAAM,EAAE,QAAQ,MAAM,KAAG,MAQlE,CAAA;AACD,QAAA,MAAM,cAAc,GAAI,aAAa,MAAM,KAAG,OAqB7C,CAAA;AACD,QAAA,MAAM,gBAAgB,GAAI,MAAM;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,SAW3G,CAAA;AACD,QAAA,MAAM,oBAAoB,GAAI,aAAa,MAAM,SAOhD,CAAA;AACD,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,CAAA;AACtH,YAAY,EAAE,WAAW,EAAE,CAAA"}
@@ -0,0 +1,89 @@
1
+ /** biome-ignore-all lint/suspicious/noEmptyBlockStatements: intentional catch-swallow */
2
+ /* oxlint-disable no-empty */
3
+ /* eslint-disable no-empty */
4
+ import { spawn } from 'bun';
5
+ import { execFileSync } from 'node:child_process';
6
+ import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
7
+ import { homedir } from 'node:os';
8
+ import { join } from 'node:path';
9
+ import { CLAUDE_MD, VERBATIM_FILES } from './constants.js';
10
+ const checksDir = () => join(homedir(), '.pm4ai', 'checks');
11
+ const leadingSepRe = /^--/u;
12
+ const safeFileName = (projectPath) => projectPath.replaceAll('/', '--').replace(leadingSepRe, '');
13
+ const cachePath = (projectPath) => join(checksDir(), `${safeFileName(projectPath)}.json`);
14
+ const lockPath = (projectPath) => join(checksDir(), `${safeFileName(projectPath)}.lock`);
15
+ const readCheckResult = (projectPath) => {
16
+ const p = cachePath(projectPath);
17
+ if (!existsSync(p))
18
+ return;
19
+ try {
20
+ return JSON.parse(readFileSync(p, 'utf8'));
21
+ }
22
+ catch { }
23
+ };
24
+ const getHeadCommit = (projectPath) => {
25
+ try {
26
+ return execFileSync('git', ['rev-parse', 'HEAD'], { cwd: projectPath, stdio: 'pipe' }).toString().trim();
27
+ }
28
+ catch { }
29
+ return '';
30
+ };
31
+ const getCodeCommitsSince = (projectPath, commit) => {
32
+ if (!commit)
33
+ return -1;
34
+ try {
35
+ const excludes = [CLAUDE_MD, '*.md', ...VERBATIM_FILES].map(f => `:!${f}`);
36
+ const args = ['rev-list', '--count', `${commit}..HEAD`, '--', ...excludes];
37
+ return Number.parseInt(execFileSync('git', args, { cwd: projectPath, stdio: 'pipe' }).toString().trim(), 10);
38
+ }
39
+ catch { }
40
+ return -1;
41
+ };
42
+ const isCheckRunning = (projectPath) => {
43
+ const lp = lockPath(projectPath);
44
+ if (!existsSync(lp))
45
+ return false;
46
+ try {
47
+ const lock = JSON.parse(readFileSync(lp, 'utf8'));
48
+ const age = Date.now() - new Date(lock.at).getTime();
49
+ if (age > 600_000) {
50
+ rmSync(lp);
51
+ return false;
52
+ }
53
+ try {
54
+ process.kill(lock.pid, 0);
55
+ return true;
56
+ }
57
+ catch {
58
+ rmSync(lp);
59
+ return false;
60
+ }
61
+ }
62
+ catch {
63
+ rmSync(lp);
64
+ return false;
65
+ }
66
+ };
67
+ const writeCheckResult = (opts) => {
68
+ const dir = checksDir();
69
+ mkdirSync(dir, { recursive: true });
70
+ const result = {
71
+ at: new Date().toISOString(),
72
+ commit: getHeadCommit(opts.projectPath),
73
+ pass: opts.pass,
74
+ summary: opts.summary,
75
+ violations: opts.violations
76
+ };
77
+ writeFileSync(cachePath(opts.projectPath), JSON.stringify(result));
78
+ };
79
+ const spawnBackgroundCheck = (projectPath) => {
80
+ if (isCheckRunning(projectPath))
81
+ return;
82
+ const dir = checksDir();
83
+ mkdirSync(dir, { recursive: true });
84
+ const workerPath = join(import.meta.dir, 'check-worker.js');
85
+ const proc = spawn(['bun', workerPath, projectPath], { stderr: 'ignore', stdin: 'ignore', stdout: 'ignore' });
86
+ proc.unref();
87
+ };
88
+ export { getCodeCommitsSince, getHeadCommit, isCheckRunning, readCheckResult, spawnBackgroundCheck, writeCheckResult };
89
+ //# sourceMappingURL=check-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-cache.js","sourceRoot":"","sources":["../src/check-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=check-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-worker.d.ts","sourceRoot":"","sources":["../src/check-worker.ts"],"names":[],"mappings":""}
@@ -0,0 +1,42 @@
1
+ import { execFileSync, execSync } from 'node:child_process';
2
+ import { mkdirSync, rmSync, writeFileSync } from 'node:fs';
3
+ import { homedir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ const projectPath = process.argv[2];
6
+ if (!projectPath)
7
+ throw new Error('project path required');
8
+ const safeName = projectPath.replaceAll('/', '--').replace(/^--/u, '');
9
+ const dir = join(homedir(), '.pm4ai', 'checks');
10
+ const cp = join(dir, `${safeName}.json`);
11
+ const lp = join(dir, `${safeName}.lock`);
12
+ mkdirSync(dir, { recursive: true });
13
+ writeFileSync(lp, JSON.stringify({ at: new Date().toISOString(), pid: process.pid }));
14
+ const getCommit = () => {
15
+ try {
16
+ return execFileSync('git', ['rev-parse', 'HEAD'], { cwd: projectPath, stdio: 'pipe' }).toString().trim();
17
+ }
18
+ catch {
19
+ return '';
20
+ }
21
+ };
22
+ const commit = getCommit();
23
+ try {
24
+ execSync('bun run check', { cwd: projectPath, stdio: 'pipe' });
25
+ writeFileSync(cp, JSON.stringify({ at: new Date().toISOString(), commit, pass: true, violations: 0 }));
26
+ }
27
+ catch (error) {
28
+ const err = error;
29
+ const out = (err.stderr ?? err.stdout ?? Buffer.from('')).toString();
30
+ const lines = out.split('\n').filter(Boolean);
31
+ const summary = lines.slice(-3).join('; ').slice(0, 200);
32
+ writeFileSync(cp, JSON.stringify({ at: new Date().toISOString(), commit, pass: false, summary, violations: lines.length }));
33
+ }
34
+ finally {
35
+ try {
36
+ rmSync(lp);
37
+ }
38
+ catch {
39
+ // Already removed
40
+ }
41
+ }
42
+ //# sourceMappingURL=check-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-worker.js","sourceRoot":"","sources":["../src/check-worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Issue } from './types.js';
2
+ declare const checkCi: (projectPath: string) => Promise<Issue[]>;
3
+ declare const checkGit: (projectPath: string) => Promise<Issue[]>;
4
+ declare const checkDrift: (selfPath: string, projectPath: string) => Promise<Issue[]>;
5
+ declare const checkRootPkg: (projectPath: string) => Promise<Issue[]>;
6
+ declare const checkConfigs: (projectPath: string) => Promise<Issue[]>;
7
+ declare const checkForbidden: (projectPath: string) => Promise<Issue[]>;
8
+ declare const checkVercel: (projectPath: string) => Promise<Issue[]>;
9
+ declare const checkLint: (projectPath: string) => Issue[];
10
+ export { checkCi, checkConfigs, checkDrift, checkForbidden, checkGit, checkLint, checkRootPkg, checkVercel };
11
+ //# sourceMappingURL=checks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../src/checks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAIvC,QAAA,MAAM,OAAO,GAAU,aAAa,MAAM,KAAG,OAAO,CAAC,KAAK,EAAE,CAc3D,CAAA;AACD,QAAA,MAAM,QAAQ,GAAU,aAAa,MAAM,KAAG,OAAO,CAAC,KAAK,EAAE,CAiB5D,CAAA;AACD,QAAA,MAAM,UAAU,GAAU,UAAU,MAAM,EAAE,aAAa,MAAM,KAAG,OAAO,CAAC,KAAK,EAAE,CAahF,CAAA;AACD,QAAA,MAAM,YAAY,GAAU,aAAa,MAAM,KAAG,OAAO,CAAC,KAAK,EAAE,CAgBhE,CAAA;AACD,QAAA,MAAM,YAAY,GAAU,aAAa,MAAM,KAAG,OAAO,CAAC,KAAK,EAAE,CAwBhE,CAAA;AACD,QAAA,MAAM,cAAc,GAAU,aAAa,MAAM,KAAG,OAAO,CAAC,KAAK,EAAE,CAqClE,CAAA;AACD,QAAA,MAAM,WAAW,GAAU,aAAa,MAAM,KAAG,OAAO,CAAC,KAAK,EAAE,CAS/D,CAAA;AACD,QAAA,MAAM,SAAS,GAAI,aAAa,MAAM,KAAG,KAAK,EAY7C,CAAA;AACD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,CAAA"}