@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.
- package/CHANGELOG.md +27 -0
- package/accounts.ts +2087 -0
- package/agent.ts +2331 -0
- package/antigravity.ts +2139 -0
- package/apifreeze.ts +4146 -0
- package/auth.ts +642 -0
- package/background.ts +16837 -0
- package/bridge.ts +2080 -0
- package/build.ts +54 -0
- package/bun.ts +26 -0
- package/capture.ts +1614 -0
- package/checksecrets.ts +72 -0
- package/cjs.ts +9 -0
- package/cli.ts +3500 -0
- package/commands.ts +1101 -0
- package/companion.ts +450 -0
- package/compatibility.ts +37 -0
- package/config.ts +3137 -0
- package/constants.ts +943 -0
- package/core.ts +1473 -0
- package/crossbrowser.ts +1359 -0
- package/dashdone.ts +605 -0
- package/data.ts +943 -0
- package/database.ts +133 -0
- package/debug.ts +850 -0
- package/deno.ts +27 -0
- package/devthink.ts +707 -0
- package/dist/accounts.d.ts +409 -0
- package/dist/agent.d.ts +837 -0
- package/dist/antigravity.d.ts +380 -0
- package/dist/apifreeze.d.ts +113 -0
- package/dist/auth.d.ts +224 -0
- package/{bridge.d.ts → dist/bridge.d.ts} +1 -1
- package/dist/capture.d.ts +595 -0
- package/dist/cjs.d.ts +6 -0
- package/{cli.js → dist/cli.js} +2 -2
- package/dist/commands.d.ts +310 -0
- package/dist/compatibility.d.ts +17 -0
- package/dist/config.d.ts +1853 -0
- package/dist/constants.d.ts +637 -0
- package/dist/core.d.ts +361 -0
- package/dist/data.d.ts +330 -0
- package/dist/database.d.ts +24 -0
- package/dist/debug.d.ts +270 -0
- package/dist/engine.d.ts +74 -0
- package/dist/environments.d.ts +244 -0
- package/dist/evidence.d.ts +277 -0
- package/dist/export.d.ts +311 -0
- package/dist/fingerprint.d.ts +594 -0
- package/dist/flow.d.ts +300 -0
- package/dist/gates.d.ts +103 -0
- package/dist/identity.d.ts +51 -0
- package/dist/ids.d.ts +7 -0
- package/dist/llm.d.ts +652 -0
- package/dist/models.d.ts +1807 -0
- package/dist/net.d.ts +325 -0
- package/dist/neutral.d.ts +41 -0
- package/dist/oauth.d.ts +703 -0
- package/dist/page.d.ts +1166 -0
- package/dist/perf.d.ts +481 -0
- package/dist/plan.d.ts +134 -0
- package/dist/project.d.ts +395 -0
- package/dist/providers.d.ts +37 -0
- package/dist/quota.d.ts +453 -0
- package/dist/recovery.d.ts +621 -0
- package/dist/request.d.ts +1492 -0
- package/dist/run.d.ts +779 -0
- package/dist/runtime.d.ts +212 -0
- package/dist/search.d.ts +375 -0
- package/dist/security.d.ts +534 -0
- package/dist/serve.d.ts +136 -0
- package/dist/session.d.ts +296 -0
- package/dist/storage.d.ts +53 -0
- package/dist/streaming.d.ts +1119 -0
- package/dist/swarm.d.ts +328 -0
- package/dist/tools.d.ts +170 -0
- package/dist/types.d.ts +8357 -0
- package/dist/utils.d.ts +82 -0
- package/dist/version.d.ts +7 -0
- package/dist/versionregistry.d.ts +406 -0
- package/dist/views.d.ts +579 -0
- package/dist/workbenchsession.d.ts +69 -0
- package/dist/workflow.d.ts +649 -0
- package/docs/readme.md +92 -0
- package/docs/schemas/antigravity.json +192 -0
- package/engine.ts +1524 -0
- package/environments.ts +1005 -0
- package/evidence.ts +643 -0
- package/export.ts +889 -0
- package/fingerprint.ts +1458 -0
- package/flow.ts +1190 -0
- package/gates.ts +307 -0
- package/gateway.ts +34 -0
- package/hardening.ts +191 -0
- package/headless.ts +369 -0
- package/http.ts +2110 -0
- package/identity.ts +246 -0
- package/ids.ts +26 -0
- package/index.ts +369 -0
- package/llm.ts +2682 -0
- package/mcp.ts +1835 -0
- package/{memory.js → memory.ts} +3834 -2310
- package/models.ts +3805 -0
- package/modes.ts +43 -0
- package/net.ts +1214 -0
- package/neutral.ts +362 -0
- package/node.ts +26 -0
- package/oauth.ts +2216 -0
- package/offscreen.ts +170 -0
- package/pack.ts +956 -0
- package/package.json +175 -82
- package/page.ts +7824 -0
- package/pagebridge.ts +1116 -0
- package/perf.ts +957 -0
- package/plan.ts +672 -0
- package/plugin.ts +76 -0
- package/{policy.js → policy.ts} +5073 -4679
- package/prisma.config.ts +27 -0
- package/progress.ts +1308 -0
- package/project.ts +1291 -0
- package/protocol.ts +4187 -0
- package/providers.ts +246 -0
- package/quota.ts +1887 -0
- package/recovery.ts +2433 -0
- package/request.ts +4482 -0
- package/run.ts +2135 -0
- package/runtime.ts +526 -0
- package/search.ts +1760 -0
- package/security.ts +1673 -0
- package/serve.ts +419 -0
- package/server.ts +5538 -0
- package/session.ts +1162 -0
- package/storage.ts +182 -0
- package/streaming.ts +4101 -0
- package/swarm.ts +884 -0
- package/sync.ts +56 -0
- package/tests/agentcert.test.ts +128 -0
- package/tests/agentfleet.test.ts +214 -0
- package/tests/agentreview.test.ts +241 -0
- package/tests/agentstream.test.ts +335 -0
- package/tests/agentwork.test.ts +356 -0
- package/tests/apifreeze.test.ts +290 -0
- package/tests/apimap.test.ts +112 -0
- package/tests/approvalgate.test.ts +175 -0
- package/tests/artifactmanifest.test.ts +204 -0
- package/tests/attentionfeed.test.ts +163 -0
- package/tests/backgroundruns.test.ts +100 -0
- package/tests/batchscheduling.test.ts +131 -0
- package/tests/blackboard.test.ts +238 -0
- package/tests/bridge.test.ts +1088 -0
- package/tests/browsercoverage.test.ts +134 -0
- package/tests/browserpolyfills.test.ts +124 -0
- package/tests/build.mjs +1260 -0
- package/tests/clientauth.test.ts +223 -0
- package/tests/clitools.test.ts +578 -0
- package/tests/confirmgates.test.ts +190 -0
- package/tests/containerpack.test.ts +143 -0
- package/tests/controlflow.test.ts +2120 -0
- package/tests/coordination.test.ts +345 -0
- package/tests/copyscreen.test.ts +139 -0
- package/tests/core.test.ts +417 -0
- package/tests/costcert.test.ts +95 -0
- package/tests/crossbrowser.test.ts +115 -0
- package/tests/cspaudit.test.ts +79 -0
- package/tests/dashdone.test.ts +615 -0
- package/tests/datagrid.test.ts +137 -0
- package/tests/doccheck.test.ts +107 -0
- package/tests/dombatch.test.ts +109 -0
- package/tests/emulation.test.ts +282 -0
- package/tests/environments.test.ts +259 -0
- package/tests/evidenceviews.test.ts +88 -0
- package/tests/exporttools.test.ts +185 -0
- package/tests/firefoxprep.test.ts +134 -0
- package/tests/flowlibrary.test.ts +242 -0
- package/tests/flowrun.test.ts +303 -0
- package/tests/forensics.test.ts +439 -0
- package/tests/gateway.test.ts +939 -0
- package/tests/headlesslib.test.ts +171 -0
- package/tests/httpstream.test.ts +277 -0
- package/tests/immutablelog.test.ts +157 -0
- package/tests/inboundguard.test.ts +177 -0
- package/tests/lazyload.test.ts +72 -0
- package/tests/librarymodes.test.ts +623 -0
- package/tests/llm.test.ts +696 -0
- package/tests/manifest.test.ts +226 -0
- package/tests/maskinputs.test.ts +150 -0
- package/tests/matrixverify.test.ts +111 -0
- package/tests/mavenpack.test.ts +75 -0
- package/tests/mcpserver.test.ts +704 -0
- package/tests/memory.test.ts +4155 -0
- package/tests/memorycare.test.ts +230 -0
- package/tests/migrateplan.test.ts +349 -0
- package/tests/minimization.test.ts +414 -0
- package/tests/modelroute.test.ts +112 -0
- package/tests/multiagent.test.ts +440 -0
- package/tests/nativebridge.test.ts +807 -0
- package/tests/navigation.test.ts +284 -0
- package/tests/nugetpack.test.ts +83 -0
- package/tests/orchestration.test.ts +449 -0
- package/tests/originpolicy.test.ts +405 -0
- package/tests/outputcompare.test.ts +97 -0
- package/tests/package.test.ts +91 -0
- package/tests/pagebridge.test.ts +5909 -0
- package/tests/pentest.test.ts +75 -0
- package/tests/perfrecords.test.ts +257 -0
- package/tests/permdiff.test.ts +85 -0
- package/tests/phishguard.test.ts +128 -0
- package/tests/pickerviews.test.ts +155 -0
- package/tests/pipelines.test.ts +381 -0
- package/tests/planlint.test.ts +240 -0
- package/tests/planreview.test.ts +383 -0
- package/tests/platformtargets.test.ts +56 -0
- package/tests/policy.test.ts +8284 -0
- package/tests/portability.test.ts +96 -0
- package/tests/progress.test.ts +1036 -0
- package/tests/promptlibrary.test.ts +116 -0
- package/tests/protocol.test.ts +4793 -0
- package/tests/publishingpipeline.test.ts +314 -0
- package/tests/quickactions.test.ts +164 -0
- package/tests/readiness.test.ts +78 -0
- package/tests/recipes.test.ts +163 -0
- package/tests/redactshots.test.ts +216 -0
- package/tests/registernvidiakeys.ts +51 -0
- package/tests/relayserve.test.ts +304 -0
- package/tests/releasenotes.test.ts +276 -0
- package/tests/resilience.test.ts +467 -0
- package/tests/resourceaware.test.ts +187 -0
- package/tests/runbudget.test.ts +125 -0
- package/tests/runhistory.test.ts +299 -0
- package/tests/runreplay.test.ts +113 -0
- package/tests/runresume.test.ts +184 -0
- package/tests/runstate.test.ts +288 -0
- package/tests/runtimeadapters.test.ts +251 -0
- package/tests/safariskeleton.test.ts +115 -0
- package/tests/sandboxframe.test.ts +196 -0
- package/tests/sbom.test.ts +105 -0
- package/tests/secretvault.test.ts +188 -0
- package/tests/selcache.test.ts +111 -0
- package/tests/sessioninterface.test.ts +791 -0
- package/tests/sessions.test.ts +591 -0
- package/tests/siteprefs.test.ts +228 -0
- package/tests/snapshotdelta.test.ts +165 -0
- package/tests/statusviews.test.ts +237 -0
- package/tests/stepmeter.test.ts +200 -0
- package/tests/streamparse.test.ts +163 -0
- package/tests/stylepruning.test.ts +90 -0
- package/tests/surfaces.test.ts +282 -0
- package/tests/sweep.test.ts +78 -0
- package/tests/syncbridge.test.ts +164 -0
- package/tests/taskqueue.test.ts +206 -0
- package/tests/toolcalls.test.ts +336 -0
- package/tests/toolcatalog.test.ts +201 -0
- package/tests/torture-agent.test.ts +706 -0
- package/tests/torture-auth.test.ts +461 -0
- package/tests/torture-commands.test.ts +895 -0
- package/tests/torture-data.test.ts +923 -0
- package/tests/torture-environments.test.ts +285 -0
- package/tests/torture-export.test.ts +263 -0
- package/tests/torture-http.test.ts +1379 -0
- package/tests/torture-llm.test.ts +808 -0
- package/tests/torture-memory.test.ts +1084 -0
- package/tests/torture-plan.test.ts +829 -0
- package/tests/torture-run.test.ts +626 -0
- package/tests/torture-session.test.ts +928 -0
- package/tests/torture-swarm.test.ts +1245 -0
- package/tests/torture-tools.test.ts +964 -0
- package/tests/torture-workflow.test.ts +2354 -0
- package/tests/tourviews.test.ts +52 -0
- package/tests/transparency.test.ts +147 -0
- package/tests/trigger.test.ts +941 -0
- package/tests/v1sunset.test.ts +428 -0
- package/tests/virtlist.test.ts +94 -0
- package/tests/vision.test.ts +540 -0
- package/tests/vsixpack.test.ts +145 -0
- package/tests/webapi.test.ts +523 -0
- package/tests/workflow.test.ts +1785 -0
- package/tests/workfloweditor.test.ts +759 -0
- package/tests/xpipack.test.ts +128 -0
- package/tools.ts +734 -0
- package/types.ts +9908 -0
- package/umd.ts +9 -0
- package/utils.ts +249 -0
- package/version.ts +8 -0
- package/versionregistry.ts +1310 -0
- package/views.ts +2153 -0
- package/vitest.config.ts +12 -0
- package/web/App.tsx +78 -0
- package/web/README.md +47 -0
- package/web/capacitor.config.ts +46 -0
- package/web/const.ts +19 -0
- package/web/control.shell.tsx +66 -0
- package/web/dashboardpage.ts +554 -0
- package/web/db.ts +493 -0
- package/web/design.html +541 -0
- package/web/gatewayview/Gateway.tsx +345 -0
- package/web/gatewayview/config.ts +1042 -0
- package/web/gatewayview/definition.ts +174 -0
- package/web/icons.ts +15 -0
- package/{manifest.json → web/manifest.json} +1 -1
- package/web/optionspage.ts +691 -0
- package/web/popup.ts +1651 -0
- package/web/schema.prisma +176 -0
- package/web/sidepanel.ts +7941 -0
- package/web/sitemanifest.json +13 -0
- package/web/terminal-ui.tsx +622 -0
- package/web/transparencypage.ts +541 -0
- package/web/vite.config.ts +39 -0
- package/web/workspace.ts +23 -0
- package/workbenchmemory.ts +104 -0
- package/workbenchsession.ts +304 -0
- package/workflow.ts +4495 -0
- package/bridge.d.ts.map +0 -1
- package/bridge.js +0 -1877
- package/bun.d.ts.map +0 -1
- package/bun.js +0 -52329
- package/caps/background.json +0 -712
- package/caps/cli.json +0 -360
- package/caps/library.json +0 -3611
- package/caps/mcp.json +0 -126
- package/caps/pagebridge.json +0 -377
- package/caps/popup.json +0 -51
- package/caps/sidepanel.json +0 -522
- package/checksums.txt +0 -142
- package/cli.d.ts.map +0 -1
- package/companion.d.ts.map +0 -1
- package/companion.js +0 -389
- package/crossbrowser.d.ts.map +0 -1
- package/crossbrowser.js +0 -1191
- package/dashdone.d.ts.map +0 -1
- package/dashdone.js +0 -368
- package/deno.d.ts.map +0 -1
- package/deno.js +0 -52325
- package/devthink.umd.js +0 -52346
- package/fixtures/bun.ts +0 -7
- package/fixtures/cjs.js +0 -6
- package/fixtures/deno.ts +0 -6
- package/fixtures/example-org-pagestate.json +0 -22
- package/fixtures/importers/automa-workflow.json +0 -18
- package/fixtures/importers/selenium-side.json +0 -20
- package/fixtures/importers/tabular-plan.csv +0 -7
- package/fixtures/importers/uivision-macro.json +0 -10
- package/fixtures/importers/v1-plan.json +0 -13
- package/fixtures/mcp-client.mjs +0 -14
- package/fixtures/pages/checkout.html +0 -192
- package/fixtures/pages/dashboard.html +0 -110
- package/fixtures/pages/feed.html +0 -113
- package/fixtures/pages/product-grid.html +0 -150
- package/fixtures/plans/form-inventory-plan.json +0 -11
- package/fixtures/plans/release-notes-plan.json +0 -11
- package/fixtures/recipes/agentscompete.json +0 -11
- package/fixtures/recipes/agentsforms.json +0 -11
- package/fixtures/recipes/agentsmonitor.json +0 -11
- package/fixtures/recipes/agentsreview.json +0 -29
- package/fixtures/recipes/agentswarm.json +0 -11
- package/fixtures/recipes/fillcalendar.json +0 -12
- package/fixtures/recipes/fillcheckout.json +0 -13
- package/fixtures/recipes/filldependentdropdowns.json +0 -12
- package/fixtures/recipes/fillfromcsv.json +0 -13
- package/fixtures/recipes/fillloginform.json +0 -12
- package/fixtures/recipes/fillmultistepwizard.json +0 -13
- package/fixtures/recipes/fillregistration.json +0 -12
- package/fixtures/recipes/fillsearchfilters.json +0 -12
- package/fixtures/recipes/filltypeahead.json +0 -11
- package/fixtures/recipes/monitoralerts.json +0 -12
- package/fixtures/recipes/monitoravailability.json +0 -11
- package/fixtures/recipes/monitornetworkquiet.json +0 -12
- package/fixtures/recipes/monitorpagechanges.json +0 -11
- package/fixtures/recipes/monitorpricechange.json +0 -11
- package/fixtures/recipes/monitorschedule.json +0 -12
- package/fixtures/recipes/scrapedynamicprices.json +0 -13
- package/fixtures/recipes/scrapeimagegallery.json +0 -12
- package/fixtures/recipes/scrapeinfinitefeed.json +0 -13
- package/fixtures/recipes/scrapenestedlists.json +0 -12
- package/fixtures/recipes/scrapeproductgrid.json +0 -12
- package/fixtures/recipes/scrapereviews.json +0 -12
- package/fixtures/recipes/scrapesearchresults.json +0 -12
- package/fixtures/recipes/scrapetablepagination.json +0 -12
- package/fixtures/recipes/testaccessibility.json +0 -34
- package/fixtures/recipes/testconsoleerrors.json +0 -12
- package/fixtures/recipes/testdeeplinks.json +0 -12
- package/fixtures/recipes/testformvalidation.json +0 -13
- package/fixtures/recipes/testlayoutshift.json +0 -12
- package/fixtures/recipes/testlinkcheck.json +0 -12
- package/fixtures/recipes/testloadtiming.json +0 -12
- package/fixtures/recipes/testvisualdiff.json +0 -12
- package/fixtures/workflows/changelog-digest-workflow.json +0 -13
- package/fixtures/workflows/form-survey-workflow.json +0 -13
- package/gallery.json +0 -706
- package/hardening.d.ts.map +0 -1
- package/hardening.js +0 -188
- package/headless.d.ts.map +0 -1
- package/headless.js +0 -11522
- package/http.d.ts.map +0 -1
- package/http.js +0 -2165
- package/index.cjs +0 -54682
- package/index.d.ts.map +0 -1
- package/index.js +0 -52310
- package/index.neutral.js +0 -46343
- package/mcp.d.ts.map +0 -1
- package/mcp.js +0 -20515
- package/memory.d.ts.map +0 -1
- package/nativehost.template.json +0 -10
- package/node.cjs +0 -54686
- package/node.d.ts.map +0 -1
- package/pack.d.ts.map +0 -1
- package/pack.js +0 -805
- package/policy.d.ts.map +0 -1
- package/progress.d.ts.map +0 -1
- package/progress.js +0 -645
- package/protocol.d.ts.map +0 -1
- package/protocol.js +0 -8334
- package/schemas/audit.schema.json +0 -226
- package/schemas/capability.schema.json +0 -113
- package/schemas/envelope.schema.json +0 -162
- package/schemas/memory.schema.json +0 -51
- package/schemas/observation.schema.json +0 -113
- package/schemas/plan.schema.json +0 -208
- package/schemas/progress.schema.json +0 -126
- package/schemas/proposal.schema.json +0 -68
- package/schemas/session.schema.json +0 -82
- package/schemas/tool.schema.json +0 -94
- package/server.d.ts.map +0 -1
- package/server.js +0 -28877
- package/umd-example.html +0 -18
- package/umd.d.ts.map +0 -1
- /package/{bun.d.ts → dist/bun.d.ts} +0 -0
- /package/{cli.d.ts → dist/cli.d.ts} +0 -0
- /package/{companion.d.ts → dist/companion.d.ts} +0 -0
- /package/{crossbrowser.d.ts → dist/crossbrowser.d.ts} +0 -0
- /package/{dashdone.d.ts → dist/dashdone.d.ts} +0 -0
- /package/{deno.d.ts → dist/deno.d.ts} +0 -0
- /package/{hardening.d.ts → dist/hardening.d.ts} +0 -0
- /package/{headless.d.ts → dist/headless.d.ts} +0 -0
- /package/{http.d.ts → dist/http.d.ts} +0 -0
- /package/{index.d.ts → dist/index.d.ts} +0 -0
- /package/{mcp.d.ts → dist/mcp.d.ts} +0 -0
- /package/{memory.d.ts → dist/memory.d.ts} +0 -0
- /package/{node.d.ts → dist/node.d.ts} +0 -0
- /package/{pack.d.ts → dist/pack.d.ts} +0 -0
- /package/{policy.d.ts → dist/policy.d.ts} +0 -0
- /package/{progress.d.ts → dist/progress.d.ts} +0 -0
- /package/{protocol.d.ts → dist/protocol.d.ts} +0 -0
- /package/{server.d.ts → dist/server.d.ts} +0 -0
- /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
|
+
}
|