@wenathlan/devthink 2.0.13 → 2.0.15

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 (444) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/accounts.ts +2087 -0
  3. package/agent.ts +2331 -0
  4. package/antigravity.ts +2139 -0
  5. package/apifreeze.ts +4146 -0
  6. package/auth.ts +642 -0
  7. package/background.ts +16837 -0
  8. package/bridge.ts +2080 -0
  9. package/build.ts +54 -0
  10. package/bun.ts +26 -0
  11. package/capture.ts +1614 -0
  12. package/checksecrets.ts +72 -0
  13. package/cjs.ts +9 -0
  14. package/cli.ts +3500 -0
  15. package/commands.ts +1101 -0
  16. package/companion.ts +450 -0
  17. package/compatibility.ts +37 -0
  18. package/config.ts +3137 -0
  19. package/constants.ts +943 -0
  20. package/core.ts +1473 -0
  21. package/crossbrowser.ts +1359 -0
  22. package/dashdone.ts +605 -0
  23. package/data.ts +943 -0
  24. package/database.ts +133 -0
  25. package/debug.ts +850 -0
  26. package/deno.ts +27 -0
  27. package/devthink.ts +707 -0
  28. package/dist/accounts.d.ts +409 -0
  29. package/dist/agent.d.ts +837 -0
  30. package/dist/antigravity.d.ts +380 -0
  31. package/dist/apifreeze.d.ts +113 -0
  32. package/dist/auth.d.ts +224 -0
  33. package/{bridge.d.ts → dist/bridge.d.ts} +1 -1
  34. package/dist/capture.d.ts +595 -0
  35. package/dist/cjs.d.ts +6 -0
  36. package/{cli.js → dist/cli.js} +2 -2
  37. package/dist/commands.d.ts +310 -0
  38. package/dist/compatibility.d.ts +17 -0
  39. package/dist/config.d.ts +1853 -0
  40. package/dist/constants.d.ts +637 -0
  41. package/dist/core.d.ts +361 -0
  42. package/dist/data.d.ts +330 -0
  43. package/dist/database.d.ts +24 -0
  44. package/dist/debug.d.ts +270 -0
  45. package/dist/engine.d.ts +74 -0
  46. package/dist/environments.d.ts +244 -0
  47. package/dist/evidence.d.ts +277 -0
  48. package/dist/export.d.ts +311 -0
  49. package/dist/fingerprint.d.ts +594 -0
  50. package/dist/flow.d.ts +300 -0
  51. package/dist/gates.d.ts +103 -0
  52. package/dist/identity.d.ts +51 -0
  53. package/dist/ids.d.ts +7 -0
  54. package/dist/llm.d.ts +652 -0
  55. package/dist/models.d.ts +1807 -0
  56. package/dist/net.d.ts +325 -0
  57. package/dist/neutral.d.ts +41 -0
  58. package/dist/oauth.d.ts +703 -0
  59. package/dist/page.d.ts +1166 -0
  60. package/dist/perf.d.ts +481 -0
  61. package/dist/plan.d.ts +134 -0
  62. package/dist/project.d.ts +395 -0
  63. package/dist/providers.d.ts +37 -0
  64. package/dist/quota.d.ts +453 -0
  65. package/dist/recovery.d.ts +621 -0
  66. package/dist/request.d.ts +1492 -0
  67. package/dist/run.d.ts +779 -0
  68. package/dist/runtime.d.ts +212 -0
  69. package/dist/search.d.ts +375 -0
  70. package/dist/security.d.ts +534 -0
  71. package/dist/serve.d.ts +136 -0
  72. package/dist/session.d.ts +296 -0
  73. package/dist/storage.d.ts +53 -0
  74. package/dist/streaming.d.ts +1119 -0
  75. package/dist/swarm.d.ts +328 -0
  76. package/dist/tools.d.ts +170 -0
  77. package/dist/types.d.ts +8357 -0
  78. package/dist/utils.d.ts +82 -0
  79. package/dist/version.d.ts +7 -0
  80. package/dist/versionregistry.d.ts +406 -0
  81. package/dist/views.d.ts +579 -0
  82. package/dist/workbenchsession.d.ts +69 -0
  83. package/dist/workflow.d.ts +649 -0
  84. package/docs/readme.md +92 -0
  85. package/docs/schemas/antigravity.json +192 -0
  86. package/engine.ts +1524 -0
  87. package/environments.ts +1005 -0
  88. package/evidence.ts +643 -0
  89. package/export.ts +889 -0
  90. package/fingerprint.ts +1458 -0
  91. package/flow.ts +1190 -0
  92. package/gates.ts +307 -0
  93. package/gateway.ts +34 -0
  94. package/hardening.ts +191 -0
  95. package/headless.ts +369 -0
  96. package/http.ts +2110 -0
  97. package/identity.ts +246 -0
  98. package/ids.ts +26 -0
  99. package/index.ts +369 -0
  100. package/llm.ts +2682 -0
  101. package/mcp.ts +1835 -0
  102. package/{memory.js → memory.ts} +3834 -2310
  103. package/models.ts +3805 -0
  104. package/modes.ts +43 -0
  105. package/net.ts +1214 -0
  106. package/neutral.ts +362 -0
  107. package/node.ts +26 -0
  108. package/oauth.ts +2216 -0
  109. package/offscreen.ts +170 -0
  110. package/pack.ts +956 -0
  111. package/package.json +175 -82
  112. package/page.ts +7824 -0
  113. package/pagebridge.ts +1116 -0
  114. package/perf.ts +957 -0
  115. package/plan.ts +672 -0
  116. package/plugin.ts +76 -0
  117. package/{policy.js → policy.ts} +5073 -4679
  118. package/prisma.config.ts +27 -0
  119. package/progress.ts +1308 -0
  120. package/project.ts +1291 -0
  121. package/protocol.ts +4187 -0
  122. package/providers.ts +246 -0
  123. package/quota.ts +1887 -0
  124. package/recovery.ts +2433 -0
  125. package/request.ts +4482 -0
  126. package/run.ts +2135 -0
  127. package/runtime.ts +526 -0
  128. package/search.ts +1760 -0
  129. package/security.ts +1673 -0
  130. package/serve.ts +419 -0
  131. package/server.ts +5538 -0
  132. package/session.ts +1162 -0
  133. package/storage.ts +182 -0
  134. package/streaming.ts +4101 -0
  135. package/swarm.ts +884 -0
  136. package/sync.ts +56 -0
  137. package/tests/agentcert.test.ts +128 -0
  138. package/tests/agentfleet.test.ts +214 -0
  139. package/tests/agentreview.test.ts +241 -0
  140. package/tests/agentstream.test.ts +335 -0
  141. package/tests/agentwork.test.ts +356 -0
  142. package/tests/apifreeze.test.ts +290 -0
  143. package/tests/apimap.test.ts +112 -0
  144. package/tests/approvalgate.test.ts +175 -0
  145. package/tests/artifactmanifest.test.ts +204 -0
  146. package/tests/attentionfeed.test.ts +163 -0
  147. package/tests/backgroundruns.test.ts +100 -0
  148. package/tests/batchscheduling.test.ts +131 -0
  149. package/tests/blackboard.test.ts +238 -0
  150. package/tests/bridge.test.ts +1088 -0
  151. package/tests/browsercoverage.test.ts +134 -0
  152. package/tests/browserpolyfills.test.ts +124 -0
  153. package/tests/build.mjs +1260 -0
  154. package/tests/clientauth.test.ts +223 -0
  155. package/tests/clitools.test.ts +578 -0
  156. package/tests/confirmgates.test.ts +190 -0
  157. package/tests/containerpack.test.ts +143 -0
  158. package/tests/controlflow.test.ts +2120 -0
  159. package/tests/coordination.test.ts +345 -0
  160. package/tests/copyscreen.test.ts +139 -0
  161. package/tests/core.test.ts +417 -0
  162. package/tests/costcert.test.ts +95 -0
  163. package/tests/crossbrowser.test.ts +115 -0
  164. package/tests/cspaudit.test.ts +79 -0
  165. package/tests/dashdone.test.ts +615 -0
  166. package/tests/datagrid.test.ts +137 -0
  167. package/tests/doccheck.test.ts +107 -0
  168. package/tests/dombatch.test.ts +109 -0
  169. package/tests/emulation.test.ts +282 -0
  170. package/tests/environments.test.ts +259 -0
  171. package/tests/evidenceviews.test.ts +88 -0
  172. package/tests/exporttools.test.ts +185 -0
  173. package/tests/firefoxprep.test.ts +134 -0
  174. package/tests/flowlibrary.test.ts +242 -0
  175. package/tests/flowrun.test.ts +303 -0
  176. package/tests/forensics.test.ts +439 -0
  177. package/tests/gateway.test.ts +939 -0
  178. package/tests/headlesslib.test.ts +171 -0
  179. package/tests/httpstream.test.ts +277 -0
  180. package/tests/immutablelog.test.ts +157 -0
  181. package/tests/inboundguard.test.ts +177 -0
  182. package/tests/lazyload.test.ts +72 -0
  183. package/tests/librarymodes.test.ts +623 -0
  184. package/tests/llm.test.ts +696 -0
  185. package/tests/manifest.test.ts +226 -0
  186. package/tests/maskinputs.test.ts +150 -0
  187. package/tests/matrixverify.test.ts +111 -0
  188. package/tests/mavenpack.test.ts +75 -0
  189. package/tests/mcpserver.test.ts +704 -0
  190. package/tests/memory.test.ts +4155 -0
  191. package/tests/memorycare.test.ts +230 -0
  192. package/tests/migrateplan.test.ts +349 -0
  193. package/tests/minimization.test.ts +414 -0
  194. package/tests/modelroute.test.ts +112 -0
  195. package/tests/multiagent.test.ts +440 -0
  196. package/tests/nativebridge.test.ts +807 -0
  197. package/tests/navigation.test.ts +284 -0
  198. package/tests/nugetpack.test.ts +83 -0
  199. package/tests/orchestration.test.ts +449 -0
  200. package/tests/originpolicy.test.ts +405 -0
  201. package/tests/outputcompare.test.ts +97 -0
  202. package/tests/package.test.ts +91 -0
  203. package/tests/pagebridge.test.ts +5909 -0
  204. package/tests/pentest.test.ts +75 -0
  205. package/tests/perfrecords.test.ts +257 -0
  206. package/tests/permdiff.test.ts +85 -0
  207. package/tests/phishguard.test.ts +128 -0
  208. package/tests/pickerviews.test.ts +155 -0
  209. package/tests/pipelines.test.ts +381 -0
  210. package/tests/planlint.test.ts +240 -0
  211. package/tests/planreview.test.ts +383 -0
  212. package/tests/platformtargets.test.ts +56 -0
  213. package/tests/policy.test.ts +8284 -0
  214. package/tests/portability.test.ts +96 -0
  215. package/tests/progress.test.ts +1036 -0
  216. package/tests/promptlibrary.test.ts +116 -0
  217. package/tests/protocol.test.ts +4793 -0
  218. package/tests/publishingpipeline.test.ts +314 -0
  219. package/tests/quickactions.test.ts +164 -0
  220. package/tests/readiness.test.ts +78 -0
  221. package/tests/recipes.test.ts +163 -0
  222. package/tests/redactshots.test.ts +216 -0
  223. package/tests/registernvidiakeys.ts +51 -0
  224. package/tests/relayserve.test.ts +304 -0
  225. package/tests/releasenotes.test.ts +276 -0
  226. package/tests/resilience.test.ts +467 -0
  227. package/tests/resourceaware.test.ts +187 -0
  228. package/tests/runbudget.test.ts +125 -0
  229. package/tests/runhistory.test.ts +299 -0
  230. package/tests/runreplay.test.ts +113 -0
  231. package/tests/runresume.test.ts +184 -0
  232. package/tests/runstate.test.ts +288 -0
  233. package/tests/runtimeadapters.test.ts +251 -0
  234. package/tests/safariskeleton.test.ts +115 -0
  235. package/tests/sandboxframe.test.ts +196 -0
  236. package/tests/sbom.test.ts +105 -0
  237. package/tests/secretvault.test.ts +188 -0
  238. package/tests/selcache.test.ts +111 -0
  239. package/tests/sessioninterface.test.ts +791 -0
  240. package/tests/sessions.test.ts +591 -0
  241. package/tests/siteprefs.test.ts +228 -0
  242. package/tests/snapshotdelta.test.ts +165 -0
  243. package/tests/statusviews.test.ts +237 -0
  244. package/tests/stepmeter.test.ts +200 -0
  245. package/tests/streamparse.test.ts +163 -0
  246. package/tests/stylepruning.test.ts +90 -0
  247. package/tests/surfaces.test.ts +282 -0
  248. package/tests/sweep.test.ts +78 -0
  249. package/tests/syncbridge.test.ts +164 -0
  250. package/tests/taskqueue.test.ts +206 -0
  251. package/tests/toolcalls.test.ts +336 -0
  252. package/tests/toolcatalog.test.ts +201 -0
  253. package/tests/torture-agent.test.ts +706 -0
  254. package/tests/torture-auth.test.ts +461 -0
  255. package/tests/torture-commands.test.ts +895 -0
  256. package/tests/torture-data.test.ts +923 -0
  257. package/tests/torture-environments.test.ts +285 -0
  258. package/tests/torture-export.test.ts +263 -0
  259. package/tests/torture-http.test.ts +1379 -0
  260. package/tests/torture-llm.test.ts +808 -0
  261. package/tests/torture-memory.test.ts +1084 -0
  262. package/tests/torture-plan.test.ts +829 -0
  263. package/tests/torture-run.test.ts +626 -0
  264. package/tests/torture-session.test.ts +928 -0
  265. package/tests/torture-swarm.test.ts +1245 -0
  266. package/tests/torture-tools.test.ts +964 -0
  267. package/tests/torture-workflow.test.ts +2354 -0
  268. package/tests/tourviews.test.ts +52 -0
  269. package/tests/transparency.test.ts +147 -0
  270. package/tests/trigger.test.ts +941 -0
  271. package/tests/v1sunset.test.ts +428 -0
  272. package/tests/virtlist.test.ts +94 -0
  273. package/tests/vision.test.ts +540 -0
  274. package/tests/vsixpack.test.ts +145 -0
  275. package/tests/webapi.test.ts +523 -0
  276. package/tests/workflow.test.ts +1785 -0
  277. package/tests/workfloweditor.test.ts +759 -0
  278. package/tests/xpipack.test.ts +128 -0
  279. package/tools.ts +734 -0
  280. package/types.ts +9908 -0
  281. package/umd.ts +9 -0
  282. package/utils.ts +249 -0
  283. package/version.ts +8 -0
  284. package/versionregistry.ts +1310 -0
  285. package/views.ts +2153 -0
  286. package/vitest.config.ts +12 -0
  287. package/web/App.tsx +78 -0
  288. package/web/README.md +47 -0
  289. package/web/capacitor.config.ts +46 -0
  290. package/web/const.ts +19 -0
  291. package/web/control.shell.tsx +66 -0
  292. package/web/dashboardpage.ts +554 -0
  293. package/web/db.ts +493 -0
  294. package/web/design.html +541 -0
  295. package/web/gatewayview/Gateway.tsx +345 -0
  296. package/web/gatewayview/config.ts +1042 -0
  297. package/web/gatewayview/definition.ts +174 -0
  298. package/web/icons.ts +15 -0
  299. package/{manifest.json → web/manifest.json} +1 -1
  300. package/web/optionspage.ts +691 -0
  301. package/web/popup.ts +1651 -0
  302. package/web/schema.prisma +176 -0
  303. package/web/sidepanel.ts +7941 -0
  304. package/web/sitemanifest.json +13 -0
  305. package/web/terminal-ui.tsx +622 -0
  306. package/web/transparencypage.ts +541 -0
  307. package/web/vite.config.ts +39 -0
  308. package/web/workspace.ts +23 -0
  309. package/workbenchmemory.ts +104 -0
  310. package/workbenchsession.ts +304 -0
  311. package/workflow.ts +4495 -0
  312. package/bridge.d.ts.map +0 -1
  313. package/bridge.js +0 -1877
  314. package/bun.d.ts.map +0 -1
  315. package/bun.js +0 -52329
  316. package/caps/background.json +0 -712
  317. package/caps/cli.json +0 -360
  318. package/caps/library.json +0 -3611
  319. package/caps/mcp.json +0 -126
  320. package/caps/pagebridge.json +0 -377
  321. package/caps/popup.json +0 -51
  322. package/caps/sidepanel.json +0 -522
  323. package/checksums.txt +0 -142
  324. package/cli.d.ts.map +0 -1
  325. package/companion.d.ts.map +0 -1
  326. package/companion.js +0 -389
  327. package/crossbrowser.d.ts.map +0 -1
  328. package/crossbrowser.js +0 -1191
  329. package/dashdone.d.ts.map +0 -1
  330. package/dashdone.js +0 -368
  331. package/deno.d.ts.map +0 -1
  332. package/deno.js +0 -52325
  333. package/devthink.umd.js +0 -52346
  334. package/fixtures/bun.ts +0 -7
  335. package/fixtures/cjs.js +0 -6
  336. package/fixtures/deno.ts +0 -6
  337. package/fixtures/example-org-pagestate.json +0 -22
  338. package/fixtures/importers/automa-workflow.json +0 -18
  339. package/fixtures/importers/selenium-side.json +0 -20
  340. package/fixtures/importers/tabular-plan.csv +0 -7
  341. package/fixtures/importers/uivision-macro.json +0 -10
  342. package/fixtures/importers/v1-plan.json +0 -13
  343. package/fixtures/mcp-client.mjs +0 -14
  344. package/fixtures/pages/checkout.html +0 -192
  345. package/fixtures/pages/dashboard.html +0 -110
  346. package/fixtures/pages/feed.html +0 -113
  347. package/fixtures/pages/product-grid.html +0 -150
  348. package/fixtures/plans/form-inventory-plan.json +0 -11
  349. package/fixtures/plans/release-notes-plan.json +0 -11
  350. package/fixtures/recipes/agentscompete.json +0 -11
  351. package/fixtures/recipes/agentsforms.json +0 -11
  352. package/fixtures/recipes/agentsmonitor.json +0 -11
  353. package/fixtures/recipes/agentsreview.json +0 -29
  354. package/fixtures/recipes/agentswarm.json +0 -11
  355. package/fixtures/recipes/fillcalendar.json +0 -12
  356. package/fixtures/recipes/fillcheckout.json +0 -13
  357. package/fixtures/recipes/filldependentdropdowns.json +0 -12
  358. package/fixtures/recipes/fillfromcsv.json +0 -13
  359. package/fixtures/recipes/fillloginform.json +0 -12
  360. package/fixtures/recipes/fillmultistepwizard.json +0 -13
  361. package/fixtures/recipes/fillregistration.json +0 -12
  362. package/fixtures/recipes/fillsearchfilters.json +0 -12
  363. package/fixtures/recipes/filltypeahead.json +0 -11
  364. package/fixtures/recipes/monitoralerts.json +0 -12
  365. package/fixtures/recipes/monitoravailability.json +0 -11
  366. package/fixtures/recipes/monitornetworkquiet.json +0 -12
  367. package/fixtures/recipes/monitorpagechanges.json +0 -11
  368. package/fixtures/recipes/monitorpricechange.json +0 -11
  369. package/fixtures/recipes/monitorschedule.json +0 -12
  370. package/fixtures/recipes/scrapedynamicprices.json +0 -13
  371. package/fixtures/recipes/scrapeimagegallery.json +0 -12
  372. package/fixtures/recipes/scrapeinfinitefeed.json +0 -13
  373. package/fixtures/recipes/scrapenestedlists.json +0 -12
  374. package/fixtures/recipes/scrapeproductgrid.json +0 -12
  375. package/fixtures/recipes/scrapereviews.json +0 -12
  376. package/fixtures/recipes/scrapesearchresults.json +0 -12
  377. package/fixtures/recipes/scrapetablepagination.json +0 -12
  378. package/fixtures/recipes/testaccessibility.json +0 -34
  379. package/fixtures/recipes/testconsoleerrors.json +0 -12
  380. package/fixtures/recipes/testdeeplinks.json +0 -12
  381. package/fixtures/recipes/testformvalidation.json +0 -13
  382. package/fixtures/recipes/testlayoutshift.json +0 -12
  383. package/fixtures/recipes/testlinkcheck.json +0 -12
  384. package/fixtures/recipes/testloadtiming.json +0 -12
  385. package/fixtures/recipes/testvisualdiff.json +0 -12
  386. package/fixtures/workflows/changelog-digest-workflow.json +0 -13
  387. package/fixtures/workflows/form-survey-workflow.json +0 -13
  388. package/gallery.json +0 -706
  389. package/hardening.d.ts.map +0 -1
  390. package/hardening.js +0 -188
  391. package/headless.d.ts.map +0 -1
  392. package/headless.js +0 -11522
  393. package/http.d.ts.map +0 -1
  394. package/http.js +0 -2165
  395. package/index.cjs +0 -54682
  396. package/index.d.ts.map +0 -1
  397. package/index.js +0 -52310
  398. package/index.neutral.js +0 -46343
  399. package/mcp.d.ts.map +0 -1
  400. package/mcp.js +0 -20515
  401. package/memory.d.ts.map +0 -1
  402. package/nativehost.template.json +0 -10
  403. package/node.cjs +0 -54686
  404. package/node.d.ts.map +0 -1
  405. package/pack.d.ts.map +0 -1
  406. package/pack.js +0 -805
  407. package/policy.d.ts.map +0 -1
  408. package/progress.d.ts.map +0 -1
  409. package/progress.js +0 -645
  410. package/protocol.d.ts.map +0 -1
  411. package/protocol.js +0 -8334
  412. package/schemas/audit.schema.json +0 -226
  413. package/schemas/capability.schema.json +0 -113
  414. package/schemas/envelope.schema.json +0 -162
  415. package/schemas/memory.schema.json +0 -51
  416. package/schemas/observation.schema.json +0 -113
  417. package/schemas/plan.schema.json +0 -208
  418. package/schemas/progress.schema.json +0 -126
  419. package/schemas/proposal.schema.json +0 -68
  420. package/schemas/session.schema.json +0 -82
  421. package/schemas/tool.schema.json +0 -94
  422. package/server.d.ts.map +0 -1
  423. package/server.js +0 -28877
  424. package/umd-example.html +0 -18
  425. package/umd.d.ts.map +0 -1
  426. /package/{bun.d.ts → dist/bun.d.ts} +0 -0
  427. /package/{cli.d.ts → dist/cli.d.ts} +0 -0
  428. /package/{companion.d.ts → dist/companion.d.ts} +0 -0
  429. /package/{crossbrowser.d.ts → dist/crossbrowser.d.ts} +0 -0
  430. /package/{dashdone.d.ts → dist/dashdone.d.ts} +0 -0
  431. /package/{deno.d.ts → dist/deno.d.ts} +0 -0
  432. /package/{hardening.d.ts → dist/hardening.d.ts} +0 -0
  433. /package/{headless.d.ts → dist/headless.d.ts} +0 -0
  434. /package/{http.d.ts → dist/http.d.ts} +0 -0
  435. /package/{index.d.ts → dist/index.d.ts} +0 -0
  436. /package/{mcp.d.ts → dist/mcp.d.ts} +0 -0
  437. /package/{memory.d.ts → dist/memory.d.ts} +0 -0
  438. /package/{node.d.ts → dist/node.d.ts} +0 -0
  439. /package/{pack.d.ts → dist/pack.d.ts} +0 -0
  440. /package/{policy.d.ts → dist/policy.d.ts} +0 -0
  441. /package/{progress.d.ts → dist/progress.d.ts} +0 -0
  442. /package/{protocol.d.ts → dist/protocol.d.ts} +0 -0
  443. /package/{server.d.ts → dist/server.d.ts} +0 -0
  444. /package/{umd.d.ts → dist/umd.d.ts} +0 -0
@@ -0,0 +1,345 @@
1
+ /**
2
+ * gatewayview page — the embedded gateway console of the devthink workbench.
3
+ *
4
+ * the merged repository embeds the gateway engine at its root (the library
5
+ * the gateway lineage shipped) and this page is its browser face: the shipped
6
+ * v1–v5 catalog, the auth methods, the 2-calls thinking budgets, the library
7
+ * usage and the structure of the merged repository, with one detail view per
8
+ * version. every row derives from the single catalog (config.ts — the user
9
+ * customization layer the engine reads); no view keeps a second copy of the
10
+ * definitions.
11
+ */
12
+ import { ArrowLeft, KeyRound, Network, RefreshCcw, ShieldCheck } from "lucide-react";
13
+ import { Link, useRoute } from "wouter";
14
+ import { ControlShell } from "@/control.shell";
15
+ import { config } from "./config";
16
+ import type { gatewayconfig } from "./definition";
17
+
18
+ /** the seven routes every version generates (the engine contract — one handler per route). */
19
+ const versionroutes = ["chat/completions", "completions", "embeddings", "keys", "messages", "models", "responses"];
20
+
21
+ /** the auth method families of the 12 supported methods (the examples name the providers each covers). */
22
+ const authmethods = [
23
+ { method: "bearer", examples: "openai nvidia groq mistral deepseek kimi openrouter" },
24
+ { method: "apikeyheader", examples: "anthropic x-api-key gemini x-goog-api-key azure api-key" },
25
+ { method: "queryparam", examples: "legacy google key api_key params" },
26
+ { method: "basic", examples: "generic rest base64 user pass" },
27
+ { method: "oauth2clientcredentials", examples: "ibm watsonx azure entra auth0" },
28
+ { method: "jwtsign", examples: "zhipu bigmodel hs256 keyid secret" },
29
+ { method: "sigv4", examples: "aws bedrock aws4-hmac-sha256" },
30
+ { method: "anonymous", examples: "opencode zen kilo ollama keyless" },
31
+ ];
32
+
33
+ /** the display copy of each thinking level (the budgets derive from the catalog). */
34
+ const thinkingcopy: Record<string, string> = {
35
+ none: "no thinking",
36
+ minimal: "quick reasoning",
37
+ low: "light reasoning",
38
+ medium: "balanced",
39
+ high: "deep reasoning default",
40
+ xhigh: "extra deep",
41
+ max: "maximum",
42
+ };
43
+
44
+ /** the live/paused badge of one version derived from its paused kill-switch. */
45
+ function versionstatus(version: gatewayconfig): { badge: string; color: string } {
46
+ return version.paused ? { badge: "paused", color: "#f59e0b" } : { badge: "live", color: "#10b981" };
47
+ }
48
+
49
+ /** the rotation pattern of one version: its metamodel pattern or its note. */
50
+ function versionpattern(version: gatewayconfig): string {
51
+ return version.metamodel.pattern ?? version.note ?? "";
52
+ }
53
+
54
+ /** the model line of one version card: the catalog count and the masked meta face. */
55
+ function versionmodelsline(version: gatewayconfig): string {
56
+ return `${version.models.length} models · ${version.metamodel.id} meta`;
57
+ }
58
+
59
+ /** the thinking levels derived from the v1 budgets — the single catalog is the source, never a copied list. */
60
+ const thinkinglevels = Object.entries(config.versions.v1?.thinking?.budgets ?? {}).map(([level, budget]) => ({
61
+ level,
62
+ budget: String(budget),
63
+ desc: thinkingcopy[level] ?? "",
64
+ }));
65
+
66
+ /** the compact definition summary the explorer renders: what the engine would load, one line per version. */
67
+ const definitionsummary = {
68
+ name: config.name,
69
+ description: config.description,
70
+ versions: Object.fromEntries(
71
+ Object.entries(config.versions).map(([id, version]) => [
72
+ id,
73
+ {
74
+ provider: version.providername,
75
+ upstreams: version.upstreams.map((upstream) => upstream.name),
76
+ auth: version.auth.mode,
77
+ models: version.models.length,
78
+ defaultmodel: version.defaultmodel,
79
+ rotation: version.rotation?.mode ?? "fixed",
80
+ metamodel: version.metamodel.id,
81
+ paused: version.paused === true,
82
+ },
83
+ ]),
84
+ ),
85
+ };
86
+
87
+ /** the library usage block the page renders beside the catalog. */
88
+ const usageblock = [
89
+ "# scaffold a new gateway",
90
+ "npx @wenathlan/devthink gateway init",
91
+ "",
92
+ "# add a version with any baseurl any models any auth",
93
+ "npx @wenathlan/devthink gateway add v6",
94
+ "",
95
+ "# register keys for rotation",
96
+ "npx @wenathlan/devthink gateway keys v6",
97
+ "",
98
+ "# start the server",
99
+ "npx @wenathlan/devthink gateway serve --port 3001",
100
+ "",
101
+ "# or embed the library",
102
+ 'import { createversion, loadconfig } from "@wenathlan/devthink"',
103
+ "const def = await loadconfig()",
104
+ "const handlers = createversion(def.versions.v1)",
105
+ "const response = await handlers.handlechatcompletions(request)",
106
+ ].join("\n");
107
+
108
+ /** the merged repository structure the page documents. */
109
+ const structureblock = `devthink/
110
+ gateway-index.ts # the library barrel — the ./gateway-lib surface
111
+ engine.ts # universal engine — routes, rotation, retry, fallback
112
+ gateway-http.ts # the http transport — hono server + sse pipeline
113
+ gateway-cli.ts # the scaffolding cli (init add keys serve export)
114
+ gateway-configloader.ts # config validation + the standard web/config.* probe
115
+ gateway-auth.ts # the 12 auth methods + key resolution
116
+ database.ts # prisma + libsql client
117
+ types.ts # the public types of every family (gateway section)
118
+ web/ # the design room of the whole project
119
+ App.tsx # the workbench entry — one router, one mount
120
+ gatewayview/ # this console — the embedded gateway face
121
+ Gateway.tsx # this page (self-contained, no main.tsx)
122
+ config.ts # the shipped v1–v5 definitions (data only)
123
+ definition.ts # the view-side structural contract
124
+ schema.prisma # the database schema
125
+ prisma/ # the local sqlite home — web/prisma/devthink.db
126
+ console/ # the cli design page
127
+ capacitor.config.ts # the android wrapper — same interface
128
+ vercel.json netlify.toml # platform manifests — deploy from here
129
+ prisma.config.ts # prisma 7 config (datasource url, client output)
130
+ Dockerfile # the one container file
131
+ .github/workflows/ # ci release publish npm maven nuget ghcr security maintenance
132
+ tests/ # vitest tests flat *.test.ts
133
+ package.json # @wenathlan/devthink public`;
134
+
135
+ /** the gateway console page: the overview or the detail view of one version. */
136
+ export default function Gateway() {
137
+ const [detail, params] = useRoute("/gateway/v/:versionId");
138
+ const version = detail ? config.versions[params?.versionId ?? ""] : undefined;
139
+
140
+ if (detail) {
141
+ return (
142
+ <ControlShell
143
+ eyebrow="embedded gateway console"
144
+ title={version ? `${version.id} — ${version.providername}` : "version not found"}
145
+ summary={
146
+ version
147
+ ? `${versionpattern(version)} — ${version.note ?? ""}`
148
+ : "The requested version stays outside the shipped catalog; open the gateway overview for the configured versions."
149
+ }
150
+ >
151
+ {version ? (
152
+ <>
153
+ <div className="gateway-toolbar">
154
+ <Link href="/gateway" className="gateway-back">
155
+ <ArrowLeft size={14} />
156
+ gateway overview
157
+ </Link>
158
+ <span
159
+ className="gateway-badge"
160
+ style={{
161
+ color: versionstatus(version).color,
162
+ borderColor: `${versionstatus(version).color}44`,
163
+ background: `${versionstatus(version).color}22`,
164
+ }}
165
+ >
166
+ {versionstatus(version).badge}
167
+ </span>
168
+ </div>
169
+ <section className="gateway-panel" aria-labelledby="gatewayroutestitle">
170
+ <h2 id="gatewayroutestitle">
171
+ <Network size={16} />
172
+ routes — 7 per version
173
+ </h2>
174
+ <div className="gateway-routes">
175
+ {versionroutes.map((route) => (
176
+ <article key={route}>
177
+ <span>post /api/{version.id}</span>
178
+ <code>/{route}</code>
179
+ </article>
180
+ ))}
181
+ </div>
182
+ <p className="gateway-note">
183
+ get /api/{version.id}/{"{route}"} returns the version info descriptor.
184
+ </p>
185
+ </section>
186
+ <section className="gateway-panel" aria-labelledby="gatewaymodelstitle">
187
+ <h2 id="gatewaymodelstitle">
188
+ <KeyRound size={16} />
189
+ models — {version.models.length} configured
190
+ </h2>
191
+ <pre className="gateway-pre">
192
+ {version.models
193
+ .map(
194
+ (model) =>
195
+ `${model.id.padEnd(52)} ${Math.round(model.context / 1024)}k ctx ${Math.round(model.maxoutput / 1024) || 1}k out${model.free ? " free" : ""}${model.vision ? " vision" : ""}${model.reasoning ? "" : " no-reasoning"}`,
196
+ )
197
+ .join("\n")}
198
+ </pre>
199
+ </section>
200
+ <section className="gateway-panel" aria-labelledby="gatewaypolicytitle">
201
+ <h2 id="gatewaypolicytitle">
202
+ <RefreshCcw size={16} />
203
+ policy — auth, rotation and retry
204
+ </h2>
205
+ <div className="gateway-policy">
206
+ <article>
207
+ <span>auth</span>
208
+ <strong>
209
+ {version.auth.mode}
210
+ {version.auth.required ? " · required" : " · optional"}
211
+ </strong>
212
+ <small>{version.auth.keysources?.join(" ") ?? "keyless"}</small>
213
+ </article>
214
+ <article>
215
+ <span>rotation</span>
216
+ <strong>{version.rotation?.mode ?? "fixed"}</strong>
217
+ <small>
218
+ {version.rotation
219
+ ? `${version.rotation.models.length} models every ${version.rotation.everynmessages ?? 1} message${(version.rotation.everynmessages ?? 1) === 1 ? "" : "s"}`
220
+ : "the default model answers every call"}
221
+ </small>
222
+ </article>
223
+ <article>
224
+ <span>retry</span>
225
+ <strong>
226
+ {version.retry?.fallback === "crossprovider"
227
+ ? "cross-provider fallback"
228
+ : `max ${version.retry?.maxretries ?? 0}`}
229
+ </strong>
230
+ <small>
231
+ {version.retry?.statuses?.length
232
+ ? `retry on ${version.retry.statuses.join(" ")}`
233
+ : "no status retries"}
234
+ </small>
235
+ </article>
236
+ <article>
237
+ <span>meta</span>
238
+ <strong>{version.metamodel.id}</strong>
239
+ <small>
240
+ {version.metamodel.maskupstreammodel ? "upstream models masked" : "upstream models shown"}
241
+ </small>
242
+ </article>
243
+ </div>
244
+ </section>
245
+ </>
246
+ ) : (
247
+ <div className="control-empty">
248
+ <h2>version {params?.versionId} not found</h2>
249
+ <p>
250
+ The shipped catalog carries {Object.keys(config.versions).length} versions; the requested id stays outside
251
+ it.
252
+ </p>
253
+ </div>
254
+ )}
255
+ </ControlShell>
256
+ );
257
+ }
258
+
259
+ return (
260
+ <ControlShell
261
+ eyebrow="embedded gateway console"
262
+ title="Every provider behind one local door."
263
+ summary="The gateway engine the merged devthink embeds: the shipped v1–v5 catalog — any llm, any baseurl, any api key — with the 12 auth methods, the 2-calls thinking pattern and the rotation, retry and fallback policies. The library lives at the repository root; this console renders the shipped definition."
264
+ >
265
+ <section className="gateway-panel" aria-labelledby="gatewayversionstitle">
266
+ <h2 id="gatewayversionstitle">
267
+ <Network size={16} />
268
+ versions — {Object.keys(config.versions).length} configured
269
+ </h2>
270
+ <div className="gateway-versions">
271
+ {Object.values(config.versions).map((version) => (
272
+ <Link
273
+ key={version.id}
274
+ href={`/gateway/v/${version.id}`}
275
+ className="gateway-version"
276
+ aria-label={`open the ${version.id} detail`}
277
+ >
278
+ <span className="gateway-version__id">{version.id}</span>
279
+ <span
280
+ className="gateway-badge"
281
+ style={{
282
+ color: versionstatus(version).color,
283
+ borderColor: `${versionstatus(version).color}44`,
284
+ background: `${versionstatus(version).color}22`,
285
+ }}
286
+ >
287
+ {versionstatus(version).badge}
288
+ </span>
289
+ <span className="gateway-version__provider">{version.providername}</span>
290
+ <span className="gateway-version__pattern">{versionpattern(version)}</span>
291
+ <span className="gateway-version__models">{versionmodelsline(version)}</span>
292
+ </Link>
293
+ ))}
294
+ </div>
295
+ </section>
296
+ <section className="gateway-panel" aria-labelledby="gatewayauthtitle">
297
+ <h2 id="gatewayauthtitle">
298
+ <ShieldCheck size={16} />
299
+ auth methods — 12 supported
300
+ </h2>
301
+ <div className="gateway-auth">
302
+ {authmethods.map((auth) => (
303
+ <article key={auth.method}>
304
+ <strong>{auth.method}</strong>
305
+ <span>{auth.examples}</span>
306
+ </article>
307
+ ))}
308
+ </div>
309
+ </section>
310
+ <section className="gateway-panel" aria-labelledby="gatewaythinkingtitle">
311
+ <h2 id="gatewaythinkingtitle">
312
+ <RefreshCcw size={16} />
313
+ thinking levels — the 2-calls pattern
314
+ </h2>
315
+ <div className="gateway-thinking">
316
+ {thinkinglevels.map((level) => (
317
+ <article key={level.level}>
318
+ <strong>{level.level}</strong>
319
+ <span className="gateway-thinking__budget">{level.budget}</span>
320
+ <small>{level.desc}</small>
321
+ </article>
322
+ ))}
323
+ </div>
324
+ </section>
325
+ <section className="gateway-panel" aria-labelledby="gatewayusagetitle">
326
+ <h2 id="gatewayusagetitle">
327
+ <KeyRound size={16} />
328
+ library usage
329
+ </h2>
330
+ <pre className="gateway-pre">{usageblock}</pre>
331
+ </section>
332
+ <section className="gateway-panel" aria-labelledby="gatewaystructuretitle">
333
+ <h2 id="gatewaystructuretitle">
334
+ <Network size={16} />
335
+ structure — the library at root, the design in web
336
+ </h2>
337
+ <pre className="gateway-pre">{structureblock}</pre>
338
+ </section>
339
+ <details className="gateway-explorer">
340
+ <summary>the loaded definition — the compact summary of the shipped catalog</summary>
341
+ <pre className="gateway-pre">{JSON.stringify(definitionsummary, null, 2)}</pre>
342
+ </details>
343
+ </ControlShell>
344
+ );
345
+ }