@unerr-ai/unerr 0.2.0 → 0.2.2

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 (363) hide show
  1. package/README.md +6 -0
  2. package/dist/cli.js +37236 -35793
  3. package/package.json +6 -1
  4. package/dist/behaviors/agent-llm-bridge.js +0 -166
  5. package/dist/behaviors/architecture-guard.js +0 -256
  6. package/dist/behaviors/auto-doc.js +0 -247
  7. package/dist/behaviors/cascade-guard.js +0 -289
  8. package/dist/behaviors/change-narrative.js +0 -270
  9. package/dist/behaviors/convention-drift.js +0 -290
  10. package/dist/behaviors/framework.js +0 -235
  11. package/dist/behaviors/guard-formatter.js +0 -44
  12. package/dist/behaviors/incomplete-work.js +0 -270
  13. package/dist/behaviors/loop-breaker.js +0 -300
  14. package/dist/behaviors/session-continuity.js +0 -208
  15. package/dist/commands/branches.js +0 -97
  16. package/dist/commands/check-commit.js +0 -225
  17. package/dist/commands/compress-output.js +0 -64
  18. package/dist/commands/config-verify.js +0 -243
  19. package/dist/commands/daemon.js +0 -905
  20. package/dist/commands/dashboard.js +0 -52
  21. package/dist/commands/debug.js +0 -200
  22. package/dist/commands/enrich.js +0 -184
  23. package/dist/commands/exec.js +0 -233
  24. package/dist/commands/gain.js +0 -156
  25. package/dist/commands/hook.js +0 -88
  26. package/dist/commands/index.js +0 -88
  27. package/dist/commands/init.js +0 -74
  28. package/dist/commands/install.js +0 -505
  29. package/dist/commands/learn.js +0 -116
  30. package/dist/commands/manifest.js +0 -193
  31. package/dist/commands/rewind.js +0 -103
  32. package/dist/commands/serve.js +0 -19
  33. package/dist/commands/setup-wizard.js +0 -414
  34. package/dist/commands/skills.js +0 -64
  35. package/dist/commands/stats.js +0 -20
  36. package/dist/commands/status.js +0 -654
  37. package/dist/commands/timeline.js +0 -139
  38. package/dist/commands/uninstall.js +0 -230
  39. package/dist/components/App.js +0 -109
  40. package/dist/components/Banner.js +0 -12
  41. package/dist/components/ConfirmPrompt.js +0 -25
  42. package/dist/components/DriftSummary.js +0 -23
  43. package/dist/components/GradeBadge.js +0 -15
  44. package/dist/components/HealthCard.js +0 -18
  45. package/dist/components/InkSpinner.js +0 -22
  46. package/dist/components/InputBox.js +0 -17
  47. package/dist/components/KeyValue.js +0 -13
  48. package/dist/components/MessageList.js +0 -14
  49. package/dist/components/ProgressBar.js +0 -26
  50. package/dist/components/Section.js +0 -16
  51. package/dist/components/SessionSummaryCard.js +0 -73
  52. package/dist/components/StartupDisplay.js +0 -24
  53. package/dist/components/StatusDashboard.js +0 -57
  54. package/dist/components/StatusLine.js +0 -8
  55. package/dist/components/StepLine.js +0 -22
  56. package/dist/components/Theme.js +0 -20
  57. package/dist/components/ToolProgress.js +0 -8
  58. package/dist/components/ViolationList.js +0 -21
  59. package/dist/components/render.js +0 -13
  60. package/dist/config/agent-registry.js +0 -237
  61. package/dist/config/claude-settings-hooks.js +0 -304
  62. package/dist/config/hook-installer.js +0 -65
  63. package/dist/config/instruction-writer.js +0 -388
  64. package/dist/config/mcp-config-writer.js +0 -266
  65. package/dist/config/settings.js +0 -174
  66. package/dist/config/tool-detector.js +0 -42
  67. package/dist/config/value-surfacing.js +0 -119
  68. package/dist/core/context-assembly.js +0 -108
  69. package/dist/core/conversation.js +0 -33
  70. package/dist/core/local-chat-provider.js +0 -475
  71. package/dist/core/provider-factory.js +0 -55
  72. package/dist/core/providers.js +0 -90
  73. package/dist/core/query-engine.js +0 -174
  74. package/dist/daemon/api.js +0 -312
  75. package/dist/daemon/autostart.js +0 -119
  76. package/dist/daemon/bootstrap.js +0 -39
  77. package/dist/daemon/client.js +0 -164
  78. package/dist/daemon/detect-ci.js +0 -81
  79. package/dist/daemon/platform-linux.js +0 -146
  80. package/dist/daemon/platform-macos.js +0 -134
  81. package/dist/daemon/platform-windows.js +0 -116
  82. package/dist/daemon/process-manager.js +0 -299
  83. package/dist/daemon/protocol.js +0 -23
  84. package/dist/daemon/registry.js +0 -270
  85. package/dist/daemon/settings-schema.js +0 -72
  86. package/dist/daemon/system-health.js +0 -134
  87. package/dist/daemon/version-checker.js +0 -262
  88. package/dist/daemon/warm-start.js +0 -223
  89. package/dist/entrypoints/cli.js +0 -1043
  90. package/dist/entrypoints/daemon.js +0 -380
  91. package/dist/entrypoints/repl.js +0 -147
  92. package/dist/hooks/adapters/claude-code.js +0 -90
  93. package/dist/hooks/adapters/cline.js +0 -100
  94. package/dist/hooks/adapters/cursor.js +0 -98
  95. package/dist/hooks/hook-dedup.js +0 -79
  96. package/dist/hooks/hook-runner.js +0 -113
  97. package/dist/hooks/navigation-hooks.js +0 -175
  98. package/dist/hooks/prompt-hooks.js +0 -63
  99. package/dist/hooks/shell-hooks.js +0 -47
  100. package/dist/ignore.js +0 -111
  101. package/dist/intelligence/approach-suggester.js +0 -61
  102. package/dist/intelligence/ast-extractor.js +0 -2615
  103. package/dist/intelligence/ast-worker.js +0 -34
  104. package/dist/intelligence/background-indexer.js +0 -121
  105. package/dist/intelligence/blast-radius.js +0 -200
  106. package/dist/intelligence/community-detection.js +0 -691
  107. package/dist/intelligence/community-detector.js +0 -184
  108. package/dist/intelligence/computation-scheduler.js +0 -75
  109. package/dist/intelligence/confidence-propagation.js +0 -47
  110. package/dist/intelligence/convention-detector.js +0 -242
  111. package/dist/intelligence/convention-learner.js +0 -205
  112. package/dist/intelligence/convention-matcher.js +0 -205
  113. package/dist/intelligence/cozo-schema.js +0 -376
  114. package/dist/intelligence/decision-point-detector.js +0 -90
  115. package/dist/intelligence/deep-dive-tools.js +0 -586
  116. package/dist/intelligence/durability-scorer.js +0 -84
  117. package/dist/intelligence/exploration-cost.js +0 -204
  118. package/dist/intelligence/exploration-pattern-tracker.js +0 -61
  119. package/dist/intelligence/fact-generator.js +0 -322
  120. package/dist/intelligence/facts-schema.js +0 -90
  121. package/dist/intelligence/file-intelligence.js +0 -59
  122. package/dist/intelligence/graph-holder.js +0 -220
  123. package/dist/intelligence/graph-temporal-joiner.js +0 -238
  124. package/dist/intelligence/health-grade.js +0 -423
  125. package/dist/intelligence/health-grader.js +0 -200
  126. package/dist/intelligence/health-map-data.js +0 -259
  127. package/dist/intelligence/import-symbols.js +0 -136
  128. package/dist/intelligence/incremental-indexer.js +0 -658
  129. package/dist/intelligence/indexer/centrality.js +0 -62
  130. package/dist/intelligence/indexer/cfg-context.js +0 -95
  131. package/dist/intelligence/indexer/confidence.js +0 -34
  132. package/dist/intelligence/indexer/cross-file-resolver.js +0 -104
  133. package/dist/intelligence/indexer/edge-repair.js +0 -89
  134. package/dist/intelligence/indexer/entity-key.js +0 -17
  135. package/dist/intelligence/indexer/export-map.js +0 -132
  136. package/dist/intelligence/indexer/git-cochange.js +0 -128
  137. package/dist/intelligence/indexer/graph-patch.js +0 -147
  138. package/dist/intelligence/indexer/incremental.js +0 -78
  139. package/dist/intelligence/indexer/ingest.js +0 -160
  140. package/dist/intelligence/indexer/language-detect.js +0 -226
  141. package/dist/intelligence/indexer/metadata.js +0 -63
  142. package/dist/intelligence/indexer/mutation-tracker.js +0 -79
  143. package/dist/intelligence/indexer/orchestrator.js +0 -155
  144. package/dist/intelligence/indexer/plugin-interface.js +0 -31
  145. package/dist/intelligence/indexer/plugins/csharp.js +0 -440
  146. package/dist/intelligence/indexer/plugins/go.js +0 -335
  147. package/dist/intelligence/indexer/plugins/java.js +0 -370
  148. package/dist/intelligence/indexer/plugins/python.js +0 -358
  149. package/dist/intelligence/indexer/plugins/regex-fallback.js +0 -82
  150. package/dist/intelligence/indexer/plugins/ruby.js +0 -290
  151. package/dist/intelligence/indexer/plugins/rust.js +0 -484
  152. package/dist/intelligence/indexer/plugins/tier2-generic.js +0 -310
  153. package/dist/intelligence/indexer/plugins/typescript.js +0 -456
  154. package/dist/intelligence/indexer/resource-monitor.js +0 -93
  155. package/dist/intelligence/indexer/scip/decoder.js +0 -253
  156. package/dist/intelligence/indexer/scip/detector.js +0 -232
  157. package/dist/intelligence/indexer/scip/downloader.js +0 -427
  158. package/dist/intelligence/indexer/scip/fallback.js +0 -34
  159. package/dist/intelligence/indexer/scip/merger.js +0 -109
  160. package/dist/intelligence/indexer/scip/orchestrator.js +0 -433
  161. package/dist/intelligence/indexer/scip/runner.js +0 -98
  162. package/dist/intelligence/indexer/snapshot.js +0 -66
  163. package/dist/intelligence/indexer/test-detector.js +0 -196
  164. package/dist/intelligence/indexer/watch-integration.js +0 -61
  165. package/dist/intelligence/indexer/worker.js +0 -85
  166. package/dist/intelligence/local-convention-detector.js +0 -437
  167. package/dist/intelligence/local-embeddings.js +0 -190
  168. package/dist/intelligence/local-graph.js +0 -1946
  169. package/dist/intelligence/local-indexer.js +0 -1575
  170. package/dist/intelligence/local-llm.js +0 -163
  171. package/dist/intelligence/local-rule-generator.js +0 -154
  172. package/dist/intelligence/local-snapshot.js +0 -213
  173. package/dist/intelligence/negative-knowledge.js +0 -103
  174. package/dist/intelligence/persistent-db.js +0 -85
  175. package/dist/intelligence/query-router.js +0 -2556
  176. package/dist/intelligence/risk-classifier.js +0 -116
  177. package/dist/intelligence/rule-evaluator.js +0 -380
  178. package/dist/intelligence/rule-generator.js +0 -49
  179. package/dist/intelligence/search-index.js +0 -173
  180. package/dist/intelligence/semantic/docstring-extractor.js +0 -67
  181. package/dist/intelligence/semantic/embedding-store.js +0 -52
  182. package/dist/intelligence/semantic/enrichment-orchestrator.js +0 -48
  183. package/dist/intelligence/semantic/git-message-miner.js +0 -114
  184. package/dist/intelligence/semantic/identifier-tokenizer.js +0 -51
  185. package/dist/intelligence/semantic/node2vec-embeddings.js +0 -71
  186. package/dist/intelligence/semantic/node2vec-walks.js +0 -103
  187. package/dist/intelligence/semantic/path-domain-inference.js +0 -112
  188. package/dist/intelligence/semantic/similarity-engine.js +0 -60
  189. package/dist/intelligence/semantic/tfidf-vectors.js +0 -88
  190. package/dist/intelligence/session-brief-builder.js +0 -159
  191. package/dist/intelligence/session-context.js +0 -221
  192. package/dist/intelligence/session-health-monitor.js +0 -211
  193. package/dist/intelligence/session-narrative.js +0 -197
  194. package/dist/intelligence/session-pattern-analyzer.js +0 -218
  195. package/dist/intelligence/signal-scorer.js +0 -390
  196. package/dist/intelligence/signal-show-store.js +0 -182
  197. package/dist/intelligence/smart-truncate.js +0 -158
  198. package/dist/intelligence/subgraph-cache.js +0 -88
  199. package/dist/intelligence/temporal-facts.js +0 -494
  200. package/dist/intelligence/token-estimator.js +0 -100
  201. package/dist/intelligence/tool-injector.js +0 -87
  202. package/dist/intelligence/tree-sitter-loader.js +0 -71
  203. package/dist/intelligence/worker-pool.js +0 -116
  204. package/dist/proxy/arg-validator.js +0 -79
  205. package/dist/proxy/auto-bootstrap.js +0 -167
  206. package/dist/proxy/bridge.js +0 -147
  207. package/dist/proxy/budget-enforcer.js +0 -70
  208. package/dist/proxy/compression-quality-monitor.js +0 -160
  209. package/dist/proxy/compression-stats.js +0 -51
  210. package/dist/proxy/context-rot-detector.js +0 -137
  211. package/dist/proxy/drift-detector.js +0 -139
  212. package/dist/proxy/efficiency-tracker.js +0 -79
  213. package/dist/proxy/fact-ranking.js +0 -154
  214. package/dist/proxy/format-encoder.js +0 -266
  215. package/dist/proxy/http-transport.js +0 -90
  216. package/dist/proxy/lifecycle-actor.js +0 -55
  217. package/dist/proxy/lifecycle-machine.js +0 -187
  218. package/dist/proxy/log-tailer.js +0 -265
  219. package/dist/proxy/model-pricing.js +0 -98
  220. package/dist/proxy/network-firewall.js +0 -141
  221. package/dist/proxy/nudge-state.js +0 -93
  222. package/dist/proxy/output-compressor.js +0 -185
  223. package/dist/proxy/pid-lock.js +0 -291
  224. package/dist/proxy/proxy-context.js +0 -11
  225. package/dist/proxy/proxy.js +0 -2633
  226. package/dist/proxy/response-enrichment.js +0 -32
  227. package/dist/proxy/response-envelope.js +0 -313
  228. package/dist/proxy/session-dedup.js +0 -82
  229. package/dist/proxy/session-legend.js +0 -30
  230. package/dist/proxy/session-persistence.js +0 -210
  231. package/dist/proxy/session-resume.js +0 -94
  232. package/dist/proxy/session-stats.js +0 -513
  233. package/dist/proxy/shell-classifier.js +0 -1346
  234. package/dist/proxy/shell-compression-log.js +0 -93
  235. package/dist/proxy/shell-compressor.js +0 -390
  236. package/dist/proxy/shell-graph-boost.js +0 -202
  237. package/dist/proxy/shell-monitor-map.js +0 -18
  238. package/dist/proxy/shell-stats.js +0 -54
  239. package/dist/proxy/shell-strategies/cloud.js +0 -215
  240. package/dist/proxy/shell-strategies/diff.js +0 -159
  241. package/dist/proxy/shell-strategies/error-diagnostic.js +0 -796
  242. package/dist/proxy/shell-strategies/filter-dsl.js +0 -358
  243. package/dist/proxy/shell-strategies/git-status.js +0 -177
  244. package/dist/proxy/shell-strategies/key-value.js +0 -193
  245. package/dist/proxy/shell-strategies/log-text.js +0 -154
  246. package/dist/proxy/shell-strategies/omni.js +0 -188
  247. package/dist/proxy/shell-strategies/progress.js +0 -55
  248. package/dist/proxy/shell-strategies/redact.js +0 -76
  249. package/dist/proxy/shell-strategies/structured.js +0 -241
  250. package/dist/proxy/shell-strategies/tabular.js +0 -243
  251. package/dist/proxy/shell-strategies/test-results-types.js +0 -13
  252. package/dist/proxy/shell-strategies/test-results.js +0 -784
  253. package/dist/proxy/shell-strategies/tree-paths.js +0 -144
  254. package/dist/proxy/shell-strategies/yaml.js +0 -182
  255. package/dist/proxy/shell-tee.js +0 -111
  256. package/dist/proxy/signal-dedup.js +0 -171
  257. package/dist/proxy/startup-renderer.js +0 -158
  258. package/dist/proxy/task-token-display.js +0 -38
  259. package/dist/proxy/token-counter.js +0 -61
  260. package/dist/proxy/tool-clusters.js +0 -273
  261. package/dist/proxy/tool-definitions.js +0 -525
  262. package/dist/proxy/transport-mux.js +0 -229
  263. package/dist/proxy/wire-cap.js +0 -268
  264. package/dist/rules/developer.mozilla.org.json +0 -9
  265. package/dist/rules/github.com.json +0 -21
  266. package/dist/schemas/api/skills.js +0 -19
  267. package/dist/schemas/common/errors.js +0 -7
  268. package/dist/schemas/common/headers.js +0 -5
  269. package/dist/schemas/entities/edge.js +0 -25
  270. package/dist/schemas/entities/entity.js +0 -22
  271. package/dist/schemas/entities/rule.js +0 -18
  272. package/dist/schemas/index.js +0 -14
  273. package/dist/server/event-bus.js +0 -59
  274. package/dist/server/http.js +0 -156
  275. package/dist/server/middleware.js +0 -70
  276. package/dist/server/routes/drift.js +0 -97
  277. package/dist/server/routes/intelligence.js +0 -1217
  278. package/dist/server/routes/reasoning-quality.js +0 -444
  279. package/dist/server/routes/session.js +0 -86
  280. package/dist/server/routes/stream.js +0 -120
  281. package/dist/server/routes/system.js +0 -73
  282. package/dist/server/routes/temporal.js +0 -170
  283. package/dist/server/routes/timeline.js +0 -232
  284. package/dist/server/routes/token-flow.js +0 -403
  285. package/dist/skills/effectiveness-tracker.js +0 -93
  286. package/dist/skills/local-pack.js +0 -380
  287. package/dist/skills/resolver.js +0 -495
  288. package/dist/state-detector.js +0 -83
  289. package/dist/timeline/intent-detector.js +0 -263
  290. package/dist/timeline/loop-miner.js +0 -140
  291. package/dist/timeline/open-threads.js +0 -49
  292. package/dist/timeline/signal-reinforcer.js +0 -62
  293. package/dist/timeline/timeline-bootstrap.js +0 -151
  294. package/dist/timeline/timeline-store.js +0 -618
  295. package/dist/tools/coding/bash.js +0 -49
  296. package/dist/tools/coding/file-edit.js +0 -72
  297. package/dist/tools/coding/file-outline.js +0 -227
  298. package/dist/tools/coding/file-read-protocol.js +0 -425
  299. package/dist/tools/coding/file-read.js +0 -35
  300. package/dist/tools/coding/file-write.js +0 -43
  301. package/dist/tools/coding/glob-tool.js +0 -109
  302. package/dist/tools/coding/grep.js +0 -162
  303. package/dist/tools/coding/index.js +0 -27
  304. package/dist/tools/intelligence/index.js +0 -269
  305. package/dist/tools/intelligence/record-fact.js +0 -48
  306. package/dist/tools/intelligence/timeline-markers.js +0 -130
  307. package/dist/tools/registry.js +0 -47
  308. package/dist/tools/types.js +0 -8
  309. package/dist/tracking/auto-snapshot-triggers.js +0 -246
  310. package/dist/tracking/branch-context.js +0 -115
  311. package/dist/tracking/branch-snapshot.js +0 -217
  312. package/dist/tracking/causal-bridge.js +0 -317
  313. package/dist/tracking/circuit-breaker.js +0 -147
  314. package/dist/tracking/commit-watcher.js +0 -114
  315. package/dist/tracking/context-ledger.js +0 -119
  316. package/dist/tracking/correction-detector.js +0 -324
  317. package/dist/tracking/drift-tracker.js +0 -874
  318. package/dist/tracking/durability-tracker.js +0 -94
  319. package/dist/tracking/entity-rewind.js +0 -200
  320. package/dist/tracking/file-hash-state.js +0 -114
  321. package/dist/tracking/git-attribution.js +0 -132
  322. package/dist/tracking/git-trailers.js +0 -171
  323. package/dist/tracking/intelligence-counter.js +0 -46
  324. package/dist/tracking/intent-correlator.js +0 -202
  325. package/dist/tracking/intent-encoder.js +0 -52
  326. package/dist/tracking/intent-token-tracker.js +0 -159
  327. package/dist/tracking/ledger-archiver.js +0 -94
  328. package/dist/tracking/ledger-chains.js +0 -245
  329. package/dist/tracking/metrics-store.js +0 -361
  330. package/dist/tracking/native-watcher.js +0 -131
  331. package/dist/tracking/offline-rewind.js +0 -295
  332. package/dist/tracking/pending-violations.js +0 -74
  333. package/dist/tracking/persistence-effectiveness.js +0 -167
  334. package/dist/tracking/prompt-durability.js +0 -202
  335. package/dist/tracking/quality-signals.js +0 -213
  336. package/dist/tracking/redactor.js +0 -73
  337. package/dist/tracking/rewind-engine.js +0 -161
  338. package/dist/tracking/session-history.js +0 -128
  339. package/dist/tracking/session-receipt.js +0 -88
  340. package/dist/tracking/session-summary-writer.js +0 -157
  341. package/dist/tracking/shadow-ledger.js +0 -321
  342. package/dist/tracking/stash-manager.js +0 -258
  343. package/dist/tracking/timeline-fork.js +0 -213
  344. package/dist/tracking/timeline.js +0 -69
  345. package/dist/tracking/token-flow.js +0 -276
  346. package/dist/tracking/turn-segmenter.js +0 -122
  347. package/dist/tracking/weekly-accumulator.js +0 -179
  348. package/dist/tracking/working-snapshots.js +0 -188
  349. package/dist/tracking/workspace-manifest.js +0 -176
  350. package/dist/transport/http.js +0 -102
  351. package/dist/utils/counterfactual.js +0 -65
  352. package/dist/utils/deep-link.js +0 -34
  353. package/dist/utils/detect.js +0 -193
  354. package/dist/utils/exec.js +0 -73
  355. package/dist/utils/file-logger.js +0 -87
  356. package/dist/utils/format-error.js +0 -29
  357. package/dist/utils/git.js +0 -181
  358. package/dist/utils/log.js +0 -57
  359. package/dist/utils/logger.js +0 -35
  360. package/dist/utils/mcp-content-json.js +0 -8
  361. package/dist/utils/session-logger.js +0 -154
  362. package/dist/utils/startup-log.js +0 -512
  363. package/dist/utils/ui.js +0 -56
@@ -1,1346 +0,0 @@
1
- /**
2
- * Layer 6 Sprint FE-D — two-phase shell stdout classifier (command hint + content heuristics).
3
- */
4
- /** Normalized substring → category (longest match wins in lookup). */
5
- export const COMMAND_HINTS = {
6
- // ═══════════════════════════════════════════════════════════════
7
- // ── TABULAR ──
8
- // ═══════════════════════════════════════════════════════════════
9
- "docker ps": "tabular",
10
- "docker images": "tabular",
11
- "docker stats": "tabular",
12
- "docker volume ls": "tabular",
13
- "docker network ls": "tabular",
14
- "docker system df": "tabular",
15
- "docker history": "tabular",
16
- "docker top": "tabular",
17
- "podman ps": "tabular",
18
- "podman images": "tabular",
19
- "df -h": "tabular",
20
- "df -l": "tabular",
21
- df: "tabular",
22
- "ls -l": "tabular",
23
- "ls -la": "tabular",
24
- "ls -lah": "tabular",
25
- "ls -lh": "tabular",
26
- ls: "tabular",
27
- ps: "tabular",
28
- du: "tabular",
29
- wc: "tabular",
30
- "kubectl get": "tabular",
31
- "kubectl top": "tabular",
32
- "kubectl top pods": "tabular",
33
- "kubectl top nodes": "tabular",
34
- "kubectl get events": "tabular",
35
- "kubectl config get-contexts": "tabular",
36
- "kubectl api-resources": "tabular",
37
- "helm list": "tabular",
38
- "helm ls": "tabular",
39
- "helm history": "tabular",
40
- "helm search": "tabular",
41
- "helm repo list": "tabular",
42
- lsof: "tabular",
43
- netstat: "tabular",
44
- "netstat -tlnp": "tabular",
45
- ss: "tabular",
46
- "ss -tlnp": "tabular",
47
- top: "tabular",
48
- htop: "tabular",
49
- free: "tabular",
50
- "free -h": "tabular",
51
- vmstat: "tabular",
52
- iostat: "tabular",
53
- mpstat: "tabular",
54
- sar: "tabular",
55
- lsmem: "tabular",
56
- who: "tabular",
57
- w: "tabular",
58
- last: "tabular",
59
- lastlog: "tabular",
60
- lspci: "tabular",
61
- lsusb: "tabular",
62
- "lshw -short": "tabular",
63
- lsblk: "tabular",
64
- "fdisk -l": "tabular",
65
- findmnt: "tabular",
66
- lsmod: "tabular",
67
- "dpkg -l": "tabular",
68
- "zypper search": "tabular",
69
- "snap list": "tabular",
70
- "flatpak list": "tabular",
71
- "brew services list": "tabular",
72
- "ip route": "tabular",
73
- "ip neigh": "tabular",
74
- route: "tabular",
75
- arp: "tabular",
76
- "mtr --report": "tabular",
77
- mtr: "tabular",
78
- tshark: "tabular",
79
- "iptables -L": "tabular",
80
- "perf report": "tabular",
81
- "perf top": "tabular",
82
- "py-spy": "tabular",
83
- pmap: "tabular",
84
- nm: "tabular",
85
- pgrep: "log_text",
86
- "pm2 list": "tabular",
87
- "pm2 status": "tabular",
88
- "forever list": "tabular",
89
- "git shortlog": "log_text",
90
- "git blame": "log_text",
91
- "git annotate": "log_text",
92
- "git worktree list": "tabular",
93
- "gh run list": "tabular",
94
- "gh pr list": "tabular",
95
- "gh pr checks": "tabular",
96
- "gh issue list": "tabular",
97
- "gh workflow list": "tabular",
98
- "gh release list": "tabular",
99
- "gh search": "tabular",
100
- "act -l": "tabular",
101
- "systemctl list-units": "tabular",
102
- "launchctl list": "tabular",
103
- "aws s3 ls": "tabular",
104
- "gcloud compute instances list": "tabular",
105
- "gcloud projects list": "tabular",
106
- "gcloud services list": "tabular",
107
- "vercel ls": "tabular",
108
- "heroku ps": "tabular",
109
- "multipass list": "tabular",
110
- psql: "tabular",
111
- mysql: "tabular",
112
- sqlite3: "tabular",
113
- pgcli: "tabular",
114
- mycli: "tabular",
115
- litecli: "tabular",
116
- vegeta: "tabular",
117
- bandwhich: "tabular",
118
- iftop: "tabular",
119
- nethogs: "tabular",
120
- ncdu: "tabular",
121
- "btrfs subvolume list": "tabular",
122
- "zfs list": "tabular",
123
- // ═══════════════════════════════════════════════════════════════
124
- // ── DIFF ──
125
- // ═══════════════════════════════════════════════════════════════
126
- "git diff": "diff",
127
- "git show": "diff",
128
- diff: "diff",
129
- "git format-patch": "diff",
130
- "gh pr diff": "diff",
131
- "cdk diff": "diff",
132
- "autopep8 --diff": "diff",
133
- "yapf --diff": "diff",
134
- "shfmt -d": "diff",
135
- // ═══════════════════════════════════════════════════════════════
136
- // ── LOG / BUILD OUTPUT ──
137
- // ═══════════════════════════════════════════════════════════════
138
- tail: "log_text",
139
- journalctl: "log_text",
140
- "journalctl -u": "log_text",
141
- "journalctl -f": "log_text",
142
- less: "log_text",
143
- cat: "log_text",
144
- grep: "log_text",
145
- rg: "log_text",
146
- ag: "log_text",
147
- "docker logs": "log_text",
148
- "docker-compose up": "log_text",
149
- "docker-compose logs": "log_text",
150
- "docker compose up": "log_text",
151
- "docker compose logs": "log_text",
152
- "docker compose build": "log_text",
153
- "docker compose down": "log_text",
154
- "docker compose restart": "log_text",
155
- "docker compose exec": "log_text",
156
- "docker build": "log_text",
157
- "docker run": "log_text",
158
- "docker exec": "log_text",
159
- "docker system prune": "log_text",
160
- "podman build": "log_text",
161
- "podman run": "log_text",
162
- "podman logs": "log_text",
163
- dmesg: "log_text",
164
- "git log": "log_text",
165
- "git log --oneline": "log_text",
166
- "git log --stat": "log_text",
167
- "git log --graph": "log_text",
168
- "git stash": "log_text",
169
- "git bisect": "log_text",
170
- "git reflog": "log_text",
171
- "git cherry-pick": "log_text",
172
- "git rebase": "log_text",
173
- "git merge": "log_text",
174
- make: "log_text",
175
- cmake: "log_text",
176
- ninja: "log_text",
177
- // JS/TS build
178
- webpack: "log_text",
179
- "vite build": "log_text",
180
- "vite preview": "log_text",
181
- "pnpm run build": "log_text",
182
- "npm run build": "log_text",
183
- "yarn build": "log_text",
184
- rollup: "log_text",
185
- esbuild: "log_text",
186
- swc: "log_text",
187
- tsup: "log_text",
188
- "tsc --build": "log_text",
189
- unbuild: "log_text",
190
- "parcel build": "log_text",
191
- // Monorepo / meta-build
192
- "nx build": "log_text",
193
- "nx run-many --target=build": "log_text",
194
- "nx run-many": "log_text",
195
- "nx run": "log_text",
196
- "npx nx": "log_text",
197
- "turbo build": "log_text",
198
- "turbo run build": "log_text",
199
- "turbo run": "log_text",
200
- "npx turbo": "log_text",
201
- "bazel build": "log_text",
202
- "bazel run": "log_text",
203
- "lerna run": "log_text",
204
- "lerna build": "log_text",
205
- "rush build": "log_text",
206
- "rush rebuild": "log_text",
207
- "moon run": "log_text",
208
- "moon check": "log_text",
209
- // Frameworks
210
- "next build": "log_text",
211
- "next dev": "log_text",
212
- "nuxt build": "log_text",
213
- "nuxt dev": "log_text",
214
- "gatsby build": "log_text",
215
- "astro build": "log_text",
216
- "remix build": "log_text",
217
- "svelte-kit build": "log_text",
218
- "ng build": "log_text",
219
- "ng serve": "log_text",
220
- "ember build": "log_text",
221
- "expo build": "log_text",
222
- "react-native run-android": "log_text",
223
- "react-native run-ios": "log_text",
224
- "flutter build": "log_text",
225
- "flutter run": "log_text",
226
- "dart compile": "log_text",
227
- // Rust build
228
- "cargo build": "log_text",
229
- "cargo run": "log_text",
230
- "cargo check": "error_diagnostic",
231
- // Go build
232
- "go build": "log_text",
233
- "go run": "log_text",
234
- "go generate": "log_text",
235
- // Java/JVM build
236
- "gradle build": "log_text",
237
- "./gradlew build": "log_text",
238
- "./gradlew": "log_text",
239
- "mvn compile": "log_text",
240
- "mvn package": "log_text",
241
- "mvn install": "log_text",
242
- mvn: "log_text",
243
- gradle: "log_text",
244
- sbt: "log_text",
245
- // Swift
246
- xcodebuild: "log_text",
247
- // .NET
248
- "dotnet run": "log_text",
249
- "dotnet publish": "log_text",
250
- // Ruby
251
- rake: "log_text",
252
- // Other languages
253
- "zig build": "log_text",
254
- "deno compile": "log_text",
255
- "bun build": "log_text",
256
- meson: "log_text",
257
- "meson compile": "log_text",
258
- "meson setup": "log_text",
259
- "cabal build": "log_text",
260
- "stack build": "log_text",
261
- "mix compile": "log_text",
262
- "rebar3 compile": "log_text",
263
- "shards build": "log_text",
264
- "nimble build": "log_text",
265
- "opam build": "log_text",
266
- "dune build": "log_text",
267
- "nix build": "log_text",
268
- "wasm-pack build": "log_text",
269
- emcc: "log_text",
270
- protoc: "log_text",
271
- "buf build": "log_text",
272
- "graphql-codegen": "log_text",
273
- "openapi-generator": "log_text",
274
- // Cloud / deploy
275
- "ansible-playbook": "log_text",
276
- ansible: "log_text",
277
- "kubectl apply": "log_text",
278
- "kubectl delete": "log_text",
279
- "kubectl create": "log_text",
280
- "kubectl patch": "log_text",
281
- "kubectl rollout": "log_text",
282
- "kubectl scale": "log_text",
283
- "kubectl exec": "log_text",
284
- "kubectl port-forward": "log_text",
285
- "kubectl logs": "log_text",
286
- "helm install": "log_text",
287
- "helm upgrade": "log_text",
288
- "helm uninstall": "log_text",
289
- "helm rollback": "log_text",
290
- "terraform apply": "log_text",
291
- "terraform destroy": "log_text",
292
- "terraform plan": "log_text",
293
- "terraform fmt": "log_text",
294
- "terraform import": "log_text",
295
- "terraform refresh": "log_text",
296
- "pulumi up": "log_text",
297
- "pulumi preview": "log_text",
298
- "pulumi destroy": "log_text",
299
- "cdk deploy": "log_text",
300
- "cdk destroy": "log_text",
301
- "serverless deploy": "log_text",
302
- "sls deploy": "log_text",
303
- "sam build": "log_text",
304
- "sam deploy": "log_text",
305
- "sam local start-api": "log_text",
306
- "aws logs": "log_text",
307
- "gcloud run deploy": "log_text",
308
- "gcloud builds submit": "log_text",
309
- "az webapp deploy": "log_text",
310
- "fly deploy": "log_text",
311
- "fly logs": "log_text",
312
- "vercel deploy": "log_text",
313
- "netlify deploy": "log_text",
314
- "heroku logs": "log_text",
315
- "railway deploy": "log_text",
316
- "railway logs": "log_text",
317
- "supabase db push": "log_text",
318
- "supabase functions deploy": "log_text",
319
- "wrangler deploy": "log_text",
320
- "wrangler dev": "log_text",
321
- "wrangler tail": "log_text",
322
- "firebase deploy": "log_text",
323
- "firebase serve": "log_text",
324
- "firebase functions:log": "log_text",
325
- "firebase emulators:start": "log_text",
326
- "vagrant up": "log_text",
327
- "vagrant halt": "log_text",
328
- "vagrant destroy": "log_text",
329
- "minikube start": "log_text",
330
- "kind create cluster": "log_text",
331
- "skaffold dev": "log_text",
332
- "skaffold build": "log_text",
333
- "skaffold deploy": "log_text",
334
- "tilt up": "log_text",
335
- // Database migrations
336
- "prisma migrate": "log_text",
337
- "prisma db push": "log_text",
338
- "prisma generate": "log_text",
339
- "npx prisma": "log_text",
340
- "sequelize db:migrate": "log_text",
341
- "typeorm migration:run": "log_text",
342
- "knex migrate:latest": "log_text",
343
- "drizzle-kit push": "log_text",
344
- "drizzle-kit generate": "log_text",
345
- "flyway migrate": "log_text",
346
- "liquibase update": "log_text",
347
- "alembic upgrade": "log_text",
348
- "diesel migration run": "log_text",
349
- "goose up": "log_text",
350
- "atlas migrate apply": "log_text",
351
- "dbmate up": "log_text",
352
- "sqitch deploy": "log_text",
353
- pg_dump: "log_text",
354
- pg_restore: "log_text",
355
- mysqldump: "log_text",
356
- // CI/CD
357
- "gh run watch": "log_text",
358
- act: "log_text",
359
- "gitlab-runner exec": "log_text",
360
- "circleci local execute": "log_text",
361
- "gh copilot": "log_text",
362
- // Debugging / profiling
363
- strace: "log_text",
364
- ltrace: "log_text",
365
- dtrace: "log_text",
366
- valgrind: "log_text",
367
- "valgrind --tool=memcheck": "log_text",
368
- "valgrind --tool=callgrind": "log_text",
369
- heaptrack: "log_text",
370
- gdb: "log_text",
371
- lldb: "log_text",
372
- pprof: "log_text",
373
- "go tool pprof": "log_text",
374
- objdump: "log_text",
375
- strings: "log_text",
376
- "node --inspect": "log_text",
377
- nodemon: "log_text",
378
- "pm2 logs": "log_text",
379
- concurrently: "log_text",
380
- // Networking
381
- ping: "log_text",
382
- ping6: "log_text",
383
- traceroute: "log_text",
384
- tracepath: "log_text",
385
- "curl -v": "log_text",
386
- nc: "log_text",
387
- ncat: "log_text",
388
- socat: "log_text",
389
- telnet: "log_text",
390
- "ssh -v": "log_text",
391
- tcpdump: "log_text",
392
- // Doc generators
393
- typedoc: "log_text",
394
- jsdoc: "log_text",
395
- doxygen: "log_text",
396
- "sphinx-build": "log_text",
397
- "mkdocs build": "log_text",
398
- "mkdocs serve": "log_text",
399
- "mdbook build": "log_text",
400
- rustdoc: "log_text",
401
- // Misc
402
- "systemctl start": "log_text",
403
- "systemctl stop": "log_text",
404
- "systemctl restart": "log_text",
405
- "systemctl enable": "log_text",
406
- "systemctl disable": "log_text",
407
- watch: "log_text",
408
- xargs: "log_text",
409
- parallel: "log_text",
410
- task: "log_text",
411
- just: "log_text",
412
- earthly: "log_text",
413
- pants: "log_text",
414
- "please build": "log_text",
415
- "buck2 build": "log_text",
416
- "python -c": "log_text",
417
- "python3 -c": "log_text",
418
- // ═══════════════════════════════════════════════════════════════
419
- // ── TEST RESULTS ──
420
- // ═══════════════════════════════════════════════════════════════
421
- "npm test": "test_results",
422
- "npm run test": "test_results",
423
- "pnpm test": "test_results",
424
- "pnpm run test": "test_results",
425
- "yarn test": "test_results",
426
- vitest: "test_results",
427
- jest: "test_results",
428
- mocha: "test_results",
429
- pytest: "test_results",
430
- "python -m pytest": "test_results",
431
- "python3 -m pytest": "test_results",
432
- "cargo test": "test_results",
433
- "go test": "test_results",
434
- rspec: "test_results",
435
- "bundle exec rspec": "test_results",
436
- phpunit: "test_results",
437
- "dotnet test": "test_results",
438
- "swift test": "test_results",
439
- "gradle test": "test_results",
440
- "./gradlew test": "test_results",
441
- "gradle check": "test_results",
442
- "./gradlew check": "test_results",
443
- "mvn test": "test_results",
444
- "mvn verify": "test_results",
445
- "sbt test": "test_results",
446
- "sbt it:test": "test_results",
447
- minitest: "test_results",
448
- "mix test": "test_results",
449
- "playwright test": "test_results",
450
- "npx playwright test": "test_results",
451
- "npx playwright": "test_results",
452
- "nx test": "test_results",
453
- "nx run-many --target=test": "test_results",
454
- "turbo test": "test_results",
455
- "turbo run test": "test_results",
456
- "bazel test": "test_results",
457
- ctest: "test_results",
458
- "zig test": "test_results",
459
- "deno test": "test_results",
460
- "bun test": "test_results",
461
- "bun run test": "test_results",
462
- "cypress run": "test_results",
463
- "npx cypress run": "test_results",
464
- wdio: "test_results",
465
- "npx wdio": "test_results",
466
- ava: "test_results",
467
- tap: "test_results",
468
- jasmine: "test_results",
469
- "karma start": "test_results",
470
- "elm-test": "test_results",
471
- "flutter test": "test_results",
472
- "dart test": "test_results",
473
- "crystal spec": "test_results",
474
- "helm test": "test_results",
475
- "container-structure-test": "test_results",
476
- "k6 run": "test_results",
477
- "artillery run": "test_results",
478
- "newman run": "test_results",
479
- hurl: "test_results",
480
- // ═══════════════════════════════════════════════════════════════
481
- // ── PROGRESS / INSTALL ──
482
- // ═══════════════════════════════════════════════════════════════
483
- "npm install": "progress_streaming",
484
- "npm i": "progress_streaming",
485
- "npm ci": "progress_streaming",
486
- "npm update": "progress_streaming",
487
- "pnpm install": "progress_streaming",
488
- "pnpm add": "progress_streaming",
489
- "pnpm i": "progress_streaming",
490
- "pnpm update": "progress_streaming",
491
- "pip install": "progress_streaming",
492
- "pip3 install": "progress_streaming",
493
- "uv pip install": "progress_streaming",
494
- "uv sync": "progress_streaming",
495
- "uv add": "progress_streaming",
496
- "yarn install": "progress_streaming",
497
- "yarn add": "progress_streaming",
498
- "yarn upgrade": "progress_streaming",
499
- "poetry install": "progress_streaming",
500
- "poetry add": "progress_streaming",
501
- "pipenv install": "progress_streaming",
502
- "bundle install": "progress_streaming",
503
- "gem install": "progress_streaming",
504
- "cargo install": "progress_streaming",
505
- "cargo add": "progress_streaming",
506
- "go install": "progress_streaming",
507
- "go get": "progress_streaming",
508
- "go mod download": "progress_streaming",
509
- "composer install": "progress_streaming",
510
- "composer update": "progress_streaming",
511
- "composer require": "progress_streaming",
512
- "deno install": "progress_streaming",
513
- "deno add": "progress_streaming",
514
- "bun install": "progress_streaming",
515
- "bun add": "progress_streaming",
516
- "pdm install": "progress_streaming",
517
- "pdm add": "progress_streaming",
518
- "conda install": "progress_streaming",
519
- "conda create": "progress_streaming",
520
- "conda update": "progress_streaming",
521
- "mamba install": "progress_streaming",
522
- "mamba create": "progress_streaming",
523
- "rye sync": "progress_streaming",
524
- "rye add": "progress_streaming",
525
- "mix deps.get": "progress_streaming",
526
- "pub get": "progress_streaming",
527
- "flutter pub get": "progress_streaming",
528
- "nuget restore": "progress_streaming",
529
- "dotnet restore": "progress_streaming",
530
- "vcpkg install": "progress_streaming",
531
- "conan install": "progress_streaming",
532
- wget: "progress_streaming",
533
- "apt install": "progress_streaming",
534
- "apt-get install": "progress_streaming",
535
- "apt update": "progress_streaming",
536
- "apt-get update": "progress_streaming",
537
- "brew install": "progress_streaming",
538
- "brew upgrade": "progress_streaming",
539
- "brew update": "progress_streaming",
540
- "dnf install": "progress_streaming",
541
- "yum install": "progress_streaming",
542
- "pacman -S": "progress_streaming",
543
- "snap install": "progress_streaming",
544
- "flatpak install": "progress_streaming",
545
- "nix-env -i": "progress_streaming",
546
- "docker pull": "progress_streaming",
547
- "docker push": "progress_streaming",
548
- "docker compose pull": "progress_streaming",
549
- "docker compose push": "progress_streaming",
550
- "podman pull": "progress_streaming",
551
- "terraform init": "progress_streaming",
552
- "helm repo update": "progress_streaming",
553
- "ansible-galaxy": "progress_streaming",
554
- "git pull": "progress_streaming",
555
- "git push": "progress_streaming",
556
- "git fetch": "progress_streaming",
557
- "git clone": "progress_streaming",
558
- "git submodule update": "progress_streaming",
559
- "git lfs pull": "progress_streaming",
560
- "git lfs push": "progress_streaming",
561
- "gh workflow run": "progress_streaming",
562
- "aws s3 cp": "progress_streaming",
563
- "aws s3 sync": "progress_streaming",
564
- "nvm install": "progress_streaming",
565
- "fnm install": "progress_streaming",
566
- "pyenv install": "progress_streaming",
567
- "rbenv install": "progress_streaming",
568
- "rustup update": "progress_streaming",
569
- "volta install": "progress_streaming",
570
- "asdf install": "progress_streaming",
571
- "mise install": "progress_streaming",
572
- "sdk install": "progress_streaming",
573
- "spack install": "progress_streaming",
574
- // ═══════════════════════════════════════════════════════════════
575
- // ── TREE / PATHS ──
576
- // ═══════════════════════════════════════════════════════════════
577
- tree: "tree_paths",
578
- find: "tree_paths",
579
- fd: "tree_paths",
580
- locate: "tree_paths",
581
- "ls -R": "tree_paths",
582
- "git ls-files": "tree_paths",
583
- "git ls-tree": "tree_paths",
584
- "dpkg -L": "tree_paths",
585
- "rpm -ql": "tree_paths",
586
- "pacman -Ql": "tree_paths",
587
- "brew deps": "tree_paths",
588
- // ═══════════════════════════════════════════════════════════════
589
- // ── STRUCTURED (JSON/YAML) ──
590
- // ═══════════════════════════════════════════════════════════════
591
- "docker inspect": "structured",
592
- "docker volume inspect": "structured",
593
- "docker network inspect": "structured",
594
- "podman inspect": "structured",
595
- "kubectl get -o json": "structured",
596
- "kubectl get -o yaml": "yaml",
597
- "kubectl get pods -o json": "structured",
598
- curl: "structured",
599
- "helm get": "yaml",
600
- "helm template": "yaml",
601
- "helm show": "yaml",
602
- "helm show values": "yaml",
603
- "terraform show": "structured",
604
- "terraform graph": "structured",
605
- "cdk synth": "structured",
606
- "serverless invoke": "structured",
607
- "sam local invoke": "structured",
608
- aws: "structured",
609
- "aws ec2 describe-instances": "structured",
610
- "aws ecs list-tasks": "structured",
611
- "aws lambda invoke": "structured",
612
- "aws cloudformation describe-stacks": "structured",
613
- "aws iam list-users": "structured",
614
- "aws sts get-caller-identity": "structured",
615
- "az vm list": "structured",
616
- "az group list": "structured",
617
- "az account show": "structured",
618
- "az aks": "structured",
619
- gcloud: "structured",
620
- jq: "structured",
621
- yq: "yaml",
622
- mongosh: "structured",
623
- mongo: "structured",
624
- "gh run view": "structured",
625
- "gh pr view": "structured",
626
- "gh issue view": "structured",
627
- "gh release view": "structured",
628
- "gh repo view": "structured",
629
- "gh api": "structured",
630
- grpcurl: "structured",
631
- httpie: "structured",
632
- http: "structured",
633
- dig: "structured",
634
- // ═══════════════════════════════════════════════════════════════
635
- // ── YAML ──
636
- // ═══════════════════════════════════════════════════════════════
637
- "kubectl get pods -o yaml": "yaml",
638
- "kubectl get deployment -o yaml": "yaml",
639
- "kubectl get service -o yaml": "yaml",
640
- "kubectl get configmap -o yaml": "yaml",
641
- "kubectl get secret -o yaml": "yaml",
642
- "kubectl get ingress -o yaml": "yaml",
643
- "kubectl get node -o yaml": "yaml",
644
- "helm get values": "yaml",
645
- "helm get manifest": "yaml",
646
- "cat docker-compose.yml": "yaml",
647
- "cat docker-compose.yaml": "yaml",
648
- "cat compose.yml": "yaml",
649
- "cat compose.yaml": "yaml",
650
- // ═══════════════════════════════════════════════════════════════
651
- // ── KEY-VALUE ──
652
- // ═══════════════════════════════════════════════════════════════
653
- env: "key_value",
654
- printenv: "key_value",
655
- "set -o": "key_value",
656
- "git config": "key_value",
657
- "git status": "key_value",
658
- "git remote": "key_value",
659
- "git branch": "key_value",
660
- "git tag": "key_value",
661
- "git tag -l": "key_value",
662
- "git describe": "key_value",
663
- "git rev-parse": "key_value",
664
- "git stash list": "key_value",
665
- "cargo metadata": "key_value",
666
- "pip show": "key_value",
667
- "pip3 show": "key_value",
668
- "npm ls": "key_value",
669
- "pnpm ls": "key_value",
670
- "go env": "key_value",
671
- // kubectl describe is Key: Value format, NOT JSON
672
- "kubectl describe": "key_value",
673
- "kubectl config": "key_value",
674
- "kubectl config view": "key_value",
675
- "kubectl cluster-info": "key_value",
676
- "kubectl explain": "key_value",
677
- "kubectl auth can-i": "key_value",
678
- kubectl: "key_value",
679
- "helm status": "key_value",
680
- // Terraform
681
- "terraform output": "key_value",
682
- "terraform state list": "key_value",
683
- "terraform state show": "key_value",
684
- "terraform providers": "key_value",
685
- "terraform workspace list": "key_value",
686
- // Cloud
687
- "pulumi stack": "key_value",
688
- "pulumi config": "key_value",
689
- "cdk list": "key_value",
690
- "serverless info": "key_value",
691
- "gcloud auth": "key_value",
692
- "gcloud config list": "key_value",
693
- "az login": "key_value",
694
- "fly status": "key_value",
695
- "vercel env": "key_value",
696
- "netlify status": "key_value",
697
- "netlify env": "key_value",
698
- "heroku config": "key_value",
699
- "heroku info": "key_value",
700
- "railway status": "key_value",
701
- "supabase status": "key_value",
702
- "vagrant status": "key_value",
703
- "multipass info": "key_value",
704
- "minikube status": "key_value",
705
- "kind get clusters": "key_value",
706
- // Database
707
- "redis-cli": "key_value",
708
- "redis-cli info": "key_value",
709
- // System
710
- "systemctl status": "key_value",
711
- "systemctl show": "key_value",
712
- service: "key_value",
713
- "launchctl print": "key_value",
714
- "crontab -l": "key_value",
715
- stat: "key_value",
716
- file: "key_value",
717
- md5sum: "key_value",
718
- sha256sum: "key_value",
719
- shasum: "key_value",
720
- readlink: "key_value",
721
- realpath: "key_value",
722
- blkid: "key_value",
723
- mount: "key_value",
724
- "du -sh": "key_value",
725
- nproc: "key_value",
726
- lscpu: "key_value",
727
- "sysctl -a": "key_value",
728
- sysctl: "key_value",
729
- "ulimit -a": "key_value",
730
- id: "key_value",
731
- groups: "key_value",
732
- whoami: "key_value",
733
- lshw: "key_value",
734
- dmidecode: "key_value",
735
- inxi: "key_value",
736
- system_profiler: "key_value",
737
- "uname -a": "key_value",
738
- uname: "key_value",
739
- modinfo: "key_value",
740
- getfacl: "key_value",
741
- "apt show": "key_value",
742
- "dpkg -s": "key_value",
743
- "rpm -qi": "key_value",
744
- "snap info": "key_value",
745
- "brew info": "key_value",
746
- "brew list": "key_value",
747
- "port info": "key_value",
748
- "docker info": "key_value",
749
- "docker version": "key_value",
750
- "docker port": "key_value",
751
- "docker tag": "key_value",
752
- // Networking
753
- "ip addr": "key_value",
754
- "ip link": "key_value",
755
- "ip -s link": "key_value",
756
- ifconfig: "key_value",
757
- nslookup: "key_value",
758
- host: "key_value",
759
- whois: "key_value",
760
- "curl -I": "key_value",
761
- "curl -w": "key_value",
762
- "wget --spider": "key_value",
763
- "openssl s_client": "key_value",
764
- "openssl x509": "key_value",
765
- "ssh-keygen -l": "key_value",
766
- "ufw status": "key_value",
767
- "nft list": "key_value",
768
- "firewall-cmd --list-all": "key_value",
769
- "iptables -S": "key_value",
770
- nmap: "key_value",
771
- ab: "key_value",
772
- wrk: "key_value",
773
- hey: "key_value",
774
- siege: "key_value",
775
- // Version queries
776
- "python --version": "key_value",
777
- "python3 --version": "key_value",
778
- "node --version": "key_value",
779
- "node -v": "key_value",
780
- "npm --version": "key_value",
781
- "pnpm --version": "key_value",
782
- "yarn --version": "key_value",
783
- "deno --version": "key_value",
784
- "bun --version": "key_value",
785
- "rustc --version": "key_value",
786
- "cargo --version": "key_value",
787
- "go version": "key_value",
788
- "java -version": "key_value",
789
- "ruby --version": "key_value",
790
- "php --version": "key_value",
791
- "swift --version": "key_value",
792
- "dotnet --version": "key_value",
793
- "gcc --version": "key_value",
794
- "g++ --version": "key_value",
795
- "clang --version": "key_value",
796
- "cmake --version": "key_value",
797
- "make --version": "key_value",
798
- "flutter --version": "key_value",
799
- "dart --version": "key_value",
800
- "zig version": "key_value",
801
- "elixir --version": "key_value",
802
- // Version managers
803
- "nvm ls": "key_value",
804
- "nvm use": "key_value",
805
- "fnm ls": "key_value",
806
- "fnm use": "key_value",
807
- "pyenv versions": "key_value",
808
- "rbenv versions": "key_value",
809
- "rustup show": "key_value",
810
- "rustup target list": "key_value",
811
- "rustup component list": "key_value",
812
- "volta list": "key_value",
813
- "asdf list": "key_value",
814
- "asdf current": "key_value",
815
- "mise list": "key_value",
816
- "mise current": "key_value",
817
- "direnv allow": "key_value",
818
- "direnv status": "key_value",
819
- "module list": "key_value",
820
- "module avail": "key_value",
821
- // Profiling
822
- "perf stat": "key_value",
823
- ldd: "key_value",
824
- "otool -L": "key_value",
825
- readelf: "key_value",
826
- time: "key_value",
827
- uptime: "key_value",
828
- fuser: "key_value",
829
- // CI
830
- "gh pr status": "key_value",
831
- "gh issue status": "key_value",
832
- "zpool status": "key_value",
833
- // ═══════════════════════════════════════════════════════════════
834
- // ── ERROR DIAGNOSTIC ──
835
- // ═══════════════════════════════════════════════════════════════
836
- // JS/TS
837
- tsc: "error_diagnostic",
838
- "npx tsc": "error_diagnostic",
839
- "pnpm run typecheck": "error_diagnostic",
840
- "npm run typecheck": "error_diagnostic",
841
- "yarn typecheck": "error_diagnostic",
842
- "pnpm typecheck": "error_diagnostic",
843
- eslint: "error_diagnostic",
844
- "npx eslint": "error_diagnostic",
845
- "biome check": "error_diagnostic",
846
- "biome lint": "error_diagnostic",
847
- "biome format --check": "error_diagnostic",
848
- oxlint: "error_diagnostic",
849
- xo: "error_diagnostic",
850
- jshint: "error_diagnostic",
851
- "deno lint": "error_diagnostic",
852
- "bun lint": "error_diagnostic",
853
- "pnpm run lint": "error_diagnostic",
854
- "npm run lint": "error_diagnostic",
855
- "yarn lint": "error_diagnostic",
856
- "pnpm lint": "error_diagnostic",
857
- "pnpm run lint:fix": "error_diagnostic",
858
- "npm run lint:fix": "error_diagnostic",
859
- "yarn lint:fix": "error_diagnostic",
860
- "pnpm run check": "error_diagnostic",
861
- "npm run check": "error_diagnostic",
862
- "yarn check": "error_diagnostic",
863
- // Python
864
- mypy: "error_diagnostic",
865
- pyright: "error_diagnostic",
866
- ruff: "error_diagnostic",
867
- "ruff check": "error_diagnostic",
868
- flake8: "error_diagnostic",
869
- pylint: "error_diagnostic",
870
- bandit: "error_diagnostic",
871
- // Rust
872
- "cargo clippy": "error_diagnostic",
873
- rustc: "error_diagnostic",
874
- "cargo fmt --check": "error_diagnostic",
875
- "rustfmt --check": "error_diagnostic",
876
- // Go
877
- "go vet": "error_diagnostic",
878
- "golangci-lint": "error_diagnostic",
879
- "golangci-lint run": "error_diagnostic",
880
- staticcheck: "error_diagnostic",
881
- gosec: "error_diagnostic",
882
- "gofmt -l": "error_diagnostic",
883
- "goimports -l": "error_diagnostic",
884
- // Java/JVM
885
- javac: "error_diagnostic",
886
- kotlinc: "error_diagnostic",
887
- detekt: "error_diagnostic",
888
- ktlint: "error_diagnostic",
889
- scalastyle: "error_diagnostic",
890
- "scalafmt --check": "error_diagnostic",
891
- // C/C++
892
- gcc: "error_diagnostic",
893
- "g++": "error_diagnostic",
894
- clang: "error_diagnostic",
895
- "clang++": "error_diagnostic",
896
- cppcheck: "error_diagnostic",
897
- "clang-tidy": "error_diagnostic",
898
- "clang-format --dry-run": "error_diagnostic",
899
- // Swift
900
- swiftc: "error_diagnostic",
901
- "swift build": "error_diagnostic",
902
- swiftlint: "error_diagnostic",
903
- "swiftformat --lint": "error_diagnostic",
904
- // .NET
905
- "dotnet build": "error_diagnostic",
906
- // Ruby
907
- rubocop: "error_diagnostic",
908
- brakeman: "error_diagnostic",
909
- // PHP
910
- phpstan: "error_diagnostic",
911
- "php -l": "error_diagnostic",
912
- // Shell / config
913
- shellcheck: "error_diagnostic",
914
- hadolint: "error_diagnostic",
915
- "ansible-lint": "error_diagnostic",
916
- "terraform validate": "error_diagnostic",
917
- "helm lint": "error_diagnostic",
918
- yamllint: "error_diagnostic",
919
- jsonlint: "error_diagnostic",
920
- markdownlint: "error_diagnostic",
921
- stylelint: "error_diagnostic",
922
- vale: "error_diagnostic",
923
- actionlint: "error_diagnostic",
924
- commitlint: "error_diagnostic",
925
- tflint: "error_diagnostic",
926
- "kube-linter": "error_diagnostic",
927
- "polaris audit": "error_diagnostic",
928
- "buf lint": "error_diagnostic",
929
- "opa eval": "error_diagnostic",
930
- "conftest test": "error_diagnostic",
931
- checkov: "error_diagnostic",
932
- // Other languages
933
- "dart analyze": "error_diagnostic",
934
- "flutter analyze": "error_diagnostic",
935
- "elm-review": "error_diagnostic",
936
- dialyzer: "error_diagnostic",
937
- credo: "error_diagnostic",
938
- "mix credo": "error_diagnostic",
939
- ameba: "error_diagnostic",
940
- "nim check": "error_diagnostic",
941
- selene: "error_diagnostic",
942
- luacheck: "error_diagnostic",
943
- // Formatters (check mode)
944
- "prettier --check": "error_diagnostic",
945
- "black --check": "error_diagnostic",
946
- "isort --check": "error_diagnostic",
947
- "dprint check": "error_diagnostic",
948
- "taplo check": "error_diagnostic",
949
- "sql-formatter --check": "error_diagnostic",
950
- // Security scanners
951
- "npm audit": "error_diagnostic",
952
- "pnpm audit": "error_diagnostic",
953
- "yarn audit": "error_diagnostic",
954
- "cargo audit": "error_diagnostic",
955
- "pip-audit": "error_diagnostic",
956
- "safety check": "error_diagnostic",
957
- "snyk test": "error_diagnostic",
958
- "snyk code test": "error_diagnostic",
959
- "trivy image": "error_diagnostic",
960
- "trivy fs": "error_diagnostic",
961
- grype: "error_diagnostic",
962
- semgrep: "error_diagnostic",
963
- "semgrep scan": "error_diagnostic",
964
- "bearer scan": "error_diagnostic",
965
- "gitleaks detect": "error_diagnostic",
966
- trufflehog: "error_diagnostic",
967
- "detect-secrets scan": "error_diagnostic",
968
- "dependency-check": "error_diagnostic",
969
- retire: "error_diagnostic",
970
- "sonar-scanner": "error_diagnostic",
971
- };
972
- const CONFIDENCE_HINT = 0.82;
973
- const CONFIDENCE_HEURISTIC = 0.74;
974
- const CONFIDENCE_BOTH = 0.93;
975
- export function normalizeShellCommand(cmd) {
976
- return cmd.trim().replace(/\s+/g, " ");
977
- }
978
- /**
979
- * Commands that don't produce meaningful stdout. When a chain has these as
980
- * the trailing segment, the actual stdout came from an earlier segment, so
981
- * we skip them when picking which segment's hint to use.
982
- *
983
- * Keys can be one-token (`chmod`) or two-token (`git add`). We check the
984
- * first one or two tokens of a segment against this set.
985
- */
986
- const SILENT_COMMANDS = new Set([
987
- // POSIX filesystem mutations
988
- "chmod",
989
- "chown",
990
- "chgrp",
991
- "mkdir",
992
- "rmdir",
993
- "rm",
994
- "mv",
995
- "cp",
996
- "ln",
997
- "touch",
998
- // shell builtins / control
999
- "cd",
1000
- "export",
1001
- "set",
1002
- "unset",
1003
- "alias",
1004
- "unalias",
1005
- "umask",
1006
- "true",
1007
- "false",
1008
- ":",
1009
- // git mutators (most are silent on success)
1010
- "git add",
1011
- "git commit",
1012
- "git push",
1013
- "git pull",
1014
- "git fetch",
1015
- "git checkout",
1016
- "git switch",
1017
- "git stash",
1018
- "git tag",
1019
- "git rm",
1020
- "git mv",
1021
- "git reset",
1022
- // pnpm/npm/yarn helpers
1023
- "pnpm add",
1024
- "pnpm remove",
1025
- "npm install",
1026
- "npm uninstall",
1027
- "yarn add",
1028
- "yarn remove",
1029
- ]);
1030
- /** True if `seg` starts with a known silent (no-meaningful-stdout) command. */
1031
- function isSilentSegment(seg) {
1032
- const tokens = seg.trim().split(/\s+/);
1033
- if (tokens.length === 0)
1034
- return true;
1035
- const one = tokens[0] ?? "";
1036
- if (SILENT_COMMANDS.has(one))
1037
- return true;
1038
- if (tokens.length >= 2) {
1039
- const two = `${one} ${tokens[1]}`;
1040
- if (SILENT_COMMANDS.has(two))
1041
- return true;
1042
- }
1043
- return false;
1044
- }
1045
- /** Strip `> file`, `>> file`, `2>&1`, `&` trailing background marker. */
1046
- function stripRedirects(seg) {
1047
- return seg
1048
- .replace(/\s*\d?>>?\s*\S+/g, "")
1049
- .replace(/\s*2>&1\s*/g, " ")
1050
- .replace(/\s*&\s*$/g, "")
1051
- .trim();
1052
- }
1053
- /** Pick the longest matching prefix in COMMAND_HINTS for a single segment. */
1054
- function matchPrefixHint(seg) {
1055
- const s = stripRedirects(seg);
1056
- let best = null;
1057
- for (const key of Object.keys(COMMAND_HINTS)) {
1058
- if (s === key || s.startsWith(`${key} `)) {
1059
- if (!best || key.length > best.len) {
1060
- const cat = COMMAND_HINTS[key];
1061
- if (!cat)
1062
- continue;
1063
- best = { category: cat, key, len: key.length };
1064
- }
1065
- }
1066
- }
1067
- return best ? { category: best.category, key: best.key } : null;
1068
- }
1069
- /**
1070
- * Find the hint for the command whose stdout reaches the consumer. Splits the
1071
- * normalized command on shell operators (`&&`, `||`, `;`, `|`) and walks the
1072
- * resulting segments from last to first, preferring segments that aren't in
1073
- * SILENT_COMMANDS (chmod, mkdir, git add, …). If every segment is silent we
1074
- * fall back to a permissive last-to-first scan so single-segment commands
1075
- * keep working unchanged.
1076
- */
1077
- export function matchCommandHint(cmd) {
1078
- const n = normalizeShellCommand(cmd);
1079
- const segments = n
1080
- .split(/\s*(?:&&|\|\||;|\|)\s*/)
1081
- .map((s) => s.trim())
1082
- .filter((s) => s.length > 0);
1083
- if (segments.length === 0)
1084
- return null;
1085
- // Pass 1 — prefer non-silent segments, scan last → first (the last meaningful
1086
- // producer's stdout is what actually reaches the consumer of this chain).
1087
- for (let i = segments.length - 1; i >= 0; i--) {
1088
- const seg = segments[i];
1089
- if (isSilentSegment(seg))
1090
- continue;
1091
- const hit = matchPrefixHint(seg);
1092
- if (hit)
1093
- return hit;
1094
- }
1095
- // Pass 2 — every segment is silent (or none had a hint). Scan again without
1096
- // the silent filter so a single-segment `chmod +x foo` still gets the chance
1097
- // to match a future `chmod` hint, and behaviour for non-chained commands is
1098
- // exactly the same as before this refactor.
1099
- for (let i = segments.length - 1; i >= 0; i--) {
1100
- const hit = matchPrefixHint(segments[i]);
1101
- if (hit)
1102
- return hit;
1103
- }
1104
- return null;
1105
- }
1106
- function scoreContent(lines) {
1107
- const sample = lines.slice(0, 20).join("\n");
1108
- let best = null;
1109
- const bump = (cat, w) => {
1110
- if (!best || w > best.score)
1111
- best = { category: cat, score: w };
1112
- };
1113
- if (/^diff --git/m.test(sample) || /^@@ |^--- |\+\+\+ /m.test(sample)) {
1114
- bump("diff", 0.9);
1115
- }
1116
- if (/^\s*[\[{]/.test(lines[0] ?? "") && /[}\]]\s*$/.test(sample.slice(-80))) {
1117
- bump("structured", 0.72);
1118
- }
1119
- // YAML detection: lines starting with key: value, or --- document separator, with no JSON braces
1120
- {
1121
- const yamlDocSep = /^---\s*$/m.test(sample);
1122
- const yamlKeyLines = lines.filter((l) => /^\s*[\w][\w.-]*:\s/.test(l) && !/^\s*[\[{]/.test(l)).length;
1123
- const hasArrayItems = /^\s*-\s+\S/m.test(sample);
1124
- const noJsonBraces = !/^\s*[\[{]/.test(lines[0] ?? "");
1125
- if (yamlDocSep && yamlKeyLines >= 2) {
1126
- bump("yaml", 0.82);
1127
- }
1128
- else if (noJsonBraces &&
1129
- yamlKeyLines >= 4 &&
1130
- (hasArrayItems || yamlDocSep)) {
1131
- bump("yaml", 0.78);
1132
- }
1133
- }
1134
- if (/\d{4}-\d{2}-\d{2}T\d|\[\d{2}\/\w{3}\/\d{4}/.test(sample) ||
1135
- /\d{2}:\d{2}:\d{2}\.\d{3}/.test(sample)) {
1136
- bump("log_text", 0.78);
1137
- }
1138
- // Build-like output: repeated similar lines, or mixed WARNING + build keywords
1139
- {
1140
- const hasWarn = /\bWARN(ING)?\b/i.test(sample);
1141
- const hasBuildKeywords = /\b(compil|build|bundl|generat|transform|emit|output)/i.test(sample);
1142
- if (hasWarn && hasBuildKeywords) {
1143
- bump("log_text", 0.79);
1144
- }
1145
- // Detect repeated lines pattern (log/build output signature)
1146
- const seen = new Map();
1147
- for (const line of lines.slice(0, 15)) {
1148
- const norm = line.replace(/\d+/g, "N").trim();
1149
- if (norm.length > 5)
1150
- seen.set(norm, (seen.get(norm) ?? 0) + 1);
1151
- }
1152
- const repeats = [...seen.values()].filter((c) => c >= 3).length;
1153
- if (repeats >= 1)
1154
- bump("log_text", 0.75);
1155
- }
1156
- let aligned = 0;
1157
- let inspectable = 0;
1158
- for (const line of lines.slice(0, 15)) {
1159
- if (line.length < 8)
1160
- continue;
1161
- inspectable++;
1162
- if (/\s{2,}|\t/.test(line) && !line.startsWith(" "))
1163
- aligned++;
1164
- }
1165
- if (aligned >= 4) {
1166
- bump("tabular", 0.8);
1167
- }
1168
- else if (aligned >= 3 &&
1169
- inspectable <= 6 &&
1170
- aligned / inspectable >= 0.75) {
1171
- // Short tabular outputs (eg `ls -la` of a handful of files, `docker ps`
1172
- // with a single container): when most inspectable lines are aligned we
1173
- // accept ≥3 rows. Lower confidence (0.72) so a disagreeing command hint
1174
- // can still win, but still above the omni gate (0.7) so the strategy
1175
- // fires rather than falling through to omni's flat dedup.
1176
- bump("tabular", 0.72);
1177
- }
1178
- if (/\b(PASS|FAIL|✓|✗|✕|tests?\s+\d+\s+failed|AssertionError)/i.test(sample)) {
1179
- bump("test_results", 0.85);
1180
- }
1181
- if (/\b(Downloading|Installing|Building|packages?\s+\)|ETA|⠋|⠙|\[\s*\d+%\s*\])/.test(sample)) {
1182
- bump("progress_streaming", 0.82);
1183
- }
1184
- // tsc errors — very distinctive pattern
1185
- if (/^.+\(\d+,\d+\): error TS\d{4}:/m.test(sample)) {
1186
- bump("error_diagnostic", 0.95);
1187
- }
1188
- // ESLint — distinctive line:col severity message rule format
1189
- if (/^\s+\d+:\d+\s+(error|warning)\s+.+\s{2,}\S+/m.test(sample)) {
1190
- bump("error_diagnostic", 0.92);
1191
- }
1192
- // gcc/clang: file.c:10:5: error: message
1193
- if (/^.+:\d+:\d+:\s+(error|warning|note):/m.test(sample) &&
1194
- !/error TS/.test(sample)) {
1195
- bump("error_diagnostic", 0.9);
1196
- }
1197
- // rustc: error[E0308]: ...
1198
- if (/^error\[E\d{4}\]:/m.test(sample)) {
1199
- bump("error_diagnostic", 0.94);
1200
- }
1201
- // Go diagnostics: file.go:10:5: message
1202
- if (/^.+\.go:\d+:\d+:/m.test(sample)) {
1203
- bump("error_diagnostic", 0.82);
1204
- }
1205
- // Python: mypy/pyright file.py:10: error: ...
1206
- if (/^.+\.py:\d+:\s+(error|warning|note):/m.test(sample)) {
1207
- bump("error_diagnostic", 0.9);
1208
- }
1209
- // Python: ruff/flake8 file.py:10:5: E501
1210
- if (/^.+\.py:\d+:\d+:\s+[A-Z]\d+/m.test(sample)) {
1211
- bump("error_diagnostic", 0.9);
1212
- }
1213
- // javac: File.java:10: error: ...
1214
- if (/^.+\.java:\d+:\s+error:/m.test(sample)) {
1215
- bump("error_diagnostic", 0.9);
1216
- }
1217
- // Python traceback
1218
- if (/^Traceback \(most recent call last\):/m.test(sample)) {
1219
- bump("error_diagnostic", 0.88);
1220
- }
1221
- // Only promote to error_diagnostic for strong error signals — not bare WARN/WARNING
1222
- // which commonly appears in build output (deprecation warnings, etc.)
1223
- if (/\bException\b|^\w+Error:/m.test(sample)) {
1224
- bump("error_diagnostic", 0.76);
1225
- }
1226
- // ERROR/FATAL alone (without structured file:line format) is weaker signal
1227
- if (/\b(ERROR|FATAL)\b/.test(sample) && !/\b(WARN(ING)?)\b/.test(sample)) {
1228
- bump("error_diagnostic", 0.72);
1229
- }
1230
- // Multi-language test result patterns
1231
- if (/^test result: (ok|FAILED)/m.test(sample)) {
1232
- bump("test_results", 0.9); // cargo test
1233
- }
1234
- if (/^--- (PASS|FAIL): /m.test(sample)) {
1235
- bump("test_results", 0.9); // go test
1236
- }
1237
- if (/^={3,}\s*(test session starts|FAILURES)/m.test(sample)) {
1238
- bump("test_results", 0.9); // pytest
1239
- }
1240
- if (/^\d+ examples?, \d+ failures?/m.test(sample)) {
1241
- bump("test_results", 0.88); // rspec
1242
- }
1243
- if (/^[│├└┌]|\|\s*[\w.]+\s*\|/.test(sample)) {
1244
- bump("tree_paths", 0.7);
1245
- }
1246
- if (/^\w+=[^\s]+$/m.test(sample) && sample.split("\n").length > 3) {
1247
- bump("key_value", 0.72);
1248
- }
1249
- // Ansible recap / task headers
1250
- if (/^PLAY RECAP/m.test(sample))
1251
- bump("log_text", 0.85);
1252
- if (/^(TASK|PLAY) \[/m.test(sample))
1253
- bump("log_text", 0.83);
1254
- // Terraform plan
1255
- if (/^(Plan:|Terraform will perform|# .+ will be)/m.test(sample))
1256
- bump("log_text", 0.8);
1257
- if (/^[~+\-] resource|^\s+\+ .+ = /m.test(sample))
1258
- bump("log_text", 0.78);
1259
- // Playwright tests
1260
- if (/\[(chromium|firefox|webkit)\]\s+›/.test(sample))
1261
- bump("test_results", 0.88);
1262
- // Generic: ✓/✗ with durations
1263
- if (/^\s*[✓✔✗✘×]\s+.+\(\d+m?s\)/m.test(sample))
1264
- bump("test_results", 0.82);
1265
- // kubectl describe (multi-field key: value)
1266
- {
1267
- const k8sFields = /^(Name|Namespace|Labels|Annotations|Status|Type|Containers|Volumes|Conditions|Events|Node|IP|Port):\s/m;
1268
- const k8sMatches = lines
1269
- .slice(0, 20)
1270
- .filter((l) => k8sFields.test(l)).length;
1271
- if (k8sMatches >= 4)
1272
- bump("key_value", 0.82);
1273
- }
1274
- // Docker compose progress
1275
- if (/^\[?\+?\]?\s*(Creating|Starting|Stopping|Removing|Running)\s+\S+\s*\.{3}/m.test(sample))
1276
- bump("log_text", 0.78);
1277
- // Shellcheck
1278
- if (/^In .+ line \d+:/m.test(sample))
1279
- bump("error_diagnostic", 0.88);
1280
- // Security scanner output (npm audit, snyk, trivy)
1281
- if (/\b(vulnerabilit|CVE-\d{4}|GHSA-|critical|moderate|high|low)\b/i.test(sample) &&
1282
- /\d+ (vulnerabilit|issue|finding)/i.test(sample))
1283
- bump("error_diagnostic", 0.8);
1284
- // systemd/systemctl status
1285
- if (/^\s*(Loaded|Active|Main PID|CGroup|Memory|CPU):/m.test(sample))
1286
- bump("key_value", 0.82);
1287
- // Cloud deploy progress
1288
- if (/\b(Deploying|Uploading|Provisioning|Creating stack|Updating stack)\b/i.test(sample))
1289
- bump("progress_streaming", 0.76);
1290
- return best;
1291
- }
1292
- /**
1293
- * Passthrough commands — these just display content from files/pipes,
1294
- * so the content itself is the real signal for classification.
1295
- * When content heuristic is strong (>= 0.85), it overrides these hints.
1296
- */
1297
- const PASSTHROUGH_COMMANDS = new Set([
1298
- "cat",
1299
- "tail",
1300
- "less",
1301
- "head",
1302
- "grep",
1303
- "rg",
1304
- "ag",
1305
- ]);
1306
- /**
1307
- * Classify shell stdout for compression strategy selection.
1308
- * Uses stripped (no ANSI) text for content phase.
1309
- */
1310
- export function classifyShellOutput(command, strippedStdout) {
1311
- const head = strippedStdout.split("\n").slice(0, 20);
1312
- const hint = matchCommandHint(command);
1313
- const content = scoreContent(head);
1314
- if (hint) {
1315
- const agree = content && content.category === hint.category;
1316
- // Passthrough commands (cat, tail, less, etc.) just display content —
1317
- // let strong content signals override when they disagree.
1318
- if (!agree &&
1319
- content &&
1320
- content.score >= 0.85 &&
1321
- PASSTHROUGH_COMMANDS.has(hint.key.split(" ")[0] ?? "")) {
1322
- return {
1323
- category: content.category,
1324
- confidence: content.score,
1325
- hint_source: "content_heuristic",
1326
- };
1327
- }
1328
- return {
1329
- category: hint.category,
1330
- confidence: agree ? CONFIDENCE_BOTH : CONFIDENCE_HINT,
1331
- hint_source: agree ? "both" : "command_name",
1332
- };
1333
- }
1334
- if (content) {
1335
- return {
1336
- category: content.category,
1337
- confidence: Math.min(0.88, content.score),
1338
- hint_source: "content_heuristic",
1339
- };
1340
- }
1341
- return {
1342
- category: "structured",
1343
- confidence: 0.42,
1344
- hint_source: "content_heuristic",
1345
- };
1346
- }