@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,172 @@
1
+ /**
2
+ * Format detection + parser dispatch (V1.23 of HITO 1).
3
+ *
4
+ * Two surfaces:
5
+ *
6
+ * detectFormat(filename, buffer?) -> DocFormat
7
+ * File-extension first; magic bytes second when buffer is
8
+ * provided. Returns 'source' for any extension matching the
9
+ * source-code map (anything not in the explicit list).
10
+ *
11
+ * parseDocument({ filename, buffer, format? }) -> NormalisedDocument
12
+ * Picks the parser for the detected (or explicit) format and
13
+ * calls it. Throws loudly when the format has no shipped
14
+ * parser yet (pdf / docx / html / rtf / epub / csv / xlsx
15
+ * are placeholders -- documented as alpha gaps).
16
+ *
17
+ * ASCII-only.
18
+ */
19
+ import { parseTxt } from './parsers/txt.js';
20
+ import { parseMd } from './parsers/md.js';
21
+ import { parseSource, EXT_TO_LANG } from './parsers/source.js';
22
+ import { parseHtml } from './parsers/html.js';
23
+ import { parseRtf } from './parsers/rtf.js';
24
+ import { parseCsv } from './parsers/csv.js';
25
+ import { parseEpub } from './parsers/epub.js';
26
+ import { parsePdf } from './parsers/pdf.js';
27
+ import { parseDocx } from './parsers/docx.js';
28
+ import { parseXlsx } from './parsers/xlsx.js';
29
+ /** Map known extensions to DocFormat. */
30
+ const EXT_TO_FORMAT = {
31
+ txt: 'txt', text: 'txt', log: 'txt',
32
+ md: 'md', markdown: 'md', mdx: 'md',
33
+ pdf: 'pdf',
34
+ docx: 'docx', doc: 'docx',
35
+ html: 'html', htm: 'html', xhtml: 'html',
36
+ rtf: 'rtf',
37
+ epub: 'epub',
38
+ csv: 'csv', tsv: 'csv',
39
+ xlsx: 'xlsx', xls: 'xlsx', ods: 'xlsx',
40
+ };
41
+ /** Detect format. Filename extension is canonical; the optional
42
+ * buffer triggers a magic-byte fallback when the extension is
43
+ * unknown. */
44
+ export function detectFormat(filename, buffer) {
45
+ const lower = filename.toLowerCase();
46
+ const m = lower.match(/\.([a-z0-9]+)$/);
47
+ if (m) {
48
+ const ext = m[1];
49
+ if (EXT_TO_FORMAT[ext])
50
+ return EXT_TO_FORMAT[ext];
51
+ if (EXT_TO_LANG[ext])
52
+ return 'source';
53
+ }
54
+ if (buffer && buffer.length > 0) {
55
+ /* PDF: starts with %PDF */
56
+ if (buffer.length >= 4
57
+ && buffer[0] === 0x25 && buffer[1] === 0x50
58
+ && buffer[2] === 0x44 && buffer[3] === 0x46) {
59
+ return 'pdf';
60
+ }
61
+ /* ZIP (docx / xlsx / epub all are zip-based): PK\x03\x04 */
62
+ if (buffer.length >= 4
63
+ && buffer[0] === 0x50 && buffer[1] === 0x4b
64
+ && buffer[2] === 0x03 && buffer[3] === 0x04) {
65
+ /* Could be docx / xlsx / epub / generic zip. Without
66
+ inspecting the zip's mimetype entry we cannot tell.
67
+ Default to docx -- the most common voice-driven use
68
+ case. The parser dispatch will throw with a clear
69
+ message if the real content is different. */
70
+ return 'docx';
71
+ }
72
+ /* RTF: starts with {\rtf */
73
+ if (buffer.length >= 5
74
+ && buffer[0] === 0x7b && buffer[1] === 0x5c
75
+ && buffer[2] === 0x72 && buffer[3] === 0x74
76
+ && buffer[4] === 0x66) {
77
+ return 'rtf';
78
+ }
79
+ /* HTML: starts with <!DOCTYPE html or <html */
80
+ const head = buffer.subarray(0, Math.min(buffer.length, 200)).toString('utf-8').toLowerCase();
81
+ if (head.includes('<!doctype html') || /<html\b/.test(head)) {
82
+ return 'html';
83
+ }
84
+ }
85
+ /* Default to txt -- a plain-text reader of an unknown file
86
+ is the safe fallback. */
87
+ return 'txt';
88
+ }
89
+ /** Pending parsers (not shipped at this slice). Listed loudly.
90
+ * Empty -- every spec format ADIP needs now ships. */
91
+ const PENDING_FORMATS = {};
92
+ /** Dispatch a buffer to the right parser. Async because some
93
+ * parsers (PDF via pdfjs-dist, future DOCX via mammoth) need
94
+ * a Promise. Sync parsers are wrapped in Promise.resolve so
95
+ * the caller contract stays uniform. */
96
+ export async function parseDocument(req) {
97
+ const format = req.format ?? detectFormat(req.filename, req.buffer);
98
+ switch (format) {
99
+ case 'txt':
100
+ return parseTxt({
101
+ buffer: req.buffer,
102
+ filename: req.filename,
103
+ ...(req.language ? { language: req.language } : {}),
104
+ });
105
+ case 'md':
106
+ return parseMd({
107
+ buffer: req.buffer,
108
+ filename: req.filename,
109
+ ...(req.language ? { language: req.language } : {}),
110
+ });
111
+ case 'source':
112
+ return parseSource({
113
+ buffer: req.buffer,
114
+ filename: req.filename,
115
+ ...(req.language ? { language: req.language } : {}),
116
+ });
117
+ case 'html':
118
+ return parseHtml({
119
+ buffer: req.buffer,
120
+ filename: req.filename,
121
+ ...(req.language ? { language: req.language } : {}),
122
+ });
123
+ case 'rtf':
124
+ return parseRtf({
125
+ buffer: req.buffer,
126
+ filename: req.filename,
127
+ ...(req.language ? { language: req.language } : {}),
128
+ });
129
+ case 'csv':
130
+ return parseCsv({
131
+ buffer: req.buffer,
132
+ filename: req.filename,
133
+ ...(req.language ? { language: req.language } : {}),
134
+ });
135
+ case 'epub':
136
+ return parseEpub({
137
+ buffer: req.buffer,
138
+ filename: req.filename,
139
+ ...(req.language ? { language: req.language } : {}),
140
+ });
141
+ case 'pdf':
142
+ return await parsePdf({
143
+ buffer: req.buffer,
144
+ filename: req.filename,
145
+ ...(req.language ? { language: req.language } : {}),
146
+ });
147
+ case 'docx':
148
+ return await parseDocx({
149
+ buffer: req.buffer,
150
+ filename: req.filename,
151
+ ...(req.language ? { language: req.language } : {}),
152
+ });
153
+ case 'xlsx':
154
+ return await parseXlsx({
155
+ buffer: req.buffer,
156
+ filename: req.filename,
157
+ ...(req.language ? { language: req.language } : {}),
158
+ });
159
+ default:
160
+ if (PENDING_FORMATS[format]) {
161
+ throw new Error('reader: format "' + format + '" is not yet shipped. '
162
+ + PENDING_FORMATS[format] + '. '
163
+ + 'For now, convert the document to plain text or markdown.');
164
+ }
165
+ throw new Error('reader: unknown format "' + format + '" for ' + req.filename);
166
+ }
167
+ }
168
+ /** Names of formats this build supports today. */
169
+ export function supportedFormats() {
170
+ return ['txt', 'md', 'source', 'html', 'rtf', 'csv', 'epub', 'pdf', 'docx', 'xlsx'];
171
+ }
172
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/reader/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Full-text search over a NormalisedDocument (V1.25 of HITO 1).
3
+ *
4
+ * Walks every text block (paragraph / heading / list_item /
5
+ * quote / caption), scans for case-insensitive matches of the
6
+ * query, returns SearchHit entries sorted by descending number
7
+ * of matches per block, then document order.
8
+ *
9
+ * Snippet construction: 60 chars before + 60 chars after the
10
+ * first match within the block. Ellipses when truncated.
11
+ *
12
+ * Pure -- no audio, no IO.
13
+ *
14
+ * ASCII-only.
15
+ */
16
+ import type { NormalisedDocument, SearchHit } from './types.js';
17
+ export interface SearchOptions {
18
+ /** Maximum hits to return. Default 20, max 100. */
19
+ max?: number;
20
+ /** Case sensitive search. Default false. */
21
+ case_sensitive?: boolean;
22
+ /** Characters of context before + after the first match.
23
+ * Default 60, max 200. */
24
+ snippet_window?: number;
25
+ }
26
+ export declare function searchDocument(doc: NormalisedDocument, query: string, opts?: SearchOptions): SearchHit[];
27
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/reader/search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,SAAS,EACV,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,aAAa;IAC5B,mDAAmD;IACnD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;+BAC2B;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,cAAc,CAC5B,GAAG,EAAE,kBAAkB,EACvB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,aAAkB,GACvB,SAAS,EAAE,CAyCb"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Full-text search over a NormalisedDocument (V1.25 of HITO 1).
3
+ *
4
+ * Walks every text block (paragraph / heading / list_item /
5
+ * quote / caption), scans for case-insensitive matches of the
6
+ * query, returns SearchHit entries sorted by descending number
7
+ * of matches per block, then document order.
8
+ *
9
+ * Snippet construction: 60 chars before + 60 chars after the
10
+ * first match within the block. Ellipses when truncated.
11
+ *
12
+ * Pure -- no audio, no IO.
13
+ *
14
+ * ASCII-only.
15
+ */
16
+ import { iterBlocks, isText } from './state.js';
17
+ export function searchDocument(doc, query, opts = {}) {
18
+ if (!query || query.trim() === '')
19
+ return [];
20
+ const max = clampMax(opts.max ?? 20, 1, 100);
21
+ const window = clampMax(opts.snippet_window ?? 60, 10, 200);
22
+ const caseInsensitive = !opts.case_sensitive;
23
+ const needle = caseInsensitive ? query.toLowerCase() : query;
24
+ const hits = [];
25
+ for (const { section_id, section_heading, block } of iterBlocks(doc)) {
26
+ if (!isText(block))
27
+ continue;
28
+ const haystack = caseInsensitive ? block.text.toLowerCase() : block.text;
29
+ const offset = haystack.indexOf(needle);
30
+ if (offset < 0)
31
+ continue;
32
+ /* Score = number of occurrences of the query in the block. */
33
+ let score = 0;
34
+ let pos = haystack.indexOf(needle);
35
+ while (pos >= 0) {
36
+ score++;
37
+ pos = haystack.indexOf(needle, pos + needle.length);
38
+ }
39
+ const snippet = buildSnippet(block.text, offset, needle.length, window);
40
+ hits.push({
41
+ block_id: block.id,
42
+ section_id,
43
+ section_heading,
44
+ snippet,
45
+ offset,
46
+ score,
47
+ });
48
+ }
49
+ hits.sort((a, b) => b.score - a.score);
50
+ return hits.slice(0, max).map((h) => ({
51
+ block_id: h.block_id,
52
+ section_id: h.section_id,
53
+ section_heading: h.section_heading,
54
+ snippet: h.snippet,
55
+ offset: h.offset,
56
+ }));
57
+ }
58
+ function buildSnippet(text, offset, matchLen, window) {
59
+ const start = Math.max(0, offset - window);
60
+ const end = Math.min(text.length, offset + matchLen + window);
61
+ let snippet = text.slice(start, end);
62
+ if (start > 0)
63
+ snippet = '...' + snippet;
64
+ if (end < text.length)
65
+ snippet = snippet + '...';
66
+ return snippet.replace(/\s+/g, ' ').trim();
67
+ }
68
+ function clampMax(n, lo, hi) {
69
+ if (!Number.isFinite(n))
70
+ return lo;
71
+ if (n < lo)
72
+ return lo;
73
+ if (n > hi)
74
+ return hi;
75
+ return Math.floor(n);
76
+ }
77
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/reader/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Reader session state machine + helpers.
3
+ *
4
+ * Pure functions that mutate a `ReaderSession`. The IO-bound
5
+ * parts (TTS playback, audio buffering) are in V1.24 playback.
6
+ *
7
+ * ASCII-only.
8
+ */
9
+ import type { Block, ReaderSession, NormalisedDocument, SeekResult, TextBlock } from './types.js';
10
+ declare const DEFAULT_SPEED = 1;
11
+ declare const MIN_SPEED = 0.5;
12
+ declare const MAX_SPEED = 2;
13
+ /** Max blocks kept in the recap rolling buffer. ~5 minutes of
14
+ * reading at typical speed is roughly 30 paragraphs; we keep
15
+ * twice that to leave room for short blocks (headings, list
16
+ * items). */
17
+ declare const RECAP_BUFFER_LIMIT = 60;
18
+ /** Start a fresh session for a parsed document. */
19
+ export declare function startSession(doc: NormalisedDocument): ReaderSession;
20
+ /** Iterate every block in document order. */
21
+ export declare function iterBlocks(doc: NormalisedDocument): Iterable<{
22
+ section_id: string;
23
+ section_heading: string;
24
+ block: Block;
25
+ }>;
26
+ /** Type guard: text-class block. */
27
+ export declare function isText(b: Block): b is TextBlock;
28
+ /** Find the block by id. Throws when missing. */
29
+ export declare function getBlock(doc: NormalisedDocument, blockId: string): Block;
30
+ /** Move cursor to the next block (any kind). Updates state but
31
+ * does NOT play anything. Returns the new cursor or null when
32
+ * there is nothing more. */
33
+ export declare function advanceCursor(session: ReaderSession): string | null;
34
+ /** Move cursor backward by one block. */
35
+ export declare function reverseCursor(session: ReaderSession): string | null;
36
+ /** Seek to the next heading-class block forward. Returns the
37
+ * new cursor or null when none ahead. */
38
+ export declare function seekNextSection(session: ReaderSession): SeekResult;
39
+ /** Seek to the previous heading. */
40
+ export declare function seekPrevSection(session: ReaderSession): SeekResult;
41
+ /** Seek to a specific section by index (0-based). */
42
+ export declare function seekSectionByIndex(session: ReaderSession, index: number): SeekResult;
43
+ /** Set a named bookmark at the current cursor. */
44
+ export declare function setBookmark(session: ReaderSession, name: string): void;
45
+ /** Jump to a bookmark. */
46
+ export declare function jumpToBookmark(session: ReaderSession, name: string): SeekResult;
47
+ /** Append a recently-spoken text to the rolling recap buffer.
48
+ * Enforces the limit. */
49
+ export declare function recordSpoken(session: ReaderSession, text: string): void;
50
+ /** Clamp speed into the supported range. */
51
+ export declare function setSpeed(session: ReaderSession, speed: number): number;
52
+ /** State transitions. Pure helpers so callers don't write the
53
+ * string literals by hand. */
54
+ export declare function transitionTo(session: ReaderSession, next: ReaderSession['state']): void;
55
+ export { DEFAULT_SPEED, MIN_SPEED, MAX_SPEED, RECAP_BUFFER_LIMIT, };
56
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/reader/state.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,KAAK,EACL,aAAa,EACb,kBAAkB,EAClB,UAAU,EACV,SAAS,EACV,MAAM,YAAY,CAAC;AAEpB,QAAA,MAAM,aAAa,IAAM,CAAC;AAC1B,QAAA,MAAM,SAAS,MAAM,CAAC;AACtB,QAAA,MAAM,SAAS,IAAM,CAAC;AACtB;;;cAGc;AACd,QAAA,MAAM,kBAAkB,KAAK,CAAC;AAE9B,mDAAmD;AACnD,wBAAgB,YAAY,CAAC,GAAG,EAAE,kBAAkB,GAAG,aAAa,CAUnE;AAED,6CAA6C;AAC7C,wBAAiB,UAAU,CAAC,GAAG,EAAE,kBAAkB,GAAG,QAAQ,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC,CAM5H;AAUD,oCAAoC;AACpC,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,SAAS,CAI/C;AAED,iDAAiD;AACjD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,CAKxE;AAED;;6BAE6B;AAC7B,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAUnE;AAED,yCAAyC;AACzC,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAanE;AAED;0CAC0C;AAC1C,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,UAAU,CAelE;AAED,oCAAoC;AACpC,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,UAAU,CAclE;AAED,qDAAqD;AACrD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAWpF;AAED,kDAAkD;AAClD,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAKtE;AAED,0BAA0B;AAC1B,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAO/E;AAED;0BAC0B;AAC1B,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAKvE;AAED,4CAA4C;AAC5C,wBAAgB,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAMtE;AAED;+BAC+B;AAC/B,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI,CAEvF;AAED,OAAO,EACL,aAAa,EACb,SAAS,EACT,SAAS,EACT,kBAAkB,GACnB,CAAC"}
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Reader session state machine + helpers.
3
+ *
4
+ * Pure functions that mutate a `ReaderSession`. The IO-bound
5
+ * parts (TTS playback, audio buffering) are in V1.24 playback.
6
+ *
7
+ * ASCII-only.
8
+ */
9
+ const DEFAULT_SPEED = 1.0;
10
+ const MIN_SPEED = 0.5;
11
+ const MAX_SPEED = 2.0;
12
+ /** Max blocks kept in the recap rolling buffer. ~5 minutes of
13
+ * reading at typical speed is roughly 30 paragraphs; we keep
14
+ * twice that to leave room for short blocks (headings, list
15
+ * items). */
16
+ const RECAP_BUFFER_LIMIT = 60;
17
+ /** Start a fresh session for a parsed document. */
18
+ export function startSession(doc) {
19
+ const first = firstReadableBlock(doc);
20
+ return {
21
+ doc,
22
+ cursor_block_id: first ? first.id : '',
23
+ state: 'idle',
24
+ bookmarks: {},
25
+ recent_spoken: [],
26
+ speed: DEFAULT_SPEED,
27
+ };
28
+ }
29
+ /** Iterate every block in document order. */
30
+ export function* iterBlocks(doc) {
31
+ for (const sec of doc.sections) {
32
+ for (const b of sec.blocks) {
33
+ yield { section_id: sec.id, section_heading: sec.heading, block: b };
34
+ }
35
+ }
36
+ }
37
+ /** Find the first text-class block in the document. */
38
+ function firstReadableBlock(doc) {
39
+ for (const { block } of iterBlocks(doc)) {
40
+ if (isText(block))
41
+ return block;
42
+ }
43
+ return null;
44
+ }
45
+ /** Type guard: text-class block. */
46
+ export function isText(b) {
47
+ return b.kind === 'paragraph' || b.kind === 'heading'
48
+ || b.kind === 'list_item' || b.kind === 'quote'
49
+ || b.kind === 'caption';
50
+ }
51
+ /** Find the block by id. Throws when missing. */
52
+ export function getBlock(doc, blockId) {
53
+ for (const { block } of iterBlocks(doc)) {
54
+ if (block.id === blockId)
55
+ return block;
56
+ }
57
+ throw new Error('reader: block not found: ' + blockId);
58
+ }
59
+ /** Move cursor to the next block (any kind). Updates state but
60
+ * does NOT play anything. Returns the new cursor or null when
61
+ * there is nothing more. */
62
+ export function advanceCursor(session) {
63
+ let seen = false;
64
+ for (const { block } of iterBlocks(session.doc)) {
65
+ if (seen) {
66
+ session.cursor_block_id = block.id;
67
+ return block.id;
68
+ }
69
+ if (block.id === session.cursor_block_id)
70
+ seen = true;
71
+ }
72
+ return null;
73
+ }
74
+ /** Move cursor backward by one block. */
75
+ export function reverseCursor(session) {
76
+ let prev = null;
77
+ for (const { block } of iterBlocks(session.doc)) {
78
+ if (block.id === session.cursor_block_id) {
79
+ if (prev) {
80
+ session.cursor_block_id = prev;
81
+ return prev;
82
+ }
83
+ return null;
84
+ }
85
+ prev = block.id;
86
+ }
87
+ return null;
88
+ }
89
+ /** Seek to the next heading-class block forward. Returns the
90
+ * new cursor or null when none ahead. */
91
+ export function seekNextSection(session) {
92
+ let seen = false;
93
+ for (const sec of session.doc.sections) {
94
+ /* Find first heading block AFTER the current section. */
95
+ const firstBlock = sec.blocks[0];
96
+ if (!firstBlock)
97
+ continue;
98
+ if (seen) {
99
+ session.cursor_block_id = firstBlock.id;
100
+ return { ok: true, new_cursor: firstBlock.id };
101
+ }
102
+ if (sec.blocks.some((b) => b.id === session.cursor_block_id)) {
103
+ seen = true;
104
+ }
105
+ }
106
+ return { ok: false, new_cursor: null, reason: 'no next section -- end of document' };
107
+ }
108
+ /** Seek to the previous heading. */
109
+ export function seekPrevSection(session) {
110
+ /* Walk forward keeping the last section ahead of the cursor. */
111
+ let prevSecBlockId = null;
112
+ for (const sec of session.doc.sections) {
113
+ if (sec.blocks.some((b) => b.id === session.cursor_block_id)) {
114
+ if (prevSecBlockId) {
115
+ session.cursor_block_id = prevSecBlockId;
116
+ return { ok: true, new_cursor: prevSecBlockId };
117
+ }
118
+ return { ok: false, new_cursor: null, reason: 'already in the first section' };
119
+ }
120
+ if (sec.blocks[0])
121
+ prevSecBlockId = sec.blocks[0].id;
122
+ }
123
+ return { ok: false, new_cursor: null, reason: 'cursor not in any section' };
124
+ }
125
+ /** Seek to a specific section by index (0-based). */
126
+ export function seekSectionByIndex(session, index) {
127
+ const sec = session.doc.sections[index];
128
+ if (!sec) {
129
+ return { ok: false, new_cursor: null, reason: 'section index out of range: ' + index };
130
+ }
131
+ const first = sec.blocks[0];
132
+ if (!first) {
133
+ return { ok: false, new_cursor: null, reason: 'section ' + index + ' has no blocks' };
134
+ }
135
+ session.cursor_block_id = first.id;
136
+ return { ok: true, new_cursor: first.id };
137
+ }
138
+ /** Set a named bookmark at the current cursor. */
139
+ export function setBookmark(session, name) {
140
+ if (!name || !/^[a-z][a-z0-9_-]*$/.test(name)) {
141
+ throw new Error('reader: bookmark name must match [a-z][a-z0-9_-]* (got: ' + JSON.stringify(name) + ')');
142
+ }
143
+ session.bookmarks[name] = session.cursor_block_id;
144
+ }
145
+ /** Jump to a bookmark. */
146
+ export function jumpToBookmark(session, name) {
147
+ const id = session.bookmarks[name];
148
+ if (!id) {
149
+ return { ok: false, new_cursor: null, reason: 'no bookmark named: ' + name };
150
+ }
151
+ session.cursor_block_id = id;
152
+ return { ok: true, new_cursor: id };
153
+ }
154
+ /** Append a recently-spoken text to the rolling recap buffer.
155
+ * Enforces the limit. */
156
+ export function recordSpoken(session, text) {
157
+ session.recent_spoken.push(text);
158
+ while (session.recent_spoken.length > RECAP_BUFFER_LIMIT) {
159
+ session.recent_spoken.shift();
160
+ }
161
+ }
162
+ /** Clamp speed into the supported range. */
163
+ export function setSpeed(session, speed) {
164
+ if (typeof speed !== 'number' || !Number.isFinite(speed))
165
+ return session.speed;
166
+ if (speed < MIN_SPEED)
167
+ speed = MIN_SPEED;
168
+ if (speed > MAX_SPEED)
169
+ speed = MAX_SPEED;
170
+ session.speed = speed;
171
+ return speed;
172
+ }
173
+ /** State transitions. Pure helpers so callers don't write the
174
+ * string literals by hand. */
175
+ export function transitionTo(session, next) {
176
+ session.state = next;
177
+ }
178
+ export { DEFAULT_SPEED, MIN_SPEED, MAX_SPEED, RECAP_BUFFER_LIMIT, };
179
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/reader/state.ts"],"names":[],"mappings":"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"}