@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
package/LICENSE ADDED
@@ -0,0 +1,45 @@
1
+ YUJIN FORGE -- COMMERCIAL SOFTWARE LICENSE
2
+
3
+ Copyright (c) 2026 Pablo Kuschnirof / Yujin (rpaforce.com).
4
+
5
+ PRELIMINARY LICENSE NOTICE -- DAY 0
6
+ ====================================
7
+
8
+ This repository is the day-0 planning anchor for Yujin Forge.
9
+ Source code shipped here today (this LICENSE, README.md, the
10
+ SPEC.md draft) is published under the Apache License, Version
11
+ 2.0, the same as the rest of the Yujin open-source surface.
12
+
13
+ When Yujin Forge ships its commercial features (test corpus
14
+ generator, mock generator, embedded Claude Code with NAC-aware
15
+ tools, migration EXECUTION, voice-driven scaffolder, `yf ship`
16
+ deploy gate), those features will ship under a separate
17
+ COMMERCIAL LICENSE issued by Yujin (rpaforce.com) on a per-seat
18
+ or per-organisation basis. The commercial license will be
19
+ incorporated by reference into this file at that time.
20
+
21
+ The migration AUDIT tool, the chat-panel-without-Forge-tools
22
+ (vanilla Claude Code), and the empty-project scaffolder will
23
+ remain Apache-2.0 even after commercial features ship.
24
+
25
+ THIS LICENSING REGIME IS PRELIMINARY. The final shape may
26
+ adjust based on community feedback during the v1.0 development
27
+ cycle (2026-Q2 through 2026-Q4). Any change will be announced
28
+ on the project's GitHub Discussions before taking effect.
29
+
30
+ UNTIL THE COMMERCIAL LICENSE LANDS, THIS REPOSITORY'S CONTENTS
31
+ ARE LICENSED UNDER APACHE-2.0:
32
+
33
+ Licensed under the Apache License, Version 2.0 (the "License");
34
+ you may not use this file except in compliance with the License.
35
+ You may obtain a copy of the License at
36
+
37
+ http://www.apache.org/licenses/LICENSE-2.0
38
+
39
+ Unless required by applicable law or agreed to in writing, software
40
+ distributed under the License is distributed on an "AS IS" BASIS,
41
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
42
+ implied. See the License for the specific language governing
43
+ permissions and limitations under the License.
44
+
45
+ Full Apache-2.0 text: see http://www.apache.org/licenses/LICENSE-2.0
package/README.md ADDED
@@ -0,0 +1,371 @@
1
+ # Yujin Forge
2
+
3
+ **A voice-first NAC-3 development framework + build tool.** Forge
4
+ gives a developer (or an institution like ADIP teaching kids to
5
+ code) a single CLI + chat panel that covers the full app-creation
6
+ loop: read design specs by voice, generate code scaffolds from
7
+ those specs, decorate vanilla HTML into NAC-3, drive existing apps
8
+ via voice + chat.
9
+
10
+ > Status: **v0.2.0-alpha (HITO 0 + HITO 1 closed)**, 2026-05-23.
11
+ >
12
+ > **HITO 0 -- credentials vault.** AES-256-GCM at-rest encryption
13
+ > with machine fingerprint binding, atomic writes (0o600), one-shot
14
+ > reveal, vault modal in chat panel. Slots: anthropic / openai /
15
+ > google_voice / elevenlabs / github_token.
16
+ >
17
+ > **HITO 1 -- voice + reader + spec ingest.** Bidirectional voice
18
+ > (Whisper + Google STT, ElevenLabs + Google + Yujin Cloud TTS) with
19
+ > chunked pipelined playback (~600 ms first audio on long sections).
20
+ > Voiceprint enrolment + 5-layer trust model + liveness challenge on
21
+ > irreversible ops. Document reader for **txt / md / source / html /
22
+ > rtf / csv / epub / pdf / docx / xlsx** (10 formats) with voice-
23
+ > driven navigation (open / next / search / bookmark / recap). Spec
24
+ > drag-drop: drop a PDF/DOCX/etc into chat -> Forge parses ->
25
+ > Claude extracts requirements/entities/endpoints/components ->
26
+ > generates a file plan -> writes the scaffold after explicit
27
+ > approval -> rollback on demand.
28
+ >
29
+ > **Fase F -- 10-language i18n + manuals.** Panel UI + voice intent
30
+ > matcher + HTML user manuals all available in
31
+ > **es / en / pt / fr / ja / zh / hi / ar / de / it**. Globe button
32
+ > in the chat panel swaps the active language; the new
33
+ > `forge.manual.open` tool routes "abrime el manual" / "open the
34
+ > manual" / "マニュアルを開いて" / etc to the right HTML manual
35
+ > served through the reader pipeline. Catalog-lint refuses to
36
+ > publish if any locale is missing keys.
37
+ >
38
+ > Earlier work still shipping: G1 (AST migrator robustness) + G2
39
+ > (LLM retry loop) + G3 (multi-page HTML) + G4 (--dry-run for ai
40
+ > modes) + G5 (SPEC sync) + G6 (Figma scaffolder alpha) + the v0.3.0
41
+ > chat tool-use loop (`forge.read_manifest`,
42
+ > `forge.consult_nac_spec`, plus the V1.11..V1.13 github/git/
43
+ > lifecycle tools and the V1.28 + V1.32 reader tools).
44
+ >
45
+ > **988 vitest cases green** across 63 suites (Linux + macOS +
46
+ > Windows CI). AI decorator validated on calc fixture (15/15
47
+ > dispatch tasks OK) + Conduit-NAC3 (178/180 cross-lang at N=3).
48
+ > See [yujin.app/nac-spec/migration/](https://yujin.app/nac-spec/migration/)
49
+ > for the migration paper, `docs/HITO_1_ARCHITECTURE.md` for the
50
+ > voice+reader internals, and `docs/EVOLUTION_PLAN.md` for what is
51
+ > next.
52
+
53
+ ## What it is
54
+
55
+ Four things in one:
56
+
57
+ 1. **An AI-powered NAC-3 decorator.** `yf migrate <dir> --ai-silent`
58
+ calls Claude Sonnet 4.6 with the HTML + JS source, gets back a
59
+ fully-decorated HTML + JSON manifest, post-processes the output to
60
+ bake in the NAC3 runtime + contract bridge + inline `NAC.register`.
61
+ Takes ~25 s and ~$0.05 per app.
62
+
63
+ 2. **A Pilot installer.** `yf pilot install <dir>` injects the
64
+ embedded chat + voice + multi-model bundle into any
65
+ Forge-decorated app. The same UI works against any NAC-3-compliant
66
+ page, regardless of how it was decorated.
67
+
68
+ 3. **A React/AST migration scaffold (planned).** `yf migrate
69
+ <existing-react-repo>` audits the codebase, proposes the migration
70
+ path screen-by-screen, executes the diff. The audit + apply flow
71
+ is in place; the React-specific AST migrator is in flight.
72
+
73
+ 4. **A voice-first developer assistant (HITO 1).** `yf chat`
74
+ launches a local panel with bidirectional voice, a 10-format
75
+ document reader, and drag-drop spec ingest. Drop a PDF / DOCX /
76
+ HTML spec into chat -> Forge extracts requirements via Claude ->
77
+ generates a file scaffold plan -> writes the project after you
78
+ approve. Reverse the scaffold with one click. Aimed at solo
79
+ developers + institutional teams (ADIP) who want the full
80
+ "read spec out loud, then write the code" cycle without leaving
81
+ the keyboard or the headset. See "Voice cockpit + spec ingest"
82
+ below.
83
+
84
+ ## Quick start
85
+
86
+ ```bash
87
+ # Install
88
+ npm install -g @yujin/forge
89
+
90
+ # Decorate a vanilla HTML app (one shot, no human input)
91
+ yf migrate ./my-app --ai-silent --ai-out ./my-app-decorated
92
+
93
+ # Same, but include Yujin Pilot (the embedded chat + voice cockpit)
94
+ yf migrate ./my-app --ai-silent --with-pilot --ai-out ./my-app-decorated
95
+
96
+ # Install Pilot into an already-decorated app
97
+ yf pilot install ./my-app-decorated
98
+
99
+ # Open it
100
+ xdg-open ./my-app-decorated/index.html
101
+ ```
102
+
103
+ The decorated output is **drop-in NAC3-ready**: no CDN dependencies
104
+ at runtime, the manifest is registered inline at boot, every action
105
+ button is wired through `NAC.bindAction`, the floating Pilot button
106
+ appears bottom-right. Click it, paste an API key (Anthropic / OpenAI
107
+ / Google / DeepSeek / Groq), and drive the page by voice or text.
108
+
109
+ ## Commands
110
+
111
+ | Command | What it does |
112
+ |---|---|
113
+ | `yf new <slug>` | Bootstrap a new Yujin Forge React app from `templates/react-app/`. |
114
+ | `yf migrate <repo>` | Default mode: audit a project for NAC migration without writing. |
115
+ | `yf migrate <repo> --apply` | Execute the proposed React/AST migration on `.tsx`/`.jsx`. |
116
+ | `yf migrate <repo> --html` | Silent HTML walker -- auto-apply on `.html` files (rule-based, no LLM). |
117
+ | `yf migrate <repo> --assisted` | HTML walker with CLI prompts for ambiguous elements (rule-based, no LLM). |
118
+ | `yf migrate <repo> --ai-silent` | **AI-powered.** Claude one-shot decoration of an HTML file (paid seat). |
119
+ | `yf migrate <repo> --ai-assisted` | AI-powered with ambiguity-resolution round. |
120
+ | `yf migrate <repo> --with-pilot` | Inject Yujin Pilot bundle into the decorated output. |
121
+ | `yf pilot install <dir>` | Inject Pilot into an already-decorated NAC-3 app. |
122
+ | `yf chat` | Launch the embedded Claude Code voice+text panel hooked to the current project. |
123
+ | `yf test` | Run the auto-generated test corpus + mocks + report coverage by NAC pipeline stage. |
124
+ | `yf ship` | Gate: tests green + NAC-3 validate clean + LLM review pass + license valid -> deploy hook. |
125
+ | `yf doctor` | Diagnose the local Forge install + license + dependencies. |
126
+ | `yf validate` | Validate a NAC manifest against the spec schema. |
127
+ | `yf license` | Manage license tokens. |
128
+
129
+ See [docs/USAGE.md](docs/USAGE.md) for every flag and worked examples.
130
+
131
+ ## How decoration works
132
+
133
+ A vanilla HTML/JS app starts like:
134
+
135
+ ```html
136
+ <button onclick="digit('7')">7</button>
137
+ ```
138
+
139
+ After `yf migrate --ai-silent`:
140
+
141
+ ```html
142
+ <body data-nac-plugin="calc">
143
+ ...
144
+ <button onclick="digit('7')"
145
+ data-nac-id="calc.action.digit_7"
146
+ data-nac-role="action"
147
+ data-nac-action="digit_7">7</button>
148
+ ...
149
+ <script src="nac.browser.js"></script>
150
+ <script src="calc.js"></script>
151
+ <script src="nac-bridge.js"></script>
152
+ <script>
153
+ (function () {
154
+ var manifest = { "plugin_slug": "calc", ... };
155
+ window.NAC.register(manifest);
156
+ })();
157
+ </script>
158
+ </body>
159
+ ```
160
+
161
+ Any LLM driver can now call:
162
+
163
+ ```js
164
+ await NAC.click_by_verb('calc', 'digit_7');
165
+ ```
166
+
167
+ and the host's existing `digit('7')` handler runs **plus** the
168
+ `nac:action:succeeded` contract event fires (because `nac-bridge.js`
169
+ re-wired the inline onclick via `NAC.bindAction`).
170
+
171
+ ## How Pilot works
172
+
173
+ Pilot is a single-file IIFE bundle + companion stylesheet that lives
174
+ in `yujin-pilot/dist/`. `yf pilot install` (or `yf migrate
175
+ --with-pilot`) copies both into the target directory and inserts the
176
+ script tags before `</body>`.
177
+
178
+ At runtime, Pilot mounts a floating sumi-e branch button at
179
+ bottom-right. Click it: chat panel opens. Click again: switches to
180
+ the "pizarra" mode (chat + voice + action trace). Configure: paste
181
+ API keys for any subset of {Anthropic, OpenAI, Google, DeepSeek,
182
+ Groq}. Each provider supports all the models the
183
+ [NAC3 v2.3 benchmark](https://yujin.app/nac-spec/benchmark/) exercised.
184
+
185
+ Pilot reads `window.NAC.list_registered_plugins()` to get the active
186
+ manifest, sends it to the selected LLM with the user's utterance,
187
+ parses the JSON action chain, dispatches each via
188
+ `NAC.click_by_verb`, reads back any configured status probe, then
189
+ speaks the result via Web Speech / ElevenLabs / Google Cloud TTS.
190
+
191
+ Config persists in `localStorage` under `yujin_pilot.config`. Keys
192
+ never leave the browser. (Production deployments belong behind a
193
+ server proxy.)
194
+
195
+ See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for the full
196
+ internal architecture.
197
+
198
+ ## Voice cockpit + spec ingest (HITO 1)
199
+
200
+ `yf chat` opens a local panel with three views (globito / mini /
201
+ full). The full view has a chat stream on the left and a "pizarra"
202
+ trace on the right that shows every tool the system invoked to
203
+ answer.
204
+
205
+ What it covers end-to-end:
206
+
207
+ - **Vault** -- modal accessible via the Keys button. Slots for
208
+ `anthropic`, `openai`, `google_voice`, `elevenlabs`,
209
+ `github_token`. Values are encrypted at rest with the machine
210
+ fingerprint; shown once on entry, never again.
211
+
212
+ - **Voice in / voice out.** Press the mic, speak; the panel
213
+ records via `MediaRecorder`, ships the audio to the configured
214
+ STT provider, and either dispatches a recognised reader command
215
+ directly or feeds the transcript to the chat loop. Replies are
216
+ spoken back via the configured TTS provider with chunked
217
+ prefetch (first audio in ~600 ms even on long answers).
218
+
219
+ - **Voiceprint trust.** Enroll your voice once -- subsequent voice
220
+ commands are gated by a 5-layer trust model
221
+ (unknown / heard / recognised / trusted / authorised). Irreversible
222
+ actions (force push, branch delete, deploy) ALWAYS require a
223
+ liveness challenge regardless of trust level: a random Spanish/
224
+ English phrase plus a random number you have to read back.
225
+
226
+ - **Document reader.** Open any file in the project root and
227
+ navigate by voice: "abrime el readme", "siguiente", "buscar
228
+ pricing", "marcame aqui como inicio", "volver a marca inicio",
229
+ "recap". Supports **10 formats**: txt, md, source code (.ts / .py
230
+ / .rs / 80+ extensions), HTML, RTF, CSV/TSV, EPUB, **PDF**
231
+ (via pdfjs-dist), **DOCX** (via mammoth), **XLSX** (via sheetjs).
232
+ All format detection happens automatically.
233
+
234
+ - **Spec drag-drop.** Drag a spec file onto the chat panel; an
235
+ overlay appears + the file uploads. Forge parses it through the
236
+ same reader pipeline, then a Claude call extracts structured
237
+ requirements, entities, endpoints, and UI components. A second
238
+ Claude call turns the extraction into a concrete file scaffold
239
+ plan (which files to create + where + what kind + which
240
+ requirement each serves + open questions for clarification).
241
+ Nothing is written until you POST `{approve: true}`. On approve,
242
+ the scaffolder writes the planned files with hand-rolled
243
+ templates per kind (model / api / component / test / doc) and
244
+ records a rollback log -- one click undoes the whole scaffold.
245
+
246
+ - **Reader recap modes.** Default `literal` mode joins recent
247
+ spoken blocks into a TTS-friendly narrative for "que dijiste".
248
+ Optional `summary` mode calls Claude for a 1-2 sentence
249
+ compression; gated by env var `YF_ENABLE_CLAUDE_RECAP=1` so it
250
+ cannot fire by accident and charge tokens. Cost model in
251
+ `docs/RECAP_CLAUDE_COSTS.md`.
252
+
253
+ ### ADIP voice-first demo loop
254
+
255
+ ```
256
+ User: (mic) "abrime el plan.md"
257
+ -> reader.open -> TTS "El Plan"
258
+ User: (mic) "siguiente"
259
+ -> reader.next -> TTS "Primer paso"
260
+ User: (mic) "buscar pricing"
261
+ -> reader.search -> TTS top snippet
262
+ ```
263
+
264
+ Drag a spec PDF onto the panel:
265
+
266
+ ```
267
+ panel -> spec ingested. Title: ADIP Spec. 4 sections.
268
+ First lines:
269
+ - The system MUST register patients.
270
+ - ...
271
+ panel (via Claude)-> extraction: 1 requirement, 1 entity (Paciente),
272
+ 1 endpoint (POST /patients), 1 component
273
+ (PatientCard).
274
+ panel (via Claude)-> plan: src/models/Paciente.ts +
275
+ src/api/patients.ts +
276
+ src/components/PatientCard.tsx + README.md.
277
+ Open question: authentication unspecified.
278
+ user clicks -> approve.
279
+ scaffolder -> 4 files written, rollback log captured.
280
+ ```
281
+
282
+ If anything looks off: one `POST /api/forge/ingest/rollback` and
283
+ the project is back to its prior state.
284
+
285
+ ### Architecture pointer
286
+
287
+ The full step-by-step voice loop, reader pipeline, voiceprint
288
+ state machine, and "how to add a parser / intent / trust class"
289
+ recipes live in [docs/HITO_1_ARCHITECTURE.md](docs/HITO_1_ARCHITECTURE.md).
290
+
291
+ ## Why a separate product
292
+
293
+ NAC (the spec) is Apache-2.0 free forever. The reference runtime
294
+ `nac-spec` on npm is Apache-2.0 free forever. **Yujin Forge is the
295
+ commercial build layer:**
296
+
297
+ - The AI decorator (`--ai-silent` / `--ai-assisted`) burns Anthropic
298
+ tokens on your behalf; the seat license is what funds that.
299
+ - The chat panel, React scaffolder, test corpus generator, and mock
300
+ generator are all license-gated.
301
+ - The static-rule HTML walker (`--html`, `--assisted`) is open and
302
+ works offline.
303
+
304
+ The Apache spec attracts the ecosystem; Forge monetises the delivery
305
+ experience for teams that want to skip the per-app plumbing.
306
+
307
+ ## What Forge gives an app (under the hood)
308
+
309
+ Every decorated output ships:
310
+
311
+ 1. `index.html` -- decorated, drop-in NAC3-ready
312
+ 2. `manifest.json` -- the NAC3 manifest, version-pinnable
313
+ 3. `nac.browser.js` -- the NAC3 runtime (copied locally, no CDN dep)
314
+ 4. `nac-bridge.js` -- ~50 lines, wires `NAC.bindAction` for every
315
+ action element so the host's existing handlers stay intact AND the
316
+ contract events fire
317
+ 5. **With `--with-pilot`:** `pilot.bundle.js` + `pilot.css` -- the
318
+ embedded chat + voice cockpit
319
+
320
+ After running Forge, your app is ready to be driven by any LLM agent
321
+ that understands NAC-3. Pilot is one such driver; the
322
+ [600-run benchmark](https://yujin.app/nac-spec/benchmark/) was driven
323
+ by a custom harness; the React SDK in
324
+ [`@yujin/nac-react`](https://www.npmjs.com/package/nac-spec) is
325
+ another.
326
+
327
+ ## Where this lives in the Yujin ecosystem
328
+
329
+ ```
330
+ NAC (Apache-2.0) -- pkuschnirof/rpaforce-crm + yujin.app/nac-spec
331
+ spec + reference runtime + nac-spec NPM package
332
+ |
333
+ | depends on
334
+ v
335
+ Yujin Forge (closed core) -- yujinapp/yujin-forge (build NAC apps)
336
+ AI decorator, React scaffolder, license gating, this repo
337
+ | sibling product
338
+ v
339
+ Yujin Pilot (closed core) -- yujinapp/yujin-pilot (drive NAC apps)
340
+ Embedded chat + voice + multi-model cockpit
341
+ |
342
+ | downstream adopter
343
+ v
344
+ Customer apps
345
+ ```
346
+
347
+ ## Documentation
348
+
349
+ - [README.md](README.md) -- this file
350
+ - [PROJECT.md](PROJECT.md) -- topology + governance + slice/HITO process (mandatory read before touching code)
351
+ - [docs/SQ.md](docs/SQ.md) -- quality standards + deliverables + pre-development checklist (Spanish, mandatory)
352
+ - [docs/QUICKSTART_ADIP.md](docs/QUICKSTART_ADIP.md) -- step-by-step setup guide for the ADIP institutional rollout (Spanish)
353
+ - [docs/USAGE.md](docs/USAGE.md) -- every command + flag + worked examples
354
+ - [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) -- internals of the AI decorator + wiring + Pilot integration
355
+ - [docs/HITO_1_ARCHITECTURE.md](docs/HITO_1_ARCHITECTURE.md) -- HITO 1 voice + reader + spec ingest reference
356
+ - [docs/LANGUAGE_POLICY.md](docs/LANGUAGE_POLICY.md) -- the 10-canonical-languages rule + catalog-lint mechanism
357
+ - [docs/manuals/manual.es.html](docs/manuals/manual.es.html) -- end-user manual (10 languages: es/en/pt/fr/ja/zh/hi/ar/de/it)
358
+ - [docs/RECAP_CLAUDE_COSTS.md](docs/RECAP_CLAUDE_COSTS.md) -- cost model + lock mechanism for the Claude recap mode
359
+ - [docs/ROADMAP_VOICE_FORGE_2026_05_23.md](docs/ROADMAP_VOICE_FORGE_2026_05_23.md) -- HITO 0/1/2/3 roadmap with decisions taken
360
+ - [docs/TECHNICAL_MANUAL.md](docs/TECHNICAL_MANUAL.md) -- living manual updated at each slice close
361
+ - [docs/SPEC.md](docs/SPEC.md) -- the contract Forge makes with adopting teams
362
+ - [docs/COMMERCIAL_PLAN.md](docs/COMMERCIAL_PLAN.md) -- pricing + licensing model
363
+ - [docs/SESSION_HANDOFF_2026_05_23_AT_DOCTOR.md](docs/SESSION_HANDOFF_2026_05_23_AT_DOCTOR.md) -- state at last session boundary
364
+
365
+ ## See also
366
+
367
+ - [NAC spec](https://yujin.app/nac-spec/SPEC.html)
368
+ - [NAC3 v2.3 benchmark](https://yujin.app/nac-spec/benchmark/) -- 600 runs across 5 models + 3 protocols
369
+ - [Migration paper](https://yujin.app/nac-spec/migration/) -- Forge silent vs assisted vs Sumi manual on a calculator
370
+ - [Yujin Pilot](https://github.com/yujinapp/yujin-pilot) -- the sibling driver product
371
+ - [Yujin CRM](https://github.com/pkuschnirof/rpaforce-crm) -- the first adopter of the full stack
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ import 'dotenv/config';
3
+ import { Command } from 'commander';
4
+ export declare function buildProgram(): Command;
5
+ //# sourceMappingURL=yf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yf.d.ts","sourceRoot":"","sources":["../../src/bin/yf.ts"],"names":[],"mappings":";AAUA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2BpC,wBAAgB,YAAY,IAAI,OAAO,CAmCtC"}
package/dist/bin/yf.js ADDED
@@ -0,0 +1,86 @@
1
+ #!/usr/bin/env node
2
+ /*
3
+ * Yujin Forge CLI -- entry point.
4
+ *
5
+ * Each command lives in src/commands/<verb>.ts and exports a
6
+ * `register(program)` function that attaches itself to the
7
+ * Commander program. The entry point is intentionally thin so
8
+ * tests can load individual commands without bootstrapping the
9
+ * whole CLI.
10
+ */
11
+ import 'dotenv/config';
12
+ import { Command } from 'commander';
13
+ import { registerNewCommand } from '../commands/new.js';
14
+ import { registerMigrateCommand } from '../commands/migrate.js';
15
+ import { registerChatCommand } from '../commands/chat.js';
16
+ import { registerTestCommand } from '../commands/test.js';
17
+ import { registerShipCommand } from '../commands/ship.js';
18
+ import { registerLicenseCommand } from '../commands/license.js';
19
+ import { registerDoctorCommand } from '../commands/doctor.js';
20
+ import { registerValidateCommand } from '../commands/validate.js';
21
+ import { registerPilotCommand } from '../commands/pilot.js';
22
+ import { registerGenTestsCommand } from '../commands/gen-tests.js';
23
+ import { registerGenFlowTestsCommand } from '../commands/gen-flow-tests.js';
24
+ import { registerFigmaCommand } from '../commands/figma.js';
25
+ import { registerVaultCommand } from '../commands/vault.js';
26
+ import { registerScenariosCommand } from '../commands/scenarios.js';
27
+ import { registerReviewScreensCommand } from '../commands/review-screens.js';
28
+ import { registerPublishCommand } from '../commands/publish.js';
29
+ import { registerProjectsCommand } from '../commands/projects.js';
30
+ import { registerTunnelCommand } from '../commands/tunnel.js';
31
+ import { registerDeployCommand } from '../commands/deploy.js';
32
+ import { registerAppCommand } from '../commands/app.js';
33
+ import { registerVoiceCommand } from '../commands/voice.js';
34
+ import { registerRepoCommand } from '../commands/repo.js';
35
+ import { registerMobileCommand } from '../commands/mobile.js';
36
+ import { registerLogCommand } from '../commands/log.js';
37
+ import { VERSION } from '../version.js';
38
+ export function buildProgram() {
39
+ const program = new Command();
40
+ program
41
+ .name('yf')
42
+ .description('Yujin Forge -- commercial NAC-3 React development framework.')
43
+ .version(VERSION, '-v, --version', 'print the Forge CLI version')
44
+ .helpOption('-h, --help', 'show help')
45
+ .showHelpAfterError('(run "yf --help" for available commands)');
46
+ registerNewCommand(program);
47
+ registerMigrateCommand(program);
48
+ registerChatCommand(program);
49
+ registerTestCommand(program);
50
+ registerShipCommand(program);
51
+ registerLicenseCommand(program);
52
+ registerDoctorCommand(program);
53
+ registerValidateCommand(program);
54
+ registerPilotCommand(program);
55
+ registerGenTestsCommand(program);
56
+ registerGenFlowTestsCommand(program);
57
+ registerFigmaCommand(program);
58
+ registerVaultCommand(program);
59
+ registerScenariosCommand(program);
60
+ registerReviewScreensCommand(program);
61
+ registerPublishCommand(program);
62
+ registerProjectsCommand(program);
63
+ registerTunnelCommand(program);
64
+ registerDeployCommand(program);
65
+ registerAppCommand(program);
66
+ registerVoiceCommand(program);
67
+ registerRepoCommand(program);
68
+ registerMobileCommand(program);
69
+ registerLogCommand(program);
70
+ return program;
71
+ }
72
+ async function main() {
73
+ const program = buildProgram();
74
+ await program.parseAsync(process.argv);
75
+ }
76
+ // ESM module-detection: only invoke main when executed directly,
77
+ // not when imported by tests.
78
+ const isDirect = import.meta.url === `file://${process.argv[1]}`
79
+ || (process.argv[1] !== undefined && import.meta.url.endsWith('/' + process.argv[1].split(/[/\\]/).pop()));
80
+ if (isDirect) {
81
+ main().catch((err) => {
82
+ console.error(err instanceof Error ? err.message : String(err));
83
+ process.exit(1);
84
+ });
85
+ }
86
+ //# sourceMappingURL=yf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yf.js","sourceRoot":"","sources":["../../src/bin/yf.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ import type { ToolSpec } from './tools.js';
2
+ export declare class ConfigurationError extends Error {
3
+ constructor(message: string);
4
+ }
5
+ export declare class ClaudeApiError extends Error {
6
+ status: number;
7
+ constructor(message: string, status: number);
8
+ }
9
+ export interface ChatMessage {
10
+ role: 'user' | 'assistant';
11
+ content: string;
12
+ }
13
+ /** One round of tool dispatch recorded for the chat panel's action
14
+ * trace. The caller serialises these into the response so the UI
15
+ * can render the steps Claude took. */
16
+ export interface ToolRound {
17
+ tool: string;
18
+ /** The args block the model emitted. */
19
+ input: Record<string, unknown>;
20
+ /** What runTool returned (passed back to Claude as tool_result). */
21
+ result: unknown;
22
+ /** True when the tool reported a graceful failure. */
23
+ is_error?: boolean;
24
+ /** Anthropic-side id, kept so the audit can match assistant
25
+ blocks against the corresponding tool_result. */
26
+ tool_use_id: string;
27
+ }
28
+ export interface ClaudeChatRequest {
29
+ /** Conversation history, oldest first. Tool turns are not part
30
+ of this -- the loop manages them internally. */
31
+ messages: ChatMessage[];
32
+ /** System prompt. */
33
+ system?: string;
34
+ /** Hard cap on output tokens per round. */
35
+ maxTokens?: number;
36
+ /** Override the default model. */
37
+ model?: string;
38
+ /** Tool catalog the model can call. When present, the response
39
+ may contain tool_use blocks that this client dispatches
40
+ automatically. */
41
+ tools?: ToolSpec[];
42
+ /** Callback the client invokes when the model emits a tool_use.
43
+ Required when `tools` is set. */
44
+ runTool?: (name: string, input: Record<string, unknown>) => Promise<{
45
+ result: unknown;
46
+ is_error?: boolean;
47
+ }>;
48
+ /** Maximum tool-use loop iterations. Default 5. Stops with a
49
+ `tool_loop_exhausted` ClaudeApiError when reached. */
50
+ maxToolRounds?: number;
51
+ }
52
+ export interface ClaudeChatResponse {
53
+ text: string;
54
+ tokensIn: number;
55
+ tokensOut: number;
56
+ model: string;
57
+ /** Per-round audit of tool dispatches. Empty when no tools were
58
+ provided or the model did not call any. */
59
+ toolRounds: ToolRound[];
60
+ }
61
+ export interface ClaudeClientOptions {
62
+ apiKey?: string;
63
+ /** Default model. */
64
+ defaultModel?: string;
65
+ /** Test injection for fetch (Node 18+ has global fetch). */
66
+ fetchImpl?: typeof fetch;
67
+ }
68
+ /**
69
+ * Resolve the Anthropic API key.
70
+ *
71
+ * Priority order (first match wins):
72
+ * 1. Explicitly injected key (test seam).
73
+ * 2. Vault slot `anthropic` -- the canonical path going
74
+ * forward.
75
+ * 3. process.env.YUJIN_ANTHROPIC_API_KEY -- legacy env var.
76
+ * 4. process.env.ANTHROPIC_API_KEY -- standard Anthropic env.
77
+ * 5. ~/.yujin-forge/api-key.txt -- legacy file path.
78
+ *
79
+ * Throws ConfigurationError when nothing is found. The error
80
+ * message lists all the options so the user has a single place
81
+ * to read where to put the key.
82
+ *
83
+ * The vault check is short-circuiting: if the slot exists, the
84
+ * env vars and the file are ignored. This makes vault-configured
85
+ * setups deterministic and unaffected by stray env vars.
86
+ *
87
+ * The other three paths stay as back-compat for existing users
88
+ * who already configured Forge via env or file before V0.4
89
+ * landed. They are NOT deprecated -- they keep working
90
+ * indefinitely. The vault is just the recommended path.
91
+ */
92
+ export declare function resolveApiKey(injected?: string): Promise<string>;
93
+ export declare class ClaudeClient {
94
+ private apiKey;
95
+ private fetchImpl;
96
+ private defaultModel;
97
+ constructor(opts?: ClaudeClientOptions);
98
+ chat(req: ClaudeChatRequest): Promise<ClaudeChatResponse>;
99
+ }
100
+ //# sourceMappingURL=claude.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/chat/claude.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,cAAe,SAAQ,KAAK;IACvC,MAAM,EAAE,MAAM,CAAC;gBACH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAK5C;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;wCAEwC;AACxC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,oEAAoE;IACpE,MAAM,EAAE,OAAO,CAAC;IAChB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;wDACoD;IACpD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC;uDACmD;IACnD,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,qBAAqB;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;yBAEqB;IACrB,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB;wCACoC;IACpC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;QAClE,MAAM,EAAE,OAAO,CAAC;QAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC,CAAC;IACH;6DACyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd;kDAC8C;IAC9C,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuCtE;AAmBD,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,YAAY,CAAS;gBAEjB,IAAI,GAAE,mBAAwB;IAMpC,IAAI,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAuHhE"}