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.
- package/dist/audit.d.ts +20 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +254 -0
- package/dist/audit.js.map +1 -0
- package/dist/check-cache.d.ts +21 -0
- package/dist/check-cache.d.ts.map +1 -0
- package/dist/check-cache.js +89 -0
- package/dist/check-cache.js.map +1 -0
- package/dist/check-worker.d.ts +2 -0
- package/dist/check-worker.d.ts.map +1 -0
- package/dist/check-worker.js +42 -0
- package/dist/check-worker.js.map +1 -0
- package/dist/checks.d.ts +11 -0
- package/dist/checks.d.ts.map +1 -0
- package/dist/checks.js +176 -0
- package/dist/checks.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +44 -0
- package/dist/cli.js.map +1 -0
- package/dist/constants.d.ts +22 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +22 -0
- package/dist/constants.js.map +1 -0
- package/dist/discover.d.ts +19 -0
- package/dist/discover.d.ts.map +1 -0
- package/dist/discover.js +132 -0
- package/dist/discover.js.map +1 -0
- package/dist/fix.d.ts +5 -0
- package/dist/fix.d.ts.map +1 -0
- package/dist/fix.js +182 -0
- package/dist/fix.js.map +1 -0
- package/dist/format.d.ts +9 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +93 -0
- package/dist/format.js.map +1 -0
- package/dist/guide.d.ts +2 -0
- package/dist/guide.d.ts.map +1 -0
- package/dist/guide.js +50 -0
- package/dist/guide.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/infer.d.ts +4 -0
- package/dist/infer.d.ts.map +1 -0
- package/dist/infer.js +56 -0
- package/dist/infer.js.map +1 -0
- package/dist/init.d.ts +3 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +75 -0
- package/dist/init.js.map +1 -0
- package/dist/log.d.ts +12 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +26 -0
- package/dist/log.js.map +1 -0
- package/dist/preflight.d.ts +3 -0
- package/dist/preflight.d.ts.map +1 -0
- package/dist/preflight.js +29 -0
- package/dist/preflight.js.map +1 -0
- package/dist/setup.d.ts +3 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +67 -0
- package/dist/setup.js.map +1 -0
- package/dist/status.d.ts +4 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +66 -0
- package/dist/status.js.map +1 -0
- package/dist/sync.d.ts +9 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +301 -0
- package/dist/sync.js.map +1 -0
- package/dist/types.d.ts +26 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +15 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +83 -0
- package/dist/utils.js.map +1 -0
- 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":"AAAA,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvF,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAChG,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAChE,MAAM,OAAO,GAAG,KAAK,EAAE,WAAmB,EAAoB,EAAE;IAC9D,MAAM,MAAM,GAAY,EAAE,CAAA;IAC1B,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,CAAA;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,MAAM,CAAA;IACxB,MAAM,QAAQ,GACZ,MAAM,CAAC,CAAA,sBAAsB,IAAI,qFAAqF;SACnH,KAAK,EAAE;SACP,OAAO,EAAE,CAAA;IACd,IAAI,QAAQ,CAAC,QAAQ,KAAK,CAAC;QAAE,KAAK,CAAC,iBAAiB,EAAE,sBAAsB,IAAI,EAAE,CAAC,CAAA;IACnF,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAA;IAChD,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAChD,IAAI,YAAY,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,MAAM,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;SACxF,IAAI,YAAY,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,MAAM,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;IACpG,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AACD,MAAM,QAAQ,GAAG,KAAK,EAAE,WAAmB,EAAoB,EAAE;IAC/D,MAAM,MAAM,GAAY,EAAE,CAAA;IAC1B,MAAM,YAAY,GAAG,MAAM,CAAC,CAAA,wBAAwB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,CAAA;IACvF,IAAI,YAAY,CAAC,QAAQ,KAAK,CAAC;QAAE,KAAK,CAAC,iBAAiB,EAAE,wBAAwB,CAAC,CAAA;IACnF,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAA;IACvD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAA;QAC1C,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,sBAAsB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IACtE,CAAC;IACD,MAAM,CAAC,CAAA,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,CAAA;IACrD,MAAM,YAAY,GAAG,MAAM,CAAC,CAAA,iCAAiC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,CAAA;IAChG,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;IACzE,IAAI,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,wBAAwB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IACvF,MAAM,WAAW,GAAG,MAAM,CAAC,CAAA,iCAAiC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,CAAA;IAC/F,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;IACvE,IAAI,KAAK,GAAG,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,0BAA0B,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IACvF,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AACD,MAAM,UAAU,GAAG,KAAK,EAAE,QAAgB,EAAE,WAAmB,EAAoB,EAAE;IACnF,MAAM,KAAK,GAAG,cAAc,CAAA;IAC5B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,KAAK,CAAC,GAAG,CAAC,KAAK,EAAC,IAAI,EAAC,EAAE;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAA;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAA;QACzC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;YAAE,OAAM;QACjC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;YAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,UAAU,EAAE,IAAI,EAAE,MAAM,EAAW,CAAA;QACtF,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QAC5E,IAAI,UAAU,KAAK,UAAU;YAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,cAAc,EAAE,IAAI,EAAE,MAAM,EAAW,CAAA;IAChG,CAAC,CAAC,CACH,CAAA;IACD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAc,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAA;AAC3D,CAAC,CAAA;AACD,MAAM,YAAY,GAAG,KAAK,EAAE,WAAmB,EAAoB,EAAE;IACnE,MAAM,MAAM,GAAY,EAAE,CAAA;IAC1B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAA;IAC5D,IAAI,CAAC,GAAG;QAAE,OAAO,MAAM,CAAA;IACvB,IAAI,CAAC,GAAG,CAAC,OAAO;QAAE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,qCAAqC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;IAC/F,IAAI,CAAC,GAAG,CAAC,cAAc;QAAE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,8BAA8B,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;IACjG,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,kCAAkC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;SACrG,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC,YAAY,CAAC,KAAK,QAAQ,CAAC,SAAS;QACnE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,+CAA+C,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;IACzF,IAAI,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,QAAQ,CAAC,OAAO;QAC3C,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,2CAA2C,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;IACrF,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,mCAAmC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;IAC7E,IAAI,GAAG,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC;QACpE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,uCAAuC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;IACjF,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AACD,MAAM,YAAY,GAAG,KAAK,EAAE,WAAmB,EAAoB,EAAE;IACnE,MAAM,MAAM,GAAY,EAAE,CAAA;IAC1B,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,SAAS,CAAC,WAAW,CAAC,CAAC,CAAA;IACtD,KAAK,MAAM,KAAK,IAAI,gBAAgB;QAClC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;YACtF,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;IACnD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,CAAA;IAChE,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,GAAG,GAAG,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAC3D,IAAI,GAAG,IAAI,GAAG,KAAK,QAAQ,CAAC,eAAe;YACzC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,8CAA8C,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;QACxF,IAAI,SAAS,IAAI,KAAK;YACpB,MAAM,CAAC,IAAI,CAAC;gBACV,MAAM,EAAE,+EAA+E;gBACvF,IAAI,EAAE,OAAO;aACd,CAAC,CAAA;IACN,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,CAAA;IAC7D,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,GAAG,GAAG,gBAAgB,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACvE,IAAI,GAAG,IAAI,GAAG,KAAK,QAAQ,CAAC,aAAa;YACvC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,8CAA8C,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;IAC1F,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AACD,MAAM,cAAc,GAAG,KAAK,EAAE,WAAmB,EAAoB,EAAE;IACrE,MAAM,MAAM,GAAY,EAAE,CAAA;IAC1B,KAAK,MAAM,CAAC,IAAI,mBAAmB;QACjC,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,sBAAsB,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAA;IAC9G,MAAM,CAAC,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACpF,CAAC,CAAA,uBAAuB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE;QAC3D,CAAC,CAAA,QAAQ,WAAW,uEAAuE,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE;QAC7G,CAAC,CAAA,QAAQ,WAAW,qFAAqF;aACtG,KAAK,EAAE;aACP,OAAO,EAAE;QACZ,CAAC,CAAA,yCAAyC,WAAW,wEAAwE;aAC1H,KAAK,EAAE;aACP,OAAO,EAAE;KACb,CAAC,CAAA;IACF,IAAI,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;QACzC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,+CAA+C,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAA;IAC7F,MAAM,eAAe,GAAG,gBAAgB,CAAC,MAAM;SAC5C,QAAQ,EAAE;SACV,IAAI,EAAE;SACN,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAA;IAC1D,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC;YACV,MAAM,EAAE,sBAAsB,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,WAAW,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACrG,IAAI,EAAE,OAAO;SACd,CAAC,CAAA;IACJ,IAAI,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,kCAAkC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;IACrH,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAA;IACzD,IAAI,cAAc;QAChB,MAAM,CAAC,IAAI,CAAC;YACV,MAAM,EAAE,mBAAmB,cAAc;iBACtC,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,WAAW,GAAG,EAAE,EAAE,CAAC,CAAC;iBAC1C,IAAI,CAAC,IAAI,CAAC,EAAE;YACf,IAAI,EAAE,WAAW;SAClB,CAAC,CAAA;IACJ,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AACD,MAAM,WAAW,GAAG,KAAK,EAAE,WAAmB,EAAoB,EAAE;IAClE,MAAM,MAAM,GAAY,EAAE,CAAA;IAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAAE,OAAO,MAAM,CAAA;IAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,CAAA,uBAAuB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,CAAA;IAChF,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC;QAAE,KAAK,CAAC,iBAAiB,EAAE,uBAAuB,CAAC,CAAA;IAC5E,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAA;IAC3C,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA;IAC7D,IAAI,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,0BAA0B,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;IACxG,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AACD,MAAM,SAAS,GAAG,CAAC,WAAmB,EAAW,EAAE;IACjD,IAAI,cAAc,CAAC,WAAW,CAAC;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;IACjF,MAAM,MAAM,GAAG,eAAe,CAAC,WAAW,CAAC,CAAA;IAC3C,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;IAC5D,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAA;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,CAAA;IACpC,MAAM,GAAG,GACP,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAA;IAChH,MAAM,aAAa,GAAG,mBAAmB,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;IACrE,MAAM,SAAS,GAAG,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,aAAa,WAAW,CAAC,CAAC,CAAC,EAAE,CAAA;IAClH,IAAI,MAAM,CAAC,IAAI;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;IACjF,OAAO,CAAC,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,SAAS,KAAK,MAAM,CAAC,UAAU,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;AACnG,CAAC,CAAA;AACD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,CAAA"}
|
package/dist/cli.d.ts
ADDED
|
@@ -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
|
package/dist/cli.js.map
ADDED
|
@@ -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"}
|
package/dist/discover.js
ADDED
|
@@ -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 @@
|
|
|
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"}
|