kynjal-cli 3.1.3 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (566) hide show
  1. package/.claude/agents/core/coder.md +1 -1
  2. package/.claude/agents/core/planner.md +2 -2
  3. package/.claude/agents/core/researcher.md +1 -1
  4. package/.claude/agents/core/reviewer.md +1 -1
  5. package/.claude/agents/core/tester.md +1 -1
  6. package/.claude/agents/data/data-ml-model.md +4 -4
  7. package/.claude/agents/development/dev-backend-api.md +4 -4
  8. package/.claude/agents/documentation/docs-api-openapi.md +4 -4
  9. package/.claude/agents/github/code-review-swarm.md +2 -2
  10. package/.claude/agents/github/issue-tracker.md +2 -2
  11. package/.claude/agents/github/pr-manager.md +2 -2
  12. package/.claude/agents/github/release-manager.md +2 -2
  13. package/.claude/agents/github/workflow-automation.md +2 -2
  14. package/.claude/agents/sparc/architecture.md +3 -3
  15. package/.claude/agents/sparc/pseudocode.md +2 -2
  16. package/.claude/agents/sparc/refinement.md +3 -3
  17. package/.claude/agents/sparc/specification.md +2 -2
  18. package/.claude/agents/swarm/adaptive-coordinator.md +1 -1
  19. package/.claude/agents/swarm/hierarchical-coordinator.md +1 -1
  20. package/.claude/agents/swarm/mesh-coordinator.md +1 -1
  21. package/.claude/agents/templates/base-template-generator.md +25 -4
  22. package/.claude/agents/templates/sparc-coordinator.md +3 -3
  23. package/.claude/helpers/auto-commit.sh +1 -1
  24. package/.claude/helpers/auto-memory-hook.mjs +27 -9
  25. package/.claude/helpers/hook-handler.cjs +58 -18
  26. package/.claude/helpers/statusline.cjs +14 -33
  27. package/.claude/helpers/statusline.js +3 -3
  28. package/.claude/settings.json +9 -9
  29. package/.claude/skills/reasoningbank-intelligence/SKILL.md +2 -2
  30. package/.claude/skills/swarm-orchestration/SKILL.md +1 -1
  31. package/README.md +383 -170
  32. package/bin/cli.js +6 -6
  33. package/bin/mcp-server.js +1 -1
  34. package/bin/preinstall.cjs +2 -0
  35. package/dist/src/appliance/gguf-engine.js +664 -0
  36. package/dist/src/appliance/gguf-engine.js.map +1 -0
  37. package/dist/src/appliance/ruvllm-bridge.js +492 -0
  38. package/dist/src/appliance/ruvllm-bridge.js.map +1 -0
  39. package/dist/src/appliance/rvfa-builder.js +383 -0
  40. package/dist/src/appliance/rvfa-builder.js.map +1 -0
  41. package/dist/src/appliance/rvfa-distribution.js +533 -0
  42. package/dist/src/appliance/rvfa-distribution.js.map +1 -0
  43. package/dist/src/appliance/rvfa-format.js +465 -0
  44. package/dist/src/appliance/rvfa-format.js.map +1 -0
  45. package/dist/src/appliance/rvfa-runner.js +373 -0
  46. package/dist/src/appliance/rvfa-runner.js.map +1 -0
  47. package/dist/src/appliance/rvfa-signing.js +469 -0
  48. package/dist/src/appliance/rvfa-signing.js.map +1 -0
  49. package/dist/src/benchmarks/pretrain/index.js +542 -331
  50. package/dist/src/benchmarks/pretrain/index.js.map +1 -1
  51. package/dist/src/commands/agent.d.ts.map +1 -1
  52. package/dist/src/commands/agent.js +725 -502
  53. package/dist/src/commands/agent.js.map +1 -1
  54. package/dist/src/commands/analyze.js +1548 -1218
  55. package/dist/src/commands/analyze.js.map +1 -1
  56. package/dist/src/commands/appliance-advanced.d.ts +9 -0
  57. package/dist/src/commands/appliance-advanced.d.ts.map +1 -0
  58. package/dist/src/commands/appliance-advanced.js +324 -0
  59. package/dist/src/commands/appliance-advanced.js.map +1 -0
  60. package/dist/src/commands/appliance.d.ts +8 -0
  61. package/dist/src/commands/appliance.d.ts.map +1 -0
  62. package/dist/src/commands/appliance.js +581 -0
  63. package/dist/src/commands/appliance.js.map +1 -0
  64. package/dist/src/commands/benchmark.js +523 -372
  65. package/dist/src/commands/benchmark.js.map +1 -1
  66. package/dist/src/commands/claims.js +364 -274
  67. package/dist/src/commands/claims.js.map +1 -1
  68. package/dist/src/commands/cleanup.d.ts +13 -0
  69. package/dist/src/commands/cleanup.d.ts.map +1 -0
  70. package/dist/src/commands/cleanup.js +262 -0
  71. package/dist/src/commands/cleanup.js.map +1 -0
  72. package/dist/src/commands/completions.js +118 -477
  73. package/dist/src/commands/completions.js.map +1 -1
  74. package/dist/src/commands/config.js +303 -237
  75. package/dist/src/commands/config.js.map +1 -1
  76. package/dist/src/commands/daemon.d.ts.map +1 -1
  77. package/dist/src/commands/daemon.js +597 -425
  78. package/dist/src/commands/daemon.js.map +1 -1
  79. package/dist/src/commands/deployment.js +275 -194
  80. package/dist/src/commands/deployment.js.map +1 -1
  81. package/dist/src/commands/doctor.d.ts.map +1 -1
  82. package/dist/src/commands/doctor.js +690 -460
  83. package/dist/src/commands/doctor.js.map +1 -1
  84. package/dist/src/commands/embeddings.js +1543 -1293
  85. package/dist/src/commands/embeddings.js.map +1 -1
  86. package/dist/src/commands/guidance.js +596 -449
  87. package/dist/src/commands/guidance.js.map +1 -1
  88. package/dist/src/commands/hive-mind.js +938 -854
  89. package/dist/src/commands/hive-mind.js.map +1 -1
  90. package/dist/src/commands/hooks.d.ts.map +1 -1
  91. package/dist/src/commands/hooks.js +3677 -2570
  92. package/dist/src/commands/hooks.js.map +1 -1
  93. package/dist/src/commands/index.js +322 -122
  94. package/dist/src/commands/index.js.map +1 -1
  95. package/dist/src/commands/init.d.ts +1 -1
  96. package/dist/src/commands/init.d.ts.map +1 -1
  97. package/dist/src/commands/init.js +943 -787
  98. package/dist/src/commands/init.js.map +1 -1
  99. package/dist/src/commands/issues.js +558 -383
  100. package/dist/src/commands/issues.js.map +1 -1
  101. package/dist/src/commands/mcp.d.ts.map +1 -1
  102. package/dist/src/commands/mcp.js +605 -475
  103. package/dist/src/commands/mcp.js.map +1 -1
  104. package/dist/src/commands/memory.d.ts.map +1 -1
  105. package/dist/src/commands/memory.js +1031 -814
  106. package/dist/src/commands/memory.js.map +1 -1
  107. package/dist/src/commands/migrate.js +347 -282
  108. package/dist/src/commands/migrate.js.map +1 -1
  109. package/dist/src/commands/neural.d.ts.map +1 -1
  110. package/dist/src/commands/neural.js +1563 -1283
  111. package/dist/src/commands/neural.js.map +1 -1
  112. package/dist/src/commands/performance.js +643 -497
  113. package/dist/src/commands/performance.js.map +1 -1
  114. package/dist/src/commands/plugins.js +841 -668
  115. package/dist/src/commands/plugins.js.map +1 -1
  116. package/dist/src/commands/process.js +447 -392
  117. package/dist/src/commands/process.js.map +1 -1
  118. package/dist/src/commands/progress.js +256 -162
  119. package/dist/src/commands/progress.js.map +1 -1
  120. package/dist/src/commands/providers.js +220 -150
  121. package/dist/src/commands/providers.js.map +1 -1
  122. package/dist/src/commands/route.js +665 -520
  123. package/dist/src/commands/route.js.map +1 -1
  124. package/dist/src/commands/ruvector/backup.js +651 -505
  125. package/dist/src/commands/ruvector/backup.js.map +1 -1
  126. package/dist/src/commands/ruvector/benchmark.js +401 -349
  127. package/dist/src/commands/ruvector/benchmark.js.map +1 -1
  128. package/dist/src/commands/ruvector/import.js +267 -225
  129. package/dist/src/commands/ruvector/import.js.map +1 -1
  130. package/dist/src/commands/ruvector/index.js +75 -37
  131. package/dist/src/commands/ruvector/index.js.map +1 -1
  132. package/dist/src/commands/ruvector/init.js +359 -336
  133. package/dist/src/commands/ruvector/init.js.map +1 -1
  134. package/dist/src/commands/ruvector/migrate.js +322 -335
  135. package/dist/src/commands/ruvector/migrate.js.map +1 -1
  136. package/dist/src/commands/ruvector/optimize.js +431 -375
  137. package/dist/src/commands/ruvector/optimize.js.map +1 -1
  138. package/dist/src/commands/ruvector/setup.js +117 -703
  139. package/dist/src/commands/ruvector/setup.js.map +1 -1
  140. package/dist/src/commands/ruvector/status.js +419 -364
  141. package/dist/src/commands/ruvector/status.js.map +1 -1
  142. package/dist/src/commands/security.d.ts.map +1 -1
  143. package/dist/src/commands/security.js +610 -456
  144. package/dist/src/commands/security.js.map +1 -1
  145. package/dist/src/commands/session.d.ts +1 -1
  146. package/dist/src/commands/session.js +627 -505
  147. package/dist/src/commands/session.js.map +1 -1
  148. package/dist/src/commands/start.d.ts +1 -1
  149. package/dist/src/commands/start.js +368 -271
  150. package/dist/src/commands/start.js.map +1 -1
  151. package/dist/src/commands/status.d.ts +1 -1
  152. package/dist/src/commands/status.d.ts.map +1 -1
  153. package/dist/src/commands/status.js +492 -379
  154. package/dist/src/commands/status.js.map +1 -1
  155. package/dist/src/commands/swarm.js +488 -408
  156. package/dist/src/commands/swarm.js.map +1 -1
  157. package/dist/src/commands/task.d.ts +1 -1
  158. package/dist/src/commands/task.js +539 -424
  159. package/dist/src/commands/task.js.map +1 -1
  160. package/dist/src/commands/transfer-store.js +412 -322
  161. package/dist/src/commands/transfer-store.js.map +1 -1
  162. package/dist/src/commands/update.js +291 -196
  163. package/dist/src/commands/update.js.map +1 -1
  164. package/dist/src/commands/workflow.js +486 -386
  165. package/dist/src/commands/workflow.js.map +1 -1
  166. package/dist/src/config-adapter.js +40 -39
  167. package/dist/src/config-adapter.js.map +1 -1
  168. package/dist/src/index.js +416 -312
  169. package/dist/src/index.js.map +1 -1
  170. package/dist/src/infrastructure/in-memory-repositories.js +507 -246
  171. package/dist/src/infrastructure/in-memory-repositories.js.map +1 -1
  172. package/dist/src/init/claudemd-generator.js +78 -368
  173. package/dist/src/init/claudemd-generator.js.map +1 -1
  174. package/dist/src/init/executor.js +1019 -1345
  175. package/dist/src/init/executor.js.map +1 -1
  176. package/dist/src/init/helpers-generator.js +60 -635
  177. package/dist/src/init/helpers-generator.js.map +1 -1
  178. package/dist/src/init/index.d.ts +1 -1
  179. package/dist/src/init/index.d.ts.map +1 -1
  180. package/dist/src/init/index.js +1 -1
  181. package/dist/src/init/index.js.map +1 -1
  182. package/dist/src/init/mcp-generator.d.ts +0 -1
  183. package/dist/src/init/mcp-generator.d.ts.map +1 -1
  184. package/dist/src/init/mcp-generator.js +62 -42
  185. package/dist/src/init/mcp-generator.js.map +1 -1
  186. package/dist/src/init/settings-generator.d.ts.map +1 -1
  187. package/dist/src/init/settings-generator.js +167 -100
  188. package/dist/src/init/settings-generator.js.map +1 -1
  189. package/dist/src/init/statusline-generator.d.ts +16 -8
  190. package/dist/src/init/statusline-generator.d.ts.map +1 -1
  191. package/dist/src/init/statusline-generator.js +20 -1300
  192. package/dist/src/init/statusline-generator.js.map +1 -1
  193. package/dist/src/init/types.d.ts +15 -5
  194. package/dist/src/init/types.d.ts.map +1 -1
  195. package/dist/src/init/types.js +66 -76
  196. package/dist/src/init/types.js.map +1 -1
  197. package/dist/src/mcp-client.js +130 -76
  198. package/dist/src/mcp-client.js.map +1 -1
  199. package/dist/src/mcp-server.js +758 -445
  200. package/dist/src/mcp-server.js.map +1 -1
  201. package/dist/src/mcp-tools/agent-tools.js +492 -391
  202. package/dist/src/mcp-tools/agent-tools.js.map +1 -1
  203. package/dist/src/mcp-tools/agentdb-tools.d.ts +30 -0
  204. package/dist/src/mcp-tools/agentdb-tools.d.ts.map +1 -0
  205. package/dist/src/mcp-tools/agentdb-tools.js +758 -0
  206. package/dist/src/mcp-tools/agentdb-tools.js.map +1 -0
  207. package/dist/src/mcp-tools/analyze-tools.js +236 -172
  208. package/dist/src/mcp-tools/analyze-tools.js.map +1 -1
  209. package/dist/src/mcp-tools/auto-install.js +142 -80
  210. package/dist/src/mcp-tools/auto-install.js.map +1 -1
  211. package/dist/src/mcp-tools/browser-tools.js +375 -252
  212. package/dist/src/mcp-tools/browser-tools.js.map +1 -1
  213. package/dist/src/mcp-tools/claims-tools.js +565 -473
  214. package/dist/src/mcp-tools/claims-tools.js.map +1 -1
  215. package/dist/src/mcp-tools/config-tools.d.ts.map +1 -1
  216. package/dist/src/mcp-tools/config-tools.js +284 -190
  217. package/dist/src/mcp-tools/config-tools.js.map +1 -1
  218. package/dist/src/mcp-tools/coordination-tools.d.ts.map +1 -1
  219. package/dist/src/mcp-tools/coordination-tools.js +600 -349
  220. package/dist/src/mcp-tools/coordination-tools.js.map +1 -1
  221. package/dist/src/mcp-tools/daa-tools.js +367 -289
  222. package/dist/src/mcp-tools/daa-tools.js.map +1 -1
  223. package/dist/src/mcp-tools/embeddings-tools.js +693 -582
  224. package/dist/src/mcp-tools/embeddings-tools.js.map +1 -1
  225. package/dist/src/mcp-tools/github-tools.js +312 -261
  226. package/dist/src/mcp-tools/github-tools.js.map +1 -1
  227. package/dist/src/mcp-tools/hive-mind-tools.d.ts.map +1 -1
  228. package/dist/src/mcp-tools/hive-mind-tools.js +718 -423
  229. package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -1
  230. package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
  231. package/dist/src/mcp-tools/hooks-tools.js +2726 -1978
  232. package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
  233. package/dist/src/mcp-tools/index.d.ts +2 -0
  234. package/dist/src/mcp-tools/index.d.ts.map +1 -1
  235. package/dist/src/mcp-tools/index.js +2 -0
  236. package/dist/src/mcp-tools/index.js.map +1 -1
  237. package/dist/src/mcp-tools/memory-tools.d.ts.map +1 -1
  238. package/dist/src/mcp-tools/memory-tools.js +514 -329
  239. package/dist/src/mcp-tools/memory-tools.js.map +1 -1
  240. package/dist/src/mcp-tools/neural-tools.d.ts.map +1 -1
  241. package/dist/src/mcp-tools/neural-tools.js +428 -326
  242. package/dist/src/mcp-tools/neural-tools.js.map +1 -1
  243. package/dist/src/mcp-tools/performance-tools.js +480 -420
  244. package/dist/src/mcp-tools/performance-tools.js.map +1 -1
  245. package/dist/src/mcp-tools/progress-tools.js +278 -204
  246. package/dist/src/mcp-tools/progress-tools.js.map +1 -1
  247. package/dist/src/mcp-tools/ruvllm-tools.d.ts +9 -0
  248. package/dist/src/mcp-tools/ruvllm-tools.d.ts.map +1 -0
  249. package/dist/src/mcp-tools/ruvllm-tools.js +399 -0
  250. package/dist/src/mcp-tools/ruvllm-tools.js.map +1 -0
  251. package/dist/src/mcp-tools/security-tools.js +429 -297
  252. package/dist/src/mcp-tools/security-tools.js.map +1 -1
  253. package/dist/src/mcp-tools/session-tools.js +234 -185
  254. package/dist/src/mcp-tools/session-tools.js.map +1 -1
  255. package/dist/src/mcp-tools/swarm-tools.d.ts +2 -1
  256. package/dist/src/mcp-tools/swarm-tools.d.ts.map +1 -1
  257. package/dist/src/mcp-tools/swarm-tools.js +303 -64
  258. package/dist/src/mcp-tools/swarm-tools.js.map +1 -1
  259. package/dist/src/mcp-tools/system-tools.d.ts.map +1 -1
  260. package/dist/src/mcp-tools/system-tools.js +352 -200
  261. package/dist/src/mcp-tools/system-tools.js.map +1 -1
  262. package/dist/src/mcp-tools/task-tools.d.ts.map +1 -1
  263. package/dist/src/mcp-tools/task-tools.js +357 -189
  264. package/dist/src/mcp-tools/task-tools.js.map +1 -1
  265. package/dist/src/mcp-tools/terminal-tools.js +196 -148
  266. package/dist/src/mcp-tools/terminal-tools.js.map +1 -1
  267. package/dist/src/mcp-tools/transfer-tools.js +333 -186
  268. package/dist/src/mcp-tools/transfer-tools.js.map +1 -1
  269. package/dist/src/mcp-tools/wasm-agent-tools.d.ts +9 -0
  270. package/dist/src/mcp-tools/wasm-agent-tools.d.ts.map +1 -0
  271. package/dist/src/mcp-tools/wasm-agent-tools.js +377 -0
  272. package/dist/src/mcp-tools/wasm-agent-tools.js.map +1 -0
  273. package/dist/src/mcp-tools/workflow-tools.d.ts.map +1 -1
  274. package/dist/src/mcp-tools/workflow-tools.js +471 -335
  275. package/dist/src/mcp-tools/workflow-tools.js.map +1 -1
  276. package/dist/src/memory/ewc-consolidation.js +345 -173
  277. package/dist/src/memory/ewc-consolidation.js.map +1 -1
  278. package/dist/src/memory/intelligence.js +841 -359
  279. package/dist/src/memory/intelligence.js.map +1 -1
  280. package/dist/src/memory/memory-bridge.js +1964 -0
  281. package/dist/src/memory/memory-bridge.js.map +1 -0
  282. package/dist/src/memory/memory-initializer.js +1895 -1602
  283. package/dist/src/memory/memory-initializer.js.map +1 -1
  284. package/dist/src/memory/sona-optimizer.js +329 -199
  285. package/dist/src/memory/sona-optimizer.js.map +1 -1
  286. package/dist/src/output.d.ts +2 -2
  287. package/dist/src/output.d.ts.map +1 -1
  288. package/dist/src/output.js +273 -242
  289. package/dist/src/output.js.map +1 -1
  290. package/dist/src/parser.js +217 -124
  291. package/dist/src/parser.js.map +1 -1
  292. package/dist/src/plugins/manager.js +531 -278
  293. package/dist/src/plugins/manager.js.map +1 -1
  294. package/dist/src/plugins/store/discovery.js +362 -275
  295. package/dist/src/plugins/store/discovery.js.map +1 -1
  296. package/dist/src/plugins/store/index.js +105 -48
  297. package/dist/src/plugins/store/index.js.map +1 -1
  298. package/dist/src/plugins/store/search.js +107 -69
  299. package/dist/src/plugins/store/search.js.map +1 -1
  300. package/dist/src/plugins/tests/demo-plugin-store.js +160 -113
  301. package/dist/src/plugins/tests/demo-plugin-store.js.map +1 -1
  302. package/dist/src/plugins/tests/standalone-test.js +223 -172
  303. package/dist/src/plugins/tests/standalone-test.js.map +1 -1
  304. package/dist/src/plugins/tests/test-plugin-store.js +228 -190
  305. package/dist/src/plugins/tests/test-plugin-store.js.map +1 -1
  306. package/dist/src/production/circuit-breaker.js +126 -62
  307. package/dist/src/production/circuit-breaker.js.map +1 -1
  308. package/dist/src/production/error-handler.js +156 -86
  309. package/dist/src/production/error-handler.js.map +1 -1
  310. package/dist/src/production/monitoring.js +220 -139
  311. package/dist/src/production/monitoring.js.map +1 -1
  312. package/dist/src/production/rate-limiter.js +93 -74
  313. package/dist/src/production/rate-limiter.js.map +1 -1
  314. package/dist/src/production/retry.js +167 -75
  315. package/dist/src/production/retry.js.map +1 -1
  316. package/dist/src/prompt.js +560 -436
  317. package/dist/src/prompt.js.map +1 -1
  318. package/dist/src/runtime/headless.js +289 -200
  319. package/dist/src/runtime/headless.js.map +1 -1
  320. package/dist/src/ruvector/agent-wasm.js +511 -0
  321. package/dist/src/ruvector/agent-wasm.js.map +1 -0
  322. package/dist/src/ruvector/ast-analyzer.js +232 -145
  323. package/dist/src/ruvector/ast-analyzer.js.map +1 -1
  324. package/dist/src/ruvector/coverage-router.js +419 -287
  325. package/dist/src/ruvector/coverage-router.js.map +1 -1
  326. package/dist/src/ruvector/coverage-tools.js +101 -56
  327. package/dist/src/ruvector/coverage-tools.js.map +1 -1
  328. package/dist/src/ruvector/diff-classifier.js +451 -324
  329. package/dist/src/ruvector/diff-classifier.js.map +1 -1
  330. package/dist/src/ruvector/enhanced-model-router.js +337 -251
  331. package/dist/src/ruvector/enhanced-model-router.js.map +1 -1
  332. package/dist/src/ruvector/flash-attention.js +254 -223
  333. package/dist/src/ruvector/flash-attention.js.map +1 -1
  334. package/dist/src/ruvector/graph-analyzer.js +680 -486
  335. package/dist/src/ruvector/graph-analyzer.js.map +1 -1
  336. package/dist/src/ruvector/index.js +113 -27
  337. package/dist/src/ruvector/index.js.map +1 -1
  338. package/dist/src/ruvector/lora-adapter.js +248 -155
  339. package/dist/src/ruvector/lora-adapter.js.map +1 -1
  340. package/dist/src/ruvector/model-router.js +248 -175
  341. package/dist/src/ruvector/model-router.js.map +1 -1
  342. package/dist/src/ruvector/moe-router.js +286 -228
  343. package/dist/src/ruvector/moe-router.js.map +1 -1
  344. package/dist/src/ruvector/q-learning-router.js +338 -257
  345. package/dist/src/ruvector/q-learning-router.js.map +1 -1
  346. package/dist/src/ruvector/ruvllm-wasm.js +527 -0
  347. package/dist/src/ruvector/ruvllm-wasm.js.map +1 -0
  348. package/dist/src/ruvector/semantic-router.js +67 -60
  349. package/dist/src/ruvector/semantic-router.js.map +1 -1
  350. package/dist/src/ruvector/vector-db.js +205 -119
  351. package/dist/src/ruvector/vector-db.js.map +1 -1
  352. package/dist/src/services/agentic-flow-bridge.js +168 -0
  353. package/dist/src/services/agentic-flow-bridge.js.map +1 -0
  354. package/dist/src/services/claim-service.js +940 -615
  355. package/dist/src/services/claim-service.js.map +1 -1
  356. package/dist/src/services/container-worker-pool.js +669 -399
  357. package/dist/src/services/container-worker-pool.js.map +1 -1
  358. package/dist/src/services/headless-worker-executor.js +467 -441
  359. package/dist/src/services/headless-worker-executor.js.map +1 -1
  360. package/dist/src/services/index.d.ts +5 -5
  361. package/dist/src/services/index.d.ts.map +1 -1
  362. package/dist/src/services/index.js +4 -4
  363. package/dist/src/services/index.js.map +1 -1
  364. package/dist/src/services/registry-api.js +201 -93
  365. package/dist/src/services/registry-api.js.map +1 -1
  366. package/dist/src/services/ruvector-training.js +414 -144
  367. package/dist/src/services/ruvector-training.js.map +1 -1
  368. package/dist/src/services/worker-daemon.js +928 -531
  369. package/dist/src/services/worker-daemon.js.map +1 -1
  370. package/dist/src/services/worker-queue.js +550 -331
  371. package/dist/src/services/worker-queue.js.map +1 -1
  372. package/dist/src/suggest.js +55 -45
  373. package/dist/src/suggest.js.map +1 -1
  374. package/dist/src/transfer/anonymization/index.js +37 -29
  375. package/dist/src/transfer/anonymization/index.js.map +1 -1
  376. package/dist/src/transfer/deploy-seraphine.d.ts +1 -1
  377. package/dist/src/transfer/deploy-seraphine.js +156 -129
  378. package/dist/src/transfer/deploy-seraphine.js.map +1 -1
  379. package/dist/src/transfer/export.js +142 -84
  380. package/dist/src/transfer/export.js.map +1 -1
  381. package/dist/src/transfer/index.d.ts +1 -1
  382. package/dist/src/transfer/index.d.ts.map +1 -1
  383. package/dist/src/transfer/index.js +2 -0
  384. package/dist/src/transfer/index.js.map +1 -1
  385. package/dist/src/transfer/ipfs/client.js +337 -179
  386. package/dist/src/transfer/ipfs/client.js.map +1 -1
  387. package/dist/src/transfer/ipfs/upload.js +434 -290
  388. package/dist/src/transfer/ipfs/upload.js.map +1 -1
  389. package/dist/src/transfer/models/seraphine.js +58 -58
  390. package/dist/src/transfer/models/seraphine.js.map +1 -1
  391. package/dist/src/transfer/serialization/cfp.js +37 -33
  392. package/dist/src/transfer/serialization/cfp.js.map +1 -1
  393. package/dist/src/transfer/storage/gcs.js +248 -139
  394. package/dist/src/transfer/storage/gcs.js.map +1 -1
  395. package/dist/src/transfer/store/discovery.js +353 -243
  396. package/dist/src/transfer/store/discovery.js.map +1 -1
  397. package/dist/src/transfer/store/download.js +365 -243
  398. package/dist/src/transfer/store/download.js.map +1 -1
  399. package/dist/src/transfer/store/index.js +130 -63
  400. package/dist/src/transfer/store/index.js.map +1 -1
  401. package/dist/src/transfer/store/publish.js +258 -184
  402. package/dist/src/transfer/store/publish.js.map +1 -1
  403. package/dist/src/transfer/store/registry.js +73 -51
  404. package/dist/src/transfer/store/registry.js.map +1 -1
  405. package/dist/src/transfer/store/search.js +96 -64
  406. package/dist/src/transfer/store/search.js.map +1 -1
  407. package/dist/src/transfer/store/tests/standalone-test.js +231 -174
  408. package/dist/src/transfer/store/tests/standalone-test.js.map +1 -1
  409. package/dist/src/transfer/test-seraphine.js +130 -95
  410. package/dist/src/transfer/test-seraphine.js.map +1 -1
  411. package/dist/src/transfer/tests/test-store.js +239 -194
  412. package/dist/src/transfer/tests/test-store.js.map +1 -1
  413. package/dist/src/types.js +56 -27
  414. package/dist/src/types.js.map +1 -1
  415. package/dist/src/update/checker.js +183 -106
  416. package/dist/src/update/checker.js.map +1 -1
  417. package/dist/src/update/executor.js +198 -135
  418. package/dist/src/update/executor.js.map +1 -1
  419. package/dist/src/update/index.js +85 -38
  420. package/dist/src/update/index.js.map +1 -1
  421. package/dist/src/update/rate-limiter.js +31 -19
  422. package/dist/src/update/rate-limiter.js.map +1 -1
  423. package/dist/src/update/validator.js +64 -38
  424. package/dist/src/update/validator.js.map +1 -1
  425. package/dist/tsconfig.tsbuildinfo +1 -1
  426. package/package.json +13 -10
  427. package/.claude/agents/custom/accessibility-auditor.yaml +0 -56
  428. package/.claude/agents/custom/design-architect.yaml +0 -48
  429. package/.claude/agents/custom/ui-developer.yaml +0 -46
  430. package/.claude/agents/custom/ux-researcher.yaml +0 -60
  431. package/dist/src/benchmarks/pretrain/index.d.ts +0 -58
  432. package/dist/src/benchmarks/pretrain/index.d.ts.map +0 -1
  433. package/dist/src/commands/index.d.ts +0 -108
  434. package/dist/src/commands/index.d.ts.map +0 -1
  435. package/dist/src/config-adapter.d.ts +0 -15
  436. package/dist/src/config-adapter.d.ts.map +0 -1
  437. package/dist/src/index.d.ts +0 -76
  438. package/dist/src/index.d.ts.map +0 -1
  439. package/dist/src/infrastructure/in-memory-repositories.d.ts +0 -68
  440. package/dist/src/infrastructure/in-memory-repositories.d.ts.map +0 -1
  441. package/dist/src/init/claudemd-generator.d.ts +0 -25
  442. package/dist/src/init/claudemd-generator.d.ts.map +0 -1
  443. package/dist/src/init/executor.d.ts +0 -41
  444. package/dist/src/init/executor.d.ts.map +0 -1
  445. package/dist/src/init/helpers-generator.d.ts +0 -60
  446. package/dist/src/init/helpers-generator.d.ts.map +0 -1
  447. package/dist/src/mcp-client.d.ts +0 -92
  448. package/dist/src/mcp-client.d.ts.map +0 -1
  449. package/dist/src/mcp-server.d.ts +0 -161
  450. package/dist/src/mcp-server.d.ts.map +0 -1
  451. package/dist/src/mcp-tools/auto-install.d.ts +0 -83
  452. package/dist/src/mcp-tools/auto-install.d.ts.map +0 -1
  453. package/dist/src/mcp-tools/types.d.ts +0 -31
  454. package/dist/src/mcp-tools/types.d.ts.map +0 -1
  455. package/dist/src/memory/ewc-consolidation.d.ts +0 -271
  456. package/dist/src/memory/ewc-consolidation.d.ts.map +0 -1
  457. package/dist/src/memory/intelligence.d.ts +0 -285
  458. package/dist/src/memory/intelligence.d.ts.map +0 -1
  459. package/dist/src/memory/memory-initializer.d.ts +0 -396
  460. package/dist/src/memory/memory-initializer.d.ts.map +0 -1
  461. package/dist/src/memory/sona-optimizer.d.ts +0 -227
  462. package/dist/src/memory/sona-optimizer.d.ts.map +0 -1
  463. package/dist/src/parser.d.ts +0 -41
  464. package/dist/src/parser.d.ts.map +0 -1
  465. package/dist/src/plugins/manager.d.ts +0 -133
  466. package/dist/src/plugins/manager.d.ts.map +0 -1
  467. package/dist/src/plugins/store/discovery.d.ts +0 -88
  468. package/dist/src/plugins/store/discovery.d.ts.map +0 -1
  469. package/dist/src/plugins/store/index.d.ts +0 -76
  470. package/dist/src/plugins/store/index.d.ts.map +0 -1
  471. package/dist/src/plugins/store/search.d.ts +0 -46
  472. package/dist/src/plugins/store/search.d.ts.map +0 -1
  473. package/dist/src/plugins/store/types.d.ts +0 -274
  474. package/dist/src/plugins/store/types.d.ts.map +0 -1
  475. package/dist/src/production/circuit-breaker.d.ts +0 -101
  476. package/dist/src/production/circuit-breaker.d.ts.map +0 -1
  477. package/dist/src/production/error-handler.d.ts +0 -92
  478. package/dist/src/production/error-handler.d.ts.map +0 -1
  479. package/dist/src/production/monitoring.d.ts +0 -161
  480. package/dist/src/production/monitoring.d.ts.map +0 -1
  481. package/dist/src/production/rate-limiter.d.ts +0 -80
  482. package/dist/src/production/rate-limiter.d.ts.map +0 -1
  483. package/dist/src/production/retry.d.ts +0 -48
  484. package/dist/src/production/retry.d.ts.map +0 -1
  485. package/dist/src/prompt.d.ts +0 -44
  486. package/dist/src/prompt.d.ts.map +0 -1
  487. package/dist/src/runtime/headless.d.ts +0 -60
  488. package/dist/src/runtime/headless.d.ts.map +0 -1
  489. package/dist/src/ruvector/ast-analyzer.d.ts +0 -67
  490. package/dist/src/ruvector/ast-analyzer.d.ts.map +0 -1
  491. package/dist/src/ruvector/coverage-router.d.ts +0 -160
  492. package/dist/src/ruvector/coverage-router.d.ts.map +0 -1
  493. package/dist/src/ruvector/diff-classifier.d.ts +0 -175
  494. package/dist/src/ruvector/diff-classifier.d.ts.map +0 -1
  495. package/dist/src/ruvector/enhanced-model-router.d.ts +0 -146
  496. package/dist/src/ruvector/enhanced-model-router.d.ts.map +0 -1
  497. package/dist/src/ruvector/flash-attention.d.ts +0 -195
  498. package/dist/src/ruvector/flash-attention.d.ts.map +0 -1
  499. package/dist/src/ruvector/graph-analyzer.d.ts +0 -187
  500. package/dist/src/ruvector/graph-analyzer.d.ts.map +0 -1
  501. package/dist/src/ruvector/index.d.ts +0 -34
  502. package/dist/src/ruvector/index.d.ts.map +0 -1
  503. package/dist/src/ruvector/lora-adapter.d.ts +0 -218
  504. package/dist/src/ruvector/lora-adapter.d.ts.map +0 -1
  505. package/dist/src/ruvector/model-router.d.ts +0 -220
  506. package/dist/src/ruvector/model-router.d.ts.map +0 -1
  507. package/dist/src/ruvector/moe-router.d.ts +0 -206
  508. package/dist/src/ruvector/moe-router.d.ts.map +0 -1
  509. package/dist/src/ruvector/q-learning-router.d.ts +0 -211
  510. package/dist/src/ruvector/q-learning-router.d.ts.map +0 -1
  511. package/dist/src/ruvector/semantic-router.d.ts +0 -77
  512. package/dist/src/ruvector/semantic-router.d.ts.map +0 -1
  513. package/dist/src/ruvector/vector-db.d.ts +0 -69
  514. package/dist/src/ruvector/vector-db.d.ts.map +0 -1
  515. package/dist/src/services/claim-service.d.ts +0 -204
  516. package/dist/src/services/claim-service.d.ts.map +0 -1
  517. package/dist/src/services/container-worker-pool.d.ts +0 -197
  518. package/dist/src/services/container-worker-pool.d.ts.map +0 -1
  519. package/dist/src/services/headless-worker-executor.d.ts +0 -304
  520. package/dist/src/services/headless-worker-executor.d.ts.map +0 -1
  521. package/dist/src/services/registry-api.d.ts +0 -58
  522. package/dist/src/services/registry-api.d.ts.map +0 -1
  523. package/dist/src/services/ruvector-training.d.ts +0 -213
  524. package/dist/src/services/ruvector-training.d.ts.map +0 -1
  525. package/dist/src/services/worker-daemon.d.ts +0 -203
  526. package/dist/src/services/worker-daemon.d.ts.map +0 -1
  527. package/dist/src/services/worker-queue.d.ts +0 -194
  528. package/dist/src/services/worker-queue.d.ts.map +0 -1
  529. package/dist/src/suggest.d.ts +0 -53
  530. package/dist/src/suggest.d.ts.map +0 -1
  531. package/dist/src/transfer/export.d.ts +0 -25
  532. package/dist/src/transfer/export.d.ts.map +0 -1
  533. package/dist/src/transfer/ipfs/client.d.ts +0 -109
  534. package/dist/src/transfer/ipfs/client.d.ts.map +0 -1
  535. package/dist/src/transfer/ipfs/upload.d.ts +0 -95
  536. package/dist/src/transfer/ipfs/upload.d.ts.map +0 -1
  537. package/dist/src/transfer/models/seraphine.d.ts +0 -72
  538. package/dist/src/transfer/models/seraphine.d.ts.map +0 -1
  539. package/dist/src/transfer/serialization/cfp.d.ts +0 -49
  540. package/dist/src/transfer/serialization/cfp.d.ts.map +0 -1
  541. package/dist/src/transfer/storage/gcs.d.ts +0 -82
  542. package/dist/src/transfer/storage/gcs.d.ts.map +0 -1
  543. package/dist/src/transfer/store/discovery.d.ts +0 -84
  544. package/dist/src/transfer/store/discovery.d.ts.map +0 -1
  545. package/dist/src/transfer/store/download.d.ts +0 -70
  546. package/dist/src/transfer/store/download.d.ts.map +0 -1
  547. package/dist/src/transfer/store/index.d.ts +0 -84
  548. package/dist/src/transfer/store/index.d.ts.map +0 -1
  549. package/dist/src/transfer/store/publish.d.ts +0 -76
  550. package/dist/src/transfer/store/publish.d.ts.map +0 -1
  551. package/dist/src/transfer/store/search.d.ts +0 -54
  552. package/dist/src/transfer/store/search.d.ts.map +0 -1
  553. package/dist/src/transfer/types.d.ts +0 -245
  554. package/dist/src/transfer/types.d.ts.map +0 -1
  555. package/dist/src/types.d.ts +0 -198
  556. package/dist/src/types.d.ts.map +0 -1
  557. package/dist/src/update/checker.d.ts +0 -34
  558. package/dist/src/update/checker.d.ts.map +0 -1
  559. package/dist/src/update/executor.d.ts +0 -32
  560. package/dist/src/update/executor.d.ts.map +0 -1
  561. package/dist/src/update/index.d.ts +0 -33
  562. package/dist/src/update/index.d.ts.map +0 -1
  563. package/dist/src/update/rate-limiter.d.ts +0 -20
  564. package/dist/src/update/rate-limiter.d.ts.map +0 -1
  565. package/dist/src/update/validator.d.ts +0 -17
  566. package/dist/src/update/validator.d.ts.map +0 -1
@@ -2,18 +2,55 @@
2
2
  * V3 CLI Interactive Prompt System
3
3
  * Modern interactive prompts for user input
4
4
  */
5
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
7
+ return new (P || (P = Promise))(function (resolve, reject) {
8
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
9
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
10
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
11
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
12
+ });
13
+ };
14
+ var __generator = (this && this.__generator) || function (thisArg, body) {
15
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
16
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
17
+ function verb(n) { return function (v) { return step([n, v]); }; }
18
+ function step(op) {
19
+ if (f) throw new TypeError("Generator is already executing.");
20
+ while (_) try {
21
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
22
+ if (y = 0, t) op = [op[0] & 2, t.value];
23
+ switch (op[0]) {
24
+ case 0: case 1: t = op; break;
25
+ case 4: _.label++; return { value: op[1], done: false };
26
+ case 5: _.label++; y = op[1]; op = [0]; continue;
27
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
28
+ default:
29
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
30
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
31
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
32
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
33
+ if (t[2]) _.ops.pop();
34
+ _.trys.pop(); continue;
35
+ }
36
+ op = body.call(thisArg, _);
37
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
38
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
39
+ }
40
+ };
5
41
  import * as readline from 'readline';
6
42
  import { output } from './output.js';
7
43
  // ============================================
8
44
  // Core Prompt Infrastructure
9
45
  // ============================================
10
- class PromptManager {
11
- rl = null;
12
- formatter;
13
- constructor(formatter = output) {
46
+ var PromptManager = /** @class */ (function () {
47
+ function PromptManager(formatter) {
48
+ if (formatter === void 0) { formatter = output; }
49
+ this.rl = null;
14
50
  this.formatter = formatter;
15
51
  }
16
- createInterface() {
52
+ PromptManager.prototype.createInterface = function () {
53
+ var _this = this;
17
54
  if (!this.rl) {
18
55
  this.rl = readline.createInterface({
19
56
  input: process.stdin,
@@ -21,481 +58,568 @@ class PromptManager {
21
58
  terminal: true
22
59
  });
23
60
  // Handle cleanup on exit
24
- this.rl.on('close', () => {
25
- this.rl = null;
61
+ this.rl.on('close', function () {
62
+ _this.rl = null;
26
63
  });
27
64
  }
28
65
  return this.rl;
29
- }
30
- close() {
66
+ };
67
+ PromptManager.prototype.close = function () {
31
68
  if (this.rl) {
32
69
  this.rl.close();
33
70
  this.rl = null;
34
71
  }
35
- }
36
- async question(prompt) {
37
- return new Promise((resolve) => {
38
- const rl = this.createInterface();
39
- rl.question(prompt, (answer) => {
40
- resolve(answer);
72
+ };
73
+ PromptManager.prototype.question = function (prompt) {
74
+ return __awaiter(this, void 0, Promise, function () {
75
+ var _this = this;
76
+ return __generator(this, function (_a) {
77
+ return [2 /*return*/, new Promise(function (resolve) {
78
+ var rl = _this.createInterface();
79
+ rl.question(prompt, function (answer) {
80
+ resolve(answer);
81
+ });
82
+ })];
41
83
  });
42
84
  });
43
- }
85
+ };
44
86
  // ============================================
45
87
  // Select Prompt
46
88
  // ============================================
47
- async select(options) {
48
- const { message, options: choices, default: defaultValue, pageSize = 10 } = options;
49
- this.formatter.writeln();
50
- this.formatter.writeln(this.formatter.bold(`? ${message}`));
51
- this.formatter.writeln(this.formatter.dim(' (Use arrow keys to navigate, enter to select)'));
52
- this.formatter.writeln();
53
- // Find default index
54
- let selectedIndex = 0;
55
- if (defaultValue !== undefined) {
56
- const idx = choices.findIndex(c => c.value === defaultValue);
57
- if (idx !== -1)
58
- selectedIndex = idx;
59
- }
60
- // Display options
61
- const displayChoices = (currentIndex, startIndex = 0) => {
62
- // Move cursor up to overwrite
63
- if (startIndex > 0 || currentIndex > 0) {
64
- process.stdout.write(`\x1b[${Math.min(choices.length, pageSize)}A`);
65
- }
66
- const endIndex = Math.min(startIndex + pageSize, choices.length);
67
- for (let i = startIndex; i < endIndex; i++) {
68
- const choice = choices[i];
69
- const isSelected = i === currentIndex;
70
- const prefix = isSelected ? this.formatter.info('>') : ' ';
71
- const label = isSelected
72
- ? this.formatter.highlight(choice.label)
73
- : choice.label;
74
- const hint = choice.hint ? this.formatter.dim(` - ${choice.hint}`) : '';
75
- const disabled = choice.disabled ? this.formatter.dim(' (disabled)') : '';
76
- this.formatter.writeln(` ${prefix} ${label}${hint}${disabled}`);
77
- }
78
- };
79
- // Initial display
80
- displayChoices(selectedIndex);
81
- return new Promise((resolve, reject) => {
82
- const rl = this.createInterface();
83
- // Enable raw mode for arrow key detection
84
- if (process.stdin.isTTY) {
85
- process.stdin.setRawMode(true);
86
- }
87
- process.stdin.resume();
88
- const handleKeypress = (key) => {
89
- const keyStr = key.toString();
90
- // Arrow keys
91
- if (keyStr === '\x1b[A') { // Up
92
- do {
93
- selectedIndex = (selectedIndex - 1 + choices.length) % choices.length;
94
- } while (choices[selectedIndex].disabled && selectedIndex !== 0);
95
- displayChoices(selectedIndex);
89
+ PromptManager.prototype.select = function (options) {
90
+ return __awaiter(this, void 0, Promise, function () {
91
+ var message, choices, defaultValue, _a, pageSize, selectedIndex, idx, displayChoices;
92
+ var _this = this;
93
+ return __generator(this, function (_b) {
94
+ message = options.message, choices = options.options, defaultValue = options["default"], _a = options.pageSize, pageSize = _a === void 0 ? 10 : _a;
95
+ this.formatter.writeln();
96
+ this.formatter.writeln(this.formatter.bold("? " + message));
97
+ this.formatter.writeln(this.formatter.dim(' (Use arrow keys to navigate, enter to select)'));
98
+ this.formatter.writeln();
99
+ selectedIndex = 0;
100
+ if (defaultValue !== undefined) {
101
+ idx = choices.findIndex(function (c) { return c.value === defaultValue; });
102
+ if (idx !== -1)
103
+ selectedIndex = idx;
96
104
  }
97
- else if (keyStr === '\x1b[B') { // Down
98
- do {
99
- selectedIndex = (selectedIndex + 1) % choices.length;
100
- } while (choices[selectedIndex].disabled && selectedIndex !== choices.length - 1);
101
- displayChoices(selectedIndex);
102
- }
103
- else if (keyStr === '\r' || keyStr === '\n') { // Enter
104
- cleanup();
105
- const selected = choices[selectedIndex];
106
- if (!selected.disabled) {
107
- this.formatter.writeln();
108
- this.formatter.writeln(this.formatter.success(`Selected: ${selected.label}`));
109
- resolve(selected.value);
105
+ displayChoices = function (currentIndex, startIndex) {
106
+ if (startIndex === void 0) { startIndex = 0; }
107
+ // Move cursor up to overwrite
108
+ if (startIndex > 0 || currentIndex > 0) {
109
+ process.stdout.write("\u001B[" + Math.min(choices.length, pageSize) + "A");
110
110
  }
111
- }
112
- else if (keyStr === '\x03') { // Ctrl+C
113
- cleanup();
114
- reject(new Error('User cancelled'));
115
- }
116
- };
117
- const cleanup = () => {
118
- process.stdin.removeListener('data', handleKeypress);
119
- if (process.stdin.isTTY) {
120
- process.stdin.setRawMode(false);
121
- }
122
- this.close();
123
- };
124
- process.stdin.on('data', handleKeypress);
111
+ var endIndex = Math.min(startIndex + pageSize, choices.length);
112
+ for (var i = startIndex; i < endIndex; i++) {
113
+ var choice = choices[i];
114
+ var isSelected = i === currentIndex;
115
+ var prefix = isSelected ? _this.formatter.info('>') : ' ';
116
+ var label = isSelected
117
+ ? _this.formatter.highlight(choice.label)
118
+ : choice.label;
119
+ var hint = choice.hint ? _this.formatter.dim(" - " + choice.hint) : '';
120
+ var disabled = choice.disabled ? _this.formatter.dim(' (disabled)') : '';
121
+ _this.formatter.writeln(" " + prefix + " " + label + hint + disabled);
122
+ }
123
+ };
124
+ // Initial display
125
+ displayChoices(selectedIndex);
126
+ return [2 /*return*/, new Promise(function (resolve, reject) {
127
+ var rl = _this.createInterface();
128
+ // Enable raw mode for arrow key detection
129
+ if (process.stdin.isTTY) {
130
+ process.stdin.setRawMode(true);
131
+ }
132
+ process.stdin.resume();
133
+ var handleKeypress = function (key) {
134
+ var keyStr = key.toString();
135
+ // Arrow keys
136
+ if (keyStr === '\x1b[A') { // Up
137
+ do {
138
+ selectedIndex = (selectedIndex - 1 + choices.length) % choices.length;
139
+ } while (choices[selectedIndex].disabled && selectedIndex !== 0);
140
+ displayChoices(selectedIndex);
141
+ }
142
+ else if (keyStr === '\x1b[B') { // Down
143
+ do {
144
+ selectedIndex = (selectedIndex + 1) % choices.length;
145
+ } while (choices[selectedIndex].disabled && selectedIndex !== choices.length - 1);
146
+ displayChoices(selectedIndex);
147
+ }
148
+ else if (keyStr === '\r' || keyStr === '\n') { // Enter
149
+ cleanup();
150
+ var selected = choices[selectedIndex];
151
+ if (!selected.disabled) {
152
+ _this.formatter.writeln();
153
+ _this.formatter.writeln(_this.formatter.success("Selected: " + selected.label));
154
+ resolve(selected.value);
155
+ }
156
+ }
157
+ else if (keyStr === '\x03') { // Ctrl+C
158
+ cleanup();
159
+ reject(new Error('User cancelled'));
160
+ }
161
+ };
162
+ var cleanup = function () {
163
+ process.stdin.removeListener('data', handleKeypress);
164
+ if (process.stdin.isTTY) {
165
+ process.stdin.setRawMode(false);
166
+ }
167
+ _this.close();
168
+ };
169
+ process.stdin.on('data', handleKeypress);
170
+ })];
171
+ });
125
172
  });
126
- }
173
+ };
127
174
  // ============================================
128
175
  // Confirm Prompt
129
176
  // ============================================
130
- async confirm(options) {
131
- const { message, default: defaultValue = false, active = 'Yes', inactive = 'No' } = options;
132
- const defaultText = defaultValue ? `${active}/${inactive}` : `${active}/${inactive}`;
133
- const hint = defaultValue ? `[${active}]` : `[${inactive}]`;
134
- const prompt = `${this.formatter.bold('?')} ${message} ${this.formatter.dim(hint)} `;
135
- const answer = await this.question(prompt);
136
- this.close();
137
- if (answer === '') {
138
- return defaultValue;
139
- }
140
- const normalized = answer.toLowerCase().trim();
141
- if (['y', 'yes', 'true', '1'].includes(normalized)) {
142
- return true;
143
- }
144
- if (['n', 'no', 'false', '0'].includes(normalized)) {
145
- return false;
146
- }
147
- return defaultValue;
148
- }
177
+ PromptManager.prototype.confirm = function (options) {
178
+ return __awaiter(this, void 0, Promise, function () {
179
+ var message, _a, defaultValue, _b, active, _c, inactive, defaultText, hint, prompt, answer, normalized;
180
+ return __generator(this, function (_d) {
181
+ switch (_d.label) {
182
+ case 0:
183
+ message = options.message, _a = options["default"], defaultValue = _a === void 0 ? false : _a, _b = options.active, active = _b === void 0 ? 'Yes' : _b, _c = options.inactive, inactive = _c === void 0 ? 'No' : _c;
184
+ defaultText = defaultValue ? active + "/" + inactive : active + "/" + inactive;
185
+ hint = defaultValue ? "[" + active + "]" : "[" + inactive + "]";
186
+ prompt = this.formatter.bold('?') + " " + message + " " + this.formatter.dim(hint) + " ";
187
+ return [4 /*yield*/, this.question(prompt)];
188
+ case 1:
189
+ answer = _d.sent();
190
+ this.close();
191
+ if (answer === '') {
192
+ return [2 /*return*/, defaultValue];
193
+ }
194
+ normalized = answer.toLowerCase().trim();
195
+ if (['y', 'yes', 'true', '1'].includes(normalized)) {
196
+ return [2 /*return*/, true];
197
+ }
198
+ if (['n', 'no', 'false', '0'].includes(normalized)) {
199
+ return [2 /*return*/, false];
200
+ }
201
+ return [2 /*return*/, defaultValue];
202
+ }
203
+ });
204
+ });
205
+ };
149
206
  // ============================================
150
207
  // Input Prompt
151
208
  // ============================================
152
- async input(options) {
153
- const { message, default: defaultValue, placeholder, validate, mask } = options;
154
- let prompt = `${this.formatter.bold('?')} ${message}`;
155
- if (defaultValue) {
156
- prompt += ` ${this.formatter.dim(`(${defaultValue})`)}`;
157
- }
158
- else if (placeholder) {
159
- prompt += ` ${this.formatter.dim(placeholder)}`;
160
- }
161
- prompt += ': ';
162
- while (true) {
163
- let answer;
164
- if (mask) {
165
- answer = await this.inputMasked(prompt);
166
- }
167
- else {
168
- answer = await this.question(prompt);
169
- }
170
- // Use default if empty
171
- if (answer === '' && defaultValue !== undefined) {
172
- answer = defaultValue;
173
- }
174
- // Validate
175
- if (validate) {
176
- const result = validate(answer);
177
- if (result !== true) {
178
- const errorMsg = typeof result === 'string' ? result : 'Invalid input';
179
- this.formatter.writeln(this.formatter.error(` ${errorMsg}`));
180
- continue;
181
- }
182
- }
183
- this.close();
184
- return answer;
185
- }
186
- }
187
- async inputMasked(prompt) {
188
- return new Promise((resolve) => {
189
- const rl = this.createInterface();
190
- let password = '';
191
- // Don't echo characters
192
- process.stdout.write(prompt);
193
- if (process.stdin.isTTY) {
194
- process.stdin.setRawMode(true);
195
- }
196
- process.stdin.resume();
197
- const handleData = (chunk) => {
198
- const char = chunk.toString();
199
- if (char === '\n' || char === '\r') {
200
- // Enter pressed
201
- process.stdin.removeListener('data', handleData);
202
- if (process.stdin.isTTY) {
203
- process.stdin.setRawMode(false);
204
- }
205
- process.stdout.write('\n');
206
- resolve(password);
207
- }
208
- else if (char === '\x7f' || char === '\x08') {
209
- // Backspace
210
- if (password.length > 0) {
211
- password = password.slice(0, -1);
212
- process.stdout.write('\b \b');
213
- }
214
- }
215
- else if (char === '\x03') {
216
- // Ctrl+C
217
- process.stdin.removeListener('data', handleData);
218
- if (process.stdin.isTTY) {
219
- process.stdin.setRawMode(false);
220
- }
221
- resolve('');
222
- }
223
- else if (char.charCodeAt(0) >= 32) {
224
- // Printable character
225
- password += char;
226
- process.stdout.write('*');
209
+ PromptManager.prototype.input = function (options) {
210
+ return __awaiter(this, void 0, Promise, function () {
211
+ var message, defaultValue, placeholder, validate, mask, prompt, answer, result, errorMsg;
212
+ return __generator(this, function (_a) {
213
+ switch (_a.label) {
214
+ case 0:
215
+ message = options.message, defaultValue = options["default"], placeholder = options.placeholder, validate = options.validate, mask = options.mask;
216
+ prompt = this.formatter.bold('?') + " " + message;
217
+ if (defaultValue) {
218
+ prompt += " " + this.formatter.dim("(" + defaultValue + ")");
219
+ }
220
+ else if (placeholder) {
221
+ prompt += " " + this.formatter.dim(placeholder);
222
+ }
223
+ prompt += ': ';
224
+ _a.label = 1;
225
+ case 1:
226
+ if (!true) return [3 /*break*/, 6];
227
+ answer = void 0;
228
+ if (!mask) return [3 /*break*/, 3];
229
+ return [4 /*yield*/, this.inputMasked(prompt)];
230
+ case 2:
231
+ answer = _a.sent();
232
+ return [3 /*break*/, 5];
233
+ case 3: return [4 /*yield*/, this.question(prompt)];
234
+ case 4:
235
+ answer = _a.sent();
236
+ _a.label = 5;
237
+ case 5:
238
+ // Use default if empty
239
+ if (answer === '' && defaultValue !== undefined) {
240
+ answer = defaultValue;
241
+ }
242
+ // Validate
243
+ if (validate) {
244
+ result = validate(answer);
245
+ if (result !== true) {
246
+ errorMsg = typeof result === 'string' ? result : 'Invalid input';
247
+ this.formatter.writeln(this.formatter.error(" " + errorMsg));
248
+ return [3 /*break*/, 1];
249
+ }
250
+ }
251
+ this.close();
252
+ return [2 /*return*/, answer];
253
+ case 6: return [2 /*return*/];
227
254
  }
228
- };
229
- process.stdin.on('data', handleData);
255
+ });
230
256
  });
231
- }
257
+ };
258
+ PromptManager.prototype.inputMasked = function (prompt) {
259
+ return __awaiter(this, void 0, Promise, function () {
260
+ var _this = this;
261
+ return __generator(this, function (_a) {
262
+ return [2 /*return*/, new Promise(function (resolve) {
263
+ var rl = _this.createInterface();
264
+ var password = '';
265
+ // Don't echo characters
266
+ process.stdout.write(prompt);
267
+ if (process.stdin.isTTY) {
268
+ process.stdin.setRawMode(true);
269
+ }
270
+ process.stdin.resume();
271
+ var handleData = function (chunk) {
272
+ var char = chunk.toString();
273
+ if (char === '\n' || char === '\r') {
274
+ // Enter pressed
275
+ process.stdin.removeListener('data', handleData);
276
+ if (process.stdin.isTTY) {
277
+ process.stdin.setRawMode(false);
278
+ }
279
+ process.stdout.write('\n');
280
+ resolve(password);
281
+ }
282
+ else if (char === '\x7f' || char === '\x08') {
283
+ // Backspace
284
+ if (password.length > 0) {
285
+ password = password.slice(0, -1);
286
+ process.stdout.write('\b \b');
287
+ }
288
+ }
289
+ else if (char === '\x03') {
290
+ // Ctrl+C
291
+ process.stdin.removeListener('data', handleData);
292
+ if (process.stdin.isTTY) {
293
+ process.stdin.setRawMode(false);
294
+ }
295
+ resolve('');
296
+ }
297
+ else if (char.charCodeAt(0) >= 32) {
298
+ // Printable character
299
+ password += char;
300
+ process.stdout.write('*');
301
+ }
302
+ };
303
+ process.stdin.on('data', handleData);
304
+ })];
305
+ });
306
+ });
307
+ };
232
308
  // ============================================
233
309
  // Multi-Select Prompt
234
310
  // ============================================
235
- async multiSelect(options) {
236
- const { message, options: choices, default: defaultValues = [], required = false, min, max } = options;
237
- this.formatter.writeln();
238
- this.formatter.writeln(this.formatter.bold(`? ${message}`));
239
- this.formatter.writeln(this.formatter.dim(' (Use arrow keys to navigate, space to select, enter to confirm)'));
240
- this.formatter.writeln();
241
- // Initialize selection state
242
- const selected = new Set();
243
- for (let i = 0; i < choices.length; i++) {
244
- // Check both default array and individual selected property
245
- if (defaultValues.includes(choices[i].value) || choices[i].selected) {
246
- selected.add(i);
247
- }
248
- }
249
- let currentIndex = 0;
250
- // Display options
251
- const displayChoices = () => {
252
- // Move cursor up to overwrite
253
- process.stdout.write(`\x1b[${choices.length}A`);
254
- for (let i = 0; i < choices.length; i++) {
255
- const choice = choices[i];
256
- const isCurrentRow = i === currentIndex;
257
- const isSelected = selected.has(i);
258
- const cursor = isCurrentRow ? this.formatter.info('>') : ' ';
259
- const checkbox = isSelected
260
- ? this.formatter.success('[x]')
261
- : this.formatter.dim('[ ]');
262
- const label = isCurrentRow
263
- ? this.formatter.highlight(choice.label)
264
- : choice.label;
265
- const hint = choice.hint ? this.formatter.dim(` - ${choice.hint}`) : '';
266
- const disabled = choice.disabled ? this.formatter.dim(' (disabled)') : '';
267
- this.formatter.writeln(` ${cursor} ${checkbox} ${label}${hint}${disabled}`);
268
- }
269
- };
270
- // Initial display
271
- for (let i = 0; i < choices.length; i++) {
272
- this.formatter.writeln('');
273
- }
274
- displayChoices();
275
- return new Promise((resolve, reject) => {
276
- const rl = this.createInterface();
277
- if (process.stdin.isTTY) {
278
- process.stdin.setRawMode(true);
279
- }
280
- process.stdin.resume();
281
- const handleKeypress = (key) => {
282
- const keyStr = key.toString();
283
- if (keyStr === '\x1b[A') { // Up
284
- currentIndex = (currentIndex - 1 + choices.length) % choices.length;
285
- displayChoices();
286
- }
287
- else if (keyStr === '\x1b[B') { // Down
288
- currentIndex = (currentIndex + 1) % choices.length;
289
- displayChoices();
290
- }
291
- else if (keyStr === ' ') { // Space
292
- if (!choices[currentIndex].disabled) {
293
- if (selected.has(currentIndex)) {
294
- selected.delete(currentIndex);
295
- }
296
- else {
297
- // Check max limit
298
- if (!max || selected.size < max) {
299
- selected.add(currentIndex);
300
- }
301
- }
302
- displayChoices();
311
+ PromptManager.prototype.multiSelect = function (options) {
312
+ return __awaiter(this, void 0, Promise, function () {
313
+ var message, choices, _a, defaultValues, _b, required, min, max, selected, i, currentIndex, displayChoices, i;
314
+ var _this = this;
315
+ return __generator(this, function (_c) {
316
+ message = options.message, choices = options.options, _a = options["default"], defaultValues = _a === void 0 ? [] : _a, _b = options.required, required = _b === void 0 ? false : _b, min = options.min, max = options.max;
317
+ this.formatter.writeln();
318
+ this.formatter.writeln(this.formatter.bold("? " + message));
319
+ this.formatter.writeln(this.formatter.dim(' (Use arrow keys to navigate, space to select, enter to confirm)'));
320
+ this.formatter.writeln();
321
+ selected = new Set();
322
+ for (i = 0; i < choices.length; i++) {
323
+ // Check both default array and individual selected property
324
+ if (defaultValues.includes(choices[i].value) || choices[i].selected) {
325
+ selected.add(i);
303
326
  }
304
327
  }
305
- else if (keyStr === '\r' || keyStr === '\n') { // Enter
306
- // Validate selection
307
- if (required && selected.size === 0) {
308
- this.formatter.writeln(this.formatter.error(' At least one option must be selected'));
309
- return;
310
- }
311
- if (min && selected.size < min) {
312
- this.formatter.writeln(this.formatter.error(` At least ${min} options must be selected`));
313
- return;
328
+ currentIndex = 0;
329
+ displayChoices = function () {
330
+ // Move cursor up to overwrite
331
+ process.stdout.write("\u001B[" + choices.length + "A");
332
+ for (var i = 0; i < choices.length; i++) {
333
+ var choice = choices[i];
334
+ var isCurrentRow = i === currentIndex;
335
+ var isSelected = selected.has(i);
336
+ var cursor = isCurrentRow ? _this.formatter.info('>') : ' ';
337
+ var checkbox = isSelected
338
+ ? _this.formatter.success('[x]')
339
+ : _this.formatter.dim('[ ]');
340
+ var label = isCurrentRow
341
+ ? _this.formatter.highlight(choice.label)
342
+ : choice.label;
343
+ var hint = choice.hint ? _this.formatter.dim(" - " + choice.hint) : '';
344
+ var disabled = choice.disabled ? _this.formatter.dim(' (disabled)') : '';
345
+ _this.formatter.writeln(" " + cursor + " " + checkbox + " " + label + hint + disabled);
314
346
  }
315
- cleanup();
316
- const selectedValues = Array.from(selected).map(i => choices[i].value);
317
- const selectedLabels = Array.from(selected).map(i => choices[i].label);
318
- this.formatter.writeln();
319
- this.formatter.writeln(this.formatter.success(`Selected: ${selectedLabels.join(', ')}`));
320
- resolve(selectedValues);
347
+ };
348
+ // Initial display
349
+ for (i = 0; i < choices.length; i++) {
350
+ this.formatter.writeln('');
321
351
  }
322
- else if (keyStr === '\x03') { // Ctrl+C
323
- cleanup();
324
- reject(new Error('User cancelled'));
325
- }
326
- else if (keyStr === 'a') { // Select all
327
- if (!max || choices.length <= max) {
328
- for (let i = 0; i < choices.length; i++) {
329
- if (!choices[i].disabled) {
330
- selected.add(i);
331
- }
352
+ displayChoices();
353
+ return [2 /*return*/, new Promise(function (resolve, reject) {
354
+ var rl = _this.createInterface();
355
+ if (process.stdin.isTTY) {
356
+ process.stdin.setRawMode(true);
332
357
  }
333
- displayChoices();
334
- }
335
- }
336
- else if (keyStr === 'n') { // Select none
337
- selected.clear();
338
- displayChoices();
339
- }
340
- };
341
- const cleanup = () => {
342
- process.stdin.removeListener('data', handleKeypress);
343
- if (process.stdin.isTTY) {
344
- process.stdin.setRawMode(false);
345
- }
346
- this.close();
347
- };
348
- process.stdin.on('data', handleKeypress);
358
+ process.stdin.resume();
359
+ var handleKeypress = function (key) {
360
+ var keyStr = key.toString();
361
+ if (keyStr === '\x1b[A') { // Up
362
+ currentIndex = (currentIndex - 1 + choices.length) % choices.length;
363
+ displayChoices();
364
+ }
365
+ else if (keyStr === '\x1b[B') { // Down
366
+ currentIndex = (currentIndex + 1) % choices.length;
367
+ displayChoices();
368
+ }
369
+ else if (keyStr === ' ') { // Space
370
+ if (!choices[currentIndex].disabled) {
371
+ if (selected.has(currentIndex)) {
372
+ selected["delete"](currentIndex);
373
+ }
374
+ else {
375
+ // Check max limit
376
+ if (!max || selected.size < max) {
377
+ selected.add(currentIndex);
378
+ }
379
+ }
380
+ displayChoices();
381
+ }
382
+ }
383
+ else if (keyStr === '\r' || keyStr === '\n') { // Enter
384
+ // Validate selection
385
+ if (required && selected.size === 0) {
386
+ _this.formatter.writeln(_this.formatter.error(' At least one option must be selected'));
387
+ return;
388
+ }
389
+ if (min && selected.size < min) {
390
+ _this.formatter.writeln(_this.formatter.error(" At least " + min + " options must be selected"));
391
+ return;
392
+ }
393
+ cleanup();
394
+ var selectedValues = Array.from(selected).map(function (i) { return choices[i].value; });
395
+ var selectedLabels = Array.from(selected).map(function (i) { return choices[i].label; });
396
+ _this.formatter.writeln();
397
+ _this.formatter.writeln(_this.formatter.success("Selected: " + selectedLabels.join(', ')));
398
+ resolve(selectedValues);
399
+ }
400
+ else if (keyStr === '\x03') { // Ctrl+C
401
+ cleanup();
402
+ reject(new Error('User cancelled'));
403
+ }
404
+ else if (keyStr === 'a') { // Select all
405
+ if (!max || choices.length <= max) {
406
+ for (var i = 0; i < choices.length; i++) {
407
+ if (!choices[i].disabled) {
408
+ selected.add(i);
409
+ }
410
+ }
411
+ displayChoices();
412
+ }
413
+ }
414
+ else if (keyStr === 'n') { // Select none
415
+ selected.clear();
416
+ displayChoices();
417
+ }
418
+ };
419
+ var cleanup = function () {
420
+ process.stdin.removeListener('data', handleKeypress);
421
+ if (process.stdin.isTTY) {
422
+ process.stdin.setRawMode(false);
423
+ }
424
+ _this.close();
425
+ };
426
+ process.stdin.on('data', handleKeypress);
427
+ })];
428
+ });
349
429
  });
350
- }
430
+ };
351
431
  // ============================================
352
432
  // Text Prompt (Multi-line)
353
433
  // ============================================
354
- async text(message, placeholder) {
355
- this.formatter.writeln();
356
- this.formatter.writeln(this.formatter.bold(`? ${message}`));
357
- if (placeholder) {
358
- this.formatter.writeln(this.formatter.dim(` ${placeholder}`));
359
- }
360
- this.formatter.writeln(this.formatter.dim(' (Enter an empty line to finish)'));
361
- this.formatter.writeln();
362
- const lines = [];
363
- while (true) {
364
- const line = await this.question(' > ');
365
- if (line === '') {
366
- break;
367
- }
368
- lines.push(line);
369
- }
370
- this.close();
371
- return lines.join('\n');
372
- }
434
+ PromptManager.prototype.text = function (message, placeholder) {
435
+ return __awaiter(this, void 0, Promise, function () {
436
+ var lines, line;
437
+ return __generator(this, function (_a) {
438
+ switch (_a.label) {
439
+ case 0:
440
+ this.formatter.writeln();
441
+ this.formatter.writeln(this.formatter.bold("? " + message));
442
+ if (placeholder) {
443
+ this.formatter.writeln(this.formatter.dim(" " + placeholder));
444
+ }
445
+ this.formatter.writeln(this.formatter.dim(' (Enter an empty line to finish)'));
446
+ this.formatter.writeln();
447
+ lines = [];
448
+ _a.label = 1;
449
+ case 1:
450
+ if (!true) return [3 /*break*/, 3];
451
+ return [4 /*yield*/, this.question(' > ')];
452
+ case 2:
453
+ line = _a.sent();
454
+ if (line === '') {
455
+ return [3 /*break*/, 3];
456
+ }
457
+ lines.push(line);
458
+ return [3 /*break*/, 1];
459
+ case 3:
460
+ this.close();
461
+ return [2 /*return*/, lines.join('\n')];
462
+ }
463
+ });
464
+ });
465
+ };
373
466
  // ============================================
374
467
  // Number Prompt
375
468
  // ============================================
376
- async number(message, options = {}) {
377
- const { default: defaultValue, min, max } = options;
378
- const validate = (value) => {
379
- const num = Number(value);
380
- if (isNaN(num)) {
381
- return 'Please enter a valid number';
382
- }
383
- if (min !== undefined && num < min) {
384
- return `Value must be at least ${min}`;
385
- }
386
- if (max !== undefined && num > max) {
387
- return `Value must be at most ${max}`;
388
- }
389
- return true;
390
- };
391
- const result = await this.input({
392
- message,
393
- default: defaultValue?.toString(),
394
- validate
469
+ PromptManager.prototype.number = function (message, options) {
470
+ if (options === void 0) { options = {}; }
471
+ return __awaiter(this, void 0, Promise, function () {
472
+ var defaultValue, min, max, validate, result;
473
+ return __generator(this, function (_a) {
474
+ switch (_a.label) {
475
+ case 0:
476
+ defaultValue = options["default"], min = options.min, max = options.max;
477
+ validate = function (value) {
478
+ var num = Number(value);
479
+ if (isNaN(num)) {
480
+ return 'Please enter a valid number';
481
+ }
482
+ if (min !== undefined && num < min) {
483
+ return "Value must be at least " + min;
484
+ }
485
+ if (max !== undefined && num > max) {
486
+ return "Value must be at most " + max;
487
+ }
488
+ return true;
489
+ };
490
+ return [4 /*yield*/, this.input({
491
+ message: message,
492
+ "default": defaultValue === null || defaultValue === void 0 ? void 0 : defaultValue.toString(),
493
+ validate: validate
494
+ })];
495
+ case 1:
496
+ result = _a.sent();
497
+ return [2 /*return*/, Number(result)];
498
+ }
499
+ });
395
500
  });
396
- return Number(result);
397
- }
501
+ };
398
502
  // ============================================
399
503
  // Autocomplete Prompt
400
504
  // ============================================
401
- async autocomplete(message, choices, options = {}) {
402
- const { limit = 10 } = options;
403
- this.formatter.writeln();
404
- this.formatter.writeln(this.formatter.bold(`? ${message}`));
405
- this.formatter.writeln(this.formatter.dim(' (Type to filter, arrow keys to navigate)'));
406
- let query = '';
407
- let selectedIndex = 0;
408
- let filteredChoices = choices.slice(0, limit);
409
- const filterChoices = (q) => {
410
- if (q === '')
411
- return choices.slice(0, limit);
412
- const normalized = q.toLowerCase();
413
- return choices
414
- .filter(c => c.label.toLowerCase().includes(normalized))
415
- .slice(0, limit);
416
- };
417
- const displayChoices = () => {
418
- // Clear previous output
419
- process.stdout.write(`\x1b[${filteredChoices.length + 1}A`);
420
- process.stdout.write('\x1b[J');
421
- // Show input
422
- this.formatter.writeln(` ${this.formatter.dim('>')} ${query}`);
423
- // Show filtered options
424
- for (let i = 0; i < filteredChoices.length; i++) {
425
- const choice = filteredChoices[i];
426
- const isSelected = i === selectedIndex;
427
- const prefix = isSelected ? this.formatter.info('>') : ' ';
428
- const label = isSelected ? this.formatter.highlight(choice.label) : choice.label;
429
- this.formatter.writeln(` ${prefix} ${label}`);
430
- }
431
- };
432
- // Initial display
433
- this.formatter.writeln('');
434
- for (let i = 0; i < limit; i++) {
435
- this.formatter.writeln('');
436
- }
437
- displayChoices();
438
- return new Promise((resolve, reject) => {
439
- const rl = this.createInterface();
440
- if (process.stdin.isTTY) {
441
- process.stdin.setRawMode(true);
442
- }
443
- process.stdin.resume();
444
- const handleKeypress = (key) => {
445
- const keyStr = key.toString();
446
- if (keyStr === '\x1b[A') { // Up
447
- selectedIndex = Math.max(0, selectedIndex - 1);
448
- displayChoices();
449
- }
450
- else if (keyStr === '\x1b[B') { // Down
451
- selectedIndex = Math.min(filteredChoices.length - 1, selectedIndex + 1);
452
- displayChoices();
453
- }
454
- else if (keyStr === '\r' || keyStr === '\n') { // Enter
455
- if (filteredChoices.length > 0) {
456
- cleanup();
457
- const selected = filteredChoices[selectedIndex];
458
- this.formatter.writeln();
459
- this.formatter.writeln(this.formatter.success(`Selected: ${selected.label}`));
460
- resolve(selected.value);
505
+ PromptManager.prototype.autocomplete = function (message, choices, options) {
506
+ if (options === void 0) { options = {}; }
507
+ return __awaiter(this, void 0, Promise, function () {
508
+ var _a, limit, query, selectedIndex, filteredChoices, filterChoices, displayChoices, i;
509
+ var _this = this;
510
+ return __generator(this, function (_b) {
511
+ _a = options.limit, limit = _a === void 0 ? 10 : _a;
512
+ this.formatter.writeln();
513
+ this.formatter.writeln(this.formatter.bold("? " + message));
514
+ this.formatter.writeln(this.formatter.dim(' (Type to filter, arrow keys to navigate)'));
515
+ query = '';
516
+ selectedIndex = 0;
517
+ filteredChoices = choices.slice(0, limit);
518
+ filterChoices = function (q) {
519
+ if (q === '')
520
+ return choices.slice(0, limit);
521
+ var normalized = q.toLowerCase();
522
+ return choices
523
+ .filter(function (c) { return c.label.toLowerCase().includes(normalized); })
524
+ .slice(0, limit);
525
+ };
526
+ displayChoices = function () {
527
+ // Clear previous output
528
+ process.stdout.write("\u001B[" + (filteredChoices.length + 1) + "A");
529
+ process.stdout.write('\x1b[J');
530
+ // Show input
531
+ _this.formatter.writeln(" " + _this.formatter.dim('>') + " " + query);
532
+ // Show filtered options
533
+ for (var i = 0; i < filteredChoices.length; i++) {
534
+ var choice = filteredChoices[i];
535
+ var isSelected = i === selectedIndex;
536
+ var prefix = isSelected ? _this.formatter.info('>') : ' ';
537
+ var label = isSelected ? _this.formatter.highlight(choice.label) : choice.label;
538
+ _this.formatter.writeln(" " + prefix + " " + label);
461
539
  }
540
+ };
541
+ // Initial display
542
+ this.formatter.writeln('');
543
+ for (i = 0; i < limit; i++) {
544
+ this.formatter.writeln('');
462
545
  }
463
- else if (keyStr === '\x7f' || keyStr === '\x08') { // Backspace
464
- query = query.slice(0, -1);
465
- filteredChoices = filterChoices(query);
466
- selectedIndex = 0;
467
- displayChoices();
468
- }
469
- else if (keyStr === '\x03') { // Ctrl+C
470
- cleanup();
471
- reject(new Error('User cancelled'));
472
- }
473
- else if (keyStr.charCodeAt(0) >= 32 && keyStr.charCodeAt(0) < 127) {
474
- // Printable character
475
- query += keyStr;
476
- filteredChoices = filterChoices(query);
477
- selectedIndex = 0;
478
- displayChoices();
479
- }
480
- };
481
- const cleanup = () => {
482
- process.stdin.removeListener('data', handleKeypress);
483
- if (process.stdin.isTTY) {
484
- process.stdin.setRawMode(false);
485
- }
486
- this.close();
487
- };
488
- process.stdin.on('data', handleKeypress);
546
+ displayChoices();
547
+ return [2 /*return*/, new Promise(function (resolve, reject) {
548
+ var rl = _this.createInterface();
549
+ if (process.stdin.isTTY) {
550
+ process.stdin.setRawMode(true);
551
+ }
552
+ process.stdin.resume();
553
+ var handleKeypress = function (key) {
554
+ var keyStr = key.toString();
555
+ if (keyStr === '\x1b[A') { // Up
556
+ selectedIndex = Math.max(0, selectedIndex - 1);
557
+ displayChoices();
558
+ }
559
+ else if (keyStr === '\x1b[B') { // Down
560
+ selectedIndex = Math.min(filteredChoices.length - 1, selectedIndex + 1);
561
+ displayChoices();
562
+ }
563
+ else if (keyStr === '\r' || keyStr === '\n') { // Enter
564
+ if (filteredChoices.length > 0) {
565
+ cleanup();
566
+ var selected = filteredChoices[selectedIndex];
567
+ _this.formatter.writeln();
568
+ _this.formatter.writeln(_this.formatter.success("Selected: " + selected.label));
569
+ resolve(selected.value);
570
+ }
571
+ }
572
+ else if (keyStr === '\x7f' || keyStr === '\x08') { // Backspace
573
+ query = query.slice(0, -1);
574
+ filteredChoices = filterChoices(query);
575
+ selectedIndex = 0;
576
+ displayChoices();
577
+ }
578
+ else if (keyStr === '\x03') { // Ctrl+C
579
+ cleanup();
580
+ reject(new Error('User cancelled'));
581
+ }
582
+ else if (keyStr.charCodeAt(0) >= 32 && keyStr.charCodeAt(0) < 127) {
583
+ // Printable character
584
+ query += keyStr;
585
+ filteredChoices = filterChoices(query);
586
+ selectedIndex = 0;
587
+ displayChoices();
588
+ }
589
+ };
590
+ var cleanup = function () {
591
+ process.stdin.removeListener('data', handleKeypress);
592
+ if (process.stdin.isTTY) {
593
+ process.stdin.setRawMode(false);
594
+ }
595
+ _this.close();
596
+ };
597
+ process.stdin.on('data', handleKeypress);
598
+ })];
599
+ });
489
600
  });
490
- }
491
- }
601
+ };
602
+ return PromptManager;
603
+ }());
492
604
  // Export singleton and convenience functions
493
- export const promptManager = new PromptManager();
494
- export const select = (options) => promptManager.select(options);
495
- export const confirm = (options) => promptManager.confirm(options);
496
- export const input = (options) => promptManager.input(options);
497
- export const multiSelect = (options) => promptManager.multiSelect(options);
498
- export const text = (message, placeholder) => promptManager.text(message, placeholder);
499
- export const number = (message, options) => promptManager.number(message, options);
500
- export const autocomplete = (message, choices, options) => promptManager.autocomplete(message, choices, options);
605
+ export var promptManager = new PromptManager();
606
+ export var select = function (options) {
607
+ return promptManager.select(options);
608
+ };
609
+ export var confirm = function (options) {
610
+ return promptManager.confirm(options);
611
+ };
612
+ export var input = function (options) {
613
+ return promptManager.input(options);
614
+ };
615
+ export var multiSelect = function (options) {
616
+ return promptManager.multiSelect(options);
617
+ };
618
+ export var text = function (message, placeholder) {
619
+ return promptManager.text(message, placeholder);
620
+ };
621
+ export var number = function (message, options) {
622
+ return promptManager.number(message, options);
623
+ };
624
+ export var autocomplete = function (message, choices, options) { return promptManager.autocomplete(message, choices, options); };
501
625
  //# sourceMappingURL=prompt.js.map