gm-skill 2.0.2572 → 2.0.2574

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm-plugkit",
3
- "version": "2.0.2572",
3
+ "version": "2.0.2574",
4
4
  "description": "Bootstrap and daemon-spawn tool for gm plugkit binary. Downloads the correct platform wasm, verifies SHA256, and launches agentplug-runner (the native wasm host) as the spool watcher daemon.",
5
5
  "main": "index.js",
6
6
  "bin": {
package/gm.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm",
3
- "version": "2.0.2572",
3
+ "version": "2.0.2574",
4
4
  "description": "Spool-dispatch orchestration engine with unified state machine, skills, and automated git enforcement",
5
5
  "author": "AnEntrypoint",
6
6
  "license": "MIT",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm-skill",
3
- "version": "2.0.2572",
3
+ "version": "2.0.2574",
4
4
  "description": "Canonical universal harness — AI-native software engineering via skill-driven orchestration; bootstraps plugkit for task execution and session isolation. Install in any AI coding agent host.",
5
5
  "author": "AnEntrypoint",
6
6
  "license": "MIT",
@@ -17,6 +17,11 @@ import process from 'node:process'
17
17
  const SKIP_DIRS = new Set([
18
18
  'node_modules', '.git', 'dist', 'build', '.next', 'vendor', '.cache',
19
19
  '.svelte-kit', '.nuxt', '.output', '.turbo', 'out', 'coverage', '.parcel-cache',
20
+ // Vendored/third-party binary trees this scanner isn't meant to police --
21
+ // a browser profile's installed extensions are third-party code the user
22
+ // didn't write and can't fix here; a real backdoor concern in a project's
23
+ // OWN code should never be diluted by noise from a bundled Chrome profile.
24
+ '.plugkit-browser-profile', '.plugkit-agent-worktree', '.wwebjs_auth', '.wwebjs_cache',
20
25
  ])
21
26
  // Code files only. JSON/YAML/MD routinely carry legitimate non-Latin natural-
22
27
  // language text (Cyrillic, Greek, CJK, etc.) which is indistinguishable from a
@@ -136,6 +141,9 @@ function walk(dir, out) {
136
141
  }
137
142
  for (const e of entries) {
138
143
  if (SKIP_DIRS.has(e.name)) continue
144
+ // Hash/timestamp-suffixed variants of the same vendored-profile dirs
145
+ // (e.g. .plugkit-browser-profile-<id>) -- prefix match on the same names.
146
+ if (e.name.startsWith('.plugkit-browser-profile') || e.name.startsWith('.plugkit-browser-chrome-profile') || e.name.startsWith('.plugkit-agent-worktree')) continue
139
147
  const p = path.join(dir, e.name)
140
148
  if (e.isDirectory()) {
141
149
  walk(p, out)
@@ -234,24 +242,30 @@ function main() {
234
242
  else files.push(root)
235
243
  }
236
244
 
237
- const allFindings = []
238
- for (const f of files) {
239
- allFindings.push(...scanFile(f))
240
- }
241
-
242
- if (!allFindings.length) {
243
- console.log(`scan-supply-chain-tells: clean (${files.length} files scanned)`)
244
- process.exit(0)
245
+ // Stream findings as each file is scanned (never buffer until the end) so a
246
+ // kill/timeout mid-run still leaves a partial, readable, useful result on
247
+ // disk instead of losing everything. Progress heartbeat every 200 files so
248
+ // a long run's liveness is visible without waiting for a finding.
249
+ let totalFindings = 0
250
+ const filesWithFindings = new Set()
251
+ for (let idx = 0; idx < files.length; idx++) {
252
+ const f = files[idx]
253
+ const findings = scanFile(f)
254
+ for (const finding of findings) {
255
+ totalFindings++
256
+ filesWithFindings.add(finding.filePath)
257
+ const loc = finding.line ? `:${finding.line}` : ''
258
+ const label = finding.sig || finding.name
259
+ console.log(`[${finding.kind}] ${finding.filePath}${loc} — ${label}`)
260
+ console.log(` ${finding.why}`)
261
+ }
262
+ if ((idx + 1) % 200 === 0) {
263
+ console.error(`... scanned ${idx + 1}/${files.length} files, ${totalFindings} finding(s) so far`)
264
+ }
245
265
  }
246
266
 
247
- console.log(`scan-supply-chain-tells: ${allFindings.length} finding(s) across ${new Set(allFindings.map(f => f.filePath)).size} file(s)\n`)
248
- for (const f of allFindings) {
249
- const loc = f.line ? `:${f.line}` : ''
250
- const label = f.sig || f.name
251
- console.log(`[${f.kind}] ${f.filePath}${loc} — ${label}`)
252
- console.log(` ${f.why}`)
253
- }
254
- process.exit(1)
267
+ console.log(`\nscan-supply-chain-tells: ${totalFindings} finding(s) across ${filesWithFindings.size} file(s) (${files.length} files scanned total)`)
268
+ process.exit(totalFindings ? 1 : 0)
255
269
  }
256
270
 
257
271
  main()