@docyrus/docyrus 0.0.58 → 0.0.60

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 (44) 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 +361 -23
  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/skills/docyrus-chrome-devtools-cli/SKILL.md +157 -46
  28. package/server-loader.js +46 -233
  29. package/server-loader.js.map +4 -4
  30. package/resources/browser-tools/browser-connect.js +0 -172
  31. package/resources/browser-tools/browser-pick.js +0 -143
  32. package/resources/pi-agent/extensions/docyrus-web-browser.ts +0 -31
  33. package/resources/pi-agent/shared/docyrusWebBrowserProtocol.ts +0 -169
  34. package/resources/pi-agent/skills/agent-browser/SKILL.md +0 -779
  35. package/resources/pi-agent/skills/agent-browser/references/authentication.md +0 -303
  36. package/resources/pi-agent/skills/agent-browser/references/commands.md +0 -295
  37. package/resources/pi-agent/skills/agent-browser/references/profiling.md +0 -120
  38. package/resources/pi-agent/skills/agent-browser/references/proxy-support.md +0 -194
  39. package/resources/pi-agent/skills/agent-browser/references/session-management.md +0 -193
  40. package/resources/pi-agent/skills/agent-browser/references/snapshot-refs.md +0 -219
  41. package/resources/pi-agent/skills/agent-browser/references/video-recording.md +0 -173
  42. package/resources/pi-agent/skills/agent-browser/templates/authenticated-session.sh +0 -105
  43. package/resources/pi-agent/skills/agent-browser/templates/capture-workflow.sh +0 -69
  44. 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.58",
139352
+ version: "0.0.60",
139353
139353
  private: false,
139354
139354
  description: "Docyrus API CLI",
139355
139355
  main: "./main.js",
@@ -140733,6 +140733,31 @@ function createAuthCli(dependencies) {
140733
140733
  });
140734
140734
  }
140735
140735
  });
140736
+ authCli.command("sandbox", {
140737
+ description: "Refresh and inject fresh authentication tokens into the active sandbox",
140738
+ options: external_exports.object({
140739
+ appId: external_exports.string().optional().describe("App ID; defaults to DOCYRUS_SANDBOX_APP_ID env var")
140740
+ }),
140741
+ run: async (context) => {
140742
+ const appId = context.options.appId?.trim() || getOptionalEnvValue(context.env, "DOCYRUS_SANDBOX_APP_ID");
140743
+ if (!appId) {
140744
+ throw new UserInputError(
140745
+ "App ID is required. Pass --appId or set the DOCYRUS_SANDBOX_APP_ID environment variable."
140746
+ );
140747
+ }
140748
+ const apiBaseUrl = await dependencies.environmentConfigService.getActiveApiBaseUrl();
140749
+ const apiClient = dependencies.createApiClient(apiBaseUrl);
140750
+ const response = await apiClient.request({
140751
+ method: "POST",
140752
+ path: `/ai/sandbox/app/${appId}/refreshAuth`
140753
+ });
140754
+ return await injectContext({
140755
+ apiBaseUrl,
140756
+ authStore: dependencies.authStore,
140757
+ payload: response.data
140758
+ });
140759
+ }
140760
+ });
140736
140761
  return authCli;
140737
140762
  }
140738
140763
 
@@ -140880,10 +140905,17 @@ function createBrowserCli(options2 = {}) {
140880
140905
  args: external_exports.object({
140881
140906
  code: external_exports.string().min(1)
140882
140907
  }),
140908
+ options: external_exports.object({
140909
+ timeout: external_exports.number().int().positive().optional().describe("Timeout in milliseconds (default: 30000)")
140910
+ }),
140883
140911
  run: async (context) => {
140912
+ const args2 = [context.args.code];
140913
+ if (context.options.timeout !== void 0) {
140914
+ args2.push("--timeout", String(context.options.timeout));
140915
+ }
140884
140916
  return executeBrowserTool({
140885
140917
  scriptName: "browser-eval.js",
140886
- args: [context.args.code],
140918
+ args: args2,
140887
140919
  outputMode: "json",
140888
140920
  cwd: options2.cwd,
140889
140921
  processExecPath: options2.processExecPath,
@@ -140894,27 +140926,21 @@ function createBrowserCli(options2 = {}) {
140894
140926
  });
140895
140927
  browserCli.command("screenshot", {
140896
140928
  description: "Capture a screenshot of the active browser tab",
140897
- run: async () => {
140898
- return executeBrowserTool({
140899
- scriptName: "browser-screenshot.js",
140900
- args: [],
140901
- outputMode: "json",
140902
- cwd: options2.cwd,
140903
- processExecPath: options2.processExecPath,
140904
- spawnSyncFn: options2.spawnSyncFn,
140905
- resolveBrowserToolsResourceRootFn: options2.resolveBrowserToolsResourceRootFn
140906
- });
140907
- }
140908
- });
140909
- browserCli.command("pick", {
140910
- description: "Interactively pick DOM elements in the active browser tab",
140911
- args: external_exports.object({
140912
- message: external_exports.string().min(1)
140929
+ options: external_exports.object({
140930
+ full: external_exports.boolean().optional().describe("Capture full page instead of just the viewport"),
140931
+ base64: external_exports.boolean().optional().describe("Return base64-encoded image data instead of a file path")
140913
140932
  }),
140914
140933
  run: async (context) => {
140934
+ const args2 = [];
140935
+ if (context.options.full) {
140936
+ args2.push("--full");
140937
+ }
140938
+ if (context.options.base64) {
140939
+ args2.push("--base64");
140940
+ }
140915
140941
  return executeBrowserTool({
140916
- scriptName: "browser-pick.js",
140917
- args: [context.args.message],
140942
+ scriptName: "browser-screenshot.js",
140943
+ args: args2,
140918
140944
  outputMode: "json",
140919
140945
  cwd: options2.cwd,
140920
140946
  processExecPath: options2.processExecPath,
@@ -140925,10 +140951,21 @@ function createBrowserCli(options2 = {}) {
140925
140951
  });
140926
140952
  browserCli.command("cookies", {
140927
140953
  description: "Show cookies for the active browser tab",
140928
- run: async () => {
140954
+ options: external_exports.object({
140955
+ name: external_exports.string().optional().describe("Filter cookies by exact name"),
140956
+ domain: external_exports.string().optional().describe("Filter cookies by domain (substring match)")
140957
+ }),
140958
+ run: async (context) => {
140959
+ const args2 = [];
140960
+ if (context.options.name) {
140961
+ args2.push("--name", context.options.name);
140962
+ }
140963
+ if (context.options.domain) {
140964
+ args2.push("--domain", context.options.domain);
140965
+ }
140929
140966
  return executeBrowserTool({
140930
140967
  scriptName: "browser-cookies.js",
140931
- args: [],
140968
+ args: args2,
140932
140969
  outputMode: "json",
140933
140970
  cwd: options2.cwd,
140934
140971
  processExecPath: options2.processExecPath,
@@ -140946,6 +140983,7 @@ function createBrowserCli(options2 = {}) {
140946
140983
  return executeBrowserTool({
140947
140984
  scriptName: "browser-content.js",
140948
140985
  args: [context.args.url],
140986
+ outputMode: "json",
140949
140987
  cwd: options2.cwd,
140950
140988
  processExecPath: options2.processExecPath,
140951
140989
  spawnSyncFn: options2.spawnSyncFn,
@@ -140985,6 +141023,286 @@ function createBrowserCli(options2 = {}) {
140985
141023
  });
140986
141024
  }
140987
141025
  });
141026
+ browserCli.command("wait", {
141027
+ description: "Wait for a condition before proceeding",
141028
+ options: external_exports.object({
141029
+ idle: external_exports.boolean().optional().describe("Wait for network idle"),
141030
+ selector: external_exports.string().optional().describe("Wait for CSS selector to appear"),
141031
+ url: external_exports.string().optional().describe("Wait for URL to match glob pattern"),
141032
+ timeout: external_exports.number().int().positive().optional().describe("Maximum wait time in ms (default: 15000)")
141033
+ }),
141034
+ args: external_exports.object({
141035
+ ms: external_exports.string().optional().describe("Fixed delay in milliseconds")
141036
+ }),
141037
+ run: async (context) => {
141038
+ const args2 = [];
141039
+ if (context.options.idle) {
141040
+ args2.push("--idle");
141041
+ }
141042
+ if (context.options.selector) {
141043
+ args2.push("--selector", context.options.selector);
141044
+ }
141045
+ if (context.options.url) {
141046
+ args2.push("--url", context.options.url);
141047
+ }
141048
+ if (context.options.timeout !== void 0) {
141049
+ args2.push("--timeout", String(context.options.timeout));
141050
+ }
141051
+ if (context.args.ms) {
141052
+ args2.push(context.args.ms);
141053
+ }
141054
+ return executeBrowserTool({
141055
+ scriptName: "browser-wait.js",
141056
+ args: args2,
141057
+ outputMode: "json",
141058
+ cwd: options2.cwd,
141059
+ processExecPath: options2.processExecPath,
141060
+ spawnSyncFn: options2.spawnSyncFn,
141061
+ resolveBrowserToolsResourceRootFn: options2.resolveBrowserToolsResourceRootFn
141062
+ });
141063
+ }
141064
+ });
141065
+ browserCli.command("snapshot", {
141066
+ description: "Get a compact snapshot of page elements with refs for interaction",
141067
+ options: external_exports.object({
141068
+ all: external_exports.boolean().optional().describe("Include all elements, not just interactive ones"),
141069
+ selector: external_exports.string().optional().describe("Scope snapshot to a CSS selector subtree")
141070
+ }),
141071
+ run: async (context) => {
141072
+ const args2 = [];
141073
+ if (context.options.all) {
141074
+ args2.push("--all");
141075
+ }
141076
+ if (context.options.selector) {
141077
+ args2.push("--selector", context.options.selector);
141078
+ }
141079
+ return executeBrowserTool({
141080
+ scriptName: "browser-snapshot.js",
141081
+ args: args2,
141082
+ outputMode: "json",
141083
+ cwd: options2.cwd,
141084
+ processExecPath: options2.processExecPath,
141085
+ spawnSyncFn: options2.spawnSyncFn,
141086
+ resolveBrowserToolsResourceRootFn: options2.resolveBrowserToolsResourceRootFn
141087
+ });
141088
+ }
141089
+ });
141090
+ browserCli.command("click", {
141091
+ description: "Click an element by snapshot ref, CSS selector, or x,y coordinates",
141092
+ args: external_exports.object({
141093
+ target: external_exports.string().min(1).describe("Snapshot ref (@e1), CSS selector, or x coordinate"),
141094
+ y: external_exports.string().optional().describe("y coordinate (when using coordinate mode)")
141095
+ }),
141096
+ options: external_exports.object({
141097
+ timeout: external_exports.number().int().positive().optional().describe("Timeout in milliseconds (default: 5000)")
141098
+ }),
141099
+ run: async (context) => {
141100
+ const args2 = [context.args.target];
141101
+ if (context.args.y) {
141102
+ args2.push(context.args.y);
141103
+ }
141104
+ if (context.options.timeout !== void 0) {
141105
+ args2.push("--timeout", String(context.options.timeout));
141106
+ }
141107
+ return executeBrowserTool({
141108
+ scriptName: "browser-click.js",
141109
+ args: args2,
141110
+ outputMode: "json",
141111
+ cwd: options2.cwd,
141112
+ processExecPath: options2.processExecPath,
141113
+ spawnSyncFn: options2.spawnSyncFn,
141114
+ resolveBrowserToolsResourceRootFn: options2.resolveBrowserToolsResourceRootFn
141115
+ });
141116
+ }
141117
+ });
141118
+ browserCli.command("fill", {
141119
+ description: "Fill a value into an input/textarea by snapshot ref or CSS selector",
141120
+ args: external_exports.object({
141121
+ target: external_exports.string().min(1).describe("Snapshot ref (@e1) or CSS selector"),
141122
+ value: external_exports.string().describe("Value to type into the element")
141123
+ }),
141124
+ options: external_exports.object({
141125
+ timeout: external_exports.number().int().positive().optional().describe("Timeout in milliseconds (default: 5000)")
141126
+ }),
141127
+ run: async (context) => {
141128
+ const args2 = [context.args.target, context.args.value];
141129
+ if (context.options.timeout !== void 0) {
141130
+ args2.push("--timeout", String(context.options.timeout));
141131
+ }
141132
+ return executeBrowserTool({
141133
+ scriptName: "browser-fill.js",
141134
+ args: args2,
141135
+ outputMode: "json",
141136
+ cwd: options2.cwd,
141137
+ processExecPath: options2.processExecPath,
141138
+ spawnSyncFn: options2.spawnSyncFn,
141139
+ resolveBrowserToolsResourceRootFn: options2.resolveBrowserToolsResourceRootFn
141140
+ });
141141
+ }
141142
+ });
141143
+ browserCli.command("select", {
141144
+ description: "Select a dropdown option by snapshot ref or CSS selector",
141145
+ args: external_exports.object({
141146
+ target: external_exports.string().min(1).describe("Snapshot ref (@e1) or CSS selector"),
141147
+ value: external_exports.string().min(1).describe("Option text or value to select")
141148
+ }),
141149
+ options: external_exports.object({
141150
+ timeout: external_exports.number().int().positive().optional().describe("Timeout in milliseconds (default: 5000)")
141151
+ }),
141152
+ run: async (context) => {
141153
+ const args2 = [context.args.target, context.args.value];
141154
+ if (context.options.timeout !== void 0) {
141155
+ args2.push("--timeout", String(context.options.timeout));
141156
+ }
141157
+ return executeBrowserTool({
141158
+ scriptName: "browser-select.js",
141159
+ args: args2,
141160
+ outputMode: "json",
141161
+ cwd: options2.cwd,
141162
+ processExecPath: options2.processExecPath,
141163
+ spawnSyncFn: options2.spawnSyncFn,
141164
+ resolveBrowserToolsResourceRootFn: options2.resolveBrowserToolsResourceRootFn
141165
+ });
141166
+ }
141167
+ });
141168
+ browserCli.command("console", {
141169
+ description: "Capture console messages from the active page",
141170
+ options: external_exports.object({
141171
+ level: external_exports.string().optional().describe("Filter by level: log, warn, error, info, debug"),
141172
+ listen: external_exports.number().int().positive().optional().describe("Listen for new messages for N milliseconds")
141173
+ }),
141174
+ run: async (context) => {
141175
+ const args2 = [];
141176
+ if (context.options.level) {
141177
+ args2.push("--level", context.options.level);
141178
+ }
141179
+ if (context.options.listen !== void 0) {
141180
+ args2.push("--listen", String(context.options.listen));
141181
+ }
141182
+ return executeBrowserTool({
141183
+ scriptName: "browser-console.js",
141184
+ args: args2,
141185
+ outputMode: "json",
141186
+ cwd: options2.cwd,
141187
+ processExecPath: options2.processExecPath,
141188
+ spawnSyncFn: options2.spawnSyncFn,
141189
+ resolveBrowserToolsResourceRootFn: options2.resolveBrowserToolsResourceRootFn
141190
+ });
141191
+ }
141192
+ });
141193
+ browserCli.command("network", {
141194
+ description: "Inspect captured network requests",
141195
+ options: external_exports.object({
141196
+ method: external_exports.string().optional().describe("Filter by HTTP method (GET, POST, etc.)"),
141197
+ status: external_exports.string().optional().describe("Filter by status code or pattern (200, 4xx, 5xx)"),
141198
+ url: external_exports.string().optional().describe("Filter by URL substring"),
141199
+ listen: external_exports.number().int().positive().optional().describe("Listen for new requests for N milliseconds")
141200
+ }),
141201
+ run: async (context) => {
141202
+ const args2 = [];
141203
+ if (context.options.method) {
141204
+ args2.push("--method", context.options.method);
141205
+ }
141206
+ if (context.options.status) {
141207
+ args2.push("--status", context.options.status);
141208
+ }
141209
+ if (context.options.url) {
141210
+ args2.push("--url", context.options.url);
141211
+ }
141212
+ if (context.options.listen !== void 0) {
141213
+ args2.push("--listen", String(context.options.listen));
141214
+ }
141215
+ return executeBrowserTool({
141216
+ scriptName: "browser-network.js",
141217
+ args: args2,
141218
+ outputMode: "json",
141219
+ cwd: options2.cwd,
141220
+ processExecPath: options2.processExecPath,
141221
+ spawnSyncFn: options2.spawnSyncFn,
141222
+ resolveBrowserToolsResourceRootFn: options2.resolveBrowserToolsResourceRootFn
141223
+ });
141224
+ }
141225
+ });
141226
+ browserCli.command("devtools", {
141227
+ description: "Read @docyrus/devtools state, errors, issues, or console entries from the active page",
141228
+ args: external_exports.object({
141229
+ subcommand: external_exports.enum(["state", "errors", "issues", "console"]).describe("What to read: state, errors, issues, or console")
141230
+ }),
141231
+ options: external_exports.object({
141232
+ level: external_exports.string().optional().describe("Filter console entries by level (for console subcommand)")
141233
+ }),
141234
+ run: async (context) => {
141235
+ const args2 = [context.args.subcommand];
141236
+ if (context.options.level) {
141237
+ args2.push("--level", context.options.level);
141238
+ }
141239
+ return executeBrowserTool({
141240
+ scriptName: "browser-devtools.js",
141241
+ args: args2,
141242
+ outputMode: "json",
141243
+ cwd: options2.cwd,
141244
+ processExecPath: options2.processExecPath,
141245
+ spawnSyncFn: options2.spawnSyncFn,
141246
+ resolveBrowserToolsResourceRootFn: options2.resolveBrowserToolsResourceRootFn
141247
+ });
141248
+ }
141249
+ });
141250
+ browserCli.command("info", {
141251
+ description: "Get current page info: URL, title, viewport size, scroll position",
141252
+ run: async () => {
141253
+ return executeBrowserTool({
141254
+ scriptName: "browser-info.js",
141255
+ args: [],
141256
+ outputMode: "json",
141257
+ cwd: options2.cwd,
141258
+ processExecPath: options2.processExecPath,
141259
+ spawnSyncFn: options2.spawnSyncFn,
141260
+ resolveBrowserToolsResourceRootFn: options2.resolveBrowserToolsResourceRootFn
141261
+ });
141262
+ }
141263
+ });
141264
+ browserCli.command("tabs", {
141265
+ description: "List open tabs or switch to a specific tab",
141266
+ options: external_exports.object({
141267
+ switch: external_exports.number().int().optional().describe("Switch to tab by index (0-based)")
141268
+ }),
141269
+ run: async (context) => {
141270
+ const args2 = [];
141271
+ if (context.options.switch !== void 0) {
141272
+ args2.push("--switch", String(context.options.switch));
141273
+ }
141274
+ return executeBrowserTool({
141275
+ scriptName: "browser-tabs.js",
141276
+ args: args2,
141277
+ outputMode: "json",
141278
+ cwd: options2.cwd,
141279
+ processExecPath: options2.processExecPath,
141280
+ spawnSyncFn: options2.spawnSyncFn,
141281
+ resolveBrowserToolsResourceRootFn: options2.resolveBrowserToolsResourceRootFn
141282
+ });
141283
+ }
141284
+ });
141285
+ browserCli.command("close", {
141286
+ description: "Close the browser session",
141287
+ options: external_exports.object({
141288
+ kill: external_exports.boolean().optional().describe("Kill the local Chrome process (local mode only)")
141289
+ }),
141290
+ run: async (context) => {
141291
+ const args2 = [];
141292
+ if (context.options.kill) {
141293
+ args2.push("--kill");
141294
+ }
141295
+ return executeBrowserTool({
141296
+ scriptName: "browser-close.js",
141297
+ args: args2,
141298
+ outputMode: "json",
141299
+ cwd: options2.cwd,
141300
+ processExecPath: options2.processExecPath,
141301
+ spawnSyncFn: options2.spawnSyncFn,
141302
+ resolveBrowserToolsResourceRootFn: options2.resolveBrowserToolsResourceRootFn
141303
+ });
141304
+ }
141305
+ });
140988
141306
  return browserCli;
140989
141307
  }
140990
141308
 
@@ -151085,10 +151403,12 @@ function createReleaseCli(dependencies) {
151085
151403
  options: external_exports.object({
151086
151404
  bump: external_exports.enum(BUMP_TYPES).optional().describe("SemVer bump type (auto-detect if omitted)"),
151087
151405
  version: external_exports.string().optional().describe("Explicit target version (e.g., 1.0.0)"),
151406
+ appId: external_exports.string().optional().describe("App ID for creating a release record; defaults to DOCYRUS_SANDBOX_APP_ID env var"),
151088
151407
  dryRun: external_exports.boolean().optional().describe("Preview changes without committing"),
151089
151408
  skipChangelog: external_exports.boolean().optional().describe("Skip changelog generation"),
151090
151409
  skipTag: external_exports.boolean().optional().describe("Skip git tag creation"),
151091
- skipGithubRelease: external_exports.boolean().optional().describe("Skip GitHub release creation")
151410
+ skipGithubRelease: external_exports.boolean().optional().describe("Skip GitHub release creation"),
151411
+ skipDbRelease: external_exports.boolean().optional().describe("Skip creating a release record in the database")
151092
151412
  }),
151093
151413
  run: async (context) => {
151094
151414
  const result = await executeRelease({
@@ -151114,6 +151434,23 @@ function createReleaseCli(dependencies) {
151114
151434
  ` Previous: ${result.previousVersion}`,
151115
151435
  ` Commits: ${result.commitCount}`
151116
151436
  ].join("\n"));
151437
+ if (!context.options.skipDbRelease) {
151438
+ const appId = context.options.appId?.trim() || getOptionalEnvValue(context.env, "DOCYRUS_SANDBOX_APP_ID");
151439
+ if (appId) {
151440
+ const apiBaseUrl = await dependencies.environmentConfigService.getActiveApiBaseUrl();
151441
+ const apiClient = dependencies.createApiClient(apiBaseUrl);
151442
+ const releaseRecord = await apiClient.request({
151443
+ method: "POST",
151444
+ path: `/dev/apps/${appId}/releases`,
151445
+ body: {
151446
+ version: result.nextVersion,
151447
+ tagName: `v${result.nextVersion}`,
151448
+ changelog: result.changelogEntry || null
151449
+ }
151450
+ });
151451
+ maybePrintHuman3(context, ` Release record created: ${releaseRecord.data.id}`);
151452
+ }
151453
+ }
151117
151454
  }
151118
151455
  return await wrapPayload2(dependencies, result);
151119
151456
  }
@@ -154676,6 +155013,7 @@ function createDocyrusCli(params) {
154676
155013
  settingsPaths
154677
155014
  }));
154678
155015
  cli2.command(createReleaseCli({
155016
+ createApiClient,
154679
155017
  environmentConfigService,
154680
155018
  authStore,
154681
155019
  settingsPaths