@promptci/core 0.1.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/dist/action-pinning.d.ts +37 -0
  2. package/dist/action-pinning.d.ts.map +1 -0
  3. package/dist/action-pinning.js +277 -0
  4. package/dist/action-pinning.js.map +1 -0
  5. package/dist/agent-practices.d.ts +1 -1
  6. package/dist/agent-practices.d.ts.map +1 -1
  7. package/dist/agent-practices.js +107 -43
  8. package/dist/agent-practices.js.map +1 -1
  9. package/dist/ai-config.d.ts +42 -3
  10. package/dist/ai-config.d.ts.map +1 -1
  11. package/dist/ai-config.js +210 -12
  12. package/dist/ai-config.js.map +1 -1
  13. package/dist/alias-files.d.ts +33 -0
  14. package/dist/alias-files.d.ts.map +1 -0
  15. package/dist/alias-files.js +60 -0
  16. package/dist/alias-files.js.map +1 -0
  17. package/dist/buried-critical.d.ts.map +1 -1
  18. package/dist/buried-critical.js +4 -9
  19. package/dist/buried-critical.js.map +1 -1
  20. package/dist/canonical-owner.d.ts.map +1 -1
  21. package/dist/canonical-owner.js +45 -25
  22. package/dist/canonical-owner.js.map +1 -1
  23. package/dist/ci-alignment.d.ts.map +1 -1
  24. package/dist/ci-alignment.js +3 -2
  25. package/dist/ci-alignment.js.map +1 -1
  26. package/dist/command-validity.d.ts +16 -0
  27. package/dist/command-validity.d.ts.map +1 -1
  28. package/dist/command-validity.js +337 -63
  29. package/dist/command-validity.js.map +1 -1
  30. package/dist/conflicts.d.ts.map +1 -1
  31. package/dist/conflicts.js +3 -2
  32. package/dist/conflicts.js.map +1 -1
  33. package/dist/context-bloat.d.ts +1 -1
  34. package/dist/context-bloat.d.ts.map +1 -1
  35. package/dist/context-bloat.js +18 -7
  36. package/dist/context-bloat.js.map +1 -1
  37. package/dist/context-optimizer.d.ts.map +1 -1
  38. package/dist/context-optimizer.js +5 -2
  39. package/dist/context-optimizer.js.map +1 -1
  40. package/dist/custom-rules.d.ts.map +1 -1
  41. package/dist/custom-rules.js +6 -1
  42. package/dist/custom-rules.js.map +1 -1
  43. package/dist/dead-references.d.ts +16 -2
  44. package/dist/dead-references.d.ts.map +1 -1
  45. package/dist/dead-references.js +635 -77
  46. package/dist/dead-references.js.map +1 -1
  47. package/dist/dependency-staleness.d.ts +35 -0
  48. package/dist/dependency-staleness.d.ts.map +1 -0
  49. package/dist/dependency-staleness.js +1001 -0
  50. package/dist/dependency-staleness.js.map +1 -0
  51. package/dist/detectors.d.ts.map +1 -1
  52. package/dist/detectors.js +31 -6
  53. package/dist/detectors.js.map +1 -1
  54. package/dist/duplicates.d.ts.map +1 -1
  55. package/dist/duplicates.js +5 -4
  56. package/dist/duplicates.js.map +1 -1
  57. package/dist/evidence.d.ts +11 -0
  58. package/dist/evidence.d.ts.map +1 -1
  59. package/dist/evidence.js +40 -0
  60. package/dist/evidence.js.map +1 -1
  61. package/dist/finding-id.d.ts +21 -0
  62. package/dist/finding-id.d.ts.map +1 -0
  63. package/dist/finding-id.js +31 -0
  64. package/dist/finding-id.js.map +1 -0
  65. package/dist/frameworks/dotnet.js +2 -2
  66. package/dist/frameworks/dotnet.js.map +1 -1
  67. package/dist/frameworks/rust.d.ts.map +1 -1
  68. package/dist/frameworks/rust.js +2 -1
  69. package/dist/frameworks/rust.js.map +1 -1
  70. package/dist/git-symlinks.d.ts +30 -0
  71. package/dist/git-symlinks.d.ts.map +1 -0
  72. package/dist/git-symlinks.js +161 -0
  73. package/dist/git-symlinks.js.map +1 -0
  74. package/dist/gitignore.d.ts +22 -0
  75. package/dist/gitignore.d.ts.map +1 -0
  76. package/dist/gitignore.js +157 -0
  77. package/dist/gitignore.js.map +1 -0
  78. package/dist/health-score.d.ts.map +1 -1
  79. package/dist/health-score.js +34 -5
  80. package/dist/health-score.js.map +1 -1
  81. package/dist/index.d.ts +9 -3
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +5 -2
  84. package/dist/index.js.map +1 -1
  85. package/dist/makefile.d.ts +37 -0
  86. package/dist/makefile.d.ts.map +1 -0
  87. package/dist/makefile.js +156 -0
  88. package/dist/makefile.js.map +1 -0
  89. package/dist/manifest-consistency.d.ts.map +1 -1
  90. package/dist/manifest-consistency.js +52 -8
  91. package/dist/manifest-consistency.js.map +1 -1
  92. package/dist/negative-instructions.d.ts.map +1 -1
  93. package/dist/negative-instructions.js +4 -9
  94. package/dist/negative-instructions.js.map +1 -1
  95. package/dist/path-containment.d.ts +29 -0
  96. package/dist/path-containment.d.ts.map +1 -1
  97. package/dist/path-containment.js +70 -0
  98. package/dist/path-containment.js.map +1 -1
  99. package/dist/prompt-cache.d.ts.map +1 -1
  100. package/dist/prompt-cache.js +8 -6
  101. package/dist/prompt-cache.js.map +1 -1
  102. package/dist/repo-context.d.ts +53 -0
  103. package/dist/repo-context.d.ts.map +1 -1
  104. package/dist/repo-context.js +134 -11
  105. package/dist/repo-context.js.map +1 -1
  106. package/dist/report.d.ts +7 -0
  107. package/dist/report.d.ts.map +1 -1
  108. package/dist/report.js +36 -7
  109. package/dist/report.js.map +1 -1
  110. package/dist/scan.d.ts.map +1 -1
  111. package/dist/scan.js +41 -2
  112. package/dist/scan.js.map +1 -1
  113. package/dist/scanner.d.ts +49 -1
  114. package/dist/scanner.d.ts.map +1 -1
  115. package/dist/scanner.js +323 -38
  116. package/dist/scanner.js.map +1 -1
  117. package/dist/security-pack.d.ts.map +1 -1
  118. package/dist/security-pack.js +6 -4
  119. package/dist/security-pack.js.map +1 -1
  120. package/dist/skill-supply-chain.d.ts +132 -0
  121. package/dist/skill-supply-chain.d.ts.map +1 -0
  122. package/dist/skill-supply-chain.js +2954 -0
  123. package/dist/skill-supply-chain.js.map +1 -0
  124. package/dist/skills-detector.d.ts +7 -3
  125. package/dist/skills-detector.d.ts.map +1 -1
  126. package/dist/skills-detector.js +98 -22
  127. package/dist/skills-detector.js.map +1 -1
  128. package/dist/stale-instructions.d.ts.map +1 -1
  129. package/dist/stale-instructions.js +2 -1
  130. package/dist/stale-instructions.js.map +1 -1
  131. package/dist/suppression.d.ts +2 -0
  132. package/dist/suppression.d.ts.map +1 -1
  133. package/dist/suppression.js +5 -2
  134. package/dist/suppression.js.map +1 -1
  135. package/dist/types.d.ts +35 -2
  136. package/dist/types.d.ts.map +1 -1
  137. package/dist/types.js +22 -0
  138. package/dist/types.js.map +1 -1
  139. package/dist/vague-guidance.d.ts.map +1 -1
  140. package/dist/vague-guidance.js +2 -1
  141. package/dist/vague-guidance.js.map +1 -1
  142. package/dist/windsurf-detector.d.ts.map +1 -1
  143. package/dist/windsurf-detector.js +15 -6
  144. package/dist/windsurf-detector.js.map +1 -1
  145. package/dist/within-section-dedup.d.ts.map +1 -1
  146. package/dist/within-section-dedup.js +4 -9
  147. package/dist/within-section-dedup.js.map +1 -1
  148. package/dist/workspace-manifests.d.ts +80 -0
  149. package/dist/workspace-manifests.d.ts.map +1 -0
  150. package/dist/workspace-manifests.js +333 -0
  151. package/dist/workspace-manifests.js.map +1 -0
  152. package/package.json +1 -1
@@ -0,0 +1,333 @@
1
+ /**
2
+ * Workspace package.json facts shared by the script-validity checks
3
+ * (command-validity and manifest-consistency).
4
+ *
5
+ * A package-manager command is only a "missing script" when nothing the repo
6
+ * can run under that name exists. Two kinds of names are never scripts and must
7
+ * not be reported as missing:
8
+ *
9
+ * - Dependencies and their binaries: `pnpm vitest run` and `yarn tsc --noEmit`
10
+ * fall through to the installed binary when no script of that name exists.
11
+ * - Scripts defined by a workspace package rather than the root manifest:
12
+ * `pnpm --filter web dev` or `pnpm -r build` in a monorepo.
13
+ *
14
+ * `node_modules/.bin` is not available when scanning a checkout, so a binary is
15
+ * accepted only when a package that provides it is declared in some workspace
16
+ * manifest (or, for a dependency whose name IS the command, the dependency
17
+ * itself). Everything here is deterministic and offline.
18
+ */
19
+ import * as fs from 'node:fs/promises';
20
+ import * as path from 'node:path';
21
+ import micromatch from 'micromatch';
22
+ import { listFiles, resolveReadableWithinRoot, resolveWithinRoot } from './ai-config.js';
23
+ import { MAX_FILE_SIZE } from './scanner.js';
24
+ /** Upper bound on workspace manifests read, so a huge repo cannot stall a scan. */
25
+ const MAX_WORKSPACE_MANIFESTS = 200;
26
+ /** Conventional workspace roots, used when no `workspaces` globs are declared. */
27
+ const CONVENTIONAL_WORKSPACE_GLOBS = ['apps/*', 'packages/*', 'libs/*'];
28
+ const DEPENDENCY_BLOCKS = ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies'];
29
+ // ── Well-known binaries ───────────────────────────────────────────────────────
30
+ /**
31
+ * Common JS/TS tool binaries and the packages that install them. A bare
32
+ * `pnpm <bin>` / `yarn <bin>` runs the installed binary, so `pnpm prisma
33
+ * migrate` is valid when `prisma` is a dependency somewhere in the workspace —
34
+ * and a missing script when nothing installs it.
35
+ */
36
+ const BIN_PROVIDERS = {
37
+ // compilers / bundlers / transpilers
38
+ tsc: ['typescript'], tsserver: ['typescript'], tsx: ['tsx'], 'ts-node': ['ts-node'],
39
+ tsup: ['tsup'], 'tsc-alias': ['tsc-alias'], 'vue-tsc': ['vue-tsc'], esbuild: ['esbuild'],
40
+ rollup: ['rollup'], webpack: ['webpack-cli', 'webpack'], vite: ['vite'], swc: ['@swc/cli'],
41
+ babel: ['@babel/cli'], parcel: ['parcel'], rspack: ['@rspack/cli'], unbuild: ['unbuild'],
42
+ bunchee: ['bunchee'],
43
+ // lint / format / type tools
44
+ eslint: ['eslint'], prettier: ['prettier'], biome: ['@biomejs/biome'], oxlint: ['oxlint'],
45
+ stylelint: ['stylelint'], knip: ['knip'], depcheck: ['depcheck'], madge: ['madge'],
46
+ commitlint: ['@commitlint/cli'], 'svelte-check': ['svelte-check'], typedoc: ['typedoc'],
47
+ 'size-limit': ['size-limit'],
48
+ // test runners
49
+ vitest: ['vitest'], jest: ['jest'], mocha: ['mocha'], ava: ['ava'],
50
+ playwright: ['@playwright/test', 'playwright'], cypress: ['cypress'],
51
+ storybook: ['storybook', '@storybook/cli'], msw: ['msw'],
52
+ // monorepo / release
53
+ turbo: ['turbo'], nx: ['nx'], lerna: ['lerna'], changeset: ['@changesets/cli'],
54
+ 'semantic-release': ['semantic-release'], husky: ['husky'], 'lint-staged': ['lint-staged'],
55
+ // frameworks
56
+ next: ['next'], nuxt: ['nuxt'], nuxi: ['nuxt', 'nuxi'], astro: ['astro'], remix: ['@remix-run/dev'],
57
+ expo: ['expo'], eas: ['eas-cli'], 'react-native': ['react-native'], ng: ['@angular/cli'],
58
+ nest: ['@nestjs/cli'], gatsby: ['gatsby'], docusaurus: ['@docusaurus/core'], vitepress: ['vitepress'],
59
+ tauri: ['@tauri-apps/cli'], electron: ['electron'], 'electron-builder': ['electron-builder'],
60
+ sanity: ['sanity', '@sanity/cli'], strapi: ['@strapi/strapi'],
61
+ // data / infra / deploy
62
+ prisma: ['prisma'], 'drizzle-kit': ['drizzle-kit'], knex: ['knex'], typeorm: ['typeorm'],
63
+ sequelize: ['sequelize-cli'], supabase: ['supabase'], wrangler: ['wrangler'], vercel: ['vercel'],
64
+ netlify: ['netlify-cli'], firebase: ['firebase-tools'], sst: ['sst'], cdk: ['aws-cdk'],
65
+ serverless: ['serverless'],
66
+ // process / shell helpers
67
+ nodemon: ['nodemon'], concurrently: ['concurrently'], 'cross-env': ['cross-env'], rimraf: ['rimraf'],
68
+ dotenv: ['dotenv-cli', 'dotenv'], 'npm-run-all': ['npm-run-all', 'npm-run-all2'],
69
+ 'run-s': ['npm-run-all', 'npm-run-all2'], 'run-p': ['npm-run-all', 'npm-run-all2'],
70
+ // css / codegen
71
+ tailwindcss: ['tailwindcss', '@tailwindcss/cli'], postcss: ['postcss-cli'],
72
+ 'graphql-codegen': ['@graphql-codegen/cli'], 'openapi-typescript': ['openapi-typescript'],
73
+ };
74
+ // ── Discovery (async; called once while building the RepoContext) ─────────────
75
+ function stringKeys(value) {
76
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
77
+ return [];
78
+ return Object.keys(value);
79
+ }
80
+ function stringRecord(value) {
81
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
82
+ return {};
83
+ const out = {};
84
+ for (const [key, v] of Object.entries(value)) {
85
+ if (typeof v === 'string')
86
+ out[key] = v;
87
+ }
88
+ return out;
89
+ }
90
+ /** Bin names a manifest exposes: a string `bin` is named after the (unscoped) package. */
91
+ function binNames(parsed) {
92
+ const { bin, name } = parsed;
93
+ if (typeof bin === 'string' && typeof name === 'string')
94
+ return [name.split('/').pop()];
95
+ return stringKeys(bin);
96
+ }
97
+ export function parseWorkspaceManifest(dir, raw) {
98
+ let parsed;
99
+ try {
100
+ parsed = JSON.parse(raw);
101
+ }
102
+ catch {
103
+ return undefined;
104
+ }
105
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
106
+ return undefined;
107
+ const obj = parsed;
108
+ const dependencies = new Set();
109
+ const versions = {};
110
+ for (const block of DEPENDENCY_BLOCKS) {
111
+ const specs = stringRecord(obj[block]);
112
+ for (const dep of Object.keys(specs)) {
113
+ if (specs[dep].startsWith('workspace:'))
114
+ continue;
115
+ dependencies.add(dep);
116
+ if (!(dep in versions))
117
+ versions[dep] = specs[dep];
118
+ }
119
+ }
120
+ return {
121
+ dir,
122
+ name: typeof obj.name === 'string' ? obj.name : undefined,
123
+ scripts: stringRecord(obj.scripts),
124
+ dependencies: [...dependencies].sort(),
125
+ versions,
126
+ bins: binNames(obj),
127
+ };
128
+ }
129
+ /** `workspaces` globs from package.json (array form, or yarn's `{ packages: [...] }`). */
130
+ function packageJsonWorkspaceGlobs(rawPackageJson) {
131
+ if (!rawPackageJson)
132
+ return [];
133
+ try {
134
+ const parsed = JSON.parse(rawPackageJson);
135
+ const ws = parsed.workspaces;
136
+ const list = Array.isArray(ws)
137
+ ? ws
138
+ : typeof ws === 'object' && ws !== null && Array.isArray(ws.packages)
139
+ ? ws.packages
140
+ : [];
141
+ return list.filter((g) => typeof g === 'string');
142
+ }
143
+ catch {
144
+ return [];
145
+ }
146
+ }
147
+ function unquoteYamlScalar(raw) {
148
+ const trimmed = raw.trim();
149
+ const quoted = /^(?:"([^"]*)"|'([^']*)')/.exec(trimmed);
150
+ if (quoted)
151
+ return quoted[1] ?? quoted[2] ?? '';
152
+ return trimmed.replace(/\s+#.*$/, '');
153
+ }
154
+ /**
155
+ * `packages:` entries of pnpm-workspace.yaml — the small subset of YAML it
156
+ * uses: a block list (indented or not) or a flow list (`['a/*', "b/*"]`,
157
+ * possibly across lines).
158
+ */
159
+ export function pnpmWorkspaceGlobs(rawYaml) {
160
+ if (!rawYaml)
161
+ return [];
162
+ const lines = rawYaml.split(/\r?\n/);
163
+ const globs = [];
164
+ for (let i = 0; i < lines.length; i++) {
165
+ const header = /^packages\s*:\s*(.*)$/.exec(lines[i]);
166
+ if (!header)
167
+ continue;
168
+ const rest = header[1].trim();
169
+ if (rest.startsWith('[')) {
170
+ let flow = rest;
171
+ for (let j = i + 1; !flow.includes(']') && j < lines.length; j++)
172
+ flow += ` ${lines[j].trim()}`;
173
+ const inner = flow.slice(1, flow.includes(']') ? flow.indexOf(']') : undefined);
174
+ for (const item of inner.split(',')) {
175
+ const glob = unquoteYamlScalar(item);
176
+ if (glob)
177
+ globs.push(glob);
178
+ }
179
+ break;
180
+ }
181
+ for (let j = i + 1; j < lines.length; j++) {
182
+ const line = lines[j];
183
+ const item = /^\s*-\s+(.*)$/.exec(line); // `- x` at any indent, including column 0
184
+ if (item) {
185
+ const glob = unquoteYamlScalar(item[1]);
186
+ if (glob)
187
+ globs.push(glob);
188
+ continue;
189
+ }
190
+ // Blank lines and comments continue the list; the next top-level key ends it.
191
+ if (line.trim() === '' || /^\s*#/.test(line) || /^\s/.test(line))
192
+ continue;
193
+ break;
194
+ }
195
+ break;
196
+ }
197
+ return globs;
198
+ }
199
+ /**
200
+ * A workspace glob is only followed when it stays inside the repository: an
201
+ * absolute path or a `..` segment would let a hostile `workspaces` entry read
202
+ * package.json files of sibling directories.
203
+ */
204
+ function isContainedGlob(glob) {
205
+ const posix = glob.replace(/\\/g, '/');
206
+ if (posix.startsWith('/') || /^[a-zA-Z]:/.test(posix))
207
+ return false;
208
+ return !posix.split('/').includes('..');
209
+ }
210
+ function toManifestGlob(workspaceGlob) {
211
+ const trimmed = workspaceGlob.replace(/^\.\//, '').replace(/\/+$/, '');
212
+ return `${trimmed}/package.json`;
213
+ }
214
+ /**
215
+ * Read the root manifest and every workspace package manifest. Workspace
216
+ * directories come from the declared `workspaces` globs (package.json or
217
+ * pnpm-workspace.yaml) or, when none are declared, the conventional
218
+ * `apps/`, `packages/` and `libs/` roots. Only dependency trees and VCS
219
+ * directories are ignored — a declared glob may legitimately reach
220
+ * `tools/build/`. Paths the scan's `exclude` patterns cover (`isExcluded`) are
221
+ * never read.
222
+ */
223
+ export async function discoverWorkspaceManifests(repoRoot, rawRootPackageJson, isExcluded = () => false) {
224
+ let pnpmYaml;
225
+ try {
226
+ const abs = resolveReadableWithinRoot(repoRoot, 'pnpm-workspace.yaml');
227
+ pnpmYaml = abs ? await fs.readFile(abs, 'utf-8') : undefined;
228
+ }
229
+ catch {
230
+ pnpmYaml = undefined;
231
+ }
232
+ const declared = [...packageJsonWorkspaceGlobs(rawRootPackageJson), ...pnpmWorkspaceGlobs(pnpmYaml)];
233
+ const positive = declared.filter((g) => !g.startsWith('!') && isContainedGlob(g));
234
+ const negative = declared.filter((g) => g.startsWith('!')).map((g) => g.slice(1));
235
+ const globs = positive.length > 0 ? positive : CONVENTIONAL_WORKSPACE_GLOBS;
236
+ const ignore = [
237
+ '**/node_modules/**', '**/.git/**',
238
+ ...negative.filter(isContainedGlob).map((g) => `${g.replace(/\/+$/, '')}/**`),
239
+ ];
240
+ const matched = listFiles(repoRoot, globs.map(toManifestGlob), ignore)
241
+ .filter((rel) => resolveWithinRoot(repoRoot, rel) !== null && !isExcluded(rel));
242
+ const truncated = matched.length > MAX_WORKSPACE_MANIFESTS;
243
+ const manifests = [];
244
+ const rootManifest = rawRootPackageJson ? parseWorkspaceManifest('.', rawRootPackageJson) : undefined;
245
+ if (rootManifest)
246
+ manifests.push(rootManifest);
247
+ for (const rel of matched.slice(0, MAX_WORKSPACE_MANIFESTS)) {
248
+ if (rel === 'package.json')
249
+ continue;
250
+ try {
251
+ const abs = resolveReadableWithinRoot(repoRoot, rel);
252
+ if (!abs)
253
+ continue;
254
+ const stat = await fs.stat(abs);
255
+ if (!stat.isFile() || stat.size > MAX_FILE_SIZE)
256
+ continue;
257
+ const manifest = parseWorkspaceManifest(path.posix.dirname(rel), await fs.readFile(abs, 'utf-8'));
258
+ if (manifest)
259
+ manifests.push(manifest);
260
+ }
261
+ catch {
262
+ // unreadable — skip
263
+ }
264
+ }
265
+ return { manifests, truncated };
266
+ }
267
+ // ── Queries (pure; used by the detectors) ─────────────────────────────────────
268
+ /** Dependency names declared anywhere in the workspace, without @types and sibling-package links. */
269
+ function installedPackages(context) {
270
+ const localNames = new Set((context.workspaces ?? []).map((ws) => ws.name).filter((n) => !!n));
271
+ const names = new Set();
272
+ const add = (dep) => {
273
+ if (!dep.startsWith('@types/') && !localNames.has(dep))
274
+ names.add(dep);
275
+ };
276
+ const { dependencies, devDependencies, peerDependencies } = context.packageJson;
277
+ for (const block of [dependencies, devDependencies, peerDependencies]) {
278
+ for (const [dep, spec] of Object.entries(block))
279
+ if (!spec.startsWith('workspace:'))
280
+ add(dep);
281
+ }
282
+ for (const ws of context.workspaces ?? [])
283
+ ws.dependencies.forEach(add);
284
+ return names;
285
+ }
286
+ /**
287
+ * True when `pnpm|yarn|bun <name>` would run an installed binary:
288
+ * - a workspace package exposes it (`bin`);
289
+ * - a dependency is literally named `<name>`; or
290
+ * - `<name>` is a well-known tool binary AND a package providing it is declared.
291
+ *
292
+ * When workspace discovery is absent or was truncated the declared packages are
293
+ * not the whole picture, so a well-known tool binary is accepted unconditionally.
294
+ */
295
+ export function isKnownBinary(context, name) {
296
+ if ((context.workspaces ?? []).some((ws) => ws.bins.includes(name)))
297
+ return true;
298
+ const installed = installedPackages(context);
299
+ if (installed.has(name))
300
+ return true;
301
+ const providers = BIN_PROVIDERS[name];
302
+ if (!providers)
303
+ return false;
304
+ if (context.workspaces === undefined || context.workspacesTruncated)
305
+ return true;
306
+ return providers.some((provider) => installed.has(provider));
307
+ }
308
+ /** True when the root manifest or any workspace package defines the script. */
309
+ export function anyWorkspaceHasScript(context, name) {
310
+ if (context.packageJson.scripts[name])
311
+ return true;
312
+ return (context.workspaces ?? []).some((ws) => !!ws.scripts[name]);
313
+ }
314
+ /**
315
+ * Workspaces a pnpm/npm/yarn selector (package name, path, or glob) refers to.
316
+ * `*`, `**` and exclusion/dependents selectors (`!web`, `[origin/main]`) select
317
+ * every workspace — they cannot be evaluated statically, so stay permissive.
318
+ */
319
+ export function selectWorkspaces(context, selector) {
320
+ const workspaces = context.workspaces ?? [];
321
+ if (selector === '*' || selector === '**' || selector.startsWith('!') || selector.startsWith('[')) {
322
+ return workspaces;
323
+ }
324
+ const posix = selector.replace(/\\/g, '/').replace(/^\.\//, '').replace(/\/+$/, '');
325
+ const options = { dot: true };
326
+ return workspaces.filter((ws) => ws.name === selector ||
327
+ ws.dir === posix ||
328
+ ws.dir.endsWith(`/${posix}`) ||
329
+ (/[*?[{]/.test(selector) &&
330
+ ((ws.name !== undefined && micromatch.isMatch(ws.name, selector, options)) ||
331
+ micromatch.isMatch(ws.dir, posix, options))));
332
+ }
333
+ //# sourceMappingURL=workspace-manifests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-manifests.js","sourceRoot":"","sources":["../src/workspace-manifests.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@promptci/core",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "description": "Deterministic scanner for AI coding instruction files (CLAUDE.md, AGENTS.md, .cursorrules) — detectors, scoring, and report generation",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",