@harborclient/sdk 1.3.8 → 1.4.0

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 (39) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/components/AnchorMenuPanel/index.d.ts.map +1 -1
  3. package/dist/components/AnchorMenuPanel/index.js +13 -5
  4. package/dist/components/Autocomplete/useAutocomplete.d.ts +14 -1
  5. package/dist/components/Autocomplete/useAutocomplete.d.ts.map +1 -1
  6. package/dist/components/Autocomplete/useAutocomplete.js +28 -1
  7. package/dist/components/RoundButton/index.d.ts +5 -1
  8. package/dist/components/RoundButton/index.d.ts.map +1 -1
  9. package/dist/components/RoundButton/index.js +2 -2
  10. package/dist/components/RowActionsMenu/index.d.ts.map +1 -1
  11. package/dist/components/RowActionsMenu/index.js +22 -11
  12. package/dist/components/Sidebar/index.d.ts +4 -1
  13. package/dist/components/Sidebar/index.d.ts.map +1 -1
  14. package/dist/components/Sidebar/index.js +4 -2
  15. package/dist/components/SidebarItem/sidebarItemClasses.d.ts +3 -2
  16. package/dist/components/SidebarItem/sidebarItemClasses.d.ts.map +1 -1
  17. package/dist/components/SidebarItem/sidebarItemClasses.js +3 -2
  18. package/dist/components/SidebarRail/SidebarRailItem.d.ts +6 -1
  19. package/dist/components/SidebarRail/SidebarRailItem.d.ts.map +1 -1
  20. package/dist/components/SidebarRail/SidebarRailItem.js +25 -5
  21. package/dist/components/SidebarRail/SidebarRailSeparator.d.ts +3 -3
  22. package/dist/components/SidebarRail/SidebarRailSeparator.js +3 -3
  23. package/dist/components/SidebarSection/SectionItem.js +1 -1
  24. package/dist/components/TabBar/index.d.ts.map +1 -1
  25. package/dist/components/TabBar/index.js +1 -1
  26. package/dist/components/VariableInput/index.d.ts +14 -1
  27. package/dist/components/VariableInput/index.d.ts.map +1 -1
  28. package/dist/components/VariableInput/index.js +4 -2
  29. package/dist/components/rowActionsMenuHelpers.d.ts +4 -0
  30. package/dist/components/rowActionsMenuHelpers.d.ts.map +1 -1
  31. package/dist/components/rowActionsMenuHelpers.js +6 -1
  32. package/dist/runtime/createBridgedPluginContext.js +156 -0
  33. package/dist/runtime/reactHost.d.ts +32 -0
  34. package/dist/runtime/webpageHandle.d.ts +50 -0
  35. package/dist/runtime/webpageHandle.js +273 -0
  36. package/dist/snippets.d.ts +67 -0
  37. package/dist/types.d.ts +506 -1
  38. package/dist/types.d.ts.map +1 -1
  39. package/package.json +1 -1
package/dist/types.d.ts CHANGED
@@ -873,6 +873,7 @@ export interface StatusBarItemContribution {
873
873
  * - `sidebar-rail` — activity rail background
874
874
  * - `sidebar-rail-active` — active/hover activity rail section fill
875
875
  * - `sidebar-rail-text` — activity rail icons and labels
876
+ * - `sidebar-rail-separator` — activity rail hairline between item groups
876
877
  * - `sidebar-section` — sidebar section headers
877
878
  * - `sidebar-section-text` — sidebar section header labels and chevrons
878
879
  * - `footer` — footer status bar background
@@ -906,7 +907,7 @@ export interface StatusBarItemContribution {
906
907
  * - `script-stage-before-all`, `script-stage-before-each`, `script-stage-main`, `script-stage-after-each`, `script-stage-after-all` — script row stage accent colors
907
908
  * - `terminal` — footer terminal background
908
909
  */
909
- export type ThemeColorToken = 'surface' | 'sidebar' | 'sidebar-toolbar' | 'sidebar-rail' | 'sidebar-rail-active' | 'sidebar-rail-text' | 'sidebar-section' | 'sidebar-section-text' | 'footer' | 'footer-text' | 'footer-muted' | 'footer-icon-active' | 'toolbar-action-active' | 'breadcrumb-background' | 'breadcrumb-segment' | 'breadcrumb-current' | 'git-staged' | 'git-uncommitted' | 'git-unstaged' | 'git-untracked' | 'control' | 'field' | 'separator' | 'text' | 'text-secondary' | 'muted' | 'accent' | 'selection' | 'doc-markdown' | 'tab-unsaved' | 'tab-underline' | 'resize-handle' | 'variable-token' | 'danger' | 'danger-light' | 'warning' | 'success' | 'info' | 'method-get' | 'method-post' | 'method-put' | 'method-patch' | 'method-delete' | 'method-head' | 'method-options' | 'scrollbar-track' | 'scrollbar-thumb' | 'scrollbar-thumb-hover' | 'scrollbar-thumb-active' | 'script-stage-before-all' | 'script-stage-before-each' | 'script-stage-main' | 'script-stage-after-each' | 'script-stage-after-all' | 'terminal';
910
+ export type ThemeColorToken = 'surface' | 'sidebar' | 'sidebar-toolbar' | 'sidebar-rail' | 'sidebar-rail-active' | 'sidebar-rail-text' | 'sidebar-rail-separator' | 'sidebar-section' | 'sidebar-section-text' | 'footer' | 'footer-text' | 'footer-muted' | 'footer-icon-active' | 'toolbar-action-active' | 'breadcrumb-background' | 'breadcrumb-segment' | 'breadcrumb-current' | 'git-staged' | 'git-uncommitted' | 'git-unstaged' | 'git-untracked' | 'control' | 'field' | 'separator' | 'text' | 'text-secondary' | 'muted' | 'accent' | 'selection' | 'doc-markdown' | 'tab-unsaved' | 'tab-underline' | 'resize-handle' | 'variable-token' | 'danger' | 'danger-light' | 'warning' | 'success' | 'info' | 'method-get' | 'method-post' | 'method-put' | 'method-patch' | 'method-delete' | 'method-head' | 'method-options' | 'scrollbar-track' | 'scrollbar-thumb' | 'scrollbar-thumb-hover' | 'scrollbar-thumb-active' | 'script-stage-before-all' | 'script-stage-before-each' | 'script-stage-main' | 'script-stage-after-each' | 'script-stage-after-all' | 'terminal';
910
911
  /**
911
912
  * HarborClient UI metric token ids (typography and geometry).
912
913
  *
@@ -1254,6 +1255,402 @@ export interface PluginMcp {
1254
1255
  */
1255
1256
  registerServer(config: PluginMcpServerConfig): Disposable;
1256
1257
  }
1258
+ /**
1259
+ * URL-path-to-filesystem alias for a Harbor Live Server.
1260
+ */
1261
+ export interface LiveServerAlias {
1262
+ /**
1263
+ * URL path prefix, e.g. `/assets`.
1264
+ */
1265
+ path: string;
1266
+ /**
1267
+ * Filesystem target, absolute or relative to the server root.
1268
+ */
1269
+ target: string;
1270
+ }
1271
+ /**
1272
+ * CORS middleware settings for a Harbor Live Server.
1273
+ */
1274
+ export interface LiveServerCorsSettings {
1275
+ /**
1276
+ * When true, CORS middleware is mounted.
1277
+ */
1278
+ enabled: boolean;
1279
+ /**
1280
+ * Allowed origin(s): `*` or a comma-separated list of origins.
1281
+ */
1282
+ origin: string;
1283
+ /**
1284
+ * Allowed methods: `*` or a comma-separated list (e.g. `GET,POST`).
1285
+ */
1286
+ methods: string;
1287
+ /**
1288
+ * Allowed request headers: `*`, empty (reflect request), or comma-separated names.
1289
+ */
1290
+ allowedHeaders: string;
1291
+ /**
1292
+ * When true, responses include `Access-Control-Allow-Credentials`.
1293
+ */
1294
+ credentials: boolean;
1295
+ }
1296
+ /**
1297
+ * Configuration shared by saved and running Harbor Live Servers.
1298
+ */
1299
+ export interface LiveServerConfig {
1300
+ /**
1301
+ * Display name shown in the sidebar and plugin APIs.
1302
+ */
1303
+ name: string;
1304
+ /**
1305
+ * Absolute path to the directory served as the document root.
1306
+ */
1307
+ root: string;
1308
+ /**
1309
+ * Explicit listen port, or null to auto-select from 5500 upward.
1310
+ */
1311
+ port: number | null;
1312
+ /**
1313
+ * Path aliases mounted before the document root static middleware.
1314
+ */
1315
+ aliases: LiveServerAlias[];
1316
+ /**
1317
+ * When true, the host watches the root (and alias targets) for changes.
1318
+ */
1319
+ watch: boolean;
1320
+ /**
1321
+ * CORS middleware settings applied when the server starts.
1322
+ */
1323
+ cors: LiveServerCorsSettings;
1324
+ }
1325
+ /**
1326
+ * A saved Harbor Live Server config in the local registry.
1327
+ */
1328
+ export interface LiveServer {
1329
+ /**
1330
+ * Database primary key.
1331
+ */
1332
+ id: number;
1333
+ /**
1334
+ * Stable portable identifier.
1335
+ */
1336
+ uuid: string;
1337
+ /**
1338
+ * Display name.
1339
+ */
1340
+ name: string;
1341
+ /**
1342
+ * Absolute path to the directory served as the document root.
1343
+ */
1344
+ root: string;
1345
+ /**
1346
+ * Explicit listen port, or null to auto-select.
1347
+ */
1348
+ port: number | null;
1349
+ /**
1350
+ * Path aliases mounted before the document root.
1351
+ */
1352
+ aliases: LiveServerAlias[];
1353
+ /**
1354
+ * Whether file watching is enabled when this server is started.
1355
+ */
1356
+ watch: boolean;
1357
+ /**
1358
+ * CORS middleware settings applied when the server starts.
1359
+ */
1360
+ cors: LiveServerCorsSettings;
1361
+ /**
1362
+ * Sort order within the Live Servers sidebar section.
1363
+ */
1364
+ sortOrder: number;
1365
+ /**
1366
+ * Unix timestamp (ms) when the row was created.
1367
+ */
1368
+ createdAt: number;
1369
+ /**
1370
+ * Unix timestamp (ms) when the row was last updated.
1371
+ */
1372
+ updatedAt: number;
1373
+ }
1374
+ /**
1375
+ * Input for creating a saved Harbor Live Server.
1376
+ */
1377
+ export interface CreateLiveServerInput {
1378
+ /**
1379
+ * Display name for the saved server.
1380
+ */
1381
+ name: string;
1382
+ /**
1383
+ * Absolute path to the directory served as the document root.
1384
+ */
1385
+ root: string;
1386
+ /**
1387
+ * Explicit listen port, or null to auto-select.
1388
+ */
1389
+ port?: number | null;
1390
+ /**
1391
+ * Path aliases to persist.
1392
+ */
1393
+ aliases?: LiveServerAlias[];
1394
+ /**
1395
+ * Whether file watching is enabled when started. Defaults to true.
1396
+ */
1397
+ watch?: boolean;
1398
+ /**
1399
+ * CORS settings to persist.
1400
+ */
1401
+ cors?: LiveServerCorsSettings;
1402
+ }
1403
+ /**
1404
+ * Input for updating a saved Harbor Live Server.
1405
+ *
1406
+ * Does not restart a running instance; stop and start again to apply changes.
1407
+ */
1408
+ export interface UpdateLiveServerInput {
1409
+ /**
1410
+ * Database primary key of the server to update.
1411
+ */
1412
+ id: number;
1413
+ /**
1414
+ * Display name for the saved server.
1415
+ */
1416
+ name: string;
1417
+ /**
1418
+ * Absolute path to the directory served as the document root.
1419
+ */
1420
+ root: string;
1421
+ /**
1422
+ * Explicit listen port, or null to auto-select.
1423
+ */
1424
+ port: number | null;
1425
+ /**
1426
+ * Path aliases to persist.
1427
+ */
1428
+ aliases: LiveServerAlias[];
1429
+ /**
1430
+ * Whether file watching is enabled when started.
1431
+ */
1432
+ watch: boolean;
1433
+ /**
1434
+ * CORS settings to persist.
1435
+ */
1436
+ cors: LiveServerCorsSettings;
1437
+ }
1438
+ /**
1439
+ * Input for starting a Harbor Live Server instance.
1440
+ *
1441
+ * Provide `savedId` to start from a persisted config (config optional override),
1442
+ * or provide `config` alone for an ad-hoc run. Does not open a browser tab;
1443
+ * use {@link PluginContext.webpage} when the `browser` permission is granted.
1444
+ */
1445
+ export interface StartLiveServerInput {
1446
+ /**
1447
+ * Optional runtime instance id; generated when omitted.
1448
+ */
1449
+ id?: string;
1450
+ /**
1451
+ * Saved `live_servers.id` when starting from a persisted config.
1452
+ */
1453
+ savedId?: number | null;
1454
+ /**
1455
+ * Server configuration for this run. Required when `savedId` is omitted.
1456
+ */
1457
+ config?: LiveServerConfig;
1458
+ }
1459
+ /**
1460
+ * A currently running Harbor Live Server instance.
1461
+ */
1462
+ export interface RunningLiveServer {
1463
+ /**
1464
+ * Runtime instance id (uuid), distinct from a saved server id.
1465
+ */
1466
+ id: string;
1467
+ /**
1468
+ * Saved `live_servers.id` when started from a saved config.
1469
+ */
1470
+ savedId: number | null;
1471
+ /**
1472
+ * Configuration used for this run.
1473
+ */
1474
+ config: LiveServerConfig;
1475
+ /**
1476
+ * Assigned listen port after the server is accepting connections.
1477
+ */
1478
+ port: number;
1479
+ /**
1480
+ * Origin string such as `http://127.0.0.1:5500`.
1481
+ */
1482
+ origin: string;
1483
+ /**
1484
+ * Unix timestamp (ms) when the instance started.
1485
+ */
1486
+ startedAt: number;
1487
+ /**
1488
+ * When true, file watching was requested but could not be started.
1489
+ */
1490
+ watchUnavailable?: boolean;
1491
+ }
1492
+ /**
1493
+ * One Express access-log line from a running Harbor Live Server.
1494
+ */
1495
+ export interface LiveServerRequestLogEntry {
1496
+ /**
1497
+ * Runtime instance id of the server that handled the request.
1498
+ */
1499
+ id: string;
1500
+ /**
1501
+ * Saved `live_servers.id` when the instance was started from a saved config.
1502
+ */
1503
+ savedId: number | null;
1504
+ /**
1505
+ * Unix timestamp (ms) when the request was received.
1506
+ */
1507
+ timestamp: number;
1508
+ /**
1509
+ * HTTP method (e.g. `GET`).
1510
+ */
1511
+ method: string;
1512
+ /**
1513
+ * Request URL path including query string.
1514
+ */
1515
+ url: string;
1516
+ /**
1517
+ * HTTP response status code.
1518
+ */
1519
+ statusCode: number;
1520
+ /**
1521
+ * Time from request start to response finish/close, in milliseconds.
1522
+ */
1523
+ durationMs: number;
1524
+ /**
1525
+ * Response `Content-Length` when present and numeric; otherwise null.
1526
+ */
1527
+ contentLength: number | null;
1528
+ }
1529
+ /**
1530
+ * Query used to read or clear buffered request logs for one running instance.
1531
+ */
1532
+ export type LiveServerLogsQuery = {
1533
+ savedId: number;
1534
+ } | {
1535
+ id: string;
1536
+ };
1537
+ /**
1538
+ * Query used to stop a running Harbor Live Server or read its status.
1539
+ */
1540
+ export type LiveServerInstanceQuery = {
1541
+ savedId: number;
1542
+ } | {
1543
+ id: string;
1544
+ };
1545
+ /**
1546
+ * Options for {@link PluginLiveServers.getLogs}.
1547
+ */
1548
+ export type LiveServerGetLogsQuery = LiveServerLogsQuery & {
1549
+ /**
1550
+ * Maximum number of trailing log lines to return (default 100, max 1000).
1551
+ */
1552
+ limit?: number;
1553
+ };
1554
+ /**
1555
+ * Harbor Live Server APIs available on {@link PluginContext.liveServers}.
1556
+ *
1557
+ * Requires the `live-server` permission. Saved-config mutations do not start,
1558
+ * stop, or restart running instances.
1559
+ */
1560
+ export interface PluginLiveServers {
1561
+ /**
1562
+ * Lists all saved live servers from the local registry.
1563
+ *
1564
+ * @returns Saved live server rows.
1565
+ */
1566
+ list(): Promise<LiveServer[]>;
1567
+ /**
1568
+ * Returns one saved live server by database id or uuid.
1569
+ *
1570
+ * @param idOrUuid - Numeric id or uuid string.
1571
+ * @returns The saved server, or null when not found.
1572
+ */
1573
+ get(idOrUuid: number | string): Promise<LiveServer | null>;
1574
+ /**
1575
+ * Creates a saved live server and returns the new row.
1576
+ *
1577
+ * @param input - Name, root, and optional port/aliases/watch/cors.
1578
+ * @returns The created saved server.
1579
+ */
1580
+ create(input: CreateLiveServerInput): Promise<LiveServer>;
1581
+ /**
1582
+ * Updates a saved live server and returns the refreshed row.
1583
+ *
1584
+ * Does not restart a running instance.
1585
+ *
1586
+ * @param input - Full update payload including id.
1587
+ * @returns The updated saved server.
1588
+ */
1589
+ update(input: UpdateLiveServerInput): Promise<LiveServer>;
1590
+ /**
1591
+ * Deletes a saved live server.
1592
+ *
1593
+ * Does not stop a running instance that was started from this saved id.
1594
+ *
1595
+ * @param id - Database primary key.
1596
+ */
1597
+ delete(id: number): Promise<void>;
1598
+ /**
1599
+ * Starts a live server from a saved id and/or an ad-hoc config.
1600
+ *
1601
+ * Does not open a browser tab. Returns the running instance (loopback only).
1602
+ *
1603
+ * @param input - `savedId` and/or `config` (config required without savedId).
1604
+ * @returns The running instance with assigned port and origin.
1605
+ */
1606
+ start(input: StartLiveServerInput): Promise<RunningLiveServer>;
1607
+ /**
1608
+ * Stops one running live server by runtime id or saved id.
1609
+ *
1610
+ * @param query - Runtime `id` or `savedId`.
1611
+ */
1612
+ stop(query: LiveServerInstanceQuery): Promise<void>;
1613
+ /**
1614
+ * Lists currently running live server instances.
1615
+ *
1616
+ * @returns Running instances in start order.
1617
+ */
1618
+ listRunning(): Promise<RunningLiveServer[]>;
1619
+ /**
1620
+ * Returns the running status for one instance, or null when not running.
1621
+ *
1622
+ * @param query - Runtime `id` or `savedId`.
1623
+ * @returns The running instance, or null.
1624
+ */
1625
+ getStatus(query: LiveServerInstanceQuery): Promise<RunningLiveServer | null>;
1626
+ /**
1627
+ * Returns buffered Express request logs for a running live server.
1628
+ *
1629
+ * @param query - Runtime `id` or `savedId`, plus optional `limit`.
1630
+ * @returns Trailing access-log entries (empty when not running).
1631
+ */
1632
+ getLogs(query: LiveServerGetLogsQuery): Promise<LiveServerRequestLogEntry[]>;
1633
+ /**
1634
+ * Clears the in-memory request log buffer for a running live server.
1635
+ *
1636
+ * @param query - Runtime `id` or `savedId`.
1637
+ */
1638
+ clearLogs(query: LiveServerLogsQuery): Promise<void>;
1639
+ /**
1640
+ * Subscribes to running-server list changes (start/stop).
1641
+ *
1642
+ * @param listener - Called with the refreshed running list.
1643
+ * @returns A {@link Disposable} that removes the listener.
1644
+ */
1645
+ onRunningChanged(listener: (running: RunningLiveServer[]) => void): Disposable;
1646
+ /**
1647
+ * Subscribes to Express request log lines from running live servers.
1648
+ *
1649
+ * @param listener - Called for each completed request.
1650
+ * @returns A {@link Disposable} that removes the listener.
1651
+ */
1652
+ onRequestLog(listener: (entry: LiveServerRequestLogEntry) => void): Disposable;
1653
+ }
1257
1654
  /**
1258
1655
  * Config for {@link PluginAi.registerChatPointer}.
1259
1656
  */
@@ -1303,6 +1700,86 @@ export interface PluginCopyToChatInput {
1303
1700
  end: number;
1304
1701
  };
1305
1702
  }
1703
+ /**
1704
+ * Live DOM helpers on a webpage handle from {@link PluginContext.webpage}.
1705
+ *
1706
+ * Requires the `browser` permission.
1707
+ */
1708
+ export interface PluginWebpageDom {
1709
+ /**
1710
+ * Queries the live page DOM with a CSS selector.
1711
+ *
1712
+ * @param selector - CSS selector.
1713
+ * @param options - Optional `{ all, maxElements }`.
1714
+ * @returns Match count and element summaries.
1715
+ */
1716
+ query(selector: string, options?: {
1717
+ all?: boolean;
1718
+ maxElements?: number;
1719
+ }): Promise<{
1720
+ selector: string;
1721
+ matchCount: number;
1722
+ elements: unknown[];
1723
+ }>;
1724
+ /**
1725
+ * Evaluates JavaScript in the page main world and returns the result.
1726
+ *
1727
+ * @param expression - JavaScript source that returns a JSON-serializable value.
1728
+ * @returns Evaluation result.
1729
+ */
1730
+ evaluate(expression: string): Promise<unknown>;
1731
+ /**
1732
+ * Injects and runs JavaScript source in the page main world.
1733
+ *
1734
+ * @param source - JavaScript source to inject.
1735
+ * @returns Evaluation result from the injected script.
1736
+ */
1737
+ injectScript(source: string): Promise<unknown>;
1738
+ /**
1739
+ * Injects a CSS stylesheet into the page.
1740
+ *
1741
+ * @param css - Stylesheet source.
1742
+ * @returns Electron insertion key.
1743
+ */
1744
+ injectStylesheet(css: string): Promise<string>;
1745
+ }
1746
+ /**
1747
+ * Handle returned by {@link PluginContext.webpage} for an embedded browser tab.
1748
+ *
1749
+ * Requires the `browser` permission. Same semantics as request-script `hc.webpage`.
1750
+ */
1751
+ export interface PluginWebpageHandle {
1752
+ readonly tabId: string;
1753
+ readonly url: string;
1754
+ readonly title: string;
1755
+ readonly canGoBack: boolean;
1756
+ readonly canGoForward: boolean;
1757
+ readonly dom: PluginWebpageDom;
1758
+ /**
1759
+ * Focuses this browser tab in the tab bar.
1760
+ */
1761
+ focus(): Promise<void>;
1762
+ /**
1763
+ * Closes this browser tab. Returns false when the user cancels a leave prompt.
1764
+ */
1765
+ close(): Promise<boolean>;
1766
+ /**
1767
+ * Captures the visible viewport as PNG and writes it under an allowlisted path.
1768
+ *
1769
+ * Relative paths resolve against the plugin package directory. Requires the
1770
+ * `filesystem:write` permission in addition to `browser`. Pass
1771
+ * `{ fullPage: true }` to scroll-and-stitch the full document.
1772
+ *
1773
+ * @param path - Relative (plugin root) or absolute allowlisted path.
1774
+ * @param options - Optional `{ fullPage }` (default false).
1775
+ * @returns Absolute path of the written PNG.
1776
+ */
1777
+ screenshot(path: string, options?: {
1778
+ fullPage?: boolean;
1779
+ }): Promise<{
1780
+ path: string;
1781
+ }>;
1782
+ }
1306
1783
  /**
1307
1784
  * AI chat pointer APIs available on {@link PluginContext.ai}.
1308
1785
  *
@@ -1426,6 +1903,15 @@ export interface PluginFs {
1426
1903
  * @param content - UTF-8 text to write.
1427
1904
  */
1428
1905
  writeFile: (path: string, content: string) => Promise<void>;
1906
+ /**
1907
+ * Writes binary bytes to an allowlisted path. Relative paths resolve under the
1908
+ * plugin package directory. Requires the `filesystem:write` permission.
1909
+ *
1910
+ * @param path - Relative (plugin root) or absolute allowlisted path.
1911
+ * @param bytes - Binary payload to write.
1912
+ * @returns Absolute path written.
1913
+ */
1914
+ writeBytes: (path: string, bytes: Uint8Array) => Promise<string>;
1429
1915
  /**
1430
1916
  * Watches an allowlisted file for changes and invokes the listener when the file
1431
1917
  * is modified. Requires the `filesystem:read` permission. Returns a {@link Disposable}
@@ -3019,10 +3505,29 @@ export interface PluginContext {
3019
3505
  * permission.
3020
3506
  */
3021
3507
  mcp: PluginMcp;
3508
+ /**
3509
+ * Harbor Live Server CRUD, start/stop, status, and logs. Requires the `live-server`
3510
+ * permission.
3511
+ */
3512
+ liveServers: PluginLiveServers;
3022
3513
  /**
3023
3514
  * AI chat pointer registration and copy-to-chat. Requires the `ai` permission.
3024
3515
  */
3025
3516
  ai: PluginAi;
3517
+ /**
3518
+ * Opens or reuses an embedded browser tab and returns a control handle.
3519
+ *
3520
+ * Requires the `browser` permission (granted at install/enable). Same call shape
3521
+ * as request-script `hc.webpage`: omit `url` to bind the active browser tab;
3522
+ * `{ reuse }` defaults to true; new tabs wait for load.
3523
+ *
3524
+ * @param url - Optional URL to open or reuse.
3525
+ * @param options - Optional `{ reuse }` (default true).
3526
+ * @returns Handle with `focus` / `close` and `dom` helpers.
3527
+ */
3528
+ webpage(url?: string, options?: {
3529
+ reuse?: boolean;
3530
+ }): Promise<PluginWebpageHandle>;
3026
3531
  /**
3027
3532
  * Host-managed disposable list used for registration cleanup on deactivation.
3028
3533
  *