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.

Potentially problematic release.


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

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
package/dist/checks.js ADDED
@@ -0,0 +1,176 @@
1
+ import { $, file } from 'bun';
2
+ import { existsSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { getCodeCommitsSince, isCheckRunning, readCheckResult } from './check-cache.js';
5
+ import { EXPECTED, FORBIDDEN_LOCKFILES, MUST_EXIST_FILES, VERBATIM_FILES } from './constants.js';
6
+ import { debug, getGhRepo, readJson, readPkg } from './utils.js';
7
+ const checkCi = async (projectPath) => {
8
+ const issues = [];
9
+ const repo = await getGhRepo(projectPath);
10
+ if (!repo)
11
+ return issues;
12
+ const ciResult = await $ `gh run list --repo ${repo} --limit 1 --json conclusion,createdAt --jq '.[0] | "\(.conclusion) \(.createdAt)"'`
13
+ .quiet()
14
+ .nothrow();
15
+ if (ciResult.exitCode !== 0)
16
+ debug('command failed:', `gh run list --repo ${repo}`);
17
+ const ciLine = ciResult.stdout.toString().trim();
18
+ const [ciConclusion, ciTime] = ciLine.split(' ');
19
+ if (ciConclusion === 'failure')
20
+ issues.push({ detail: `failed ${ciTime ?? ''}`, type: 'ci' });
21
+ else if (ciConclusion === 'success')
22
+ issues.push({ detail: `passed ${ciTime ?? ''}`, type: 'info' });
23
+ return issues;
24
+ };
25
+ const checkGit = async (projectPath) => {
26
+ const issues = [];
27
+ const statusResult = await $ `git status --porcelain`.cwd(projectPath).quiet().nothrow();
28
+ if (statusResult.exitCode !== 0)
29
+ debug('command failed:', 'git status --porcelain');
30
+ const statusOut = statusResult.stdout.toString().trim();
31
+ if (statusOut) {
32
+ const count = statusOut.split('\n').length;
33
+ issues.push({ detail: `${count} uncommitted changes`, type: 'git' });
34
+ }
35
+ await $ `git fetch`.cwd(projectPath).quiet().nothrow();
36
+ const behindResult = await $ `git rev-list --count HEAD..@{u}`.cwd(projectPath).quiet().nothrow();
37
+ const behind = Number.parseInt(behindResult.stdout.toString().trim(), 10);
38
+ if (behind > 0)
39
+ issues.push({ detail: `${behind} commits behind remote`, type: 'git' });
40
+ const aheadResult = await $ `git rev-list --count @{u}..HEAD`.cwd(projectPath).quiet().nothrow();
41
+ const ahead = Number.parseInt(aheadResult.stdout.toString().trim(), 10);
42
+ if (ahead > 0)
43
+ issues.push({ detail: `${ahead} commits ahead of remote`, type: 'git' });
44
+ return issues;
45
+ };
46
+ const checkDrift = async (selfPath, projectPath) => {
47
+ const names = VERBATIM_FILES;
48
+ const results = await Promise.all(names.map(async (name) => {
49
+ const src = file(join(selfPath, name));
50
+ const dst = file(join(projectPath, name));
51
+ if (!(await src.exists()))
52
+ return;
53
+ if (!(await dst.exists()))
54
+ return { detail: `${name} missing`, type: 'file' };
55
+ const [srcContent, dstContent] = await Promise.all([src.text(), dst.text()]);
56
+ if (srcContent !== dstContent)
57
+ return { detail: `${name} out of sync`, type: 'file' };
58
+ }));
59
+ return results.filter((r) => r !== undefined);
60
+ };
61
+ const checkRootPkg = async (projectPath) => {
62
+ const issues = [];
63
+ const pkg = await readPkg(join(projectPath, 'package.json'));
64
+ if (!pkg)
65
+ return issues;
66
+ if (!pkg.private)
67
+ issues.push({ detail: 'root package.json should be private', type: 'drift' });
68
+ if (!pkg.packageManager)
69
+ issues.push({ detail: 'packageManager field missing', type: 'missing' });
70
+ if (!pkg['simple-git-hooks'])
71
+ issues.push({ detail: 'simple-git-hooks in package.json', type: 'missing' });
72
+ else if (pkg['simple-git-hooks']['pre-commit'] !== EXPECTED.preCommit)
73
+ issues.push({ detail: 'pre-commit should be "sh up.sh && git add -u"', type: 'drift' });
74
+ if (pkg.scripts?.prepare !== EXPECTED.prepare)
75
+ issues.push({ detail: 'prepare should be "bunx simple-git-hooks"', type: 'drift' });
76
+ if (!pkg.scripts?.postinstall?.includes('sherif'))
77
+ issues.push({ detail: 'postinstall should include sherif', type: 'drift' });
78
+ if (pkg.scripts?.clean && !pkg.scripts.clean.startsWith('sh clean.sh'))
79
+ issues.push({ detail: 'clean should start with "sh clean.sh"', type: 'drift' });
80
+ return issues;
81
+ };
82
+ const checkConfigs = async (projectPath) => {
83
+ const issues = [];
84
+ const isGitHub = Boolean(await getGhRepo(projectPath));
85
+ for (const entry of MUST_EXIST_FILES)
86
+ if (!((entry.includes('.github/') && !isGitHub) || existsSync(join(projectPath, entry))))
87
+ issues.push({ detail: entry, type: 'missing' });
88
+ const tsRaw = await readJson(join(projectPath, 'tsconfig.json'));
89
+ if (tsRaw && typeof tsRaw === 'object' && !Array.isArray(tsRaw)) {
90
+ const ext = 'extends' in tsRaw ? String(tsRaw.extends) : '';
91
+ if (ext && ext !== EXPECTED.tsconfigExtends)
92
+ issues.push({ detail: 'tsconfig.json should extend lintmax/tsconfig', type: 'drift' });
93
+ if ('include' in tsRaw)
94
+ issues.push({
95
+ detail: 'root tsconfig.json should not have "include" — let lintmax/tsconfig handle it',
96
+ type: 'drift'
97
+ });
98
+ }
99
+ const vRaw = await readJson(join(projectPath, 'vercel.json'));
100
+ if (vRaw && typeof vRaw === 'object' && !Array.isArray(vRaw)) {
101
+ const cmd = 'installCommand' in vRaw ? String(vRaw.installCommand) : '';
102
+ if (cmd && cmd !== EXPECTED.vercelInstall)
103
+ issues.push({ detail: 'vercel.json installCommand should be "bun i"', type: 'drift' });
104
+ }
105
+ return issues;
106
+ };
107
+ const checkForbidden = async (projectPath) => {
108
+ const issues = [];
109
+ for (const f of FORBIDDEN_LOCKFILES)
110
+ if (existsSync(join(projectPath, f)))
111
+ issues.push({ detail: `${f} found, use bun only`, type: 'forbidden' });
112
+ const [bunLockTracked, nestedGitignores, postcssFiles, tsNoCheck] = await Promise.all([
113
+ $ `git ls-files bun.lock`.cwd(projectPath).quiet().nothrow(),
114
+ $ `find ${projectPath} -name .gitignore -not -path '*/node_modules/*' -not -path '*/.git/*'`.quiet().nothrow(),
115
+ $ `find ${projectPath} -name 'postcss.config.mjs' -not -path '*/node_modules/*' -not -path '*/readonly/*'`
116
+ .quiet()
117
+ .nothrow(),
118
+ $ `rg '^// @ts-nocheck|^/\* @ts-nocheck' ${projectPath} -g '*.ts' -g '*.tsx' -g '!node_modules' -g '!readonly' -g '!.next' -l`
119
+ .quiet()
120
+ .nothrow()
121
+ ]);
122
+ if (bunLockTracked.stdout.toString().trim())
123
+ issues.push({ detail: 'bun.lock tracked in git, should be gitignored', type: 'forbidden' });
124
+ const extraGitignores = nestedGitignores.stdout
125
+ .toString()
126
+ .trim()
127
+ .split('\n')
128
+ .filter(f => f && f !== join(projectPath, '.gitignore'));
129
+ if (extraGitignores.length > 0)
130
+ issues.push({
131
+ detail: `nested .gitignore: ${extraGitignores.map(f => f.replace(`${projectPath}/`, '')).join(', ')}`,
132
+ type: 'drift'
133
+ });
134
+ if (postcssFiles.stdout.toString().trim())
135
+ issues.push({ detail: 'postcss.config.mjs should be .ts', type: 'drift' });
136
+ const tsNoCheckFiles = tsNoCheck.stdout.toString().trim();
137
+ if (tsNoCheckFiles)
138
+ issues.push({
139
+ detail: `@ts-nocheck in: ${tsNoCheckFiles
140
+ .split('\n')
141
+ .map(f => f.replace(`${projectPath}/`, ''))
142
+ .join(', ')}`,
143
+ type: 'forbidden'
144
+ });
145
+ return issues;
146
+ };
147
+ const checkVercel = async (projectPath) => {
148
+ const issues = [];
149
+ if (!existsSync(join(projectPath, '.vercel')))
150
+ return issues;
151
+ const result = await $ `bunx vercel@latest ls`.cwd(projectPath).quiet().nothrow();
152
+ if (result.exitCode !== 0)
153
+ debug('command failed:', 'bunx vercel@latest ls');
154
+ const out = result.stdout.toString().trim();
155
+ const latestLine = out.split('\n').find(l => l.includes('●'));
156
+ if (latestLine?.includes('● Error'))
157
+ issues.push({ detail: 'vercel deployment failed', type: 'deploy' });
158
+ return issues;
159
+ };
160
+ const checkLint = (projectPath) => {
161
+ if (isCheckRunning(projectPath))
162
+ return [{ detail: 'running...', type: 'check' }];
163
+ const result = readCheckResult(projectPath);
164
+ if (!result)
165
+ return [{ detail: 'never run', type: 'check' }];
166
+ const ms = Date.now() - new Date(result.at).getTime();
167
+ const mins = Math.floor(ms / 60_000);
168
+ const age = mins < 60 ? `${mins}m ago` : mins < 1440 ? `${Math.floor(mins / 60)}h ago` : `${Math.floor(mins / 1440)}d ago`;
169
+ const commitsBehind = getCodeCommitsSince(projectPath, result.commit);
170
+ const freshness = commitsBehind === 0 ? '(current)' : commitsBehind > 0 ? `(before ${commitsBehind} commits)` : '';
171
+ if (result.pass)
172
+ return [{ detail: `passed ${age} ${freshness}`, type: 'check' }];
173
+ return [{ detail: `failed ${age} ${freshness}, ${result.violations} violations`, type: 'check' }];
174
+ };
175
+ export { checkCi, checkConfigs, checkDrift, checkForbidden, checkGit, checkLint, checkRootPkg, checkVercel };
176
+ //# sourceMappingURL=checks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checks.js","sourceRoot":"","sources":["../src/checks.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env bun
2
+ /* eslint-disable no-console */
3
+ import pkg from '../package.json' with { type: 'json' };
4
+ import { guide } from './guide.js';
5
+ import { preflight } from './preflight.js';
6
+ import { setVerbose } from './utils.js';
7
+ const args = process.argv.slice(2);
8
+ const flags = new Set(args.filter(a => a.startsWith('-')));
9
+ const positional = args.filter(a => !a.startsWith('-'));
10
+ const command = positional[0];
11
+ if (flags.has('--verbose'))
12
+ setVerbose(true);
13
+ if (flags.has('--version') || flags.has('-v'))
14
+ console.log(pkg.version);
15
+ else if (!command)
16
+ console.log(guide);
17
+ else if (command === 'init') {
18
+ const name = positional[1];
19
+ if (name) {
20
+ const { init } = await import('./init.js');
21
+ await init(name);
22
+ }
23
+ else
24
+ console.log('usage: pm4ai init <name>');
25
+ }
26
+ else if (command === 'setup') {
27
+ const { setup } = await import('./setup.js');
28
+ await setup();
29
+ }
30
+ else {
31
+ if (!(await preflight()))
32
+ throw new Error('missing required tools');
33
+ if (command === 'status') {
34
+ const { status } = await import('./status.js');
35
+ await status(flags.has('--swiftbar'), flags.has('--all'));
36
+ }
37
+ else if (command === 'fix') {
38
+ const { fix } = await import('./fix.js');
39
+ await fix(flags.has('--all'));
40
+ }
41
+ else
42
+ console.log(guide);
43
+ }
44
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAClC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;AACvD,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;AAC7B,IAAI,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;IAAE,UAAU,CAAC,IAAI,CAAC,CAAA;AAC5C,IAAI,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;IAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;KAClE,IAAI,CAAC,OAAO;IAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;KAChC,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;IAC1B,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAA;QAC1C,MAAM,IAAI,CAAC,IAAI,CAAC,CAAA;IAClB,CAAC;;QAAM,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;AAChD,CAAC;KAAM,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;IAC/B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAA;IAC5C,MAAM,KAAK,EAAE,CAAA;AACf,CAAC;KAAM,CAAC;IACN,IAAI,CAAC,CAAC,MAAM,SAAS,EAAE,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;IACnE,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;QAC9C,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;IAC3D,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAA;QACxC,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;IAC/B,CAAC;;QAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AAC3B,CAAC"}
@@ -0,0 +1,22 @@
1
+ declare const CLAUDE_MD = "CLAUDE.md";
2
+ declare const EXPECTED: {
3
+ preCommit: string;
4
+ prepare: string;
5
+ tsconfigExtends: string;
6
+ vercelInstall: string;
7
+ };
8
+ declare const FORBIDDEN_LOCKFILES: string[];
9
+ declare const FORBIDDEN_PM_PREFIXES: string[];
10
+ declare const GH_ORG = "1qh";
11
+ declare const LINTMAX_PKG = "lintmax";
12
+ declare const MONOREPO_NAME = "pm4ai-monorepo";
13
+ declare const MUST_EXIST_FILES: string[];
14
+ declare const PKG_NAME = "pm4ai";
15
+ declare const READONLY_UI = "readonly/ui";
16
+ declare const SKIP_PATTERNS: string[];
17
+ declare const REQUIRED_ROOT_DEVDEPS: string[];
18
+ declare const REQUIRED_TRUSTED_DEPS: string[];
19
+ declare const TURBO_FLAG = "--output-logs=errors-only";
20
+ declare const VERBATIM_FILES: string[];
21
+ export { CLAUDE_MD, EXPECTED, FORBIDDEN_LOCKFILES, FORBIDDEN_PM_PREFIXES, GH_ORG, LINTMAX_PKG, MONOREPO_NAME, MUST_EXIST_FILES, PKG_NAME, READONLY_UI, REQUIRED_ROOT_DEVDEPS, REQUIRED_TRUSTED_DEPS, SKIP_PATTERNS, TURBO_FLAG, VERBATIM_FILES };
22
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,SAAS,cAAc,CAAA;AAC7B,QAAA,MAAM,QAAQ;;;;;CAKb,CAAA;AACD,QAAA,MAAM,mBAAmB,UAA2F,CAAA;AACpH,QAAA,MAAM,qBAAqB,UAAqC,CAAA;AAChE,QAAA,MAAM,MAAM,QAAQ,CAAA;AACpB,QAAA,MAAM,WAAW,YAAY,CAAA;AAC7B,QAAA,MAAM,aAAa,mBAAmB,CAAA;AACtC,QAAA,MAAM,gBAAgB,UAA8D,CAAA;AACpF,QAAA,MAAM,QAAQ,UAAU,CAAA;AACxB,QAAA,MAAM,WAAW,gBAAgB,CAAA;AACjC,QAAA,MAAM,aAAa,UAA4B,CAAA;AAC/C,QAAA,MAAM,qBAAqB,UAAiF,CAAA;AAC5G,QAAA,MAAM,qBAAqB,UAAc,CAAA;AACzC,QAAA,MAAM,UAAU,8BAA8B,CAAA;AAC9C,QAAA,MAAM,cAAc,UAAqD,CAAA;AACzE,OAAO,EACL,SAAS,EACT,QAAQ,EACR,mBAAmB,EACnB,qBAAqB,EACrB,MAAM,EACN,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,QAAQ,EACR,WAAW,EACX,qBAAqB,EACrB,qBAAqB,EACrB,aAAa,EACb,UAAU,EACV,cAAc,EACf,CAAA"}
@@ -0,0 +1,22 @@
1
+ const CLAUDE_MD = 'CLAUDE.md';
2
+ const EXPECTED = {
3
+ preCommit: 'sh up.sh && git add -u',
4
+ prepare: 'bunx simple-git-hooks',
5
+ tsconfigExtends: 'lintmax/tsconfig',
6
+ vercelInstall: 'bun i'
7
+ };
8
+ const FORBIDDEN_LOCKFILES = ['package-lock.json', 'yarn.lock', 'pnpm-lock.yaml', '.npmrc', '.yarnrc', '.yarnrc.yml'];
9
+ const FORBIDDEN_PM_PREFIXES = ['npm ', 'npx ', 'yarn ', 'pnpm '];
10
+ const GH_ORG = '1qh';
11
+ const LINTMAX_PKG = 'lintmax';
12
+ const MONOREPO_NAME = 'pm4ai-monorepo';
13
+ const MUST_EXIST_FILES = ['turbo.json', 'tsconfig.json', '.github/workflows/ci.yml'];
14
+ const PKG_NAME = 'pm4ai';
15
+ const READONLY_UI = 'readonly/ui';
16
+ const SKIP_PATTERNS = ['/readonly/', '/.next/'];
17
+ const REQUIRED_ROOT_DEVDEPS = ['@types/bun', 'lintmax', 'sherif', 'simple-git-hooks', 'turbo', 'typescript'];
18
+ const REQUIRED_TRUSTED_DEPS = ['lintmax'];
19
+ const TURBO_FLAG = '--output-logs=errors-only';
20
+ const VERBATIM_FILES = ['clean.sh', 'up.sh', 'bunfig.toml', '.gitignore'];
21
+ export { CLAUDE_MD, EXPECTED, FORBIDDEN_LOCKFILES, FORBIDDEN_PM_PREFIXES, GH_ORG, LINTMAX_PKG, MONOREPO_NAME, MUST_EXIST_FILES, PKG_NAME, READONLY_UI, REQUIRED_ROOT_DEVDEPS, REQUIRED_TRUSTED_DEPS, SKIP_PATTERNS, TURBO_FLAG, VERBATIM_FILES };
22
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,SAAS,GAAG,WAAW,CAAA;AAC7B,MAAM,QAAQ,GAAG;IACf,SAAS,EAAE,wBAAwB;IACnC,OAAO,EAAE,uBAAuB;IAChC,eAAe,EAAE,kBAAkB;IACnC,aAAa,EAAE,OAAO;CACvB,CAAA;AACD,MAAM,mBAAmB,GAAG,CAAC,mBAAmB,EAAE,WAAW,EAAE,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,CAAA;AACpH,MAAM,qBAAqB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;AAChE,MAAM,MAAM,GAAG,KAAK,CAAA;AACpB,MAAM,WAAW,GAAG,SAAS,CAAA;AAC7B,MAAM,aAAa,GAAG,gBAAgB,CAAA;AACtC,MAAM,gBAAgB,GAAG,CAAC,YAAY,EAAE,eAAe,EAAE,0BAA0B,CAAC,CAAA;AACpF,MAAM,QAAQ,GAAG,OAAO,CAAA;AACxB,MAAM,WAAW,GAAG,aAAa,CAAA;AACjC,MAAM,aAAa,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;AAC/C,MAAM,qBAAqB,GAAG,CAAC,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE,YAAY,CAAC,CAAA;AAC5G,MAAM,qBAAqB,GAAG,CAAC,SAAS,CAAC,CAAA;AACzC,MAAM,UAAU,GAAG,2BAA2B,CAAA;AAC9C,MAAM,cAAc,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,CAAC,CAAA;AACzE,OAAO,EACL,SAAS,EACT,QAAQ,EACR,mBAAmB,EACnB,qBAAqB,EACrB,MAAM,EACN,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,QAAQ,EACR,WAAW,EACX,qBAAqB,EACrB,qBAAqB,EACrB,aAAa,EACb,UAAU,EACV,cAAc,EACf,CAAA"}
@@ -0,0 +1,19 @@
1
+ interface Project {
2
+ isCnsync: boolean;
3
+ isSelf: boolean;
4
+ name: string;
5
+ path: string;
6
+ }
7
+ declare const isCnsyncRepo: (dir: string) => Promise<boolean>;
8
+ declare const discover: (searchRoot?: string) => Promise<{
9
+ cnsync: Project;
10
+ consumers: Project[];
11
+ self: Project;
12
+ }>;
13
+ declare const discoverSources: (searchRoot?: string) => Promise<{
14
+ cnsync: Project;
15
+ self: Project;
16
+ }>;
17
+ export type { Project };
18
+ export { discover, discoverSources, isCnsyncRepo };
19
+ //# sourceMappingURL=discover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../src/discover.ts"],"names":[],"mappings":"AAMA,UAAU,OAAO;IACf,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,OAAO,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,QAAA,MAAM,YAAY,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,OAAO,CAKxD,CAAA;AAgCD,QAAA,MAAM,QAAQ,GACZ,aAAa,MAAM,KAClB,OAAO,CAAC;IACT,MAAM,EAAE,OAAO,CAAA;IACf,SAAS,EAAE,OAAO,EAAE,CAAA;IACpB,IAAI,EAAE,OAAO,CAAA;CACd,CAmCA,CAAA;AACD,QAAA,MAAM,eAAe,GAAU,aAAa,MAAM,KAAG,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CA8C9F,CAAA;AACD,YAAY,EAAE,OAAO,EAAE,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,CAAA"}
@@ -0,0 +1,132 @@
1
+ import { $ } from 'bun';
2
+ import { existsSync, mkdirSync } from 'node:fs';
3
+ import { homedir } from 'node:os';
4
+ import { dirname, join } from 'node:path';
5
+ import { GH_ORG, MONOREPO_NAME, PKG_NAME, READONLY_UI } from './constants.js';
6
+ import { debug, projectName, readPkg } from './utils.js';
7
+ const hasDirInside = (dir, sub) => existsSync(join(dir, sub));
8
+ const isCnsyncRepo = async (dir) => {
9
+ if (!hasDirInside(dir, READONLY_UI))
10
+ return false;
11
+ const r = await $ `git remote get-url origin`.cwd(dir).quiet().nothrow();
12
+ const url = r.stdout.toString().trim();
13
+ return url.includes(`${GH_ORG}/cnsync`);
14
+ };
15
+ const cloneIfMissing = async (repo, dest) => {
16
+ if (existsSync(dest))
17
+ return dest;
18
+ debug('cloning', repo, 'to', dest);
19
+ mkdirSync(dirname(dest), { recursive: true });
20
+ await $ `git clone https://github.com/${GH_ORG}/${repo}.git ${dest}`.quiet().nothrow();
21
+ return dest;
22
+ };
23
+ const rgExcludes = [
24
+ '-g',
25
+ '!**/node_modules/**',
26
+ '-g',
27
+ '!**/.cache/**',
28
+ '-g',
29
+ '!**/.Trash/**',
30
+ '-g',
31
+ '!**/Library/**',
32
+ '-g',
33
+ '!**/Applications/**',
34
+ '-g',
35
+ '!**/.local/**',
36
+ '-g',
37
+ '!**/.npm/**',
38
+ '-g',
39
+ '!**/.bun/**',
40
+ '-g',
41
+ '!**/.docker/**',
42
+ '-g',
43
+ '!**/iCloud*/**',
44
+ '-g',
45
+ '!**/.git/**'
46
+ ];
47
+ const discover = async (searchRoot) => {
48
+ const home = searchRoot ?? homedir();
49
+ const result = await $ `rg -l '"lintmax"' ${home} -g package.json ${rgExcludes}`.quiet().nothrow();
50
+ const stdout = result.stdout.toString().trim();
51
+ if (!stdout)
52
+ debug('rg not found or returned empty');
53
+ const found = stdout.split('\n').filter(Boolean);
54
+ const allDirs = [...new Set(found.map(f => dirname(f)))].toSorted();
55
+ const projectDirs = allDirs.filter(dir => !allDirs.some(other => other !== dir && dir.startsWith(`${other}/`)));
56
+ const projects = await Promise.all(projectDirs.map(async (dir) => {
57
+ const pkg = await readPkg(join(dir, 'package.json'));
58
+ const name = pkg?.name ?? projectName(dir);
59
+ return {
60
+ isCnsync: await isCnsyncRepo(dir),
61
+ isSelf: name === MONOREPO_NAME || name === PKG_NAME,
62
+ name,
63
+ path: dir
64
+ };
65
+ }));
66
+ let self = projects.find(p => p.isSelf);
67
+ let cnsync = projects.find(p => p.isCnsync);
68
+ const reposDir = join(home, '.pm4ai', 'repos');
69
+ if (!self) {
70
+ const dest = join(reposDir, PKG_NAME);
71
+ await cloneIfMissing(PKG_NAME, dest);
72
+ self = { isCnsync: false, isSelf: true, name: PKG_NAME, path: dest };
73
+ }
74
+ if (!cnsync) {
75
+ const dest = join(reposDir, 'cnsync');
76
+ await cloneIfMissing('cnsync', dest);
77
+ cnsync = { isCnsync: true, isSelf: false, name: 'cnsync', path: dest };
78
+ }
79
+ const consumers = projects.filter(p => !(p.isSelf || p.isCnsync));
80
+ return { cnsync, consumers, self };
81
+ };
82
+ const discoverSources = async (searchRoot) => {
83
+ const home = searchRoot ?? homedir();
84
+ const reposDir = join(home, '.pm4ai', 'repos');
85
+ const selfDir = join(reposDir, PKG_NAME);
86
+ const cnsyncDir = join(reposDir, 'cnsync');
87
+ let self;
88
+ let cnsync;
89
+ if (existsSync(selfDir))
90
+ self = { isCnsync: false, isSelf: true, name: PKG_NAME, path: selfDir };
91
+ if (existsSync(cnsyncDir))
92
+ cnsync = { isCnsync: true, isSelf: false, name: 'cnsync', path: cnsyncDir };
93
+ if (!(self && cnsync)) {
94
+ const result = await $ `rg -l '"${PKG_NAME}"' ${home} -g package.json -g '!**/node_modules/**' -g '!**/.cache/**' --max-count 1`
95
+ .quiet()
96
+ .nothrow();
97
+ const found = result.stdout
98
+ .toString()
99
+ .trim()
100
+ .split('\n')
101
+ .filter(Boolean)
102
+ .map(f => dirname(f));
103
+ if (!self) {
104
+ const dir = found.find(d => {
105
+ const n = d.split('/').pop();
106
+ return n === PKG_NAME || n === MONOREPO_NAME;
107
+ });
108
+ if (dir) {
109
+ const gitRoot = await $ `git rev-parse --show-toplevel`.cwd(dir).quiet().nothrow();
110
+ const root = gitRoot.stdout.toString().trim() || dir;
111
+ self = { isCnsync: false, isSelf: true, name: PKG_NAME, path: root };
112
+ }
113
+ }
114
+ if (!cnsync) {
115
+ const checks = await Promise.all(found.map(async (d) => ({ d, is: await isCnsyncRepo(d) })));
116
+ const match = checks.find(c => c.is);
117
+ if (match)
118
+ cnsync = { isCnsync: true, isSelf: false, name: 'cnsync', path: match.d };
119
+ }
120
+ }
121
+ if (!self) {
122
+ await cloneIfMissing(PKG_NAME, selfDir);
123
+ self = { isCnsync: false, isSelf: true, name: PKG_NAME, path: selfDir };
124
+ }
125
+ if (!cnsync) {
126
+ await cloneIfMissing('cnsync', cnsyncDir);
127
+ cnsync = { isCnsync: true, isSelf: false, name: 'cnsync', path: cnsyncDir };
128
+ }
129
+ return { cnsync, self };
130
+ };
131
+ export { discover, discoverSources, isCnsyncRepo };
132
+ //# sourceMappingURL=discover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../src/discover.ts"],"names":[],"mappings":"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"}
package/dist/fix.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ import type { Issue } from './types.js';
2
+ declare const maintain: (projectPath: string) => Promise<Issue[]>;
3
+ export { maintain };
4
+ export declare const fix: (all?: boolean) => Promise<void>;
5
+ //# sourceMappingURL=fix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fix.d.ts","sourceRoot":"","sources":["../src/fix.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AASvC,QAAA,MAAM,QAAQ,GAAU,aAAa,MAAM,KAAG,OAAO,CAAC,KAAK,EAAE,CAiC5D,CAAA;AACD,OAAO,EAAE,QAAQ,EAAE,CAAA;AACnB,eAAO,MAAM,GAAG,GAAU,aAAW,kBA2HpC,CAAA"}