opendevbrowser 0.0.27 → 0.0.28

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 (76) hide show
  1. package/README.md +1 -1
  2. package/dist/browser/canvas-manager.d.ts.map +1 -1
  3. package/dist/canvas/document-store.d.ts.map +1 -1
  4. package/dist/canvas/guidance.d.ts +22 -0
  5. package/dist/canvas/guidance.d.ts.map +1 -0
  6. package/dist/{chunk-MWBDO2L5.js → chunk-I5ZCOZZV.js} +224 -80
  7. package/dist/chunk-I5ZCOZZV.js.map +1 -0
  8. package/dist/{chunk-V5DJUSPV.js → chunk-T3VVHJTK.js} +1381 -318
  9. package/dist/chunk-T3VVHJTK.js.map +1 -0
  10. package/dist/cli/commands/inspiredesign.d.ts +2 -0
  11. package/dist/cli/commands/inspiredesign.d.ts.map +1 -1
  12. package/dist/cli/commands/macro-resolve.d.ts +2 -0
  13. package/dist/cli/commands/macro-resolve.d.ts.map +1 -1
  14. package/dist/cli/commands/product-video.d.ts +2 -0
  15. package/dist/cli/commands/product-video.d.ts.map +1 -1
  16. package/dist/cli/commands/research.d.ts +2 -0
  17. package/dist/cli/commands/research.d.ts.map +1 -1
  18. package/dist/cli/daemon-commands.d.ts.map +1 -1
  19. package/dist/cli/help.d.ts.map +1 -1
  20. package/dist/cli/index.js +125 -28
  21. package/dist/cli/index.js.map +1 -1
  22. package/dist/cli/utils/workflow-message.d.ts +3 -0
  23. package/dist/cli/utils/workflow-message.d.ts.map +1 -1
  24. package/dist/daemon-fingerprint.json +1 -1
  25. package/dist/index.js +39 -15
  26. package/dist/index.js.map +1 -1
  27. package/dist/inspiredesign/contract.d.ts +52 -1
  28. package/dist/inspiredesign/contract.d.ts.map +1 -1
  29. package/dist/inspiredesign/handoff.d.ts +12 -0
  30. package/dist/inspiredesign/handoff.d.ts.map +1 -1
  31. package/dist/inspiredesign/reference-pattern-board.d.ts +1 -0
  32. package/dist/inspiredesign/reference-pattern-board.d.ts.map +1 -1
  33. package/dist/macros/execute-runtime.d.ts +2 -1
  34. package/dist/macros/execute-runtime.d.ts.map +1 -1
  35. package/dist/macros/execute.d.ts +4 -2
  36. package/dist/macros/execute.d.ts.map +1 -1
  37. package/dist/opendevbrowser.js +39 -15
  38. package/dist/opendevbrowser.js.map +1 -1
  39. package/dist/providers/browser-fallback.d.ts +7 -0
  40. package/dist/providers/browser-fallback.d.ts.map +1 -1
  41. package/dist/providers/community/index.d.ts.map +1 -1
  42. package/dist/providers/index.d.ts.map +1 -1
  43. package/dist/providers/renderer.d.ts.map +1 -1
  44. package/dist/providers/research-compiler.d.ts.map +1 -1
  45. package/dist/providers/runtime-bundle.d.ts +1 -1
  46. package/dist/providers/runtime-bundle.d.ts.map +1 -1
  47. package/dist/providers/runtime-factory.d.ts.map +1 -1
  48. package/dist/providers/shopping/index.d.ts.map +1 -1
  49. package/dist/providers/social/platform.d.ts.map +1 -1
  50. package/dist/providers/social/search-quality.d.ts.map +1 -1
  51. package/dist/providers/social/youtube.d.ts.map +1 -1
  52. package/dist/providers/workflow-handoff.d.ts +18 -1
  53. package/dist/providers/workflow-handoff.d.ts.map +1 -1
  54. package/dist/providers/workflows.d.ts +3 -0
  55. package/dist/providers/workflows.d.ts.map +1 -1
  56. package/dist/{providers-TR3DUJZV.js → providers-QF2RFB4J.js} +2 -2
  57. package/dist/public-surface/generated-manifest.d.ts +6 -6
  58. package/dist/public-surface/generated-manifest.d.ts.map +1 -1
  59. package/dist/public-surface/source.d.ts +8 -8
  60. package/dist/public-surface/source.d.ts.map +1 -1
  61. package/dist/tools/inspiredesign_run.d.ts.map +1 -1
  62. package/dist/tools/macro_resolve.d.ts.map +1 -1
  63. package/dist/tools/product_video_run.d.ts.map +1 -1
  64. package/dist/tools/research_run.d.ts.map +1 -1
  65. package/dist/tools/shopping_run.d.ts.map +1 -1
  66. package/extension/manifest.json +1 -1
  67. package/package.json +1 -1
  68. package/skills/opendevbrowser-best-practices/SKILL.md +6 -6
  69. package/skills/opendevbrowser-design-agent/SKILL.md +5 -0
  70. package/skills/opendevbrowser-design-agent/artifacts/design-contract-playbook.md +6 -1
  71. package/skills/opendevbrowser-design-agent/assets/templates/design-contract.v1.json +15 -1
  72. package/skills/opendevbrowser-design-agent/assets/templates/inspiredesign-advanced-brief.v1.json +5 -2
  73. package/skills/opendevbrowser-design-agent/assets/templates/reference-pattern-board.v1.json +2 -0
  74. package/dist/chunk-MWBDO2L5.js.map +0 -1
  75. package/dist/chunk-V5DJUSPV.js.map +0 -1
  76. /package/dist/{providers-TR3DUJZV.js.map → providers-QF2RFB4J.js.map} +0 -0
@@ -1,5 +1,6 @@
1
1
  import type { ParsedArgs } from "../args";
2
2
  import { type ChallengeAutomationMode } from "../../challenges/types";
3
+ import type { WorkflowBrowserMode } from "../../providers/types";
3
4
  type InspiredesignCommandArgs = {
4
5
  brief?: string;
5
6
  urls?: string[];
@@ -9,6 +10,7 @@ type InspiredesignCommandArgs = {
9
10
  timeoutMs?: number;
10
11
  outputDir?: string;
11
12
  ttlHours?: number;
13
+ browserMode?: WorkflowBrowserMode;
12
14
  useCookies?: boolean;
13
15
  challengeAutomationMode?: ChallengeAutomationMode;
14
16
  cookiePolicyOverride?: "off" | "auto" | "required";
@@ -1 +1 @@
1
- {"version":3,"file":"inspiredesign.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/inspiredesign.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAW1C,OAAO,EAA6B,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAGjG,KAAK,wBAAwB,GAAG;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC7B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAClD,oBAAoB,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,UAAU,CAAC;CACpD,CAAC;AA0JF,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,UAAU;;;;GA+B7D;AAED,eAAO,MAAM,QAAQ;yCA7KuB,MAAM,EAAE,KAAG,wBAAwB;CA+K9E,CAAC"}
1
+ {"version":3,"file":"inspiredesign.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/inspiredesign.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAW1C,OAAO,EAA6B,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,KAAK,wBAAwB,GAAG;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC7B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAClD,oBAAoB,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,UAAU,CAAC;CACpD,CAAC;AA6KF,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,UAAU;;;;GAgC7D;AAED,eAAO,MAAM,QAAQ;yCAhMuB,MAAM,EAAE,KAAG,wBAAwB;CAkM9E,CAAC"}
@@ -1,11 +1,13 @@
1
1
  import type { ParsedArgs } from "../args";
2
2
  import { type ChallengeAutomationMode } from "../../challenges/types";
3
+ import type { WorkflowBrowserMode } from "../../providers/types";
3
4
  type MacroResolveArgs = {
4
5
  expression?: string;
5
6
  defaultProvider?: string;
6
7
  includeCatalog?: boolean;
7
8
  execute?: boolean;
8
9
  timeoutMs?: number;
10
+ browserMode?: WorkflowBrowserMode;
9
11
  challengeAutomationMode?: ChallengeAutomationMode;
10
12
  };
11
13
  export declare function runMacroResolve(args: ParsedArgs): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"macro-resolve.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/macro-resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAK1C,OAAO,EAA6B,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjG,KAAK,gBAAgB,GAAG;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;CACnD,CAAC;AAyIF,wBAAsB,eAAe,CAAC,IAAI,EAAE,UAAU;;;;GAyBrD;AAED,eAAO,MAAM,QAAQ;qCAhGmB,MAAM,EAAE,KAAG,gBAAgB;CAkGlE,CAAC"}
1
+ {"version":3,"file":"macro-resolve.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/macro-resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAU1C,OAAO,EAA6B,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,KAAK,gBAAgB,GAAG;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;CACnD,CAAC;AAsIF,wBAAsB,eAAe,CAAC,IAAI,EAAE,UAAU;;;;GAgCrD;AAED,eAAO,MAAM,QAAQ;qCAzHmB,MAAM,EAAE,KAAG,gBAAgB;CA2HlE,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import type { ParsedArgs } from "../args";
2
2
  import { type ChallengeAutomationMode } from "../../challenges/types";
3
+ import type { WorkflowBrowserMode } from "../../providers/types";
3
4
  type ProductVideoCommandArgs = {
4
5
  productUrl?: string;
5
6
  productName?: string;
@@ -10,6 +11,7 @@ type ProductVideoCommandArgs = {
10
11
  outputDir?: string;
11
12
  ttlHours?: number;
12
13
  timeoutMs?: number;
14
+ browserMode?: WorkflowBrowserMode;
13
15
  useCookies?: boolean;
14
16
  challengeAutomationMode?: ChallengeAutomationMode;
15
17
  cookiePolicyOverride?: "off" | "auto" | "required";
@@ -1 +1 @@
1
- {"version":3,"file":"product-video.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/product-video.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAM1C,OAAO,EAA6B,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjG,KAAK,uBAAuB,GAAG;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAClD,oBAAoB,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,UAAU,CAAC;CACpD,CAAC;AA+JF,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,UAAU;;;;GAgC5D;AAED,eAAO,MAAM,QAAQ;qCAhLmB,MAAM,EAAE,KAAG,uBAAuB;0BAP7C,MAAM,QAAQ,MAAM,KAAG,OAAO;CA0L1D,CAAC"}
1
+ {"version":3,"file":"product-video.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/product-video.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAM1C,OAAO,EAA6B,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,KAAK,uBAAuB,GAAG;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAClD,oBAAoB,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,UAAU,CAAC;CACpD,CAAC;AAkLF,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,UAAU;;;;GAiC5D;AAED,eAAO,MAAM,QAAQ;qCAnMmB,MAAM,EAAE,KAAG,uBAAuB;0BAR7C,MAAM,QAAQ,MAAM,KAAG,OAAO;CA8M1D,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import type { ParsedArgs } from "../args";
2
2
  import { type ChallengeAutomationMode } from "../../challenges/types";
3
+ import type { WorkflowBrowserMode } from "../../providers/types";
3
4
  type ResearchCommandArgs = {
4
5
  topic?: string;
5
6
  days?: number;
@@ -13,6 +14,7 @@ type ResearchCommandArgs = {
13
14
  timeoutMs?: number;
14
15
  outputDir?: string;
15
16
  ttlHours?: number;
17
+ browserMode?: WorkflowBrowserMode;
16
18
  useCookies?: boolean;
17
19
  challengeAutomationMode?: ChallengeAutomationMode;
18
20
  cookiePolicyOverride?: "off" | "auto" | "required";
@@ -1 +1 @@
1
- {"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/research.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAM1C,OAAO,EAA6B,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjG,KAAK,mBAAmB,GAAG;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,eAAe,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,KAAK,CAAC;IAC/E,OAAO,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC,CAAC;IAC7D,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC;IACtD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAClD,oBAAoB,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,UAAU,CAAC;CACpD,CAAC;AAiOF,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,UAAU;;;;GAoCxD;AAED,eAAO,MAAM,QAAQ;oCAhOkB,MAAM,EAAE,KAAG,mBAAmB;wBAnB1C,MAAM,KAAG,KAAK,CAAC,KAAK,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;CAsPrF,CAAC"}
1
+ {"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/research.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAM1C,OAAO,EAA6B,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,KAAK,mBAAmB,GAAG;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,eAAe,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,KAAK,CAAC;IAC/E,OAAO,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC,CAAC;IAC7D,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC;IACtD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAClD,oBAAoB,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,UAAU,CAAC;CACpD,CAAC;AAoPF,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,UAAU;;;;GAqCxD;AAED,eAAO,MAAM,QAAQ;oCAnPkB,MAAM,EAAE,KAAG,mBAAmB;wBAnB1C,MAAM,KAAG,KAAK,CAAC,KAAK,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;CAyQrF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"daemon-commands.d.ts","sourceRoot":"","sources":["../../src/cli/daemon-commands.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAgDlD,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAaF,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,CA60BnH"}
1
+ {"version":3,"file":"daemon-commands.d.ts","sourceRoot":"","sources":["../../src/cli/daemon-commands.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAiDlD,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAaF,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,CA81BnH"}
@@ -1 +1 @@
1
- {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAgB,WAAW,EAAE,MAAM,QAAQ,CAAC;AACnD,OAAO,EACL,wBAAwB,EAGzB,MAAM,sCAAsC,CAAC;AAE9C,KAAK,QAAQ,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7C,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,UAAU,EAAE,CAAC;CACjC;AAED,MAAM,MAAM,iBAAiB,GAAG,OAAO,wBAAwB,CAAC,UAAU,CAAC,CAAC;AAE5E,UAAU,SAAS;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;CAC7B;AAED,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;CAChC;AAaD,eAAO,MAAM,kBAAkB,QAAO,UAAU,EAE/C,CAAC;AAEF,eAAO,MAAM,sBAAsB,QAAO,MAAM,EAI/C,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,SAAS,YAAY,EAIpD,CAAC;AAEJ,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,UAAU,EAAE,iBAAiB,CAAqE,CAAC;AAE7I,eAAO,MAAM,gBAAgB,EAAE,SAAS,SAAS,EA8JhD,CAAC;AAEF,eAAO,MAAM,iBAAiB,gDAAuB,CAAC;AAEtD,eAAO,MAAM,uBAAuB,EAAE,SAAS,cAAc,EA8B5D,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,SAAS,cAAc,EAoE5D,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,SAAS,cAAc,EAgB3D,CAAC;AA8JF,wBAAgB,WAAW,IAAI,MAAM,CA+BpC"}
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAgB,WAAW,EAAE,MAAM,QAAQ,CAAC;AACnD,OAAO,EACL,wBAAwB,EAGzB,MAAM,sCAAsC,CAAC;AAE9C,KAAK,QAAQ,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7C,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,UAAU,EAAE,CAAC;CACjC;AAED,MAAM,MAAM,iBAAiB,GAAG,OAAO,wBAAwB,CAAC,UAAU,CAAC,CAAC;AAE5E,UAAU,SAAS;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;CAC7B;AAED,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;CAChC;AAaD,eAAO,MAAM,kBAAkB,QAAO,UAAU,EAE/C,CAAC;AAEF,eAAO,MAAM,sBAAsB,QAAO,MAAM,EAI/C,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,SAAS,YAAY,EAIpD,CAAC;AAEJ,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,UAAU,EAAE,iBAAiB,CAAqE,CAAC;AAE7I,eAAO,MAAM,gBAAgB,EAAE,SAAS,SAAS,EA8JhD,CAAC;AAEF,eAAO,MAAM,iBAAiB,gDAAuB,CAAC;AAEtD,eAAO,MAAM,uBAAuB,EAAE,SAAS,cAAc,EA8B5D,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,SAAS,cAAc,EAoE5D,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,SAAS,cAAc,EAiB3D,CAAC;AA8JF,wBAAgB,WAAW,IAAI,MAAM,CA+BpC"}
package/dist/cli/index.js CHANGED
@@ -41,7 +41,7 @@ import {
41
41
  resolveExitCode,
42
42
  startDaemon,
43
43
  toCliError
44
- } from "../chunk-MWBDO2L5.js";
44
+ } from "../chunk-I5ZCOZZV.js";
45
45
  import "../chunk-STGGGVYT.js";
46
46
  import {
47
47
  createNoOpSkillRemovalResult,
@@ -74,7 +74,7 @@ import {
74
74
  setDefaultLogSink,
75
75
  stderrSink,
76
76
  summarizePrimaryProviderIssue
77
- } from "../chunk-V5DJUSPV.js";
77
+ } from "../chunk-T3VVHJTK.js";
78
78
  import "../chunk-FUSXMW3G.js";
79
79
 
80
80
  // src/cli/args.ts
@@ -456,7 +456,7 @@ var HELP_FLAG_GROUPS = [
456
456
  { flag: "--include-all-images", description: "Include all discovered product images." },
457
457
  { flag: "--include-copy", description: "Include product marketing copy metadata." },
458
458
  { flag: "--use-cookies", description: "Enable or disable provider cookie injection for workflow runs; a bare flag means true.", example: "opendevbrowser shopping run --query 'usb hub' --use-cookies" },
459
- { flag: "--browser-mode", description: "Shopping browser-recovery preference: auto, extension, or managed. Use managed for deterministic reruns and extension only when relay-backed auth/session state is required.", example: "opendevbrowser shopping run --query 'wireless ergonomic mouse' --providers shopping/bestbuy,shopping/ebay --browser-mode managed" },
459
+ { flag: "--browser-mode", description: "Provider browser transport mode: auto, extension, or managed. extension reuses relay-backed signed-in browser state; managed runs a deterministic managed browser.", example: "opendevbrowser research run --topic 'browser automation on X' --source-selection social --browser-mode extension --use-cookies --challenge-automation-mode browser_with_helper" },
460
460
  { flag: "--challenge-automation-mode", description: "Per-run challenge automation mode for workflow runs and macro-resolve execute: off, browser, or browser_with_helper. Precedence is run > session > config, and the helper remains browser-scoped only.", example: `opendevbrowser macro-resolve --expression '@community.search("openai")' --execute --challenge-automation-mode browser_with_helper` },
461
461
  { flag: "--cookie-policy-override", description: "Per-run workflow cookie policy override: off, auto, or required.", example: "opendevbrowser research run --topic 'agent workflows' --cookie-policy-override required" },
462
462
  { flag: "--cookie-policy", description: "Alias of --cookie-policy-override." },
@@ -569,6 +569,7 @@ var HELP_ONBOARDING_ENTRIES = [
569
569
  ];
570
570
  var HELP_REFERENCE_ENTRIES = [
571
571
  { label: "src/cli/onboarding-metadata.json", description: "Canonical first-contact onboarding metadata shared by help, nudges, and proof lanes." },
572
+ { label: "src/providers/workflow-handoff.ts", description: "Central next-step advisory builders for workflow follow-through." },
572
573
  { label: "src/inspiredesign/handoff.ts", description: "Shared inspiredesign follow-through commands, artifact names, and Canvas continuation guidance." },
573
574
  { label: "src/public-surface/source.ts", description: "Authoritative command, usage, flag, and tool surface metadata." },
574
575
  { label: "src/public-surface/generated-manifest.ts", description: "Checked-in generated public-surface snapshot consumed by help and parity tests." },
@@ -3689,6 +3690,11 @@ var readRunnableStepCommand = (step) => {
3689
3690
  if (!command) return null;
3690
3691
  return UNRESOLVED_COMMAND_PLACEHOLDER_RE.test(command) ? null : command;
3691
3692
  };
3693
+ var readDisplayableNextStep = (value) => {
3694
+ const text = readNonEmptyString(value);
3695
+ if (!text) return null;
3696
+ return UNRESOLVED_COMMAND_PLACEHOLDER_RE.test(text) ? null : text;
3697
+ };
3692
3698
  var readMeta = (data) => {
3693
3699
  return asRecord(asRecord(data)?.meta);
3694
3700
  };
@@ -3711,6 +3717,9 @@ var readPrimaryNextStep = (data) => {
3711
3717
  const nextStep = commands.find((entry) => typeof entry === "string" && entry.trim().length > 0);
3712
3718
  return nextStep?.trim() ?? null;
3713
3719
  };
3720
+ var inferPrimaryIssueNextStep = (data) => {
3721
+ return summarizePrimaryProviderIssue(readFailures(data))?.guidance?.recommendedNextCommands[0] ?? null;
3722
+ };
3714
3723
  var readFailures = (data) => {
3715
3724
  const meta = readMeta(data);
3716
3725
  if (!meta) return [];
@@ -3729,12 +3738,27 @@ var readSuggestedSteps = (data) => {
3729
3738
  }) : [];
3730
3739
  };
3731
3740
  var buildNextStepMessage = (message, nextStep) => {
3732
- return nextStep ? `${message} Next step: ${nextStep}` : message;
3741
+ const displayableNextStep = readDisplayableNextStep(nextStep);
3742
+ return displayableNextStep ? `${message} Next step: ${displayableNextStep}` : message;
3743
+ };
3744
+ var buildProviderFollowupErrorMessage = (message) => {
3745
+ const normalized = message.toLowerCase();
3746
+ if (normalized.includes("next step:")) return message;
3747
+ if (normalized.includes("requires login or an existing session")) {
3748
+ return buildNextStepMessage(
3749
+ message,
3750
+ "Reuse an authenticated browser session, import logged-in cookies, or use the provider sign-in flow."
3751
+ );
3752
+ }
3753
+ if (normalized.includes("requires manual browser follow-up") || normalized.includes("requires a live browser-rendered page")) {
3754
+ return buildNextStepMessage(message, "Retry with browser assistance or a headed browser session.");
3755
+ }
3756
+ return message;
3733
3757
  };
3734
3758
  var readSuggestedNextAction = (data) => {
3735
3759
  const record = asRecord(data);
3736
3760
  if (!record) return null;
3737
- return readNonEmptyString(record.suggestedNextAction) ?? readNonEmptyString(asRecord(record.sessionInspector)?.suggestedNextAction);
3761
+ return readDisplayableNextStep(record.suggestedNextAction) ?? readDisplayableNextStep(asRecord(record.sessionInspector)?.suggestedNextAction);
3738
3762
  };
3739
3763
  var readSuggestedStepCommand = (data) => {
3740
3764
  let current = asRecord(data);
@@ -3752,18 +3776,19 @@ var readSuggestedStepReason = (data) => {
3752
3776
  while (current) {
3753
3777
  const [firstStep] = readSuggestedSteps(current);
3754
3778
  if (firstStep) {
3755
- return readNonEmptyString(firstStep.reason);
3779
+ return readDisplayableNextStep(firstStep.reason);
3756
3780
  }
3757
3781
  current = asRecord(current.challengePlan);
3758
3782
  }
3759
3783
  return null;
3760
3784
  };
3785
+ var readWorkflowGuidanceNextStep = (data) => readSuggestedNextAction(data) ?? readSuggestedStepCommand(data) ?? readSuggestedStepReason(data);
3761
3786
  var buildWorkflowCompletionMessage = (workflowLabel, data) => {
3762
3787
  const explicitSummary = readPrimarySummary(data);
3763
3788
  if (explicitSummary) {
3764
3789
  return buildNextStepMessage(
3765
3790
  `${workflowLabel} completed with provider follow-up required: ${explicitSummary}`,
3766
- readPrimaryNextStep(data)
3791
+ readPrimaryNextStep(data) ?? inferPrimaryIssueNextStep(data)
3767
3792
  );
3768
3793
  }
3769
3794
  const inferred = summarizePrimaryProviderIssue(readFailures(data));
@@ -3777,7 +3802,7 @@ var buildWorkflowCompletionMessage = (workflowLabel, data) => {
3777
3802
  if (followthroughSummary) {
3778
3803
  return buildNextStepMessage(
3779
3804
  `${workflowLabel} completed. ${followthroughSummary}`,
3780
- readSuggestedNextAction(data) ?? readSuggestedStepCommand(data) ?? readSuggestedStepReason(data)
3805
+ readWorkflowGuidanceNextStep(data)
3781
3806
  );
3782
3807
  }
3783
3808
  return `${workflowLabel} completed.`;
@@ -6893,6 +6918,7 @@ async function runCookieList(args) {
6893
6918
 
6894
6919
  // src/cli/commands/macro-resolve.ts
6895
6920
  var MACRO_TRANSPORT_TIMEOUT_BUFFER_MS = 6e4;
6921
+ var BROWSER_MODE_VALUES = /* @__PURE__ */ new Set(["auto", "extension", "managed"]);
6896
6922
  var deriveMacroTransportTimeoutMs = (timeoutMs) => {
6897
6923
  return Math.max(
6898
6924
  DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS,
@@ -6911,27 +6937,16 @@ var asRecord2 = (value) => {
6911
6937
  }
6912
6938
  return value;
6913
6939
  };
6914
- var readNonEmptyString2 = (value) => typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
6915
6940
  var hasExecutionBlocker = (result) => {
6916
6941
  const execution = asRecord2(asRecord2(result)?.execution);
6917
6942
  const meta = asRecord2(execution?.meta);
6918
6943
  return asRecord2(meta?.blocker) !== null;
6919
6944
  };
6920
- var readMacroResolveSummary = (result) => readNonEmptyString2(asRecord2(result)?.followthroughSummary);
6921
- var readMacroResolveNextStep = (result) => {
6922
- const record = asRecord2(result);
6923
- const explicit = readNonEmptyString2(record?.suggestedNextAction);
6924
- if (explicit) {
6925
- return explicit;
6926
- }
6927
- const [firstStep] = Array.isArray(record?.suggestedSteps) ? record.suggestedSteps.filter((step) => Boolean(step) && typeof step === "object") : [];
6928
- return readNonEmptyString2(firstStep?.command) ?? readNonEmptyString2(firstStep?.reason);
6929
- };
6930
6945
  var buildMacroResolveMessage = (execute, result) => {
6931
- const summary = readMacroResolveSummary(result);
6932
- const nextStep = readMacroResolveNextStep(result);
6946
+ const summary = readFollowthroughSummary(result);
6947
+ const nextStep = readWorkflowGuidanceNextStep(result);
6933
6948
  if (summary) {
6934
- return nextStep ? `${summary} Next step: ${nextStep}` : summary;
6949
+ return buildNextStepMessage(summary, nextStep);
6935
6950
  }
6936
6951
  if (!execute) {
6937
6952
  return "Macro resolved.";
@@ -6981,6 +6996,23 @@ var parseMacroResolveArgs = (rawArgs) => {
6981
6996
  parsed.timeoutMs = parseNumberFlag(requireValue7(arg.split("=", 2)[1], "--timeout-ms"), "--timeout-ms", { min: 1 });
6982
6997
  continue;
6983
6998
  }
6999
+ if (arg === "--browser-mode") {
7000
+ const value = requireValue7(rawArgs[index + 1], "--browser-mode").toLowerCase();
7001
+ if (!BROWSER_MODE_VALUES.has(value)) {
7002
+ throw createUsageError(`Invalid --browser-mode: ${value}`);
7003
+ }
7004
+ parsed.browserMode = value;
7005
+ index += 1;
7006
+ continue;
7007
+ }
7008
+ if (arg?.startsWith("--browser-mode=")) {
7009
+ const value = requireValue7(arg.split("=", 2)[1], "--browser-mode").toLowerCase();
7010
+ if (!BROWSER_MODE_VALUES.has(value)) {
7011
+ throw createUsageError(`Invalid --browser-mode: ${value}`);
7012
+ }
7013
+ parsed.browserMode = value;
7014
+ continue;
7015
+ }
6984
7016
  if (arg === "--challenge-automation-mode") {
6985
7017
  const value = requireValue7(rawArgs[index + 1], "--challenge-automation-mode");
6986
7018
  if (!isChallengeAutomationMode(value)) {
@@ -7006,12 +7038,19 @@ async function runMacroResolve(args) {
7006
7038
  if (!parsed.expression) {
7007
7039
  throw createUsageError("Missing --expression");
7008
7040
  }
7041
+ if (!parsed.execute && parsed.browserMode) {
7042
+ throw createUsageError("--browser-mode requires --execute for macro-resolve");
7043
+ }
7044
+ if (!parsed.execute && parsed.challengeAutomationMode) {
7045
+ throw createUsageError("--challenge-automation-mode requires --execute for macro-resolve");
7046
+ }
7009
7047
  const params = {
7010
7048
  expression: parsed.expression,
7011
7049
  defaultProvider: parsed.defaultProvider,
7012
7050
  includeCatalog: parsed.includeCatalog ?? false,
7013
7051
  execute: parsed.execute ?? false,
7014
7052
  ...typeof parsed.timeoutMs === "number" ? { timeoutMs: parsed.timeoutMs } : {},
7053
+ ...parsed.browserMode ? { browserMode: parsed.browserMode } : {},
7015
7054
  ...parsed.challengeAutomationMode ? { challengeAutomationMode: parsed.challengeAutomationMode } : {}
7016
7055
  };
7017
7056
  const result = typeof parsed.timeoutMs === "number" ? await callDaemon("macro.resolve", params, {
@@ -7028,6 +7067,7 @@ async function runMacroResolve(args) {
7028
7067
  var SOURCE_VALUES = /* @__PURE__ */ new Set(["web", "community", "social", "shopping"]);
7029
7068
  var SOURCE_SELECTION_VALUES = /* @__PURE__ */ new Set(["auto", "web", "community", "social", "shopping", "all"]);
7030
7069
  var MODE_VALUES = /* @__PURE__ */ new Set(["compact", "json", "md", "context", "path"]);
7070
+ var BROWSER_MODE_VALUES2 = /* @__PURE__ */ new Set(["auto", "extension", "managed"]);
7031
7071
  var COOKIE_POLICY_VALUES = /* @__PURE__ */ new Set(["off", "auto", "required"]);
7032
7072
  var requireValue8 = (rawArgs, index, flag) => {
7033
7073
  const value = rawArgs[index + 1];
@@ -7177,6 +7217,23 @@ var parseResearchRunArgs = (rawArgs) => {
7177
7217
  parsed.ttlHours = parseNumberFlag(arg.split("=", 2)[1] ?? "", "--ttl-hours", { min: 1, max: 168 });
7178
7218
  continue;
7179
7219
  }
7220
+ if (arg === "--browser-mode") {
7221
+ const value = requireValue8(rawArgs, index, "--browser-mode").toLowerCase();
7222
+ if (!BROWSER_MODE_VALUES2.has(value)) {
7223
+ throw createUsageError(`Invalid --browser-mode: ${value}`);
7224
+ }
7225
+ parsed.browserMode = value;
7226
+ index += 1;
7227
+ continue;
7228
+ }
7229
+ if (arg?.startsWith("--browser-mode=")) {
7230
+ const value = (arg.split("=", 2)[1] ?? "").toLowerCase();
7231
+ if (!BROWSER_MODE_VALUES2.has(value)) {
7232
+ throw createUsageError(`Invalid --browser-mode: ${value}`);
7233
+ }
7234
+ parsed.browserMode = value;
7235
+ continue;
7236
+ }
7180
7237
  if (arg === "--use-cookies") {
7181
7238
  parsed.useCookies = true;
7182
7239
  continue;
@@ -7244,6 +7301,7 @@ async function runResearchCommand(args) {
7244
7301
  timeoutMs: parsed.timeoutMs ?? DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS,
7245
7302
  outputDir: parsed.outputDir,
7246
7303
  ttlHours: parsed.ttlHours,
7304
+ browserMode: parsed.browserMode,
7247
7305
  useCookies: parsed.useCookies,
7248
7306
  challengeAutomationMode: parsed.challengeAutomationMode,
7249
7307
  cookiePolicyOverride: parsed.cookiePolicyOverride
@@ -7260,7 +7318,7 @@ async function runResearchCommand(args) {
7260
7318
  var SORT_VALUES = /* @__PURE__ */ new Set(["best_deal", "lowest_price", "highest_rating", "fastest_shipping"]);
7261
7319
  var MODE_VALUES2 = /* @__PURE__ */ new Set(["compact", "json", "md", "context", "path"]);
7262
7320
  var COOKIE_POLICY_VALUES2 = /* @__PURE__ */ new Set(["off", "auto", "required"]);
7263
- var BROWSER_MODE_VALUES = /* @__PURE__ */ new Set(["auto", "extension", "managed"]);
7321
+ var BROWSER_MODE_VALUES3 = /* @__PURE__ */ new Set(["auto", "extension", "managed"]);
7264
7322
  var SHOPPING_TRANSPORT_TIMEOUT_BUFFER_MS = 6e4;
7265
7323
  var deriveShoppingTransportTimeoutMs = (timeoutMs) => {
7266
7324
  return Math.max(
@@ -7329,7 +7387,7 @@ var parseShoppingRunArgs = (rawArgs) => {
7329
7387
  }
7330
7388
  if (arg === "--browser-mode") {
7331
7389
  const value = requireValue9(rawArgs, index, "--browser-mode").toLowerCase();
7332
- if (!BROWSER_MODE_VALUES.has(value)) {
7390
+ if (!BROWSER_MODE_VALUES3.has(value)) {
7333
7391
  throw createUsageError(`Invalid --browser-mode: ${value}`);
7334
7392
  }
7335
7393
  parsed.browserMode = value;
@@ -7338,7 +7396,7 @@ var parseShoppingRunArgs = (rawArgs) => {
7338
7396
  }
7339
7397
  if (arg?.startsWith("--browser-mode=")) {
7340
7398
  const value = (arg.split("=", 2)[1] ?? "").toLowerCase();
7341
- if (!BROWSER_MODE_VALUES.has(value)) {
7399
+ if (!BROWSER_MODE_VALUES3.has(value)) {
7342
7400
  throw createUsageError(`Invalid --browser-mode: ${value}`);
7343
7401
  }
7344
7402
  parsed.browserMode = value;
@@ -7498,6 +7556,7 @@ var parseBoolean3 = (value, flag) => {
7498
7556
  throw createUsageError(`Invalid ${flag}: ${value}`);
7499
7557
  };
7500
7558
  var COOKIE_POLICY_VALUES3 = /* @__PURE__ */ new Set(["off", "auto", "required"]);
7559
+ var BROWSER_MODE_VALUES4 = /* @__PURE__ */ new Set(["auto", "extension", "managed"]);
7501
7560
  var parseProductVideoArgs = (rawArgs) => {
7502
7561
  const parsed = {};
7503
7562
  for (let index = 0; index < rawArgs.length; index += 1) {
@@ -7580,6 +7639,23 @@ var parseProductVideoArgs = (rawArgs) => {
7580
7639
  parsed.timeoutMs = parseNumberFlag(arg.split("=", 2)[1] ?? "", "--timeout-ms", { min: 1 });
7581
7640
  continue;
7582
7641
  }
7642
+ if (arg === "--browser-mode") {
7643
+ const value = requireValue10(rawArgs, index, "--browser-mode").toLowerCase();
7644
+ if (!BROWSER_MODE_VALUES4.has(value)) {
7645
+ throw createUsageError(`Invalid --browser-mode: ${value}`);
7646
+ }
7647
+ parsed.browserMode = value;
7648
+ index += 1;
7649
+ continue;
7650
+ }
7651
+ if (arg?.startsWith("--browser-mode=")) {
7652
+ const value = (arg.split("=", 2)[1] ?? "").toLowerCase();
7653
+ if (!BROWSER_MODE_VALUES4.has(value)) {
7654
+ throw createUsageError(`Invalid --browser-mode: ${value}`);
7655
+ }
7656
+ parsed.browserMode = value;
7657
+ continue;
7658
+ }
7583
7659
  if (arg === "--use-cookies") {
7584
7660
  parsed.useCookies = true;
7585
7661
  continue;
@@ -7645,6 +7721,7 @@ async function runProductVideoCommand(args) {
7645
7721
  output_dir: parsed.outputDir,
7646
7722
  ttl_hours: parsed.ttlHours,
7647
7723
  timeoutMs,
7724
+ browserMode: parsed.browserMode,
7648
7725
  useCookies: parsed.useCookies,
7649
7726
  challengeAutomationMode: parsed.challengeAutomationMode,
7650
7727
  cookiePolicyOverride: parsed.cookiePolicyOverride
@@ -7660,6 +7737,7 @@ async function runProductVideoCommand(args) {
7660
7737
  var MODE_VALUES3 = /* @__PURE__ */ new Set(["compact", "json", "md", "context", "path"]);
7661
7738
  var CAPTURE_MODE_VALUES = /* @__PURE__ */ new Set(["off", "deep"]);
7662
7739
  var COOKIE_POLICY_VALUES4 = /* @__PURE__ */ new Set(["off", "auto", "required"]);
7740
+ var BROWSER_MODE_VALUES5 = /* @__PURE__ */ new Set(["auto", "extension", "managed"]);
7663
7741
  var requireValue11 = (rawArgs, index, flag) => {
7664
7742
  const value = rawArgs[index + 1];
7665
7743
  if (!value) {
@@ -7750,6 +7828,23 @@ var parseInspiredesignRunArgs = (rawArgs) => {
7750
7828
  parsed.ttlHours = parseNumberFlag(arg.split("=", 2)[1] ?? "", "--ttl-hours", { min: 1, max: 168 });
7751
7829
  continue;
7752
7830
  }
7831
+ if (arg === "--browser-mode") {
7832
+ const value = requireValue11(rawArgs, index, "--browser-mode").toLowerCase();
7833
+ if (!BROWSER_MODE_VALUES5.has(value)) {
7834
+ throw createUsageError(`Invalid --browser-mode: ${value}`);
7835
+ }
7836
+ parsed.browserMode = value;
7837
+ index += 1;
7838
+ continue;
7839
+ }
7840
+ if (arg?.startsWith("--browser-mode=")) {
7841
+ const value = (arg.split("=", 2)[1] ?? "").toLowerCase();
7842
+ if (!BROWSER_MODE_VALUES5.has(value)) {
7843
+ throw createUsageError(`Invalid --browser-mode: ${value}`);
7844
+ }
7845
+ parsed.browserMode = value;
7846
+ continue;
7847
+ }
7753
7848
  if (arg === "--use-cookies") {
7754
7849
  parsed.useCookies = true;
7755
7850
  continue;
@@ -7813,6 +7908,7 @@ async function runInspiredesignCommand(args) {
7813
7908
  timeoutMs: parsed.timeoutMs ?? DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS,
7814
7909
  outputDir: parsed.outputDir,
7815
7910
  ttlHours: parsed.ttlHours,
7911
+ browserMode: parsed.browserMode,
7816
7912
  useCookies: parsed.useCookies,
7817
7913
  challengeAutomationMode: parsed.challengeAutomationMode,
7818
7914
  cookiePolicyOverride: parsed.cookiePolicyOverride
@@ -7827,7 +7923,7 @@ async function runInspiredesignCommand(args) {
7827
7923
  // package.json
7828
7924
  var package_default = {
7829
7925
  name: "opendevbrowser",
7830
- version: "0.0.27",
7926
+ version: "0.0.28",
7831
7927
  description: "Browser automation runtime with snapshot-refs-actions, browser replay screencasts, public read-only desktop observation, and browser-scoped computer-use orchestration",
7832
7928
  type: "module",
7833
7929
  main: "dist/index.js",
@@ -8109,14 +8205,15 @@ async function promptUninstallMode() {
8109
8205
  });
8110
8206
  }
8111
8207
  function emitFatalError(error, outputFormat) {
8208
+ const message = buildProviderFollowupErrorMessage(error.message);
8112
8209
  if (outputFormat === "text") {
8113
- console.error(`Error: ${error.message}`);
8210
+ console.error(`Error: ${message}`);
8114
8211
  if (error.exitCode === EXIT_USAGE) {
8115
8212
  console.error("\nFor help: npx opendevbrowser --help");
8116
8213
  }
8117
8214
  return;
8118
8215
  }
8119
- writeOutput(formatErrorPayload(error), { format: outputFormat });
8216
+ writeOutput({ ...formatErrorPayload(error), error: message }, { format: outputFormat });
8120
8217
  }
8121
8218
  async function main() {
8122
8219
  let outputFormat = null;