@nac3/forge-cli 0.2.0-alpha.1

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 (561) hide show
  1. package/LICENSE +45 -0
  2. package/README.md +371 -0
  3. package/dist/bin/yf.d.ts +5 -0
  4. package/dist/bin/yf.d.ts.map +1 -0
  5. package/dist/bin/yf.js +86 -0
  6. package/dist/bin/yf.js.map +1 -0
  7. package/dist/chat/claude.d.ts +100 -0
  8. package/dist/chat/claude.d.ts.map +1 -0
  9. package/dist/chat/claude.js +228 -0
  10. package/dist/chat/claude.js.map +1 -0
  11. package/dist/chat/ingest_session.d.ts +97 -0
  12. package/dist/chat/ingest_session.d.ts.map +1 -0
  13. package/dist/chat/ingest_session.js +99 -0
  14. package/dist/chat/ingest_session.js.map +1 -0
  15. package/dist/chat/panel.d.ts +15 -0
  16. package/dist/chat/panel.d.ts.map +1 -0
  17. package/dist/chat/panel.js +1526 -0
  18. package/dist/chat/panel.js.map +1 -0
  19. package/dist/chat/persistence.d.ts +37 -0
  20. package/dist/chat/persistence.d.ts.map +1 -0
  21. package/dist/chat/persistence.js +91 -0
  22. package/dist/chat/persistence.js.map +1 -0
  23. package/dist/chat/server.d.ts +34 -0
  24. package/dist/chat/server.d.ts.map +1 -0
  25. package/dist/chat/server.js +1540 -0
  26. package/dist/chat/server.js.map +1 -0
  27. package/dist/chat/spec_extract.d.ts +35 -0
  28. package/dist/chat/spec_extract.d.ts.map +1 -0
  29. package/dist/chat/spec_extract.js +152 -0
  30. package/dist/chat/spec_extract.js.map +1 -0
  31. package/dist/chat/spec_plan.d.ts +65 -0
  32. package/dist/chat/spec_plan.d.ts.map +1 -0
  33. package/dist/chat/spec_plan.js +160 -0
  34. package/dist/chat/spec_plan.js.map +1 -0
  35. package/dist/chat/spec_scaffold.d.ts +95 -0
  36. package/dist/chat/spec_scaffold.d.ts.map +1 -0
  37. package/dist/chat/spec_scaffold.js +220 -0
  38. package/dist/chat/spec_scaffold.js.map +1 -0
  39. package/dist/chat/tools/git.d.ts +59 -0
  40. package/dist/chat/tools/git.d.ts.map +1 -0
  41. package/dist/chat/tools/git.js +313 -0
  42. package/dist/chat/tools/git.js.map +1 -0
  43. package/dist/chat/tools/github.d.ts +59 -0
  44. package/dist/chat/tools/github.d.ts.map +1 -0
  45. package/dist/chat/tools/github.js +310 -0
  46. package/dist/chat/tools/github.js.map +1 -0
  47. package/dist/chat/tools/lifecycle.d.ts +82 -0
  48. package/dist/chat/tools/lifecycle.d.ts.map +1 -0
  49. package/dist/chat/tools/lifecycle.js +295 -0
  50. package/dist/chat/tools/lifecycle.js.map +1 -0
  51. package/dist/chat/tools/manual.d.ts +26 -0
  52. package/dist/chat/tools/manual.d.ts.map +1 -0
  53. package/dist/chat/tools/manual.js +164 -0
  54. package/dist/chat/tools/manual.js.map +1 -0
  55. package/dist/chat/tools/reader.d.ts +80 -0
  56. package/dist/chat/tools/reader.d.ts.map +1 -0
  57. package/dist/chat/tools/reader.js +471 -0
  58. package/dist/chat/tools/reader.js.map +1 -0
  59. package/dist/chat/tools.d.ts +106 -0
  60. package/dist/chat/tools.d.ts.map +1 -0
  61. package/dist/chat/tools.js +587 -0
  62. package/dist/chat/tools.js.map +1 -0
  63. package/dist/codegen/e2e.d.ts +106 -0
  64. package/dist/codegen/e2e.d.ts.map +1 -0
  65. package/dist/codegen/e2e.js +931 -0
  66. package/dist/codegen/e2e.js.map +1 -0
  67. package/dist/codegen/v3_flow_emit.d.ts +70 -0
  68. package/dist/codegen/v3_flow_emit.d.ts.map +1 -0
  69. package/dist/codegen/v3_flow_emit.js +225 -0
  70. package/dist/codegen/v3_flow_emit.js.map +1 -0
  71. package/dist/commands/_stub.d.ts +2 -0
  72. package/dist/commands/_stub.d.ts.map +1 -0
  73. package/dist/commands/_stub.js +21 -0
  74. package/dist/commands/_stub.js.map +1 -0
  75. package/dist/commands/app.d.ts +31 -0
  76. package/dist/commands/app.d.ts.map +1 -0
  77. package/dist/commands/app.js +331 -0
  78. package/dist/commands/app.js.map +1 -0
  79. package/dist/commands/chat.d.ts +18 -0
  80. package/dist/commands/chat.d.ts.map +1 -0
  81. package/dist/commands/chat.js +76 -0
  82. package/dist/commands/chat.js.map +1 -0
  83. package/dist/commands/deploy.d.ts +21 -0
  84. package/dist/commands/deploy.d.ts.map +1 -0
  85. package/dist/commands/deploy.js +121 -0
  86. package/dist/commands/deploy.js.map +1 -0
  87. package/dist/commands/doctor.d.ts +14 -0
  88. package/dist/commands/doctor.d.ts.map +1 -0
  89. package/dist/commands/doctor.js +280 -0
  90. package/dist/commands/doctor.js.map +1 -0
  91. package/dist/commands/figma.d.ts +32 -0
  92. package/dist/commands/figma.d.ts.map +1 -0
  93. package/dist/commands/figma.js +141 -0
  94. package/dist/commands/figma.js.map +1 -0
  95. package/dist/commands/gen-flow-tests.d.ts +8 -0
  96. package/dist/commands/gen-flow-tests.d.ts.map +1 -0
  97. package/dist/commands/gen-flow-tests.js +78 -0
  98. package/dist/commands/gen-flow-tests.js.map +1 -0
  99. package/dist/commands/gen-tests.d.ts +9 -0
  100. package/dist/commands/gen-tests.d.ts.map +1 -0
  101. package/dist/commands/gen-tests.js +118 -0
  102. package/dist/commands/gen-tests.js.map +1 -0
  103. package/dist/commands/license.d.ts +14 -0
  104. package/dist/commands/license.d.ts.map +1 -0
  105. package/dist/commands/license.js +182 -0
  106. package/dist/commands/license.js.map +1 -0
  107. package/dist/commands/log.d.ts +19 -0
  108. package/dist/commands/log.d.ts.map +1 -0
  109. package/dist/commands/log.js +101 -0
  110. package/dist/commands/log.js.map +1 -0
  111. package/dist/commands/migrate.d.ts +118 -0
  112. package/dist/commands/migrate.d.ts.map +1 -0
  113. package/dist/commands/migrate.js +1410 -0
  114. package/dist/commands/migrate.js.map +1 -0
  115. package/dist/commands/mobile.d.ts +27 -0
  116. package/dist/commands/mobile.d.ts.map +1 -0
  117. package/dist/commands/mobile.js +90 -0
  118. package/dist/commands/mobile.js.map +1 -0
  119. package/dist/commands/new.d.ts +32 -0
  120. package/dist/commands/new.d.ts.map +1 -0
  121. package/dist/commands/new.js +107 -0
  122. package/dist/commands/new.js.map +1 -0
  123. package/dist/commands/pilot.d.ts +8 -0
  124. package/dist/commands/pilot.d.ts.map +1 -0
  125. package/dist/commands/pilot.js +104 -0
  126. package/dist/commands/pilot.js.map +1 -0
  127. package/dist/commands/projects.d.ts +21 -0
  128. package/dist/commands/projects.d.ts.map +1 -0
  129. package/dist/commands/projects.js +238 -0
  130. package/dist/commands/projects.js.map +1 -0
  131. package/dist/commands/publish.d.ts +35 -0
  132. package/dist/commands/publish.d.ts.map +1 -0
  133. package/dist/commands/publish.js +194 -0
  134. package/dist/commands/publish.js.map +1 -0
  135. package/dist/commands/repo.d.ts +59 -0
  136. package/dist/commands/repo.d.ts.map +1 -0
  137. package/dist/commands/repo.js +178 -0
  138. package/dist/commands/repo.js.map +1 -0
  139. package/dist/commands/review-screens.d.ts +28 -0
  140. package/dist/commands/review-screens.d.ts.map +1 -0
  141. package/dist/commands/review-screens.js +345 -0
  142. package/dist/commands/review-screens.js.map +1 -0
  143. package/dist/commands/scenarios.d.ts +23 -0
  144. package/dist/commands/scenarios.d.ts.map +1 -0
  145. package/dist/commands/scenarios.js +304 -0
  146. package/dist/commands/scenarios.js.map +1 -0
  147. package/dist/commands/ship.d.ts +18 -0
  148. package/dist/commands/ship.d.ts.map +1 -0
  149. package/dist/commands/ship.js +41 -0
  150. package/dist/commands/ship.js.map +1 -0
  151. package/dist/commands/test.d.ts +29 -0
  152. package/dist/commands/test.d.ts.map +1 -0
  153. package/dist/commands/test.js +62 -0
  154. package/dist/commands/test.js.map +1 -0
  155. package/dist/commands/tunnel.d.ts +22 -0
  156. package/dist/commands/tunnel.d.ts.map +1 -0
  157. package/dist/commands/tunnel.js +77 -0
  158. package/dist/commands/tunnel.js.map +1 -0
  159. package/dist/commands/validate.d.ts +14 -0
  160. package/dist/commands/validate.d.ts.map +1 -0
  161. package/dist/commands/validate.js +51 -0
  162. package/dist/commands/validate.js.map +1 -0
  163. package/dist/commands/vault.d.ts +32 -0
  164. package/dist/commands/vault.d.ts.map +1 -0
  165. package/dist/commands/vault.js +489 -0
  166. package/dist/commands/vault.js.map +1 -0
  167. package/dist/commands/voice.d.ts +16 -0
  168. package/dist/commands/voice.d.ts.map +1 -0
  169. package/dist/commands/voice.js +69 -0
  170. package/dist/commands/voice.js.map +1 -0
  171. package/dist/core/cascade_router.d.ts +90 -0
  172. package/dist/core/cascade_router.d.ts.map +1 -0
  173. package/dist/core/cascade_router.js +131 -0
  174. package/dist/core/cascade_router.js.map +1 -0
  175. package/dist/core/cf_tunnel.d.ts +52 -0
  176. package/dist/core/cf_tunnel.d.ts.map +1 -0
  177. package/dist/core/cf_tunnel.js +134 -0
  178. package/dist/core/cf_tunnel.js.map +1 -0
  179. package/dist/core/gha_dispatcher.d.ts +48 -0
  180. package/dist/core/gha_dispatcher.d.ts.map +1 -0
  181. package/dist/core/gha_dispatcher.js +198 -0
  182. package/dist/core/gha_dispatcher.js.map +1 -0
  183. package/dist/core/logger.d.ts +89 -0
  184. package/dist/core/logger.d.ts.map +1 -0
  185. package/dist/core/logger.js +245 -0
  186. package/dist/core/logger.js.map +1 -0
  187. package/dist/core/mode.d.ts +26 -0
  188. package/dist/core/mode.d.ts.map +1 -0
  189. package/dist/core/mode.js +122 -0
  190. package/dist/core/mode.js.map +1 -0
  191. package/dist/core/pairing.d.ts +40 -0
  192. package/dist/core/pairing.d.ts.map +1 -0
  193. package/dist/core/pairing.js +145 -0
  194. package/dist/core/pairing.js.map +1 -0
  195. package/dist/core/pilot_setup.d.ts +29 -0
  196. package/dist/core/pilot_setup.d.ts.map +1 -0
  197. package/dist/core/pilot_setup.js +119 -0
  198. package/dist/core/pilot_setup.js.map +1 -0
  199. package/dist/core/polar.d.ts +81 -0
  200. package/dist/core/polar.d.ts.map +1 -0
  201. package/dist/core/polar.js +175 -0
  202. package/dist/core/polar.js.map +1 -0
  203. package/dist/core/project_picker.d.ts +56 -0
  204. package/dist/core/project_picker.d.ts.map +1 -0
  205. package/dist/core/project_picker.js +86 -0
  206. package/dist/core/project_picker.js.map +1 -0
  207. package/dist/core/projects.d.ts +58 -0
  208. package/dist/core/projects.d.ts.map +1 -0
  209. package/dist/core/projects.js +146 -0
  210. package/dist/core/projects.js.map +1 -0
  211. package/dist/core/projects_sync.d.ts +80 -0
  212. package/dist/core/projects_sync.d.ts.map +1 -0
  213. package/dist/core/projects_sync.js +278 -0
  214. package/dist/core/projects_sync.js.map +1 -0
  215. package/dist/core/remote_runner.d.ts +70 -0
  216. package/dist/core/remote_runner.d.ts.map +1 -0
  217. package/dist/core/remote_runner.js +133 -0
  218. package/dist/core/remote_runner.js.map +1 -0
  219. package/dist/core/repo_state.d.ts +24 -0
  220. package/dist/core/repo_state.d.ts.map +1 -0
  221. package/dist/core/repo_state.js +109 -0
  222. package/dist/core/repo_state.js.map +1 -0
  223. package/dist/core/target.d.ts +31 -0
  224. package/dist/core/target.d.ts.map +1 -0
  225. package/dist/core/target.js +121 -0
  226. package/dist/core/target.js.map +1 -0
  227. package/dist/deploy/aws.d.ts +43 -0
  228. package/dist/deploy/aws.d.ts.map +1 -0
  229. package/dist/deploy/aws.js +173 -0
  230. package/dist/deploy/aws.js.map +1 -0
  231. package/dist/figma/api.d.ts +35 -0
  232. package/dist/figma/api.d.ts.map +1 -0
  233. package/dist/figma/api.js +40 -0
  234. package/dist/figma/api.js.map +1 -0
  235. package/dist/figma/decorator.d.ts +74 -0
  236. package/dist/figma/decorator.d.ts.map +1 -0
  237. package/dist/figma/decorator.js +210 -0
  238. package/dist/figma/decorator.js.map +1 -0
  239. package/dist/figma/heuristics.d.ts +29 -0
  240. package/dist/figma/heuristics.d.ts.map +1 -0
  241. package/dist/figma/heuristics.js +110 -0
  242. package/dist/figma/heuristics.js.map +1 -0
  243. package/dist/figma/normalize.d.ts +33 -0
  244. package/dist/figma/normalize.d.ts.map +1 -0
  245. package/dist/figma/normalize.js +101 -0
  246. package/dist/figma/normalize.js.map +1 -0
  247. package/dist/figma/tokens.d.ts +23 -0
  248. package/dist/figma/tokens.d.ts.map +1 -0
  249. package/dist/figma/tokens.js +111 -0
  250. package/dist/figma/tokens.js.map +1 -0
  251. package/dist/figma/types.d.ts +118 -0
  252. package/dist/figma/types.d.ts.map +1 -0
  253. package/dist/figma/types.js +12 -0
  254. package/dist/figma/types.js.map +1 -0
  255. package/dist/i18n/index.d.ts +48 -0
  256. package/dist/i18n/index.d.ts.map +1 -0
  257. package/dist/i18n/index.js +135 -0
  258. package/dist/i18n/index.js.map +1 -0
  259. package/dist/i18n/types.d.ts +52 -0
  260. package/dist/i18n/types.d.ts.map +1 -0
  261. package/dist/i18n/types.js +85 -0
  262. package/dist/i18n/types.js.map +1 -0
  263. package/dist/index.d.ts +12 -0
  264. package/dist/index.d.ts.map +1 -0
  265. package/dist/index.js +11 -0
  266. package/dist/index.js.map +1 -0
  267. package/dist/lan/mdns_packet.d.ts +74 -0
  268. package/dist/lan/mdns_packet.d.ts.map +1 -0
  269. package/dist/lan/mdns_packet.js +247 -0
  270. package/dist/lan/mdns_packet.js.map +1 -0
  271. package/dist/lan/mdns_service.d.ts +102 -0
  272. package/dist/lan/mdns_service.d.ts.map +1 -0
  273. package/dist/lan/mdns_service.js +206 -0
  274. package/dist/lan/mdns_service.js.map +1 -0
  275. package/dist/license/activate.d.ts +33 -0
  276. package/dist/license/activate.d.ts.map +1 -0
  277. package/dist/license/activate.js +135 -0
  278. package/dist/license/activate.js.map +1 -0
  279. package/dist/license/fingerprint.d.ts +2 -0
  280. package/dist/license/fingerprint.d.ts.map +1 -0
  281. package/dist/license/fingerprint.js +29 -0
  282. package/dist/license/fingerprint.js.map +1 -0
  283. package/dist/license/hito4_client.d.ts +24 -0
  284. package/dist/license/hito4_client.d.ts.map +1 -0
  285. package/dist/license/hito4_client.js +103 -0
  286. package/dist/license/hito4_client.js.map +1 -0
  287. package/dist/license/index.d.ts +22 -0
  288. package/dist/license/index.d.ts.map +1 -0
  289. package/dist/license/index.js +125 -0
  290. package/dist/license/index.js.map +1 -0
  291. package/dist/license/types.d.ts +38 -0
  292. package/dist/license/types.d.ts.map +1 -0
  293. package/dist/license/types.js +9 -0
  294. package/dist/license/types.js.map +1 -0
  295. package/dist/migrate/ai-apply.d.ts +198 -0
  296. package/dist/migrate/ai-apply.d.ts.map +1 -0
  297. package/dist/migrate/ai-apply.js +833 -0
  298. package/dist/migrate/ai-apply.js.map +1 -0
  299. package/dist/migrate/ai-decorator.d.ts +87 -0
  300. package/dist/migrate/ai-decorator.d.ts.map +1 -0
  301. package/dist/migrate/ai-decorator.js +203 -0
  302. package/dist/migrate/ai-decorator.js.map +1 -0
  303. package/dist/migrate/apply.d.ts +28 -0
  304. package/dist/migrate/apply.d.ts.map +1 -0
  305. package/dist/migrate/apply.js +119 -0
  306. package/dist/migrate/apply.js.map +1 -0
  307. package/dist/migrate/audit.d.ts +9 -0
  308. package/dist/migrate/audit.d.ts.map +1 -0
  309. package/dist/migrate/audit.js +197 -0
  310. package/dist/migrate/audit.js.map +1 -0
  311. package/dist/migrate/diff.d.ts +28 -0
  312. package/dist/migrate/diff.d.ts.map +1 -0
  313. package/dist/migrate/diff.js +154 -0
  314. package/dist/migrate/diff.js.map +1 -0
  315. package/dist/migrate/html-orchestrator.d.ts +81 -0
  316. package/dist/migrate/html-orchestrator.d.ts.map +1 -0
  317. package/dist/migrate/html-orchestrator.js +233 -0
  318. package/dist/migrate/html-orchestrator.js.map +1 -0
  319. package/dist/migrate/html-walker.d.ts +93 -0
  320. package/dist/migrate/html-walker.d.ts.map +1 -0
  321. package/dist/migrate/html-walker.js +288 -0
  322. package/dist/migrate/html-walker.js.map +1 -0
  323. package/dist/migrate/js-template-walker.d.ts +118 -0
  324. package/dist/migrate/js-template-walker.d.ts.map +1 -0
  325. package/dist/migrate/js-template-walker.js +644 -0
  326. package/dist/migrate/js-template-walker.js.map +1 -0
  327. package/dist/migrate/manifest-validator.d.ts +30 -0
  328. package/dist/migrate/manifest-validator.d.ts.map +1 -0
  329. package/dist/migrate/manifest-validator.js +261 -0
  330. package/dist/migrate/manifest-validator.js.map +1 -0
  331. package/dist/migrate/overrides.d.ts +58 -0
  332. package/dist/migrate/overrides.d.ts.map +1 -0
  333. package/dist/migrate/overrides.js +193 -0
  334. package/dist/migrate/overrides.js.map +1 -0
  335. package/dist/migrate/plugin-scope.d.ts +42 -0
  336. package/dist/migrate/plugin-scope.d.ts.map +1 -0
  337. package/dist/migrate/plugin-scope.js +94 -0
  338. package/dist/migrate/plugin-scope.js.map +1 -0
  339. package/dist/migrate/types.d.ts +45 -0
  340. package/dist/migrate/types.d.ts.map +1 -0
  341. package/dist/migrate/types.js +9 -0
  342. package/dist/migrate/types.js.map +1 -0
  343. package/dist/migrate/verb-inference.d.ts +37 -0
  344. package/dist/migrate/verb-inference.d.ts.map +1 -0
  345. package/dist/migrate/verb-inference.js +274 -0
  346. package/dist/migrate/verb-inference.js.map +1 -0
  347. package/dist/nac3/attrs.d.ts +87 -0
  348. package/dist/nac3/attrs.d.ts.map +1 -0
  349. package/dist/nac3/attrs.js +134 -0
  350. package/dist/nac3/attrs.js.map +1 -0
  351. package/dist/nac3/scenario_dsl.d.ts +71 -0
  352. package/dist/nac3/scenario_dsl.d.ts.map +1 -0
  353. package/dist/nac3/scenario_dsl.js +191 -0
  354. package/dist/nac3/scenario_dsl.js.map +1 -0
  355. package/dist/nac3/tokens.d.ts +126 -0
  356. package/dist/nac3/tokens.d.ts.map +1 -0
  357. package/dist/nac3/tokens.js +138 -0
  358. package/dist/nac3/tokens.js.map +1 -0
  359. package/dist/reader/parsers/csv.d.ts +42 -0
  360. package/dist/reader/parsers/csv.d.ts.map +1 -0
  361. package/dist/reader/parsers/csv.js +221 -0
  362. package/dist/reader/parsers/csv.js.map +1 -0
  363. package/dist/reader/parsers/docx.d.ts +31 -0
  364. package/dist/reader/parsers/docx.d.ts.map +1 -0
  365. package/dist/reader/parsers/docx.js +51 -0
  366. package/dist/reader/parsers/docx.js.map +1 -0
  367. package/dist/reader/parsers/epub.d.ts +39 -0
  368. package/dist/reader/parsers/epub.d.ts.map +1 -0
  369. package/dist/reader/parsers/epub.js +265 -0
  370. package/dist/reader/parsers/epub.js.map +1 -0
  371. package/dist/reader/parsers/html.d.ts +40 -0
  372. package/dist/reader/parsers/html.d.ts.map +1 -0
  373. package/dist/reader/parsers/html.js +386 -0
  374. package/dist/reader/parsers/html.js.map +1 -0
  375. package/dist/reader/parsers/md.d.ts +30 -0
  376. package/dist/reader/parsers/md.d.ts.map +1 -0
  377. package/dist/reader/parsers/md.js +199 -0
  378. package/dist/reader/parsers/md.js.map +1 -0
  379. package/dist/reader/parsers/pdf.d.ts +39 -0
  380. package/dist/reader/parsers/pdf.d.ts.map +1 -0
  381. package/dist/reader/parsers/pdf.js +220 -0
  382. package/dist/reader/parsers/pdf.js.map +1 -0
  383. package/dist/reader/parsers/rtf.d.ts +37 -0
  384. package/dist/reader/parsers/rtf.d.ts.map +1 -0
  385. package/dist/reader/parsers/rtf.js +347 -0
  386. package/dist/reader/parsers/rtf.js.map +1 -0
  387. package/dist/reader/parsers/source.d.ts +32 -0
  388. package/dist/reader/parsers/source.d.ts.map +1 -0
  389. package/dist/reader/parsers/source.js +122 -0
  390. package/dist/reader/parsers/source.js.map +1 -0
  391. package/dist/reader/parsers/txt.d.ts +25 -0
  392. package/dist/reader/parsers/txt.d.ts.map +1 -0
  393. package/dist/reader/parsers/txt.js +56 -0
  394. package/dist/reader/parsers/txt.js.map +1 -0
  395. package/dist/reader/parsers/xlsx.d.ts +33 -0
  396. package/dist/reader/parsers/xlsx.d.ts.map +1 -0
  397. package/dist/reader/parsers/xlsx.js +143 -0
  398. package/dist/reader/parsers/xlsx.js.map +1 -0
  399. package/dist/reader/registry.d.ts +39 -0
  400. package/dist/reader/registry.d.ts.map +1 -0
  401. package/dist/reader/registry.js +172 -0
  402. package/dist/reader/registry.js.map +1 -0
  403. package/dist/reader/search.d.ts +27 -0
  404. package/dist/reader/search.d.ts.map +1 -0
  405. package/dist/reader/search.js +77 -0
  406. package/dist/reader/search.js.map +1 -0
  407. package/dist/reader/state.d.ts +56 -0
  408. package/dist/reader/state.d.ts.map +1 -0
  409. package/dist/reader/state.js +179 -0
  410. package/dist/reader/state.js.map +1 -0
  411. package/dist/reader/types.d.ts +119 -0
  412. package/dist/reader/types.d.ts.map +1 -0
  413. package/dist/reader/types.js +23 -0
  414. package/dist/reader/types.js.map +1 -0
  415. package/dist/ship/run.d.ts +26 -0
  416. package/dist/ship/run.d.ts.map +1 -0
  417. package/dist/ship/run.js +123 -0
  418. package/dist/ship/run.js.map +1 -0
  419. package/dist/template/index.d.ts +50 -0
  420. package/dist/template/index.d.ts.map +1 -0
  421. package/dist/template/index.js +140 -0
  422. package/dist/template/index.js.map +1 -0
  423. package/dist/ui/colors.d.ts +13 -0
  424. package/dist/ui/colors.d.ts.map +1 -0
  425. package/dist/ui/colors.js +26 -0
  426. package/dist/ui/colors.js.map +1 -0
  427. package/dist/validate/index.d.ts +19 -0
  428. package/dist/validate/index.d.ts.map +1 -0
  429. package/dist/validate/index.js +181 -0
  430. package/dist/validate/index.js.map +1 -0
  431. package/dist/vault/catalog.d.ts +55 -0
  432. package/dist/vault/catalog.d.ts.map +1 -0
  433. package/dist/vault/catalog.js +424 -0
  434. package/dist/vault/catalog.js.map +1 -0
  435. package/dist/vault/crypto.d.ts +82 -0
  436. package/dist/vault/crypto.d.ts.map +1 -0
  437. package/dist/vault/crypto.js +173 -0
  438. package/dist/vault/crypto.js.map +1 -0
  439. package/dist/vault/git_askpass.d.ts +26 -0
  440. package/dist/vault/git_askpass.d.ts.map +1 -0
  441. package/dist/vault/git_askpass.js +104 -0
  442. package/dist/vault/git_askpass.js.map +1 -0
  443. package/dist/vault/migrator.d.ts +57 -0
  444. package/dist/vault/migrator.d.ts.map +1 -0
  445. package/dist/vault/migrator.js +204 -0
  446. package/dist/vault/migrator.js.map +1 -0
  447. package/dist/vault/redactor.d.ts +73 -0
  448. package/dist/vault/redactor.d.ts.map +1 -0
  449. package/dist/vault/redactor.js +182 -0
  450. package/dist/vault/redactor.js.map +1 -0
  451. package/dist/vault/store.d.ts +132 -0
  452. package/dist/vault/store.d.ts.map +1 -0
  453. package/dist/vault/store.js +335 -0
  454. package/dist/vault/store.js.map +1 -0
  455. package/dist/version.d.ts +8 -0
  456. package/dist/version.d.ts.map +1 -0
  457. package/dist/version.js +8 -0
  458. package/dist/version.js.map +1 -0
  459. package/dist/voice/chunker.d.ts +43 -0
  460. package/dist/voice/chunker.d.ts.map +1 -0
  461. package/dist/voice/chunker.js +133 -0
  462. package/dist/voice/chunker.js.map +1 -0
  463. package/dist/voice/config.d.ts +14 -0
  464. package/dist/voice/config.d.ts.map +1 -0
  465. package/dist/voice/config.js +51 -0
  466. package/dist/voice/config.js.map +1 -0
  467. package/dist/voice/intents.d.ts +71 -0
  468. package/dist/voice/intents.d.ts.map +1 -0
  469. package/dist/voice/intents.js +0 -0
  470. package/dist/voice/intents.js.map +1 -0
  471. package/dist/voice/providers/elevenlabs.d.ts +53 -0
  472. package/dist/voice/providers/elevenlabs.d.ts.map +1 -0
  473. package/dist/voice/providers/elevenlabs.js +159 -0
  474. package/dist/voice/providers/elevenlabs.js.map +1 -0
  475. package/dist/voice/providers/google.d.ts +56 -0
  476. package/dist/voice/providers/google.d.ts.map +1 -0
  477. package/dist/voice/providers/google.js +253 -0
  478. package/dist/voice/providers/google.js.map +1 -0
  479. package/dist/voice/providers/whisper.d.ts +44 -0
  480. package/dist/voice/providers/whisper.d.ts.map +1 -0
  481. package/dist/voice/providers/whisper.js +179 -0
  482. package/dist/voice/providers/whisper.js.map +1 -0
  483. package/dist/voice/registry.d.ts +35 -0
  484. package/dist/voice/registry.d.ts.map +1 -0
  485. package/dist/voice/registry.js +48 -0
  486. package/dist/voice/registry.js.map +1 -0
  487. package/dist/voice/router.d.ts +62 -0
  488. package/dist/voice/router.d.ts.map +1 -0
  489. package/dist/voice/router.js +175 -0
  490. package/dist/voice/router.js.map +1 -0
  491. package/dist/voice/types.d.ts +116 -0
  492. package/dist/voice/types.d.ts.map +1 -0
  493. package/dist/voice/types.js +22 -0
  494. package/dist/voice/types.js.map +1 -0
  495. package/dist/voice/voiceprint/enrollment.d.ts +36 -0
  496. package/dist/voice/voiceprint/enrollment.d.ts.map +1 -0
  497. package/dist/voice/voiceprint/enrollment.js +71 -0
  498. package/dist/voice/voiceprint/enrollment.js.map +1 -0
  499. package/dist/voice/voiceprint/identify.d.ts +16 -0
  500. package/dist/voice/voiceprint/identify.d.ts.map +1 -0
  501. package/dist/voice/voiceprint/identify.js +20 -0
  502. package/dist/voice/voiceprint/identify.js.map +1 -0
  503. package/dist/voice/voiceprint/liveness.d.ts +90 -0
  504. package/dist/voice/voiceprint/liveness.d.ts.map +1 -0
  505. package/dist/voice/voiceprint/liveness.js +251 -0
  506. package/dist/voice/voiceprint/liveness.js.map +1 -0
  507. package/dist/voice/voiceprint/match.d.ts +54 -0
  508. package/dist/voice/voiceprint/match.d.ts.map +1 -0
  509. package/dist/voice/voiceprint/match.js +88 -0
  510. package/dist/voice/voiceprint/match.js.map +1 -0
  511. package/dist/voice/voiceprint/providers/local-mfcc-stub.d.ts +44 -0
  512. package/dist/voice/voiceprint/providers/local-mfcc-stub.d.ts.map +1 -0
  513. package/dist/voice/voiceprint/providers/local-mfcc-stub.js +92 -0
  514. package/dist/voice/voiceprint/providers/local-mfcc-stub.js.map +1 -0
  515. package/dist/voice/voiceprint/store.d.ts +60 -0
  516. package/dist/voice/voiceprint/store.d.ts.map +1 -0
  517. package/dist/voice/voiceprint/store.js +155 -0
  518. package/dist/voice/voiceprint/store.js.map +1 -0
  519. package/dist/voice/voiceprint/trust.d.ts +90 -0
  520. package/dist/voice/voiceprint/trust.d.ts.map +1 -0
  521. package/dist/voice/voiceprint/trust.js +150 -0
  522. package/dist/voice/voiceprint/trust.js.map +1 -0
  523. package/dist/voice/voiceprint/types.d.ts +100 -0
  524. package/dist/voice/voiceprint/types.d.ts.map +1 -0
  525. package/dist/voice/voiceprint/types.js +23 -0
  526. package/dist/voice/voiceprint/types.js.map +1 -0
  527. package/dist/voice/wake.d.ts +64 -0
  528. package/dist/voice/wake.d.ts.map +1 -0
  529. package/dist/voice/wake.js +143 -0
  530. package/dist/voice/wake.js.map +1 -0
  531. package/docs/manuals/manual.ar.html +91 -0
  532. package/docs/manuals/manual.de.html +100 -0
  533. package/docs/manuals/manual.en.html +118 -0
  534. package/docs/manuals/manual.es.html +120 -0
  535. package/docs/manuals/manual.fr.html +102 -0
  536. package/docs/manuals/manual.hi.html +93 -0
  537. package/docs/manuals/manual.it.html +93 -0
  538. package/docs/manuals/manual.ja.html +97 -0
  539. package/docs/manuals/manual.pt.html +103 -0
  540. package/docs/manuals/manual.zh.html +89 -0
  541. package/package.json +94 -0
  542. package/src/i18n/catalogs/ar.json +86 -0
  543. package/src/i18n/catalogs/de.json +86 -0
  544. package/src/i18n/catalogs/en.json +86 -0
  545. package/src/i18n/catalogs/es.json +86 -0
  546. package/src/i18n/catalogs/fr.json +86 -0
  547. package/src/i18n/catalogs/hi.json +86 -0
  548. package/src/i18n/catalogs/it.json +86 -0
  549. package/src/i18n/catalogs/ja.json +86 -0
  550. package/src/i18n/catalogs/pt.json +86 -0
  551. package/src/i18n/catalogs/zh.json +86 -0
  552. package/templates/react-app/README.md +43 -0
  553. package/templates/react-app/index.html +12 -0
  554. package/templates/react-app/package.json +35 -0
  555. package/templates/react-app/src/App.tsx +106 -0
  556. package/templates/react-app/src/main.tsx +21 -0
  557. package/templates/react-app/src/nac/manifest.ts +46 -0
  558. package/templates/react-app/src/styles.css +68 -0
  559. package/templates/react-app/tsconfig.json +19 -0
  560. package/templates/react-app/vite.config.ts +12 -0
  561. package/templates/react-app/yujin.forge.json +15 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google.js","sourceRoot":"","sources":["../../../src/voice/providers/google.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Whisper STT provider (OpenAI Audio Transcriptions endpoint).
3
+ *
4
+ * Reads the OpenAI key from the vault slot `openai`. Uses the
5
+ * /v1/audio/transcriptions endpoint with multipart/form-data:
6
+ * `file` (audio bytes) + `model` (whisper-1 by default) + `language`
7
+ * (BCP-47 short code when supplied).
8
+ *
9
+ * DI seam: a `fetchImpl` can be injected so tests never hit the
10
+ * network. The vault is also injectable for the same reason.
11
+ *
12
+ * Loud failures (per ROADMAP sec 12.2):
13
+ * - Missing vault slot `openai` -> readyToRun returns false +
14
+ * transcribe throws with the exact vault slot name.
15
+ * - HTTP non-2xx -> throws with the status + body snippet.
16
+ * - Response missing `text` field -> contract error.
17
+ *
18
+ * ASCII-only.
19
+ */
20
+ import { Vault } from '../../vault/store.js';
21
+ import type { SttProvider, SttRequest, SttResponse } from '../types.js';
22
+ declare const VAULT_SLOT = "openai";
23
+ export interface WhisperProviderOptions {
24
+ /** Test seam: lets the suite stub the network. Defaults to
25
+ * globalThis.fetch. */
26
+ fetchImpl?: typeof fetch;
27
+ /** Test seam: lets the suite inject a fake Vault. Defaults to
28
+ * Vault.open under the user's configDir. */
29
+ vaultOpener?: () => Promise<Vault>;
30
+ }
31
+ /** BCP-47 language codes are richer than what Whisper accepts on
32
+ * its `language` field. Whisper wants ISO 639-1 short codes
33
+ * ("es", "en"). Map common BCP-47 forms down. */
34
+ declare function bcp47ToWhisperLanguage(bcp47?: string): string | undefined;
35
+ export declare class WhisperProvider implements SttProvider {
36
+ readonly id = "whisper";
37
+ private readonly fetchImpl;
38
+ private readonly vaultOpener;
39
+ constructor(opts?: WhisperProviderOptions);
40
+ readyToRun(): Promise<boolean>;
41
+ transcribe(req: SttRequest): Promise<SttResponse>;
42
+ }
43
+ export { bcp47ToWhisperLanguage, VAULT_SLOT };
44
+ //# sourceMappingURL=whisper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whisper.d.ts","sourceRoot":"","sources":["../../../src/voice/providers/whisper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE7C,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,WAAW,EACZ,MAAM,aAAa,CAAC;AAIrB,QAAA,MAAM,UAAU,WAAW,CAAC;AAE5B,MAAM,WAAW,sBAAsB;IACrC;4BACwB;IACxB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB;iDAC6C;IAC7C,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;CACpC;AAED;;kDAEkD;AAClD,iBAAS,sBAAsB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOlE;AA4BD,qBAAa,eAAgB,YAAW,WAAW;IACjD,QAAQ,CAAC,EAAE,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuB;gBAEvC,IAAI,GAAE,sBAA2B;IAKvC,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAS9B,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;CAsGxD;AAOD,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Whisper STT provider (OpenAI Audio Transcriptions endpoint).
3
+ *
4
+ * Reads the OpenAI key from the vault slot `openai`. Uses the
5
+ * /v1/audio/transcriptions endpoint with multipart/form-data:
6
+ * `file` (audio bytes) + `model` (whisper-1 by default) + `language`
7
+ * (BCP-47 short code when supplied).
8
+ *
9
+ * DI seam: a `fetchImpl` can be injected so tests never hit the
10
+ * network. The vault is also injectable for the same reason.
11
+ *
12
+ * Loud failures (per ROADMAP sec 12.2):
13
+ * - Missing vault slot `openai` -> readyToRun returns false +
14
+ * transcribe throws with the exact vault slot name.
15
+ * - HTTP non-2xx -> throws with the status + body snippet.
16
+ * - Response missing `text` field -> contract error.
17
+ *
18
+ * ASCII-only.
19
+ */
20
+ import { Vault } from '../../vault/store.js';
21
+ import { configDir } from '../../license/index.js';
22
+ const ENDPOINT = 'https://api.openai.com/v1/audio/transcriptions';
23
+ const DEFAULT_MODEL = 'whisper-1';
24
+ const VAULT_SLOT = 'openai';
25
+ /** BCP-47 language codes are richer than what Whisper accepts on
26
+ * its `language` field. Whisper wants ISO 639-1 short codes
27
+ * ("es", "en"). Map common BCP-47 forms down. */
28
+ function bcp47ToWhisperLanguage(bcp47) {
29
+ if (!bcp47)
30
+ return undefined;
31
+ const lower = bcp47.toLowerCase().trim();
32
+ if (!lower)
33
+ return undefined;
34
+ /* "es-AR" -> "es". "en-US" -> "en". Already-short codes pass. */
35
+ const dash = lower.indexOf('-');
36
+ return dash > 0 ? lower.slice(0, dash) : lower;
37
+ }
38
+ function audioMimeType(format) {
39
+ switch (format) {
40
+ case 'webm': return 'audio/webm';
41
+ case 'ogg': return 'audio/ogg';
42
+ case 'wav': return 'audio/wav';
43
+ case 'mp3': return 'audio/mpeg';
44
+ case 'flac': return 'audio/flac';
45
+ case 'mp4': return 'audio/mp4';
46
+ default: return 'application/octet-stream';
47
+ }
48
+ }
49
+ function audioFilename(format) {
50
+ /* OpenAI rejects the request when the filename has no extension
51
+ it recognises. Map each supported format to a stable name. */
52
+ switch (format) {
53
+ case 'webm': return 'audio.webm';
54
+ case 'ogg': return 'audio.ogg';
55
+ case 'wav': return 'audio.wav';
56
+ case 'mp3': return 'audio.mp3';
57
+ case 'flac': return 'audio.flac';
58
+ case 'mp4': return 'audio.mp4';
59
+ default: return 'audio.bin';
60
+ }
61
+ }
62
+ export class WhisperProvider {
63
+ id = 'whisper';
64
+ fetchImpl;
65
+ vaultOpener;
66
+ constructor(opts = {}) {
67
+ this.fetchImpl = opts.fetchImpl ?? ((u, init) => globalThis.fetch(u, init));
68
+ this.vaultOpener = opts.vaultOpener ?? (() => Vault.open({ configDir: configDir() }));
69
+ }
70
+ async readyToRun() {
71
+ try {
72
+ const vault = await this.vaultOpener();
73
+ return vault.has(VAULT_SLOT);
74
+ }
75
+ catch {
76
+ return false;
77
+ }
78
+ }
79
+ async transcribe(req) {
80
+ if (!req.audio || req.audio.length === 0) {
81
+ throw new Error('whisper.transcribe: audio buffer is empty');
82
+ }
83
+ let apiKey;
84
+ try {
85
+ const vault = await this.vaultOpener();
86
+ if (!vault.has(VAULT_SLOT)) {
87
+ throw new Error('whisper: vault slot "' + VAULT_SLOT + '" not set. '
88
+ + 'Run `yf vault set ' + VAULT_SLOT + '` to configure your OpenAI key.');
89
+ }
90
+ apiKey = vault.get(VAULT_SLOT);
91
+ }
92
+ catch (err) {
93
+ throw new Error('whisper: failed to read vault slot "' + VAULT_SLOT + '": ' + (err instanceof Error ? err.message : String(err)));
94
+ }
95
+ const model = req.model ?? DEFAULT_MODEL;
96
+ const language = bcp47ToWhisperLanguage(req.languageHint);
97
+ /* Build multipart/form-data manually. Native FormData in Node 18+
98
+ works with fetch via the undici body, but constructing the
99
+ form keeps the test stub trivial -- we just inspect the body. */
100
+ const boundary = '----yujin-' + Math.random().toString(16).slice(2);
101
+ const parts = [];
102
+ function addField(name, value) {
103
+ parts.push(Buffer.from('--' + boundary + '\r\n'
104
+ + 'Content-Disposition: form-data; name="' + name + '"\r\n\r\n'
105
+ + value + '\r\n', 'utf-8'));
106
+ }
107
+ function addFile(name, filename, mime, body) {
108
+ parts.push(Buffer.from('--' + boundary + '\r\n'
109
+ + 'Content-Disposition: form-data; name="' + name + '"; filename="' + filename + '"\r\n'
110
+ + 'Content-Type: ' + mime + '\r\n\r\n', 'utf-8'));
111
+ parts.push(body);
112
+ parts.push(Buffer.from('\r\n', 'utf-8'));
113
+ }
114
+ addField('model', model);
115
+ if (language)
116
+ addField('language', language);
117
+ /* Force verbose_json so we can capture confidence / language
118
+ when the model returns them. The fallback parser tolerates
119
+ the simple-text response shape too. */
120
+ addField('response_format', 'verbose_json');
121
+ addFile('file', audioFilename(req.format), audioMimeType(req.format), req.audio);
122
+ parts.push(Buffer.from('--' + boundary + '--\r\n', 'utf-8'));
123
+ const body = Buffer.concat(parts);
124
+ const t0 = Date.now();
125
+ const resp = await this.fetchImpl(ENDPOINT, {
126
+ method: 'POST',
127
+ headers: {
128
+ 'Authorization': 'Bearer ' + apiKey,
129
+ 'Content-Type': 'multipart/form-data; boundary=' + boundary,
130
+ 'Content-Length': String(body.length),
131
+ },
132
+ body,
133
+ });
134
+ const latency_ms = Date.now() - t0;
135
+ if (!resp.ok) {
136
+ const detail = await safeText(resp);
137
+ throw new Error('whisper API ' + resp.status + ' ' + resp.statusText + ': '
138
+ + detail.slice(0, 400));
139
+ }
140
+ let parsed;
141
+ try {
142
+ parsed = await resp.json();
143
+ }
144
+ catch (err) {
145
+ throw new Error('whisper: response body is not JSON: ' + (err instanceof Error ? err.message : String(err)));
146
+ }
147
+ const text = typeof parsed?.text === 'string' ? parsed.text.trim() : '';
148
+ if (text === '') {
149
+ /* Whisper occasionally returns empty text on noise; that is
150
+ not an error condition for the API itself but the caller
151
+ can decide what to do. Surface clearly. */
152
+ return {
153
+ text: '',
154
+ latency_ms,
155
+ provider: this.id,
156
+ model,
157
+ ...(typeof parsed?.language === 'string' ? { language: parsed.language } : {}),
158
+ };
159
+ }
160
+ return {
161
+ text,
162
+ latency_ms,
163
+ provider: this.id,
164
+ model,
165
+ ...(typeof parsed?.language === 'string' ? { language: parsed.language } : {}),
166
+ };
167
+ }
168
+ }
169
+ async function safeText(r) {
170
+ try {
171
+ return await r.text();
172
+ }
173
+ catch {
174
+ return '(no body)';
175
+ }
176
+ }
177
+ /* Exported for tests + reuse by the CLI when wiring the registry. */
178
+ export { bcp47ToWhisperLanguage, VAULT_SLOT };
179
+ //# sourceMappingURL=whisper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whisper.js","sourceRoot":"","sources":["../../../src/voice/providers/whisper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Production provider registry for the voice subsystem.
3
+ *
4
+ * The router (V1.1) takes a registry; this module builds the
5
+ * default one with the three providers shipped through V1.4:
6
+ *
7
+ * STT: 'whisper' -> WhisperProvider (OpenAI)
8
+ * STT: 'google' -> GoogleSttProvider
9
+ * TTS: 'google' -> GoogleTtsProvider
10
+ * TTS: 'elevenlabs' -> ElevenLabsProvider
11
+ *
12
+ * Factories are lazy: provider instances are created on each
13
+ * router call. That avoids leaking long-lived state across
14
+ * requests + lets the vault read happen at dispatch time so
15
+ * a freshly-set key works without a server restart.
16
+ *
17
+ * The registry is also extensible: callers can pass a partial
18
+ * override to swap providers in tests or for adopter-specific
19
+ * deployments.
20
+ *
21
+ * ASCII-only.
22
+ */
23
+ import { type ProviderRegistry } from './router.js';
24
+ import type { SttProvider, TtsProvider } from './types.js';
25
+ export interface BuildRegistryOptions {
26
+ /** Per-id overrides for tests + bespoke deployments. */
27
+ stt?: Record<string, () => SttProvider>;
28
+ tts?: Record<string, () => TtsProvider>;
29
+ }
30
+ /**
31
+ * Build the default registry. Pass overrides to swap individual
32
+ * providers (mainly for tests; production passes no opts).
33
+ */
34
+ export declare function buildDefaultRegistry(opts?: BuildRegistryOptions): ProviderRegistry;
35
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/voice/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAKH,OAAO,EAAiB,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE3D,MAAM,WAAW,oBAAoB;IACnC,wDAAwD;IACxD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,WAAW,CAAC,CAAC;IACxC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,WAAW,CAAC,CAAC;CACzC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,GAAE,oBAAyB,GAAG,gBAAgB,CAoBtF"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Production provider registry for the voice subsystem.
3
+ *
4
+ * The router (V1.1) takes a registry; this module builds the
5
+ * default one with the three providers shipped through V1.4:
6
+ *
7
+ * STT: 'whisper' -> WhisperProvider (OpenAI)
8
+ * STT: 'google' -> GoogleSttProvider
9
+ * TTS: 'google' -> GoogleTtsProvider
10
+ * TTS: 'elevenlabs' -> ElevenLabsProvider
11
+ *
12
+ * Factories are lazy: provider instances are created on each
13
+ * router call. That avoids leaking long-lived state across
14
+ * requests + lets the vault read happen at dispatch time so
15
+ * a freshly-set key works without a server restart.
16
+ *
17
+ * The registry is also extensible: callers can pass a partial
18
+ * override to swap providers in tests or for adopter-specific
19
+ * deployments.
20
+ *
21
+ * ASCII-only.
22
+ */
23
+ import { WhisperProvider } from './providers/whisper.js';
24
+ import { GoogleSttProvider, GoogleTtsProvider } from './providers/google.js';
25
+ import { ElevenLabsProvider } from './providers/elevenlabs.js';
26
+ import { emptyRegistry } from './router.js';
27
+ /**
28
+ * Build the default registry. Pass overrides to swap individual
29
+ * providers (mainly for tests; production passes no opts).
30
+ */
31
+ export function buildDefaultRegistry(opts = {}) {
32
+ const reg = emptyRegistry();
33
+ /* STT */
34
+ reg.stt.set('whisper', () => new WhisperProvider());
35
+ reg.stt.set('google', () => new GoogleSttProvider());
36
+ /* TTS */
37
+ reg.tts.set('google', () => new GoogleTtsProvider());
38
+ reg.tts.set('elevenlabs', () => new ElevenLabsProvider());
39
+ /* Apply overrides last so a test stub wins over the default. */
40
+ for (const [id, factory] of Object.entries(opts.stt ?? {})) {
41
+ reg.stt.set(id, factory);
42
+ }
43
+ for (const [id, factory] of Object.entries(opts.tts ?? {})) {
44
+ reg.tts.set(id, factory);
45
+ }
46
+ return reg;
47
+ }
48
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/voice/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAyB,MAAM,aAAa,CAAC;AASnE;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAA6B,EAAE;IAClE,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAE5B,SAAS;IACT,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;IACpD,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAG,GAAG,EAAE,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;IAEtD,SAAS;IACT,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAM,GAAG,EAAE,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;IACzD,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAC;IAE1D,gEAAgE;IAChE,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC3B,CAAC;IACD,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Voice router.
3
+ *
4
+ * Responsibilities:
5
+ * - Load and persist the user's VoiceConfig from
6
+ * ~/.yujin-forge/voice-config.json.
7
+ * - Resolve a concrete SttProvider / TtsProvider per request
8
+ * based on the active config.
9
+ * - Surface a single async entry point each for STT + TTS that
10
+ * the server routes call.
11
+ *
12
+ * Provider instantiation is delegated to a registry passed into
13
+ * the router at construction time. This keeps the router pure
14
+ * (no IO besides config) and lets tests stub the providers.
15
+ *
16
+ * Loud failures (per ROADMAP sec 12.2):
17
+ * - Unknown provider in config -> hard error listing valid IDs.
18
+ * - Provider not ready (missing vault key, etc) -> hard error
19
+ * with the exact slot name the user needs to populate.
20
+ *
21
+ * ASCII-only.
22
+ */
23
+ import { type SttProvider, type SttProviderId, type SttRequest, type SttResponse, type TtsProvider, type TtsProviderId, type TtsRequest, type TtsResponse, type VoiceConfig } from './types.js';
24
+ /** Factory functions registered by the host process. Tests pass
25
+ * stubs; production passes the real provider constructors. */
26
+ export interface ProviderRegistry {
27
+ stt: Map<SttProviderId, () => SttProvider>;
28
+ tts: Map<TtsProviderId, () => TtsProvider>;
29
+ }
30
+ export interface VoiceRouterOptions {
31
+ configDir: string;
32
+ registry: ProviderRegistry;
33
+ }
34
+ export declare class VoiceRouter {
35
+ private readonly configDir;
36
+ private readonly registry;
37
+ private cachedConfig;
38
+ constructor(opts: VoiceRouterOptions);
39
+ /** Load the persisted config, or seed defaults on first use.
40
+ * Subsequent calls return the cached value until invalidate()
41
+ * is called. */
42
+ loadConfig(): Promise<VoiceConfig>;
43
+ /** Update the persisted config. Validates the provider ids
44
+ * against the registry. */
45
+ saveConfig(next: VoiceConfig): Promise<void>;
46
+ /** Force-reload from disk on the next call. */
47
+ invalidate(): void;
48
+ /** Resolve the active STT provider and pass the request to it. */
49
+ transcribe(req: SttRequest): Promise<SttResponse>;
50
+ /** Resolve the active TTS provider and synthesize. */
51
+ synthesize(req: TtsRequest): Promise<TtsResponse>;
52
+ /** Names of every STT/TTS provider registered. Used by the CLI
53
+ * to print "available providers" lists. */
54
+ registeredProviders(): {
55
+ stt: SttProviderId[];
56
+ tts: TtsProviderId[];
57
+ };
58
+ private persist;
59
+ }
60
+ /** Convenience builder: empty registry the host can populate. */
61
+ export declare function emptyRegistry(): ProviderRegistry;
62
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/voice/router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,WAAW,EACjB,MAAM,YAAY,CAAC;AAKpB;+DAC+D;AAC/D,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,GAAG,CAAC,aAAa,EAAE,MAAM,WAAW,CAAC,CAAC;IAC3C,GAAG,EAAE,GAAG,CAAC,aAAa,EAAE,MAAM,WAAW,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAOD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,YAAY,CAA4B;gBAEpC,IAAI,EAAE,kBAAkB;IAQpC;;qBAEiB;IACX,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;IA+BxC;gCAC4B;IACtB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBlD,+CAA+C;IAC/C,UAAU,IAAI,IAAI;IAIlB,kEAAkE;IAC5D,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IA4BvD,sDAAsD;IAChD,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IAkCvD;gDAC4C;IAC5C,mBAAmB,IAAI;QAAE,GAAG,EAAE,aAAa,EAAE,CAAC;QAAC,GAAG,EAAE,aAAa,EAAE,CAAA;KAAE;YAOvD,OAAO;CAUtB;AAED,iEAAiE;AACjE,wBAAgB,aAAa,IAAI,gBAAgB,CAEhD"}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Voice router.
3
+ *
4
+ * Responsibilities:
5
+ * - Load and persist the user's VoiceConfig from
6
+ * ~/.yujin-forge/voice-config.json.
7
+ * - Resolve a concrete SttProvider / TtsProvider per request
8
+ * based on the active config.
9
+ * - Surface a single async entry point each for STT + TTS that
10
+ * the server routes call.
11
+ *
12
+ * Provider instantiation is delegated to a registry passed into
13
+ * the router at construction time. This keeps the router pure
14
+ * (no IO besides config) and lets tests stub the providers.
15
+ *
16
+ * Loud failures (per ROADMAP sec 12.2):
17
+ * - Unknown provider in config -> hard error listing valid IDs.
18
+ * - Provider not ready (missing vault key, etc) -> hard error
19
+ * with the exact slot name the user needs to populate.
20
+ *
21
+ * ASCII-only.
22
+ */
23
+ import { promises as fs } from 'node:fs';
24
+ import path from 'node:path';
25
+ import { DEFAULT_VOICE_CONFIG, } from './types.js';
26
+ const VOICE_CONFIG_FILENAME = 'voice-config.json';
27
+ const VOICE_CONFIG_VERSION = 1;
28
+ export class VoiceRouter {
29
+ configDir;
30
+ registry;
31
+ cachedConfig = null;
32
+ constructor(opts) {
33
+ if (!path.isAbsolute(opts.configDir)) {
34
+ throw new Error('VoiceRouter: configDir must be absolute (got ' + JSON.stringify(opts.configDir) + ')');
35
+ }
36
+ this.configDir = opts.configDir;
37
+ this.registry = opts.registry;
38
+ }
39
+ /** Load the persisted config, or seed defaults on first use.
40
+ * Subsequent calls return the cached value until invalidate()
41
+ * is called. */
42
+ async loadConfig() {
43
+ if (this.cachedConfig)
44
+ return this.cachedConfig;
45
+ const file = path.join(this.configDir, VOICE_CONFIG_FILENAME);
46
+ try {
47
+ const raw = await fs.readFile(file, 'utf-8');
48
+ const parsed = JSON.parse(raw);
49
+ if (!parsed || typeof parsed !== 'object') {
50
+ throw new Error('voice-config.json is not an object');
51
+ }
52
+ if (parsed.version !== VOICE_CONFIG_VERSION) {
53
+ throw new Error('voice-config.json version mismatch (got ' + parsed.version
54
+ + ', expected ' + VOICE_CONFIG_VERSION + ')');
55
+ }
56
+ if (!parsed.config || typeof parsed.config !== 'object') {
57
+ throw new Error('voice-config.json missing config map');
58
+ }
59
+ this.cachedConfig = parsed.config;
60
+ return this.cachedConfig;
61
+ }
62
+ catch (err) {
63
+ if (err.code === 'ENOENT') {
64
+ /* First use -- seed defaults, persist, return. */
65
+ this.cachedConfig = JSON.parse(JSON.stringify(DEFAULT_VOICE_CONFIG));
66
+ await this.persist(this.cachedConfig);
67
+ return this.cachedConfig;
68
+ }
69
+ throw err;
70
+ }
71
+ }
72
+ /** Update the persisted config. Validates the provider ids
73
+ * against the registry. */
74
+ async saveConfig(next) {
75
+ if (!next || typeof next !== 'object' || !next.stt || !next.tts) {
76
+ throw new Error('VoiceRouter.saveConfig: config must have stt + tts blocks');
77
+ }
78
+ if (!this.registry.stt.has(next.stt.provider)) {
79
+ throw new Error('VoiceRouter.saveConfig: unknown STT provider "' + next.stt.provider
80
+ + '". Known providers: ' + Array.from(this.registry.stt.keys()).join(', '));
81
+ }
82
+ if (!this.registry.tts.has(next.tts.provider)) {
83
+ throw new Error('VoiceRouter.saveConfig: unknown TTS provider "' + next.tts.provider
84
+ + '". Known providers: ' + Array.from(this.registry.tts.keys()).join(', '));
85
+ }
86
+ await this.persist(next);
87
+ this.cachedConfig = next;
88
+ }
89
+ /** Force-reload from disk on the next call. */
90
+ invalidate() {
91
+ this.cachedConfig = null;
92
+ }
93
+ /** Resolve the active STT provider and pass the request to it. */
94
+ async transcribe(req) {
95
+ const config = await this.loadConfig();
96
+ const factory = this.registry.stt.get(config.stt.provider);
97
+ if (!factory) {
98
+ throw new Error('No STT provider registered for "' + config.stt.provider
99
+ + '". Run `yf voice config` to pick a different one.');
100
+ }
101
+ const provider = factory();
102
+ if (!(await provider.readyToRun())) {
103
+ throw new Error('STT provider "' + provider.id + '" is not ready. '
104
+ + 'Missing credentials? Check `yf vault list` and ensure the slot for this provider is set.');
105
+ }
106
+ const enriched = {
107
+ ...req,
108
+ ...(req.languageHint || config.stt.language
109
+ ? { languageHint: req.languageHint ?? config.stt.language }
110
+ : {}),
111
+ ...(req.model || config.stt.model
112
+ ? { model: req.model ?? config.stt.model }
113
+ : {}),
114
+ };
115
+ return provider.transcribe(enriched);
116
+ }
117
+ /** Resolve the active TTS provider and synthesize. */
118
+ async synthesize(req) {
119
+ const config = await this.loadConfig();
120
+ const factory = this.registry.tts.get(config.tts.provider);
121
+ if (!factory) {
122
+ throw new Error('No TTS provider registered for "' + config.tts.provider
123
+ + '". Run `yf voice config` to pick a different one.');
124
+ }
125
+ const provider = factory();
126
+ if (!(await provider.readyToRun())) {
127
+ throw new Error('TTS provider "' + provider.id + '" is not ready. '
128
+ + 'Missing credentials? Check `yf vault list` and ensure the slot for this provider is set.');
129
+ }
130
+ const enriched = {
131
+ ...req,
132
+ ...(req.voice || config.tts.voice
133
+ ? { voice: req.voice ?? config.tts.voice }
134
+ : {}),
135
+ ...(req.speed !== undefined || config.tts.speed !== undefined
136
+ ? { speed: req.speed ?? config.tts.speed }
137
+ : {}),
138
+ ...(req.language || config.tts.language
139
+ ? { language: req.language ?? config.tts.language }
140
+ : {}),
141
+ ...(req.format || config.tts.format
142
+ ? { format: req.format ?? config.tts.format }
143
+ : {}),
144
+ };
145
+ return provider.synthesize(enriched);
146
+ }
147
+ /** Names of every STT/TTS provider registered. Used by the CLI
148
+ * to print "available providers" lists. */
149
+ registeredProviders() {
150
+ return {
151
+ stt: Array.from(this.registry.stt.keys()).sort(),
152
+ tts: Array.from(this.registry.tts.keys()).sort(),
153
+ };
154
+ }
155
+ async persist(cfg) {
156
+ await fs.mkdir(this.configDir, { recursive: true });
157
+ const file = path.join(this.configDir, VOICE_CONFIG_FILENAME);
158
+ const payload = { version: VOICE_CONFIG_VERSION, config: cfg };
159
+ const tmp = file + '.tmp';
160
+ await fs.writeFile(tmp, JSON.stringify(payload, null, 2), { mode: 0o600 });
161
+ const fh = await fs.open(tmp, 'r+');
162
+ try {
163
+ await fh.sync();
164
+ }
165
+ finally {
166
+ await fh.close();
167
+ }
168
+ await fs.rename(tmp, file);
169
+ }
170
+ }
171
+ /** Convenience builder: empty registry the host can populate. */
172
+ export function emptyRegistry() {
173
+ return { stt: new Map(), tts: new Map() };
174
+ }
175
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/voice/router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,oBAAoB,GAUrB,MAAM,YAAY,CAAC;AAEpB,MAAM,qBAAqB,GAAG,mBAAmB,CAAC;AAClD,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAmB/B,MAAM,OAAO,WAAW;IACL,SAAS,CAAS;IAClB,QAAQ,CAAmB;IACpC,YAAY,GAAuB,IAAI,CAAC;IAEhD,YAAY,IAAwB;QAClC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,+CAA+C,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC;QAC1G,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAChC,CAAC;IAED;;qBAEiB;IACjB,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;QAC9D,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoB,CAAC;YAClD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACxD,CAAC;YACD,IAAI,MAAM,CAAC,OAAO,KAAK,oBAAoB,EAAE,CAAC;gBAC5C,MAAM,IAAI,KAAK,CACb,0CAA0C,GAAI,MAAM,CAAC,OAAmB;sBACtE,aAAa,GAAG,oBAAoB,GAAG,GAAG,CAC7C,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACxD,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC1D,CAAC;YACD,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;YAClC,OAAO,IAAI,CAAC,YAAY,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACrD,kDAAkD;gBAClD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,CAAC;gBACrE,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAa,CAAC,CAAC;gBACvC,OAAO,IAAI,CAAC,YAAa,CAAC;YAC5B,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED;gCAC4B;IAC5B,KAAK,CAAC,UAAU,CAAC,IAAiB;QAChC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CACb,gDAAgD,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ;kBAClE,sBAAsB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC3E,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CACb,gDAAgD,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ;kBAClE,sBAAsB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC3E,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,+CAA+C;IAC/C,UAAU;QACR,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,kEAAkE;IAClE,KAAK,CAAC,UAAU,CAAC,GAAe;QAC9B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,kCAAkC,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ;kBACtD,mDAAmD,CACtD,CAAC;QACJ,CAAC;QACD,MAAM,QAAQ,GAAG,OAAO,EAAE,CAAC;QAC3B,IAAI,CAAC,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CACb,gBAAgB,GAAG,QAAQ,CAAC,EAAE,GAAG,kBAAkB;kBACjD,0FAA0F,CAC7F,CAAC;QACJ,CAAC;QACD,MAAM,QAAQ,GAAe;YAC3B,GAAG,GAAG;YACN,GAAG,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ;gBACzC,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE;gBAC3D,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK;gBAC/B,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE;gBAC1C,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;QACF,OAAO,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,sDAAsD;IACtD,KAAK,CAAC,UAAU,CAAC,GAAe;QAC9B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,kCAAkC,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ;kBACtD,mDAAmD,CACtD,CAAC;QACJ,CAAC;QACD,MAAM,QAAQ,GAAG,OAAO,EAAE,CAAC;QAC3B,IAAI,CAAC,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CACb,gBAAgB,GAAG,QAAQ,CAAC,EAAE,GAAG,kBAAkB;kBACjD,0FAA0F,CAC7F,CAAC;QACJ,CAAC;QACD,MAAM,QAAQ,GAAe;YAC3B,GAAG,GAAG;YACN,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK;gBAC/B,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE;gBAC1C,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS;gBAC3D,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE;gBAC1C,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ;gBACrC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE;gBACnD,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM;gBACjC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE;gBAC7C,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;QACF,OAAO,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED;gDAC4C;IAC5C,mBAAmB;QACjB,OAAO;YACL,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YAChD,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;SACjD,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,GAAgB;QACpC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAoB,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QAChF,MAAM,GAAG,GAAG,IAAI,GAAG,MAAM,CAAC;QAC1B,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3E,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC;YAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;QAAC,CAAC;gBAAS,CAAC;YAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;QAAC,CAAC;QACtD,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;CACF;AAED,iEAAiE;AACjE,MAAM,UAAU,aAAa;IAC3B,OAAO,EAAE,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;AAC5C,CAAC"}