@intrect/openswarm 0.13.0 → 0.15.0

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 (37) hide show
  1. package/README.md +9 -7
  2. package/dist/automation/longRunningMonitor.d.ts.map +1 -1
  3. package/dist/automation/longRunningMonitor.js +1 -0
  4. package/dist/automation/longRunningMonitor.js.map +1 -1
  5. package/dist/cli/checkHandler.d.ts.map +1 -1
  6. package/dist/cli/checkHandler.js +113 -125
  7. package/dist/cli/checkHandler.js.map +1 -1
  8. package/dist/cli/fixCommand.d.ts +31 -1
  9. package/dist/cli/fixCommand.d.ts.map +1 -1
  10. package/dist/cli/fixCommand.js +111 -3
  11. package/dist/cli/fixCommand.js.map +1 -1
  12. package/dist/cli.js +6 -2
  13. package/dist/cli.js.map +1 -1
  14. package/dist/discord/discordCore.d.ts.map +1 -1
  15. package/dist/discord/discordCore.js.map +1 -1
  16. package/dist/issues/linearBridge.d.ts.map +1 -1
  17. package/dist/issues/linearBridge.js +0 -1
  18. package/dist/issues/linearBridge.js.map +1 -1
  19. package/dist/issues/memoryBridge.d.ts.map +1 -1
  20. package/dist/issues/memoryBridge.js +0 -2
  21. package/dist/issues/memoryBridge.js.map +1 -1
  22. package/dist/knowledge/scanner.js +3 -3
  23. package/dist/knowledge/scanner.js.map +1 -1
  24. package/dist/registry/bsDetector.js +2 -2
  25. package/dist/registry/bsDetector.js.map +1 -1
  26. package/dist/support/chatMemory.d.ts.map +1 -1
  27. package/dist/support/chatMemory.js +0 -9
  28. package/dist/support/chatMemory.js.map +1 -1
  29. package/dist/support/repoMetadata.d.ts +1 -0
  30. package/dist/support/repoMetadata.d.ts.map +1 -1
  31. package/dist/support/repoMetadata.js +6 -0
  32. package/dist/support/repoMetadata.js.map +1 -1
  33. package/dist/support/updateNotifier.d.ts +29 -0
  34. package/dist/support/updateNotifier.d.ts.map +1 -0
  35. package/dist/support/updateNotifier.js +119 -0
  36. package/dist/support/updateNotifier.js.map +1 -0
  37. package/package.json +2 -1
package/README.md CHANGED
@@ -84,10 +84,12 @@ openswarm review --max --concurrency 8 # widen the fan-out — areas auto-spli
84
84
  # (legacy spray) · --issues <id> (set parent) · --fallback
85
85
  # <adapter> · --out <file> · --dry-run (print the plan)
86
86
 
87
- # CI / test gate auto-fix
88
- openswarm fix # Run the checks (lint/typecheck/build/test from package.json),
89
- # fan a fix-worker out over the failures, re-run until green
87
+ # CI / test gate auto-fix (npm / Cargo / Python auto-detected)
88
+ openswarm fix # Run the checks (package.json scripts, or cargo check+test,
89
+ # or ruff/mypy/pytest), fan a fix-worker out over the
90
+ # failures, re-run until green
90
91
  openswarm fix --checks lint,test # only these checks · --concurrency <n> · --rounds <n> (default 3)
92
+ # any language: put {"checks": {"test": "pytest -x"}} in openswarm.json
91
93
 
92
94
  # Code Registry & BS Detector
93
95
  openswarm check --scan # Scan repo → register all entities
@@ -282,7 +284,7 @@ openswarm dash # open the web dashboard (:3847)
282
284
  - **Autonomous Pipeline** — Cron-driven heartbeat fetches Linear issues, runs Worker/Reviewer pair loops, and updates issue state automatically
283
285
  - **Worker/Reviewer Pairs** — Multi-iteration code generation with automated review, testing, and documentation stages
284
286
  - **Codebase Audit (`review --max`)** — fans reviewer subagents out over directory-shaped areas (auto-split to fill `--concurrency`), aggregates a deduped verdict into a markdown report, and synthesizes ≤10 cohesive Linear issues via a PM agent. `--fix` sends a worker per flagged area to apply the fixes in the working tree. Language-agnostic; codex usage-limit aware with automatic `claude` fallback
285
- - **CI / test gate auto-fix (`openswarm fix`)** — runs the project's objective checks (lint / typecheck / build / test), groups the failures by file into areas, fans a fix-worker out over each, then **re-runs the checks and repeats until green** (or the round budget). Deterministic convergence — unlike the review fix pass, it verifies its own work
287
+ - **CI / test gate auto-fix (`openswarm fix`)** — runs the project's objective checks (lint / typecheck / build / test), groups the failures by file into areas, fans a fix-worker out over each, then **re-runs the checks and repeats until green** (or the round budget). Deterministic convergence — unlike the review fix pass, it verifies its own work. Multi-language: auto-detects npm scripts, `Cargo.toml` (`cargo check`/`test`, clippy on request), and Python tooling (`ruff`/`mypy`/`pytest`, gated on the repo's config); any other toolchain via a `"checks"` map in `openswarm.json`
286
288
  - **Decision Engine** — Scope validation, rate limiting, priority-based task selection, and workflow mapping
287
289
  - **Cognitive Memory** — LanceDB vector store with Xenova/multilingual-e5-base embeddings for long-term recall across sessions
288
290
  - **Repo Knowledge Loop** — workers learn each repository over time: task outcomes (success patterns, review-rejection pitfalls) are stored per-repo and recalled into the next worker prompt
@@ -512,9 +514,9 @@ the CLI (fire-and-forget with a short timeout, and failures are silently ignored
512
514
  Full version history lives in **[CHANGELOG.md](CHANGELOG.md)** and the
513
515
  [GitHub Releases](https://github.com/unohee/OpenSwarm/releases) page.
514
516
 
515
- Latest — **v0.13.0**: CLI agent runs (`run` / `fix` / `review --max`) now grow the
516
- per-repo knowledge memory, not just the daemon (`--no-learn` opts out). See
517
- CHANGELOG.md for the rest.
517
+ Latest — **v0.15.0**: `openswarm fix` goes multi-language auto-detects npm,
518
+ Cargo (Rust), and Python (ruff/mypy/pytest) checks; any other toolchain via an
519
+ `openswarm.json` `"checks"` map. See CHANGELOG.md for the rest.
518
520
 
519
521
  ---
520
522
 
@@ -1 +1 @@
1
- {"version":3,"file":"longRunningMonitor.d.ts","sourceRoot":"","sources":["../../src/automation/longRunningMonitor.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,wBAAwB,EACxB,kBAAkB,EAGnB,MAAM,kBAAkB,CAAC;AAuP1B;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,wBAAwB,EAAE,GAAG,IAAI,CAcvE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,wBAAwB,GAAG,kBAAkB,CA0BpF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAOrD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAoExD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,kBAAkB,EAAE,CAExD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAErE"}
1
+ {"version":3,"file":"longRunningMonitor.d.ts","sourceRoot":"","sources":["../../src/automation/longRunningMonitor.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,wBAAwB,EACxB,kBAAkB,EAGnB,MAAM,kBAAkB,CAAC;AAwP1B;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,wBAAwB,EAAE,GAAG,IAAI,CAcvE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,wBAAwB,GAAG,kBAAkB,CA0BpF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAOrD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAoExD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,kBAAkB,EAAE,CAExD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAErE"}
@@ -38,6 +38,7 @@ function safeCompileRegex(pattern) {
38
38
  // Argv validation: reject null bytes, newlines, and other control chars.
39
39
  // Because we never spawn a shell, shell metacharacters are inert — only
40
40
  // control characters meaningfully change behavior (e.g. null byte truncation).
41
+ // eslint-disable-next-line no-control-regex
41
42
  const ARGV_SAFE = /^[^\x00-\x1F\x7F]+$/;
42
43
  // Program allowlist for monitor checks. Anything outside this list — or any
43
44
  // absolute path outside of the user's own directories — is rejected before
@@ -1 +1 @@
1
- {"version":3,"file":"longRunningMonitor.js","sourceRoot":"","sources":["../../src/automation/longRunningMonitor.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,wCAAwC;AACxC,8EAA8E;AAC9E,+CAA+C;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAOlC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,YAAY;AAEZ,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,yBAAyB,CAAC,CAAC;AAC3E,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,+CAA+C;AAChF,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,4EAA4E;AAC5E,0EAA0E;AAC1E,wEAAwE;AACxE,0DAA0D;AAC1D,MAAM,mBAAmB,GAAG,+BAA+B,CAAC;AAE5D;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,OAA2B;IACnD,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,IAAI,OAAO,CAAC,MAAM,GAAG,gBAAgB;QAAE,OAAO,IAAI,CAAC;IACnD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACpD,IAAI,CAAC;QACH,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,yEAAyE;AACzE,wEAAwE;AACxE,+EAA+E;AAC/E,MAAM,SAAS,GAAG,qBAAqB,CAAC;AAExC,4EAA4E;AAC5E,2EAA2E;AAC3E,2EAA2E;AAC3E,uEAAuE;AACvE,oBAAoB;AACpB,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IAC/B,MAAM;IACN,MAAM;IACN,KAAK;IACL,IAAI;IACJ,MAAM;IACN,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,MAAM;IACN,YAAY;IACZ,SAAS;IACT,QAAQ;IACR,QAAQ;CACT,CAAC,CAAC;AAEH,SAAS,qBAAqB,CAAC,OAAe;IAC5C,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACxE,oEAAoE;IACpE,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAC9E,MAAM,eAAe,GAAG;QACtB,iBAAiB;QACjB,kBAAkB;QAClB,OAAO;QACP,GAAG,IAAI,OAAO;QACd,GAAG,IAAI,cAAc;QACrB,GAAG,IAAI,WAAW;QAClB,GAAG,IAAI,uBAAuB;KAC/B,CAAC;IACF,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe;IACvC,yEAAyE;IACzE,2CAA2C;IAC3C,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,0EAA0E;IAC1E,6DAA6D;IAC7D,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACjE,4EAA4E;IAC5E,OAAO,qBAAqB,CAAC,OAAO,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,WAAW,CAAC,IAAa;IAChC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrG,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAW,CAAC,CAAC;AAC7C,CAAC;AAED,QAAQ;AAER,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA8B,CAAC;AASvD,SAAS,YAAY;IACnB,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;YAAE,OAAO;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAkB,CAAC;QAC9E,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS;gBAAE,SAAS;YAC7D,sEAAsE;YACtE,sEAAsE;YACtE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC;gBACjC,aAAa,EAAE,CAAC;gBAChB,SAAS;YACX,CAAC;YACD,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,sBAAsB,QAAQ,CAAC,IAAI,qBAAqB,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,qBAAqB,aAAa,mFAAmF,CAAC,CAAC;QACtI,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,8CAA8C,EAAE,GAAG,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CACjD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,CACpD,CAAC;QACF,MAAM,IAAI,GAAkB;YAC1B,QAAQ,EAAE,MAAM;YAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QACF,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,4CAA4C,EAAE,GAAG,CAAC,CAAC;IAClE,CAAC;AACH,CAAC;AAED,kBAAkB;AAElB,SAAS,YAAY,CAAC,IAAc;IAClC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QACD,MAAM,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;QACnC,yEAAyE;QACzE,gEAAgE;QAChE,uEAAuE;QACvE,sEAAsE;QACtE,UAAU;QACV,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,0BAA0B,EAAE,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,UAAU,CAAC;QAC3B,qEAAqE;QACrE,qEAAqE;QACrE,qDAAqD;QACrD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE;YACnC,OAAO,EAAE,gBAAgB;YACzB,SAAS,EAAE,IAAI,GAAG,IAAI;YACtB,KAAK,EAAE,KAAK;SACb,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YAC3B,OAAO,CAAC;gBACN,QAAQ,EAAE,KAAK,EAAE,IAAI,KAAK,SAAS;oBACjC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBACnD,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC;gBACtB,MAAM,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;gBAC7B,MAAM,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;aAC9B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,oBAAoB;AAEpB,SAAS,cAAc,CACrB,KAAsB,EACtB,QAAgB,EAChB,MAAc;IAEd,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,WAAW,GAAG,KAAK,CAAC,eAAe,IAAI,CAAC,CAAC;YAC/C,qEAAqE;YACrE,OAAO,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;QAC5D,CAAC;QAED,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACzD,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxC,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACzD,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxC,OAAO,WAAW,CAAC;YACrB,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,IAAI,GAAG,CAAC;YAC7C,kDAAkD;YAClD,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC5C,IAAI,QAAQ,KAAK,CAAC,IAAI,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACzE,OAAO,WAAW,CAAC;YACrB,CAAC;YACD,OAAO,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC/C,CAAC;IACH,CAAC;AACH,CAAC;AAED,2BAA2B;AAE3B,SAAS,qBAAqB,CAC5B,OAA2B,EAC3B,SAAuB;IAEvB,IAAI,SAAS,KAAK,OAAO,CAAC,KAAK;QAAE,OAAO;IAExC,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,IAAI,KAAK,SAAS,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAE1E,cAAc,CAAC;QACb,IAAI,EAAE,qBAAqB;QAC3B,IAAI,EAAE;YACJ,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,SAAS;YACf,EAAE,EAAE,OAAO,CAAC,KAAK;YACjB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB;KACF,CAAC,CAAC;IAEH,UAAU,EAAE,CAAC;AACf,CAAC;AAED,aAAa;AAEb;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAoC;IAC/D,oCAAoC;IACpC,YAAY,EAAE,CAAC;IAEf,oEAAoE;IACpE,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC1B,eAAe,CAAC,GAAG,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,8BAA8B,QAAQ,CAAC,IAAI,aAAa,CAAC,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAgC;IAC9D,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;IAC/F,CAAC;IAED,MAAM,OAAO,GAAuB;QAClC,GAAG,MAAM;QACT,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,CAAC;QACxC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,EAAE;QAC/C,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI;QAC7B,KAAK,EAAE,SAAS;QAChB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;QACxB,UAAU,EAAE,CAAC;QACb,uBAAuB,EAAE,CAAC;KAC3B,CAAC;IAEF,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAClC,UAAU,EAAE,CAAC;IAEb,OAAO,CAAC,GAAG,CAAC,yBAAyB,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;IACrE,cAAc,CAAC;QACb,IAAI,EAAE,qBAAqB;QAC3B,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE;KACvG,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAU;IAC1C,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACpC,IAAI,OAAO,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CACjD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,CACpD,CAAC;IAEF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAElC,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;QAC7B,OAAO,CAAC,uBAAuB,EAAE,CAAC;QAElC,8BAA8B;QAC9B,IAAI,OAAO,CAAC,uBAAuB,GAAG,OAAO,CAAC,aAAc,KAAK,CAAC,EAAE,CAAC;YACnE,SAAS;QACX,CAAC;QAED,gBAAgB;QAChB,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5E,IAAI,YAAY,GAAG,OAAO,CAAC,gBAAiB,EAAE,CAAC;YAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC;YAChC,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;YAC1B,qBAAqB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC1C,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACxD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC;YAEhC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACnC,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU;YAC7D,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC;YAEvC,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAEzF,qDAAqD;YACrD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC1D,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;YAC5B,CAAC;iBAAM,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC7D,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC;YAC3B,CAAC;YAED,qBAAqB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAE1C,cAAc,CAAC;gBACb,IAAI,EAAE,iBAAiB;gBACvB,IAAI,EAAE;oBACJ,EAAE,EAAE,OAAO,CAAC,EAAE;oBACd,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,MAAM,EAAE,OAAO,CAAC,UAAU;oBAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;iBAC/B;aACF,CAAC,CAAC;YAEH,YAAY,EAAE,CAAC;QACjB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,UAAU,EAAE,CAAC;IACf,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,EAAU;IACnC,OAAO,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"longRunningMonitor.js","sourceRoot":"","sources":["../../src/automation/longRunningMonitor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"checkHandler.d.ts","sourceRoot":"","sources":["../../src/cli/checkHandler.ts"],"names":[],"mappings":"AAwIA,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,IAAI,EAAE;IACJ,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,EAAE,CAAC,EAAE,OAAO,CAAC;CACd,GACA,OAAO,CAAC,IAAI,CAAC,CAyVf;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE;IACJ,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GACA,OAAO,CAAC,IAAI,CAAC,CAgHf"}
1
+ {"version":3,"file":"checkHandler.d.ts","sourceRoot":"","sources":["../../src/cli/checkHandler.ts"],"names":[],"mappings":"AA2HA,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,IAAI,EAAE;IACJ,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,EAAE,CAAC,EAAE,OAAO,CAAC;CACd,GACA,OAAO,CAAC,IAAI,CAAC,CAyVf;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE;IACJ,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GACA,OAAO,CAAC,IAAI,CAAC,CAgHf"}
@@ -7,6 +7,7 @@ import { readFileSync, existsSync } from 'node:fs';
7
7
  import { join } from 'node:path';
8
8
  import { getRegistryStore, closeRegistryStore } from '../registry/sqliteStore.js';
9
9
  import { scanRepository } from '../registry/entityScanner.js';
10
+ import { c, status } from '../support/colors.js';
10
11
  /** package.json name → Cargo.toml → go.mod → 폴더명 순으로 프로젝트 ID 추론 */
11
12
  function resolveProjectId(projectPath) {
12
13
  // 1. package.json의 name 필드
@@ -54,63 +55,50 @@ function resolveProjectId(projectPath) {
54
55
  // 4. 폴더명 폴백
55
56
  return projectPath.split('/').pop() ?? 'unknown';
56
57
  }
57
- // 색상 헬퍼 (ANSI)
58
- const c = {
59
- reset: '\x1b[0m',
60
- bold: '\x1b[1m',
61
- dim: '\x1b[2m',
62
- red: '\x1b[31m',
63
- green: '\x1b[32m',
64
- yellow: '\x1b[33m',
65
- blue: '\x1b[34m',
66
- magenta: '\x1b[35m',
67
- cyan: '\x1b[36m',
68
- gray: '\x1b[90m',
69
- };
70
- function statusBadge(status) {
71
- switch (status) {
72
- case 'active': return `${c.green}●${c.reset} active`;
73
- case 'deprecated': return `${c.red}✗${c.reset} deprecated`;
74
- case 'experimental': return `${c.yellow}◎${c.reset} experimental`;
75
- case 'planned': return `${c.blue}○${c.reset} planned`;
76
- case 'broken': return `${c.red}⚠${c.reset} broken`;
77
- default: return status;
58
+ function statusBadge(statusValue) {
59
+ switch (statusValue) {
60
+ case 'active': return `${c.green('')} active`;
61
+ case 'deprecated': return status.err('deprecated');
62
+ case 'experimental': return `${c.yellow('')} experimental`;
63
+ case 'planned': return `${c.blue('')} planned`;
64
+ case 'broken': return status.warn('broken');
65
+ default: return statusValue;
78
66
  }
79
67
  }
80
68
  function riskBadge(risk) {
81
69
  switch (risk) {
82
- case 'high': return `${c.red}HIGH${c.reset}`;
83
- case 'medium': return `${c.yellow}MED${c.reset}`;
84
- case 'low': return `${c.green}LOW${c.reset}`;
70
+ case 'high': return c.red('HIGH');
71
+ case 'medium': return c.yellow('MED');
72
+ case 'low': return c.green('LOW');
85
73
  default: return risk;
86
74
  }
87
75
  }
88
76
  function severityBadge(sev) {
89
77
  switch (sev) {
90
- case 'critical': return `${c.red}${c.bold}CRITICAL${c.reset}`;
91
- case 'error': return `${c.red}ERROR${c.reset}`;
92
- case 'warning': return `${c.yellow}WARNING${c.reset}`;
93
- case 'info': return `${c.blue}INFO${c.reset}`;
78
+ case 'critical': return c.red(c.bold('CRITICAL'));
79
+ case 'error': return c.red('ERROR');
80
+ case 'warning': return c.yellow('WARNING');
81
+ case 'info': return c.blue('INFO');
94
82
  default: return sev;
95
83
  }
96
84
  }
97
85
  function formatEntity(e, verbose = true) {
98
86
  const lines = [];
99
87
  const loc = e.lineStart ? `:${e.lineStart}${e.lineEnd ? `-${e.lineEnd}` : ''}` : '';
100
- const testIcon = e.hasTests ? `${c.green}✓${c.reset}` : `${c.red}✗${c.reset}`;
101
- lines.push(` ${c.bold}${e.kind}${c.reset} ${c.cyan}${e.name}${c.reset}${c.dim}${loc}${c.reset}` +
88
+ const testIcon = e.hasTests ? status.glyph('ok') : status.glyph('err');
89
+ lines.push(` ${c.bold(e.kind)} ${c.cyan(e.name)}${c.dim(loc)}` +
102
90
  ` ${statusBadge(e.status)} test:${testIcon} risk:${riskBadge(e.riskLevel)}`);
103
91
  if (verbose) {
104
92
  if (e.signature)
105
- lines.push(` ${c.dim}sig: ${e.signature}${c.reset}`);
93
+ lines.push(` ${c.dim(`sig: ${e.signature}`)}`);
106
94
  if (e.author)
107
- lines.push(` ${c.dim}author: ${e.author}${c.reset}`);
95
+ lines.push(` ${c.dim(`author: ${e.author}`)}`);
108
96
  if (e.description)
109
- lines.push(` ${c.dim}${e.description}${c.reset}`);
97
+ lines.push(` ${c.dim(e.description)}`);
110
98
  if (e.deprecatedReason)
111
- lines.push(` ${c.red}reason: ${e.deprecatedReason}${c.reset}`);
99
+ lines.push(` ${c.red(`reason: ${e.deprecatedReason}`)}`);
112
100
  if (e.tags.length > 0) {
113
- lines.push(` ${c.magenta}tags: ${e.tags.map(t => t.value ? `${t.tag}=${t.value}` : t.tag).join(', ')}${c.reset}`);
101
+ lines.push(` ${c.magenta(`tags: ${e.tags.map(t => t.value ? `${t.tag}=${t.value}` : t.tag).join(', ')}`)}`);
114
102
  }
115
103
  for (const w of e.warnings.filter(w => !w.resolved)) {
116
104
  lines.push(` ${severityBadge(w.severity)} [${w.category}] ${w.message}`);
@@ -130,39 +118,39 @@ export async function handleCheck(filePath, opts) {
130
118
  if (opts.scan) {
131
119
  const projectPath = process.cwd();
132
120
  const projectId = opts.project ?? resolveProjectId(projectPath);
133
- console.log(`\n${c.bold}Scanning repository...${c.reset}`);
134
- console.log(` ${c.dim}path: ${projectPath}${c.reset}`);
135
- console.log(` ${c.dim}project: ${projectId}${c.reset}\n`);
121
+ console.log(`\n${c.bold('Scanning repository...')}`);
122
+ console.log(` ${c.dim(`path: ${projectPath}`)}`);
123
+ console.log(` ${c.dim(`project: ${projectId}`)}\n`);
136
124
  const result = await scanRepository(projectPath, projectId, {
137
125
  verbose: opts.verbose,
138
126
  });
139
- console.log(`${c.bold}Scan Complete${c.reset}`);
127
+ console.log(c.bold('Scan Complete'));
140
128
  console.log(`${'─'.repeat(40)}`);
141
- console.log(` Files scanned: ${c.bold}${result.scanned}${c.reset}`);
142
- console.log(` Entities found: ${c.bold}${result.extracted}${c.reset}`);
143
- console.log(` New registered: ${c.green}+${result.registered}${c.reset}`);
144
- console.log(` Updated: ${c.yellow}~${result.updated}${c.reset}`);
145
- console.log(` Marked broken: ${result.removed > 0 ? c.red : c.dim}${result.removed}${c.reset}`);
146
- console.log(` Tests mapped: ${c.cyan}${result.testsMapped}${c.reset}`);
147
- console.log(` Duration: ${c.dim}${result.durationMs}ms${c.reset}`);
129
+ console.log(` Files scanned: ${c.bold(String(result.scanned))}`);
130
+ console.log(` Entities found: ${c.bold(String(result.extracted))}`);
131
+ console.log(` New registered: ${c.green(`+${result.registered}`)}`);
132
+ console.log(` Updated: ${c.yellow(`~${result.updated}`)}`);
133
+ console.log(` Marked broken: ${(result.removed > 0 ? c.red : c.dim)(String(result.removed))}`);
134
+ console.log(` Tests mapped: ${c.cyan(String(result.testsMapped))}`);
135
+ console.log(` Duration: ${c.dim(`${result.durationMs}ms`)}`);
148
136
  if (Object.keys(result.languageBreakdown).length > 0) {
149
- console.log(`\n ${c.dim}By language:${c.reset}`);
137
+ console.log(`\n ${c.dim('By language:')}`);
150
138
  for (const [lang, count] of Object.entries(result.languageBreakdown).sort((a, b) => b[1] - a[1])) {
151
139
  console.log(` ${lang.padEnd(12)} ${count} files`);
152
140
  }
153
141
  }
154
142
  if (result.errors.length > 0) {
155
- console.log(`\n ${c.red}Errors (${result.errors.length}):${c.reset}`);
143
+ console.log(`\n ${c.red(`Errors (${result.errors.length}):`)}`);
156
144
  for (const err of result.errors.slice(0, 10)) {
157
- console.log(` ${c.dim}${err}${c.reset}`);
145
+ console.log(` ${c.dim(err)}`);
158
146
  }
159
147
  if (result.errors.length > 10) {
160
- console.log(` ${c.dim}...and ${result.errors.length - 10} more${c.reset}`);
148
+ console.log(` ${c.dim(`...and ${result.errors.length - 10} more`)}`);
161
149
  }
162
150
  }
163
151
  // 스캔 후 통계 표시
164
152
  const stats = store.getStats(projectId);
165
- console.log(`\n${c.bold}Registry Status${c.reset}`);
153
+ console.log(`\n${c.bold('Registry Status')}`);
166
154
  console.log(` Total: ${stats.total} deprecated: ${stats.deprecated} untested: ${stats.untested} high-risk: ${stats.highRisk} warnings: ${stats.withWarnings}\n`);
167
155
  return;
168
156
  }
@@ -170,48 +158,48 @@ export async function handleCheck(filePath, opts) {
170
158
  if (opts.bs) {
171
159
  const { scanRepository: scanBs } = await import('../registry/bsDetector.js');
172
160
  const projectPath = process.cwd();
173
- console.log(`\n${c.bold}BS Detector${c.reset} — scanning for bad code patterns...`);
174
- console.log(` ${c.dim}path: ${projectPath}${c.reset}\n`);
161
+ console.log(`\n${c.bold('BS Detector')} — scanning for bad code patterns...`);
162
+ console.log(` ${c.dim(`path: ${projectPath}`)}\n`);
175
163
  const result = await scanBs(projectPath, { verbose: opts.verbose });
176
164
  // 결과 출력
177
165
  const statusColor = result.critical > 0 ? c.red : result.warning > 0 ? c.yellow : c.green;
178
166
  const statusText = result.critical > 0 ? 'FAIL' : result.warning > 0 ? 'WARN' : 'CLEAN';
179
- console.log(`${c.bold}BS Scan Result${c.reset}`);
167
+ console.log(c.bold('BS Scan Result'));
180
168
  console.log(`${'─'.repeat(50)}`);
181
- console.log(` Files scanned: ${c.bold}${result.filesScanned}${c.reset}`);
182
- console.log(` BS Score: ${statusColor}${c.bold}${result.bsScore.toFixed(1)}${c.reset} / 5.0`);
183
- console.log(` Status: ${statusColor}${c.bold}${statusText}${c.reset}`);
184
- console.log(` CRITICAL: ${result.critical > 0 ? c.red : c.green}${result.critical}${c.reset}`);
185
- console.log(` WARNING: ${result.warning > 0 ? c.yellow : c.green}${result.warning}${c.reset}`);
186
- console.log(` MINOR: ${result.minor > 0 ? c.dim : c.green}${result.minor}${c.reset}`);
169
+ console.log(` Files scanned: ${c.bold(String(result.filesScanned))}`);
170
+ console.log(` BS Score: ${statusColor(c.bold(result.bsScore.toFixed(1)))} / 5.0`);
171
+ console.log(` Status: ${statusColor(c.bold(statusText))}`);
172
+ console.log(` CRITICAL: ${(result.critical > 0 ? c.red : c.green)(String(result.critical))}`);
173
+ console.log(` WARNING: ${(result.warning > 0 ? c.yellow : c.green)(String(result.warning))}`);
174
+ console.log(` MINOR: ${(result.minor > 0 ? c.dim : c.green)(String(result.minor))}`);
187
175
  if (result.issues.length > 0) {
188
176
  // CRITICAL 먼저
189
177
  const criticals = result.issues.filter(i => i.severity === 'critical');
190
178
  if (criticals.length > 0) {
191
- console.log(`\n ${c.red}${c.bold}CRITICAL (즉시 수정 필요)${c.reset}`);
179
+ console.log(`\n ${c.red(c.bold('CRITICAL (즉시 수정 필요)'))}`);
192
180
  for (const issue of criticals) {
193
- console.log(` ${c.red}${issue.filePath}:${issue.line}${c.reset} — ${issue.message}`);
194
- console.log(` ${c.dim}${issue.matchedText}${c.reset}`);
181
+ console.log(` ${c.red(`${issue.filePath}:${issue.line}`)} — ${issue.message}`);
182
+ console.log(` ${c.dim(issue.matchedText)}`);
195
183
  }
196
184
  }
197
185
  const warnings = result.issues.filter(i => i.severity === 'warning');
198
186
  if (warnings.length > 0) {
199
- console.log(`\n ${c.yellow}WARNING (권장 수정)${c.reset}`);
187
+ console.log(`\n ${c.yellow('WARNING (권장 수정)')}`);
200
188
  for (const issue of warnings.slice(0, 30)) {
201
- console.log(` ${c.yellow}${issue.filePath}:${issue.line}${c.reset} — ${issue.message}`);
189
+ console.log(` ${c.yellow(`${issue.filePath}:${issue.line}`)} — ${issue.message}`);
202
190
  }
203
191
  if (warnings.length > 30) {
204
- console.log(` ${c.dim}...and ${warnings.length - 30} more${c.reset}`);
192
+ console.log(` ${c.dim(`...and ${warnings.length - 30} more`)}`);
205
193
  }
206
194
  }
207
195
  const minors = result.issues.filter(i => i.severity === 'minor');
208
196
  if (minors.length > 0) {
209
- console.log(`\n ${c.dim}MINOR (${minors.length}건)${c.reset}`);
197
+ console.log(`\n ${c.dim(`MINOR (${minors.length}건)`)}`);
210
198
  for (const issue of minors.slice(0, 10)) {
211
- console.log(` ${c.dim}${issue.filePath}:${issue.line} — ${issue.message}${c.reset}`);
199
+ console.log(` ${c.dim(`${issue.filePath}:${issue.line} — ${issue.message}`)}`);
212
200
  }
213
201
  if (minors.length > 10) {
214
- console.log(` ${c.dim}...and ${minors.length - 10} more${c.reset}`);
202
+ console.log(` ${c.dim(`...and ${minors.length - 10} more`)}`);
215
203
  }
216
204
  }
217
205
  }
@@ -251,28 +239,28 @@ export async function handleCheck(filePath, opts) {
251
239
  const sortedDirs = [...tree.keys()].sort();
252
240
  const totalFiles = [...tree.values()].reduce((s, d) => s + d.size, 0);
253
241
  const totalEntities = entities.filter(e => !scopePath || e.filePath.startsWith(scopePath)).length;
254
- console.log(`\n${c.bold}Code Tree${c.reset}${scopePath ? ` (${scopePath})` : ''} — ${totalFiles} files, ${totalEntities} entities\n`);
242
+ console.log(`\n${c.bold('Code Tree')}${scopePath ? ` (${scopePath})` : ''} — ${totalFiles} files, ${totalEntities} entities\n`);
255
243
  for (const dirPath of sortedDirs) {
256
244
  const files = tree.get(dirPath);
257
245
  const dirTotal = [...files.values()].reduce((s, f) => s + f.total, 0);
258
246
  const dirUntested = [...files.values()].reduce((s, f) => s + f.untested, 0);
259
247
  const dirHighRisk = [...files.values()].reduce((s, f) => s + f.highRisk, 0);
260
248
  // Directory header
261
- const riskFlag = dirHighRisk > 0 ? ` ${c.red}${dirHighRisk} high-risk${c.reset}` : '';
262
- console.log(`${c.bold}${dirPath}/${c.reset} ${c.dim}(${dirTotal} entities, ${dirUntested} untested${riskFlag})${c.reset}`);
249
+ const riskFlag = dirHighRisk > 0 ? ` ${c.red(`${dirHighRisk} high-risk`)}` : '';
250
+ console.log(`${c.bold(`${dirPath}/`)} ${c.dim(`(${dirTotal} entities, ${dirUntested} untested`)}${riskFlag}${c.dim(')')}`);
263
251
  // Files in directory
264
252
  const sortedFiles = [...files.entries()].sort((a, b) => b[1].total - a[1].total);
265
253
  for (const [fileName, info] of sortedFiles) {
266
254
  const kindStr = [...info.kinds.entries()].map(([k, n]) => `${n} ${k}`).join(', ');
267
255
  const flags = [];
268
256
  if (info.highRisk > 0)
269
- flags.push(`${c.red}${info.highRisk} high-risk${c.reset}`);
257
+ flags.push(c.red(`${info.highRisk} high-risk`));
270
258
  if (info.deprecated > 0)
271
- flags.push(`${c.red}${info.deprecated} deprecated${c.reset}`);
259
+ flags.push(c.red(`${info.deprecated} deprecated`));
272
260
  const flagStr = flags.length ? ' ' + flags.join(' ') : '';
273
261
  const testPct = info.total > 0 ? Math.round(((info.total - info.untested) / info.total) * 100) : 0;
274
262
  const testColor = testPct === 100 ? c.green : testPct > 50 ? c.yellow : c.red;
275
- console.log(` ${c.cyan}${fileName}${c.reset} ${c.dim}${kindStr}${c.reset} ${testColor}${testPct}% tested${c.reset}${flagStr}`);
263
+ console.log(` ${c.cyan(fileName)} ${c.dim(kindStr)} ${testColor(`${testPct}% tested`)}${flagStr}`);
276
264
  }
277
265
  }
278
266
  console.log();
@@ -316,23 +304,23 @@ export async function handleCheck(filePath, opts) {
316
304
  // --stats: full statistics
317
305
  if (opts.stats) {
318
306
  const stats = store.getStats(opts.project);
319
- console.log(`\n${c.bold}Registry Stats${c.reset}`);
307
+ console.log(`\n${c.bold('Registry Stats')}`);
320
308
  console.log(`${'─'.repeat(40)}`);
321
- console.log(` Total entities: ${c.bold}${stats.total}${c.reset}`);
322
- console.log(` Deprecated: ${stats.deprecated > 0 ? c.red : c.green}${stats.deprecated}${c.reset}`);
323
- console.log(` Untested: ${stats.untested > 0 ? c.yellow : c.green}${stats.untested}${c.reset}`);
324
- console.log(` High risk: ${stats.highRisk > 0 ? c.red : c.green}${stats.highRisk}${c.reset}`);
325
- console.log(` With warnings: ${stats.withWarnings > 0 ? c.yellow : c.green}${stats.withWarnings}${c.reset}`);
309
+ console.log(` Total entities: ${c.bold(String(stats.total))}`);
310
+ console.log(` Deprecated: ${(stats.deprecated > 0 ? c.red : c.green)(String(stats.deprecated))}`);
311
+ console.log(` Untested: ${(stats.untested > 0 ? c.yellow : c.green)(String(stats.untested))}`);
312
+ console.log(` High risk: ${(stats.highRisk > 0 ? c.red : c.green)(String(stats.highRisk))}`);
313
+ console.log(` With warnings: ${(stats.withWarnings > 0 ? c.yellow : c.green)(String(stats.withWarnings))}`);
326
314
  if (stats.byKind.length > 0) {
327
- console.log(`\n ${c.dim}By kind:${c.reset}`);
315
+ console.log(`\n ${c.dim('By kind:')}`);
328
316
  for (const { kind, count } of stats.byKind) {
329
317
  console.log(` ${kind.padEnd(12)} ${count}`);
330
318
  }
331
319
  }
332
320
  if (stats.byStatus.length > 0) {
333
- console.log(`\n ${c.dim}By status:${c.reset}`);
334
- for (const { status, count } of stats.byStatus) {
335
- console.log(` ${status.padEnd(14)} ${count}`);
321
+ console.log(`\n ${c.dim('By status:')}`);
322
+ for (const { status: statusName, count } of stats.byStatus) {
323
+ console.log(` ${statusName.padEnd(14)} ${count}`);
336
324
  }
337
325
  }
338
326
  console.log();
@@ -341,9 +329,9 @@ export async function handleCheck(filePath, opts) {
341
329
  // --deprecated
342
330
  if (opts.deprecated) {
343
331
  const entities = store.deprecatedEntities(opts.project);
344
- console.log(`\n${c.bold}Deprecated Entities${c.reset} (${entities.length})\n`);
332
+ console.log(`\n${c.bold('Deprecated Entities')} (${entities.length})\n`);
345
333
  if (entities.length === 0) {
346
- console.log(` ${c.green}None${c.reset}\n`);
334
+ console.log(` ${c.green('None')}\n`);
347
335
  }
348
336
  else {
349
337
  for (const e of entities)
@@ -355,9 +343,9 @@ export async function handleCheck(filePath, opts) {
355
343
  // --untested
356
344
  if (opts.untested) {
357
345
  const entities = store.untestedEntities(opts.project);
358
- console.log(`\n${c.bold}Untested Active Entities${c.reset} (${entities.length})\n`);
346
+ console.log(`\n${c.bold('Untested Active Entities')} (${entities.length})\n`);
359
347
  if (entities.length === 0) {
360
- console.log(` ${c.green}All tested${c.reset}\n`);
348
+ console.log(` ${c.green('All tested')}\n`);
361
349
  }
362
350
  else {
363
351
  for (const e of entities)
@@ -369,9 +357,9 @@ export async function handleCheck(filePath, opts) {
369
357
  // --high-risk
370
358
  if (opts.highRisk) {
371
359
  const entities = store.highRiskEntities(opts.project);
372
- console.log(`\n${c.bold}High Risk Entities${c.reset} (${entities.length})\n`);
360
+ console.log(`\n${c.bold('High Risk Entities')} (${entities.length})\n`);
373
361
  if (entities.length === 0) {
374
- console.log(` ${c.green}None${c.reset}\n`);
362
+ console.log(` ${c.green('None')}\n`);
375
363
  }
376
364
  else {
377
365
  for (const e of entities)
@@ -383,9 +371,9 @@ export async function handleCheck(filePath, opts) {
383
371
  // --tag
384
372
  if (opts.tag) {
385
373
  const entities = store.entitiesByTag(opts.tag);
386
- console.log(`\n${c.bold}Entities tagged "${opts.tag}"${c.reset} (${entities.length})\n`);
374
+ console.log(`\n${c.bold(`Entities tagged "${opts.tag}"`)} (${entities.length})\n`);
387
375
  if (entities.length === 0) {
388
- console.log(` ${c.dim}No entities with tag "${opts.tag}"${c.reset}\n`);
376
+ console.log(` ${c.dim(`No entities with tag "${opts.tag}"`)}\n`);
389
377
  }
390
378
  else {
391
379
  for (const e of entities)
@@ -397,9 +385,9 @@ export async function handleCheck(filePath, opts) {
397
385
  // --search
398
386
  if (opts.search) {
399
387
  const entities = store.searchEntities(opts.search);
400
- console.log(`\n${c.bold}Search: "${opts.search}"${c.reset} (${entities.length} results)\n`);
388
+ console.log(`\n${c.bold(`Search: "${opts.search}"`)} (${entities.length} results)\n`);
401
389
  if (entities.length === 0) {
402
- console.log(` ${c.dim}No matches${c.reset}\n`);
390
+ console.log(` ${c.dim('No matches')}\n`);
403
391
  }
404
392
  else {
405
393
  for (const e of entities)
@@ -411,12 +399,12 @@ export async function handleCheck(filePath, opts) {
411
399
  // 파일 경로 지정: fileBrief
412
400
  if (filePath) {
413
401
  const brief = store.fileBrief(filePath);
414
- console.log(`\n${c.bold}File Brief: ${filePath}${c.reset}`);
402
+ console.log(`\n${c.bold(`File Brief: ${filePath}`)}`);
415
403
  console.log(`${'─'.repeat(40)}`);
416
- console.log(` ${c.dim}${brief.summary}${c.reset}\n`);
404
+ console.log(` ${c.dim(brief.summary)}\n`);
417
405
  if (brief.entities.length === 0) {
418
- console.log(` ${c.dim}No registered entities for this file.${c.reset}`);
419
- console.log(` ${c.dim}Use \`registerEntity\` mutation to add entries.${c.reset}\n`);
406
+ console.log(` ${c.dim('No registered entities for this file.')}`);
407
+ console.log(` ${c.dim('Use `registerEntity` mutation to add entries.')}\n`);
420
408
  }
421
409
  else {
422
410
  for (const e of brief.entities)
@@ -428,19 +416,19 @@ export async function handleCheck(filePath, opts) {
428
416
  // 인자 없이 호출 시: 간단 통계 + 도움말
429
417
  const stats = store.getStats();
430
418
  if (stats.total === 0) {
431
- console.log(`\n${c.bold}Code Registry${c.reset}: empty`);
432
- console.log(` ${c.dim}Register entities via GraphQL at :3847/graphql${c.reset}`);
433
- console.log(` ${c.dim}or use: openswarm check --help${c.reset}\n`);
419
+ console.log(`\n${c.bold('Code Registry')}: empty`);
420
+ console.log(` ${c.dim('Register entities via GraphQL at :3847/graphql')}`);
421
+ console.log(` ${c.dim('or use: openswarm check --help')}\n`);
434
422
  }
435
423
  else {
436
- console.log(`\n${c.bold}Code Registry${c.reset}: ${stats.total} entities`);
424
+ console.log(`\n${c.bold('Code Registry')}: ${stats.total} entities`);
437
425
  console.log(` ${stats.deprecated} deprecated, ${stats.untested} untested, ${stats.highRisk} high-risk, ${stats.withWarnings} with warnings`);
438
- console.log(`\n ${c.dim}Usage:${c.reset}`);
439
- console.log(` ${c.dim} openswarm check <file> ${c.reset}File brief`);
440
- console.log(` ${c.dim} openswarm check --stats ${c.reset}Full statistics`);
441
- console.log(` ${c.dim} openswarm check --deprecated ${c.reset}Deprecated list`);
442
- console.log(` ${c.dim} openswarm check --untested ${c.reset}Untested list`);
443
- console.log(` ${c.dim} openswarm check --search <q> ${c.reset}Full-text search\n`);
426
+ console.log(`\n ${c.dim('Usage:')}`);
427
+ console.log(` ${c.dim(' openswarm check <file> ')}File brief`);
428
+ console.log(` ${c.dim(' openswarm check --stats ')}Full statistics`);
429
+ console.log(` ${c.dim(' openswarm check --deprecated ')}Deprecated list`);
430
+ console.log(` ${c.dim(' openswarm check --untested ')}Untested list`);
431
+ console.log(` ${c.dim(' openswarm check --search <q> ')}Full-text search\n`);
444
432
  }
445
433
  }
446
434
  finally {
@@ -459,36 +447,36 @@ export async function handleAnnotate(qualifiedName, opts) {
459
447
  // 부분 매칭 시도: name만으로 검색
460
448
  const results = store.searchEntities(qualifiedName, 5);
461
449
  if (results.length === 0) {
462
- console.error(`${c.red}Entity not found: "${qualifiedName}"${c.reset}`);
463
- console.error(`${c.dim}Use qualified name (file::name) or search with: openswarm check --search <query>${c.reset}`);
450
+ console.error(c.red(`Entity not found: "${qualifiedName}"`));
451
+ console.error(c.dim('Use qualified name (file::name) or search with: openswarm check --search <query>'));
464
452
  process.exit(1);
465
453
  }
466
454
  if (results.length === 1) {
467
455
  entity = results[0];
468
456
  }
469
457
  else {
470
- console.log(`${c.yellow}Multiple matches for "${qualifiedName}":${c.reset}\n`);
458
+ console.log(`${c.yellow(`Multiple matches for "${qualifiedName}":`)}\n`);
471
459
  for (const e of results) {
472
- console.log(` ${c.cyan}${e.qualifiedName}${c.reset} ${e.kind} ${statusBadge(e.status)}`);
460
+ console.log(` ${c.cyan(e.qualifiedName)} ${e.kind} ${statusBadge(e.status)}`);
473
461
  }
474
- console.log(`\n${c.dim}Use the full qualified name to annotate a specific entity.${c.reset}`);
462
+ console.log(`\n${c.dim('Use the full qualified name to annotate a specific entity.')}`);
475
463
  return;
476
464
  }
477
465
  }
478
- console.log(`\n${c.bold}Annotating:${c.reset} ${c.cyan}${entity.qualifiedName}${c.reset}\n`);
466
+ console.log(`\n${c.bold('Annotating:')} ${c.cyan(entity.qualifiedName)}\n`);
479
467
  let changed = false;
480
468
  // --deprecate
481
469
  if (opts.deprecate !== undefined) {
482
470
  const reason = typeof opts.deprecate === 'string' ? opts.deprecate : undefined;
483
471
  store.deprecateEntity(entity.id, reason);
484
- console.log(` ${c.red}✗${c.reset} Deprecated${reason ? `: ${reason}` : ''}`);
472
+ console.log(` ${status.err(`Deprecated${reason ? `: ${reason}` : ''}`)}`);
485
473
  changed = true;
486
474
  }
487
475
  // --status
488
476
  if (opts.status) {
489
477
  const validStatuses = ['active', 'deprecated', 'experimental', 'planned', 'broken'];
490
478
  if (!validStatuses.includes(opts.status)) {
491
- console.error(` ${c.red}Invalid status: ${opts.status}. Valid: ${validStatuses.join(', ')}${c.reset}`);
479
+ console.error(` ${c.red(`Invalid status: ${opts.status}. Valid: ${validStatuses.join(', ')}`)}`);
492
480
  }
493
481
  else {
494
482
  store.changeEntityStatus(entity.id, opts.status);
@@ -500,26 +488,26 @@ export async function handleAnnotate(qualifiedName, opts) {
500
488
  if (opts.tag) {
501
489
  const [tagKey, tagValue] = opts.tag.split('=', 2);
502
490
  store.addTag(entity.id, tagKey, tagValue);
503
- console.log(` ${c.magenta}+${c.reset} Tag: ${tagKey}${tagValue ? `=${tagValue}` : ''}`);
491
+ console.log(` ${c.magenta('+')} Tag: ${tagKey}${tagValue ? `=${tagValue}` : ''}`);
504
492
  changed = true;
505
493
  }
506
494
  // --untag
507
495
  if (opts.untag) {
508
496
  store.removeTag(entity.id, opts.untag);
509
- console.log(` ${c.dim}-${c.reset} Removed tag: ${opts.untag}`);
497
+ console.log(` ${c.dim('-')} Removed tag: ${opts.untag}`);
510
498
  changed = true;
511
499
  }
512
500
  // --note
513
501
  if (opts.note) {
514
502
  store.addEvent(entity.id, 'note_added', { content: opts.note, actor: 'cli' });
515
- console.log(` ${c.blue}📝${c.reset} Note added`);
503
+ console.log(` ${c.blue('📝')} Note added`);
516
504
  changed = true;
517
505
  }
518
506
  // --risk
519
507
  if (opts.risk) {
520
508
  const validRisks = ['low', 'medium', 'high'];
521
509
  if (!validRisks.includes(opts.risk)) {
522
- console.error(` ${c.red}Invalid risk: ${opts.risk}. Valid: ${validRisks.join(', ')}${c.reset}`);
510
+ console.error(` ${c.red(`Invalid risk: ${opts.risk}. Valid: ${validRisks.join(', ')}`)}`);
523
511
  }
524
512
  else {
525
513
  store.updateEntity(entity.id, { riskLevel: opts.risk }, 'cli');
@@ -531,8 +519,8 @@ export async function handleAnnotate(qualifiedName, opts) {
531
519
  if (opts.warn) {
532
520
  const warnMatch = opts.warn.match(/^(info|warning|error|critical)\/(security|performance|correctness|style):\s*(.+)/);
533
521
  if (!warnMatch) {
534
- console.error(` ${c.red}Invalid warning format. Use: severity/category: message${c.reset}`);
535
- console.error(` ${c.dim}Example: --warn "error/security: SQL injection risk"${c.reset}`);
522
+ console.error(` ${c.red('Invalid warning format. Use: severity/category: message')}`);
523
+ console.error(` ${c.dim('Example: --warn "error/security: SQL injection risk"')}`);
536
524
  }
537
525
  else {
538
526
  store.addWarning(entity.id, warnMatch[1], warnMatch[2], warnMatch[3]);
@@ -541,13 +529,13 @@ export async function handleAnnotate(qualifiedName, opts) {
541
529
  }
542
530
  }
543
531
  if (!changed) {
544
- console.log(` ${c.dim}No changes. Use --deprecate, --status, --tag, --note, --risk, or --warn${c.reset}`);
532
+ console.log(` ${c.dim('No changes. Use --deprecate, --status, --tag, --note, --risk, or --warn')}`);
545
533
  }
546
534
  // 변경 후 엔티티 상태 표시
547
535
  if (changed) {
548
536
  const updated = store.getEntity(entity.id);
549
537
  if (updated) {
550
- console.log(`\n${c.dim}Updated state:${c.reset}`);
538
+ console.log(`\n${c.dim('Updated state:')}`);
551
539
  console.log(formatEntity(updated));
552
540
  }
553
541
  }