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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"AAQA,QAAA,MAAM,SAAS,QAAa,OAAO,CAAC,OAAO,CAgB1C,CAAA;AACD,OAAO,EAAE,SAAS,EAAE,CAAA"}
@@ -0,0 +1,29 @@
1
+ /* eslint-disable no-console */
2
+ import { $ } from 'bun';
3
+ const REQUIRED = ['rg', 'git'];
4
+ const OPTIONAL = ['gh'];
5
+ const check = async (name) => {
6
+ const r = await $ `which ${name}`.quiet().nothrow();
7
+ return r.exitCode === 0;
8
+ };
9
+ const preflight = async () => {
10
+ const [requiredResults, optionalResults] = await Promise.all([
11
+ Promise.all(REQUIRED.map(async (name) => ({ found: await check(name), name }))),
12
+ Promise.all(OPTIONAL.map(async (name) => ({ found: await check(name), name })))
13
+ ]);
14
+ const missingRequired = requiredResults.filter(r => !r.found);
15
+ const missingOptional = optionalResults.filter(r => !r.found);
16
+ if (missingRequired.length > 0) {
17
+ console.log('missing required:');
18
+ for (const r of missingRequired)
19
+ console.log(` ${r.name}`);
20
+ }
21
+ if (missingOptional.length > 0) {
22
+ console.log('missing optional (some checks skipped):');
23
+ for (const r of missingOptional)
24
+ console.log(` ${r.name}`);
25
+ }
26
+ return missingRequired.length === 0;
27
+ };
28
+ export { preflight };
29
+ //# sourceMappingURL=preflight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AAC9B,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAA;AACvB,MAAM,KAAK,GAAG,KAAK,EAAE,IAAY,EAAoB,EAAE;IACrD,MAAM,CAAC,GAAG,MAAM,CAAC,CAAA,SAAS,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,CAAA;IAClD,OAAO,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAA;AACzB,CAAC,CAAA;AACD,MAAM,SAAS,GAAG,KAAK,IAAsB,EAAE;IAC7C,MAAM,CAAC,eAAe,EAAE,eAAe,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAC,IAAI,EAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAC,IAAI,EAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;KAC9E,CAAC,CAAA;IACF,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAC7D,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAC7D,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;QAChC,KAAK,MAAM,CAAC,IAAI,eAAe;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IAC7D,CAAC;IACD,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAA;QACtD,KAAK,MAAM,CAAC,IAAI,eAAe;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IAC7D,CAAC;IACD,OAAO,eAAe,CAAC,MAAM,KAAK,CAAC,CAAA;AACrC,CAAC,CAAA;AACD,OAAO,EAAE,SAAS,EAAE,CAAA"}
@@ -0,0 +1,3 @@
1
+ declare const setup: () => Promise<void>;
2
+ export { setup };
3
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AA8CA,QAAA,MAAM,KAAK,qBAgBV,CAAA;AACD,OAAO,EAAE,KAAK,EAAE,CAAA"}
package/dist/setup.js ADDED
@@ -0,0 +1,67 @@
1
+ /* eslint-disable no-console */
2
+ import { write } from 'bun';
3
+ import { existsSync, mkdirSync } from 'node:fs';
4
+ import { homedir } from 'node:os';
5
+ import { join } from 'node:path';
6
+ const SWIFTBAR_PLUGIN = `#!/bin/bash
7
+ # <swiftbar.hideAbout>true</swiftbar.hideAbout>
8
+ # <swiftbar.hideRunInTerminal>true</swiftbar.hideRunInTerminal>
9
+ # <swiftbar.hideLastUpdated>true</swiftbar.hideLastUpdated>
10
+ # <swiftbar.hideDisablePlugin>true</swiftbar.hideDisablePlugin>
11
+ # <swiftbar.hideSwiftBar>true</swiftbar.hideSwiftBar>
12
+ export PATH="$HOME/.bun/bin:/opt/homebrew/bin:/usr/local/bin:$PATH"
13
+ bunx pm4ai@latest status --swiftbar
14
+ `;
15
+ const bunPath = join(homedir(), '.bun', 'bin', 'bunx');
16
+ const launchdPlist = `<?xml version="1.0" encoding="UTF-8"?>
17
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
18
+ <plist version="1.0">
19
+ <dict>
20
+ <key>Label</key>
21
+ <string>com.pm4ai.fix</string>
22
+ <key>ProgramArguments</key>
23
+ <array>
24
+ <string>${bunPath}</string>
25
+ <string>pm4ai@latest</string>
26
+ <string>fix</string>
27
+ </array>
28
+ <key>StartCalendarInterval</key>
29
+ <dict>
30
+ <key>Hour</key>
31
+ <integer>9</integer>
32
+ <key>Minute</key>
33
+ <integer>0</integer>
34
+ </dict>
35
+ <key>EnvironmentVariables</key>
36
+ <dict>
37
+ <key>PATH</key>
38
+ <string>${homedir()}/.bun/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin</string>
39
+ </dict>
40
+ <key>StandardOutPath</key>
41
+ <string>/tmp/pm4ai.stdout.log</string>
42
+ <key>StandardErrorPath</key>
43
+ <string>/tmp/pm4ai.stderr.log</string>
44
+ </dict>
45
+ </plist>
46
+ `;
47
+ const setup = async () => {
48
+ const swiftbarDir = join(homedir(), 'Library', 'Application Support', 'SwiftBar', 'plugins');
49
+ if (existsSync(join(homedir(), 'Library', 'Application Support', 'SwiftBar'))) {
50
+ mkdirSync(swiftbarDir, { recursive: true });
51
+ const pluginPath = join(swiftbarDir, 'pm4ai.1h.sh');
52
+ await write(pluginPath, SWIFTBAR_PLUGIN);
53
+ const { chmod } = await import('node:fs/promises');
54
+ await chmod(pluginPath, 0o755);
55
+ console.log(`swiftbar plugin: ${pluginPath}`);
56
+ }
57
+ else
58
+ console.log('swiftbar not found, install with: brew install swiftbar');
59
+ const launchdDir = join(homedir(), 'Library', 'LaunchAgents');
60
+ mkdirSync(launchdDir, { recursive: true });
61
+ const plistPath = join(launchdDir, 'com.pm4ai.fix.plist');
62
+ await write(plistPath, launchdPlist);
63
+ console.log(`launchd plist: ${plistPath}`);
64
+ console.log('load with: launchctl load ~/Library/LaunchAgents/com.pm4ai.fix.plist');
65
+ };
66
+ export { setup };
67
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,CAAA;AAC3B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,MAAM,eAAe,GAAG;;;;;;;;CAQvB,CAAA;AACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;AACtD,MAAM,YAAY,GAAG;;;;;;;;kBAQH,OAAO;;;;;;;;;;;;;;kBAcP,OAAO,EAAE;;;;;;;;CAQ1B,CAAA;AACD,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;IACvB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAE,UAAU,EAAE,SAAS,CAAC,CAAA;IAC5F,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;QAC9E,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;QACnD,MAAM,KAAK,CAAC,UAAU,EAAE,eAAe,CAAC,CAAA;QACxC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAA;QAClD,MAAM,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;QAC9B,OAAO,CAAC,GAAG,CAAC,oBAAoB,UAAU,EAAE,CAAC,CAAA;IAC/C,CAAC;;QAAM,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAA;IAC7E,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,CAAA;IAC7D,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAA;IACzD,MAAM,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;IACpC,OAAO,CAAC,GAAG,CAAC,kBAAkB,SAAS,EAAE,CAAC,CAAA;IAC1C,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAA;AACrF,CAAC,CAAA;AACD,OAAO,EAAE,KAAK,EAAE,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { timeAgo } from './format.js';
2
+ declare const status: (swiftbar?: boolean, all?: boolean) => Promise<void>;
3
+ export { status, timeAgo };
4
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAgC,OAAO,EAAE,MAAM,aAAa,CAAA;AAEnE,QAAA,MAAM,MAAM,GAAU,kBAAgB,EAAE,aAAW,kBAiDlD,CAAA;AACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA"}
package/dist/status.js ADDED
@@ -0,0 +1,66 @@
1
+ /* eslint-disable no-console */
2
+ import { $ } from 'bun';
3
+ import { audit } from './audit.js';
4
+ import { spawnBackgroundCheck } from './check-cache.js';
5
+ import { checkCi, checkConfigs, checkDrift, checkForbidden, checkGit, checkLint, checkRootPkg, checkVercel } from './checks.js';
6
+ import { discover, discoverSources } from './discover.js';
7
+ import { formatIssues, formatSwiftBar, timeAgo } from './format.js';
8
+ import { isInsideProject, projectName } from './utils.js';
9
+ const status = async (swiftbar = false, all = false) => {
10
+ let allProjects;
11
+ let selfPath;
12
+ if (all) {
13
+ const { cnsync, consumers, self } = await discover();
14
+ selfPath = self.path;
15
+ allProjects = [self, cnsync, ...consumers];
16
+ }
17
+ else {
18
+ const projectPath = await isInsideProject();
19
+ if (projectPath) {
20
+ const { self } = await discoverSources();
21
+ selfPath = self.path;
22
+ allProjects = [{ name: projectName(projectPath), path: projectPath }];
23
+ }
24
+ else {
25
+ const { cnsync, consumers, self } = await discover();
26
+ selfPath = self.path;
27
+ allProjects = [self, cnsync, ...consumers];
28
+ }
29
+ }
30
+ const allIssues = new Map();
31
+ const checks = allProjects.map(async (project) => {
32
+ const issues = [];
33
+ const results = await Promise.all([
34
+ checkGit(project.path),
35
+ checkDrift(selfPath, project.path),
36
+ checkRootPkg(project.path),
37
+ checkConfigs(project.path),
38
+ checkForbidden(project.path),
39
+ audit(project.path),
40
+ checkCi(project.path),
41
+ checkVercel(project.path),
42
+ Promise.resolve(checkLint(project.path))
43
+ ]);
44
+ for (const r of results)
45
+ issues.push(...r);
46
+ allIssues.set(project.path, issues);
47
+ });
48
+ await Promise.all(checks);
49
+ for (const project of allProjects)
50
+ spawnBackgroundCheck(project.path);
51
+ if (swiftbar)
52
+ console.log(await formatSwiftBar(allIssues));
53
+ else {
54
+ for (const [path, issues] of allIssues) {
55
+ const output = formatIssues(path, issues);
56
+ if (output) {
57
+ console.log(output);
58
+ console.log();
59
+ }
60
+ }
61
+ if (process.platform === 'darwin')
62
+ await $ `open swiftbar://refreshplugin?name=pm4ai`.quiet().nothrow();
63
+ }
64
+ };
65
+ export { status, timeAgo };
66
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"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"}
package/dist/sync.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ import type { Issue } from './types.js';
2
+ declare const syncConfigs: (selfPath: string, projectPath: string) => Promise<Issue[]>;
3
+ declare const syncClaudeMd: (selfPath: string, projectPath: string) => Promise<Issue[]>;
4
+ declare const syncPackageJson: (projectPath: string) => Promise<Issue[]>;
5
+ declare const syncTsconfig: (projectPath: string) => Promise<Issue[]>;
6
+ declare const syncSubPackages: (selfPath: string, projectPath: string) => Promise<Issue[]>;
7
+ declare const syncUi: (cnsyncPath: string, projectPath: string) => Issue[];
8
+ export { syncClaudeMd, syncConfigs, syncPackageJson, syncSubPackages, syncTsconfig, syncUi };
9
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAe,MAAM,YAAY,CAAA;AAsBpD,QAAA,MAAM,WAAW,GAAU,UAAU,MAAM,EAAE,aAAa,MAAM,KAAG,OAAO,CAAC,KAAK,EAAE,CAejF,CAAA;AACD,QAAA,MAAM,YAAY,GAAU,UAAU,MAAM,EAAE,aAAa,MAAM,KAAG,OAAO,CAAC,KAAK,EAAE,CAkBlF,CAAA;AAwDD,QAAA,MAAM,eAAe,GAAU,aAAa,MAAM,KAAG,OAAO,CAAC,KAAK,EAAE,CAsCnE,CAAA;AACD,QAAA,MAAM,YAAY,GAAU,aAAa,MAAM,KAAG,OAAO,CAAC,KAAK,EAAE,CAYhE,CAAA;AAgID,QAAA,MAAM,eAAe,GAAU,UAAU,MAAM,EAAE,aAAa,MAAM,KAAG,OAAO,CAAC,KAAK,EAAE,CA6BrF,CAAA;AACD,QAAA,MAAM,MAAM,GAAI,YAAY,MAAM,EAAE,aAAa,MAAM,KAAG,KAAK,EAY9D,CAAA;AACD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,EAAE,CAAA"}
package/dist/sync.js ADDED
@@ -0,0 +1,301 @@
1
+ import { $, file, write } from 'bun';
2
+ import { cpSync, existsSync, mkdirSync } from 'node:fs';
3
+ import { dirname, join } from 'node:path';
4
+ import { CLAUDE_MD, READONLY_UI, REQUIRED_ROOT_DEVDEPS, REQUIRED_TRUSTED_DEPS, SKIP_PATTERNS, TURBO_FLAG, VERBATIM_FILES } from './constants.js';
5
+ import { inferRules } from './infer.js';
6
+ import { collectWorkspacePackages, getGhRepo, readJson, readPkg } from './utils.js';
7
+ const sortKeys = (obj) => Object.fromEntries(Object.entries(obj).toSorted(([a], [b]) => a.localeCompare(b)));
8
+ const stripFrontmatter = (content) => {
9
+ if (!content.startsWith('---'))
10
+ return content;
11
+ const endIdx = content.indexOf('---', 3);
12
+ if (endIdx === -1)
13
+ return content;
14
+ return content.slice(endIdx + 3).trim();
15
+ };
16
+ const CLEANUP_SCRIPT_PATH = 'script/cleanup-old-versions.ts';
17
+ const gitCleanRe = /\bgit\s+clean\s+\S+\s*/gu;
18
+ const syncConfigs = async (selfPath, projectPath) => {
19
+ const results = await Promise.all(VERBATIM_FILES.map(async (name) => {
20
+ const src = file(join(selfPath, name));
21
+ const dst = file(join(projectPath, name));
22
+ if (!(await src.exists()))
23
+ return;
24
+ const srcContent = await src.text();
25
+ const dstContent = (await dst.exists()) ? await dst.text() : '';
26
+ if (srcContent !== dstContent) {
27
+ await write(dst, srcContent);
28
+ return { detail: `${name} updated`, type: 'synced' };
29
+ }
30
+ }));
31
+ return results.filter((r) => r !== undefined);
32
+ };
33
+ const syncClaudeMd = async (selfPath, projectPath) => {
34
+ const issues = [];
35
+ const rulesDir = join(selfPath, 'apps', 'web', 'content', 'rules');
36
+ if (!existsSync(rulesDir)) {
37
+ issues.push({ detail: 'rules directory not found in pm4ai repo', type: 'error' });
38
+ return issues;
39
+ }
40
+ const inferred = await inferRules(projectPath, rulesDir);
41
+ const contents = await Promise.all(inferred.map(async (rule) => file(join(rulesDir, `${rule}.mdx`)).text()));
42
+ const blocks = contents.map(c => stripFrontmatter(c));
43
+ const generated = `${blocks.join('\n\n---\n\n')}\n`;
44
+ const claudeFile = file(join(projectPath, CLAUDE_MD));
45
+ const existing = (await claudeFile.exists()) ? await claudeFile.text() : '';
46
+ if (generated !== existing) {
47
+ await write(claudeFile, generated);
48
+ issues.push({ detail: `${CLAUDE_MD} updated`, type: 'synced' });
49
+ }
50
+ return issues;
51
+ };
52
+ const syncRootScripts = (scripts, issues) => {
53
+ let changed = false;
54
+ if (!scripts.clean) {
55
+ scripts.clean = 'sh clean.sh';
56
+ changed = true;
57
+ issues.push({ detail: 'added clean script', type: 'synced' });
58
+ }
59
+ if (!scripts.prepare) {
60
+ scripts.prepare = 'bunx simple-git-hooks';
61
+ changed = true;
62
+ issues.push({ detail: 'added prepare script', type: 'synced' });
63
+ }
64
+ if (!scripts.postinstall?.includes('sherif')) {
65
+ scripts.postinstall = scripts.postinstall ? `${scripts.postinstall} && sherif` : 'sherif';
66
+ changed = true;
67
+ issues.push({ detail: 'added sherif to postinstall', type: 'synced' });
68
+ }
69
+ if (!scripts.build) {
70
+ scripts.build = `turbo build ${TURBO_FLAG}`;
71
+ changed = true;
72
+ issues.push({ detail: 'added build script', type: 'synced' });
73
+ }
74
+ if (!scripts.check) {
75
+ scripts.check = 'lintmax check';
76
+ changed = true;
77
+ issues.push({ detail: 'added check script', type: 'synced' });
78
+ }
79
+ if (!scripts.fix) {
80
+ scripts.fix = 'lintmax fix';
81
+ changed = true;
82
+ issues.push({ detail: 'added fix script', type: 'synced' });
83
+ }
84
+ return changed;
85
+ };
86
+ const syncRootDevDeps = (pkg, devDeps, issues) => {
87
+ let changed = false;
88
+ if (!devDeps.sherif) {
89
+ devDeps.sherif = 'latest';
90
+ changed = true;
91
+ issues.push({ detail: 'added sherif to devDependencies', type: 'synced' });
92
+ }
93
+ if (!devDeps['simple-git-hooks']) {
94
+ devDeps['simple-git-hooks'] = 'latest';
95
+ changed = true;
96
+ issues.push({ detail: 'added simple-git-hooks to devDependencies', type: 'synced' });
97
+ }
98
+ const allDeps = { ...pkg.dependencies, ...devDeps };
99
+ for (const dep of REQUIRED_ROOT_DEVDEPS)
100
+ if (!allDeps[dep]) {
101
+ devDeps[dep] = 'latest';
102
+ changed = true;
103
+ issues.push({ detail: `added ${dep} to devDependencies`, type: 'synced' });
104
+ }
105
+ return changed;
106
+ };
107
+ const syncPackageJson = async (projectPath) => {
108
+ const issues = [];
109
+ const pkgPath = join(projectPath, 'package.json');
110
+ const pkg = await readPkg(pkgPath);
111
+ if (!pkg)
112
+ return issues;
113
+ let changed = false;
114
+ const scripts = pkg.scripts ?? {};
115
+ pkg.scripts = scripts;
116
+ changed = syncRootScripts(scripts, issues) || changed;
117
+ if (!pkg['simple-git-hooks']) {
118
+ pkg['simple-git-hooks'] = { 'pre-commit': 'sh up.sh && git add -u' };
119
+ changed = true;
120
+ issues.push({ detail: 'added simple-git-hooks', type: 'synced' });
121
+ }
122
+ const devDeps = pkg.devDependencies ?? {};
123
+ pkg.devDependencies = devDeps;
124
+ changed = syncRootDevDeps(pkg, devDeps, issues) || changed;
125
+ if (!pkg.packageManager) {
126
+ const r = await $ `bun --version`.quiet().nothrow();
127
+ const bunVersion = r.stdout.toString().trim();
128
+ if (bunVersion) {
129
+ pkg.packageManager = `bun@${bunVersion}`;
130
+ changed = true;
131
+ issues.push({ detail: `set packageManager to bun@${bunVersion}`, type: 'synced' });
132
+ }
133
+ }
134
+ const trusted = pkg.trustedDependencies ?? [];
135
+ const missingTrusted = REQUIRED_TRUSTED_DEPS.filter(d => !trusted.includes(d));
136
+ if (missingTrusted.length > 0) {
137
+ pkg.trustedDependencies = [...trusted, ...missingTrusted].toSorted();
138
+ changed = true;
139
+ issues.push({ detail: `added ${missingTrusted.join(', ')} to trustedDependencies`, type: 'synced' });
140
+ }
141
+ if (changed) {
142
+ pkg.devDependencies = sortKeys(pkg.devDependencies ?? {});
143
+ await write(file(pkgPath), `${JSON.stringify(pkg, null, 2)}\n`);
144
+ }
145
+ return issues;
146
+ };
147
+ const syncTsconfig = async (projectPath) => {
148
+ const issues = [];
149
+ const tsconfigPath = join(projectPath, 'tsconfig.json');
150
+ const raw = await readJson(tsconfigPath);
151
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw))
152
+ return issues;
153
+ const tsconfig = raw;
154
+ if ('include' in tsconfig) {
155
+ const rest = Object.fromEntries(Object.entries(tsconfig).filter(([k]) => k !== 'include'));
156
+ await write(file(tsconfigPath), `${JSON.stringify(rest, null, 2)}\n`);
157
+ issues.push({ detail: 'removed "include" from root tsconfig.json', type: 'synced' });
158
+ }
159
+ return issues;
160
+ };
161
+ const fixPublishedPkg = ({ issues, pkg, pkgPath, rel, repo, selfPath }) => {
162
+ let changed = false;
163
+ if (pkg.type !== 'module') {
164
+ pkg.type = 'module';
165
+ changed = true;
166
+ issues.push({ detail: `${rel} set "type": "module"`, type: 'synced' });
167
+ }
168
+ if (!pkg.files) {
169
+ pkg.files = ['dist'];
170
+ changed = true;
171
+ issues.push({ detail: `${rel} set "files": ["dist"]`, type: 'synced' });
172
+ }
173
+ if (!pkg.license) {
174
+ pkg.license = 'MIT';
175
+ changed = true;
176
+ issues.push({ detail: `${rel} set "license": "MIT"`, type: 'synced' });
177
+ }
178
+ if (!pkg.repository && repo) {
179
+ pkg.repository = { directory: dirname(rel), type: 'git', url: `https://github.com/${repo}` };
180
+ changed = true;
181
+ issues.push({ detail: `${rel} added repository`, type: 'synced' });
182
+ }
183
+ const pubScripts = pkg.scripts ?? {};
184
+ if (!pubScripts.postpublish) {
185
+ const srcScript = join(selfPath, CLEANUP_SCRIPT_PATH);
186
+ const scriptDir = join(dirname(pkgPath), 'script');
187
+ const scriptFile = join(scriptDir, 'cleanup-old-versions.ts');
188
+ if (!existsSync(scriptFile) && existsSync(srcScript)) {
189
+ mkdirSync(scriptDir, { recursive: true });
190
+ cpSync(srcScript, scriptFile);
191
+ issues.push({ detail: `${rel} created script/cleanup-old-versions.ts`, type: 'synced' });
192
+ }
193
+ pubScripts['cleanup-old-versions'] = 'bun script/cleanup-old-versions.ts';
194
+ pubScripts.postpublish = 'bun run cleanup-old-versions';
195
+ pkg.scripts = pubScripts;
196
+ changed = true;
197
+ issues.push({ detail: `${rel} added postpublish cleanup`, type: 'synced' });
198
+ }
199
+ return changed;
200
+ };
201
+ const fixGitClean = (pkg, rel, issues) => {
202
+ let changed = false;
203
+ const scripts = pkg.scripts ?? {};
204
+ for (const [name, cmd] of Object.entries(scripts)) {
205
+ gitCleanRe.lastIndex = 0;
206
+ if (gitCleanRe.test(cmd)) {
207
+ gitCleanRe.lastIndex = 0;
208
+ scripts[name] = cmd.replace(gitCleanRe, 'rm -rf ');
209
+ changed = true;
210
+ issues.push({ detail: `${rel} "${name}" replaced git clean with rm -rf`, type: 'synced' });
211
+ }
212
+ }
213
+ return changed;
214
+ };
215
+ const isSkipped = (rel) => SKIP_PATTERNS.some(p => rel.includes(p.replace('/', '')));
216
+ const hoistDevDeps = ({ issues, rel, rootDevDeps, subDevDeps }) => {
217
+ const external = Object.entries(subDevDeps).filter(([, v]) => !v.startsWith('workspace:'));
218
+ if (external.length === 0)
219
+ return { hoisted: false, remaining: Object.keys(subDevDeps).length === 0 ? undefined : subDevDeps };
220
+ let hoisted = false;
221
+ for (const [name, version] of external)
222
+ if (!rootDevDeps[name]) {
223
+ rootDevDeps[name] = version;
224
+ hoisted = true;
225
+ issues.push({ detail: `hoisted ${name} from ${rel} to root`, type: 'synced' });
226
+ }
227
+ const ws = Object.fromEntries(Object.entries(subDevDeps).filter(([, v]) => v.startsWith('workspace:')));
228
+ return { hoisted, remaining: Object.keys(ws).length === 0 ? undefined : ws };
229
+ };
230
+ const fixSubEntry = ({ entry, issues, projectPath, repo, selfPath }) => {
231
+ const rel = entry.path.replace(`${projectPath}/`, '');
232
+ let changed = false;
233
+ if (rel.startsWith('apps/') && !entry.pkg.private) {
234
+ entry.pkg.private = true;
235
+ changed = true;
236
+ issues.push({ detail: `${rel} set to private`, type: 'synced' });
237
+ }
238
+ const isPublished = !entry.pkg.private && (entry.pkg.exports ?? entry.pkg.main ?? entry.pkg.bin) && entry.pkg.name;
239
+ if (isPublished)
240
+ changed = fixPublishedPkg({ issues, pkg: entry.pkg, pkgPath: entry.path, rel, repo, selfPath }) || changed;
241
+ return fixGitClean(entry.pkg, rel, issues) || changed;
242
+ };
243
+ const hoistSubEntry = ({ entry, issues, projectPath, rootDevDeps }) => {
244
+ const rel = entry.path.replace(`${projectPath}/`, '');
245
+ const originalDevDeps = entry.pkg.devDependencies;
246
+ const { hoisted, remaining } = hoistDevDeps({ issues, rel, rootDevDeps, subDevDeps: originalDevDeps ?? {} });
247
+ const changed = remaining !== originalDevDeps && !(remaining === undefined && !originalDevDeps);
248
+ if (changed)
249
+ entry.pkg.devDependencies = remaining;
250
+ return { changed, hoisted, pkg: entry.pkg, pkgPath: entry.path };
251
+ };
252
+ const syncSubPackages = async (selfPath, projectPath) => {
253
+ const issues = [];
254
+ const entries = await collectWorkspacePackages(projectPath);
255
+ const rootPkgPath = join(projectPath, 'package.json');
256
+ const repo = await getGhRepo(projectPath);
257
+ const subEntries = entries.filter(e => e.path !== rootPkgPath);
258
+ const writes = [];
259
+ for (const entry of subEntries) {
260
+ const changed = fixSubEntry({ entry, issues, projectPath, repo, selfPath });
261
+ if (changed)
262
+ writes.push(write(file(entry.path), `${JSON.stringify(entry.pkg, null, 2)}\n`));
263
+ }
264
+ await Promise.all(writes);
265
+ const rootPkg = await readPkg(rootPkgPath);
266
+ if (!rootPkg)
267
+ return issues;
268
+ let rootChanged = false;
269
+ const rootDevDeps = rootPkg.devDependencies ?? {};
270
+ const subWrites = [];
271
+ const nonSkipped = subEntries.filter(e => !isSkipped(e.path.replace(`${projectPath}/`, '')));
272
+ for (const entry of nonSkipped) {
273
+ const result = hoistSubEntry({ entry, issues, projectPath, rootDevDeps });
274
+ if (result.hoisted)
275
+ rootChanged = true;
276
+ if (result.changed)
277
+ subWrites.push(write(file(result.pkgPath), `${JSON.stringify(result.pkg, null, 2)}\n`));
278
+ }
279
+ await Promise.all(subWrites);
280
+ if (rootChanged) {
281
+ rootPkg.devDependencies = sortKeys(rootDevDeps);
282
+ await write(file(rootPkgPath), `${JSON.stringify(rootPkg, null, 2)}\n`);
283
+ }
284
+ return issues;
285
+ };
286
+ const syncUi = (cnsyncPath, projectPath) => {
287
+ const issues = [];
288
+ const src = join(cnsyncPath, READONLY_UI);
289
+ const dst = join(projectPath, READONLY_UI);
290
+ if (!existsSync(src)) {
291
+ issues.push({ detail: `${READONLY_UI} not found in cnsync repo`, type: 'error' });
292
+ return issues;
293
+ }
294
+ if (projectPath === cnsyncPath)
295
+ return issues;
296
+ cpSync(src, dst, { recursive: true });
297
+ issues.push({ detail: `${READONLY_UI} updated`, type: 'synced' });
298
+ return issues;
299
+ };
300
+ export { syncClaudeMd, syncConfigs, syncPackageJson, syncSubPackages, syncTsconfig, syncUi };
301
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ interface Issue {
2
+ detail: string;
3
+ type: IssueType;
4
+ }
5
+ type IssueType = 'bun' | 'check' | 'ci' | 'dep' | 'deploy' | 'drift' | 'duplicate' | 'error' | 'file' | 'forbidden' | 'git' | 'info' | 'lintmax' | 'missing' | 'synced' | 'up.sh';
6
+ interface PackageJson {
7
+ bin?: unknown;
8
+ dependencies?: Record<string, string>;
9
+ devDependencies?: Record<string, string>;
10
+ exports?: unknown;
11
+ files?: string[];
12
+ license?: string;
13
+ main?: string;
14
+ name?: string;
15
+ packageManager?: string;
16
+ peerDependencies?: Record<string, string>;
17
+ private?: boolean;
18
+ repository?: unknown;
19
+ scripts?: Record<string, string>;
20
+ 'simple-git-hooks'?: Record<string, string>;
21
+ trustedDependencies?: string[];
22
+ type?: string;
23
+ workspaces?: string[];
24
+ }
25
+ export type { Issue, IssueType, PackageJson };
26
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,UAAU,KAAK;IACb,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,SAAS,CAAA;CAChB;AACD,KAAK,SAAS,GACV,KAAK,GACL,OAAO,GACP,IAAI,GACJ,KAAK,GACL,QAAQ,GACR,OAAO,GACP,WAAW,GACX,OAAO,GACP,MAAM,GACN,WAAW,GACX,KAAK,GACL,MAAM,GACN,SAAS,GACT,SAAS,GACT,QAAQ,GACR,OAAO,CAAA;AACX,UAAU,WAAW;IACnB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3C,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACtB;AACD,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,CAAA"}
package/dist/types.js ADDED
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import type { PackageJson } from './types.js';
2
+ declare const readJson: (path: string) => Promise<unknown>;
3
+ declare const readPkg: (path: string) => Promise<PackageJson | undefined>;
4
+ declare const projectName: (path: string) => string;
5
+ declare const getBunVersion: () => Promise<string>;
6
+ declare const getGhRepo: (projectPath: string) => Promise<string | undefined>;
7
+ declare const collectWorkspacePackages: (projectPath: string) => Promise<{
8
+ path: string;
9
+ pkg: PackageJson;
10
+ }[]>;
11
+ declare const setVerbose: (v: boolean) => void;
12
+ declare const debug: (...args: unknown[]) => void;
13
+ declare const isInsideProject: () => Promise<string | undefined>;
14
+ export { collectWorkspacePackages, debug, getBunVersion, getGhRepo, isInsideProject, projectName, readJson, readPkg, setVerbose };
15
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC7C,QAAA,MAAM,QAAQ,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,OAAO,CAMrD,CAAA;AAED,QAAA,MAAM,OAAO,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAGpE,CAAA;AACD,QAAA,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,MAAqC,CAAA;AACzE,QAAA,MAAM,aAAa,QAAa,OAAO,CAAC,MAAM,CAG7C,CAAA;AAED,QAAA,MAAM,SAAS,GAAU,aAAa,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAGxE,CAAA;AACD,QAAA,MAAM,wBAAwB,GAAU,aAAa,MAAM,KAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,WAAW,CAAA;CAAE,EAAE,CAoBzG,CAAA;AAED,QAAA,MAAM,UAAU,GAAI,GAAG,OAAO,SAE7B,CAAA;AACD,QAAA,MAAM,KAAK,GAAI,GAAG,MAAM,OAAO,EAAE,SAEhC,CAAA;AAQD,QAAA,MAAM,eAAe,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAS3D,CAAA;AACD,OAAO,EACL,wBAAwB,EACxB,KAAK,EACL,aAAa,EACb,SAAS,EACT,eAAe,EACf,WAAW,EACX,QAAQ,EACR,OAAO,EACP,UAAU,EACX,CAAA"}