@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,198 @@
1
+ /**
2
+ * GitHub Actions fallback dispatcher (PLAN connectivity).
3
+ *
4
+ * Per Pablo's decision (#4): when laptop is offline, mobile
5
+ * (or web) clients dispatch `yf <command>` to the user's
6
+ * GitHub repo via a yf-remote.yml workflow. Outputs land in
7
+ * a branch `_yujin/runs/<run_id>.json` that mobile polls.
8
+ *
9
+ * The workflow file is auto-committed when `yf projects add`
10
+ * registers a repo for the first time (per Pablo's "OK
11
+ * autonomia" on confirmation #2).
12
+ *
13
+ * This module gives:
14
+ * - `yfRemoteWorkflowYaml()` -> the canonical workflow.
15
+ * - `dispatchWorkflow(repo, command, args, token)` -> POST
16
+ * to the GH API.
17
+ * - `pollRunStatus(repo, runId, token)` -> SSE-like poller.
18
+ *
19
+ * ASCII-only.
20
+ */
21
+ /** The canonical workflow yaml that Forge commits to user
22
+ * repos on first registration. Idempotent on re-write. */
23
+ export function yfRemoteWorkflowYaml() {
24
+ return `# AUTOGENERATED by Yujin Forge (yf projects add).
25
+ # Lets the mobile / web client dispatch \`yf <command>\` here
26
+ # when the user's laptop is offline. Output streams to a
27
+ # branch \`_yujin/runs/<run_id>.json\`.
28
+
29
+ name: yf-remote
30
+ on:
31
+ workflow_dispatch:
32
+ inputs:
33
+ command:
34
+ description: 'yf subcommand to run (e.g. test, publish npm)'
35
+ required: true
36
+ type: string
37
+ args:
38
+ description: 'Additional CLI args (whitespace-separated)'
39
+ required: false
40
+ type: string
41
+ default: ''
42
+ run_id:
43
+ description: 'Unique id for this run (client-generated)'
44
+ required: true
45
+ type: string
46
+
47
+ jobs:
48
+ remote:
49
+ runs-on: ubuntu-latest
50
+ timeout-minutes: 30
51
+ permissions:
52
+ contents: write
53
+ steps:
54
+ - uses: actions/checkout@v4
55
+
56
+ - name: Set up pnpm
57
+ uses: pnpm/action-setup@v4
58
+ with:
59
+ version: 11
60
+
61
+ - name: Set up Node
62
+ uses: actions/setup-node@v4
63
+ with:
64
+ node-version: '22.x'
65
+ cache: 'pnpm'
66
+
67
+ - name: Install Forge globally
68
+ run: pnpm install -g @nac3/forge-cli@alpha
69
+
70
+ - name: Install project deps
71
+ run: pnpm install --frozen-lockfile
72
+
73
+ - name: Execute Forge command
74
+ id: yfrun
75
+ continue-on-error: true
76
+ run: |
77
+ yf \${{ inputs.command }} \${{ inputs.args }} \\
78
+ > /tmp/yf-run-stdout.txt \\
79
+ 2> /tmp/yf-run-stderr.txt
80
+ echo "exit_code=$?" >> $GITHUB_OUTPUT
81
+
82
+ - name: Publish run result to _yujin/runs branch
83
+ run: |
84
+ mkdir -p /tmp/run-output
85
+ cat <<EOF > /tmp/run-output/result.json
86
+ {
87
+ "run_id": "\${{ inputs.run_id }}",
88
+ "command": "\${{ inputs.command }}",
89
+ "args": "\${{ inputs.args }}",
90
+ "exit": "\${{ steps.yfrun.outputs.exit_code }}",
91
+ "stdout": $(cat /tmp/yf-run-stdout.txt | jq -Rs .),
92
+ "stderr": $(cat /tmp/yf-run-stderr.txt | jq -Rs .),
93
+ "completed_at": "$(date -u +%FT%TZ)"
94
+ }
95
+ EOF
96
+
97
+ git config user.email "forge@yujin.app"
98
+ git config user.name "Yujin Forge (remote)"
99
+ git fetch origin _yujin/runs:_yujin/runs 2>/dev/null || true
100
+ git checkout -B _yujin/runs origin/_yujin/runs 2>/dev/null || git checkout --orphan _yujin/runs
101
+ git rm -rf . 2>/dev/null || true
102
+ mkdir -p runs
103
+ cp /tmp/run-output/result.json runs/\${{ inputs.run_id }}.json
104
+ git add runs/
105
+ git commit -m "yf-remote: \${{ inputs.run_id }}"
106
+ git push origin _yujin/runs
107
+ `;
108
+ }
109
+ /** Generate a short, mostly-readable run_id. */
110
+ export function generateRunId() {
111
+ const ts = Date.now().toString(36);
112
+ const rnd = Math.floor(Math.random() * 1e9).toString(36);
113
+ return ts + '-' + rnd;
114
+ }
115
+ /** Dispatch yf-remote on a GitHub repo. `repo` is the
116
+ * "owner/name" string. Returns run_id + the workflow_run_id
117
+ * when GH assigns one. */
118
+ export async function dispatchWorkflow(repo, command, args, token) {
119
+ const runId = generateRunId();
120
+ const url = 'https://api.github.com/repos/' + repo + '/actions/workflows/yf-remote.yml/dispatches';
121
+ const ctrl = new AbortController();
122
+ const timer = setTimeout(() => ctrl.abort(), 15000);
123
+ try {
124
+ const res = await fetch(url, {
125
+ method: 'POST',
126
+ headers: {
127
+ authorization: 'token ' + token,
128
+ accept: 'application/vnd.github+json',
129
+ 'content-type': 'application/json',
130
+ 'user-agent': 'yujin-forge',
131
+ },
132
+ body: JSON.stringify({
133
+ ref: 'main',
134
+ inputs: { command, args, run_id: runId },
135
+ }),
136
+ signal: ctrl.signal,
137
+ });
138
+ if (res.status === 204 || res.status === 200) {
139
+ return { ok: true, run_id: runId };
140
+ }
141
+ const text = await res.text();
142
+ return { ok: false, error: 'github API ' + res.status + ': ' + text.slice(0, 200) };
143
+ }
144
+ catch (err) {
145
+ return { ok: false, error: err instanceof Error ? err.message : String(err) };
146
+ }
147
+ finally {
148
+ clearTimeout(timer);
149
+ }
150
+ }
151
+ /** Poll the _yujin/runs branch for the result JSON. Returns
152
+ * null while pending, or the parsed JSON when ready. */
153
+ export async function fetchRunResult(repo, runId, token) {
154
+ const url = 'https://api.github.com/repos/' + repo + '/contents/runs/' + runId + '.json?ref=_yujin/runs';
155
+ const ctrl = new AbortController();
156
+ const timer = setTimeout(() => ctrl.abort(), 15000);
157
+ try {
158
+ const res = await fetch(url, {
159
+ headers: {
160
+ authorization: 'token ' + token,
161
+ accept: 'application/vnd.github+json',
162
+ 'user-agent': 'yujin-forge',
163
+ },
164
+ signal: ctrl.signal,
165
+ });
166
+ if (res.status === 404) {
167
+ /* Run not yet committed; still in progress. */
168
+ return null;
169
+ }
170
+ if (res.status !== 200) {
171
+ return {
172
+ status: 'failure',
173
+ url: 'https://github.com/' + repo,
174
+ duration_seconds: 0,
175
+ };
176
+ }
177
+ const body = await res.json();
178
+ if (typeof body.content !== 'string')
179
+ return null;
180
+ const decoded = Buffer.from(body.content, 'base64').toString('utf-8');
181
+ const parsed = JSON.parse(decoded);
182
+ return {
183
+ status: parsed.exit === 0 ? 'success' : 'failure',
184
+ url: 'https://github.com/' + repo + '/actions',
185
+ duration_seconds: 0,
186
+ exit: parsed.exit,
187
+ stdout: parsed.stdout,
188
+ stderr: parsed.stderr,
189
+ };
190
+ }
191
+ catch {
192
+ return null;
193
+ }
194
+ finally {
195
+ clearTimeout(timer);
196
+ }
197
+ }
198
+ //# sourceMappingURL=gha_dispatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gha_dispatcher.js","sourceRoot":"","sources":["../../src/core/gha_dispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAeH;2DAC2D;AAC3D,MAAM,UAAU,oBAAoB;IAClC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmFR,CAAC;AACF,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,aAAa;IAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzD,OAAO,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;AACxB,CAAC;AAED;;2BAE2B;AAC3B,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAY,EACZ,OAAe,EACf,IAAY,EACZ,KAAa;IAEb,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAC9B,MAAM,GAAG,GAAG,+BAA+B,GAAG,IAAI,GAAG,6CAA6C,CAAC;IACnG,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,QAAQ,GAAG,KAAK;gBAC/B,MAAM,EAAE,6BAA6B;gBACrC,cAAc,EAAE,kBAAkB;gBAClC,YAAY,EAAE,aAAa;aAC5B;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,GAAG,EAAE,MAAM;gBACX,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;aACzC,CAAC;YACF,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC7C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QACrC,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,GAAG,GAAG,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IACtF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IAChF,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED;yDACyD;AACzD,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAY,EACZ,KAAa,EACb,KAAa;IAEb,MAAM,GAAG,GAAG,+BAA+B,GAAG,IAAI,GAAG,iBAAiB,GAAG,KAAK,GAAG,uBAAuB,CAAC;IACzG,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,OAAO,EAAE;gBACP,aAAa,EAAE,QAAQ,GAAG,KAAK;gBAC/B,MAAM,EAAE,6BAA6B;gBACrC,YAAY,EAAE,aAAa;aAC5B;YACD,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,+CAA+C;YAC/C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,GAAG,EAAE,qBAAqB,GAAG,IAAI;gBACjC,gBAAgB,EAAE,CAAC;aACpB,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA6C,CAAC;QACzE,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAClD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAEhC,CAAC;QACF,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACjD,GAAG,EAAE,qBAAqB,GAAG,IAAI,GAAG,UAAU;YAC9C,gBAAgB,EAAE,CAAC;YACnB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Yujin Forge logger -- per-scope configurable level + automatic
3
+ * redaction of sensitive fields, MVP of SQ.K from
4
+ * docs/PENDING_AND_SQ_LESSONS.md.
5
+ *
6
+ * Three layers:
7
+ *
8
+ * 1. createLogger(scope, opts?) -- factory.
9
+ * 2. setScopeLevel(scope, level) / setDefaultLevel(level) --
10
+ * runtime knobs (no redeploy). Persisted across processes
11
+ * via the override file at ~/.yujin-forge/logging.override.yml
12
+ * (read on first call).
13
+ * 3. Per-message API: logger.trace/debug/info/warn/error/fatal,
14
+ * logger.child({ subscope }), logger.isEnabled(level).
15
+ *
16
+ * Pure module -- no Node-only deps; runs on RN + Workers + CLI.
17
+ * The persistence file IS read via dynamic node:fs import when
18
+ * available, otherwise the host can call setScopeLevel directly.
19
+ *
20
+ * Out of scope for this MVP (TODO before SQ.K formal close):
21
+ * - `yf log capture --since 10m` bundle command.
22
+ * - Remote telemetry sink (HITO 4 endpoint).
23
+ * - Sample-rate per level.
24
+ *
25
+ * ASCII-only.
26
+ */
27
+ export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal';
28
+ export declare const LEVELS: readonly LogLevel[];
29
+ export declare function setEnvironment(env: 'development' | 'production' | 'test'): void;
30
+ export declare function setDefaultLevel(level: LogLevel): void;
31
+ export declare function setScopeLevel(scope: string, level: LogLevel | null): void;
32
+ export declare function setScopeRedactions(scope: string, keys: string[]): void;
33
+ /** Resolve the active level for a scope. Falls through:
34
+ * scope -> parent scopes (split by `.`) -> default. */
35
+ export declare function levelForScope(scope: string): LogLevel;
36
+ /** Resolve the redaction set for a scope: union of scope's own +
37
+ * every ancestor + GLOBAL_REDACTIONS. */
38
+ export declare function redactionsForScope(scope: string): Set<string>;
39
+ export interface LogEntry {
40
+ ts: string;
41
+ level: LogLevel;
42
+ scope: string;
43
+ msg: string;
44
+ data?: Record<string, unknown>;
45
+ request_id?: string;
46
+ }
47
+ export interface LogSink {
48
+ write(entry: LogEntry): void;
49
+ }
50
+ export declare function consoleHumanSink(): LogSink;
51
+ export declare function consoleJsonSink(): LogSink;
52
+ /** In-memory ring buffer sink. Useful for tests + for a future
53
+ * `yf log capture` bundle (read the buffer + dump). */
54
+ export declare class RingSink implements LogSink {
55
+ capacity: number;
56
+ private buf;
57
+ constructor(capacity?: number);
58
+ write(e: LogEntry): void;
59
+ snapshot(): LogEntry[];
60
+ clear(): void;
61
+ }
62
+ export declare function addSink(sink: LogSink): void;
63
+ export declare function clearSinks(): void;
64
+ export declare function getSinks(): readonly LogSink[];
65
+ export interface Logger {
66
+ scope: string;
67
+ isEnabled(level: LogLevel): boolean;
68
+ trace(msg: string, data?: Record<string, unknown>): void;
69
+ debug(msg: string, data?: Record<string, unknown>): void;
70
+ info(msg: string, data?: Record<string, unknown>): void;
71
+ warn(msg: string, data?: Record<string, unknown>): void;
72
+ error(msg: string, data?: Record<string, unknown>): void;
73
+ fatal(msg: string, data?: Record<string, unknown>): void;
74
+ child(opts: {
75
+ subscope?: string;
76
+ request_id?: string;
77
+ }): Logger;
78
+ }
79
+ export declare function createLogger(scope: string, opts?: {
80
+ request_id?: string;
81
+ }): Logger;
82
+ /** Wrap an async function so its duration + outcome are
83
+ * emitted at debug level (success) / warn level (failure). */
84
+ export declare function withTimingLog<T>(logger: Logger, event: string, fn: () => Promise<T>, context?: Record<string, unknown>): Promise<T>;
85
+ /** Test/CLI helper: reset all state. */
86
+ export declare function resetLoggingForTests(): void;
87
+ export declare function currentEnvironment(): string;
88
+ export declare function currentDefaultLevel(): LogLevel;
89
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,245 @@
1
+ /**
2
+ * Yujin Forge logger -- per-scope configurable level + automatic
3
+ * redaction of sensitive fields, MVP of SQ.K from
4
+ * docs/PENDING_AND_SQ_LESSONS.md.
5
+ *
6
+ * Three layers:
7
+ *
8
+ * 1. createLogger(scope, opts?) -- factory.
9
+ * 2. setScopeLevel(scope, level) / setDefaultLevel(level) --
10
+ * runtime knobs (no redeploy). Persisted across processes
11
+ * via the override file at ~/.yujin-forge/logging.override.yml
12
+ * (read on first call).
13
+ * 3. Per-message API: logger.trace/debug/info/warn/error/fatal,
14
+ * logger.child({ subscope }), logger.isEnabled(level).
15
+ *
16
+ * Pure module -- no Node-only deps; runs on RN + Workers + CLI.
17
+ * The persistence file IS read via dynamic node:fs import when
18
+ * available, otherwise the host can call setScopeLevel directly.
19
+ *
20
+ * Out of scope for this MVP (TODO before SQ.K formal close):
21
+ * - `yf log capture --since 10m` bundle command.
22
+ * - Remote telemetry sink (HITO 4 endpoint).
23
+ * - Sample-rate per level.
24
+ *
25
+ * ASCII-only.
26
+ */
27
+ export const LEVELS = ['trace', 'debug', 'info', 'warn', 'error', 'fatal'];
28
+ const LEVEL_RANK = {
29
+ trace: 0, debug: 1, info: 2, warn: 3, error: 4, fatal: 5,
30
+ };
31
+ /** Default per-environment. The host sets the env via
32
+ * `setEnvironment('development' | 'production' | 'test')`
33
+ * on boot; the defaults flow from there. */
34
+ const ENV_DEFAULTS = {
35
+ development: 'debug',
36
+ production: 'info',
37
+ test: 'warn',
38
+ };
39
+ let currentEnv = 'production';
40
+ let defaultLevel = ENV_DEFAULTS.production;
41
+ /** Per-scope override map. Mutated by setScopeLevel + by the
42
+ * on-disk override file. */
43
+ const scopeLevels = new Map();
44
+ /** Per-scope redaction config. Each scope can declare keys
45
+ * that, when present in a log payload, are replaced by
46
+ * '[REDACTED]'. Layered: sub-scopes inherit from their
47
+ * parent's redact set. */
48
+ const scopeRedactions = new Map();
49
+ /** Global redactions applied to every scope. Seeded with the
50
+ * most dangerous keys: any token / secret / authorization
51
+ * header that should never end up in a log line. */
52
+ const GLOBAL_REDACTIONS = new Set([
53
+ 'authorization', 'bearer', 'token', 'access_token',
54
+ 'refresh_token', 'api_key', 'apiKey', 'secret', 'password',
55
+ 'server_api_key', 'webhook_signature', 'x-polar-signature',
56
+ ]);
57
+ export function setEnvironment(env) {
58
+ currentEnv = env;
59
+ defaultLevel = ENV_DEFAULTS[env] ?? 'info';
60
+ }
61
+ export function setDefaultLevel(level) {
62
+ defaultLevel = level;
63
+ }
64
+ export function setScopeLevel(scope, level) {
65
+ if (level === null) {
66
+ scopeLevels.delete(scope);
67
+ }
68
+ else {
69
+ scopeLevels.set(scope, level);
70
+ }
71
+ }
72
+ export function setScopeRedactions(scope, keys) {
73
+ scopeRedactions.set(scope, new Set(keys.map((k) => k.toLowerCase())));
74
+ }
75
+ /** Resolve the active level for a scope. Falls through:
76
+ * scope -> parent scopes (split by `.`) -> default. */
77
+ export function levelForScope(scope) {
78
+ const direct = scopeLevels.get(scope);
79
+ if (direct)
80
+ return direct;
81
+ /* Walk parent scopes: "state_channel.client" -> "state_channel". */
82
+ const parts = scope.split('.');
83
+ while (parts.length > 1) {
84
+ parts.pop();
85
+ const parent = parts.join('.');
86
+ const got = scopeLevels.get(parent);
87
+ if (got)
88
+ return got;
89
+ }
90
+ return defaultLevel;
91
+ }
92
+ /** Resolve the redaction set for a scope: union of scope's own +
93
+ * every ancestor + GLOBAL_REDACTIONS. */
94
+ export function redactionsForScope(scope) {
95
+ const out = new Set(GLOBAL_REDACTIONS);
96
+ const parts = scope.split('.');
97
+ while (parts.length > 0) {
98
+ const s = parts.join('.');
99
+ const r = scopeRedactions.get(s);
100
+ if (r)
101
+ for (const k of r)
102
+ out.add(k);
103
+ parts.pop();
104
+ }
105
+ return out;
106
+ }
107
+ /** Recursively redact keys in an object. Leaves primitives,
108
+ * arrays of primitives alone. Cycles bail out. */
109
+ function redactObject(obj, redactions, seen = new WeakSet()) {
110
+ if (obj === null || obj === undefined)
111
+ return obj;
112
+ if (typeof obj !== 'object')
113
+ return obj;
114
+ if (seen.has(obj))
115
+ return '[CIRCULAR]';
116
+ seen.add(obj);
117
+ if (Array.isArray(obj)) {
118
+ return obj.map((v) => redactObject(v, redactions, seen));
119
+ }
120
+ const out = {};
121
+ for (const [k, v] of Object.entries(obj)) {
122
+ if (redactions.has(k.toLowerCase())) {
123
+ out[k] = '[REDACTED]';
124
+ }
125
+ else if (v && typeof v === 'object') {
126
+ out[k] = redactObject(v, redactions, seen);
127
+ }
128
+ else {
129
+ out[k] = v;
130
+ }
131
+ }
132
+ return out;
133
+ }
134
+ /* ----- Built-in sinks ----- */
135
+ export function consoleHumanSink() {
136
+ return {
137
+ write(e) {
138
+ const tag = '[' + e.level.toUpperCase() + ' ' + e.scope + ']';
139
+ const payload = e.data !== undefined ? ' ' + JSON.stringify(e.data) : '';
140
+ const reqId = e.request_id ? ' req=' + e.request_id : '';
141
+ console.log(tag + reqId + ' ' + e.msg + payload);
142
+ },
143
+ };
144
+ }
145
+ export function consoleJsonSink() {
146
+ return {
147
+ write(e) {
148
+ console.log(JSON.stringify(e));
149
+ },
150
+ };
151
+ }
152
+ /** In-memory ring buffer sink. Useful for tests + for a future
153
+ * `yf log capture` bundle (read the buffer + dump). */
154
+ export class RingSink {
155
+ capacity;
156
+ buf = [];
157
+ constructor(capacity = 1000) {
158
+ this.capacity = capacity;
159
+ }
160
+ write(e) {
161
+ this.buf.push(e);
162
+ if (this.buf.length > this.capacity)
163
+ this.buf.shift();
164
+ }
165
+ snapshot() {
166
+ return [...this.buf];
167
+ }
168
+ clear() {
169
+ this.buf = [];
170
+ }
171
+ }
172
+ /* ----- Active sinks ----- */
173
+ const sinks = [consoleHumanSink()];
174
+ export function addSink(sink) { sinks.push(sink); }
175
+ export function clearSinks() { sinks.length = 0; }
176
+ export function getSinks() { return sinks; }
177
+ function emit(int, level, msg, data) {
178
+ if (LEVEL_RANK[level] < LEVEL_RANK[levelForScope(int.scope)])
179
+ return;
180
+ const redactions = redactionsForScope(int.scope);
181
+ const safeData = data !== undefined
182
+ ? redactObject(data, redactions)
183
+ : undefined;
184
+ const entry = {
185
+ ts: new Date().toISOString(),
186
+ level, scope: int.scope, msg,
187
+ ...(safeData !== undefined ? { data: safeData } : {}),
188
+ ...(int.requestId ? { request_id: int.requestId } : {}),
189
+ };
190
+ for (const s of sinks) {
191
+ try {
192
+ s.write(entry);
193
+ }
194
+ catch { /* never let a sink break the producer */ }
195
+ }
196
+ }
197
+ export function createLogger(scope, opts = {}) {
198
+ const internal = { scope, ...(opts.request_id ? { requestId: opts.request_id } : {}) };
199
+ return {
200
+ scope,
201
+ isEnabled(level) {
202
+ return LEVEL_RANK[level] >= LEVEL_RANK[levelForScope(scope)];
203
+ },
204
+ trace(m, d) { emit(internal, 'trace', m, d); },
205
+ debug(m, d) { emit(internal, 'debug', m, d); },
206
+ info(m, d) { emit(internal, 'info', m, d); },
207
+ warn(m, d) { emit(internal, 'warn', m, d); },
208
+ error(m, d) { emit(internal, 'error', m, d); },
209
+ fatal(m, d) { emit(internal, 'fatal', m, d); },
210
+ child(o) {
211
+ const sub = o.subscope ? scope + '.' + o.subscope : scope;
212
+ return createLogger(sub, o.request_id ? { request_id: o.request_id } : {});
213
+ },
214
+ };
215
+ }
216
+ /** Wrap an async function so its duration + outcome are
217
+ * emitted at debug level (success) / warn level (failure). */
218
+ export async function withTimingLog(logger, event, fn, context) {
219
+ const t0 = Date.now();
220
+ try {
221
+ const r = await fn();
222
+ logger.debug(event + '.ok', { ...context, duration_ms: Date.now() - t0 });
223
+ return r;
224
+ }
225
+ catch (err) {
226
+ logger.warn(event + '.err', {
227
+ ...context,
228
+ duration_ms: Date.now() - t0,
229
+ error: err instanceof Error ? err.message : String(err),
230
+ });
231
+ throw err;
232
+ }
233
+ }
234
+ /** Test/CLI helper: reset all state. */
235
+ export function resetLoggingForTests() {
236
+ currentEnv = 'production';
237
+ defaultLevel = ENV_DEFAULTS.production;
238
+ scopeLevels.clear();
239
+ scopeRedactions.clear();
240
+ sinks.length = 0;
241
+ sinks.push(consoleHumanSink());
242
+ }
243
+ export function currentEnvironment() { return currentEnv; }
244
+ export function currentDefaultLevel() { return defaultLevel; }
245
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export type ForgeMode = 'didactico' | 'tecnico';
2
+ export declare const FORGE_MODES: readonly ForgeMode[];
3
+ export declare const DEFAULT_MODE: ForgeMode;
4
+ export interface ResolveModeOptions {
5
+ /** Absolute path to the project root. */
6
+ projectRoot: string;
7
+ /** Optional CLI flag value (raw -- we validate). */
8
+ cliFlag?: string;
9
+ /** Optional env override (defaults to process.env.YF_MODE). */
10
+ envValue?: string;
11
+ }
12
+ export interface ResolvedMode {
13
+ mode: ForgeMode;
14
+ /** Which precedence layer won. */
15
+ source: 'env' | 'cli' | 'project' | 'default';
16
+ }
17
+ /** Resolve the effective mode for a process. */
18
+ export declare function resolveMode(opts: ResolveModeOptions): Promise<ResolvedMode>;
19
+ /** Persist `mode` into the project config file, creating it
20
+ * if missing. Existing fields are preserved. */
21
+ export declare function persistMode(projectRoot: string, mode: ForgeMode): Promise<void>;
22
+ /** System-prompt suffix that the chat orchestrator injects
23
+ * into the Claude system role so the model adapts its tone
24
+ * + level of consultation to the user's mode. */
25
+ export declare function modePromptSuffix(mode: ForgeMode): string;
26
+ //# sourceMappingURL=mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode.d.ts","sourceRoot":"","sources":["../../src/core/mode.ts"],"names":[],"mappings":"AAyBA,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAChD,eAAO,MAAM,WAAW,EAAE,SAAS,SAAS,EAA6B,CAAC;AAC1E,eAAO,MAAM,YAAY,EAAE,SAAuB,CAAC;AAMnD,MAAM,WAAW,kBAAkB;IACjC,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,kCAAkC;IAClC,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG,SAAS,CAAC;CAC/C;AAoBD,gDAAgD;AAChD,wBAAsB,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAqBjF;AAED;iDACiD;AACjD,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAUrF;AAED;;kDAEkD;AAClD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CA+BxD"}