@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
package/vitest.config.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { defineConfig } from "vitest/config";
|
|
2
|
+
|
|
3
|
+
export default defineConfig({
|
|
4
|
+
test: {
|
|
5
|
+
include: ["tests/**/*.test.ts"],
|
|
6
|
+
environment: "node",
|
|
7
|
+
/* the timeout stays five seconds on every native runner and scales through the env the emulated arm64 container leg sets (the 2.0.9 multi platform build proved a qemu-interpreted second answers the same green suite three to ten times slower), so an emulated runner never fails a test a native runner passed */
|
|
8
|
+
testTimeout: Number(process.env.DEVTHINK_TEST_TIMEOUT_MS ?? 5000),
|
|
9
|
+
hookTimeout: Number(process.env.DEVTHINK_TEST_TIMEOUT_MS ?? 10000),
|
|
10
|
+
coverage: { enabled: false },
|
|
11
|
+
},
|
|
12
|
+
});
|
package/web/App.tsx
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/** DevThink v2.0.3 root entry: one static React mount, one error boundary and route-level page domains. */
|
|
2
|
+
import { createRoot } from "react-dom/client";
|
|
3
|
+
import { Component, type ReactNode } from "react";
|
|
4
|
+
import { AlertTriangle, RotateCcw } from "lucide-react";
|
|
5
|
+
import { Toaster } from "sonner";
|
|
6
|
+
import { Route, Router as WouterRouter, Switch } from "wouter";
|
|
7
|
+
import NotFound from "@/notfound/NotFound";
|
|
8
|
+
import Gateway from "@/gatewayview/Gateway";
|
|
9
|
+
import Console from "@/console/Console";
|
|
10
|
+
import Home from "@/home/Home";
|
|
11
|
+
import Projects from "@/projects/Projects";
|
|
12
|
+
import Providers from "@/providers/Providers";
|
|
13
|
+
import Routes from "@/routes/Routes";
|
|
14
|
+
import Settings from "@/settings/Settings";
|
|
15
|
+
import Usage from "@/usage/Usage";
|
|
16
|
+
import "./index.css";
|
|
17
|
+
|
|
18
|
+
class WorkbenchErrorBoundary extends Component<{ children: ReactNode }, { error: Error | null }> {
|
|
19
|
+
state: { error: Error | null } = { error: null };
|
|
20
|
+
|
|
21
|
+
static getDerivedStateFromError(error: Error) {
|
|
22
|
+
return { error };
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
render() {
|
|
26
|
+
const { error } = this.state;
|
|
27
|
+
if (!error) return this.props.children;
|
|
28
|
+
return (
|
|
29
|
+
<main className="workbench-failure" role="alert">
|
|
30
|
+
<AlertTriangle size={34} />
|
|
31
|
+
<p>DevThink could not render this workspace frame.</p>
|
|
32
|
+
<pre>{error.stack}</pre>
|
|
33
|
+
<button type="button" onClick={() => window.location.reload()}>
|
|
34
|
+
<RotateCcw size={14} />
|
|
35
|
+
reload local workbench
|
|
36
|
+
</button>
|
|
37
|
+
</main>
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function Router() {
|
|
43
|
+
const declaredBase = import.meta.env.BASE_URL;
|
|
44
|
+
const base = declaredBase === "/" || declaredBase === "./" ? "" : declaredBase.replace(/\/$/, "");
|
|
45
|
+
return (
|
|
46
|
+
<WouterRouter base={base}>
|
|
47
|
+
<Switch>
|
|
48
|
+
<Route path="/" component={Home} />
|
|
49
|
+
<Route path="/console" component={Console} />
|
|
50
|
+
<Route path="/gateway" component={Gateway} />
|
|
51
|
+
<Route path="/gateway/v/:versionId" component={Gateway} />
|
|
52
|
+
<Route path="/providers" component={Providers} />
|
|
53
|
+
<Route path="/projects" component={Projects} />
|
|
54
|
+
<Route path="/routes" component={Routes} />
|
|
55
|
+
<Route path="/usage" component={Usage} />
|
|
56
|
+
<Route path="/settings" component={Settings} />
|
|
57
|
+
<Route path="/w/:workspaceId/s/:sessionId/t/:tabId/:sectionId" component={Home} />
|
|
58
|
+
<Route path="/404" component={NotFound} />
|
|
59
|
+
<Route component={NotFound} />
|
|
60
|
+
</Switch>
|
|
61
|
+
</WouterRouter>
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function App() {
|
|
66
|
+
return (
|
|
67
|
+
<WorkbenchErrorBoundary>
|
|
68
|
+
<Toaster richColors theme="dark" />
|
|
69
|
+
<Router />
|
|
70
|
+
</WorkbenchErrorBoundary>
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const root = document.getElementById("root");
|
|
75
|
+
if (!root) throw new Error("DevThink root element is missing.");
|
|
76
|
+
createRoot(root).render(<App />);
|
|
77
|
+
|
|
78
|
+
export default App;
|
package/web/README.md
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# DevThink Web
|
|
2
|
+
|
|
3
|
+
**DevThink Web** é o workbench browser-like da plataforma DevThink. É uma interface estática deliberadamente separada da persistência de providers: credenciais e endpoints pertencem ao `~/.config/devthink/devthink.json` e ao gateway local embutido, nunca ao bundle do navegador.
|
|
4
|
+
|
|
5
|
+
## Topologia
|
|
6
|
+
|
|
7
|
+
O workspace é a própria pasta `web/`; não existe `src/` nem `client/src/`.
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
web/
|
|
11
|
+
├── App.tsx
|
|
12
|
+
├── capacitor.config.ts
|
|
13
|
+
├── control.shell.tsx
|
|
14
|
+
├── gateway.ts
|
|
15
|
+
├── index.html
|
|
16
|
+
├── index.css
|
|
17
|
+
├── schema.prisma
|
|
18
|
+
├── console/
|
|
19
|
+
├── gatewayview/
|
|
20
|
+
├── home/
|
|
21
|
+
├── providers/
|
|
22
|
+
├── projects/
|
|
23
|
+
├── routes/
|
|
24
|
+
├── settings/
|
|
25
|
+
├── usage/
|
|
26
|
+
└── notfound/
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Executar localmente
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
pnpm install
|
|
33
|
+
pnpm check
|
|
34
|
+
pnpm dev
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Cada domínio de página contém sua âncora de rota, componentes visuais e lógica TypeScript local. `App.tsx` é a única entrada, responsável pela montagem React e pelo roteador universal. O workbench inclui tabs de navegador, seleção de provider, sessões, command palette, pareamento local, Settings e layouts responsivos. Mensagens ficam locais até que o navegador esteja pareado ao gateway DevThink.
|
|
38
|
+
|
|
39
|
+
## Fronteira do gateway
|
|
40
|
+
|
|
41
|
+
O cliente web usa o gateway loopback de `devthink serve` para `/health`, `/identity`, `/settings`, `/providers`, `/models`, `/sessions`, `/workspaces`, `/usage`, `/preferences`, `/pairings/consume`, `/pairings/revoke`, `/chat` e eventos SSE. Settings é equivalente a `devthink config settings`, `devthink config set` e `devthink identity --id`: ele lê e altera a mesma identidade pública e as mesmas preferências pertencentes ao banco local da CLI.
|
|
42
|
+
|
|
43
|
+
O banco `devthink.db` continua pertencendo à CLI e a um único ID público local. A interface pareada é apenas um cliente temporário dessa mesma base através do gateway autenticado; não há cópia estática do banco, senha de banco no navegador, chave de API, refresh token, cookie de navegador, dado de CAPTCHA ou segredo de provider no bundle.
|
|
44
|
+
|
|
45
|
+
## Design system
|
|
46
|
+
|
|
47
|
+
A direção visual está em [`../docs/ideas.md`](../docs/ideas.md), a implantação em [`../docs/deployment.ts.md`](../docs/deployment.ts.md) e a paridade entre CLI, Ink, gateway e web em [`../docs/v1.1.15.capability.matrix.md`](../docs/v1.1.15.capability.matrix.md). O workbench une a linguagem de tabs de um browser a superfícies de carvão, laranja de assinatura e azul de conexão. A marca é a composição ANSI canônica de [`../docs/logo.md`](../docs/logo.md), renderizada em forma compacta pela interface.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* the one conversion config of the merged repository, living at the web root
|
|
3
|
+
* so the capacitor cli resolves it from its working directory: the mobile
|
|
4
|
+
* lane runs `npx cap add`/`npx cap sync` from web/ and every path below —
|
|
5
|
+
* webDir above all — resolves relative to that cwd (verified against the
|
|
6
|
+
* @capacitor/cli 8.5 line the mobile shell declares; the lane pins 8.5.0).
|
|
7
|
+
*
|
|
8
|
+
* the shared workbench build (dist/public, produced by vite) is the single
|
|
9
|
+
* application source of every platform: the browser, github pages, vercel,
|
|
10
|
+
* netlify, the tv and the android wrapper all render the same web bundle —
|
|
11
|
+
* the doctrine the web folder carries as the design room of the whole
|
|
12
|
+
* project. the native shells stay runner-side toolchain output (generated
|
|
13
|
+
* on the mobile workflow into web/android and web/ios, never committed).
|
|
14
|
+
*
|
|
15
|
+
* the shape follows the capacitor-cli config contract; the type import
|
|
16
|
+
* stays out so the web typecheck never requires the optional capacitor
|
|
17
|
+
* toolchain (the mobile package carries @capacitor/cli — the identity
|
|
18
|
+
* fields stay plain and typed structurally here).
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
/** the structural contract of the capacitor config the cli reads (the subset this repository declares). */
|
|
22
|
+
type CapacitorConfigShape = {
|
|
23
|
+
appId: string;
|
|
24
|
+
appName: string;
|
|
25
|
+
webDir: string;
|
|
26
|
+
bundledWebRuntime?: boolean;
|
|
27
|
+
server?: { androidScheme?: string };
|
|
28
|
+
android?: { allowMixedContent?: boolean };
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const config: CapacitorConfigShape = {
|
|
32
|
+
/** the devthink mobile identity — the id the mobile lane stamps onto the generated shells. */
|
|
33
|
+
appId: "im.devthink.app",
|
|
34
|
+
appName: "DevThink",
|
|
35
|
+
/** the vite build of the workbench: pnpm --dir web build emits dist/public. */
|
|
36
|
+
webDir: "dist/public",
|
|
37
|
+
bundledWebRuntime: false,
|
|
38
|
+
server: {
|
|
39
|
+
androidScheme: "https",
|
|
40
|
+
},
|
|
41
|
+
android: {
|
|
42
|
+
allowMixedContent: false,
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export default config;
|
package/web/const.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Style: DevThink Terminal Atelier — static workbench constants stay local to /web. */
|
|
2
|
+
export const COOKIE_NAME = "devthink_session";
|
|
3
|
+
export const ONE_YEAR_MS = 365 * 24 * 60 * 60 * 1000;
|
|
4
|
+
|
|
5
|
+
// Generate login URL at runtime so redirect URI reflects the current origin.
|
|
6
|
+
export const getLoginUrl = () => {
|
|
7
|
+
const oauthPortalUrl = import.meta.env.VITE_OAUTH_PORTAL_URL;
|
|
8
|
+
const appId = import.meta.env.VITE_APP_ID;
|
|
9
|
+
const redirectUri = `${window.location.origin}/api/oauth/callback`;
|
|
10
|
+
const state = btoa(redirectUri);
|
|
11
|
+
|
|
12
|
+
const url = new URL(`${oauthPortalUrl}/app-auth`);
|
|
13
|
+
url.searchParams.set("appId", appId);
|
|
14
|
+
url.searchParams.set("redirectUri", redirectUri);
|
|
15
|
+
url.searchParams.set("state", state);
|
|
16
|
+
url.searchParams.set("type", "signIn");
|
|
17
|
+
|
|
18
|
+
return url.toString();
|
|
19
|
+
};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/** Style: DevThink Terminal Atelier — focused management shell sharing the browser-workbench materials without copying its chat canvas. */
|
|
2
|
+
import {
|
|
3
|
+
ArrowLeft,
|
|
4
|
+
BarChart3,
|
|
5
|
+
FolderKanban,
|
|
6
|
+
Network,
|
|
7
|
+
PlugZap,
|
|
8
|
+
Settings2,
|
|
9
|
+
TerminalSquare,
|
|
10
|
+
Waypoints,
|
|
11
|
+
} from "lucide-react";
|
|
12
|
+
import { Link, useLocation } from "wouter";
|
|
13
|
+
|
|
14
|
+
const navigation = [
|
|
15
|
+
{ href: "/console", label: "console", icon: TerminalSquare },
|
|
16
|
+
{ href: "/gateway", label: "gateway", icon: Waypoints },
|
|
17
|
+
{ href: "/providers", label: "providers", icon: PlugZap },
|
|
18
|
+
{ href: "/projects", label: "projects", icon: FolderKanban },
|
|
19
|
+
{ href: "/routes", label: "routes", icon: Network },
|
|
20
|
+
{ href: "/usage", label: "usage", icon: BarChart3 },
|
|
21
|
+
{ href: "/settings", label: "settings", icon: Settings2 },
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
type ControlShellProps = { eyebrow: string; title: string; summary: string; children: React.ReactNode };
|
|
25
|
+
|
|
26
|
+
export function ControlShell({ eyebrow, title, summary, children }: ControlShellProps) {
|
|
27
|
+
const [location] = useLocation();
|
|
28
|
+
const active = (href: string): boolean => location === href || (href !== "/" && location.startsWith(`${href}/`));
|
|
29
|
+
return (
|
|
30
|
+
<main className="control-page">
|
|
31
|
+
<header className="control-page__header">
|
|
32
|
+
<Link href="/" className="control-brand">
|
|
33
|
+
<span aria-hidden="true">✦</span>
|
|
34
|
+
<strong>DEVTHINK</strong>
|
|
35
|
+
<small>local control</small>
|
|
36
|
+
</Link>
|
|
37
|
+
<nav aria-label="DevThink areas">
|
|
38
|
+
{navigation.map(({ href, label, icon: Icon }) => (
|
|
39
|
+
<Link
|
|
40
|
+
key={href}
|
|
41
|
+
href={href}
|
|
42
|
+
className={active(href) ? "control-nav__link control-nav__link--active" : "control-nav__link"}
|
|
43
|
+
>
|
|
44
|
+
<Icon size={15} />
|
|
45
|
+
<span>{label}</span>
|
|
46
|
+
</Link>
|
|
47
|
+
))}
|
|
48
|
+
</nav>
|
|
49
|
+
<Link className="control-page__return" href="/">
|
|
50
|
+
<ArrowLeft size={14} />
|
|
51
|
+
workspace
|
|
52
|
+
</Link>
|
|
53
|
+
</header>
|
|
54
|
+
<section className="control-page__hero">
|
|
55
|
+
<p>{eyebrow}</p>
|
|
56
|
+
<h1>{title}</h1>
|
|
57
|
+
<span>{summary}</span>
|
|
58
|
+
</section>
|
|
59
|
+
<section className="control-page__body">{children}</section>
|
|
60
|
+
<footer className="control-page__footer">
|
|
61
|
+
<TerminalSquare size={14} />
|
|
62
|
+
provider credentials stay in <code>~/.config/devthink/auth.json</code>
|
|
63
|
+
</footer>
|
|
64
|
+
</main>
|
|
65
|
+
);
|
|
66
|
+
}
|