@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,134 @@
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
+ /* The set of stable NAC-3 attribute names. */
30
+ export const NAC_ATTR_ID = 'data-nac-id';
31
+ export const NAC_ATTR_ROLE = 'data-nac-role';
32
+ export const NAC_ATTR_ACTION = 'data-nac-action';
33
+ /** NAC-3 IDs follow the shape `yujin.<scenario>.<element>`.
34
+ * Scenarios + elements are lowercase tokens, with hyphens
35
+ * allowed. Dots delimit. The prefix `yujin.` is reserved. */
36
+ const ID_RE = /^[a-z][a-z0-9-]*(\.[a-z0-9][a-z0-9-]*)*$/;
37
+ /**
38
+ * Normalise a NAC ID. Accepts the long form
39
+ * `yujin.scenario.element` or the short `scenario.element`;
40
+ * always returns the long form with the `yujin.` prefix.
41
+ *
42
+ * Validates the shape loudly so callers see typos early.
43
+ */
44
+ export function nacId(id) {
45
+ if (typeof id !== 'string' || id.length === 0) {
46
+ throw new Error('nacId: id must be a non-empty string');
47
+ }
48
+ let canonical = id;
49
+ if (!canonical.startsWith('yujin.'))
50
+ canonical = 'yujin.' + canonical;
51
+ if (!ID_RE.test(canonical)) {
52
+ throw new Error('nacId: invalid id "' + id + '". '
53
+ + 'Must match `yujin.<scenario>.<element>` with lowercase tokens, '
54
+ + 'digits, and hyphens (dot-separated).');
55
+ }
56
+ return canonical;
57
+ }
58
+ /**
59
+ * Build a web attribute object that can be flattened into an
60
+ * HTML element. Example:
61
+ *
62
+ * const a = webAttrs('login.submit', { role: 'button', action: 'submit', label: 'Sign in' });
63
+ * => {
64
+ * 'data-nac-id': 'yujin.login.submit',
65
+ * 'data-nac-role': 'button',
66
+ * 'data-nac-action': 'submit',
67
+ * 'aria-label': 'Sign in',
68
+ * }
69
+ */
70
+ export function webAttrs(id, opts = {}) {
71
+ const out = {
72
+ [NAC_ATTR_ID]: nacId(id),
73
+ };
74
+ if (opts.role)
75
+ out[NAC_ATTR_ROLE] = opts.role;
76
+ if (opts.action)
77
+ out[NAC_ATTR_ACTION] = opts.action;
78
+ if (opts.label)
79
+ out['aria-label'] = opts.label;
80
+ if (opts.hint)
81
+ out['aria-describedby'] = opts.hint;
82
+ return out;
83
+ }
84
+ /**
85
+ * Render a web attribute object as an HTML attribute string,
86
+ * ready to interpolate into a template. Each value is
87
+ * HTML-escaped (the same escapeHtml the panel uses).
88
+ *
89
+ * `<button ${webAttrsHtml('login.submit', {role:'button'})}>`
90
+ * => '<button data-nac-id="yujin.login.submit" data-nac-role="button">'
91
+ */
92
+ export function webAttrsHtml(id, opts = {}) {
93
+ const obj = webAttrs(id, opts);
94
+ return Object.entries(obj)
95
+ .map(([k, v]) => k + '="' + escapeAttr(v) + '"')
96
+ .join(' ');
97
+ }
98
+ /**
99
+ * Build an RN attribute object. RN uses different prop names
100
+ * for the same concepts:
101
+ *
102
+ * const a = rnAttrs('login.submit', { role: 'button', action: 'submit', label: 'Sign in' });
103
+ * => {
104
+ * testID: 'yujin.login.submit',
105
+ * accessibilityRole: 'button',
106
+ * accessibilityHint: 'submit',
107
+ * accessibilityLabel: 'Sign in',
108
+ * }
109
+ *
110
+ * Spread into the JSX of a `<Pressable>`, `<TextInput>`, etc.
111
+ */
112
+ export function rnAttrs(id, opts = {}) {
113
+ const out = {
114
+ testID: nacId(id),
115
+ };
116
+ if (opts.role)
117
+ out.accessibilityRole = opts.role;
118
+ if (opts.action)
119
+ out.accessibilityHint = opts.action;
120
+ if (opts.label)
121
+ out.accessibilityLabel = opts.label;
122
+ return out;
123
+ }
124
+ /** Tight HTML attribute escape (covers " and & + < > for
125
+ * defence-in-depth). Mirrors the escapeHtml used by panel.ts
126
+ * but is local so this module is self-contained. */
127
+ function escapeAttr(s) {
128
+ return String(s)
129
+ .replace(/&/g, '&amp;')
130
+ .replace(/"/g, '&quot;')
131
+ .replace(/</g, '&lt;')
132
+ .replace(/>/g, '&gt;');
133
+ }
134
+ //# sourceMappingURL=attrs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attrs.js","sourceRoot":"","sources":["../../src/nac3/attrs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * NAC-3 cross-runner scenario DSL (PLAN sec D3, NAC3.4).
3
+ *
4
+ * Authored once in `tests/scenarios/*.yujin.yaml`; emitted as
5
+ * 1. Playwright TS specs (web target)
6
+ * 2. Maestro YAML flow files (RN target)
7
+ *
8
+ * The same scenario thus runs against the web panel AND the
9
+ * Forge-generated RN app -- paridad estricta (D11).
10
+ *
11
+ * DSL shape (a Scenario):
12
+ *
13
+ * name: string -- human-readable scenario title
14
+ * url: string? -- web base URL (defaults to env)
15
+ * tags: string[]? -- categories (smoke, regression, ...)
16
+ * stubs: Stub[]? -- network mocks
17
+ * flow: Step[] -- sequential actions
18
+ *
19
+ * Step shapes:
20
+ * { tap: '<nacId>' }
21
+ * { typeText: '...', into: '<nacId>' }
22
+ * { assertVisible: '<nacId>' }
23
+ * { assertHidden: '<nacId>' }
24
+ * { assertText: '...', in: '<nacId>' }
25
+ * { waitMs: 250 }
26
+ * { screenshot: 'scenario-step-name' }
27
+ *
28
+ * Both emitters honour the SAME selector convention:
29
+ * Playwright: page.getByTestId('yujin.<scenario>.<el>') --
30
+ * applies to both data-nac-id and testID
31
+ * without runtime cost (Playwright reads
32
+ * testIdAttribute config which we set to
33
+ * 'data-nac-id' at the spec generator level).
34
+ * Maestro: id: 'yujin.<scenario>.<el>'
35
+ *
36
+ * ASCII-only on the source.
37
+ */
38
+ export interface Stub {
39
+ url: string;
40
+ method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
41
+ status?: number;
42
+ contentType?: string;
43
+ response: unknown;
44
+ }
45
+ export type Step = {
46
+ tap: string;
47
+ } | {
48
+ typeText: string;
49
+ into: string;
50
+ } | {
51
+ assertVisible: string;
52
+ } | {
53
+ assertHidden: string;
54
+ } | {
55
+ assertText: string;
56
+ in: string;
57
+ } | {
58
+ waitMs: number;
59
+ } | {
60
+ screenshot: string;
61
+ };
62
+ export interface Scenario {
63
+ name: string;
64
+ url?: string;
65
+ tags?: readonly string[];
66
+ stubs?: readonly Stub[];
67
+ flow: readonly Step[];
68
+ }
69
+ export declare function emitPlaywright(scenario: Scenario): string;
70
+ export declare function emitMaestro(scenario: Scenario): string;
71
+ //# sourceMappingURL=scenario_dsl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenario_dsl.d.ts","sourceRoot":"","sources":["../../src/nac3/scenario_dsl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,MAAM,WAAW,IAAI;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,IAAI,GACZ;IAAE,GAAG,EAAY,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,EAAO,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,YAAY,EAAG,MAAM,CAAA;CAAE,GACzB;IAAE,UAAU,EAAK,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,MAAM,EAAS,MAAM,CAAA;CAAE,GACzB;IAAE,UAAU,EAAK,MAAM,CAAA;CAAE,CAAC;AAE9B,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAK,MAAM,CAAC;IAChB,GAAG,CAAC,EAAK,MAAM,CAAC;IAChB,IAAI,CAAC,EAAI,SAAS,MAAM,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAG,SAAS,IAAI,EAAE,CAAC;IACzB,IAAI,EAAK,SAAS,IAAI,EAAE,CAAC;CAC1B;AAMD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAqCzD;AAuCD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAuBtD"}
@@ -0,0 +1,191 @@
1
+ /**
2
+ * NAC-3 cross-runner scenario DSL (PLAN sec D3, NAC3.4).
3
+ *
4
+ * Authored once in `tests/scenarios/*.yujin.yaml`; emitted as
5
+ * 1. Playwright TS specs (web target)
6
+ * 2. Maestro YAML flow files (RN target)
7
+ *
8
+ * The same scenario thus runs against the web panel AND the
9
+ * Forge-generated RN app -- paridad estricta (D11).
10
+ *
11
+ * DSL shape (a Scenario):
12
+ *
13
+ * name: string -- human-readable scenario title
14
+ * url: string? -- web base URL (defaults to env)
15
+ * tags: string[]? -- categories (smoke, regression, ...)
16
+ * stubs: Stub[]? -- network mocks
17
+ * flow: Step[] -- sequential actions
18
+ *
19
+ * Step shapes:
20
+ * { tap: '<nacId>' }
21
+ * { typeText: '...', into: '<nacId>' }
22
+ * { assertVisible: '<nacId>' }
23
+ * { assertHidden: '<nacId>' }
24
+ * { assertText: '...', in: '<nacId>' }
25
+ * { waitMs: 250 }
26
+ * { screenshot: 'scenario-step-name' }
27
+ *
28
+ * Both emitters honour the SAME selector convention:
29
+ * Playwright: page.getByTestId('yujin.<scenario>.<el>') --
30
+ * applies to both data-nac-id and testID
31
+ * without runtime cost (Playwright reads
32
+ * testIdAttribute config which we set to
33
+ * 'data-nac-id' at the spec generator level).
34
+ * Maestro: id: 'yujin.<scenario>.<el>'
35
+ *
36
+ * ASCII-only on the source.
37
+ */
38
+ /* ============================================================
39
+ * Playwright emitter (web target)
40
+ * ============================================================ */
41
+ export function emitPlaywright(scenario) {
42
+ const lines = [];
43
+ lines.push("/* AUTOGENERATED from tests/scenarios/" + slugify(scenario.name) + ".yujin.yaml. DO NOT EDIT BY HAND. */");
44
+ lines.push("import { test, expect } from '@playwright/test';");
45
+ lines.push("");
46
+ lines.push("test.describe.configure({ mode: 'serial' });");
47
+ lines.push("");
48
+ lines.push("test(" + jsString(scenario.name) + ", async ({ page }) => {");
49
+ /* Network stubs first (so they apply to the goto). */
50
+ if (scenario.stubs) {
51
+ for (const stub of scenario.stubs) {
52
+ const status = stub.status ?? 200;
53
+ const contentType = stub.contentType ?? 'application/json';
54
+ const body = typeof stub.response === 'string'
55
+ ? jsString(stub.response)
56
+ : 'JSON.stringify(' + JSON.stringify(stub.response) + ')';
57
+ lines.push(' await page.route(' + jsString(stub.url) + ', (route) => route.fulfill({');
58
+ lines.push(' status: ' + status + ',');
59
+ lines.push(' headers: { "content-type": ' + jsString(contentType) + ' },');
60
+ lines.push(' body: ' + body + ',');
61
+ lines.push(' }));');
62
+ }
63
+ }
64
+ /* Navigate. */
65
+ const baseUrl = scenario.url ?? 'http://127.0.0.1:4849/';
66
+ lines.push(' await page.goto(' + jsString(baseUrl) + ', { waitUntil: "networkidle" });');
67
+ /* Steps. */
68
+ for (const step of scenario.flow) {
69
+ lines.push(' ' + emitPlaywrightStep(step, scenario.name));
70
+ }
71
+ lines.push('});');
72
+ lines.push('');
73
+ return lines.join('\n');
74
+ }
75
+ function emitPlaywrightStep(step, scenarioName) {
76
+ if ('tap' in step) {
77
+ return 'await page.getByTestId(' + jsString(canonicaliseId(step.tap)) + ').click();';
78
+ }
79
+ if ('typeText' in step) {
80
+ return 'await page.getByTestId(' + jsString(canonicaliseId(step.into))
81
+ + ').fill(' + jsString(step.typeText) + ');';
82
+ }
83
+ if ('assertVisible' in step) {
84
+ return 'await expect(page.getByTestId(' + jsString(canonicaliseId(step.assertVisible))
85
+ + ')).toBeVisible();';
86
+ }
87
+ if ('assertHidden' in step) {
88
+ return 'await expect(page.getByTestId(' + jsString(canonicaliseId(step.assertHidden))
89
+ + ')).toBeHidden();';
90
+ }
91
+ if ('assertText' in step) {
92
+ return 'await expect(page.getByTestId(' + jsString(canonicaliseId(step.in))
93
+ + ')).toContainText(' + jsString(step.assertText) + ');';
94
+ }
95
+ if ('waitMs' in step) {
96
+ return 'await page.waitForTimeout(' + step.waitMs + ');';
97
+ }
98
+ if ('screenshot' in step) {
99
+ const safe = step.screenshot.replace(/[^a-zA-Z0-9-_]/g, '-');
100
+ return 'await page.screenshot({ path: '
101
+ + jsString('tests/visual/evidence/' + slugify(scenarioName) + '/' + safe + '.png')
102
+ + ', fullPage: true });';
103
+ }
104
+ /* Should be unreachable -- TypeScript narrows the union. */
105
+ throw new Error('emitPlaywrightStep: unknown step shape: ' + JSON.stringify(step));
106
+ }
107
+ /* ============================================================
108
+ * Maestro emitter (RN target)
109
+ * ============================================================ */
110
+ export function emitMaestro(scenario) {
111
+ const lines = [];
112
+ lines.push("# AUTOGENERATED from tests/scenarios/" + slugify(scenario.name) + ".yujin.yaml. DO NOT EDIT BY HAND.");
113
+ lines.push("# " + scenario.name);
114
+ lines.push("appId: app.yujin.forge");
115
+ /* Maestro does not support generic HTTP stubs natively;
116
+ * we emit a marker comment so the dev knows to wire a
117
+ * MockableHttpClient handler (NAC3.4 deliverable D4). */
118
+ if (scenario.stubs && scenario.stubs.length > 0) {
119
+ lines.push('# Stubs declared (consumed by MockableHttpClient):');
120
+ for (const stub of scenario.stubs) {
121
+ lines.push('# ' + (stub.method ?? 'GET') + ' ' + stub.url + ' -> ' + (stub.status ?? 200));
122
+ }
123
+ }
124
+ lines.push('---');
125
+ /* Launch the app. */
126
+ lines.push('- launchApp');
127
+ for (const step of scenario.flow) {
128
+ const block = emitMaestroStep(step, scenario.name);
129
+ for (const line of block)
130
+ lines.push(line);
131
+ }
132
+ return lines.join('\n') + '\n';
133
+ }
134
+ function emitMaestroStep(step, scenarioName) {
135
+ if ('tap' in step) {
136
+ return ['- tapOn:', ' id: ' + canonicaliseId(step.tap)];
137
+ }
138
+ if ('typeText' in step) {
139
+ return [
140
+ '- tapOn:', ' id: ' + canonicaliseId(step.into),
141
+ '- inputText: ' + maestroString(step.typeText),
142
+ ];
143
+ }
144
+ if ('assertVisible' in step) {
145
+ return ['- assertVisible:', ' id: ' + canonicaliseId(step.assertVisible)];
146
+ }
147
+ if ('assertHidden' in step) {
148
+ return ['- assertNotVisible:', ' id: ' + canonicaliseId(step.assertHidden)];
149
+ }
150
+ if ('assertText' in step) {
151
+ return [
152
+ '- assertVisible:', ' id: ' + canonicaliseId(step.in),
153
+ '- assertVisible:', ' text: ' + maestroString(step.assertText),
154
+ ];
155
+ }
156
+ if ('waitMs' in step) {
157
+ /* Maestro takes seconds, with sub-second precision. */
158
+ return ['- waitForAnimationToEnd', '- extendedWaitUntil:', ' visible: ""', ' timeout: ' + Math.max(1, Math.ceil(step.waitMs / 1000))];
159
+ }
160
+ if ('screenshot' in step) {
161
+ const safe = step.screenshot.replace(/[^a-zA-Z0-9-_]/g, '-');
162
+ return ['- takeScreenshot: ' + safe];
163
+ }
164
+ throw new Error('emitMaestroStep: unknown step shape: ' + JSON.stringify(step));
165
+ }
166
+ /* ============================================================
167
+ * Shared helpers
168
+ * ============================================================ */
169
+ function canonicaliseId(id) {
170
+ /* Mirror of nacId() but inlined to avoid a circular import.
171
+ * The shape is `yujin.<scenario>.<element>`. */
172
+ if (typeof id !== 'string' || id.length === 0) {
173
+ throw new Error('canonicaliseId: empty id');
174
+ }
175
+ return id.startsWith('yujin.') ? id : 'yujin.' + id;
176
+ }
177
+ function slugify(s) {
178
+ return s.toLowerCase().replace(/[^a-z0-9-]+/g, '-').replace(/^-+|-+$/g, '');
179
+ }
180
+ /** Defensive single-quoted TS string literal that survives
181
+ * apostrophes + back-slashes inside scenario names + arg
182
+ * values. */
183
+ function jsString(s) {
184
+ return "'" + s.replace(/\\/g, '\\\\').replace(/'/g, "\\'") + "'";
185
+ }
186
+ /** Maestro YAML quoting: use double quotes + escape inner
187
+ * doubles. */
188
+ function maestroString(s) {
189
+ return '"' + s.replace(/\\/g, '\\\\').replace(/"/g, '\\"') + '"';
190
+ }
191
+ //# sourceMappingURL=scenario_dsl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenario_dsl.js","sourceRoot":"","sources":["../../src/nac3/scenario_dsl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * NAC-3 design tokens (PLAN sec D1, NAC3.1).
3
+ *
4
+ * Single source of truth for colors, fonts, spacing, radii,
5
+ * and shadows used by the Forge panel (web) and -- after the
6
+ * NAC3.3 slice -- the RN mirror.
7
+ *
8
+ * The TS export is the canonical shape. A side-effect helper
9
+ * (`tokensToCssVars`) emits the same values as CSS variable
10
+ * declarations so the existing `panel.ts` CSS can consume
11
+ * them without further changes.
12
+ *
13
+ * Pablo's decision (D7): two packages emparejados. This file
14
+ * is the embryo of `@yujin/nac3-tokens` -- when the monorepo
15
+ * lands, it moves under `packages/nac3-tokens/`. The shape
16
+ * stays identical to avoid a churn refactor in callers.
17
+ *
18
+ * ASCII-only on the source. Values are CSS hex / numeric.
19
+ */
20
+ export interface ColorTokens {
21
+ bg1: string;
22
+ bg2: string;
23
+ ink: string;
24
+ inkMuted: string;
25
+ inkSubtle: string;
26
+ indigo: string;
27
+ amber: string;
28
+ border: string;
29
+ borderSubtle: string;
30
+ ok: string;
31
+ err: string;
32
+ warn: string;
33
+ bubbleUser: string;
34
+ bubbleAsst: string;
35
+ }
36
+ export interface FontTokens {
37
+ sans: string;
38
+ kanji: string;
39
+ display: string;
40
+ mono: string;
41
+ }
42
+ export interface ShadowTokens {
43
+ card: {
44
+ offsetX: number;
45
+ offsetY: number;
46
+ blur: number;
47
+ spread: number;
48
+ color: string;
49
+ };
50
+ modal: {
51
+ offsetX: number;
52
+ offsetY: number;
53
+ blur: number;
54
+ spread: number;
55
+ color: string;
56
+ };
57
+ }
58
+ export interface RadiusTokens {
59
+ sm: number;
60
+ md: number;
61
+ lg: number;
62
+ pill: number;
63
+ }
64
+ export interface Nac3Tokens {
65
+ color: ColorTokens;
66
+ font: FontTokens;
67
+ space: readonly number[];
68
+ radius: RadiusTokens;
69
+ shadow: ShadowTokens;
70
+ }
71
+ /** The canonical NAC-3 token set. */
72
+ export declare const TOKENS: Nac3Tokens;
73
+ /**
74
+ * Emit the color + font + radius tokens as a CSS variable
75
+ * declaration block, scoped under `:root` by default. The
76
+ * existing panel CSS consumes these same names; rendering
77
+ * the block at HTML render time replaces the previous
78
+ * hardcoded `:root { --bg-1: ... }` block.
79
+ *
80
+ * Caller pattern (in `renderPanelHtml`):
81
+ *
82
+ * <style>
83
+ * :root { ${tokensToCssVars()} }
84
+ * ...rest of the panel CSS...
85
+ * </style>
86
+ */
87
+ export declare function tokensToCssVars(scope?: string): string;
88
+ /**
89
+ * RN style object equivalent. NB: shadows are RN-specific
90
+ * (elevation + shadowOffset for iOS, elevation only on
91
+ * Android). React Native callers should use this object,
92
+ * not the CSS string.
93
+ *
94
+ * Exported here so a future `@nac3/forge-rn` consumer
95
+ * doesn't need to re-translate the tokens; same numbers,
96
+ * same names.
97
+ */
98
+ export declare function tokensToRnTheme(): {
99
+ color: ColorTokens;
100
+ font: FontTokens;
101
+ space: readonly number[];
102
+ radius: RadiusTokens;
103
+ shadow: {
104
+ card: {
105
+ elevation: number;
106
+ shadowOffset: {
107
+ width: number;
108
+ height: number;
109
+ };
110
+ shadowOpacity: number;
111
+ shadowRadius: number;
112
+ shadowColor: string;
113
+ };
114
+ modal: {
115
+ elevation: number;
116
+ shadowOffset: {
117
+ width: number;
118
+ height: number;
119
+ };
120
+ shadowOpacity: number;
121
+ shadowRadius: number;
122
+ shadowColor: string;
123
+ };
124
+ };
125
+ };
126
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/nac3/tokens.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxF,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1F;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,UAAU,CAAC;IAEjB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,qCAAqC;AACrC,eAAO,MAAM,MAAM,EAAE,UA6BpB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,KAAK,GAAE,MAAgB,GAAG,MAAM,CAsC/D;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,IAAI;IACjC,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE;QACN,IAAI,EAAE;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAE,CAAC;YAAC,aAAa,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,CAAC;QAC/I,KAAK,EAAE;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAE,CAAC;YAAC,aAAa,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,CAAC;KACjJ,CAAC;CACH,CAuBA"}