@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,295 @@
1
+ /**
2
+ * App lifecycle tools (V1.13 of HITO 1).
3
+ *
4
+ * Three tools:
5
+ * - forge.run_app(repo_dir?, command?, wait_for_url_ms?)
6
+ * - forge.stop_app(pid?)
7
+ * - forge.restart_app(repo_dir?, command?)
8
+ *
9
+ * Single-process model: at most one app runs per chat session.
10
+ * Multi-app concurrency is a v0.4+ slice.
11
+ *
12
+ * Spawn detection (when no explicit command is given):
13
+ * 1. Read package.json scripts.
14
+ * 2. Prefer `dev`, then `start`, then `serve`. Refuse loudly
15
+ * when none exist.
16
+ * 3. Run via the matching package manager
17
+ * (pnpm-lock.yaml -> pnpm, yarn.lock -> yarn, default
18
+ * npm).
19
+ *
20
+ * URL detection is best-effort: monitor stdout for up to
21
+ * wait_for_url_ms (default 5000) looking for the typical
22
+ * "http://localhost:<port>" pattern. When found, return it;
23
+ * else return null with a note in the result.
24
+ *
25
+ * Loud failures per ROADMAP sec 12.2.
26
+ *
27
+ * ASCII-only.
28
+ */
29
+ import { spawn } from 'node:child_process';
30
+ import path from 'node:path';
31
+ import { promises as fs } from 'node:fs';
32
+ const DEFAULT_WAIT_MS = 5000;
33
+ const MAX_WAIT_MS = 30_000;
34
+ /** Process registry. Single-entry. */
35
+ let active = null;
36
+ /* ============================================================
37
+ * Specs
38
+ * ============================================================ */
39
+ export const RUN_APP_SPEC = {
40
+ name: 'forge.run_app',
41
+ description: 'Launch the project dev server. Auto-detects the package manager (npm / yarn / pnpm) and the script (dev / start / serve). Returns pid + best-effort URL.',
42
+ input_schema: {
43
+ type: 'object',
44
+ properties: {
45
+ repo_dir: { type: 'string', description: 'Path to the project root. Default: projectRoot.' },
46
+ command: { type: 'string', description: 'Explicit script name (e.g. "dev", "build:watch"). When omitted, autoselected.' },
47
+ wait_for_url_ms: { type: 'number', description: 'How long to monitor stdout for a URL (default 5000, max 30000).' },
48
+ },
49
+ required: [],
50
+ },
51
+ requires_approval: true,
52
+ };
53
+ export const STOP_APP_SPEC = {
54
+ name: 'forge.stop_app',
55
+ description: 'Stop the running app spawned by forge.run_app. Returns the final logs tail.',
56
+ input_schema: {
57
+ type: 'object',
58
+ properties: {
59
+ pid: { type: 'number', description: 'PID to stop. Default: the active one.' },
60
+ },
61
+ required: [],
62
+ },
63
+ requires_approval: true,
64
+ };
65
+ export const RESTART_APP_SPEC = {
66
+ name: 'forge.restart_app',
67
+ description: 'Stop the running app + relaunch with the same (or new) options.',
68
+ input_schema: {
69
+ type: 'object',
70
+ properties: {
71
+ repo_dir: { type: 'string', description: 'Path. Default: previous app dir, then projectRoot.' },
72
+ command: { type: 'string', description: 'Script. Default: previous.' },
73
+ wait_for_url_ms: { type: 'number' },
74
+ },
75
+ required: [],
76
+ },
77
+ requires_approval: true,
78
+ };
79
+ /* ============================================================
80
+ * Implementations
81
+ * ============================================================ */
82
+ function defaultReadFile(p) {
83
+ return fs.readFile(p, 'utf-8');
84
+ }
85
+ async function defaultExists(p) {
86
+ try {
87
+ await fs.stat(p);
88
+ return true;
89
+ }
90
+ catch {
91
+ return false;
92
+ }
93
+ }
94
+ function defaultSpawner(cmd, args, cwd) {
95
+ const proc = spawn(cmd, args, { cwd, stdio: ['ignore', 'pipe', 'pipe'], shell: process.platform === 'win32' });
96
+ return proc;
97
+ }
98
+ const URL_PATTERN = /\bhttps?:\/\/(?:localhost|127\.0\.0\.1)(?::\d+)?(?:\/[^\s]*)?/;
99
+ async function detectCommand(repoDir, scriptOverride, deps) {
100
+ const exists = deps.fileExists ?? defaultExists;
101
+ const readFile = deps.readFile ?? defaultReadFile;
102
+ const pkgPath = path.join(repoDir, 'package.json');
103
+ if (!(await exists(pkgPath))) {
104
+ return { error: 'no package.json in ' + repoDir };
105
+ }
106
+ let pkg;
107
+ try {
108
+ pkg = JSON.parse(await readFile(pkgPath));
109
+ }
110
+ catch (err) {
111
+ return { error: 'invalid package.json: ' + (err instanceof Error ? err.message : String(err)) };
112
+ }
113
+ const scripts = pkg.scripts ?? {};
114
+ let script = scriptOverride;
115
+ if (!script) {
116
+ for (const candidate of ['dev', 'start', 'serve']) {
117
+ if (typeof scripts[candidate] === 'string') {
118
+ script = candidate;
119
+ break;
120
+ }
121
+ }
122
+ if (!script) {
123
+ return { error: 'no dev/start/serve script in package.json -- pass an explicit command' };
124
+ }
125
+ }
126
+ else if (typeof scripts[script] !== 'string') {
127
+ return { error: 'script "' + script + '" not found in package.json scripts' };
128
+ }
129
+ /* Package manager detection. */
130
+ let pm = 'npm';
131
+ if (await exists(path.join(repoDir, 'pnpm-lock.yaml')))
132
+ pm = 'pnpm';
133
+ else if (await exists(path.join(repoDir, 'yarn.lock')))
134
+ pm = 'yarn';
135
+ return {
136
+ cmd: pm,
137
+ args: pm === 'npm' ? ['run', script] : pm === 'yarn' ? ['run', script] : [script],
138
+ script,
139
+ };
140
+ }
141
+ export async function runApp(args, ctx, deps = {}) {
142
+ if (active) {
143
+ return {
144
+ tool: RUN_APP_SPEC.name,
145
+ result: { error: 'an app is already running (pid ' + active.app.pid + '). Call forge.stop_app first.' },
146
+ is_error: true,
147
+ display: 'already running',
148
+ };
149
+ }
150
+ const repoDir = args.repo_dir
151
+ ? (path.isAbsolute(args.repo_dir) ? args.repo_dir : path.join(ctx.projectRoot, args.repo_dir))
152
+ : ctx.projectRoot;
153
+ const stat = await fs.stat(repoDir).catch(() => null);
154
+ if (!stat || !stat.isDirectory()) {
155
+ return { tool: RUN_APP_SPEC.name, result: { error: 'repo_dir does not exist or is not a directory: ' + repoDir }, is_error: true, display: 'bad repo_dir' };
156
+ }
157
+ const det = await detectCommand(repoDir, args.command, deps);
158
+ if ('error' in det) {
159
+ return { tool: RUN_APP_SPEC.name, result: { error: det.error }, is_error: true, display: 'spawn detect failed' };
160
+ }
161
+ const spawner = deps.spawner ?? defaultSpawner;
162
+ const proc = spawner(det.cmd, det.args, repoDir);
163
+ if (typeof proc.pid !== 'number') {
164
+ return { tool: RUN_APP_SPEC.name, result: { error: 'failed to spawn ' + det.cmd + ' ' + det.args.join(' ') }, is_error: true, display: 'spawn failed' };
165
+ }
166
+ const app = {
167
+ pid: proc.pid,
168
+ repo_dir: repoDir,
169
+ command: [det.cmd, ...det.args],
170
+ started_at: new Date().toISOString(),
171
+ url: null,
172
+ recent_logs: '',
173
+ };
174
+ active = { proc: proc, app };
175
+ /* Bound the captured logs. */
176
+ function appendLog(s) {
177
+ app.recent_logs = (app.recent_logs + s).slice(-16384);
178
+ }
179
+ /* URL detection: monitor stdout + stderr up to wait_for_url_ms. */
180
+ const waitMs = Math.min(Math.max(args.wait_for_url_ms ?? DEFAULT_WAIT_MS, 0), MAX_WAIT_MS);
181
+ const urlFound = new Promise((resolve) => {
182
+ let resolved = false;
183
+ const timer = setTimeout(() => {
184
+ if (!resolved) {
185
+ resolved = true;
186
+ resolve(null);
187
+ }
188
+ }, waitMs);
189
+ const onChunk = (chunk) => {
190
+ const s = String(chunk);
191
+ appendLog(s);
192
+ const m = s.match(URL_PATTERN);
193
+ if (m && !resolved) {
194
+ resolved = true;
195
+ clearTimeout(timer);
196
+ resolve(m[0]);
197
+ }
198
+ };
199
+ if (proc.stdout)
200
+ proc.stdout.on('data', onChunk);
201
+ if (proc.stderr)
202
+ proc.stderr.on('data', onChunk);
203
+ });
204
+ /* Wire close so we clear active on graceful exit. */
205
+ proc.on('close', (code) => {
206
+ appendLog('\n[process exited with code ' + code + ']\n');
207
+ if (active && active.proc === proc) {
208
+ active = null;
209
+ }
210
+ });
211
+ proc.on('error', (err) => {
212
+ appendLog('\n[process error: ' + (err && err.message ? err.message : String(err)) + ']\n');
213
+ });
214
+ const url = await urlFound;
215
+ app.url = url;
216
+ return {
217
+ tool: RUN_APP_SPEC.name,
218
+ result: {
219
+ pid: app.pid,
220
+ repo_dir: app.repo_dir,
221
+ command: app.command,
222
+ started_at: app.started_at,
223
+ url,
224
+ url_detected: url !== null,
225
+ recent_logs_tail: app.recent_logs.slice(-2048),
226
+ },
227
+ display: url
228
+ ? 'app running pid ' + app.pid + ' at ' + url
229
+ : 'app spawned pid ' + app.pid + ' -- URL not detected in ' + waitMs + 'ms (check logs)',
230
+ };
231
+ }
232
+ export async function stopApp(args, _ctx, _deps = {}) {
233
+ if (!active) {
234
+ return {
235
+ tool: STOP_APP_SPEC.name,
236
+ result: { error: 'no app is running' },
237
+ is_error: true,
238
+ display: 'nothing to stop',
239
+ };
240
+ }
241
+ if (args.pid !== undefined && args.pid !== active.app.pid) {
242
+ return {
243
+ tool: STOP_APP_SPEC.name,
244
+ result: { error: 'pid mismatch: requested ' + args.pid + ', active is ' + active.app.pid },
245
+ is_error: true,
246
+ display: 'pid mismatch',
247
+ };
248
+ }
249
+ const app = active.app;
250
+ const proc = active.proc;
251
+ active = null;
252
+ /* SIGTERM first; many dev servers handle it gracefully. */
253
+ try {
254
+ proc.kill('SIGTERM');
255
+ }
256
+ catch (err) {
257
+ return {
258
+ tool: STOP_APP_SPEC.name,
259
+ result: { error: 'kill failed: ' + (err instanceof Error ? err.message : String(err)) },
260
+ is_error: true,
261
+ display: 'kill failed',
262
+ };
263
+ }
264
+ return {
265
+ tool: STOP_APP_SPEC.name,
266
+ result: {
267
+ pid: app.pid,
268
+ repo_dir: app.repo_dir,
269
+ command: app.command,
270
+ stopped_at: new Date().toISOString(),
271
+ recent_logs_tail: app.recent_logs.slice(-2048),
272
+ },
273
+ display: 'stopped pid ' + app.pid,
274
+ };
275
+ }
276
+ export async function restartApp(args, ctx, deps = {}) {
277
+ const prev = active;
278
+ if (prev) {
279
+ await stopApp({}, ctx, deps);
280
+ }
281
+ /* Inherit the previous repo_dir / command if the caller did
282
+ not supply new ones. */
283
+ const repoDir = args.repo_dir ?? (prev ? prev.app.repo_dir : undefined);
284
+ const command = args.command ?? (prev ? prev.app.command[2] : undefined); /* pm script slot */
285
+ return runApp({
286
+ ...(repoDir ? { repo_dir: repoDir } : {}),
287
+ ...(command ? { command } : {}),
288
+ ...(args.wait_for_url_ms !== undefined ? { wait_for_url_ms: args.wait_for_url_ms } : {}),
289
+ }, ctx, deps);
290
+ }
291
+ /** Test seam: reset the singleton between test cases. */
292
+ export function _resetLifecycleForTests() {
293
+ active = null;
294
+ }
295
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../src/chat/tools/lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * forge.manual.open chat tool (Fase F.7 of HITO 1 extension).
3
+ *
4
+ * Resolves the user's chosen language (or the explicitly
5
+ * requested one) to the HTML manual under docs/manuals/, opens
6
+ * it through the existing reader pipeline (V1.19 HTML parser),
7
+ * and surfaces the reader session so subsequent next_block /
8
+ * search / bookmark calls operate on the manual just like any
9
+ * other document.
10
+ *
11
+ * The actual document parsing reuses the existing reader; this
12
+ * tool just resolves the manual path by language and delegates.
13
+ *
14
+ * ASCII-only.
15
+ */
16
+ import type { ToolContext, ToolResult, ToolSpec } from '../tools.js';
17
+ import { type SupportedLanguage } from '../../i18n/index.js';
18
+ export declare const MANUAL_OPEN_SPEC: ToolSpec;
19
+ export declare function runManualOpen(args: {
20
+ lang?: string;
21
+ } | undefined, ctx: ToolContext): Promise<ToolResult>;
22
+ /** List which manuals are present on disk -- handy for yf
23
+ * doctor + for the panel's language selector to surface
24
+ * installation gaps. */
25
+ export declare function listAvailableManuals(packageDir?: string): Promise<SupportedLanguage[]>;
26
+ //# sourceMappingURL=manual.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manual.d.ts","sourceRoot":"","sources":["../../../src/chat/tools/manual.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIrE,OAAO,EAGL,KAAK,iBAAiB,EAEvB,MAAM,qBAAqB,CAAC;AAgC7B,eAAO,MAAM,gBAAgB,EAAE,QAe9B,CAAC;AA4CF,wBAAsB,aAAa,CACjC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,EACnC,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,UAAU,CAAC,CAyCrB;AAED;;yBAEyB;AACzB,wBAAsB,oBAAoB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAkB5F"}
@@ -0,0 +1,164 @@
1
+ /**
2
+ * forge.manual.open chat tool (Fase F.7 of HITO 1 extension).
3
+ *
4
+ * Resolves the user's chosen language (or the explicitly
5
+ * requested one) to the HTML manual under docs/manuals/, opens
6
+ * it through the existing reader pipeline (V1.19 HTML parser),
7
+ * and surfaces the reader session so subsequent next_block /
8
+ * search / bookmark calls operate on the manual just like any
9
+ * other document.
10
+ *
11
+ * The actual document parsing reuses the existing reader; this
12
+ * tool just resolves the manual path by language and delegates.
13
+ *
14
+ * ASCII-only.
15
+ */
16
+ import path from 'node:path';
17
+ import { promises as fs } from 'node:fs';
18
+ import { fileURLToPath } from 'node:url';
19
+ import { runReaderOpen, } from './reader.js';
20
+ import { normaliseLanguageTag, SUPPORTED_LANGUAGES, currentLanguage, } from '../../i18n/index.js';
21
+ /** Resolve the manual base directory relative to THIS module
22
+ * (independent of process.cwd()). Tries, in order:
23
+ *
24
+ * 1. Installed package layout: when this file is at
25
+ * <pkg>/dist/chat/tools/manual.js, the manuals are at
26
+ * <pkg>/docs/manuals/. The `files` glob in package.json
27
+ * ships docs/manuals/ inside the tarball.
28
+ * 2. Dev (tsx) layout: when this file is at
29
+ * <repo>/src/chat/tools/manual.ts, the manuals are at
30
+ * <repo>/docs/manuals/.
31
+ * 3. cwd-relative (last-resort dev fallback). */
32
+ function manualBaseDirs() {
33
+ const here = path.dirname(fileURLToPath(import.meta.url));
34
+ /* dist/chat/tools/manual.js -> ../../../docs/manuals/ (installed)
35
+ src/chat/tools/manual.ts -> ../../../docs/manuals/ (dev via tsx)
36
+ Same relative depth -- the parent layout is identical. */
37
+ const moduleRelative = path.resolve(here, '..', '..', '..', 'docs', 'manuals');
38
+ return [
39
+ moduleRelative,
40
+ /* Last-resort fallback when someone invokes the tool from
41
+ a tree that contains a docs/manuals/ at the cwd root. */
42
+ path.join(process.cwd(), 'docs', 'manuals'),
43
+ ];
44
+ }
45
+ const MANUAL_PATH_CANDIDATES = (lang) => {
46
+ const fname = 'manual.' + lang + '.html';
47
+ return manualBaseDirs().map((dir) => path.join(dir, fname));
48
+ };
49
+ export const MANUAL_OPEN_SPEC = {
50
+ name: 'forge.manual.open',
51
+ description: 'Open the Yujin Forge user manual in the requested language (default: current user language). Resolves to docs/manuals/manual.<lang>.html and opens it through the reader pipeline so the user can navigate by voice. Available languages: es, en, pt, fr, ja, zh, hi, ar, de, it.',
52
+ input_schema: {
53
+ type: 'object',
54
+ properties: {
55
+ lang: {
56
+ type: 'string',
57
+ description: 'Language code (es, en, pt, fr, ja, zh, hi, ar, de, it). Optional; defaults to the current panel language.',
58
+ enum: ['es', 'en', 'pt', 'fr', 'ja', 'zh', 'hi', 'ar', 'de', 'it'],
59
+ },
60
+ },
61
+ required: [],
62
+ },
63
+ requires_approval: false,
64
+ };
65
+ /** Resolve which language to serve. Priority:
66
+ * 1. Explicit args.lang (normalised).
67
+ * 2. The panel's current language.
68
+ * 3. Spanish (default).
69
+ *
70
+ * Then verify the HTML file actually exists on disk; fall
71
+ * back to Spanish if the user-requested locale is missing.
72
+ * If even Spanish is missing, throw -- the install is broken. */
73
+ async function resolveManualPath(reqLang, packageDir) {
74
+ const requested = reqLang
75
+ ? normaliseLanguageTag(reqLang)
76
+ : currentLanguage();
77
+ const order = [requested];
78
+ if (requested !== 'es')
79
+ order.push('es');
80
+ for (const lang of order) {
81
+ const candidates = MANUAL_PATH_CANDIDATES(lang);
82
+ if (packageDir) {
83
+ candidates.push(path.join(packageDir, 'docs', 'manuals', 'manual.' + lang + '.html'));
84
+ }
85
+ for (const candidate of candidates) {
86
+ try {
87
+ await fs.access(candidate);
88
+ return {
89
+ path: candidate,
90
+ lang,
91
+ fellBack: lang !== requested,
92
+ };
93
+ }
94
+ catch {
95
+ /* try next candidate */
96
+ }
97
+ }
98
+ }
99
+ throw new Error('manual.open: no manual HTML found for any language. Tried: '
100
+ + order.join(', ') + '. Reinstall the package or check the docs/manuals/ directory.');
101
+ }
102
+ export async function runManualOpen(args, ctx) {
103
+ /* Resolve absolute path; ToolContext does not carry an
104
+ install dir today, so we fall through to cwd + a probed
105
+ parent in MANUAL_PATH_CANDIDATES. */
106
+ let resolved;
107
+ try {
108
+ resolved = await resolveManualPath(args?.lang, undefined);
109
+ }
110
+ catch (err) {
111
+ return {
112
+ tool: MANUAL_OPEN_SPEC.name,
113
+ result: { error: err instanceof Error ? err.message : String(err) },
114
+ is_error: true,
115
+ display: 'manual not found',
116
+ };
117
+ }
118
+ /* Reuse runReaderOpen so the manual goes through the same
119
+ session machinery -- the user can then say "siguiente" /
120
+ "buscar X" / "marcame aca" on the manual just like any
121
+ other document. The path passed in is absolute. */
122
+ const readerResult = await runReaderOpen({ path: resolved.path }, ctx);
123
+ if (readerResult.is_error)
124
+ return readerResult;
125
+ /* Decorate the result with manual-specific metadata so the
126
+ panel + the chat can surface which language was served and
127
+ whether we fell back. */
128
+ const enriched = {
129
+ ...readerResult.result,
130
+ manual_lang: resolved.lang,
131
+ manual_fell_back: resolved.fellBack,
132
+ manual_path: resolved.path,
133
+ };
134
+ return {
135
+ tool: MANUAL_OPEN_SPEC.name,
136
+ result: enriched,
137
+ display: 'manual opened: ' + resolved.lang
138
+ + (resolved.fellBack ? ' (fell back from ' + (args?.lang || 'unknown') + ')' : ''),
139
+ };
140
+ }
141
+ /** List which manuals are present on disk -- handy for yf
142
+ * doctor + for the panel's language selector to surface
143
+ * installation gaps. */
144
+ export async function listAvailableManuals(packageDir) {
145
+ const present = [];
146
+ for (const lang of SUPPORTED_LANGUAGES) {
147
+ const candidates = MANUAL_PATH_CANDIDATES(lang);
148
+ if (packageDir) {
149
+ candidates.push(path.join(packageDir, 'docs', 'manuals', 'manual.' + lang + '.html'));
150
+ }
151
+ for (const candidate of candidates) {
152
+ try {
153
+ await fs.access(candidate);
154
+ present.push(lang);
155
+ break;
156
+ }
157
+ catch {
158
+ /* try next */
159
+ }
160
+ }
161
+ }
162
+ return present;
163
+ }
164
+ //# sourceMappingURL=manual.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manual.js","sourceRoot":"","sources":["../../../src/chat/tools/manual.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EACL,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EAEnB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;;mDAUmD;AACnD,SAAS,cAAc;IACrB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D;;gEAE4D;IAC5D,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IAC/E,OAAO;QACL,cAAc;QACd;mEAC2D;QAC3D,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED,MAAM,sBAAsB,GAAG,CAAC,IAAuB,EAAY,EAAE;IACnE,MAAM,KAAK,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC;IACzC,OAAO,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AAC9D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAa;IACxC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,mRAAmR;IAChS,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2GAA2G;gBACxH,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;aACnE;SACF;QACD,QAAQ,EAAE,EAAE;KACb;IACD,iBAAiB,EAAE,KAAK;CACzB,CAAC;AAEF;;;;;;;kEAOkE;AAClE,KAAK,UAAU,iBAAiB,CAC9B,OAA2B,EAC3B,UAA8B;IAE9B,MAAM,SAAS,GAAG,OAAO;QACvB,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC;QAC/B,CAAC,CAAC,eAAe,EAAE,CAAC;IACtB,MAAM,KAAK,GAAwB,CAAC,SAAS,CAAC,CAAC;IAC/C,IAAI,SAAS,KAAK,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;QACxF,CAAC;QACD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC3B,OAAO;oBACL,IAAI,EAAE,SAAS;oBACf,IAAI;oBACJ,QAAQ,EAAE,IAAI,KAAK,SAAS;iBAC7B,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,wBAAwB;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CACb,6DAA6D;UAC3D,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,+DAA+D,CACrF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAmC,EACnC,GAAgB;IAEhB;;2CAEuC;IACvC,IAAI,QAAsE,CAAC;IAC3E,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,IAAI,EAAE,gBAAgB,CAAC,IAAI;YAC3B,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YACnE,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,kBAAkB;SAC5B,CAAC;IACJ,CAAC;IAED;;;yDAGqD;IACrD,MAAM,YAAY,GAAG,MAAM,aAAa,CACtC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,EACvB,GAAG,CACJ,CAAC;IACF,IAAI,YAAY,CAAC,QAAQ;QAAE,OAAO,YAAY,CAAC;IAE/C;;+BAE2B;IAC3B,MAAM,QAAQ,GAAG;QACf,GAAI,YAAY,CAAC,MAAkC;QACnD,WAAW,EAAE,QAAQ,CAAC,IAAI;QAC1B,gBAAgB,EAAE,QAAQ,CAAC,QAAQ;QACnC,WAAW,EAAE,QAAQ,CAAC,IAAI;KAC3B,CAAC;IACF,OAAO;QACL,IAAI,EAAE,gBAAgB,CAAC,IAAI;QAC3B,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,iBAAiB,GAAG,QAAQ,CAAC,IAAI;cACtC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,mBAAmB,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;KACrF,CAAC;AACJ,CAAC;AAED;;yBAEyB;AACzB,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,UAAmB;IAC5D,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,mBAAmB,EAAE,CAAC;QACvC,MAAM,UAAU,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;QACxF,CAAC;QACD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC3B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnB,MAAM;YACR,CAAC;YAAC,MAAM,CAAC;gBACP,cAAc;YAChB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Reader chat tools (V1.28 of HITO 1).
3
+ *
4
+ * Exposes the reader subsystem (V1.14+) to the chat catalog.
5
+ * Single shared session map at module scope so the user can
6
+ * open a doc in one chat turn and continue navigating it in
7
+ * the next.
8
+ *
9
+ * Tools:
10
+ * forge.reader.open(path)
11
+ * forge.reader.list_documents()
12
+ * forge.reader.read_section(doc_id, index?)
13
+ * forge.reader.next_block(doc_id)
14
+ * forge.reader.search(doc_id, query, max?)
15
+ * forge.reader.bookmark_set(doc_id, name)
16
+ * forge.reader.bookmark_jump(doc_id, name)
17
+ * forge.reader.recap(doc_id, window?)
18
+ *
19
+ * All read-only (requires_approval=false). The reader does
20
+ * not write to the project; it parses + remembers state +
21
+ * answers queries.
22
+ *
23
+ * Loud failures per ROADMAP sec 12.2.
24
+ *
25
+ * ASCII-only.
26
+ */
27
+ import type { ToolContext, ToolResult, ToolSpec } from '../tools.js';
28
+ /** V1.26b -- Claude-backed recap summariser. Optional DI seam.
29
+ * When the chat server boots with a Claude client, it calls
30
+ * setRecapSummarizer() to install the summariser; otherwise
31
+ * mode='summary' calls return a loud error pointing the
32
+ * caller at the env flag + config.
33
+ *
34
+ * Gated by env var YF_ENABLE_CLAUDE_RECAP=1 so even an
35
+ * installed summariser will NOT fire by accident -- the
36
+ * user has to opt in once per machine. */
37
+ export type RecapSummarizer = (blocks: string[], options: {
38
+ language?: string;
39
+ }) => Promise<string>;
40
+ export declare function setRecapSummarizer(impl: RecapSummarizer | null): void;
41
+ /** Test seam. */
42
+ export declare function _resetReaderForTests(): void;
43
+ export declare const READER_OPEN_SPEC: ToolSpec;
44
+ export declare const READER_LIST_DOCS_SPEC: ToolSpec;
45
+ export declare const READER_READ_SECTION_SPEC: ToolSpec;
46
+ export declare const READER_NEXT_BLOCK_SPEC: ToolSpec;
47
+ export declare const READER_SEARCH_SPEC: ToolSpec;
48
+ export declare const READER_BOOKMARK_SET_SPEC: ToolSpec;
49
+ export declare const READER_BOOKMARK_JUMP_SPEC: ToolSpec;
50
+ export declare const READER_RECAP_SPEC: ToolSpec;
51
+ export declare function runReaderOpen(args: {
52
+ path: string;
53
+ }, ctx: ToolContext): Promise<ToolResult>;
54
+ export declare function runReaderListDocuments(): Promise<ToolResult>;
55
+ export declare function runReaderReadSection(args: {
56
+ doc_id: string;
57
+ index?: number;
58
+ }): Promise<ToolResult>;
59
+ export declare function runReaderNextBlock(args: {
60
+ doc_id: string;
61
+ }): Promise<ToolResult>;
62
+ export declare function runReaderSearch(args: {
63
+ doc_id: string;
64
+ query: string;
65
+ max?: number;
66
+ }): Promise<ToolResult>;
67
+ export declare function runReaderBookmarkSet(args: {
68
+ doc_id: string;
69
+ name: string;
70
+ }): Promise<ToolResult>;
71
+ export declare function runReaderBookmarkJump(args: {
72
+ doc_id: string;
73
+ name: string;
74
+ }): Promise<ToolResult>;
75
+ export declare function runReaderRecap(args: {
76
+ doc_id: string;
77
+ window?: number;
78
+ mode?: 'literal' | 'summary';
79
+ }): Promise<ToolResult>;
80
+ //# sourceMappingURL=reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../../../src/chat/tools/reader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAkBrE;;;;;;;;2CAQ2C;AAC3C,MAAM,MAAM,eAAe,GAAG,CAC5B,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,KAC3B,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI,CAErE;AAED,iBAAiB;AACjB,wBAAgB,oBAAoB,IAAI,IAAI,CAG3C;AAMD,eAAO,MAAM,gBAAgB,EAAE,QAW9B,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,QAKnC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,QAYtC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,QAWpC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,QAahC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,QAYtC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,QAYvC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,QAa/B,CAAC;AAYF,wBAAsB,aAAa,CACjC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EACtB,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,UAAU,CAAC,CA0CrB;AAED,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,UAAU,CAAC,CAelE;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAmCxG;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAwCtF;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAehH;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAgBtG;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAevG;AAoBD,wBAAsB,cAAc,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;CAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CA4FjI"}