@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,42 @@
1
+ /**
2
+ * Yujin Forge -- plugin scope inference.
3
+ *
4
+ * A NAC-3 manifest groups elements under a `data-nac-plugin` root.
5
+ * When auto-decorating an undecorated HTML page, the walker needs to
6
+ * decide which ancestor element to declare as the plugin root for
7
+ * each candidate.
8
+ *
9
+ * Strategy (cheap-to-expensive):
10
+ * 1. Existing root: if an ancestor already carries data-nac-plugin,
11
+ * inherit it. No new root.
12
+ * 2. Semantic landmark: <main>, <section id=...>, <aside id=...>,
13
+ * <nav id=...> with a non-trivial id are strong root candidates.
14
+ * 3. Document-stem fallback: if no landmark exists, the whole
15
+ * <body> becomes the plugin root with slug derived from the
16
+ * page path or title.
17
+ *
18
+ * Per-page output: a set of root assignments + their proposed slugs.
19
+ *
20
+ * ASCII-only.
21
+ */
22
+ import type { HTMLElement } from 'node-html-parser';
23
+ export interface PluginRoot {
24
+ el: HTMLElement;
25
+ slug: string;
26
+ source: 'existing' | 'landmark' | 'fallback';
27
+ confidence: number;
28
+ }
29
+ /**
30
+ * Find or propose the plugin root for an element. Walks ancestors.
31
+ */
32
+ export declare function resolvePluginRoot(el: HTMLElement, pageSlug: string): PluginRoot;
33
+ /**
34
+ * Derive a default page slug from a path. Used as the fallback
35
+ * plugin slug.
36
+ *
37
+ * 'pages/invoice.tsx' -> 'pages_invoice'
38
+ * 'src/index.html' -> 'index'
39
+ * 'public/dashboard.html' -> 'public_dashboard'
40
+ */
41
+ export declare function derivePageSlug(filePath: string): string;
42
+ //# sourceMappingURL=plugin-scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-scope.d.ts","sourceRoot":"","sources":["../../src/migrate/plugin-scope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,WAAW,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;IAC7C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,WAAW,EACf,QAAQ,EAAE,MAAM,GACf,UAAU,CAsCZ;AAYD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAWvD"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Yujin Forge -- plugin scope inference.
3
+ *
4
+ * A NAC-3 manifest groups elements under a `data-nac-plugin` root.
5
+ * When auto-decorating an undecorated HTML page, the walker needs to
6
+ * decide which ancestor element to declare as the plugin root for
7
+ * each candidate.
8
+ *
9
+ * Strategy (cheap-to-expensive):
10
+ * 1. Existing root: if an ancestor already carries data-nac-plugin,
11
+ * inherit it. No new root.
12
+ * 2. Semantic landmark: <main>, <section id=...>, <aside id=...>,
13
+ * <nav id=...> with a non-trivial id are strong root candidates.
14
+ * 3. Document-stem fallback: if no landmark exists, the whole
15
+ * <body> becomes the plugin root with slug derived from the
16
+ * page path or title.
17
+ *
18
+ * Per-page output: a set of root assignments + their proposed slugs.
19
+ *
20
+ * ASCII-only.
21
+ */
22
+ /**
23
+ * Find or propose the plugin root for an element. Walks ancestors.
24
+ */
25
+ export function resolvePluginRoot(el, pageSlug) {
26
+ /* 1. Existing plugin attribute on any ancestor */
27
+ let cur = el;
28
+ while (cur) {
29
+ const existing = cur.getAttribute('data-nac-plugin');
30
+ if (existing) {
31
+ return { el: cur, slug: existing, source: 'existing', confidence: 1.0 };
32
+ }
33
+ cur = cur.parentNode;
34
+ }
35
+ /* 2. Semantic landmark with id */
36
+ cur = el;
37
+ const landmarkTags = new Set(['main', 'section', 'aside', 'nav', 'article', 'header', 'footer']);
38
+ while (cur) {
39
+ const tag = (cur.tagName || '').toLowerCase();
40
+ if (landmarkTags.has(tag)) {
41
+ const id = cur.getAttribute('id') || '';
42
+ if (id && id.length > 0) {
43
+ return { el: cur, slug: normaliseSlug(id), source: 'landmark', confidence: 0.78 };
44
+ }
45
+ /* No id -- use the tag as a weak landmark IF it is <main>
46
+ (singleton by HTML spec). */
47
+ if (tag === 'main') {
48
+ return { el: cur, slug: pageSlug, source: 'landmark', confidence: 0.65 };
49
+ }
50
+ }
51
+ cur = cur.parentNode;
52
+ }
53
+ /* 3. Fallback: document-stem. Use the body itself. */
54
+ let body = el;
55
+ while (body && (body.tagName || '').toLowerCase() !== 'body') {
56
+ body = body.parentNode;
57
+ }
58
+ if (body) {
59
+ return { el: body, slug: pageSlug, source: 'fallback', confidence: 0.5 };
60
+ }
61
+ /* Last-ditch: return the input as its own root. */
62
+ return { el, slug: pageSlug, source: 'fallback', confidence: 0.3 };
63
+ }
64
+ /** Make a slug agent-friendly: lowercase, [a-z0-9_], no leading digit. */
65
+ function normaliseSlug(raw) {
66
+ const cleaned = raw
67
+ .toLowerCase()
68
+ .replace(/[^a-z0-9]+/g, '_')
69
+ .replace(/^_+|_+$/g, '');
70
+ if (/^[0-9]/.test(cleaned))
71
+ return 'p_' + cleaned;
72
+ return cleaned || 'plugin';
73
+ }
74
+ /**
75
+ * Derive a default page slug from a path. Used as the fallback
76
+ * plugin slug.
77
+ *
78
+ * 'pages/invoice.tsx' -> 'pages_invoice'
79
+ * 'src/index.html' -> 'index'
80
+ * 'public/dashboard.html' -> 'public_dashboard'
81
+ */
82
+ export function derivePageSlug(filePath) {
83
+ const noExt = filePath.replace(/\.(tsx?|jsx?|html?)$/i, '');
84
+ const cleaned = noExt
85
+ .replace(/^[\\/]+/, '')
86
+ .replace(/^src[\\/]/, '')
87
+ .replace(/^public[\\/]/, '')
88
+ .toLowerCase()
89
+ .replace(/[\\/]+/g, '_')
90
+ .replace(/[^a-z0-9_]+/g, '_')
91
+ .replace(/^_+|_+$/g, '');
92
+ return cleaned || 'page';
93
+ }
94
+ //# sourceMappingURL=plugin-scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-scope.js","sourceRoot":"","sources":["../../src/migrate/plugin-scope.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Yujin Forge -- migration types.
3
+ *
4
+ * AuditReport is the JSON shape emitted by `yf migrate --audit`.
5
+ * Stable across versions: the apply step (later milestone) reads
6
+ * the same structure and renders diffs against it.
7
+ */
8
+ export type CandidateKind = 'action' | 'field' | 'region';
9
+ export interface Candidate {
10
+ /** Path relative to the project root, posix-style. */
11
+ file: string;
12
+ /** 1-based line number where the JSX element opens. */
13
+ line: number;
14
+ /** Role NAC-3 would assign. */
15
+ kind: CandidateKind;
16
+ /** Tag name (e.g. 'button', 'input', 'a'). */
17
+ element: string;
18
+ /** Suggested data-nac-id, derived from file path + role. */
19
+ proposed_id: string;
20
+ /**
21
+ * True when the element already carries a data-nac-id attribute.
22
+ * The audit lists these so the apply step knows what to skip.
23
+ */
24
+ already_tagged: boolean;
25
+ }
26
+ export interface AuditSummary {
27
+ actions: number;
28
+ fields: number;
29
+ regions: number;
30
+ already_tagged: number;
31
+ total: number;
32
+ }
33
+ export interface AuditReport {
34
+ /** Scan timestamp. */
35
+ generated_at: string;
36
+ /** Project root, absolute path. */
37
+ project_root: string;
38
+ /** How many .tsx/.jsx files were walked. */
39
+ scanned_files: number;
40
+ /** Per-file candidate counts. */
41
+ candidates: Candidate[];
42
+ /** Aggregate counters. */
43
+ summary: AuditSummary;
44
+ }
45
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/migrate/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE1D,MAAM,WAAW,SAAS;IACxB,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,IAAI,EAAE,aAAa,CAAC;IACpB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAS,MAAM,CAAC;IACvB,MAAM,EAAU,MAAM,CAAC;IACvB,OAAO,EAAS,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAW,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,sBAAsB;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,0BAA0B;IAC1B,OAAO,EAAE,YAAY,CAAC;CACvB"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Yujin Forge -- migration types.
3
+ *
4
+ * AuditReport is the JSON shape emitted by `yf migrate --audit`.
5
+ * Stable across versions: the apply step (later milestone) reads
6
+ * the same structure and renders diffs against it.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/migrate/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Yujin Forge -- verb inference pipeline (L1-L5, no AI).
3
+ *
4
+ * Classifies a candidate DOM element into the canonical NAC verb
5
+ * vocabulary (save, cancel, delete, edit, approve, reject, send,
6
+ * download, upload, refresh, add, remove, expand, collapse, open,
7
+ * close, etc.) using a layered cascade of cheap signals.
8
+ *
9
+ * Layers in priority order (first hit wins):
10
+ * L1 semantic HTML <input type="submit">, <button type="reset">
11
+ * L2 ARIA role + aria-label + aria-pressed
12
+ * L3 text + verb dict visible text matched against multi-locale verbs
13
+ * L4 class names + data .btn-delete, data-action="approve"
14
+ * L5 structural position confirm-dialog descendants imply confirm/reject
15
+ *
16
+ * Each layer returns { verb, confidence } where confidence in [0, 1].
17
+ * The pipeline keeps the strongest signal; layers below ~0.55 surface
18
+ * the element as "needs-review" for the assisted walker UI.
19
+ *
20
+ * ASCII-only.
21
+ */
22
+ import type { HTMLElement } from 'node-html-parser';
23
+ export type Verb = 'save' | 'cancel' | 'submit' | 'reset' | 'delete' | 'remove' | 'add' | 'create' | 'edit' | 'approve' | 'reject' | 'confirm' | 'send' | 'download' | 'upload' | 'refresh' | 'reload' | 'open' | 'close' | 'expand' | 'collapse' | 'next' | 'prev' | 'first' | 'last' | 'search' | 'filter' | 'sort' | 'reorder' | 'login' | 'logout' | 'signup' | 'print' | 'export' | 'import' | 'copy' | 'paste' | 'select' | 'unselect' | 'toggle' | 'navigate' | 'back' | 'forward' | 'home' | 'play' | 'pause' | 'stop' | 'record' | 'unknown';
24
+ export interface VerbHit {
25
+ verb: Verb;
26
+ confidence: number;
27
+ layer: 'L1' | 'L2' | 'L3' | 'L4' | 'L5';
28
+ signal: string;
29
+ }
30
+ /**
31
+ * Run the L1-L5 cascade against an element. Returns the strongest
32
+ * verb hit (highest confidence) or `null` if no signal is strong
33
+ * enough to be reportable.
34
+ */
35
+ export declare function inferVerb(el: HTMLElement): VerbHit | null;
36
+ export declare function isVerbLowConfidence(hit: VerbHit | null, threshold?: number): boolean;
37
+ //# sourceMappingURL=verb-inference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verb-inference.d.ts","sourceRoot":"","sources":["../../src/migrate/verb-inference.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,MAAM,IAAI,GACZ,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GACtC,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAC/C,SAAS,GAAG,QAAQ,GAAG,SAAS,GAChC,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GACrD,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GACxC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAClC,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GACxC,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAC7B,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAChD,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAChC,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GACxC,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GACpC,SAAS,CAAC;AAEd,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,IAAI,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;CAChB;AAsOD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,GAAG,IAAI,CASzD;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,EAAE,SAAS,SAAM,GAAG,OAAO,CAGjF"}
@@ -0,0 +1,274 @@
1
+ /**
2
+ * Yujin Forge -- verb inference pipeline (L1-L5, no AI).
3
+ *
4
+ * Classifies a candidate DOM element into the canonical NAC verb
5
+ * vocabulary (save, cancel, delete, edit, approve, reject, send,
6
+ * download, upload, refresh, add, remove, expand, collapse, open,
7
+ * close, etc.) using a layered cascade of cheap signals.
8
+ *
9
+ * Layers in priority order (first hit wins):
10
+ * L1 semantic HTML <input type="submit">, <button type="reset">
11
+ * L2 ARIA role + aria-label + aria-pressed
12
+ * L3 text + verb dict visible text matched against multi-locale verbs
13
+ * L4 class names + data .btn-delete, data-action="approve"
14
+ * L5 structural position confirm-dialog descendants imply confirm/reject
15
+ *
16
+ * Each layer returns { verb, confidence } where confidence in [0, 1].
17
+ * The pipeline keeps the strongest signal; layers below ~0.55 surface
18
+ * the element as "needs-review" for the assisted walker UI.
19
+ *
20
+ * ASCII-only.
21
+ */
22
+ /* ---- L3 verb dictionary: text snippets in multiple locales ---- */
23
+ /* Keys are normalised lowercase, no diacritics. The matcher does the
24
+ normalisation on the input side. Add entries here freely; the
25
+ dictionary is the canonical bridge between human language + NAC
26
+ verbs. */
27
+ const VERB_DICT = {
28
+ // Save / Submit
29
+ 'save': 'save', 'guardar': 'save', 'salvar': 'save', 'speichern': 'save',
30
+ 'salva': 'save', 'sauvegarder': 'save', 'enregistrer': 'save',
31
+ '保存': 'save', '保存する': 'save',
32
+ 'submit': 'submit', 'enviar': 'submit', 'envoyer': 'submit', 'absenden': 'submit',
33
+ // Cancel
34
+ 'cancel': 'cancel', 'cancelar': 'cancel', 'cancellare': 'cancel',
35
+ 'annuler': 'cancel', 'abbrechen': 'cancel', 'cancela': 'cancel',
36
+ 'キャンセル': 'cancel',
37
+ // Reset
38
+ 'reset': 'reset', 'restablecer': 'reset', 'reiniciar': 'reset',
39
+ 'reinitialiser': 'reset', 'zuruecksetzen': 'reset',
40
+ // Delete / Remove
41
+ 'delete': 'delete', 'eliminar': 'delete', 'borrar': 'delete', 'suprimir': 'delete',
42
+ 'loeschen': 'delete', 'supprimer': 'delete', 'eliminare': 'delete',
43
+ '削除': 'delete', '削除する': 'delete',
44
+ 'remove': 'remove', 'quitar': 'remove', 'remover': 'remove', 'rimuovere': 'remove',
45
+ 'entfernen': 'remove', 'retirer': 'remove',
46
+ // Add / Create
47
+ 'add': 'add', 'agregar': 'add', 'aniadir': 'add', 'anadir': 'add',
48
+ 'aggiungere': 'add', 'hinzufuegen': 'add', 'ajouter': 'add',
49
+ '追加': 'add', '追加する': 'add',
50
+ 'create': 'create', 'crear': 'create', 'creare': 'create',
51
+ 'erstellen': 'create', 'creer': 'create',
52
+ '作成': 'create', '作る': 'create',
53
+ // Edit
54
+ 'edit': 'edit', 'editar': 'edit', 'modificar': 'edit', 'editare': 'edit',
55
+ 'bearbeiten': 'edit', 'modifier': 'edit', 'editer': 'edit',
56
+ '編集': 'edit', '編集する': 'edit',
57
+ // Approve / Confirm / Reject
58
+ 'approve': 'approve', 'aprobar': 'approve', 'approvare': 'approve',
59
+ 'genehmigen': 'approve', 'approuver': 'approve',
60
+ '承認': 'approve',
61
+ 'confirm': 'confirm', 'confirmar': 'confirm', 'confermare': 'confirm',
62
+ 'bestaetigen': 'confirm', 'confirmer': 'confirm',
63
+ 'si': 'confirm', 'yes': 'confirm', 'ok': 'confirm', 'oui': 'confirm', 'ja': 'confirm',
64
+ '確認': 'confirm', 'はい': 'confirm',
65
+ 'reject': 'reject', 'rechazar': 'reject', 'rifiutare': 'reject',
66
+ 'ablehnen': 'reject', 'rejeter': 'reject',
67
+ 'no': 'reject', 'non': 'reject', 'nein': 'reject',
68
+ // Send
69
+ 'send': 'send', 'enviar mensaje': 'send', 'inviare': 'send',
70
+ 'senden': 'send',
71
+ // Download / Upload
72
+ 'download': 'download', 'descargar': 'download', 'scaricare': 'download',
73
+ 'herunterladen': 'download', 'telecharger': 'download',
74
+ 'upload': 'upload', 'subir': 'upload', 'caricare': 'upload',
75
+ 'hochladen': 'upload', 'televerser': 'upload',
76
+ // Refresh / Reload
77
+ 'refresh': 'refresh', 'actualizar': 'refresh', 'aggiornare': 'refresh',
78
+ 'aktualisieren': 'refresh', 'actualiser': 'refresh',
79
+ 'reload': 'reload', 'recargar': 'reload', 'ricaricare': 'reload',
80
+ 'neu laden': 'reload', 'recharger': 'reload',
81
+ // Open / Close
82
+ 'open': 'open', 'abrir': 'open', 'aprire': 'open', 'oeffnen': 'open',
83
+ 'ouvrir': 'open',
84
+ 'close': 'close', 'cerrar': 'close', 'chiudere': 'close', 'schliessen': 'close',
85
+ 'fermer': 'close',
86
+ // Expand / Collapse
87
+ 'expand': 'expand', 'expandir': 'expand', 'espandere': 'expand',
88
+ 'erweitern': 'expand', 'developper': 'expand',
89
+ 'collapse': 'collapse', 'colapsar': 'collapse', 'contrarre': 'collapse',
90
+ 'einklappen': 'collapse', 'reduire': 'collapse',
91
+ // Navigation
92
+ 'next': 'next', 'siguiente': 'next', 'successivo': 'next', 'weiter': 'next',
93
+ 'suivant': 'next',
94
+ 'prev': 'prev', 'previous': 'prev', 'anterior': 'prev', 'precedente': 'prev',
95
+ 'zurueck': 'prev', 'precedent': 'prev',
96
+ 'back': 'back', 'volver': 'back', 'tornare': 'back', 'retour': 'back',
97
+ 'home': 'home', 'inicio': 'home', 'casa': 'home', 'startseite': 'home',
98
+ 'accueil': 'home',
99
+ // Search / Filter / Sort
100
+ 'search': 'search', 'buscar': 'search', 'cercare': 'search',
101
+ 'suchen': 'search', 'rechercher': 'search',
102
+ 'filter': 'filter', 'filtrar': 'filter', 'filtrare': 'filter',
103
+ 'filtern': 'filter', 'filtrer': 'filter',
104
+ 'sort': 'sort', 'ordenar': 'sort', 'ordinare': 'sort',
105
+ 'sortieren': 'sort', 'trier': 'sort',
106
+ // Login / Logout
107
+ 'login': 'login', 'iniciar sesion': 'login', 'accedere': 'login',
108
+ 'anmelden': 'login', 'se connecter': 'login',
109
+ 'logout': 'logout', 'cerrar sesion': 'logout', 'uscire': 'logout',
110
+ 'abmelden': 'logout', 'se deconnecter': 'logout',
111
+ 'sign in': 'login', 'sign out': 'logout', 'sign up': 'signup',
112
+ // Other
113
+ 'print': 'print', 'imprimir': 'print', 'stampare': 'print',
114
+ 'drucken': 'print', 'imprimer': 'print',
115
+ 'export': 'export', 'exportar': 'export', 'esportare': 'export',
116
+ 'exportieren': 'export', 'exporter': 'export',
117
+ 'import': 'import', 'importar': 'import', 'importare': 'import',
118
+ 'importieren': 'import', 'importer': 'import',
119
+ 'copy': 'copy', 'copiar': 'copy', 'copiare': 'copy', 'kopieren': 'copy', 'copier': 'copy',
120
+ };
121
+ /* ---- helpers ---- */
122
+ function normaliseText(s) {
123
+ if (!s)
124
+ return '';
125
+ return s
126
+ .normalize('NFD')
127
+ .replace(/[̀-ͯ]/g, '') // strip diacritics
128
+ .toLowerCase()
129
+ .replace(/[^a-z0-9一-鿿぀-ヿ\s]/g, ' ')
130
+ .replace(/\s+/g, ' ')
131
+ .trim();
132
+ }
133
+ function attr(el, name) {
134
+ return el.getAttribute(name) || '';
135
+ }
136
+ /* ---- L1: semantic HTML ---- */
137
+ function inferL1(el) {
138
+ const tag = (el.tagName || '').toLowerCase();
139
+ if (tag === 'input') {
140
+ const type = attr(el, 'type').toLowerCase();
141
+ if (type === 'submit')
142
+ return { verb: 'submit', confidence: 0.95, layer: 'L1', signal: '<input type="submit">' };
143
+ if (type === 'reset')
144
+ return { verb: 'reset', confidence: 0.95, layer: 'L1', signal: '<input type="reset">' };
145
+ if (type === 'button') {
146
+ // fall through -- need text/aria to disambiguate
147
+ }
148
+ }
149
+ if (tag === 'button' && attr(el, 'type').toLowerCase() === 'submit') {
150
+ return { verb: 'submit', confidence: 0.92, layer: 'L1', signal: '<button type="submit">' };
151
+ }
152
+ if (tag === 'button' && attr(el, 'type').toLowerCase() === 'reset') {
153
+ return { verb: 'reset', confidence: 0.92, layer: 'L1', signal: '<button type="reset">' };
154
+ }
155
+ return null;
156
+ }
157
+ /* ---- L2: ARIA ---- */
158
+ function inferL2(el) {
159
+ const ariaLabel = attr(el, 'aria-label');
160
+ if (ariaLabel) {
161
+ const fromDict = lookupInDict(ariaLabel);
162
+ if (fromDict) {
163
+ return { verb: fromDict.verb, confidence: 0.88, layer: 'L2', signal: 'aria-label: ' + ariaLabel };
164
+ }
165
+ }
166
+ const role = attr(el, 'role').toLowerCase();
167
+ if (role === 'switch' || role === 'checkbox') {
168
+ return { verb: 'toggle', confidence: 0.82, layer: 'L2', signal: 'role=' + role };
169
+ }
170
+ return null;
171
+ }
172
+ /* ---- L3: visible text + verb dictionary ---- */
173
+ function inferL3(el) {
174
+ const text = (el.text || '').trim();
175
+ if (!text)
176
+ return null;
177
+ const lookup = lookupInDict(text);
178
+ if (lookup) {
179
+ /* short texts (one-or-two word labels) are typically command
180
+ buttons; long texts are paragraphs and the matched verb may be
181
+ incidental. Discount confidence proportionally. */
182
+ const wordCount = text.split(/\s+/).length;
183
+ const conf = wordCount <= 3 ? 0.78 : Math.max(0.55, 0.78 - (wordCount - 3) * 0.04);
184
+ return { verb: lookup.verb, confidence: conf, layer: 'L3', signal: 'text: "' + text.slice(0, 40) + '"' };
185
+ }
186
+ return null;
187
+ }
188
+ function lookupInDict(s) {
189
+ const n = normaliseText(s);
190
+ if (!n)
191
+ return null;
192
+ if (VERB_DICT[n])
193
+ return { verb: VERB_DICT[n] };
194
+ /* word-level: check each word against the dict */
195
+ for (const word of n.split(/\s+/)) {
196
+ if (VERB_DICT[word])
197
+ return { verb: VERB_DICT[word] };
198
+ }
199
+ return null;
200
+ }
201
+ /* ---- L4: class names + data attrs ---- */
202
+ function inferL4(el) {
203
+ const cls = attr(el, 'class').toLowerCase();
204
+ const dataAction = attr(el, 'data-action').toLowerCase();
205
+ if (dataAction) {
206
+ const lookup = lookupInDict(dataAction);
207
+ if (lookup)
208
+ return { verb: lookup.verb, confidence: 0.72, layer: 'L4', signal: 'data-action=' + dataAction };
209
+ }
210
+ /* class-name conventions: .btn-delete, .save-btn, .cancel-action */
211
+ const patterns = [
212
+ [/\b(btn|action)?-?delete\b|\bdelete-?(btn|action)\b/, 'delete'],
213
+ [/\b(btn|action)?-?remove\b|\bremove-?(btn|action)\b/, 'remove'],
214
+ [/\b(btn|action)?-?save\b|\bsave-?(btn|action)\b/, 'save'],
215
+ [/\b(btn|action)?-?cancel\b|\bcancel-?(btn|action)\b/, 'cancel'],
216
+ [/\b(btn|action)?-?add\b|\badd-?(btn|action|row)\b/, 'add'],
217
+ [/\b(btn|action)?-?edit\b|\bedit-?(btn|action)\b/, 'edit'],
218
+ [/\b(btn|action)?-?close\b|\bclose-?(btn|action)\b/, 'close'],
219
+ [/\b(btn|action)?-?confirm\b/, 'confirm'],
220
+ [/\bcta-?danger\b/, 'delete'], // common convention
221
+ ];
222
+ for (const [re, verb] of patterns) {
223
+ if (re.test(cls))
224
+ return { verb, confidence: 0.68, layer: 'L4', signal: 'class: ' + cls.split(/\s+/).find(c => re.test(c)) };
225
+ }
226
+ return null;
227
+ }
228
+ /* ---- L5: structural position ---- */
229
+ function inferL5(el) {
230
+ /* Inside a confirm-dialog ancestor, the two buttons typically map
231
+ to confirm + reject. Disambiguate by `cta-danger` or `primary`
232
+ class or by position (last button often = confirm). */
233
+ let cur = el.parentNode;
234
+ let inDialog = false;
235
+ while (cur) {
236
+ const role = attr(cur, 'role').toLowerCase();
237
+ if (role === 'dialog' || role === 'alertdialog') {
238
+ inDialog = true;
239
+ break;
240
+ }
241
+ cur = cur.parentNode;
242
+ }
243
+ if (!inDialog)
244
+ return null;
245
+ const cls = attr(el, 'class').toLowerCase();
246
+ if (/danger|primary|cta-confirm/.test(cls)) {
247
+ return { verb: 'confirm', confidence: 0.62, layer: 'L5', signal: 'inside dialog, class=primary/danger' };
248
+ }
249
+ return { verb: 'reject', confidence: 0.55, layer: 'L5', signal: 'inside dialog, secondary button' };
250
+ }
251
+ /* ---- public API ---- */
252
+ /**
253
+ * Run the L1-L5 cascade against an element. Returns the strongest
254
+ * verb hit (highest confidence) or `null` if no signal is strong
255
+ * enough to be reportable.
256
+ */
257
+ export function inferVerb(el) {
258
+ const hits = [];
259
+ for (const fn of [inferL1, inferL2, inferL3, inferL4, inferL5]) {
260
+ const h = fn(el);
261
+ if (h)
262
+ hits.push(h);
263
+ }
264
+ if (hits.length === 0)
265
+ return null;
266
+ hits.sort((a, b) => b.confidence - a.confidence);
267
+ return hits[0] ?? null;
268
+ }
269
+ export function isVerbLowConfidence(hit, threshold = 0.7) {
270
+ if (!hit)
271
+ return true;
272
+ return hit.confidence < threshold;
273
+ }
274
+ //# sourceMappingURL=verb-inference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verb-inference.js","sourceRoot":"","sources":["../../src/migrate/verb-inference.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * NAC-3 cross-target a11y / E2E attribute helper (PLAN sec
3
+ * D2, NAC3.2).
4
+ *
5
+ * Single namespace `yujin.<scenario>.<element>` that maps to
6
+ * either web HTML `data-nac-id` (+ aria-* mirrors) or RN
7
+ * `testID` (+ accessibility* mirrors). The same scenario YAML
8
+ * (NAC3.4) can drive both Playwright and Maestro because the
9
+ * selectors are identical.
10
+ *
11
+ * Public API:
12
+ * nacId('login.submit') -> 'yujin.login.submit'
13
+ * webAttrs(nacId, role?, action?) -> object with data-nac-*
14
+ * rnAttrs(nacId, role?, action?) -> object with testID +
15
+ * accessibility* mirrors
16
+ *
17
+ * On the web side, `webAttrs` returns an object Hugo / React /
18
+ * vanilla can spread into a JSX/HTML element. The helper does
19
+ * NOT emit raw HTML attributes; the caller decides how to
20
+ * apply (e.g. via a string template `data-nac-id="${id}"`).
21
+ *
22
+ * Roles are aligned with WAI-ARIA roles where possible
23
+ * (button, link, navigation, dialog, etc). Actions are
24
+ * verbs that NAC-3 dispatch can interpret (submit, open,
25
+ * close, toggle, navigate, etc).
26
+ *
27
+ * ASCII-only.
28
+ */
29
+ export declare const NAC_ATTR_ID = "data-nac-id";
30
+ export declare const NAC_ATTR_ROLE = "data-nac-role";
31
+ export declare const NAC_ATTR_ACTION = "data-nac-action";
32
+ /**
33
+ * Normalise a NAC ID. Accepts the long form
34
+ * `yujin.scenario.element` or the short `scenario.element`;
35
+ * always returns the long form with the `yujin.` prefix.
36
+ *
37
+ * Validates the shape loudly so callers see typos early.
38
+ */
39
+ export declare function nacId(id: string): string;
40
+ export interface NacOptions {
41
+ /** Optional NAC-3 role -- e.g. button, link, nav, dialog. */
42
+ role?: string;
43
+ /** Optional NAC-3 action verb -- submit, open, close, etc. */
44
+ action?: string;
45
+ /** Optional ARIA label / RN accessibilityLabel. */
46
+ label?: string;
47
+ /** Optional hint (extra context for screen readers). */
48
+ hint?: string;
49
+ }
50
+ /**
51
+ * Build a web attribute object that can be flattened into an
52
+ * HTML element. Example:
53
+ *
54
+ * const a = webAttrs('login.submit', { role: 'button', action: 'submit', label: 'Sign in' });
55
+ * => {
56
+ * 'data-nac-id': 'yujin.login.submit',
57
+ * 'data-nac-role': 'button',
58
+ * 'data-nac-action': 'submit',
59
+ * 'aria-label': 'Sign in',
60
+ * }
61
+ */
62
+ export declare function webAttrs(id: string, opts?: NacOptions): Record<string, string>;
63
+ /**
64
+ * Render a web attribute object as an HTML attribute string,
65
+ * ready to interpolate into a template. Each value is
66
+ * HTML-escaped (the same escapeHtml the panel uses).
67
+ *
68
+ * `<button ${webAttrsHtml('login.submit', {role:'button'})}>`
69
+ * => '<button data-nac-id="yujin.login.submit" data-nac-role="button">'
70
+ */
71
+ export declare function webAttrsHtml(id: string, opts?: NacOptions): string;
72
+ /**
73
+ * Build an RN attribute object. RN uses different prop names
74
+ * for the same concepts:
75
+ *
76
+ * const a = rnAttrs('login.submit', { role: 'button', action: 'submit', label: 'Sign in' });
77
+ * => {
78
+ * testID: 'yujin.login.submit',
79
+ * accessibilityRole: 'button',
80
+ * accessibilityHint: 'submit',
81
+ * accessibilityLabel: 'Sign in',
82
+ * }
83
+ *
84
+ * Spread into the JSX of a `<Pressable>`, `<TextInput>`, etc.
85
+ */
86
+ export declare function rnAttrs(id: string, opts?: NacOptions): Record<string, string>;
87
+ //# sourceMappingURL=attrs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attrs.d.ts","sourceRoot":"","sources":["../../src/nac3/attrs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,eAAO,MAAM,WAAW,gBAAoB,CAAC;AAC7C,eAAO,MAAM,aAAa,kBAAoB,CAAC;AAC/C,eAAO,MAAM,eAAe,oBAAoB,CAAC;AAOjD;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAcxC;AAED,MAAM,WAAW,UAAU;IACzB,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,GAAE,UAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASlF;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,GAAE,UAAe,GAAG,MAAM,CAKtE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,GAAE,UAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQjF"}