@zvec/zvec-grep 0.1.4 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (356) hide show
  1. package/README.md +86 -162
  2. package/README_CN.md +80 -162
  3. package/dist/authorization/index.d.ts +7 -0
  4. package/dist/authorization/index.js +7 -0
  5. package/dist/authorization/index.js.map +1 -0
  6. package/dist/authorization/manager.d.ts +8 -0
  7. package/dist/authorization/manager.js +19 -0
  8. package/dist/authorization/manager.js.map +1 -0
  9. package/dist/authorization/operation.d.ts +7 -0
  10. package/dist/authorization/operation.js +50 -0
  11. package/dist/authorization/operation.js.map +1 -0
  12. package/dist/authorization/planner.d.ts +21 -0
  13. package/dist/authorization/planner.js +97 -0
  14. package/dist/authorization/planner.js.map +1 -0
  15. package/dist/authorization/prompt.d.ts +11 -0
  16. package/dist/authorization/prompt.js +62 -0
  17. package/dist/authorization/prompt.js.map +1 -0
  18. package/dist/authorization/store.d.ts +20 -0
  19. package/dist/authorization/store.js +251 -0
  20. package/dist/authorization/store.js.map +1 -0
  21. package/dist/authorization/target.d.ts +15 -0
  22. package/dist/authorization/target.js +49 -0
  23. package/dist/authorization/target.js.map +1 -0
  24. package/dist/authorization/types.d.ts +61 -0
  25. package/dist/authorization/types.js +2 -0
  26. package/dist/authorization/types.js.map +1 -0
  27. package/dist/cli/args.d.ts +3 -0
  28. package/dist/cli/args.js +749 -201
  29. package/dist/cli/args.js.map +1 -1
  30. package/dist/cli/auth.d.ts +21 -0
  31. package/dist/cli/auth.js +212 -0
  32. package/dist/cli/auth.js.map +1 -0
  33. package/dist/cli/commands.d.ts +3 -1
  34. package/dist/cli/commands.js +529 -180
  35. package/dist/cli/commands.js.map +1 -1
  36. package/dist/cli/errors.js +7 -6
  37. package/dist/cli/errors.js.map +1 -1
  38. package/dist/cli/format/context.d.ts +1 -0
  39. package/dist/cli/format/context.js +270 -70
  40. package/dist/cli/format/context.js.map +1 -1
  41. package/dist/cli/format/debug.js +14 -16
  42. package/dist/cli/format/debug.js.map +1 -1
  43. package/dist/cli/format/highlight.js.map +1 -1
  44. package/dist/cli/format/progress.d.ts +4 -0
  45. package/dist/cli/format/progress.js +222 -44
  46. package/dist/cli/format/progress.js.map +1 -1
  47. package/dist/cli/format/range.js.map +1 -1
  48. package/dist/cli/format/status.d.ts +77 -6
  49. package/dist/cli/format/status.js +343 -114
  50. package/dist/cli/format/status.js.map +1 -1
  51. package/dist/cli/help.d.ts +1 -1
  52. package/dist/cli/help.js +368 -84
  53. package/dist/cli/help.js.map +1 -1
  54. package/dist/cli/index.js +4 -4
  55. package/dist/cli/index.js.map +1 -1
  56. package/dist/cli/install.d.ts +4 -0
  57. package/dist/cli/install.js +845 -0
  58. package/dist/cli/install.js.map +1 -0
  59. package/dist/cli/managed-rg.d.ts +10 -0
  60. package/dist/cli/managed-rg.js +329 -0
  61. package/dist/cli/managed-rg.js.map +1 -0
  62. package/dist/cli/types.d.ts +40 -13
  63. package/dist/cli/types.js.map +1 -1
  64. package/dist/cli/version.js +3 -1
  65. package/dist/cli/version.js.map +1 -1
  66. package/dist/client/daemon-client.d.ts +19 -0
  67. package/dist/client/daemon-client.js +180 -0
  68. package/dist/client/daemon-client.js.map +1 -0
  69. package/dist/client/mode-router.d.ts +9 -0
  70. package/dist/client/mode-router.js +28 -0
  71. package/dist/client/mode-router.js.map +1 -0
  72. package/dist/client/search-policy.d.ts +11 -0
  73. package/dist/client/search-policy.js +15 -0
  74. package/dist/client/search-policy.js.map +1 -0
  75. package/dist/daemon/backend.d.ts +76 -0
  76. package/dist/daemon/backend.js +1049 -0
  77. package/dist/daemon/backend.js.map +1 -0
  78. package/dist/daemon/change-set.d.ts +25 -0
  79. package/dist/daemon/change-set.js +101 -0
  80. package/dist/daemon/change-set.js.map +1 -0
  81. package/dist/daemon/config.d.ts +24 -0
  82. package/dist/daemon/config.js +88 -0
  83. package/dist/daemon/config.js.map +1 -0
  84. package/dist/daemon/errors.d.ts +5 -0
  85. package/dist/daemon/errors.js +11 -0
  86. package/dist/daemon/errors.js.map +1 -0
  87. package/dist/daemon/http-server.d.ts +30 -0
  88. package/dist/daemon/http-server.js +287 -0
  89. package/dist/daemon/http-server.js.map +1 -0
  90. package/dist/daemon/index-coordinator.d.ts +23 -0
  91. package/dist/daemon/index-coordinator.js +68 -0
  92. package/dist/daemon/index-coordinator.js.map +1 -0
  93. package/dist/daemon/job-scheduler.d.ts +70 -0
  94. package/dist/daemon/job-scheduler.js +366 -0
  95. package/dist/daemon/job-scheduler.js.map +1 -0
  96. package/dist/daemon/logger.d.ts +9 -0
  97. package/dist/daemon/logger.js +53 -0
  98. package/dist/daemon/logger.js.map +1 -0
  99. package/dist/daemon/model-pool.d.ts +45 -0
  100. package/dist/daemon/model-pool.js +187 -0
  101. package/dist/daemon/model-pool.js.map +1 -0
  102. package/dist/daemon/root-lease.d.ts +14 -0
  103. package/dist/daemon/root-lease.js +188 -0
  104. package/dist/daemon/root-lease.js.map +1 -0
  105. package/dist/daemon/root-runtime.d.ts +78 -0
  106. package/dist/daemon/root-runtime.js +333 -0
  107. package/dist/daemon/root-runtime.js.map +1 -0
  108. package/dist/daemon/runtime-manager.d.ts +45 -0
  109. package/dist/daemon/runtime-manager.js +243 -0
  110. package/dist/daemon/runtime-manager.js.map +1 -0
  111. package/dist/daemon/runtime.d.ts +12 -0
  112. package/dist/daemon/runtime.js +102 -0
  113. package/dist/daemon/runtime.js.map +1 -0
  114. package/dist/daemon/server-controller.d.ts +39 -0
  115. package/dist/daemon/server-controller.js +203 -0
  116. package/dist/daemon/server-controller.js.map +1 -0
  117. package/dist/daemon/watch-manager.d.ts +50 -0
  118. package/dist/daemon/watch-manager.js +293 -0
  119. package/dist/daemon/watch-manager.js.map +1 -0
  120. package/dist/daemon/workspace-read-session-cache.d.ts +31 -0
  121. package/dist/daemon/workspace-read-session-cache.js +115 -0
  122. package/dist/daemon/workspace-read-session-cache.js.map +1 -0
  123. package/dist/engine/config.d.ts +50 -0
  124. package/dist/engine/config.js +321 -0
  125. package/dist/engine/config.js.map +1 -0
  126. package/dist/engine/{errors/index.d.ts → errors.d.ts} +6 -1
  127. package/dist/engine/{errors/details.js → errors.js} +17 -4
  128. package/dist/engine/errors.js.map +1 -0
  129. package/dist/engine/extraction/code/adapter.d.ts +1 -1
  130. package/dist/engine/extraction/code/adapter.js.map +1 -1
  131. package/dist/engine/extraction/code/extractor.d.ts +5 -11
  132. package/dist/engine/extraction/code/extractor.js +184 -109
  133. package/dist/engine/extraction/code/extractor.js.map +1 -1
  134. package/dist/engine/extraction/code/families/c-family.js +13 -7
  135. package/dist/engine/extraction/code/families/c-family.js.map +1 -1
  136. package/dist/engine/extraction/code/families/js-ts.d.ts +1 -1
  137. package/dist/engine/extraction/code/families/js-ts.js +24 -18
  138. package/dist/engine/extraction/code/families/js-ts.js.map +1 -1
  139. package/dist/engine/extraction/code/families/metadata.d.ts +1 -1
  140. package/dist/engine/extraction/code/families/metadata.js +11 -8
  141. package/dist/engine/extraction/code/families/metadata.js.map +1 -1
  142. package/dist/engine/extraction/code/families/name-field.js +5 -5
  143. package/dist/engine/extraction/code/families/name-field.js.map +1 -1
  144. package/dist/engine/extraction/code/languages/c.js +1 -4
  145. package/dist/engine/extraction/code/languages/c.js.map +1 -1
  146. package/dist/engine/extraction/code/languages/cpp.js.map +1 -1
  147. package/dist/engine/extraction/code/languages/go.js +1 -3
  148. package/dist/engine/extraction/code/languages/go.js.map +1 -1
  149. package/dist/engine/extraction/code/languages/java.js.map +1 -1
  150. package/dist/engine/extraction/code/languages/javascript.js +1 -3
  151. package/dist/engine/extraction/code/languages/javascript.js.map +1 -1
  152. package/dist/engine/extraction/code/languages/python.js +5 -6
  153. package/dist/engine/extraction/code/languages/python.js.map +1 -1
  154. package/dist/engine/extraction/code/languages/rust.js +1 -5
  155. package/dist/engine/extraction/code/languages/rust.js.map +1 -1
  156. package/dist/engine/extraction/code/languages/typescript.js.map +1 -1
  157. package/dist/engine/extraction/code/tree-sitter/grammar.js.map +1 -0
  158. package/dist/engine/extraction/{tree-sitter → code/tree-sitter}/nodes.js +2 -1
  159. package/dist/engine/extraction/code/tree-sitter/nodes.js.map +1 -0
  160. package/dist/engine/extraction/code/tree-sitter/parser.js.map +1 -0
  161. package/dist/engine/extraction/ids.js.map +1 -1
  162. package/dist/engine/extraction/image/extractor.d.ts +5 -0
  163. package/dist/engine/extraction/image/extractor.js +35 -0
  164. package/dist/engine/extraction/image/extractor.js.map +1 -0
  165. package/dist/engine/extraction/index.d.ts +3 -44
  166. package/dist/engine/extraction/index.js +1 -280
  167. package/dist/engine/extraction/index.js.map +1 -1
  168. package/dist/engine/extraction/markdown/extractor.d.ts +5 -11
  169. package/dist/engine/extraction/markdown/extractor.js +37 -16
  170. package/dist/engine/extraction/markdown/extractor.js.map +1 -1
  171. package/dist/engine/extraction/runtime.d.ts +4 -0
  172. package/dist/engine/extraction/runtime.js +26 -0
  173. package/dist/engine/extraction/runtime.js.map +1 -0
  174. package/dist/engine/extraction/source.d.ts +18 -0
  175. package/dist/engine/extraction/source.js +22 -0
  176. package/dist/engine/extraction/source.js.map +1 -0
  177. package/dist/engine/extraction/text/extractor.d.ts +7 -0
  178. package/dist/engine/extraction/text/extractor.js +168 -0
  179. package/dist/engine/extraction/text/extractor.js.map +1 -0
  180. package/dist/engine/extraction/types.d.ts +4 -0
  181. package/dist/engine/{models → extraction}/types.js.map +1 -1
  182. package/dist/engine/{files/file-type.d.ts → file-type.d.ts} +1 -1
  183. package/dist/engine/file-type.js.map +1 -0
  184. package/dist/engine/index-status.d.ts +9 -0
  185. package/dist/engine/index-status.js +38 -0
  186. package/dist/engine/index-status.js.map +1 -0
  187. package/dist/engine/manifest.d.ts +12 -0
  188. package/dist/engine/manifest.js +120 -0
  189. package/dist/engine/manifest.js.map +1 -0
  190. package/dist/engine/models/{providers/llama-cpp/embedding.d.ts → backends/llama-cpp.d.ts} +25 -20
  191. package/dist/engine/models/{providers/llama-cpp/embedding.js → backends/llama-cpp.js} +165 -113
  192. package/dist/engine/models/backends/llama-cpp.js.map +1 -0
  193. package/dist/engine/models/backends/model2vec.d.ts +57 -0
  194. package/dist/engine/models/backends/model2vec.js +332 -0
  195. package/dist/engine/models/backends/model2vec.js.map +1 -0
  196. package/dist/engine/models/backends/qwen.d.ts +44 -0
  197. package/dist/engine/models/{providers/qwen/embedding.js → backends/qwen.js} +168 -102
  198. package/dist/engine/models/backends/qwen.js.map +1 -0
  199. package/dist/engine/models/backends/transformers-js.d.ts +87 -0
  200. package/dist/engine/models/backends/transformers-js.js +316 -0
  201. package/dist/engine/models/backends/transformers-js.js.map +1 -0
  202. package/dist/engine/models/catalog.d.ts +188 -23
  203. package/dist/engine/models/catalog.js +172 -41
  204. package/dist/engine/models/catalog.js.map +1 -1
  205. package/dist/engine/models/download-progress.d.ts +15 -0
  206. package/dist/engine/models/download-progress.js +48 -0
  207. package/dist/engine/models/download-progress.js.map +1 -0
  208. package/dist/engine/models/embeddings.d.ts +58 -18
  209. package/dist/engine/models/embeddings.js +53 -29
  210. package/dist/engine/models/embeddings.js.map +1 -1
  211. package/dist/engine/models/factory.d.ts +2 -5
  212. package/dist/engine/models/factory.js +41 -56
  213. package/dist/engine/models/factory.js.map +1 -1
  214. package/dist/engine/models/index.d.ts +4 -6
  215. package/dist/engine/models/index.js +4 -4
  216. package/dist/engine/models/index.js.map +1 -1
  217. package/dist/engine/models/ranking.d.ts +7 -3
  218. package/dist/engine/models/resolution.d.ts +8 -0
  219. package/dist/engine/models/resolution.js +22 -0
  220. package/dist/engine/models/resolution.js.map +1 -0
  221. package/dist/engine/pipeline/indexing/index.d.ts +9 -7
  222. package/dist/engine/pipeline/indexing/index.js +399 -147
  223. package/dist/engine/pipeline/indexing/index.js.map +1 -1
  224. package/dist/engine/pipeline/indexing/root-paths.js +16 -19
  225. package/dist/engine/pipeline/indexing/root-paths.js.map +1 -1
  226. package/dist/engine/pipeline/indexing/scanner/index.d.ts +6 -1
  227. package/dist/engine/pipeline/indexing/scanner/index.js +318 -66
  228. package/dist/engine/pipeline/indexing/scanner/index.js.map +1 -1
  229. package/dist/engine/pipeline/search/index.d.ts +6 -6
  230. package/dist/engine/pipeline/search/index.js +76 -34
  231. package/dist/engine/pipeline/search/index.js.map +1 -1
  232. package/dist/engine/service/index.d.ts +3 -2
  233. package/dist/engine/service/index.js +1 -1
  234. package/dist/engine/service/index.js.map +1 -1
  235. package/dist/engine/service/lexical.d.ts +14 -15
  236. package/dist/engine/service/lexical.js +78 -119
  237. package/dist/engine/service/lexical.js.map +1 -1
  238. package/dist/engine/service/root.d.ts +13 -12
  239. package/dist/engine/service/root.js +35 -24
  240. package/dist/engine/service/root.js.map +1 -1
  241. package/dist/engine/service/structure-enrichment.js +29 -25
  242. package/dist/engine/service/structure-enrichment.js.map +1 -1
  243. package/dist/engine/service/types.d.ts +61 -35
  244. package/dist/engine/service/workspace-index.d.ts +24 -0
  245. package/dist/engine/service/workspace-index.js +151 -0
  246. package/dist/engine/service/workspace-index.js.map +1 -0
  247. package/dist/engine/service/zvec-grep.d.ts +12 -1
  248. package/dist/engine/service/zvec-grep.js +878 -544
  249. package/dist/engine/service/zvec-grep.js.map +1 -1
  250. package/dist/engine/storage/index.d.ts +8 -4
  251. package/dist/engine/storage/index.js +1 -1
  252. package/dist/engine/storage/index.js.map +1 -1
  253. package/dist/engine/storage/zvec.d.ts +10 -33
  254. package/dist/engine/storage/zvec.js +110 -49
  255. package/dist/engine/storage/zvec.js.map +1 -1
  256. package/dist/engine/types.d.ts +29 -23
  257. package/dist/engine/types.js +1 -1
  258. package/dist/engine/types.js.map +1 -1
  259. package/dist/engine/utils/daemon-lease.d.ts +17 -0
  260. package/dist/engine/utils/daemon-lease.js +175 -0
  261. package/dist/engine/utils/daemon-lease.js.map +1 -0
  262. package/dist/engine/utils/file-selection.d.ts +10 -0
  263. package/dist/engine/utils/file-selection.js +157 -0
  264. package/dist/engine/utils/file-selection.js.map +1 -0
  265. package/dist/engine/utils/glob.d.ts +3 -0
  266. package/dist/engine/utils/glob.js +116 -18
  267. package/dist/engine/utils/glob.js.map +1 -1
  268. package/dist/engine/utils/hash.js.map +1 -1
  269. package/dist/engine/utils/json.d.ts +6 -2
  270. package/dist/engine/utils/json.js +50 -12
  271. package/dist/engine/utils/json.js.map +1 -1
  272. package/dist/engine/utils/lock.js +7 -7
  273. package/dist/engine/utils/lock.js.map +1 -1
  274. package/dist/engine/utils/path.js +2 -2
  275. package/dist/engine/utils/path.js.map +1 -1
  276. package/dist/engine/utils/timing.js.map +1 -1
  277. package/dist/index-progress.d.ts +10 -0
  278. package/dist/index-progress.js +159 -0
  279. package/dist/index-progress.js.map +1 -0
  280. package/dist/index.d.ts +6 -6
  281. package/dist/index.js +3 -3
  282. package/dist/index.js.map +1 -1
  283. package/dist/mcp/http-transport.d.ts +27 -0
  284. package/dist/mcp/http-transport.js +182 -0
  285. package/dist/mcp/http-transport.js.map +1 -0
  286. package/dist/mcp/input-normalization.d.ts +38 -0
  287. package/dist/mcp/input-normalization.js +95 -0
  288. package/dist/mcp/input-normalization.js.map +1 -0
  289. package/dist/mcp/progress-heartbeat.d.ts +17 -0
  290. package/dist/mcp/progress-heartbeat.js +46 -0
  291. package/dist/mcp/progress-heartbeat.js.map +1 -0
  292. package/dist/mcp/request-metadata.d.ts +2 -0
  293. package/dist/mcp/request-metadata.js +11 -0
  294. package/dist/mcp/request-metadata.js.map +1 -0
  295. package/dist/mcp/request-state.d.ts +40 -0
  296. package/dist/mcp/request-state.js +210 -0
  297. package/dist/mcp/request-state.js.map +1 -0
  298. package/dist/mcp/result-format.d.ts +13 -0
  299. package/dist/mcp/result-format.js +75 -0
  300. package/dist/mcp/result-format.js.map +1 -0
  301. package/dist/mcp/schemas.d.ts +430 -0
  302. package/dist/mcp/schemas.js +447 -0
  303. package/dist/mcp/schemas.js.map +1 -0
  304. package/dist/mcp/tools.d.ts +150 -0
  305. package/dist/mcp/tools.js +448 -0
  306. package/dist/mcp/tools.js.map +1 -0
  307. package/dist/mcp/toolset.d.ts +5 -0
  308. package/dist/mcp/toolset.js +12 -0
  309. package/dist/mcp/toolset.js.map +1 -0
  310. package/dist/observability/trace-context.d.ts +11 -0
  311. package/dist/observability/trace-context.js +138 -0
  312. package/dist/observability/trace-context.js.map +1 -0
  313. package/docs/01-agents.md +111 -0
  314. package/docs/02-cli.md +229 -0
  315. package/docs/03-mcp.md +167 -0
  316. package/docs/04-pipeline.md +218 -0
  317. package/docs/05-architecture.md +86 -0
  318. package/docs/06-server.md +210 -0
  319. package/docs/07-embedding.md +179 -0
  320. package/docs/08-roadmap.md +85 -0
  321. package/docs/README.md +53 -0
  322. package/package.json +43 -7
  323. package/skills/zvec-grep/SKILL.md +43 -123
  324. package/skills/zvec-grep/agents/openai.yaml +2 -2
  325. package/skills/zvec-grep/references/cli-fallback.md +85 -0
  326. package/dist/engine/collection/index.d.ts +0 -55
  327. package/dist/engine/collection/index.js +0 -710
  328. package/dist/engine/collection/index.js.map +0 -1
  329. package/dist/engine/errors/details.d.ts +0 -6
  330. package/dist/engine/errors/details.js.map +0 -1
  331. package/dist/engine/errors/index.js +0 -16
  332. package/dist/engine/errors/index.js.map +0 -1
  333. package/dist/engine/extraction/tree-sitter/grammar.js.map +0 -1
  334. package/dist/engine/extraction/tree-sitter/nodes.js.map +0 -1
  335. package/dist/engine/extraction/tree-sitter/parser.js.map +0 -1
  336. package/dist/engine/files/file-type.js.map +0 -1
  337. package/dist/engine/models/providers/index.d.ts +0 -2
  338. package/dist/engine/models/providers/index.js +0 -3
  339. package/dist/engine/models/providers/index.js.map +0 -1
  340. package/dist/engine/models/providers/llama-cpp/embedding.js.map +0 -1
  341. package/dist/engine/models/providers/llama-cpp/index.d.ts +0 -1
  342. package/dist/engine/models/providers/llama-cpp/index.js +0 -2
  343. package/dist/engine/models/providers/llama-cpp/index.js.map +0 -1
  344. package/dist/engine/models/providers/qwen/embedding.d.ts +0 -42
  345. package/dist/engine/models/providers/qwen/embedding.js.map +0 -1
  346. package/dist/engine/models/providers/qwen/index.d.ts +0 -1
  347. package/dist/engine/models/providers/qwen/index.js +0 -2
  348. package/dist/engine/models/providers/qwen/index.js.map +0 -1
  349. package/dist/engine/models/types.d.ts +0 -30
  350. /package/dist/engine/extraction/{tree-sitter → code/tree-sitter}/grammar.d.ts +0 -0
  351. /package/dist/engine/extraction/{tree-sitter → code/tree-sitter}/grammar.js +0 -0
  352. /package/dist/engine/extraction/{tree-sitter → code/tree-sitter}/nodes.d.ts +0 -0
  353. /package/dist/engine/extraction/{tree-sitter → code/tree-sitter}/parser.d.ts +0 -0
  354. /package/dist/engine/extraction/{tree-sitter → code/tree-sitter}/parser.js +0 -0
  355. /package/dist/engine/{models → extraction}/types.js +0 -0
  356. /package/dist/engine/{files/file-type.js → file-type.js} +0 -0
@@ -1,8 +1,79 @@
1
- import type { CollectionIndexStatus, CollectionInfo, IndexResult, ZvecGrepInfoResult } from "../../index.js";
1
+ import type { WorkspaceIndexInfo, IndexResult, ZvecGrepInfoResult } from "../../index.js";
2
+ import type { RemoteEmbeddingAuthorizationStatus } from "../../authorization/types.js";
2
3
  import type { CliOptions } from "../types.js";
3
- export declare function printCollectionList(collections: readonly CollectionInfo[], options: CliOptions): void;
4
- export declare function printCollectionInfo(info: CollectionInfo, status: CollectionIndexStatus | null, options: CliOptions): void;
5
- export declare function printAnonymousInfo(info: ZvecGrepInfoResult, options: CliOptions): void;
6
- export declare function printIndexResult(label: string, result: IndexResult, options: CliOptions, rootPaths?: CollectionInfo["rootPaths"]): void;
4
+ export type WorkspaceIndexState = "ready" | "indexing" | "stale" | "failed" | "cancelled" | "disabled" | "unindexed" | "undecided";
5
+ type ServerRootPath = {
6
+ absolute_path: string;
7
+ recursive: boolean;
8
+ include?: string[];
9
+ exclude?: string[];
10
+ globs?: string[];
11
+ insensitive_globs?: string[];
12
+ file_types?: string[];
13
+ excluded_file_types?: string[];
14
+ hidden?: boolean;
15
+ no_ignore?: boolean;
16
+ ignore_files?: string[];
17
+ max_depth?: number;
18
+ max_file_size_bytes?: number;
19
+ follow?: boolean;
20
+ };
21
+ type ServerIndexInfo = {
22
+ root: string;
23
+ indexed: boolean;
24
+ index_policy: "enabled" | "disabled" | "undecided";
25
+ source: "index" | "unindexed";
26
+ persistent: {
27
+ home: string;
28
+ index_path: string;
29
+ workspace_index?: {
30
+ root_paths: ServerRootPath[];
31
+ embedding?: {
32
+ provider: string;
33
+ model: string;
34
+ dimension: number;
35
+ metric: string;
36
+ } | null;
37
+ };
38
+ files?: {
39
+ stored: number;
40
+ scanned?: number;
41
+ indexed: number;
42
+ pending: number;
43
+ failed: number;
44
+ added: number;
45
+ modified: number;
46
+ deleted: number;
47
+ unchanged: number;
48
+ entities: number;
49
+ truncated_fragments?: number;
50
+ };
51
+ suggestion?: string;
52
+ };
53
+ runtime?: {
54
+ watcher_active?: boolean;
55
+ dirty_revision?: number;
56
+ indexed_revision?: number;
57
+ active_job_id?: string;
58
+ job_state?: "queued" | "running" | "succeeded" | "failed" | "cancelled";
59
+ progress?: {
60
+ files_total?: number;
61
+ files_indexed?: number;
62
+ files_failed?: number;
63
+ };
64
+ completion?: {
65
+ completed: number;
66
+ total: number;
67
+ };
68
+ error?: {
69
+ code: string;
70
+ message: string;
71
+ };
72
+ };
73
+ };
74
+ export declare function printRemoteEmbeddingAuthorizationStatus(root: string, status: RemoteEmbeddingAuthorizationStatus, options: CliOptions): void;
75
+ export declare function printWorkspaceInfo(info: ZvecGrepInfoResult, options: CliOptions): WorkspaceIndexState;
76
+ export declare function printServerIndexInfo(info: ServerIndexInfo, options: CliOptions): WorkspaceIndexState;
77
+ export declare function printIndexResult(label: string, result: IndexResult, options: CliOptions, rootPaths?: WorkspaceIndexInfo["rootPaths"]): void;
7
78
  export declare function printIndexPathFilterTip(options: CliOptions): void;
8
- export declare function printCollectionRemoveResult(name: string, removed: boolean, options: CliOptions): void;
79
+ export {};
@@ -1,80 +1,319 @@
1
+ import { homedir } from "node:os";
2
+ import { isAbsolute, relative, sep } from "node:path";
1
3
  import { shouldUseColor } from "./highlight.js";
2
- export function printCollectionList(collections, options) {
4
+ import { formatGreenProgressBar } from "./progress.js";
5
+ import { indexCompletionFromStatus, indexStatusNeedsRefresh as statusNeedsRefresh, } from "../../engine/index-status.js";
6
+ export function printRemoteEmbeddingAuthorizationStatus(root, status, options) {
3
7
  const theme = createStatusTheme(options);
4
- for (const collection of collections) {
5
- const roots = collection.rootPaths.map(formatRootPath).join(", ");
6
- console.log(`${theme.accent(collection.name)}\t${theme.path(roots)}`);
8
+ const validGrants = status.grants.filter((grant) => grant.valid);
9
+ if (status.grants.length === 0) {
10
+ console.log(theme.warning("○ Remote Embedding is not authorized"));
7
11
  }
8
- }
9
- export function printCollectionInfo(info, status, options) {
10
- const theme = createStatusTheme(options);
11
- printField(theme, "name", theme.accent(info.name));
12
- printField(theme, "id", info.id);
13
- printField(theme, "path", theme.path(info.path));
14
- printField(theme, "policy", info.indexPolicy ?? "enabled");
15
- if (info.embedding) {
16
- printField(theme, "embedding", `${info.embedding.provider}/${info.embedding.model}`);
12
+ else if (validGrants.length === status.grants.length) {
13
+ console.log(theme.success("✓ Remote Embedding is authorized"));
14
+ }
15
+ else if (validGrants.length === 0) {
16
+ console.log(theme.danger("✗ Remote Embedding authorization is invalid"));
17
17
  }
18
18
  else {
19
- printField(theme, "embedding", theme.warning("none"));
19
+ console.log(theme.warning("! Remote Embedding authorization needs attention"));
20
20
  }
21
- printField(theme, "roots", theme.path(info.rootPaths.map(formatRootPath).join(", ")));
22
- if (status) {
23
- printIndexStatus(theme, status);
24
- if (statusNeedsRefresh(status)) {
25
- printField(theme, "suggestion", theme.accent(`zg --collections index ${shellArg(info.name)}`));
21
+ console.log(` ${theme.path(formatDisplayPath(root))}`);
22
+ if (status.grants.length === 0) {
23
+ console.log("");
24
+ console.log(theme.accent("Run"));
25
+ console.log(` ${theme.path("zg auth grant --capability embedding --scope workspace")}`);
26
+ return;
27
+ }
28
+ console.log("");
29
+ console.log(theme.accent("Authorization"));
30
+ status.grants.forEach((grant, index) => {
31
+ if (index > 0)
32
+ console.log("");
33
+ for (const line of formatStatusField(theme, "Scope", grant.valid
34
+ ? theme.success("Workspace")
35
+ : theme.danger("Invalid Workspace grant"))) {
36
+ console.log(line);
37
+ }
38
+ for (const line of formatStatusField(theme, "Target", `${grant.provider}/${grant.model}`)) {
39
+ console.log(line);
26
40
  }
27
- printFailedFilesNote(theme, status, `zg --collections index ${shellArg(info.name)}`);
41
+ for (const line of formatStatusField(theme, "Endpoint", formatEndpointHost(grant.endpoint))) {
42
+ console.log(line);
43
+ }
44
+ });
45
+ console.log("");
46
+ console.log(theme.accent("Storage"));
47
+ for (const line of formatStatusField(theme, "Grant", theme.path(formatStoragePath(status.path, root)))) {
48
+ console.log(line);
28
49
  }
29
50
  }
30
- export function printAnonymousInfo(info, options) {
51
+ export function printWorkspaceInfo(info, options) {
52
+ const theme = createStatusTheme(options);
53
+ const status = info.status ?? undefined;
54
+ const completion = indexCompletionFromStatus(status);
55
+ const suggestion = status && statusNeedsRefresh(status) ? "zg index" : info.suggestion;
56
+ const state = workspaceState(info);
57
+ printWorkspaceIndexStatus(theme, {
58
+ root: info.root,
59
+ indexPath: info.indexPath,
60
+ policy: info.indexPolicy,
61
+ state,
62
+ embedding: info.workspaceIndex?.embedding,
63
+ roots: info.workspaceIndex?.rootPaths,
64
+ files: status
65
+ ? {
66
+ indexed: completion?.completed ?? 0,
67
+ total: completion?.total ?? 0,
68
+ entities: status.entitiesIndexed ?? 0,
69
+ truncated: status.fragmentsTruncated ?? 0,
70
+ pending: status.filesPending,
71
+ failed: status.filesFailed,
72
+ }
73
+ : undefined,
74
+ changes: status
75
+ ? {
76
+ added: status.filesAdded,
77
+ modified: status.filesModified,
78
+ deleted: status.filesDeleted,
79
+ }
80
+ : undefined,
81
+ suggestion,
82
+ failedReasons: status
83
+ ? summarizeFailedFileReasons(status.failedFiles, "zg index")
84
+ : undefined,
85
+ });
86
+ return state;
87
+ }
88
+ export function printServerIndexInfo(info, options) {
31
89
  const theme = createStatusTheme(options);
32
- printField(theme, "root", theme.path(info.root));
33
- printField(theme, "policy", info.indexPolicy);
34
- printField(theme, "indexed", info.indexed ? theme.success("yes") : theme.warning("no"));
35
- printField(theme, "state", formatAnonymousState(theme, info));
36
- printField(theme, "source", info.source === "index" ? theme.success(info.source) : theme.warning(info.source));
37
- printField(theme, "home", theme.path(info.home));
38
- printField(theme, "index", theme.path(info.indexPath));
39
- if (info.collection?.embedding) {
40
- printField(theme, "embedding", `${info.collection.embedding.provider}/${info.collection.embedding.model}`);
41
- printField(theme, "dimension", String(info.collection.embedding.dimension));
42
- printField(theme, "metric", info.collection.embedding.metric);
90
+ const state = serverIndexState(info);
91
+ const embedding = info.persistent.workspace_index?.embedding;
92
+ const roots = info.persistent.workspace_index?.root_paths.map(mapServerRootPath);
93
+ const files = info.persistent.files;
94
+ const completion = info.runtime?.completion;
95
+ printWorkspaceIndexStatus(theme, {
96
+ root: info.root,
97
+ indexPath: info.persistent.index_path,
98
+ policy: info.index_policy,
99
+ state,
100
+ embedding,
101
+ roots,
102
+ files: files
103
+ ? {
104
+ indexed: completion?.completed ?? files.unchanged,
105
+ total: completion?.total ??
106
+ files.scanned ??
107
+ Math.max(0, files.stored + files.added - files.deleted),
108
+ entities: files.entities,
109
+ truncated: files.truncated_fragments ?? 0,
110
+ pending: files.pending,
111
+ failed: info.runtime?.progress?.files_failed ?? files.failed,
112
+ }
113
+ : undefined,
114
+ changes: files
115
+ ? {
116
+ added: files.added,
117
+ modified: files.modified,
118
+ deleted: files.deleted,
119
+ }
120
+ : undefined,
121
+ suggestion: info.persistent.suggestion,
122
+ error: info.runtime?.error,
123
+ });
124
+ return state;
125
+ }
126
+ function printWorkspaceIndexStatus(theme, view) {
127
+ console.log(formatWorkspaceStatusHeading(theme, view.state));
128
+ console.log(` ${theme.path(formatDisplayPath(view.root))}`);
129
+ const sections = [];
130
+ if (view.files) {
131
+ const { indexed, total, entities, truncated, pending, failed } = view.files;
132
+ const percent = total === 0
133
+ ? 0
134
+ : Math.min(100, Math.round((Math.max(indexed, 0) / total) * 100));
135
+ const bar = formatGreenProgressBar(indexed, total, 20, theme.color);
136
+ const summary = [
137
+ ...formatStatusField(theme, "Coverage", `${bar} ${String(percent).padStart(3)}% ${formatCount(indexed)} / ${formatCount(total)} files`),
138
+ ...formatStatusField(theme, "Entities", formatCount(entities)),
139
+ ...formatStatusField(theme, "Truncated", truncated > 0
140
+ ? theme.warning(`${formatCount(truncated)} fragments`)
141
+ : theme.muted("0 fragments")),
142
+ ...formatStatusField(theme, "Queue", `${statusCount(theme, pending, "pending", "warning")} ${theme.muted("·")} ${statusCount(theme, failed, "failed", "danger")}`),
143
+ ];
144
+ if (view.changes && changedTotal(view.changes) > 0) {
145
+ summary.push(...formatStatusField(theme, "Changes", `${theme.warning(`${formatCount(view.changes.added)} added`)} ${theme.muted("·")} ${theme.warning(`${formatCount(view.changes.modified)} modified`)} ${theme.muted("·")} ${theme.warning(`${formatCount(view.changes.deleted)} deleted`)}`));
146
+ }
147
+ sections.push(summary);
148
+ }
149
+ if (view.embedding !== undefined) {
150
+ sections.push(formatStatusField(theme, "Embedding", view.embedding
151
+ ? [
152
+ `${view.embedding.provider}/${view.embedding.model}`,
153
+ `${formatCount(view.embedding.dimension)} dimensions ${theme.muted("·")} ${view.embedding.metric}`,
154
+ ]
155
+ : theme.warning("Not configured")));
43
156
  }
44
- else if (info.collection) {
45
- printField(theme, "embedding", theme.warning("none"));
157
+ const storage = formatStatusField(theme, "Storage", theme.path(formatStoragePath(view.indexPath, view.root)));
158
+ if (view.roots && shouldShowRoots(view.root, view.roots)) {
159
+ storage.push(...formatStatusField(theme, "Roots", view.roots.map((root) => theme.path(formatDisplayRootPath(root)))));
46
160
  }
47
- if (info.collection) {
48
- printField(theme, "roots", theme.path(info.collection.rootPaths.map(formatRootPath).join(", ")));
161
+ if (view.policy !== "enabled") {
162
+ storage.push(...formatStatusField(theme, "Policy", view.policy === "disabled"
163
+ ? theme.warning(view.policy)
164
+ : theme.muted(view.policy)));
49
165
  }
50
- if (info.status) {
51
- printIndexStatus(theme, info.status);
166
+ sections.push(storage);
167
+ const diagnostics = [];
168
+ if (view.error) {
169
+ diagnostics.push(...formatStatusField(theme, "Error", [
170
+ theme.danger(view.error.code),
171
+ theme.danger(view.error.message),
172
+ ]));
52
173
  }
53
- const suggestion = info.status && statusNeedsRefresh(info.status)
54
- ? "zg --index"
55
- : info.suggestion;
56
- if (suggestion) {
57
- printField(theme, "suggestion", theme.accent(suggestion));
174
+ if (view.failedReasons) {
175
+ diagnostics.push(...formatStatusField(theme, "Problem", theme.danger(view.failedReasons)));
58
176
  }
59
- if (info.status) {
60
- printFailedFilesNote(theme, info.status, "zg --index");
177
+ if (view.suggestion) {
178
+ diagnostics.push(...formatStatusField(theme, "Next", theme.accent(view.suggestion)));
61
179
  }
180
+ if (diagnostics.length > 0) {
181
+ sections.push(diagnostics);
182
+ }
183
+ for (const section of sections) {
184
+ if (section.length === 0)
185
+ continue;
186
+ console.log("");
187
+ for (const line of section)
188
+ console.log(line);
189
+ }
190
+ }
191
+ function formatWorkspaceStatusHeading(theme, state) {
192
+ switch (state) {
193
+ case "ready":
194
+ return theme.success("✓ Workspace index is ready");
195
+ case "indexing":
196
+ return theme.warning("◐ Workspace index is updating");
197
+ case "stale":
198
+ return theme.warning("! Workspace index needs an update");
199
+ case "failed":
200
+ return theme.danger("✗ Workspace index failed");
201
+ case "cancelled":
202
+ return theme.warning("! Workspace index update was cancelled");
203
+ case "disabled":
204
+ return theme.warning("○ Workspace indexing is disabled");
205
+ case "unindexed":
206
+ return theme.warning("○ Workspace index is not created");
207
+ case "undecided":
208
+ return theme.warning("? Workspace index is not configured");
209
+ }
210
+ }
211
+ function formatStatusField(theme, label, value) {
212
+ const values = typeof value === "string" ? [value] : value;
213
+ const labelWidth = 12;
214
+ const continuation = ` ${" ".repeat(labelWidth)}`;
215
+ return values.map((line, index) => index === 0
216
+ ? ` ${theme.label(label.padEnd(labelWidth))}${line}`
217
+ : `${continuation}${line}`);
218
+ }
219
+ function statusCount(theme, count, label, tone) {
220
+ const value = `${formatCount(count)} ${label}`;
221
+ return count > 0 ? theme[tone](value) : theme.muted(value);
62
222
  }
63
- function formatAnonymousState(theme, info) {
64
- const state = anonymousState(info);
65
- if (state === "ready") {
66
- return theme.success(state);
223
+ function changedTotal(changes) {
224
+ return changes.added + changes.modified + changes.deleted;
225
+ }
226
+ function serverIndexState(info) {
227
+ if (info.index_policy === "disabled")
228
+ return "disabled";
229
+ if (info.runtime?.job_state === "failed" || info.runtime?.error) {
230
+ return "failed";
67
231
  }
68
- if (state === "failed") {
69
- return theme.danger(state);
232
+ if (info.runtime?.job_state === "cancelled")
233
+ return "cancelled";
234
+ if (info.runtime?.job_state === "queued" ||
235
+ info.runtime?.job_state === "running") {
236
+ return "indexing";
70
237
  }
71
- return theme.warning(state);
238
+ if (info.runtime?.dirty_revision !== undefined &&
239
+ info.runtime.indexed_revision !== undefined &&
240
+ info.runtime.dirty_revision > info.runtime.indexed_revision) {
241
+ return "stale";
242
+ }
243
+ if ((info.persistent.files?.failed ?? 0) > 0)
244
+ return "failed";
245
+ if ((info.persistent.files?.pending ?? 0) > 0 ||
246
+ serverChangedTotal(info.persistent.files) > 0) {
247
+ return "stale";
248
+ }
249
+ if (info.indexed)
250
+ return "ready";
251
+ return info.index_policy === "undecided" ? "undecided" : "unindexed";
252
+ }
253
+ function serverChangedTotal(files) {
254
+ return (files?.added ?? 0) + (files?.modified ?? 0) + (files?.deleted ?? 0);
255
+ }
256
+ function mapServerRootPath(root) {
257
+ return {
258
+ absolutePath: root.absolute_path,
259
+ recursive: root.recursive,
260
+ include: root.include,
261
+ exclude: root.exclude,
262
+ globs: root.globs,
263
+ insensitiveGlobs: root.insensitive_globs,
264
+ fileTypes: root.file_types,
265
+ excludedFileTypes: root.excluded_file_types,
266
+ hidden: root.hidden,
267
+ noIgnore: root.no_ignore,
268
+ ignoreFiles: root.ignore_files,
269
+ maxDepth: root.max_depth,
270
+ maxFileSizeBytes: root.max_file_size_bytes,
271
+ follow: root.follow,
272
+ };
72
273
  }
73
- function anonymousState(info) {
274
+ function shouldShowRoots(workspaceRoot, roots) {
275
+ return (roots.length > 1 ||
276
+ roots.some((root) => root.absolutePath !== workspaceRoot ||
277
+ formatRootPath(root) !== root.absolutePath));
278
+ }
279
+ function formatDisplayRootPath(root) {
280
+ const formatted = formatRootPath(root);
281
+ return `${formatDisplayPath(root.absolutePath)}${formatted.slice(root.absolutePath.length)}`;
282
+ }
283
+ function formatStoragePath(indexPath, workspaceRoot) {
284
+ const localPath = relative(workspaceRoot, indexPath);
285
+ if (localPath.length > 0 &&
286
+ !isAbsolute(localPath) &&
287
+ localPath !== ".." &&
288
+ !localPath.startsWith(`..${sep}`)) {
289
+ return localPath;
290
+ }
291
+ return formatDisplayPath(indexPath);
292
+ }
293
+ function formatDisplayPath(path) {
294
+ const home = homedir();
295
+ if (path === home)
296
+ return "~";
297
+ return path.startsWith(`${home}${sep}`)
298
+ ? `~${path.slice(home.length)}`
299
+ : path;
300
+ }
301
+ function formatEndpointHost(endpoint) {
302
+ try {
303
+ return new URL(endpoint).host || endpoint;
304
+ }
305
+ catch {
306
+ return endpoint;
307
+ }
308
+ }
309
+ function formatCount(value) {
310
+ return value.toLocaleString("en-US");
311
+ }
312
+ function workspaceState(info) {
74
313
  if (info.indexPolicy === "disabled") {
75
314
  return "disabled";
76
315
  }
77
- if (!info.collection) {
316
+ if (!info.workspaceIndex) {
78
317
  return "undecided";
79
318
  }
80
319
  if (!info.indexed) {
@@ -91,13 +330,13 @@ function anonymousState(info) {
91
330
  export function printIndexResult(label, result, options, rootPaths) {
92
331
  const theme = createStatusTheme(options);
93
332
  console.log(theme.accent(label));
94
- printField(theme, "files", `${result.filesScanned} scanned, `
95
- + `${theme.success(String(result.filesAdded))} added, `
96
- + `${theme.warning(String(result.filesModified))} modified, `
97
- + `${theme.warning(String(result.filesPending))} retried, `
98
- + `${theme.muted(String(result.filesUnchanged))} unchanged, `
99
- + `${theme.muted(String(result.filesDeleted))} deleted, `
100
- + failedCount(theme, result.filesFailed));
333
+ printField(theme, "files", `${result.filesScanned} scanned, ` +
334
+ `${theme.success(String(result.filesAdded))} added, ` +
335
+ `${theme.warning(String(result.filesModified))} modified, ` +
336
+ `${theme.warning(String(result.filesPending))} retried, ` +
337
+ `${theme.muted(String(result.filesUnchanged))} unchanged, ` +
338
+ `${theme.muted(String(result.filesDeleted))} deleted, ` +
339
+ failedCount(theme, result.filesFailed));
101
340
  printField(theme, "entities", String(result.entitiesCreated));
102
341
  printField(theme, "duration", `${formatDuration(result.durationMs)} ${theme.muted(`(${result.durationMs}ms)`)}`);
103
342
  if (rootPaths && rootPaths.length > 0) {
@@ -106,53 +345,23 @@ export function printIndexResult(label, result, options, rootPaths) {
106
345
  printQueryFilters(theme, options);
107
346
  }
108
347
  export function printIndexPathFilterTip(options) {
109
- if (options.includePaths !== undefined || options.excludePaths !== undefined) {
348
+ if (options.globs !== undefined ||
349
+ options.insensitiveGlobs !== undefined ||
350
+ options.fileTypes !== undefined ||
351
+ options.excludedFileTypes !== undefined) {
110
352
  return;
111
353
  }
112
354
  const theme = createStatusTheme(options);
113
- printField(theme, "tip", theme.warning("Default indexing skips common noise. For large or remote-embedding indexes, inspect this long-lived workspace and choose high-value --include/--exclude paths."));
114
- }
115
- export function printCollectionRemoveResult(name, removed, options) {
116
- const theme = createStatusTheme(options);
117
- console.log(removed
118
- ? `${theme.success("Removed")} collection ${theme.accent(name)}`
119
- : `${theme.warning("Collection not found")}: ${theme.accent(name)}`);
120
- }
121
- function printIndexStatus(theme, status) {
122
- printField(theme, "files", `${status.filesIndexed}/${status.filesScanned} indexed`);
123
- printField(theme, "entities", String(status.entitiesIndexed ?? 0));
124
- printField(theme, "fresh", statusNeedsRefresh(status)
125
- ? theme.warning("no")
126
- : theme.success("yes"));
127
- printField(theme, "changed", changedCount(theme, status));
128
- printField(theme, "pending", status.filesPending > 0
129
- ? theme.warning(String(status.filesPending))
130
- : theme.success(String(status.filesPending)));
131
- printField(theme, "failed", failedCount(theme, status.filesFailed));
132
- }
133
- function statusNeedsRefresh(status) {
134
- return status.filesAdded > 0
135
- || status.filesModified > 0
136
- || status.filesDeleted > 0
137
- || status.filesPending > 0
138
- || status.filesFailed > 0;
139
- }
140
- function printFailedFilesNote(theme, status, retryCommand) {
141
- if (status.filesFailed === 0) {
142
- return;
143
- }
144
- printField(theme, "note", theme.warning(`retry ${retryCommand}; if failures persist, fix failed files or embedding configuration`));
145
- const reasons = summarizeFailedFileReasons(status.failedFiles, retryCommand);
146
- if (reasons) {
147
- printField(theme, "failed_reasons", theme.danger(reasons));
148
- }
355
+ printField(theme, "tip", theme.warning("Default indexing skips common noise. For large or remote-embedding indexes, inspect this long-lived workspace and choose focused -g/--glob and -t/--type filters."));
149
356
  }
150
357
  function summarizeFailedFileReasons(files, retryCommand) {
151
358
  const withReasons = files.filter((file) => file.indexStatus?.error);
152
359
  if (withReasons.length === 0) {
153
360
  return undefined;
154
361
  }
155
- const shown = withReasons.slice(0, 3).map((file) => `${file.relativePath}: ${clipReason(explainStoredFailureReason(file.indexStatus.error, retryCommand))}`);
362
+ const shown = withReasons
363
+ .slice(0, 3)
364
+ .map((file) => `${file.relativePath}: ${clipReason(explainStoredFailureReason(file.indexStatus.error, retryCommand))}`);
156
365
  const remaining = withReasons.length - shown.length;
157
366
  return remaining > 0
158
367
  ? `${shown.join("; ")}; and ${remaining} more`
@@ -172,11 +381,6 @@ function clipReason(reason) {
172
381
  ? `${compact.slice(0, maxLength - 3)}...`
173
382
  : compact;
174
383
  }
175
- function changedCount(theme, status) {
176
- const count = status.filesAdded + status.filesModified + status.filesDeleted;
177
- const value = `${status.filesAdded} added, ${status.filesModified} modified, ${status.filesDeleted} deleted`;
178
- return count > 0 ? theme.warning(value) : theme.success(value);
179
- }
180
384
  function printQueryFilters(theme, options) {
181
385
  if (options.modifiedAfter !== undefined) {
182
386
  printField(theme, "modified_after", formatTimeFilter(options.modifiedAfter));
@@ -189,11 +393,15 @@ function printField(theme, label, value) {
189
393
  console.log(`${theme.label(label)}\t${value}`);
190
394
  }
191
395
  function failedCount(theme, count) {
192
- return count > 0 ? theme.danger(`${count} failed`) : theme.success(`${count} failed`);
396
+ return count > 0
397
+ ? theme.danger(`${count} failed`)
398
+ : theme.success(`${count} failed`);
193
399
  }
194
400
  function createStatusTheme(options) {
195
- if (!shouldUseColor(options)) {
401
+ const color = shouldUseColor(options);
402
+ if (!color) {
196
403
  return {
404
+ color,
197
405
  label: identity,
198
406
  path: identity,
199
407
  success: identity,
@@ -204,6 +412,7 @@ function createStatusTheme(options) {
204
412
  };
205
413
  }
206
414
  return {
415
+ color,
207
416
  label: (value) => `\x1b[2m${value}\x1b[0m`,
208
417
  path: (value) => `\x1b[36m${value}\x1b[0m`,
209
418
  success: (value) => `\x1b[32m${value}\x1b[0m`,
@@ -215,8 +424,34 @@ function createStatusTheme(options) {
215
424
  }
216
425
  function formatRootPath(root) {
217
426
  const filters = [
218
- root.include && root.include.length > 0 ? `include=${root.include.join("|")}` : undefined,
219
- root.exclude && root.exclude.length > 0 ? `exclude=${root.exclude.join("|")}` : undefined,
427
+ root.include && root.include.length > 0
428
+ ? `include=${root.include.join("|")}`
429
+ : undefined,
430
+ root.exclude && root.exclude.length > 0
431
+ ? `exclude=${root.exclude.join("|")}`
432
+ : undefined,
433
+ root.globs && root.globs.length > 0
434
+ ? `glob=${root.globs.join("|")}`
435
+ : undefined,
436
+ root.insensitiveGlobs && root.insensitiveGlobs.length > 0
437
+ ? `iglob=${root.insensitiveGlobs.join("|")}`
438
+ : undefined,
439
+ root.fileTypes && root.fileTypes.length > 0
440
+ ? `type=${root.fileTypes.join("|")}`
441
+ : undefined,
442
+ root.excludedFileTypes && root.excludedFileTypes.length > 0
443
+ ? `type-not=${root.excludedFileTypes.join("|")}`
444
+ : undefined,
445
+ root.hidden ? "hidden" : undefined,
446
+ root.noIgnore ? "no-ignore" : undefined,
447
+ root.ignoreFiles && root.ignoreFiles.length > 0
448
+ ? `ignore-file=${root.ignoreFiles.join("|")}`
449
+ : undefined,
450
+ root.maxDepth !== undefined ? `max-depth=${root.maxDepth}` : undefined,
451
+ root.maxFileSizeBytes !== undefined
452
+ ? `max-filesize=${root.maxFileSizeBytes}`
453
+ : undefined,
454
+ root.follow ? "follow" : undefined,
220
455
  ].filter((part) => part !== undefined);
221
456
  return filters.length > 0
222
457
  ? `${root.absolutePath} (${filters.join(" ")})`
@@ -240,10 +475,4 @@ function formatTimeFilter(value) {
240
475
  function identity(value) {
241
476
  return value;
242
477
  }
243
- function shellArg(value) {
244
- if (/^[A-Za-z0-9_./:=@+-]+$/.test(value)) {
245
- return value;
246
- }
247
- return `'${value.replaceAll("'", "'\\''")}'`;
248
- }
249
478
  //# sourceMappingURL=status.js.map