@wenathlan/devthink 2.0.15 → 2.0.20

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 +54 -0
  2. package/{dist/bridge.d.ts → bridge.d.ts} +1 -1
  3. package/bridge.d.ts.map +1 -0
  4. package/bridge.js +1877 -0
  5. package/bun.d.ts.map +1 -0
  6. package/bun.js +52329 -0
  7. package/caps/background.json +712 -0
  8. package/caps/cli.json +360 -0
  9. package/caps/library.json +3611 -0
  10. package/caps/mcp.json +126 -0
  11. package/caps/pagebridge.json +377 -0
  12. package/caps/popup.json +51 -0
  13. package/caps/sidepanel.json +522 -0
  14. package/checksums.txt +142 -0
  15. package/cli.d.ts.map +1 -0
  16. package/{dist/cli.js → cli.js} +2 -2
  17. package/companion.d.ts.map +1 -0
  18. package/companion.js +389 -0
  19. package/crossbrowser.d.ts.map +1 -0
  20. package/crossbrowser.js +1191 -0
  21. package/dashdone.d.ts.map +1 -0
  22. package/dashdone.js +368 -0
  23. package/deno.d.ts.map +1 -0
  24. package/deno.js +52325 -0
  25. package/devthink.umd.js +52346 -0
  26. package/fixtures/bun.ts +7 -0
  27. package/fixtures/cjs.js +6 -0
  28. package/fixtures/deno.ts +6 -0
  29. package/fixtures/example-org-pagestate.json +22 -0
  30. package/fixtures/importers/automa-workflow.json +18 -0
  31. package/fixtures/importers/selenium-side.json +20 -0
  32. package/fixtures/importers/tabular-plan.csv +7 -0
  33. package/fixtures/importers/uivision-macro.json +10 -0
  34. package/fixtures/importers/v1-plan.json +13 -0
  35. package/fixtures/mcp-client.mjs +14 -0
  36. package/fixtures/pages/checkout.html +192 -0
  37. package/fixtures/pages/dashboard.html +110 -0
  38. package/fixtures/pages/feed.html +113 -0
  39. package/fixtures/pages/product-grid.html +150 -0
  40. package/fixtures/plans/form-inventory-plan.json +11 -0
  41. package/fixtures/plans/release-notes-plan.json +11 -0
  42. package/fixtures/recipes/agentscompete.json +11 -0
  43. package/fixtures/recipes/agentsforms.json +11 -0
  44. package/fixtures/recipes/agentsmonitor.json +11 -0
  45. package/fixtures/recipes/agentsreview.json +29 -0
  46. package/fixtures/recipes/agentswarm.json +11 -0
  47. package/fixtures/recipes/fillcalendar.json +12 -0
  48. package/fixtures/recipes/fillcheckout.json +13 -0
  49. package/fixtures/recipes/filldependentdropdowns.json +12 -0
  50. package/fixtures/recipes/fillfromcsv.json +13 -0
  51. package/fixtures/recipes/fillloginform.json +12 -0
  52. package/fixtures/recipes/fillmultistepwizard.json +13 -0
  53. package/fixtures/recipes/fillregistration.json +12 -0
  54. package/fixtures/recipes/fillsearchfilters.json +12 -0
  55. package/fixtures/recipes/filltypeahead.json +11 -0
  56. package/fixtures/recipes/monitoralerts.json +12 -0
  57. package/fixtures/recipes/monitoravailability.json +11 -0
  58. package/fixtures/recipes/monitornetworkquiet.json +12 -0
  59. package/fixtures/recipes/monitorpagechanges.json +11 -0
  60. package/fixtures/recipes/monitorpricechange.json +11 -0
  61. package/fixtures/recipes/monitorschedule.json +12 -0
  62. package/fixtures/recipes/scrapedynamicprices.json +13 -0
  63. package/fixtures/recipes/scrapeimagegallery.json +12 -0
  64. package/fixtures/recipes/scrapeinfinitefeed.json +13 -0
  65. package/fixtures/recipes/scrapenestedlists.json +12 -0
  66. package/fixtures/recipes/scrapeproductgrid.json +12 -0
  67. package/fixtures/recipes/scrapereviews.json +12 -0
  68. package/fixtures/recipes/scrapesearchresults.json +12 -0
  69. package/fixtures/recipes/scrapetablepagination.json +12 -0
  70. package/fixtures/recipes/testaccessibility.json +34 -0
  71. package/fixtures/recipes/testconsoleerrors.json +12 -0
  72. package/fixtures/recipes/testdeeplinks.json +12 -0
  73. package/fixtures/recipes/testformvalidation.json +13 -0
  74. package/fixtures/recipes/testlayoutshift.json +12 -0
  75. package/fixtures/recipes/testlinkcheck.json +12 -0
  76. package/fixtures/recipes/testloadtiming.json +12 -0
  77. package/fixtures/recipes/testvisualdiff.json +12 -0
  78. package/fixtures/workflows/changelog-digest-workflow.json +13 -0
  79. package/fixtures/workflows/form-survey-workflow.json +13 -0
  80. package/gallery.json +706 -0
  81. package/hardening.d.ts.map +1 -0
  82. package/hardening.js +188 -0
  83. package/headless.d.ts.map +1 -0
  84. package/headless.js +11522 -0
  85. package/http.d.ts.map +1 -0
  86. package/http.js +2165 -0
  87. package/index.cjs +54682 -0
  88. package/index.d.ts.map +1 -0
  89. package/index.js +52310 -0
  90. package/index.neutral.js +46343 -0
  91. package/{web/manifest.json → manifest.json} +1 -1
  92. package/mcp.d.ts.map +1 -0
  93. package/mcp.js +20515 -0
  94. package/memory.d.ts.map +1 -0
  95. package/{memory.ts → memory.js} +2310 -3834
  96. package/nativehost.template.json +10 -0
  97. package/node.cjs +54686 -0
  98. package/node.d.ts.map +1 -0
  99. package/pack.d.ts.map +1 -0
  100. package/pack.js +805 -0
  101. package/package.json +83 -176
  102. package/policy.d.ts.map +1 -0
  103. package/{policy.ts → policy.js} +4679 -5073
  104. package/progress.d.ts.map +1 -0
  105. package/progress.js +645 -0
  106. package/protocol.d.ts.map +1 -0
  107. package/protocol.js +8334 -0
  108. package/schemas/audit.schema.json +226 -0
  109. package/schemas/capability.schema.json +113 -0
  110. package/schemas/envelope.schema.json +162 -0
  111. package/schemas/memory.schema.json +51 -0
  112. package/schemas/observation.schema.json +113 -0
  113. package/schemas/plan.schema.json +208 -0
  114. package/schemas/progress.schema.json +126 -0
  115. package/schemas/proposal.schema.json +68 -0
  116. package/schemas/session.schema.json +82 -0
  117. package/schemas/tool.schema.json +94 -0
  118. package/server.d.ts.map +1 -0
  119. package/server.js +28877 -0
  120. package/umd-example.html +18 -0
  121. package/umd.d.ts.map +1 -0
  122. package/accounts.ts +0 -2087
  123. package/agent.ts +0 -2331
  124. package/antigravity.ts +0 -2139
  125. package/apifreeze.ts +0 -4146
  126. package/auth.ts +0 -642
  127. package/background.ts +0 -16837
  128. package/bridge.ts +0 -2080
  129. package/build.ts +0 -54
  130. package/bun.ts +0 -26
  131. package/capture.ts +0 -1614
  132. package/checksecrets.ts +0 -72
  133. package/cjs.ts +0 -9
  134. package/cli.ts +0 -3500
  135. package/commands.ts +0 -1101
  136. package/companion.ts +0 -450
  137. package/compatibility.ts +0 -37
  138. package/config.ts +0 -3137
  139. package/constants.ts +0 -943
  140. package/core.ts +0 -1473
  141. package/crossbrowser.ts +0 -1359
  142. package/dashdone.ts +0 -605
  143. package/data.ts +0 -943
  144. package/database.ts +0 -133
  145. package/debug.ts +0 -850
  146. package/deno.ts +0 -27
  147. package/devthink.ts +0 -707
  148. package/dist/accounts.d.ts +0 -409
  149. package/dist/agent.d.ts +0 -837
  150. package/dist/antigravity.d.ts +0 -380
  151. package/dist/apifreeze.d.ts +0 -113
  152. package/dist/auth.d.ts +0 -224
  153. package/dist/capture.d.ts +0 -595
  154. package/dist/cjs.d.ts +0 -6
  155. package/dist/commands.d.ts +0 -310
  156. package/dist/compatibility.d.ts +0 -17
  157. package/dist/config.d.ts +0 -1853
  158. package/dist/constants.d.ts +0 -637
  159. package/dist/core.d.ts +0 -361
  160. package/dist/data.d.ts +0 -330
  161. package/dist/database.d.ts +0 -24
  162. package/dist/debug.d.ts +0 -270
  163. package/dist/engine.d.ts +0 -74
  164. package/dist/environments.d.ts +0 -244
  165. package/dist/evidence.d.ts +0 -277
  166. package/dist/export.d.ts +0 -311
  167. package/dist/fingerprint.d.ts +0 -594
  168. package/dist/flow.d.ts +0 -300
  169. package/dist/gates.d.ts +0 -103
  170. package/dist/identity.d.ts +0 -51
  171. package/dist/ids.d.ts +0 -7
  172. package/dist/llm.d.ts +0 -652
  173. package/dist/models.d.ts +0 -1807
  174. package/dist/net.d.ts +0 -325
  175. package/dist/neutral.d.ts +0 -41
  176. package/dist/oauth.d.ts +0 -703
  177. package/dist/page.d.ts +0 -1166
  178. package/dist/perf.d.ts +0 -481
  179. package/dist/plan.d.ts +0 -134
  180. package/dist/project.d.ts +0 -395
  181. package/dist/providers.d.ts +0 -37
  182. package/dist/quota.d.ts +0 -453
  183. package/dist/recovery.d.ts +0 -621
  184. package/dist/request.d.ts +0 -1492
  185. package/dist/run.d.ts +0 -779
  186. package/dist/runtime.d.ts +0 -212
  187. package/dist/search.d.ts +0 -375
  188. package/dist/security.d.ts +0 -534
  189. package/dist/serve.d.ts +0 -136
  190. package/dist/session.d.ts +0 -296
  191. package/dist/storage.d.ts +0 -53
  192. package/dist/streaming.d.ts +0 -1119
  193. package/dist/swarm.d.ts +0 -328
  194. package/dist/tools.d.ts +0 -170
  195. package/dist/types.d.ts +0 -8357
  196. package/dist/utils.d.ts +0 -82
  197. package/dist/version.d.ts +0 -7
  198. package/dist/versionregistry.d.ts +0 -406
  199. package/dist/views.d.ts +0 -579
  200. package/dist/workbenchsession.d.ts +0 -69
  201. package/dist/workflow.d.ts +0 -649
  202. package/docs/readme.md +0 -92
  203. package/docs/schemas/antigravity.json +0 -192
  204. package/engine.ts +0 -1524
  205. package/environments.ts +0 -1005
  206. package/evidence.ts +0 -643
  207. package/export.ts +0 -889
  208. package/fingerprint.ts +0 -1458
  209. package/flow.ts +0 -1190
  210. package/gates.ts +0 -307
  211. package/gateway.ts +0 -34
  212. package/hardening.ts +0 -191
  213. package/headless.ts +0 -369
  214. package/http.ts +0 -2110
  215. package/identity.ts +0 -246
  216. package/ids.ts +0 -26
  217. package/index.ts +0 -369
  218. package/llm.ts +0 -2682
  219. package/mcp.ts +0 -1835
  220. package/models.ts +0 -3805
  221. package/modes.ts +0 -43
  222. package/net.ts +0 -1214
  223. package/neutral.ts +0 -362
  224. package/node.ts +0 -26
  225. package/oauth.ts +0 -2216
  226. package/offscreen.ts +0 -170
  227. package/pack.ts +0 -956
  228. package/page.ts +0 -7824
  229. package/pagebridge.ts +0 -1116
  230. package/perf.ts +0 -957
  231. package/plan.ts +0 -672
  232. package/plugin.ts +0 -76
  233. package/prisma.config.ts +0 -27
  234. package/progress.ts +0 -1308
  235. package/project.ts +0 -1291
  236. package/protocol.ts +0 -4187
  237. package/providers.ts +0 -246
  238. package/quota.ts +0 -1887
  239. package/recovery.ts +0 -2433
  240. package/request.ts +0 -4482
  241. package/run.ts +0 -2135
  242. package/runtime.ts +0 -526
  243. package/search.ts +0 -1760
  244. package/security.ts +0 -1673
  245. package/serve.ts +0 -419
  246. package/server.ts +0 -5538
  247. package/session.ts +0 -1162
  248. package/storage.ts +0 -182
  249. package/streaming.ts +0 -4101
  250. package/swarm.ts +0 -884
  251. package/sync.ts +0 -56
  252. package/tests/agentcert.test.ts +0 -128
  253. package/tests/agentfleet.test.ts +0 -214
  254. package/tests/agentreview.test.ts +0 -241
  255. package/tests/agentstream.test.ts +0 -335
  256. package/tests/agentwork.test.ts +0 -356
  257. package/tests/apifreeze.test.ts +0 -290
  258. package/tests/apimap.test.ts +0 -112
  259. package/tests/approvalgate.test.ts +0 -175
  260. package/tests/artifactmanifest.test.ts +0 -204
  261. package/tests/attentionfeed.test.ts +0 -163
  262. package/tests/backgroundruns.test.ts +0 -100
  263. package/tests/batchscheduling.test.ts +0 -131
  264. package/tests/blackboard.test.ts +0 -238
  265. package/tests/bridge.test.ts +0 -1088
  266. package/tests/browsercoverage.test.ts +0 -134
  267. package/tests/browserpolyfills.test.ts +0 -124
  268. package/tests/build.mjs +0 -1260
  269. package/tests/clientauth.test.ts +0 -223
  270. package/tests/clitools.test.ts +0 -578
  271. package/tests/confirmgates.test.ts +0 -190
  272. package/tests/containerpack.test.ts +0 -143
  273. package/tests/controlflow.test.ts +0 -2120
  274. package/tests/coordination.test.ts +0 -345
  275. package/tests/copyscreen.test.ts +0 -139
  276. package/tests/core.test.ts +0 -417
  277. package/tests/costcert.test.ts +0 -95
  278. package/tests/crossbrowser.test.ts +0 -115
  279. package/tests/cspaudit.test.ts +0 -79
  280. package/tests/dashdone.test.ts +0 -615
  281. package/tests/datagrid.test.ts +0 -137
  282. package/tests/doccheck.test.ts +0 -107
  283. package/tests/dombatch.test.ts +0 -109
  284. package/tests/emulation.test.ts +0 -282
  285. package/tests/environments.test.ts +0 -259
  286. package/tests/evidenceviews.test.ts +0 -88
  287. package/tests/exporttools.test.ts +0 -185
  288. package/tests/firefoxprep.test.ts +0 -134
  289. package/tests/flowlibrary.test.ts +0 -242
  290. package/tests/flowrun.test.ts +0 -303
  291. package/tests/forensics.test.ts +0 -439
  292. package/tests/gateway.test.ts +0 -939
  293. package/tests/headlesslib.test.ts +0 -171
  294. package/tests/httpstream.test.ts +0 -277
  295. package/tests/immutablelog.test.ts +0 -157
  296. package/tests/inboundguard.test.ts +0 -177
  297. package/tests/lazyload.test.ts +0 -72
  298. package/tests/librarymodes.test.ts +0 -623
  299. package/tests/llm.test.ts +0 -696
  300. package/tests/manifest.test.ts +0 -226
  301. package/tests/maskinputs.test.ts +0 -150
  302. package/tests/matrixverify.test.ts +0 -111
  303. package/tests/mavenpack.test.ts +0 -75
  304. package/tests/mcpserver.test.ts +0 -704
  305. package/tests/memory.test.ts +0 -4155
  306. package/tests/memorycare.test.ts +0 -230
  307. package/tests/migrateplan.test.ts +0 -349
  308. package/tests/minimization.test.ts +0 -414
  309. package/tests/modelroute.test.ts +0 -112
  310. package/tests/multiagent.test.ts +0 -440
  311. package/tests/nativebridge.test.ts +0 -807
  312. package/tests/navigation.test.ts +0 -284
  313. package/tests/nugetpack.test.ts +0 -83
  314. package/tests/orchestration.test.ts +0 -449
  315. package/tests/originpolicy.test.ts +0 -405
  316. package/tests/outputcompare.test.ts +0 -97
  317. package/tests/package.test.ts +0 -91
  318. package/tests/pagebridge.test.ts +0 -5909
  319. package/tests/pentest.test.ts +0 -75
  320. package/tests/perfrecords.test.ts +0 -257
  321. package/tests/permdiff.test.ts +0 -85
  322. package/tests/phishguard.test.ts +0 -128
  323. package/tests/pickerviews.test.ts +0 -155
  324. package/tests/pipelines.test.ts +0 -381
  325. package/tests/planlint.test.ts +0 -240
  326. package/tests/planreview.test.ts +0 -383
  327. package/tests/platformtargets.test.ts +0 -56
  328. package/tests/policy.test.ts +0 -8284
  329. package/tests/portability.test.ts +0 -96
  330. package/tests/progress.test.ts +0 -1036
  331. package/tests/promptlibrary.test.ts +0 -116
  332. package/tests/protocol.test.ts +0 -4793
  333. package/tests/publishingpipeline.test.ts +0 -314
  334. package/tests/quickactions.test.ts +0 -164
  335. package/tests/readiness.test.ts +0 -78
  336. package/tests/recipes.test.ts +0 -163
  337. package/tests/redactshots.test.ts +0 -216
  338. package/tests/registernvidiakeys.ts +0 -51
  339. package/tests/relayserve.test.ts +0 -304
  340. package/tests/releasenotes.test.ts +0 -276
  341. package/tests/resilience.test.ts +0 -467
  342. package/tests/resourceaware.test.ts +0 -187
  343. package/tests/runbudget.test.ts +0 -125
  344. package/tests/runhistory.test.ts +0 -299
  345. package/tests/runreplay.test.ts +0 -113
  346. package/tests/runresume.test.ts +0 -184
  347. package/tests/runstate.test.ts +0 -288
  348. package/tests/runtimeadapters.test.ts +0 -251
  349. package/tests/safariskeleton.test.ts +0 -115
  350. package/tests/sandboxframe.test.ts +0 -196
  351. package/tests/sbom.test.ts +0 -105
  352. package/tests/secretvault.test.ts +0 -188
  353. package/tests/selcache.test.ts +0 -111
  354. package/tests/sessioninterface.test.ts +0 -791
  355. package/tests/sessions.test.ts +0 -591
  356. package/tests/siteprefs.test.ts +0 -228
  357. package/tests/snapshotdelta.test.ts +0 -165
  358. package/tests/statusviews.test.ts +0 -237
  359. package/tests/stepmeter.test.ts +0 -200
  360. package/tests/streamparse.test.ts +0 -163
  361. package/tests/stylepruning.test.ts +0 -90
  362. package/tests/surfaces.test.ts +0 -282
  363. package/tests/sweep.test.ts +0 -78
  364. package/tests/syncbridge.test.ts +0 -164
  365. package/tests/taskqueue.test.ts +0 -206
  366. package/tests/toolcalls.test.ts +0 -336
  367. package/tests/toolcatalog.test.ts +0 -201
  368. package/tests/torture-agent.test.ts +0 -706
  369. package/tests/torture-auth.test.ts +0 -461
  370. package/tests/torture-commands.test.ts +0 -895
  371. package/tests/torture-data.test.ts +0 -923
  372. package/tests/torture-environments.test.ts +0 -285
  373. package/tests/torture-export.test.ts +0 -263
  374. package/tests/torture-http.test.ts +0 -1379
  375. package/tests/torture-llm.test.ts +0 -808
  376. package/tests/torture-memory.test.ts +0 -1084
  377. package/tests/torture-plan.test.ts +0 -829
  378. package/tests/torture-run.test.ts +0 -626
  379. package/tests/torture-session.test.ts +0 -928
  380. package/tests/torture-swarm.test.ts +0 -1245
  381. package/tests/torture-tools.test.ts +0 -964
  382. package/tests/torture-workflow.test.ts +0 -2354
  383. package/tests/tourviews.test.ts +0 -52
  384. package/tests/transparency.test.ts +0 -147
  385. package/tests/trigger.test.ts +0 -941
  386. package/tests/v1sunset.test.ts +0 -428
  387. package/tests/virtlist.test.ts +0 -94
  388. package/tests/vision.test.ts +0 -540
  389. package/tests/vsixpack.test.ts +0 -145
  390. package/tests/webapi.test.ts +0 -523
  391. package/tests/workflow.test.ts +0 -1785
  392. package/tests/workfloweditor.test.ts +0 -759
  393. package/tests/xpipack.test.ts +0 -128
  394. package/tools.ts +0 -734
  395. package/types.ts +0 -9908
  396. package/umd.ts +0 -9
  397. package/utils.ts +0 -249
  398. package/version.ts +0 -8
  399. package/versionregistry.ts +0 -1310
  400. package/views.ts +0 -2153
  401. package/vitest.config.ts +0 -12
  402. package/web/App.tsx +0 -78
  403. package/web/README.md +0 -47
  404. package/web/capacitor.config.ts +0 -46
  405. package/web/const.ts +0 -19
  406. package/web/control.shell.tsx +0 -66
  407. package/web/dashboardpage.ts +0 -554
  408. package/web/db.ts +0 -493
  409. package/web/design.html +0 -541
  410. package/web/gatewayview/Gateway.tsx +0 -345
  411. package/web/gatewayview/config.ts +0 -1042
  412. package/web/gatewayview/definition.ts +0 -174
  413. package/web/icons.ts +0 -15
  414. package/web/optionspage.ts +0 -691
  415. package/web/popup.ts +0 -1651
  416. package/web/schema.prisma +0 -176
  417. package/web/sidepanel.ts +0 -7941
  418. package/web/sitemanifest.json +0 -13
  419. package/web/terminal-ui.tsx +0 -622
  420. package/web/transparencypage.ts +0 -541
  421. package/web/vite.config.ts +0 -39
  422. package/web/workspace.ts +0 -23
  423. package/workbenchmemory.ts +0 -104
  424. package/workbenchsession.ts +0 -304
  425. package/workflow.ts +0 -4495
  426. /package/{dist/bun.d.ts → bun.d.ts} +0 -0
  427. /package/{dist/cli.d.ts → cli.d.ts} +0 -0
  428. /package/{dist/companion.d.ts → companion.d.ts} +0 -0
  429. /package/{dist/crossbrowser.d.ts → crossbrowser.d.ts} +0 -0
  430. /package/{dist/dashdone.d.ts → dashdone.d.ts} +0 -0
  431. /package/{dist/deno.d.ts → deno.d.ts} +0 -0
  432. /package/{dist/hardening.d.ts → hardening.d.ts} +0 -0
  433. /package/{dist/headless.d.ts → headless.d.ts} +0 -0
  434. /package/{dist/http.d.ts → http.d.ts} +0 -0
  435. /package/{dist/index.d.ts → index.d.ts} +0 -0
  436. /package/{dist/mcp.d.ts → mcp.d.ts} +0 -0
  437. /package/{dist/memory.d.ts → memory.d.ts} +0 -0
  438. /package/{dist/node.d.ts → node.d.ts} +0 -0
  439. /package/{dist/pack.d.ts → pack.d.ts} +0 -0
  440. /package/{dist/policy.d.ts → policy.d.ts} +0 -0
  441. /package/{dist/progress.d.ts → progress.d.ts} +0 -0
  442. /package/{dist/protocol.d.ts → protocol.d.ts} +0 -0
  443. /package/{dist/server.d.ts → server.d.ts} +0 -0
  444. /package/{dist/umd.d.ts → umd.d.ts} +0 -0
package/serve.ts DELETED
@@ -1,419 +0,0 @@
1
- /**
2
- * The serve module of the 1.1.90 consolidation: every correlated variation of the mcp server surface interned in this one file, so the module family carries one surface without duplicate variations.
3
- * The correlation is the serve mode of the agent protocol: jsonrpc holds the wire framing layer (the message codec that encodes and decodes one frame or one ordered batch, the notification frames a server never answers, and the structured errors with their retry hints that ride the rpc error data so a client reads whether a failure retries, waits its retry after window or never retries); resourceexpose holds the served resource surface (the pagestate, plan, audit, session and health catalog with its read rendering, the resource subscriptions with their change notifications that reuse the watcher baselines of the agent stream family and the notification frames the changes ride); and promptexpose holds the served prompt surface (the walkthrough prompts of the common tasks, the user authored template library published as mcp prompts and the prompts/call rendering that substitutes the declared arguments through the template library).
4
- * No endpoint, transport, provider or built-in template body is ever hardcoded anywhere in the family: every route and prompt stays the user's choice, the audit resource carries summaries with no payload, and no served surface ever bypasses the consent gates.
5
- */
6
-
7
- /* ── Merged from jsonrpc.ts ── */
8
-
9
- import { parseframe, respond, rpcerrornumbers, rpcerrorof, serializeframe } from "./mcp.js";
10
- import { structurederrorof } from "./tools.js";
11
- import type { jsonrpcframe, rpcerror, rpcerrorcode, retryhint, structurederror, toolresult } from "./types.js";
12
-
13
- /**
14
- * Json rpc framing layer of the 1.1.84 mcp server mode.
15
- * Every wire message concern of the serve mode lives in this file: the message codec that encodes and decodes every message a transport carries — one frame or one batch array of frames — on top of the frame grammar the agent protocol family owns, the notification frames that omit the id so a server never answers them, the batch assembly and flattening that keeps the member order, the structured errors with their retry hints that ride the rpc error data so a client reads exactly whether a failure retries, waits its retry after window or never retries, and the error mapping that turns a structured error into the rpc error frame and back.
16
- * The layer stays pure: the transports feed it raw wire text and write the encoded answers back through their own seams, the retry hints derive from the structured error surface of the call runtime, and no transport, endpoint or provider is ever hardcoded.
17
- */
18
-
19
- /** One wire message of the serve mode: a single frame or an ordered batch of frames. */
20
- export type jsonrpcmessage = jsonrpcframe | jsonrpcframe[];
21
-
22
- /** Encodes one wire message — a frame or a batch — into its compact json rpc wire form. */
23
- export function encodemessage(message: jsonrpcmessage): string {
24
- return Array.isArray(message) ? JSON.stringify(message) : serializeframe(message);
25
- }
26
-
27
- /** Decodes one raw wire message: a bare frame parses as itself while an array parses as a batch whose members must all be frames; anything else refuses. */
28
- export function decodemessage(raw: string): { message?: jsonrpcmessage; error?: rpcerror } {
29
- let parsed: unknown;
30
- try {
31
- parsed = JSON.parse(raw) as unknown;
32
- } catch {
33
- return { error: rpcerrorof("parse", "The wire message does not parse as json.") };
34
- }
35
- if (Array.isArray(parsed)) {
36
- if (parsed.length === 0) return { error: rpcerrorof("params", "A batch message carries at least one frame.") };
37
- const frames: jsonrpcframe[] = [];
38
- for (const entry of parsed) {
39
- try {
40
- frames.push(parseframe(JSON.stringify(entry)));
41
- } catch {
42
- return { error: rpcerrorof("parse", "Every batch member must be a json rpc frame.") };
43
- }
44
- }
45
- return { message: frames };
46
- }
47
- try {
48
- const frame = parseframe(raw);
49
- return { message: frame };
50
- } catch {
51
- return { error: rpcerrorof("parse", "The wire message must be one json rpc frame or one batch of frames.") };
52
- }
53
- }
54
-
55
- /** Flattens one wire message into its ordered frames: a bare frame yields itself while a batch yields its members in order. */
56
- export function framesof(message: jsonrpcmessage): jsonrpcframe[] {
57
- return Array.isArray(message) ? message : [message];
58
- }
59
-
60
- /** Assembles one batch message from its ordered frames; an empty list refuses because a batch carries at least one frame. */
61
- export function batchof(frames: jsonrpcframe[]): { message?: jsonrpcmessage; error?: rpcerror } {
62
- if (frames.length === 0) return { error: rpcerrorof("params", "A batch message carries at least one frame.") };
63
- return { message: frames.length === 1 ? (frames[0] as jsonrpcframe) : frames };
64
- }
65
-
66
- /** True when one frame is a notification: notifications omit the id and a server never answers them. */
67
- export function isnotification(frame: jsonrpcframe): boolean {
68
- return frame.id === undefined;
69
- }
70
-
71
- /** Builds one notification frame: the method with its params and no id, so the transport writes it without waiting for an answer. */
72
- export function notificationframe(method: string, params?: Record<string, unknown>): jsonrpcframe {
73
- return { jsonrpc: "2.0", method, ...(params !== undefined ? { params } : {}) };
74
- }
75
-
76
- /** Wraps one structured error with its retry hint into the rpc error frame a transport answers with: the structured surface rides the error data so the client reads the code name, the message, the retry hint and the retry after window from one frame. A code outside the json rpc code names answers as internal while the structured data keeps the original code. */
77
- export function errorwithretry(input: {
78
- code: rpcerrorcode | string;
79
- message: string;
80
- retryhint: retryhint;
81
- retryafter?: number;
82
- }): rpcerror {
83
- const known = (Object.keys(rpcerrornumbers) as rpcerrorcode[]).find((code) => code === input.code);
84
- const wirecode: rpcerrorcode = known ?? "internal";
85
- const structured = structurederrorof({
86
- code: input.code,
87
- message: input.message,
88
- retryhint: input.retryhint,
89
- ...(input.retryafter !== undefined ? { retryafter: input.retryafter } : {}),
90
- });
91
- return rpcerrorof(wirecode, input.message, structured);
92
- }
93
-
94
- /** Reads the structured error surface with its retry hint back out of one rpc error; an error without the structured data keeps its code name and never retries. */
95
- export function structuredof(error: rpcerror): structurederror {
96
- if (error.data !== undefined && error.data !== null && typeof error.data === "object" && !Array.isArray(error.data)) {
97
- const data = error.data as Record<string, unknown>;
98
- if (
99
- typeof data.code === "string" &&
100
- typeof data.message === "string" &&
101
- (data.retryhint === "retry" || data.retryhint === "wait" || data.retryhint === "none")
102
- ) {
103
- return {
104
- code: data.code,
105
- message: data.message,
106
- retryhint: data.retryhint,
107
- ...(typeof data.retryafter === "number" ? { retryafter: data.retryafter } : {}),
108
- };
109
- }
110
- }
111
- return structurederrorof({ code: error.code, message: error.message, retryhint: "none" });
112
- }
113
-
114
- /** Builds the error response frame of one request id around the structured error with its retry hint. */
115
- export function errorresponse(input: {
116
- id?: number | string | null;
117
- code: rpcerrorcode | string;
118
- message: string;
119
- retryhint: retryhint;
120
- retryafter?: number;
121
- }): jsonrpcframe {
122
- return respond({
123
- ...(input.id === undefined ? {} : { id: input.id }),
124
- error: errorwithretry({
125
- code: input.code,
126
- message: input.message,
127
- retryhint: input.retryhint,
128
- ...(input.retryafter !== undefined ? { retryafter: input.retryafter } : {}),
129
- }),
130
- });
131
- }
132
-
133
- /** Builds the result response frame of one request id; a tool result keeps its structured payload intact so the client reads the same details the sidepanel steps read. */
134
- export function resultresponse(id: number | string | null | undefined, result: unknown): jsonrpcframe {
135
- return respond({ ...(id === undefined ? {} : { id }), result });
136
- }
137
-
138
- /** Builds the tool result payload of one frame result: the content, the structured payload and the error flag ride the wire exactly as the sidepanel steps read them. */
139
- export function toolresultof(result: unknown): toolresult | undefined {
140
- if (result !== undefined && result !== null && typeof result === "object" && !Array.isArray(result)) {
141
- const candidate = result as Record<string, unknown>;
142
- if (typeof candidate.content === "string" && typeof candidate.iserror === "boolean")
143
- return {
144
- content: candidate.content,
145
- iserror: candidate.iserror,
146
- ...(candidate.payload !== undefined &&
147
- candidate.payload !== null &&
148
- typeof candidate.payload === "object" &&
149
- !Array.isArray(candidate.payload)
150
- ? { payload: candidate.payload as Record<string, unknown> }
151
- : {}),
152
- };
153
- }
154
- return undefined;
155
- }
156
-
157
- /* ── Merged from resourceexpose.ts ── */
158
-
159
- import { notifyresource, watchresource } from "./agent.js";
160
- import { randomid } from "./memory.js";
161
- import type { agentplan, agentsession, auditevent, resourcewatch, servedresource, servehealth } from "./types.js";
162
-
163
- /**
164
- * Resource exposure of the 1.1.84 mcp server mode.
165
- * Every served resource concern lives in this file: the resource catalog the serve mode publishes — the page state of the session tab, the approved plan, the audit trail, the session record and the health line with its version and uptime — the resources/read rendering of every resource into its wire text, the resource subscriptions a paired client opens with their change notifications that reuse the watcher baselines of the agent stream family so a subscriber reads exactly the keys that changed, and the notification frames the changes ride.
166
- * The exposure stays pure and consent-first: the page state resource carries no page content the user granted none of, the audit trail resource carries the summaries with no payload, and a subscription never widens what the session grants because the watcher stays a read only observation.
167
- */
168
-
169
- /** The resource uris the serve mode publishes, in the documented order of the resources/list report. */
170
- export const resourceuris = [
171
- "devthink://pagestate",
172
- "devthink://plan",
173
- "devthink://audit",
174
- "devthink://session",
175
- "devthink://health",
176
- ] as const;
177
-
178
- /** The resource catalog the serve mode publishes: the page state of the session tab, the approved plan, the audit trail, the session record and the health line. */
179
- export function servedresources(): servedresource[] {
180
- return [
181
- {
182
- uri: "devthink://pagestate",
183
- name: "pagestate",
184
- description:
185
- "The page state of the session tab: the url, the title and the page signals of the observed page — never the page content the user granted none of.",
186
- mimetype: "application/json",
187
- },
188
- {
189
- uri: "devthink://plan",
190
- name: "plan",
191
- description: "The plan of the live session with its state, its origin, its objective and its reviewed steps.",
192
- mimetype: "application/json",
193
- },
194
- {
195
- uri: "devthink://audit",
196
- name: "audit",
197
- description: "The audit trail of the session: every entry summary with its kind and time and no payload.",
198
- mimetype: "application/json",
199
- },
200
- {
201
- uri: "devthink://session",
202
- name: "session",
203
- description:
204
- "The session record of the extension session the client pairs with: the state, the origin grants and the expiry.",
205
- mimetype: "application/json",
206
- },
207
- {
208
- uri: "devthink://health",
209
- name: "health",
210
- description:
211
- "The health line of the serve mode: the extension version, the protocol version, the server contract version, the uptime and the serve state.",
212
- mimetype: "application/json",
213
- },
214
- ];
215
- }
216
-
217
- /** Resolves one served resource by its uri; an unknown uri returns undefined so the read reports it. */
218
- export function resourceof(uri: string): servedresource | undefined {
219
- return servedresources().find((resource) => resource.uri === uri);
220
- }
221
-
222
- /** Reads one served resource into its wire form: the page state carries the observed signals only, the plan its reviewed steps, the audit its summaries with no payload, the session its record and the health its line; an unknown uri refuses with its reason. */
223
- export function readresource(input: {
224
- uri: string;
225
- pagestate?: Record<string, unknown>;
226
- plan?: agentplan;
227
- audit?: auditevent[];
228
- session?: agentsession;
229
- health?: servehealth;
230
- }): { resource?: servedresource; text?: string; reason?: string } {
231
- const resource = resourceof(input.uri);
232
- if (resource === undefined) return { reason: `The serve mode publishes no resource named ${input.uri}.` };
233
- if (resource.uri === "devthink://pagestate") return { resource, text: JSON.stringify(input.pagestate ?? {}) };
234
- if (resource.uri === "devthink://plan") return { resource, text: JSON.stringify(input.plan ?? null) };
235
- if (resource.uri === "devthink://audit")
236
- return {
237
- resource,
238
- text: JSON.stringify(
239
- (input.audit ?? []).map((entry) => ({ id: entry.id, kind: entry.kind, at: entry.at, summary: entry.summary })),
240
- ),
241
- };
242
- if (resource.uri === "devthink://session") {
243
- if (input.session === undefined) return { resource, text: JSON.stringify(null) };
244
- return {
245
- resource,
246
- text: JSON.stringify({
247
- id: input.session.id,
248
- tabid: input.session.tabid,
249
- origin: input.session.origin,
250
- startedat: input.session.startedat,
251
- expiresat: input.session.expiresat,
252
- grants: input.session.grants,
253
- ...(input.session.stoppedat !== undefined ? { stoppedat: input.session.stoppedat } : {}),
254
- ...(input.session.pausedat !== undefined ? { pausedat: input.session.pausedat } : {}),
255
- }),
256
- };
257
- }
258
- return { resource, text: JSON.stringify(input.health ?? {}) };
259
- }
260
-
261
- /** Opens one resource subscription for a paired client: the uri must name a served resource and the baseline freezes the resource state at subscription time so later change notifications deliver exactly the keys that changed. */
262
- export function subscriberesource(input: {
263
- clientid: string;
264
- uri: string;
265
- state?: Record<string, unknown>;
266
- now: number;
267
- id?: string;
268
- }): { watch?: resourcewatch; reason?: string } {
269
- if (input.clientid.trim() === "")
270
- return { reason: "The resource subscription needs the paired client it belongs to." };
271
- if (resourceof(input.uri) === undefined)
272
- return { reason: `The serve mode publishes no resource named ${input.uri}.` };
273
- const watched = watchresource({
274
- clientid: input.clientid,
275
- resource: input.uri,
276
- ...(input.state !== undefined ? { state: input.state } : {}),
277
- now: input.now,
278
- id: input.id ?? randomid(),
279
- });
280
- return {
281
- ...(watched.watch !== undefined ? { watch: watched.watch } : {}),
282
- ...(watched.reason !== undefined ? { reason: watched.reason } : {}),
283
- };
284
- }
285
-
286
- /** Publishes one resource change to its active subscribers: every watcher of the resource receives the delta of the changed keys against its baseline while the baseline absorbs the new state; the delivery stamps the last delivery time. */
287
- export function publishchange(input: {
288
- watches: resourcewatch[];
289
- uri: string;
290
- state: Record<string, unknown>;
291
- now: number;
292
- }): {
293
- deliveries: Array<{ watchid: string; clientid: string; delta: Record<string, unknown>; frame: jsonrpcframe }>;
294
- watches: resourcewatch[];
295
- } {
296
- const outcome = notifyresource({ watches: input.watches, resource: input.uri, state: input.state, now: input.now });
297
- return {
298
- deliveries: outcome.deliveries.map((delivery) => ({
299
- ...delivery,
300
- frame: resourcechangeframe(delivery.watchid, input.uri, delivery.delta, input.now),
301
- })),
302
- watches: outcome.watches,
303
- };
304
- }
305
-
306
- /** Builds the resources/updated notification frame of one delivered change: the watcher id, the resource uri, the changed keys and the time. */
307
- export function resourcechangeframe(
308
- watchid: string,
309
- uri: string,
310
- delta: Record<string, unknown>,
311
- now: number,
312
- ): jsonrpcframe {
313
- return { jsonrpc: "2.0", method: "resources/updated", params: { watchid, uri, delta, at: now } };
314
- }
315
-
316
- /** Builds the resources/list result of the serve mode: every served resource with its uri, description and mimetype. */
317
- export function resourceslist(): { resources: servedresource[] } {
318
- return { resources: servedresources() };
319
- }
320
-
321
- /* ── Merged from promptexpose.ts ── */
322
-
323
- import { listprompts as agentprompts, renderprompt } from "./agent.js";
324
- import { rendertemplate } from "./llm.js";
325
- import type { promptdef, prompttemplate } from "./types.js";
326
-
327
- /**
328
- * Prompt exposure of the 1.1.84 mcp server mode.
329
- * Every served prompt concern lives in this file: the prompt template library published as mcp prompts — every user saved template of the llm integration family becomes one prompt with its variables as declared arguments — the walkthrough prompts for the common tasks a client walks through (the first snapshot, the reviewed fill and the table extraction) with their ordered steps rendered in plain language, the combined prompts/list report of the library and the walkthroughs beside the protocol prompt tools, and the prompts/call rendering that substitutes the declared arguments through the template library so a client reads exactly the prompt the user authored.
330
- * The exposure stays pure: no built-in template body ever ships beyond the reviewed walkthrough steps, a sensitive library template keeps its consent notice requirement, and no prompt execution bypasses the consent gates.
331
- */
332
-
333
- /** The walkthrough prompts of the common tasks: the ordered steps a client walks through, rendered from the declared arguments. */
334
- export function walkthroughprompts(): promptdef[] {
335
- return [
336
- {
337
- name: "walkthrough.firstsnapshot",
338
- description:
339
- "Walks a client through the first reviewed snapshot: pair the client, read the page state and propose the plan behind the human review.",
340
- arguments: [{ name: "origin", description: "The origin of the page the walkthrough observes.", required: true }],
341
- template:
342
- "First snapshot walkthrough for {{origin}}. Steps: 1. the paired client calls browser.snapshot to read the semantic snapshot of the active tab; 2. the client reads the devthink://pagestate resource for the page signals; 3. the client proposes its plan through workflow.plan with the observed steps; 4. the human review approves or refuses the plan before any step with side effects runs.",
343
- },
344
- {
345
- name: "walkthrough.reviewedfill",
346
- description:
347
- "Walks a client through a reviewed form fill: propose the typed plan, wait for the review gate and execute exactly the approved steps.",
348
- arguments: [
349
- { name: "form", description: "The reviewed selector of the form the walkthrough fills.", required: true },
350
- { name: "fields", description: "The reviewed field values of the fill.", required: true },
351
- ],
352
- template:
353
- "Reviewed fill walkthrough for {{form}} with {{fields}}. Steps: 1. the client reads the form through browser.extract; 2. the client proposes the typed steps through workflow.plan naming every field value; 3. the client submits the plan through workflow.review and the call waits for the human answer; 4. the approved steps run exactly as reviewed while a refused gate never executes.",
354
- },
355
- {
356
- name: "walkthrough.tablextract",
357
- description:
358
- "Walks a client through a reviewed table extraction: read the table, stream the rows and keep the provenance.",
359
- arguments: [
360
- { name: "table", description: "The reviewed selector of the table the walkthrough extracts.", required: true },
361
- ],
362
- template:
363
- "Table extraction walkthrough for {{table}}. Steps: 1. the client reads the table through browser.readtable; 2. long results stream through the call chunks while the client reads them as they arrive; 3. the client reads the devthink://audit resource for the provenance of every read; 4. nothing leaves the machine because every step stays a read.",
364
- },
365
- ];
366
- }
367
-
368
- /** Publishes one prompt template of the library as one mcp prompt: the template name becomes the prompt name, the description states the user authored body and the declared arguments carry the template variables with their required markers. */
369
- export function templateprompt(template: prompttemplate): promptdef {
370
- return {
371
- name: template.name,
372
- description: `The user authored template ${template.name} of the prompt library (version ${template.version})${template.notes !== undefined ? ` — ${template.notes}` : ""}; the declared arguments are its template variables.`,
373
- arguments: template.variables.map((variable) => ({
374
- name: variable,
375
- description: `The value the template substitutes for the {{${variable}}} placeholder.`,
376
- required: true,
377
- })),
378
- template: template.body,
379
- };
380
- }
381
-
382
- /** Lists every served prompt of the serve mode: the walkthrough prompts for the common tasks first, then the prompt template library the user authored, then the protocol prompt tools of the agent stream family. */
383
- export function listmcpprompts(templates: prompttemplate[]): promptdef[] {
384
- return [...walkthroughprompts(), ...templates.map(templateprompt), ...agentprompts()];
385
- }
386
-
387
- /** Renders one served prompt with its arguments: a walkthrough or protocol prompt renders through its own template while a library template renders through the template library so its sensitive consent notice requirement stays intact; a required argument left empty keeps its placeholder so the review sees the gap. */
388
- export function rendermcpprompt(input: { name: string; args?: Record<string, unknown>; templates: prompttemplate[] }): {
389
- prompt?: promptdef;
390
- rendered?: string;
391
- reason?: string;
392
- } {
393
- const prompts = listmcpprompts(input.templates);
394
- const prompt = prompts.find((candidate) => candidate.name === input.name);
395
- if (prompt === undefined) return { reason: `The serve mode publishes no prompt named ${input.name}.` };
396
- const args = input.args ?? {};
397
- const template = input.templates.find(
398
- (candidate) =>
399
- candidate.name === input.name &&
400
- candidate.version ===
401
- Math.max(...input.templates.filter((entry) => entry.name === input.name).map((entry) => entry.version)),
402
- );
403
- if (template !== undefined) {
404
- const variables: Record<string, unknown> = {};
405
- for (const argument of prompt.arguments) {
406
- const value = args[argument.name];
407
- if (value !== undefined && value !== null) variables[argument.name] = value;
408
- }
409
- const outcome = rendertemplate({ template, variables, sensitive: false });
410
- if (outcome.text !== undefined) return { prompt, rendered: outcome.text };
411
- return { prompt, reason: outcome.reason ?? "The library template did not render." };
412
- }
413
- return { prompt, rendered: renderprompt(prompt, args) };
414
- }
415
-
416
- /** Builds the prompts/list result of the serve mode: every walkthrough prompt, every library template prompt and every protocol prompt with its declared arguments. */
417
- export function promptsof(templates: prompttemplate[]): { prompts: promptdef[] } {
418
- return { prompts: listmcpprompts(templates) };
419
- }