@docyrus/docyrus 0.0.59 → 0.0.62

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 (45) hide show
  1. package/README.md +46 -0
  2. package/agent-loader.js +1 -1
  3. package/agent-loader.js.map +2 -2
  4. package/main.js +321 -25
  5. package/main.js.map +2 -2
  6. package/package.json +1 -1
  7. package/resources/browser-tools/browser-click.js +74 -0
  8. package/resources/browser-tools/browser-client.js +236 -0
  9. package/resources/browser-tools/browser-close.js +19 -0
  10. package/resources/browser-tools/browser-console.js +73 -0
  11. package/resources/browser-tools/browser-content.js +36 -75
  12. package/resources/browser-tools/browser-cookies.js +19 -14
  13. package/resources/browser-tools/browser-daemon.js +452 -0
  14. package/resources/browser-tools/browser-devtools.js +62 -0
  15. package/resources/browser-tools/browser-eval.js +16 -22
  16. package/resources/browser-tools/browser-fill.js +70 -0
  17. package/resources/browser-tools/browser-info.js +13 -0
  18. package/resources/browser-tools/browser-nav.js +21 -22
  19. package/resources/browser-tools/browser-network.js +91 -0
  20. package/resources/browser-tools/browser-run-script.js +12 -30
  21. package/resources/browser-tools/browser-screenshot.js +22 -22
  22. package/resources/browser-tools/browser-select.js +59 -0
  23. package/resources/browser-tools/browser-snapshot.js +100 -0
  24. package/resources/browser-tools/browser-start.js +101 -85
  25. package/resources/browser-tools/browser-tabs.js +38 -0
  26. package/resources/browser-tools/browser-wait.js +50 -0
  27. package/resources/pi-agent/extensions/browser-tools.ts +229 -0
  28. package/resources/pi-agent/skills/docyrus-chrome-devtools-cli/SKILL.md +157 -46
  29. package/server-loader.js +580 -232
  30. package/server-loader.js.map +4 -4
  31. package/resources/browser-tools/browser-connect.js +0 -172
  32. package/resources/browser-tools/browser-pick.js +0 -143
  33. package/resources/pi-agent/extensions/docyrus-web-browser.ts +0 -31
  34. package/resources/pi-agent/shared/docyrusWebBrowserProtocol.ts +0 -169
  35. package/resources/pi-agent/skills/agent-browser/SKILL.md +0 -779
  36. package/resources/pi-agent/skills/agent-browser/references/authentication.md +0 -303
  37. package/resources/pi-agent/skills/agent-browser/references/commands.md +0 -295
  38. package/resources/pi-agent/skills/agent-browser/references/profiling.md +0 -120
  39. package/resources/pi-agent/skills/agent-browser/references/proxy-support.md +0 -194
  40. package/resources/pi-agent/skills/agent-browser/references/session-management.md +0 -193
  41. package/resources/pi-agent/skills/agent-browser/references/snapshot-refs.md +0 -219
  42. package/resources/pi-agent/skills/agent-browser/references/video-recording.md +0 -173
  43. package/resources/pi-agent/skills/agent-browser/templates/authenticated-session.sh +0 -105
  44. package/resources/pi-agent/skills/agent-browser/templates/capture-workflow.sh +0 -69
  45. package/resources/pi-agent/skills/agent-browser/templates/form-automation.sh +0 -62
package/main.js CHANGED
@@ -139349,7 +139349,7 @@ function buildInputSchema(args2, env2, options2) {
139349
139349
  // package.json
139350
139350
  var package_default = {
139351
139351
  name: "@docyrus/docyrus",
139352
- version: "0.0.59",
139352
+ version: "0.0.62",
139353
139353
  private: false,
139354
139354
  description: "Docyrus API CLI",
139355
139355
  main: "./main.js",
@@ -139867,7 +139867,8 @@ function createServerCli(dependencies) {
139867
139867
  apiKey: external_exports.string().optional().describe("Temporary provider API key override for this run"),
139868
139868
  auth: external_exports.string().optional().describe("Require this bearer token for all HTTP requests"),
139869
139869
  verbose: external_exports.boolean().optional().describe("Enable verbose pi startup output"),
139870
- sandbox: external_exports.boolean().optional().describe("Enable sandbox browser mode (remote Cloudflare Browser Rendering)")
139870
+ sandbox: external_exports.boolean().optional().describe("Enable sandbox browser mode (remote Cloudflare Browser Rendering)"),
139871
+ desktop: external_exports.boolean().optional().describe("Enable desktop browser automation tools (docyrus_browser_*)")
139871
139872
  }),
139872
139873
  run: async (context) => {
139873
139874
  await dependencies.launchPiAgentServer({
@@ -139880,7 +139881,8 @@ function createServerCli(dependencies) {
139880
139881
  apiKey: context.options.apiKey,
139881
139882
  auth: context.options.auth,
139882
139883
  verbose: context.options.verbose || hasRawVerboseFlag2() ? true : void 0,
139883
- sandbox: context.options.sandbox
139884
+ sandbox: context.options.sandbox,
139885
+ desktop: context.options.desktop
139884
139886
  });
139885
139887
  }
139886
139888
  });
@@ -140905,10 +140907,17 @@ function createBrowserCli(options2 = {}) {
140905
140907
  args: external_exports.object({
140906
140908
  code: external_exports.string().min(1)
140907
140909
  }),
140910
+ options: external_exports.object({
140911
+ timeout: external_exports.number().int().positive().optional().describe("Timeout in milliseconds (default: 30000)")
140912
+ }),
140908
140913
  run: async (context) => {
140914
+ const args2 = [context.args.code];
140915
+ if (context.options.timeout !== void 0) {
140916
+ args2.push("--timeout", String(context.options.timeout));
140917
+ }
140909
140918
  return executeBrowserTool({
140910
140919
  scriptName: "browser-eval.js",
140911
- args: [context.args.code],
140920
+ args: args2,
140912
140921
  outputMode: "json",
140913
140922
  cwd: options2.cwd,
140914
140923
  processExecPath: options2.processExecPath,
@@ -140919,27 +140928,21 @@ function createBrowserCli(options2 = {}) {
140919
140928
  });
140920
140929
  browserCli.command("screenshot", {
140921
140930
  description: "Capture a screenshot of the active browser tab",
140922
- run: async () => {
140923
- return executeBrowserTool({
140924
- scriptName: "browser-screenshot.js",
140925
- args: [],
140926
- outputMode: "json",
140927
- cwd: options2.cwd,
140928
- processExecPath: options2.processExecPath,
140929
- spawnSyncFn: options2.spawnSyncFn,
140930
- resolveBrowserToolsResourceRootFn: options2.resolveBrowserToolsResourceRootFn
140931
- });
140932
- }
140933
- });
140934
- browserCli.command("pick", {
140935
- description: "Interactively pick DOM elements in the active browser tab",
140936
- args: external_exports.object({
140937
- message: external_exports.string().min(1)
140931
+ options: external_exports.object({
140932
+ full: external_exports.boolean().optional().describe("Capture full page instead of just the viewport"),
140933
+ base64: external_exports.boolean().optional().describe("Return base64-encoded image data instead of a file path")
140938
140934
  }),
140939
140935
  run: async (context) => {
140936
+ const args2 = [];
140937
+ if (context.options.full) {
140938
+ args2.push("--full");
140939
+ }
140940
+ if (context.options.base64) {
140941
+ args2.push("--base64");
140942
+ }
140940
140943
  return executeBrowserTool({
140941
- scriptName: "browser-pick.js",
140942
- args: [context.args.message],
140944
+ scriptName: "browser-screenshot.js",
140945
+ args: args2,
140943
140946
  outputMode: "json",
140944
140947
  cwd: options2.cwd,
140945
140948
  processExecPath: options2.processExecPath,
@@ -140950,10 +140953,21 @@ function createBrowserCli(options2 = {}) {
140950
140953
  });
140951
140954
  browserCli.command("cookies", {
140952
140955
  description: "Show cookies for the active browser tab",
140953
- run: async () => {
140956
+ options: external_exports.object({
140957
+ name: external_exports.string().optional().describe("Filter cookies by exact name"),
140958
+ domain: external_exports.string().optional().describe("Filter cookies by domain (substring match)")
140959
+ }),
140960
+ run: async (context) => {
140961
+ const args2 = [];
140962
+ if (context.options.name) {
140963
+ args2.push("--name", context.options.name);
140964
+ }
140965
+ if (context.options.domain) {
140966
+ args2.push("--domain", context.options.domain);
140967
+ }
140954
140968
  return executeBrowserTool({
140955
140969
  scriptName: "browser-cookies.js",
140956
- args: [],
140970
+ args: args2,
140957
140971
  outputMode: "json",
140958
140972
  cwd: options2.cwd,
140959
140973
  processExecPath: options2.processExecPath,
@@ -140971,6 +140985,7 @@ function createBrowserCli(options2 = {}) {
140971
140985
  return executeBrowserTool({
140972
140986
  scriptName: "browser-content.js",
140973
140987
  args: [context.args.url],
140988
+ outputMode: "json",
140974
140989
  cwd: options2.cwd,
140975
140990
  processExecPath: options2.processExecPath,
140976
140991
  spawnSyncFn: options2.spawnSyncFn,
@@ -141010,6 +141025,286 @@ function createBrowserCli(options2 = {}) {
141010
141025
  });
141011
141026
  }
141012
141027
  });
141028
+ browserCli.command("wait", {
141029
+ description: "Wait for a condition before proceeding",
141030
+ options: external_exports.object({
141031
+ idle: external_exports.boolean().optional().describe("Wait for network idle"),
141032
+ selector: external_exports.string().optional().describe("Wait for CSS selector to appear"),
141033
+ url: external_exports.string().optional().describe("Wait for URL to match glob pattern"),
141034
+ timeout: external_exports.number().int().positive().optional().describe("Maximum wait time in ms (default: 15000)")
141035
+ }),
141036
+ args: external_exports.object({
141037
+ ms: external_exports.string().optional().describe("Fixed delay in milliseconds")
141038
+ }),
141039
+ run: async (context) => {
141040
+ const args2 = [];
141041
+ if (context.options.idle) {
141042
+ args2.push("--idle");
141043
+ }
141044
+ if (context.options.selector) {
141045
+ args2.push("--selector", context.options.selector);
141046
+ }
141047
+ if (context.options.url) {
141048
+ args2.push("--url", context.options.url);
141049
+ }
141050
+ if (context.options.timeout !== void 0) {
141051
+ args2.push("--timeout", String(context.options.timeout));
141052
+ }
141053
+ if (context.args.ms) {
141054
+ args2.push(context.args.ms);
141055
+ }
141056
+ return executeBrowserTool({
141057
+ scriptName: "browser-wait.js",
141058
+ args: args2,
141059
+ outputMode: "json",
141060
+ cwd: options2.cwd,
141061
+ processExecPath: options2.processExecPath,
141062
+ spawnSyncFn: options2.spawnSyncFn,
141063
+ resolveBrowserToolsResourceRootFn: options2.resolveBrowserToolsResourceRootFn
141064
+ });
141065
+ }
141066
+ });
141067
+ browserCli.command("snapshot", {
141068
+ description: "Get a compact snapshot of page elements with refs for interaction",
141069
+ options: external_exports.object({
141070
+ all: external_exports.boolean().optional().describe("Include all elements, not just interactive ones"),
141071
+ selector: external_exports.string().optional().describe("Scope snapshot to a CSS selector subtree")
141072
+ }),
141073
+ run: async (context) => {
141074
+ const args2 = [];
141075
+ if (context.options.all) {
141076
+ args2.push("--all");
141077
+ }
141078
+ if (context.options.selector) {
141079
+ args2.push("--selector", context.options.selector);
141080
+ }
141081
+ return executeBrowserTool({
141082
+ scriptName: "browser-snapshot.js",
141083
+ args: args2,
141084
+ outputMode: "json",
141085
+ cwd: options2.cwd,
141086
+ processExecPath: options2.processExecPath,
141087
+ spawnSyncFn: options2.spawnSyncFn,
141088
+ resolveBrowserToolsResourceRootFn: options2.resolveBrowserToolsResourceRootFn
141089
+ });
141090
+ }
141091
+ });
141092
+ browserCli.command("click", {
141093
+ description: "Click an element by snapshot ref, CSS selector, or x,y coordinates",
141094
+ args: external_exports.object({
141095
+ target: external_exports.string().min(1).describe("Snapshot ref (@e1), CSS selector, or x coordinate"),
141096
+ y: external_exports.string().optional().describe("y coordinate (when using coordinate mode)")
141097
+ }),
141098
+ options: external_exports.object({
141099
+ timeout: external_exports.number().int().positive().optional().describe("Timeout in milliseconds (default: 5000)")
141100
+ }),
141101
+ run: async (context) => {
141102
+ const args2 = [context.args.target];
141103
+ if (context.args.y) {
141104
+ args2.push(context.args.y);
141105
+ }
141106
+ if (context.options.timeout !== void 0) {
141107
+ args2.push("--timeout", String(context.options.timeout));
141108
+ }
141109
+ return executeBrowserTool({
141110
+ scriptName: "browser-click.js",
141111
+ args: args2,
141112
+ outputMode: "json",
141113
+ cwd: options2.cwd,
141114
+ processExecPath: options2.processExecPath,
141115
+ spawnSyncFn: options2.spawnSyncFn,
141116
+ resolveBrowserToolsResourceRootFn: options2.resolveBrowserToolsResourceRootFn
141117
+ });
141118
+ }
141119
+ });
141120
+ browserCli.command("fill", {
141121
+ description: "Fill a value into an input/textarea by snapshot ref or CSS selector",
141122
+ args: external_exports.object({
141123
+ target: external_exports.string().min(1).describe("Snapshot ref (@e1) or CSS selector"),
141124
+ value: external_exports.string().describe("Value to type into the element")
141125
+ }),
141126
+ options: external_exports.object({
141127
+ timeout: external_exports.number().int().positive().optional().describe("Timeout in milliseconds (default: 5000)")
141128
+ }),
141129
+ run: async (context) => {
141130
+ const args2 = [context.args.target, context.args.value];
141131
+ if (context.options.timeout !== void 0) {
141132
+ args2.push("--timeout", String(context.options.timeout));
141133
+ }
141134
+ return executeBrowserTool({
141135
+ scriptName: "browser-fill.js",
141136
+ args: args2,
141137
+ outputMode: "json",
141138
+ cwd: options2.cwd,
141139
+ processExecPath: options2.processExecPath,
141140
+ spawnSyncFn: options2.spawnSyncFn,
141141
+ resolveBrowserToolsResourceRootFn: options2.resolveBrowserToolsResourceRootFn
141142
+ });
141143
+ }
141144
+ });
141145
+ browserCli.command("select", {
141146
+ description: "Select a dropdown option by snapshot ref or CSS selector",
141147
+ args: external_exports.object({
141148
+ target: external_exports.string().min(1).describe("Snapshot ref (@e1) or CSS selector"),
141149
+ value: external_exports.string().min(1).describe("Option text or value to select")
141150
+ }),
141151
+ options: external_exports.object({
141152
+ timeout: external_exports.number().int().positive().optional().describe("Timeout in milliseconds (default: 5000)")
141153
+ }),
141154
+ run: async (context) => {
141155
+ const args2 = [context.args.target, context.args.value];
141156
+ if (context.options.timeout !== void 0) {
141157
+ args2.push("--timeout", String(context.options.timeout));
141158
+ }
141159
+ return executeBrowserTool({
141160
+ scriptName: "browser-select.js",
141161
+ args: args2,
141162
+ outputMode: "json",
141163
+ cwd: options2.cwd,
141164
+ processExecPath: options2.processExecPath,
141165
+ spawnSyncFn: options2.spawnSyncFn,
141166
+ resolveBrowserToolsResourceRootFn: options2.resolveBrowserToolsResourceRootFn
141167
+ });
141168
+ }
141169
+ });
141170
+ browserCli.command("console", {
141171
+ description: "Capture console messages from the active page",
141172
+ options: external_exports.object({
141173
+ level: external_exports.string().optional().describe("Filter by level: log, warn, error, info, debug"),
141174
+ listen: external_exports.number().int().positive().optional().describe("Listen for new messages for N milliseconds")
141175
+ }),
141176
+ run: async (context) => {
141177
+ const args2 = [];
141178
+ if (context.options.level) {
141179
+ args2.push("--level", context.options.level);
141180
+ }
141181
+ if (context.options.listen !== void 0) {
141182
+ args2.push("--listen", String(context.options.listen));
141183
+ }
141184
+ return executeBrowserTool({
141185
+ scriptName: "browser-console.js",
141186
+ args: args2,
141187
+ outputMode: "json",
141188
+ cwd: options2.cwd,
141189
+ processExecPath: options2.processExecPath,
141190
+ spawnSyncFn: options2.spawnSyncFn,
141191
+ resolveBrowserToolsResourceRootFn: options2.resolveBrowserToolsResourceRootFn
141192
+ });
141193
+ }
141194
+ });
141195
+ browserCli.command("network", {
141196
+ description: "Inspect captured network requests",
141197
+ options: external_exports.object({
141198
+ method: external_exports.string().optional().describe("Filter by HTTP method (GET, POST, etc.)"),
141199
+ status: external_exports.string().optional().describe("Filter by status code or pattern (200, 4xx, 5xx)"),
141200
+ url: external_exports.string().optional().describe("Filter by URL substring"),
141201
+ listen: external_exports.number().int().positive().optional().describe("Listen for new requests for N milliseconds")
141202
+ }),
141203
+ run: async (context) => {
141204
+ const args2 = [];
141205
+ if (context.options.method) {
141206
+ args2.push("--method", context.options.method);
141207
+ }
141208
+ if (context.options.status) {
141209
+ args2.push("--status", context.options.status);
141210
+ }
141211
+ if (context.options.url) {
141212
+ args2.push("--url", context.options.url);
141213
+ }
141214
+ if (context.options.listen !== void 0) {
141215
+ args2.push("--listen", String(context.options.listen));
141216
+ }
141217
+ return executeBrowserTool({
141218
+ scriptName: "browser-network.js",
141219
+ args: args2,
141220
+ outputMode: "json",
141221
+ cwd: options2.cwd,
141222
+ processExecPath: options2.processExecPath,
141223
+ spawnSyncFn: options2.spawnSyncFn,
141224
+ resolveBrowserToolsResourceRootFn: options2.resolveBrowserToolsResourceRootFn
141225
+ });
141226
+ }
141227
+ });
141228
+ browserCli.command("devtools", {
141229
+ description: "Read @docyrus/devtools state, errors, issues, or console entries from the active page",
141230
+ args: external_exports.object({
141231
+ subcommand: external_exports.enum(["state", "errors", "issues", "console"]).describe("What to read: state, errors, issues, or console")
141232
+ }),
141233
+ options: external_exports.object({
141234
+ level: external_exports.string().optional().describe("Filter console entries by level (for console subcommand)")
141235
+ }),
141236
+ run: async (context) => {
141237
+ const args2 = [context.args.subcommand];
141238
+ if (context.options.level) {
141239
+ args2.push("--level", context.options.level);
141240
+ }
141241
+ return executeBrowserTool({
141242
+ scriptName: "browser-devtools.js",
141243
+ args: args2,
141244
+ outputMode: "json",
141245
+ cwd: options2.cwd,
141246
+ processExecPath: options2.processExecPath,
141247
+ spawnSyncFn: options2.spawnSyncFn,
141248
+ resolveBrowserToolsResourceRootFn: options2.resolveBrowserToolsResourceRootFn
141249
+ });
141250
+ }
141251
+ });
141252
+ browserCli.command("info", {
141253
+ description: "Get current page info: URL, title, viewport size, scroll position",
141254
+ run: async () => {
141255
+ return executeBrowserTool({
141256
+ scriptName: "browser-info.js",
141257
+ args: [],
141258
+ outputMode: "json",
141259
+ cwd: options2.cwd,
141260
+ processExecPath: options2.processExecPath,
141261
+ spawnSyncFn: options2.spawnSyncFn,
141262
+ resolveBrowserToolsResourceRootFn: options2.resolveBrowserToolsResourceRootFn
141263
+ });
141264
+ }
141265
+ });
141266
+ browserCli.command("tabs", {
141267
+ description: "List open tabs or switch to a specific tab",
141268
+ options: external_exports.object({
141269
+ switch: external_exports.number().int().optional().describe("Switch to tab by index (0-based)")
141270
+ }),
141271
+ run: async (context) => {
141272
+ const args2 = [];
141273
+ if (context.options.switch !== void 0) {
141274
+ args2.push("--switch", String(context.options.switch));
141275
+ }
141276
+ return executeBrowserTool({
141277
+ scriptName: "browser-tabs.js",
141278
+ args: args2,
141279
+ outputMode: "json",
141280
+ cwd: options2.cwd,
141281
+ processExecPath: options2.processExecPath,
141282
+ spawnSyncFn: options2.spawnSyncFn,
141283
+ resolveBrowserToolsResourceRootFn: options2.resolveBrowserToolsResourceRootFn
141284
+ });
141285
+ }
141286
+ });
141287
+ browserCli.command("close", {
141288
+ description: "Close the browser session",
141289
+ options: external_exports.object({
141290
+ kill: external_exports.boolean().optional().describe("Kill the local Chrome process (local mode only)")
141291
+ }),
141292
+ run: async (context) => {
141293
+ const args2 = [];
141294
+ if (context.options.kill) {
141295
+ args2.push("--kill");
141296
+ }
141297
+ return executeBrowserTool({
141298
+ scriptName: "browser-close.js",
141299
+ args: args2,
141300
+ outputMode: "json",
141301
+ cwd: options2.cwd,
141302
+ processExecPath: options2.processExecPath,
141303
+ spawnSyncFn: options2.spawnSyncFn,
141304
+ resolveBrowserToolsResourceRootFn: options2.resolveBrowserToolsResourceRootFn
141305
+ });
141306
+ }
141307
+ });
141013
141308
  return browserCli;
141014
141309
  }
141015
141310
 
@@ -154396,7 +154691,8 @@ function createPiAgentServerLauncher(options2) {
154396
154691
  DOCYRUS_CLI_ENTRY: cliEntryPath,
154397
154692
  DOCYRUS_CLI_SCOPE: options2.settingsPaths.scope,
154398
154693
  OFFICECLI_SKIP_UPDATE: "1",
154399
- ...request.sandbox ? { DOCYRUS_BROWSER_SANDBOX: "1" } : {}
154694
+ ...request.sandbox ? { DOCYRUS_BROWSER_SANDBOX: "1" } : {},
154695
+ ...request.desktop ? { DOCYRUS_DESKTOP_TOOLS: "1" } : {}
154400
154696
  }
154401
154697
  });
154402
154698
  await new Promise((resolve2, reject) => {