@alwaysmeticulous/cli 2.314.0 → 2.317.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 (79) hide show
  1. package/dist/command-utils/parse-container-env.d.ts +2 -2
  2. package/dist/command-utils/parse-container-env.js +2 -2
  3. package/dist/commands/agent/js-coverage.command.d.ts +29 -0
  4. package/dist/commands/agent/js-coverage.command.d.ts.map +1 -1
  5. package/dist/commands/agent/js-coverage.command.handler.spec.d.ts +2 -0
  6. package/dist/commands/agent/js-coverage.command.handler.spec.d.ts.map +1 -0
  7. package/dist/commands/agent/js-coverage.command.handler.spec.js +148 -0
  8. package/dist/commands/agent/js-coverage.command.handler.spec.js.map +1 -0
  9. package/dist/commands/agent/js-coverage.command.js +120 -22
  10. package/dist/commands/agent/js-coverage.command.js.map +1 -1
  11. package/dist/commands/agent/js-coverage.command.spec.js +83 -2
  12. package/dist/commands/agent/js-coverage.command.spec.js.map +1 -1
  13. package/dist/commands/agent/test-run-diffs.command.d.ts.map +1 -1
  14. package/dist/commands/agent/test-run-diffs.command.js +10 -5
  15. package/dist/commands/agent/test-run-diffs.command.js.map +1 -1
  16. package/dist/commands/agent/test-run-diffs.command.spec.js +17 -2
  17. package/dist/commands/agent/test-run-diffs.command.spec.js.map +1 -1
  18. package/dist/commands/all-commands.d.ts.map +1 -1
  19. package/dist/commands/all-commands.js +4 -2
  20. package/dist/commands/all-commands.js.map +1 -1
  21. package/dist/commands/auth/__tests__/get-project.command.spec.js +9 -3
  22. package/dist/commands/auth/__tests__/get-project.command.spec.js.map +1 -1
  23. package/dist/commands/auth/__tests__/set-project.command.spec.js +9 -4
  24. package/dist/commands/auth/__tests__/set-project.command.spec.js.map +1 -1
  25. package/dist/commands/auth/__tests__/whoami.command.spec.js +40 -2
  26. package/dist/commands/auth/__tests__/whoami.command.spec.js.map +1 -1
  27. package/dist/commands/ci/agent-test.command.d.ts +1 -0
  28. package/dist/commands/ci/agent-test.command.d.ts.map +1 -1
  29. package/dist/commands/ci/agent-test.command.js +19 -4
  30. package/dist/commands/ci/agent-test.command.js.map +1 -1
  31. package/dist/commands/crawl.command.d.ts +11 -0
  32. package/dist/commands/crawl.command.d.ts.map +1 -0
  33. package/dist/commands/crawl.command.js +118 -0
  34. package/dist/commands/crawl.command.js.map +1 -0
  35. package/dist/commands/record/__tests__/backend-dev-command.utils.spec.d.ts +2 -0
  36. package/dist/commands/record/__tests__/backend-dev-command.utils.spec.d.ts.map +1 -0
  37. package/dist/commands/record/__tests__/backend-dev-command.utils.spec.js +94 -0
  38. package/dist/commands/record/__tests__/backend-dev-command.utils.spec.js.map +1 -0
  39. package/dist/commands/record/__tests__/backend-sidecar.utils.spec.d.ts +2 -0
  40. package/dist/commands/record/__tests__/backend-sidecar.utils.spec.d.ts.map +1 -0
  41. package/dist/commands/record/__tests__/backend-sidecar.utils.spec.js +183 -0
  42. package/dist/commands/record/__tests__/backend-sidecar.utils.spec.js.map +1 -0
  43. package/dist/commands/record/__tests__/backend.command.spec.d.ts +2 -0
  44. package/dist/commands/record/__tests__/backend.command.spec.d.ts.map +1 -0
  45. package/dist/commands/record/__tests__/backend.command.spec.js +219 -0
  46. package/dist/commands/record/__tests__/backend.command.spec.js.map +1 -0
  47. package/dist/commands/record/backend-dev-command.utils.d.ts +29 -0
  48. package/dist/commands/record/backend-dev-command.utils.d.ts.map +1 -0
  49. package/dist/commands/record/backend-dev-command.utils.js +91 -0
  50. package/dist/commands/record/backend-dev-command.utils.js.map +1 -0
  51. package/dist/commands/record/backend-sidecar.utils.d.ts +39 -0
  52. package/dist/commands/record/backend-sidecar.utils.d.ts.map +1 -0
  53. package/dist/commands/record/backend-sidecar.utils.js +273 -0
  54. package/dist/commands/record/backend-sidecar.utils.js.map +1 -0
  55. package/dist/commands/record/backend.command.d.ts +14 -0
  56. package/dist/commands/record/backend.command.d.ts.map +1 -0
  57. package/dist/commands/record/backend.command.js +189 -0
  58. package/dist/commands/record/backend.command.js.map +1 -0
  59. package/dist/commands/record/index.d.ts.map +1 -1
  60. package/dist/commands/record/index.js +4 -2
  61. package/dist/commands/record/index.js.map +1 -1
  62. package/dist/commands/replay.command.d.ts +2 -0
  63. package/dist/commands/replay.command.d.ts.map +1 -1
  64. package/dist/commands/replay.command.js +10 -3
  65. package/dist/commands/replay.command.js.map +1 -1
  66. package/dist/main.d.ts.map +1 -1
  67. package/dist/main.js +6 -2
  68. package/dist/main.js.map +1 -1
  69. package/dist/utils/__tests__/resolve-test-run-from-commit.spec.js +7 -4
  70. package/dist/utils/__tests__/resolve-test-run-from-commit.spec.js.map +1 -1
  71. package/dist/utils/constants.d.ts +1 -0
  72. package/dist/utils/constants.d.ts.map +1 -1
  73. package/dist/utils/constants.js +4 -3
  74. package/dist/utils/constants.js.map +1 -1
  75. package/dist/utils/resolve-test-run-from-commit.d.ts +8 -4
  76. package/dist/utils/resolve-test-run-from-commit.d.ts.map +1 -1
  77. package/dist/utils/resolve-test-run-from-commit.js +10 -9
  78. package/dist/utils/resolve-test-run-from-commit.js.map +1 -1
  79. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"agent-test.command.d.ts","sourceRoot":"","sources":["../../../src/commands/ci/agent-test.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAKrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAU3C,UAAU,OAAO;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACzC,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,YAAY,CAAC,EAAE,oBAAoB,EAAE,GAAG,SAAS,CAAC;IAClD,4BAA4B,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAyFD,eAAO,MAAM,kBAAkB,EAAE,aAAa,CAAC,OAAO,EAAE,OAAO,CAyE9D,CAAC"}
1
+ {"version":3,"file":"agent-test.command.d.ts","sourceRoot":"","sources":["../../../src/commands/ci/agent-test.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAKrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAU3C,UAAU,OAAO;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACzC,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,gBAAgB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,YAAY,CAAC,EAAE,oBAAoB,EAAE,GAAG,SAAS,CAAC;IAClD,4BAA4B,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAqGD,eAAO,MAAM,kBAAkB,EAAE,aAAa,CAAC,OAAO,EAAE,OAAO,CA8E9D,CAAC"}
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="b490987d-e826-5537-b3ef-b16f1806d8a0")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="11ea6343-ed32-5976-95e6-0d333deedb7a")}catch(e){}}();
3
3
 
4
4
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
5
5
  if (k2 === undefined) k2 = k;
@@ -45,7 +45,7 @@ const sentry_utils_1 = require("../../command-utils/sentry.utils");
45
45
  const out_of_date_client_error_1 = require("../../utils/out-of-date-client-error");
46
46
  const resolve_project_identifier_1 = require("../../utils/resolve-project-identifier");
47
47
  const resolve_git_options_1 = require("./resolve-git-options");
48
- const handler = async ({ apiToken, commitSha: commitSha_, repoDirectory, localImageTag, assetsDir, assetsUploadId, backendUrl, backendProxyPaths, instructionsFile, containerPort, containerEnv, containerHealthCheckEndpoint, dryRun, }) => {
48
+ const handler = async ({ apiToken, commitSha: commitSha_, repoDirectory, localImageTag, assetsDir, assetsUploadId, backendUrl, backendProxyPaths, instructionsFile, enableLocalMocks, containerPort, containerEnv, containerHealthCheckEndpoint, dryRun, }) => {
49
49
  const logger = (0, common_1.initLogger)();
50
50
  const { commitSha } = await (0, resolve_git_options_1.resolveGitOptions)({
51
51
  commitSha: commitSha_,
@@ -57,6 +57,9 @@ const handler = async ({ apiToken, commitSha: commitSha_, repoDirectory, localIm
57
57
  if (targets.length !== 1) {
58
58
  throw new Error("Provide exactly one of --localImageTag, --assetsDir, or --assetsUploadId.");
59
59
  }
60
+ if (enableLocalMocks && backendUrl) {
61
+ throw new Error("--enableLocalMocks cannot be combined with --backendUrl.");
62
+ }
60
63
  const target = localImageTag ?? assetsDir ?? `uploaded assets ${assetsUploadId ?? ""}`;
61
64
  logger.info(`Launching agentic PR testing with ${target} for commit ${commitSha}`);
62
65
  if (dryRun) {
@@ -65,7 +68,14 @@ const handler = async ({ apiToken, commitSha: commitSha_, repoDirectory, localIm
65
68
  }
66
69
  Sentry.captureMessage("Received generate sessions request", {
67
70
  level: "debug",
68
- extra: { commitSha, localImageTag, assetsDir, assetsUploadId, backendUrl },
71
+ extra: {
72
+ commitSha,
73
+ localImageTag,
74
+ assetsDir,
75
+ assetsUploadId,
76
+ backendUrl,
77
+ enableLocalMocks,
78
+ },
69
79
  });
70
80
  const apiToken_ = await (0, client_1.resolveApiTokenWithOAuth)({
71
81
  apiToken,
@@ -80,6 +90,7 @@ const handler = async ({ apiToken, commitSha: commitSha_, repoDirectory, localIm
80
90
  assetsUploadId,
81
91
  commitSha,
82
92
  ...(instructionsFile ? { instructionsFile } : {}),
93
+ enableLocalMocks,
83
94
  containerPort,
84
95
  containerEnv,
85
96
  containerHealthCheckEndpoint,
@@ -143,6 +154,10 @@ exports.ciAgentTestCommand = {
143
154
  string: true,
144
155
  description: "Path to a markdown file with instructions for the agent (e.g. how to log in, which accounts to use).",
145
156
  },
157
+ enableLocalMocks: {
158
+ boolean: true,
159
+ description: "Mock the container's network traffic from relevant recorded sessions.",
160
+ },
146
161
  containerPort: {
147
162
  number: true,
148
163
  description: "The port to expose the container on.",
@@ -171,4 +186,4 @@ exports.ciAgentTestCommand = {
171
186
  handler: (0, sentry_utils_1.wrapHandler)(handler),
172
187
  };
173
188
  //# sourceMappingURL=agent-test.command.js.map
174
- //# debugId=b490987d-e826-5537-b3ef-b16f1806d8a0
189
+ //# debugId=11ea6343-ed32-5976-95e6-0d333deedb7a
@@ -1 +1 @@
1
- {"version":3,"file":"agent-test.command.js","sources":["../../../src/commands/ci/agent-test.command.ts"],"sourceRoot":"","names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,qDAAoE;AACpE,qDAAsD;AACtD,qFAA4E;AAC5E,qDAAuC;AAEvC,uEAA6D;AAC7D,mEAA+D;AAC/D,mFAG8C;AAC9C,uFAAkF;AAClF,+DAA0D;AAkB1D,MAAM,OAAO,GAAG,KAAK,EAAE,EACrB,QAAQ,EACR,SAAS,EAAE,UAAU,EACrB,aAAa,EACb,aAAa,EACb,SAAS,EACT,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,4BAA4B,EAC5B,MAAM,GACE,EAAiB,EAAE;IAC3B,MAAM,MAAM,GAAG,IAAA,mBAAU,GAAE,CAAC;IAE5B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,IAAA,uCAAiB,EAAC;QAC5C,SAAS,EAAE,UAAU;QACrB,OAAO,EAAE,SAAS;QAClB,aAAa,EAAE,SAAS;QACxB,aAAa;KACd,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,CAAC,aAAa,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,2EAA2E,CAC5E,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GACV,aAAa,IAAI,SAAS,IAAI,mBAAmB,cAAc,IAAI,EAAE,EAAE,CAAC;IAC1E,MAAM,CAAC,IAAI,CACT,qCAAqC,MAAM,eAAe,SAAS,EAAE,CACtE,CAAC;IAEF,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CACT,2BAA2B,MAAM,sDAAsD,SAAS,EAAE,CACnG,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,oCAAoC,EAAE;QAC1D,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE;KAC3E,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,MAAM,IAAA,iCAAwB,EAAC;QAC/C,QAAQ;QACR,gBAAgB,EAAE,IAAI;KACvB,CAAC,CAAC;IAEH,MAAM,iBAAiB,GAAG,MAAM,IAAA,qDAAwB,EAAC,SAAS,CAAC,CAAC;IAEpE,IAAI,CAAC;QACH,MAAM,IAAA,yCAAgB,EAAC;YACrB,QAAQ,EAAE,SAAS;YACnB,aAAa;YACb,eAAe,EAAE,SAAS;YAC1B,cAAc;YACd,SAAS;YACT,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,aAAa;YACb,YAAY;YACZ,4BAA4B;YAC5B,GAAG,CAAC,UAAU;gBACZ,CAAC,CAAC;oBACE,OAAO,EAAE;wBACP,GAAG,EAAE,UAAU;wBACf,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;wBACpD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;wBACpD,UAAU,EAAE,iBAAiB;qBAC9B;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,iBAAiB;SACrB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,IAAA,iDAAsB,EAAC,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,4CAAiB,EAAE,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEW,QAAA,kBAAkB,GAAoC;IACjE,OAAO,EAAE,YAAY;IACrB,QAAQ,EACN,iEAAiE;QACjE,gFAAgF;IAClF,OAAO,EAAE;QACP,QAAQ,EAAE,wBAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,wBAAO,CAAC,SAAS;QAC5B,aAAa,EAAE;YACb,MAAM,EAAE,IAAI;YACZ,WAAW,EACT,gFAAgF;gBAChF,sCAAsC;SACzC;QACD,aAAa,EAAE;YACb,MAAM,EAAE,IAAI;YACZ,WAAW,EACT,sFAAsF;SACzF;QACD,SAAS,EAAE;YACT,MAAM,EAAE,IAAI;YACZ,WAAW,EACT,wEAAwE;SAC3E;QACD,cAAc,EAAE;YACd,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,iDAAiD;SAC/D;QACD,UAAU,EAAE;YACV,MAAM,EAAE,IAAI;YACZ,WAAW,EACT,mHAAmH;SACtH;QACD,iBAAiB,EAAE;YACjB,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,CAAC,MAAM,CAAC;YACjB,WAAW,EACT,oEAAoE;SACvE;QACD,gBAAgB,EAAE;YAChB,MAAM,EAAE,IAAI;YACZ,WAAW,EACT,sGAAsG;SACzG;QACD,aAAa,EAAE;YACb,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,sCAAsC;SACpD;QACD,YAAY,EAAE;YACZ,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,CAAC,KAAe,EAAE,EAAE,CAC1B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACd,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAChC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACvB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,EAAE,CAAC,CAAC;gBACxD,CAAC;gBACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;YACnC,CAAC,CAAC;YACJ,WAAW,EAAE,oDAAoD;SAClE;QACD,4BAA4B,EAAE;YAC5B,MAAM,EAAE,IAAI;YACZ,WAAW,EACT,gFAAgF;SACnF;QACD,MAAM,EAAE;YACN,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,wDAAwD;SACtE;KACF;IACD,OAAO,EAAE,IAAA,0BAAW,EAAC,OAAO,CAAC;CAC9B,CAAC","debugId":"b490987d-e826-5537-b3ef-b16f1806d8a0"}
1
+ {"version":3,"file":"agent-test.command.js","sources":["../../../src/commands/ci/agent-test.command.ts"],"sourceRoot":"","names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,qDAAoE;AACpE,qDAAsD;AACtD,qFAA4E;AAC5E,qDAAuC;AAEvC,uEAA6D;AAC7D,mEAA+D;AAC/D,mFAG8C;AAC9C,uFAAkF;AAClF,+DAA0D;AAmB1D,MAAM,OAAO,GAAG,KAAK,EAAE,EACrB,QAAQ,EACR,SAAS,EAAE,UAAU,EACrB,aAAa,EACb,aAAa,EACb,SAAS,EACT,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,4BAA4B,EAC5B,MAAM,GACE,EAAiB,EAAE;IAC3B,MAAM,MAAM,GAAG,IAAA,mBAAU,GAAE,CAAC;IAE5B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,IAAA,uCAAiB,EAAC;QAC5C,SAAS,EAAE,UAAU;QACrB,OAAO,EAAE,SAAS;QAClB,aAAa,EAAE,SAAS;QACxB,aAAa;KACd,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,CAAC,aAAa,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,2EAA2E,CAC5E,CAAC;IACJ,CAAC;IACD,IAAI,gBAAgB,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,MAAM,GACV,aAAa,IAAI,SAAS,IAAI,mBAAmB,cAAc,IAAI,EAAE,EAAE,CAAC;IAC1E,MAAM,CAAC,IAAI,CACT,qCAAqC,MAAM,eAAe,SAAS,EAAE,CACtE,CAAC;IAEF,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CACT,2BAA2B,MAAM,sDAAsD,SAAS,EAAE,CACnG,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,oCAAoC,EAAE;QAC1D,KAAK,EAAE,OAAO;QACd,KAAK,EAAE;YACL,SAAS;YACT,aAAa;YACb,SAAS;YACT,cAAc;YACd,UAAU;YACV,gBAAgB;SACjB;KACF,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,MAAM,IAAA,iCAAwB,EAAC;QAC/C,QAAQ;QACR,gBAAgB,EAAE,IAAI;KACvB,CAAC,CAAC;IAEH,MAAM,iBAAiB,GAAG,MAAM,IAAA,qDAAwB,EAAC,SAAS,CAAC,CAAC;IAEpE,IAAI,CAAC;QACH,MAAM,IAAA,yCAAgB,EAAC;YACrB,QAAQ,EAAE,SAAS;YACnB,aAAa;YACb,eAAe,EAAE,SAAS;YAC1B,cAAc;YACd,SAAS;YACT,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,gBAAgB;YAChB,aAAa;YACb,YAAY;YACZ,4BAA4B;YAC5B,GAAG,CAAC,UAAU;gBACZ,CAAC,CAAC;oBACE,OAAO,EAAE;wBACP,GAAG,EAAE,UAAU;wBACf,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;wBACpD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;wBACpD,UAAU,EAAE,iBAAiB;qBAC9B;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,iBAAiB;SACrB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,IAAA,iDAAsB,EAAC,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,4CAAiB,EAAE,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEW,QAAA,kBAAkB,GAAoC;IACjE,OAAO,EAAE,YAAY;IACrB,QAAQ,EACN,iEAAiE;QACjE,gFAAgF;IAClF,OAAO,EAAE;QACP,QAAQ,EAAE,wBAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,wBAAO,CAAC,SAAS;QAC5B,aAAa,EAAE;YACb,MAAM,EAAE,IAAI;YACZ,WAAW,EACT,gFAAgF;gBAChF,sCAAsC;SACzC;QACD,aAAa,EAAE;YACb,MAAM,EAAE,IAAI;YACZ,WAAW,EACT,sFAAsF;SACzF;QACD,SAAS,EAAE;YACT,MAAM,EAAE,IAAI;YACZ,WAAW,EACT,wEAAwE;SAC3E;QACD,cAAc,EAAE;YACd,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,iDAAiD;SAC/D;QACD,UAAU,EAAE;YACV,MAAM,EAAE,IAAI;YACZ,WAAW,EACT,mHAAmH;SACtH;QACD,iBAAiB,EAAE;YACjB,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,CAAC,MAAM,CAAC;YACjB,WAAW,EACT,oEAAoE;SACvE;QACD,gBAAgB,EAAE;YAChB,MAAM,EAAE,IAAI;YACZ,WAAW,EACT,sGAAsG;SACzG;QACD,gBAAgB,EAAE;YAChB,OAAO,EAAE,IAAI;YACb,WAAW,EACT,uEAAuE;SAC1E;QACD,aAAa,EAAE;YACb,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,sCAAsC;SACpD;QACD,YAAY,EAAE;YACZ,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,CAAC,KAAe,EAAE,EAAE,CAC1B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACd,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAChC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACvB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,EAAE,CAAC,CAAC;gBACxD,CAAC;gBACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;YACnC,CAAC,CAAC;YACJ,WAAW,EAAE,oDAAoD;SAClE;QACD,4BAA4B,EAAE;YAC5B,MAAM,EAAE,IAAI;YACZ,WAAW,EACT,gFAAgF;SACnF;QACD,MAAM,EAAE;YACN,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,wDAAwD;SACtE;KACF;IACD,OAAO,EAAE,IAAA,0BAAW,EAAC,OAAO,CAAC;CAC9B,CAAC","debugId":"11ea6343-ed32-5976-95e6-0d333deedb7a"}
@@ -0,0 +1,11 @@
1
+ import type { CommandModule } from "yargs";
2
+ interface Options {
3
+ apiToken: string | null | undefined;
4
+ startUrl: string;
5
+ crawlingTimeoutSeconds: number;
6
+ maxNumSessions: number;
7
+ skipTestRun: boolean;
8
+ }
9
+ export declare const crawlCommand: CommandModule<unknown, Options>;
10
+ export {};
11
+ //# sourceMappingURL=crawl.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crawl.command.d.ts","sourceRoot":"","sources":["../../src/commands/crawl.command.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAS3C,UAAU,OAAO;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;CACtB;AAiHD,eAAO,MAAM,YAAY,EAAE,aAAa,CAAC,OAAO,EAAE,OAAO,CA+BxD,CAAC"}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="462f67fa-56e2-5011-be80-1531fc5726b5")}catch(e){}}();
3
+
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.crawlCommand = void 0;
6
+ const client_1 = require("@alwaysmeticulous/client");
7
+ const common_1 = require("@alwaysmeticulous/common");
8
+ const downloading_helpers_1 = require("@alwaysmeticulous/downloading-helpers");
9
+ const common_options_1 = require("../command-utils/common-options");
10
+ const sentry_utils_1 = require("../command-utils/sentry.utils");
11
+ const resolve_project_identifier_1 = require("../utils/resolve-project-identifier");
12
+ const RUN_CRAWL_BUNDLE_PATH = "crawler/v1/run-crawl.bundle.js";
13
+ const TIME_TO_WAIT_FOR_UPLOADS_MS = 20_000;
14
+ const handler = async ({ apiToken, startUrl, crawlingTimeoutSeconds, maxNumSessions, skipTestRun, }) => {
15
+ const logger = (0, common_1.initLogger)();
16
+ // Resolve the full auth chain (explicit token → OAuth → env var → legacy
17
+ // config file), triggering an interactive browser login when nothing is
18
+ // stored. OAuth tokens are user-scoped, so the project to record into is
19
+ // resolved from the user's default project (`meticulous auth set-project`).
20
+ const resolvedApiToken = await (0, client_1.resolveApiTokenWithOAuth)({
21
+ apiToken,
22
+ enableOAuthLogin: true,
23
+ });
24
+ const { projectId } = await (0, resolve_project_identifier_1.resolveProjectIdentifier)(resolvedApiToken);
25
+ // Use the OAuth-aware client so the short-lived access token is refreshed
26
+ // per request — the test-run creation happens after a potentially long
27
+ // crawl, well past the access token's lifetime.
28
+ const client = await (0, client_1.createClientWithOAuth)({
29
+ apiToken,
30
+ enableOAuthLogin: true,
31
+ });
32
+ const project = await (0, client_1.getProject)(client, projectId);
33
+ if (!project) {
34
+ logger.error("Could not retrieve project data. Is the API token correct?");
35
+ process.exit(1);
36
+ }
37
+ logger.info(`Crawling ${startUrl}, recording sessions into project ${project.organization.name}/${project.name}...`);
38
+ const onReadyForManualLogin = () => {
39
+ logger.info("");
40
+ logger.info("A browser window has opened at your start URL. If your app requires login, log in now.");
41
+ logger.info("(warning: recording has already started, so the login will be part of the recorded session and may store credentials)");
42
+ logger.info("Once you're ready, press Enter here to start crawling...");
43
+ return new Promise((resolve) => {
44
+ process.stdin.once("data", () => resolve());
45
+ });
46
+ };
47
+ const { sessionIds, uniqueUrlCount } = await runCrawl({
48
+ apiToken: resolvedApiToken,
49
+ projectId,
50
+ startUrl,
51
+ crawlingTimeoutSeconds,
52
+ maxNumSessions,
53
+ onReadyForManualLogin,
54
+ logLevel: logger.getLevel(),
55
+ });
56
+ logger.info(`Recorded ${sessionIds.length} sessions over ${uniqueUrlCount} unique URLs.`);
57
+ if (sessionIds.length === 0) {
58
+ logger.error("No sessions were recorded. Exiting.");
59
+ process.exit(1);
60
+ }
61
+ if (skipTestRun) {
62
+ logger.info("Skipping test run creation (--skipTestRun).");
63
+ process.exit(0);
64
+ }
65
+ logger.info("Waiting 20 seconds for any remaining uploads to complete...");
66
+ await new Promise((resolve) => setTimeout(resolve, TIME_TO_WAIT_FOR_UPLOADS_MS));
67
+ const testRun = await (0, client_1.createCrawlerTestRun)({
68
+ client,
69
+ sessionIds,
70
+ appUrl: startUrl,
71
+ projectId,
72
+ });
73
+ logger.info(`Created test run: ${testRun.url}`);
74
+ const includedSessionIds = new Set((testRun.configData.testCases ?? []).map(({ sessionId }) => sessionId));
75
+ const missingSessionIds = sessionIds.filter((sessionId) => !includedSessionIds.has(sessionId));
76
+ if (missingSessionIds.length > 0) {
77
+ logger.warn(`The test run includes ${includedSessionIds.size} of the ${sessionIds.length} recorded sessions. ` +
78
+ `The following sessions were not included, likely because they hadn't finished uploading yet: ` +
79
+ missingSessionIds.join(", "));
80
+ }
81
+ process.exit(0);
82
+ };
83
+ const runCrawl = async (options) => {
84
+ const bundleLocation = await (0, downloading_helpers_1.fetchAsset)(RUN_CRAWL_BUNDLE_PATH);
85
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
86
+ return (await require(bundleLocation)).runCrawl(options);
87
+ };
88
+ exports.crawlCommand = {
89
+ command: "crawl",
90
+ describe: "Crawl your app to record sessions and create a Meticulous test run. " +
91
+ "Opens a browser at the given start URL and lets you log in manually before crawling starts.",
92
+ builder: {
93
+ apiToken: common_options_1.OPTIONS.apiToken,
94
+ startUrl: {
95
+ string: true,
96
+ description: "The URL to start crawling from, e.g. https://app.example.com",
97
+ demandOption: true,
98
+ },
99
+ crawlingTimeoutSeconds: {
100
+ number: true,
101
+ description: "The maximum time in seconds to spend crawling (time spent logging in doesn't count)",
102
+ default: 120,
103
+ },
104
+ maxNumSessions: {
105
+ number: true,
106
+ description: "The maximum number of sessions to record",
107
+ default: 200,
108
+ },
109
+ skipTestRun: {
110
+ boolean: true,
111
+ description: "Don't create a test run from the recorded sessions",
112
+ default: false,
113
+ },
114
+ },
115
+ handler: (0, sentry_utils_1.wrapHandler)(handler),
116
+ };
117
+ //# sourceMappingURL=crawl.command.js.map
118
+ //# debugId=462f67fa-56e2-5011-be80-1531fc5726b5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crawl.command.js","sources":["../../src/commands/crawl.command.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"462f67fa-56e2-5011-be80-1531fc5726b5"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=backend-dev-command.utils.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-dev-command.utils.spec.d.ts","sourceRoot":"","sources":["../../../../src/commands/record/__tests__/backend-dev-command.utils.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="94ed5b2a-6fb4-5a21-8b2d-2de5c51f65dc")}catch(e){}}();
3
+
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ const vitest_1 = require("vitest");
6
+ const backend_dev_command_utils_1 = require("../backend-dev-command.utils");
7
+ (0, vitest_1.describe)("extractPassthroughCommand", () => {
8
+ (0, vitest_1.it)("returns tokens after the first standalone --", () => {
9
+ (0, vitest_1.expect)((0, backend_dev_command_utils_1.extractPassthroughCommand)([
10
+ "/usr/bin/node",
11
+ "/cli/main.js",
12
+ "record",
13
+ "backend",
14
+ "--port",
15
+ "0",
16
+ "--",
17
+ "npx",
18
+ "wrangler",
19
+ "dev",
20
+ "--port",
21
+ "8787",
22
+ ])).toEqual(["npx", "wrangler", "dev", "--port", "8787"]);
23
+ });
24
+ (0, vitest_1.it)("returns null without a separator or with nothing after it", () => {
25
+ (0, vitest_1.expect)((0, backend_dev_command_utils_1.extractPassthroughCommand)(["node", "main.js", "record", "backend"])).toBeNull();
26
+ (0, vitest_1.expect)((0, backend_dev_command_utils_1.extractPassthroughCommand)(["node", "main.js", "record", "backend", "--"])).toBeNull();
27
+ });
28
+ (0, vitest_1.it)("only splits on the first separator", () => {
29
+ (0, vitest_1.expect)((0, backend_dev_command_utils_1.extractPassthroughCommand)(["node", "main.js", "--", "cmd", "--", "arg"])).toEqual(["cmd", "--", "arg"]);
30
+ });
31
+ });
32
+ (0, vitest_1.describe)("classifyDevCommand", () => {
33
+ vitest_1.it.each([
34
+ [["wrangler", "dev"]],
35
+ [["npx", "wrangler", "dev"]],
36
+ [["npx", "-y", "wrangler", "dev"]],
37
+ [["pnpm", "wrangler", "dev"]],
38
+ [["pnpm", "exec", "wrangler", "dev"]],
39
+ [["pnpm", "dlx", "wrangler", "dev"]],
40
+ [["yarn", "wrangler", "dev"]],
41
+ [["bunx", "wrangler", "dev"]],
42
+ [["./node_modules/.bin/wrangler", "dev"]],
43
+ [["wrangler", "dev", "--port", "8787"]],
44
+ ])("recognizes %j as wrangler dev", (tokens) => {
45
+ (0, vitest_1.expect)((0, backend_dev_command_utils_1.classifyDevCommand)(tokens)).toBe("wrangler-dev");
46
+ });
47
+ vitest_1.it.each([
48
+ [["wrangler", "pages", "dev"]],
49
+ [["npx", "wrangler", "pages", "dev", "./dist"]],
50
+ ])("recognizes %j as wrangler pages dev", (tokens) => {
51
+ (0, vitest_1.expect)((0, backend_dev_command_utils_1.classifyDevCommand)(tokens)).toBe("wrangler-pages-dev");
52
+ });
53
+ vitest_1.it.each([
54
+ [["npm", "run", "dev"]],
55
+ [["pnpm", "run", "dev"]],
56
+ [["node", "server.js"]],
57
+ [["wrangler", "deploy"]],
58
+ [["wrangler"]],
59
+ [[]],
60
+ [["yarn", "dev"]],
61
+ ])("classifies %j as unknown", (tokens) => {
62
+ (0, vitest_1.expect)((0, backend_dev_command_utils_1.classifyDevCommand)(tokens)).toBe("unknown");
63
+ });
64
+ });
65
+ (0, vitest_1.describe)("injectSidecarVar", () => {
66
+ const url = "http://127.0.0.1:9670";
67
+ (0, vitest_1.it)("appends --var for wrangler dev", () => {
68
+ (0, vitest_1.expect)((0, backend_dev_command_utils_1.injectSidecarVar)(["npx", "wrangler", "dev"], "wrangler-dev", url)).toEqual([
69
+ "npx",
70
+ "wrangler",
71
+ "dev",
72
+ "--var",
73
+ `METICULOUS_SIDECAR_URL:${url}`,
74
+ ]);
75
+ });
76
+ (0, vitest_1.it)("appends --binding for wrangler pages dev", () => {
77
+ (0, vitest_1.expect)((0, backend_dev_command_utils_1.injectSidecarVar)(["wrangler", "pages", "dev"], "wrangler-pages-dev", url)).toEqual([
78
+ "wrangler",
79
+ "pages",
80
+ "dev",
81
+ "--binding",
82
+ `METICULOUS_SIDECAR_URL=${url}`,
83
+ ]);
84
+ });
85
+ (0, vitest_1.it)("leaves unknown commands untouched", () => {
86
+ (0, vitest_1.expect)((0, backend_dev_command_utils_1.injectSidecarVar)(["npm", "run", "dev"], "unknown", url)).toEqual([
87
+ "npm",
88
+ "run",
89
+ "dev",
90
+ ]);
91
+ });
92
+ });
93
+ //# sourceMappingURL=backend-dev-command.utils.spec.js.map
94
+ //# debugId=94ed5b2a-6fb4-5a21-8b2d-2de5c51f65dc
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-dev-command.utils.spec.js","sources":["../../../../src/commands/record/__tests__/backend-dev-command.utils.spec.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"94ed5b2a-6fb4-5a21-8b2d-2de5c51f65dc"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=backend-sidecar.utils.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-sidecar.utils.spec.d.ts","sourceRoot":"","sources":["../../../../src/commands/record/__tests__/backend-sidecar.utils.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="2163fdde-fd16-5f61-bb3e-789f93662ccc")}catch(e){}}();
3
+
4
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
5
+ if (k2 === undefined) k2 = k;
6
+ var desc = Object.getOwnPropertyDescriptor(m, k);
7
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
8
+ desc = { enumerable: true, get: function() { return m[k]; } };
9
+ }
10
+ Object.defineProperty(o, k2, desc);
11
+ }) : (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ o[k2] = m[k];
14
+ }));
15
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
16
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
17
+ }) : function(o, v) {
18
+ o["default"] = v;
19
+ });
20
+ var __importStar = (this && this.__importStar) || (function () {
21
+ var ownKeys = function(o) {
22
+ ownKeys = Object.getOwnPropertyNames || function (o) {
23
+ var ar = [];
24
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
25
+ return ar;
26
+ };
27
+ return ownKeys(o);
28
+ };
29
+ return function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ })();
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ const promises_1 = require("fs/promises");
39
+ const net = __importStar(require("net"));
40
+ const os = __importStar(require("os"));
41
+ const path = __importStar(require("path"));
42
+ const vitest_1 = require("vitest");
43
+ const cli_user_error_1 = require("../../../utils/cli-user-error");
44
+ const backend_sidecar_utils_1 = require("../backend-sidecar.utils");
45
+ const FAKE_SIDECAR = path.join(__dirname, "fixtures", "fake-sidecar.cjs");
46
+ const BROKEN_SIDECAR = path.join(__dirname, "fixtures", "broken-sidecar.cjs");
47
+ const FLAKY_SIDECAR = path.join(__dirname, "fixtures", "flaky-sidecar.cjs");
48
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
49
+ const findFreePort = () => new Promise((resolve, reject) => {
50
+ const probe = net.createServer();
51
+ probe.once("error", reject);
52
+ probe.listen(0, "127.0.0.1", () => {
53
+ const port = probe.address().port;
54
+ probe.close(() => resolve(port));
55
+ });
56
+ });
57
+ const occupyPort = () => new Promise((resolve, reject) => {
58
+ const server = net.createServer();
59
+ server.once("error", reject);
60
+ server.listen(0, "127.0.0.1", () => {
61
+ const port = server.address().port;
62
+ resolve({ port, release: () => server.close() });
63
+ });
64
+ });
65
+ const health = async (url) => {
66
+ const response = await fetch(`${url}/v1/health`);
67
+ return (await response.json());
68
+ };
69
+ const waitFor = async (probe, timeoutMs) => {
70
+ const deadline = Date.now() + timeoutMs;
71
+ while (Date.now() < deadline) {
72
+ const result = await probe().catch(() => undefined);
73
+ if (result !== undefined) {
74
+ return result;
75
+ }
76
+ await sleep(100);
77
+ }
78
+ throw new Error("Timed out waiting for condition");
79
+ };
80
+ (0, vitest_1.describe)("resolveSidecarPort", () => {
81
+ (0, vitest_1.it)("returns the requested port when free", async () => {
82
+ const port = await findFreePort();
83
+ await (0, vitest_1.expect)((0, backend_sidecar_utils_1.resolveSidecarPort)(port, "sidecar-only")).resolves.toBe(port);
84
+ });
85
+ (0, vitest_1.it)("picks an ephemeral port for 0", async () => {
86
+ const port = await (0, backend_sidecar_utils_1.resolveSidecarPort)(0, "wrapped");
87
+ (0, vitest_1.expect)(port).toBeGreaterThan(0);
88
+ });
89
+ (0, vitest_1.it)("falls back to an ephemeral port in wrapped mode when busy", async () => {
90
+ const { port, release } = await occupyPort();
91
+ try {
92
+ const resolved = await (0, backend_sidecar_utils_1.resolveSidecarPort)(port, "wrapped");
93
+ (0, vitest_1.expect)(resolved).not.toBe(port);
94
+ (0, vitest_1.expect)(resolved).toBeGreaterThan(0);
95
+ }
96
+ finally {
97
+ release();
98
+ }
99
+ });
100
+ (0, vitest_1.it)("errors in sidecar-only mode when busy", async () => {
101
+ const { port, release } = await occupyPort();
102
+ try {
103
+ await (0, vitest_1.expect)((0, backend_sidecar_utils_1.resolveSidecarPort)(port, "sidecar-only")).rejects.toThrow(cli_user_error_1.CliUserError);
104
+ }
105
+ finally {
106
+ release();
107
+ }
108
+ });
109
+ });
110
+ (0, vitest_1.describe)("startSidecar", () => {
111
+ const startFake = async (options = {}) => {
112
+ const port = await findFreePort();
113
+ return (0, backend_sidecar_utils_1.startSidecar)({
114
+ bundlePath: FAKE_SIDECAR,
115
+ port,
116
+ env: {},
117
+ ...options,
118
+ });
119
+ };
120
+ (0, vitest_1.it)("starts, reports healthy, flushes, and stops", async () => {
121
+ const sidecar = await startFake();
122
+ try {
123
+ (0, vitest_1.expect)((await health(sidecar.url)).ok).toBe(true);
124
+ await sidecar.flush();
125
+ (0, vitest_1.expect)((await health(sidecar.url)).flushCount).toBe(1);
126
+ }
127
+ finally {
128
+ await sidecar.stop();
129
+ }
130
+ await (0, vitest_1.expect)(health(sidecar.url)).rejects.toThrow();
131
+ });
132
+ (0, vitest_1.it)("restarts once on the same port after an unexpected exit", async () => {
133
+ const onRecordingStopped = vitest_1.vi.fn();
134
+ const sidecar = await startFake({ onRecordingStopped });
135
+ try {
136
+ const originalPid = (await health(sidecar.url)).pid;
137
+ await fetch(`${sidecar.url}/die`, { method: "POST" });
138
+ const restartedPid = await waitFor(async () => {
139
+ const current = await health(sidecar.url);
140
+ return current.pid !== originalPid ? current.pid : undefined;
141
+ }, 20_000);
142
+ (0, vitest_1.expect)(restartedPid).not.toBe(originalPid);
143
+ (0, vitest_1.expect)(onRecordingStopped).not.toHaveBeenCalled();
144
+ // A second death exhausts the single restart.
145
+ await fetch(`${sidecar.url}/die`, { method: "POST" });
146
+ await waitFor(() => Promise.resolve(onRecordingStopped.mock.calls.length > 0 ? true : undefined), 20_000);
147
+ }
148
+ finally {
149
+ await sidecar.stop();
150
+ }
151
+ }, 45_000);
152
+ (0, vitest_1.it)("fails with the sidecar's stderr when startup fails", async () => {
153
+ const port = await findFreePort();
154
+ await (0, vitest_1.expect)((0, backend_sidecar_utils_1.startSidecar)({ bundlePath: BROKEN_SIDECAR, port, env: {} })).rejects.toThrow(/refusing to start/);
155
+ });
156
+ (0, vitest_1.it)("does not restart a sidecar that dies during startup", async () => {
157
+ const port = await findFreePort();
158
+ const marker = path.join(os.tmpdir(), `flaky-sidecar-${port}.marker`);
159
+ await (0, promises_1.rm)(marker, { force: true });
160
+ try {
161
+ await (0, vitest_1.expect)((0, backend_sidecar_utils_1.startSidecar)({
162
+ bundlePath: FLAKY_SIDECAR,
163
+ port,
164
+ env: { METICULOUS_TEST_FLAKY_MARKER: marker },
165
+ })).rejects.toThrow(/exited during startup/);
166
+ // A startup failure must not trigger the crash-restart supervision: a
167
+ // successful background restart would outlive the failed CLI run with
168
+ // no handle to stop it, holding the port.
169
+ await sleep(1_500);
170
+ const orphanHealth = await fetch(`http://127.0.0.1:${port}/v1/health`).catch(() => undefined);
171
+ if (orphanHealth) {
172
+ // Kill the orphan so a regression doesn't leak a process, then fail.
173
+ await fetch(`http://127.0.0.1:${port}/die`, { method: "POST" }).catch(() => undefined);
174
+ }
175
+ (0, vitest_1.expect)(orphanHealth).toBeUndefined();
176
+ }
177
+ finally {
178
+ await (0, promises_1.rm)(marker, { force: true });
179
+ }
180
+ }, 20_000);
181
+ });
182
+ //# sourceMappingURL=backend-sidecar.utils.spec.js.map
183
+ //# debugId=2163fdde-fd16-5f61-bb3e-789f93662ccc
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-sidecar.utils.spec.js","sources":["../../../../src/commands/record/__tests__/backend-sidecar.utils.spec.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"2163fdde-fd16-5f61-bb3e-789f93662ccc"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=backend.command.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.command.spec.d.ts","sourceRoot":"","sources":["../../../../src/commands/record/__tests__/backend.command.spec.ts"],"names":[],"mappings":""}